2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
# include "cafPdmField.h"
2013-11-01 16:54:24 +01:00
# include "MainWindow.h"
2017-09-08 14:43:14 +02:00
# include "CustomObjectEditor.h"
# include "ManyGroups.h"
2013-11-01 16:54:24 +01:00
# include "WidgetLayoutTest.h"
2017-11-02 08:50:07 +01:00
# include "MenuItemProducer.h"
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
2013-11-01 16:54:24 +01:00
# include "cafAppEnum.h"
2015-07-29 14:19:43 +02:00
# ifdef TAP_USE_COMMAND_FRAMEWORK
# include "cafCmdExecCommandManager.h"
# include "cafCmdSelectionHelper.h"
# include "cafCmdFeatureManager.h"
# endif
2018-01-11 13:50:22 +01:00
# include "cafFilePath.h"
# include "cafPdmDocument.h"
2015-07-29 14:19:43 +02:00
# include "cafPdmObject.h"
2015-08-13 14:16:41 +02:00
# include "cafPdmObjectGroup.h"
# include "cafPdmProxyValueField.h"
# include "cafPdmPtrField.h"
# include "cafPdmReferenceHelper.h"
2018-01-11 13:50:22 +01:00
# include "cafPdmUiComboBoxEditor.h"
2013-11-01 16:54:24 +01:00
# include "cafPdmUiFilePathEditor.h"
2018-09-25 14:19:03 +02:00
# include "cafPdmUiOrdering.h"
2018-01-11 13:50:22 +01:00
# include "cafPdmUiItem.h"
2013-11-01 16:54:24 +01:00
# include "cafPdmUiListEditor.h"
2015-07-29 14:19:43 +02:00
# include "cafPdmUiPropertyView.h"
2018-01-11 13:50:22 +01:00
# include "cafPdmUiPushButtonEditor.h"
2015-07-29 14:19:43 +02:00
# include "cafPdmUiTableView.h"
2018-06-11 13:36:15 +02:00
# include "cafPdmUiTableViewEditor.h"
2013-11-01 16:54:24 +01:00
# include "cafPdmUiTextEditor.h"
2018-01-11 13:50:22 +01:00
# include "cafPdmUiTreeSelectionEditor.h"
2015-07-29 14:19:43 +02:00
# include "cafPdmUiTreeView.h"
# include "cafSelectionManager.h"
2013-11-01 16:54:24 +01:00
2018-01-11 13:50:22 +01:00
# include <QAction>
# include <QDockWidget>
# include <QFileDialog>
# include <QMenuBar>
# include <QTreeView>
# include <QUndoView>
2013-11-01 16:54:24 +01:00
2018-01-11 13:50:22 +01:00
class DemoPdmObjectGroup : public caf : : PdmDocument
2013-11-01 16:54:24 +01:00
{
CAF_PDM_HEADER_INIT ;
public :
DemoPdmObjectGroup ( )
{
2018-01-11 13:50:22 +01:00
CAF_PDM_InitFieldNoDefault ( & objects , " PdmObjects " , " " , " " , " " , " " )
2015-08-13 14:16:41 +02:00
objects . uiCapability ( ) - > setUiHidden ( true ) ;
2013-11-01 16:54:24 +01:00
}
2018-01-11 13:50:22 +01:00
public :
caf : : PdmChildArrayField < PdmObjectHandle * > objects ;
2013-11-01 16:54:24 +01:00
} ;
CAF_PDM_SOURCE_INIT ( DemoPdmObjectGroup , " DemoPdmObjectGroup " ) ;
class SmallDemoPdmObject : public caf : : PdmObject
{
CAF_PDM_HEADER_INIT ;
public :
SmallDemoPdmObject ( )
{
CAF_PDM_InitObject ( " Small Demo Object " , " :/images/win/filenew.png " , " This object is a demo of the CAF framework " , " This object is a demo of the CAF framework " ) ;
2017-09-07 07:32:42 +02:00
CAF_PDM_InitField ( & m_toggleField , " Toggle " , false , " Add Items To Multi Select " , " " , " Toggle Field tooltip " , " Toggle Field whatsthis " ) ;
2013-11-01 16:54:24 +01:00
CAF_PDM_InitField ( & m_doubleField , " BigNumber " , 0.0 , " Big Number " , " " , " Enter a big number here " , " This is a place you can enter a big real value if you want " ) ;
2018-06-15 12:50:01 +02:00
m_doubleField . uiCapability ( ) - > setCustomContextMenuEnabled ( true ) ;
2013-11-01 16:54:24 +01:00
CAF_PDM_InitField ( & m_intField , " IntNumber " , 0 , " Small Number " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_textField , " TextField " , QString ( " " ) , " Text " , " " , " Text tooltip " , " This is a place you can enter a small integer value if you want " ) ;
2015-07-29 14:19:43 +02:00
m_proxyDoubleField . registerSetMethod ( this , & SmallDemoPdmObject : : setDoubleMember ) ;
m_proxyDoubleField . registerGetMethod ( this , & SmallDemoPdmObject : : doubleMember ) ;
CAF_PDM_InitFieldNoDefault ( & m_proxyDoubleField , " ProxyDouble " , " Proxy Double " , " " , " " , " " ) ;
2018-01-11 13:50:22 +01:00
CAF_PDM_InitField ( & m_fileName , " FileName " , caf : : FilePath ( " filename " ) , " File Name " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( & m_fileNameList , " FileNameList " , " File Name List " , " " , " " , " " ) ;
m_fileNameList . uiCapability ( ) - > setUiEditorTypeName ( caf : : PdmUiListEditor : : uiEditorTypeName ( ) ) ;
2015-07-29 14:19:43 +02:00
m_proxyDoubleField = 0 ;
if ( ! ( m_proxyDoubleField = = 3 ) ) { std : : cout < < " Double is not 3 " < < std : : endl ; }
2017-09-07 07:09:14 +02:00
CAF_PDM_InitFieldNoDefault ( & m_multiSelectList , " SelectedItems " , " Multi Select Field " , " " , " " , " " ) ;
2017-03-13 07:39:36 +01:00
m_multiSelectList . xmlCapability ( ) - > setIOReadable ( false ) ;
m_multiSelectList . xmlCapability ( ) - > setIOWritable ( false ) ;
2017-09-05 13:29:38 +02:00
m_multiSelectList . uiCapability ( ) - > setUiEditorTypeName ( caf : : PdmUiTreeSelectionEditor : : uiEditorTypeName ( ) ) ;
m_multiSelectList . v ( ) . push_back ( " First " ) ;
m_multiSelectList . v ( ) . push_back ( " Second " ) ;
m_multiSelectList . v ( ) . push_back ( " Third " ) ;
2013-11-01 16:54:24 +01:00
}
2015-07-29 14:19:43 +02:00
2013-11-01 16:54:24 +01:00
caf : : PdmField < double > m_doubleField ;
caf : : PdmField < int > m_intField ;
caf : : PdmField < QString > m_textField ;
2018-09-25 14:19:03 +02:00
2015-07-29 14:19:43 +02:00
caf : : PdmProxyValueField < double > m_proxyDoubleField ;
2018-01-11 13:50:22 +01:00
caf : : PdmField < caf : : FilePath > m_fileName ;
caf : : PdmField < std : : vector < caf : : FilePath > > m_fileNameList ;
2015-07-29 14:19:43 +02:00
2017-03-13 07:39:36 +01:00
caf : : PdmField < std : : vector < QString > > m_multiSelectList ;
2018-01-11 13:50:22 +01:00
2015-07-29 14:19:43 +02:00
caf : : PdmField < bool > m_toggleField ;
2018-10-18 16:35:51 +02:00
caf : : PdmFieldHandle * objectToggleField ( ) override
2015-07-29 14:19:43 +02:00
{
return & m_toggleField ;
}
2018-10-18 16:35:51 +02:00
void fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue ) override
2015-07-29 14:19:43 +02:00
{
if ( changedField = = & m_toggleField )
{
std : : cout < < " Toggle Field changed " < < std : : endl ;
}
}
void setDoubleMember ( const double & d ) { m_doubleMember = d ; std : : cout < < " setDoubleMember " < < std : : endl ; }
double doubleMember ( ) const { std : : cout < < " doubleMember " < < std : : endl ; return m_doubleMember ; }
2017-09-05 13:29:38 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
QList < caf : : PdmOptionItemInfo > calculateValueOptions ( const caf : : PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly ) override
2017-09-05 13:29:38 +02:00
{
QList < caf : : PdmOptionItemInfo > options ;
2017-09-06 14:46:32 +02:00
if ( fieldNeedingOptions = = & m_multiSelectList )
{
QString text ;
2017-09-05 13:29:38 +02:00
2017-09-06 14:46:32 +02:00
text = " First " ;
options . push_back ( caf : : PdmOptionItemInfo ( text , text ) ) ;
2017-09-05 13:29:38 +02:00
2017-09-06 14:46:32 +02:00
text = " Second " ;
2017-09-07 14:39:15 +02:00
options . push_back ( caf : : PdmOptionItemInfo : : createHeader ( text , false , QIcon ( QString ( " :/images/win/textbold.png " ) ) ) ) ;
2017-09-05 13:29:38 +02:00
2017-09-06 14:46:32 +02:00
{
text = " Second_a " ;
2017-09-08 07:47:23 +02:00
caf : : PdmOptionItemInfo itemInfo = caf : : PdmOptionItemInfo ( text , text , true ) ;
2017-09-06 14:46:32 +02:00
itemInfo . setLevel ( 1 ) ;
options . push_back ( itemInfo ) ;
}
2017-09-05 13:29:38 +02:00
2017-09-06 14:46:32 +02:00
{
text = " Second_b " ;
2017-09-07 14:39:15 +02:00
caf : : PdmOptionItemInfo itemInfo = caf : : PdmOptionItemInfo ( text , text , false , QIcon ( QString ( " :/images/win/filenew.png " ) ) ) ;
2017-09-06 14:46:32 +02:00
itemInfo . setLevel ( 1 ) ;
options . push_back ( itemInfo ) ;
}
2017-09-05 13:29:38 +02:00
2017-09-07 07:32:42 +02:00
int additionalSubItems = 2 ;
for ( auto i = 0 ; i < additionalSubItems ; i + + )
2017-09-06 14:46:32 +02:00
{
text = " Second_b_ " + QString : : number ( i ) ;
caf : : PdmOptionItemInfo itemInfo = caf : : PdmOptionItemInfo ( text , text ) ;
itemInfo . setLevel ( 1 ) ;
options . push_back ( itemInfo ) ;
}
2017-09-05 13:29:38 +02:00
2017-09-07 07:32:42 +02:00
static int s_additionalSubItems = 0 ;
if ( m_toggleField ( ) )
{
s_additionalSubItems + + ;
}
for ( auto i = 0 ; i < s_additionalSubItems ; i + + )
2017-09-06 14:46:32 +02:00
{
text = " Second_b_ " + QString : : number ( i ) ;
caf : : PdmOptionItemInfo itemInfo = caf : : PdmOptionItemInfo ( text , text ) ;
itemInfo . setLevel ( 1 ) ;
options . push_back ( itemInfo ) ;
}
2017-09-05 13:29:38 +02:00
2017-09-06 14:46:32 +02:00
text = " Third " ;
options . push_back ( caf : : PdmOptionItemInfo ( text , text ) ) ;
text = " Fourth " ;
options . push_back ( caf : : PdmOptionItemInfo ( text , text ) ) ;
}
2017-09-05 13:29:38 +02:00
return options ;
}
2018-06-15 12:50:01 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
void defineCustomContextMenu ( const caf : : PdmFieldHandle * fieldNeedingMenu ,
2018-06-15 12:50:01 +02:00
QMenu * menu ,
QWidget * fieldEditorWidget ) override
{
menu - > addAction ( " test " ) ;
menu - > addAction ( " other test <<>> " ) ;
}
2015-07-29 14:19:43 +02:00
private :
double m_doubleMember ;
2017-08-28 15:14:15 +02:00
protected :
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
void defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering ) override
2017-08-28 15:14:15 +02:00
{
uiOrdering . add ( & m_doubleField ) ;
uiOrdering . add ( & m_intField ) ;
QString dynamicGroupName = QString ( " Dynamic Group Text (%1) " ) . arg ( m_intField ) ;
caf : : PdmUiGroup * group = uiOrdering . addNewGroupWithKeyword ( dynamicGroupName , " MyTest " ) ;
group - > add ( & m_textField ) ;
group - > add ( & m_proxyDoubleField ) ;
}
2013-11-01 16:54:24 +01:00
} ;
CAF_PDM_SOURCE_INIT ( SmallDemoPdmObject , " SmallDemoPdmObject " ) ;
2018-09-25 14:19:03 +02:00
class SmallGridDemoPdmObject : public caf : : PdmObject
{
CAF_PDM_HEADER_INIT ;
public :
SmallGridDemoPdmObject ( )
{
CAF_PDM_InitObject ( " Small Grid Demo Object " , " " , " This object is a demo of the CAF framework " , " This object is a demo of the CAF framework " ) ;
CAF_PDM_InitField ( & m_intFieldStandard , " Standard " , 0 , " Standard " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldUseFullSpace , " FullSpace " , 0 , " Use Full Space For Both " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldUseFullSpaceLabel , " FullSpaceLabel " , 0 , " Total 3, Label MAX " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldUseFullSpaceField , " FullSpaceField " , 0 , " Total MAX, Label 1 " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldWideLabel , " WideLabel " , 0 , " Wide Label " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldWideField , " WideField " , 0 , " Wide Field " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldLeft , " LeftField " , 0 , " Left Field " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldRight , " RightField " , 0 , " Right Field With More Text " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldWideBoth , " WideBoth " , 0 , " Wide Both " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldWideBoth2 , " WideBoth2 " , 0 , " Wide Both " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldLeft2 , " LeftFieldInGrp " , 0 , " Left Field " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldCenter , " CenterFieldInGrp " , 0 , " Center Field " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldRight2 , " RightFieldInGrp " , 0 , " Right Field " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldLabelTop , " FieldLabelTop " , 0 , " Field Label Top " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
m_intFieldLabelTop . uiCapability ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : TOP ) ;
CAF_PDM_InitField ( & m_stringFieldLabelHidden , " FieldLabelHidden " , QString ( " Hidden Label Field " ) , " Field Label Hidden " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
m_stringFieldLabelHidden . uiCapability ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : HIDDEN ) ;
CAF_PDM_InitField ( & m_intFieldWideBothAuto , " WideBothAuto " , 0 , " Wide " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldLeftAuto , " LeftFieldInGrpAuto " , 0 , " Left Field " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldCenterAuto , " CenterFieldInGrpAuto " , 0 , " Center Field " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldRightAuto , " RightFieldInGrpAuto " , 0 , " Right Field " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldLabelTopAuto , " FieldLabelTopAuto " , 0 , " Field Label Top " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
m_intFieldLabelTopAuto . uiCapability ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : TOP ) ;
CAF_PDM_InitField ( & m_stringFieldLabelHiddenAuto , " FieldLabelHiddenAuto " , QString ( " Hidden Label Field " ) , " Field Label Hidden " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
m_stringFieldLabelHiddenAuto . uiCapability ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : HIDDEN ) ;
CAF_PDM_InitField ( & m_intFieldLeftOfGroup , " FieldLeftOfGrp " , 0 , " Left of group " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldRightOfGroup , " FieldRightOfGrp " , 0 , " Right of group wide label " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldInsideGroup1 , " FieldInGrp1 " , 0 , " Inside Group " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldInsideGroup2 , " FieldInGrp2 " , 0 , " Inside Group " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldInsideGroup3 , " FieldInGrp3 " , 0 , " Inside Group " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldInsideGroup4 , " FieldInGrp4 " , 0 , " Inside Group " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldInsideGroup5 , " FieldInGrp5 " , 0 , " Inside Group " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_intFieldInsideGroup6 , " FieldInGrp6 " , 0 , " Inside Group " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
}
// Outside group
caf : : PdmField < int > m_intFieldStandard ;
caf : : PdmField < int > m_intFieldUseFullSpace ;
caf : : PdmField < int > m_intFieldUseFullSpaceLabel ;
caf : : PdmField < int > m_intFieldUseFullSpaceField ;
caf : : PdmField < int > m_intFieldWideLabel ;
caf : : PdmField < int > m_intFieldWideField ;
caf : : PdmField < int > m_intFieldWideBoth ;
caf : : PdmField < int > m_intFieldLeft ;
caf : : PdmField < int > m_intFieldRight ;
// First group
caf : : PdmField < int > m_intFieldWideBoth2 ;
caf : : PdmField < int > m_intFieldLeft2 ;
caf : : PdmField < int > m_intFieldCenter ;
caf : : PdmField < int > m_intFieldRight2 ;
caf : : PdmField < int > m_intFieldLabelTop ;
caf : : PdmField < QString > m_stringFieldLabelHidden ;
// Auto group
caf : : PdmField < int > m_intFieldWideBothAuto ;
caf : : PdmField < int > m_intFieldLeftAuto ;
caf : : PdmField < int > m_intFieldCenterAuto ;
caf : : PdmField < int > m_intFieldRightAuto ;
caf : : PdmField < int > m_intFieldLabelTopAuto ;
caf : : PdmField < QString > m_stringFieldLabelHiddenAuto ;
// Combination with groups
caf : : PdmField < int > m_intFieldLeftOfGroup ;
caf : : PdmField < int > m_intFieldRightOfGroup ;
caf : : PdmField < int > m_intFieldInsideGroup1 ;
caf : : PdmField < int > m_intFieldInsideGroup2 ;
// Side-by-side groups
caf : : PdmField < int > m_intFieldInsideGroup3 ;
caf : : PdmField < int > m_intFieldInsideGroup4 ;
caf : : PdmField < int > m_intFieldInsideGroup5 ;
caf : : PdmField < int > m_intFieldInsideGroup6 ;
protected :
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
void defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering ) override
2018-09-25 14:19:03 +02:00
{
uiOrdering . add ( & m_intFieldStandard ) ;
uiOrdering . add ( & m_intFieldUseFullSpace , caf : : PdmUiOrdering : : LayoutOptions ( true , caf : : PdmUiOrdering : : LayoutOptions : : MAX_COLUMN_SPAN , caf : : PdmUiOrdering : : LayoutOptions : : MAX_COLUMN_SPAN ) ) ;
uiOrdering . add ( & m_intFieldUseFullSpaceLabel , caf : : PdmUiOrdering : : LayoutOptions ( true , 3 , caf : : PdmUiOrdering : : LayoutOptions : : MAX_COLUMN_SPAN ) ) ;
uiOrdering . add ( & m_intFieldUseFullSpaceField , caf : : PdmUiOrdering : : LayoutOptions ( true , caf : : PdmUiOrdering : : LayoutOptions : : MAX_COLUMN_SPAN , 1 ) ) ;
uiOrdering . add ( & m_intFieldWideLabel , caf : : PdmUiOrdering : : LayoutOptions ( true , 4 , 3 ) ) ;
uiOrdering . add ( & m_intFieldWideField , caf : : PdmUiOrdering : : LayoutOptions ( true , 4 , 1 ) ) ;
uiOrdering . add ( & m_intFieldLeft , caf : : PdmUiOrdering : : LayoutOptions ( true ) ) ;
uiOrdering . add ( & m_intFieldRight , caf : : PdmUiOrdering : : LayoutOptions ( false ) ) ;
uiOrdering . add ( & m_intFieldWideBoth , caf : : PdmUiOrdering : : LayoutOptions ( true , 4 , 2 ) ) ;
QString dynamicGroupName = QString ( " Dynamic Group Text (%1) " ) . arg ( m_intFieldStandard ) ;
caf : : PdmUiGroup * group = uiOrdering . addNewGroup ( " Wide Group " , { true , 4 } ) ;
group - > add ( & m_intFieldWideBoth2 , caf : : PdmUiOrdering : : LayoutOptions ( true , 6 , 3 ) ) ;
group - > add ( & m_intFieldLeft2 , caf : : PdmUiOrdering : : LayoutOptions ( true ) ) ;
group - > add ( & m_intFieldCenter , caf : : PdmUiOrdering : : LayoutOptions ( false ) ) ;
group - > add ( & m_intFieldRight2 , caf : : PdmUiOrdering : : LayoutOptions ( false ) ) ;
group - > add ( & m_intFieldLabelTop , caf : : PdmUiOrdering : : LayoutOptions ( true , 6 ) ) ;
group - > add ( & m_stringFieldLabelHidden , caf : : PdmUiOrdering : : LayoutOptions ( true , 6 ) ) ;
caf : : PdmUiGroup * autoGroup = uiOrdering . addNewGroup ( " Automatic Full Width Group " , caf : : PdmUiOrdering : : LayoutOptions ( true ) ) ;
autoGroup - > add ( & m_intFieldWideBothAuto , caf : : PdmUiOrdering : : LayoutOptions ( true ) ) ;
autoGroup - > add ( & m_intFieldLeftAuto , caf : : PdmUiOrdering : : LayoutOptions ( true ) ) ;
autoGroup - > add ( & m_intFieldCenterAuto , false ) ;
autoGroup - > add ( & m_intFieldRightAuto , caf : : PdmUiOrdering : : LayoutOptions ( false ) ) ;
autoGroup - > add ( & m_intFieldLabelTopAuto , true ) ;
autoGroup - > add ( & m_stringFieldLabelHiddenAuto , true ) ;
uiOrdering . add ( & m_intFieldLeftOfGroup ) ;
caf : : PdmUiGroup * group2 = uiOrdering . addNewGroup ( " Right Group " , caf : : PdmUiOrdering : : LayoutOptions ( false , 2 , 0 ) ) ;
group2 - > setEnableFrame ( false ) ;
group2 - > add ( & m_intFieldInsideGroup1 ) ;
caf : : PdmUiGroup * group3 = uiOrdering . addNewGroup ( " Narrow L " , caf : : PdmUiOrdering : : LayoutOptions ( true , 1 ) ) ;
group3 - > add ( & m_intFieldInsideGroup2 ) ;
uiOrdering . add ( & m_intFieldRightOfGroup , caf : : PdmUiOrdering : : LayoutOptions ( false , 3 , 2 ) ) ;
caf : : PdmUiGroup * groupL = uiOrdering . addNewGroup ( " Left Group " , caf : : PdmUiOrdering : : LayoutOptions ( true , 1 ) ) ;
groupL - > add ( & m_intFieldInsideGroup3 ) ;
groupL - > add ( & m_intFieldInsideGroup5 ) ;
caf : : PdmUiGroup * groupR = uiOrdering . addNewGroup ( " Right Wide Group " , caf : : PdmUiOrdering : : LayoutOptions ( false , 3 ) ) ;
groupR - > setEnableFrame ( false ) ;
groupR - > add ( & m_intFieldInsideGroup4 ) ;
groupR - > add ( & m_intFieldInsideGroup6 ) ;
}
} ;
CAF_PDM_SOURCE_INIT ( SmallGridDemoPdmObject , " SmallGridDemoPdmObject " ) ;
2019-04-04 15:58:32 +02:00
class SingleEditorPdmObject : public caf : : PdmObject
{
CAF_PDM_HEADER_INIT ;
public :
SingleEditorPdmObject ( )
{
CAF_PDM_InitObject ( " Single Editor Object " ,
" " ,
" This object is a demo of the CAF framework " ,
" This object is a demo of the CAF framework " ) ;
CAF_PDM_InitField ( & m_intFieldStandard ,
" Standard " ,
0 ,
" Fairly Wide Label " ,
" " ,
" Enter some small number here " ,
" This is a place you can enter a small integer value if you want " ) ;
}
// Outside group
caf : : PdmField < int > m_intFieldStandard ;
protected :
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering ) override
{
uiOrdering . add ( & m_intFieldStandard ) ;
}
} ;
CAF_PDM_SOURCE_INIT ( SingleEditorPdmObject , " SingleEditorObject " ) ;
2013-11-01 16:54:24 +01:00
class SmallDemoPdmObjectA : public caf : : PdmObject
{
CAF_PDM_HEADER_INIT ;
public :
enum TestEnumType
{
T1 , T2 , T3
} ;
SmallDemoPdmObjectA ( )
{
CAF_PDM_InitObject ( " Small Demo Object A " , " " , " This object is a demo of the CAF framework " , " This object is a demo of the CAF framework " ) ;
2015-07-29 14:19:43 +02:00
CAF_PDM_InitField ( & m_toggleField , " Toggle " , false , " Toggle Field " , " " , " Toggle Field tooltip " , " Toggle Field whatsthis " ) ;
2017-10-11 19:39:32 +02:00
CAF_PDM_InitField ( & m_pushButtonField , " Push " , false , " Button Field " , " " , " " , " " ) ;
2013-11-01 16:54:24 +01:00
CAF_PDM_InitField ( & m_doubleField , " BigNumber " , 0.0 , " Big Number " , " " , " Enter a big number here " , " This is a place you can enter a big real value if you want " ) ;
CAF_PDM_InitField ( & m_intField , " IntNumber " , 0 , " Small Number " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
2015-07-29 14:19:43 +02:00
CAF_PDM_InitField ( & m_textField , " TextField " , QString ( " Small Demo Object A " ) , " Name Text Field " , " " , " " , " " ) ;
CAF_PDM_InitField ( & m_testEnumField , " TestEnumValue " , caf : : AppEnum < TestEnumType > ( T1 ) , " EnumField " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( & m_ptrField , " m_ptrField " , " PtrField " , " " , " " , " " ) ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
CAF_PDM_InitFieldNoDefault ( & m_proxyEnumField , " ProxyEnumValue " , " ProxyEnum " , " " , " " , " " ) ;
m_proxyEnumField . registerSetMethod ( this , & SmallDemoPdmObjectA : : setEnumMember ) ;
m_proxyEnumField . registerGetMethod ( this , & SmallDemoPdmObjectA : : enumMember ) ;
m_proxyEnumMember = T2 ;
m_testEnumField . capability < caf : : PdmUiFieldHandle > ( ) - > setUiEditorTypeName ( caf : : PdmUiListEditor : : uiEditorTypeName ( ) ) ;
2017-09-20 09:57:16 +02:00
CAF_PDM_InitFieldNoDefault ( & m_multipleAppEnum , " MultipleAppEnumValue " , " MultipleAppEnumValue " , " " , " " , " " ) ;
m_multipleAppEnum . capability < caf : : PdmUiFieldHandle > ( ) - > setUiEditorTypeName ( caf : : PdmUiTreeSelectionEditor : : uiEditorTypeName ( ) ) ;
CAF_PDM_InitFieldNoDefault ( & m_highlightedEnum , " HighlightedEnum " , " HighlightedEnum " , " " , " " , " " ) ;
m_highlightedEnum . uiCapability ( ) - > setUiHidden ( true ) ;
2013-11-01 16:54:24 +01:00
}
caf : : PdmField < double > m_doubleField ;
caf : : PdmField < int > m_intField ;
caf : : PdmField < QString > m_textField ;
caf : : PdmField < caf : : AppEnum < TestEnumType > > m_testEnumField ;
2015-07-29 14:19:43 +02:00
caf : : PdmPtrField < SmallDemoPdmObjectA * > m_ptrField ;
caf : : PdmProxyValueField < caf : : AppEnum < TestEnumType > > m_proxyEnumField ;
void setEnumMember ( const caf : : AppEnum < TestEnumType > & val ) { m_proxyEnumMember = val ; }
caf : : AppEnum < TestEnumType > enumMember ( ) const { return m_proxyEnumMember ; }
TestEnumType m_proxyEnumMember ;
2017-09-20 09:57:16 +02:00
// vector of app enum
caf : : PdmField < std : : vector < caf : : AppEnum < TestEnumType > > > m_multipleAppEnum ;
caf : : PdmField < caf : : AppEnum < TestEnumType > > m_highlightedEnum ;
2015-07-29 14:19:43 +02:00
caf : : PdmField < bool > m_toggleField ;
2017-10-11 19:39:32 +02:00
caf : : PdmField < bool > m_pushButtonField ;
2018-10-18 16:35:51 +02:00
caf : : PdmFieldHandle * objectToggleField ( ) override
2015-07-29 14:19:43 +02:00
{
return & m_toggleField ;
}
2018-10-18 16:35:51 +02:00
void fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue ) override
2015-07-29 14:19:43 +02:00
{
if ( changedField = = & m_toggleField )
{
std : : cout < < " Toggle Field changed " < < std : : endl ;
}
2017-09-20 09:57:16 +02:00
else if ( changedField = = & m_highlightedEnum )
{
std : : cout < < " Highlight value " < < m_highlightedEnum ( ) < < std : : endl ;
}
2017-10-11 19:39:32 +02:00
else if ( changedField = = & m_pushButtonField )
{
std : : cout < < " Push Button pressed " < < std : : endl ;
}
2015-07-29 14:19:43 +02:00
}
2018-10-18 16:35:51 +02:00
QList < caf : : PdmOptionItemInfo > calculateValueOptions ( const caf : : PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly ) override
2015-07-29 14:19:43 +02:00
{
QList < caf : : PdmOptionItemInfo > options ;
if ( & m_ptrField = = fieldNeedingOptions )
{
caf : : PdmFieldHandle * field ;
std : : vector < caf : : PdmObjectHandle * > objects ;
field = this - > parentField ( ) ;
field - > childObjects ( & objects ) ;
for ( size_t i = 0 ; i < objects . size ( ) ; + + i )
{
QString userDesc ;
caf : : PdmUiObjectHandle * uiObject = caf : : uiObj ( objects [ i ] ) ;
if ( uiObject )
{
if ( uiObject - > userDescriptionField ( ) )
{
2015-10-23 15:21:23 +02:00
caf : : PdmUiFieldHandle * uiFieldHandle = uiObject - > userDescriptionField ( ) - > uiCapability ( ) ;
if ( uiFieldHandle )
{
userDesc = uiFieldHandle - > uiValue ( ) . toString ( ) ;
}
}
2015-07-29 14:19:43 +02:00
options . push_back ( caf : : PdmOptionItemInfo ( uiObject - > uiName ( ) + " ( " + userDesc + " ) " , QVariant : : fromValue ( caf : : PdmPointer < caf : : PdmObjectHandle > ( objects [ i ] ) ) ) ) ;
}
}
}
2017-09-20 09:57:16 +02:00
else if ( & m_multipleAppEnum = = fieldNeedingOptions )
{
for ( size_t i = 0 ; i < caf : : AppEnum < TestEnumType > : : size ( ) ; + + i )
{
options . push_back ( caf : : PdmOptionItemInfo ( caf : : AppEnum < TestEnumType > : : uiTextFromIndex ( i ) , caf : : AppEnum < TestEnumType > : : fromIndex ( i ) ) ) ;
}
}
2015-07-29 14:19:43 +02:00
if ( useOptionsOnly ) * useOptionsOnly = true ;
return options ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
caf : : PdmFieldHandle * userDescriptionField ( ) override
2015-07-29 14:19:43 +02:00
{
return & m_textField ;
}
2013-11-01 16:54:24 +01:00
2017-09-20 09:57:16 +02:00
protected :
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
void defineEditorAttribute ( const caf : : PdmFieldHandle * field , QString uiConfigName , caf : : PdmUiEditorAttribute * attribute ) override
2017-09-20 09:57:16 +02:00
{
if ( field = = & m_multipleAppEnum )
{
caf : : PdmUiTreeSelectionEditorAttribute * attr = dynamic_cast < caf : : PdmUiTreeSelectionEditorAttribute * > ( attribute ) ;
if ( attr )
{
2017-09-20 12:34:14 +02:00
attr - > fieldToReceiveCurrentItemValue = & m_highlightedEnum ;
2017-09-20 09:57:16 +02:00
}
}
2017-11-30 08:37:49 +01:00
else if ( field = = & m_proxyEnumField )
{
caf : : PdmUiComboBoxEditorAttribute * attr = dynamic_cast < caf : : PdmUiComboBoxEditorAttribute * > ( attribute ) ;
if ( attr )
{
attr - > showPreviousAndNextButtons = true ;
}
}
2017-09-20 09:57:16 +02:00
}
2017-10-11 19:39:32 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
void defineObjectEditorAttribute ( QString uiConfigName , caf : : PdmUiEditorAttribute * attribute ) override
2017-10-11 19:39:32 +02:00
{
2018-06-13 11:41:32 +02:00
caf : : PdmUiTableViewPushButtonEditorAttribute * attr = dynamic_cast < caf : : PdmUiTableViewPushButtonEditorAttribute * > ( attribute ) ;
2017-10-11 19:39:32 +02:00
if ( attr )
{
attr - > registerPushButtonTextForFieldKeyword ( m_pushButtonField . keyword ( ) , " Edit " ) ;
}
}
2013-11-01 16:54:24 +01:00
} ;
CAF_PDM_SOURCE_INIT ( SmallDemoPdmObjectA , " SmallDemoPdmObjectA " ) ;
namespace caf
{
template < >
void AppEnum < SmallDemoPdmObjectA : : TestEnumType > : : setUp ( )
{
addItem ( SmallDemoPdmObjectA : : T1 , " T1 " , " An A letter " ) ;
addItem ( SmallDemoPdmObjectA : : T2 , " T2 " , " A B letter " ) ;
addItem ( SmallDemoPdmObjectA : : T3 , " T3 " , " A B C letter " ) ;
setDefault ( SmallDemoPdmObjectA : : T1 ) ;
}
}
Q_DECLARE_METATYPE ( caf : : AppEnum < SmallDemoPdmObjectA : : TestEnumType > ) ;
class DemoPdmObject : public caf : : PdmObject
{
CAF_PDM_HEADER_INIT ;
public :
DemoPdmObject ( )
{
CAF_PDM_InitObject ( " Demo Object " , " " , " This object is a demo of the CAF framework " , " This object is a demo of the CAF framework " ) ;
2015-07-29 14:19:43 +02:00
CAF_PDM_InitField ( & m_toggleField , " Toggle " , false , " Toggle Field " , " " , " Toggle Field tooltip " , " Toggle Field whatsthis " ) ;
2013-11-01 16:54:24 +01:00
CAF_PDM_InitField ( & m_doubleField , " BigNumber " , 0.0 , " Big Number " , " " , " Enter a big number here " , " This is a place you can enter a big real value if you want " ) ;
CAF_PDM_InitField ( & m_intField , " IntNumber " , 0 , " Small Number " , " " , " Enter some small number here " , " This is a place you can enter a small integer value if you want " ) ;
CAF_PDM_InitField ( & m_boolField , " BooleanValue " , false , " Boolean: " , " " , " Boolean:Enter some small number here " , " Boolean:This is a place you can enter a small integer value if you want " ) ;
2015-12-22 14:10:50 +01:00
CAF_PDM_InitField ( & m_textField , " TextField " , QString ( " Demo Object Description Field " ) , " Description Field " , " " , " " , " " ) ;
2013-11-01 16:54:24 +01:00
CAF_PDM_InitField ( & m_filePath , " FilePath " , QString ( " " ) , " Filename " , " " , " " , " " ) ;
CAF_PDM_InitField ( & m_longText , " LongText " , QString ( " Test text " ) , " Long Text " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( & m_multiSelectList , " MultiSelect " , " Selection List " , " " , " List " , " This is a multi selection list " ) ;
2015-07-29 14:19:43 +02:00
CAF_PDM_InitFieldNoDefault ( & m_objectList , " ObjectList " , " Objects list Field " , " " , " List " , " This is a list of PdmObjects " ) ;
CAF_PDM_InitFieldNoDefault ( & m_objectListOfSameType , " m_objectListOfSameType " , " Same type Objects list Field " , " " , " Same type List " , " Same type list of PdmObjects " ) ;
2018-06-11 13:36:15 +02:00
m_objectListOfSameType . uiCapability ( ) - > setUiEditorTypeName ( caf : : PdmUiTableViewEditor : : uiEditorTypeName ( ) ) ;
2018-06-15 12:50:01 +02:00
m_objectListOfSameType . uiCapability ( ) - > setCustomContextMenuEnabled ( true ) ; ;
2015-07-29 14:19:43 +02:00
CAF_PDM_InitFieldNoDefault ( & m_ptrField , " m_ptrField " , " PtrField " , " " , " Same type List " , " Same type list of PdmObjects " ) ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
m_filePath . capability < caf : : PdmUiFieldHandle > ( ) - > setUiEditorTypeName ( caf : : PdmUiFilePathEditor : : uiEditorTypeName ( ) ) ;
m_filePath . capability < caf : : PdmUiFieldHandle > ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : TOP ) ;
m_longText . capability < caf : : PdmUiFieldHandle > ( ) - > setUiEditorTypeName ( caf : : PdmUiTextEditor : : uiEditorTypeName ( ) ) ;
m_longText . capability < caf : : PdmUiFieldHandle > ( ) - > setUiLabelPosition ( caf : : PdmUiItemInfo : : HIDDEN ) ;
2013-11-01 16:54:24 +01:00
2017-11-02 08:50:07 +01:00
m_menuItemProducer = new MenuItemProducer ;
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
void defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering ) override
2013-11-01 16:54:24 +01:00
{
2018-06-15 12:50:01 +02:00
uiOrdering . add ( & m_objectListOfSameType ) ;
2015-07-29 14:19:43 +02:00
uiOrdering . add ( & m_ptrField ) ;
2013-11-01 16:54:24 +01:00
uiOrdering . add ( & m_boolField ) ;
caf : : PdmUiGroup * group1 = uiOrdering . addNewGroup ( " Name1 " ) ;
group1 - > add ( & m_doubleField ) ;
caf : : PdmUiGroup * group2 = uiOrdering . addNewGroup ( " Name2 " ) ;
group2 - > add ( & m_intField ) ;
caf : : PdmUiGroup * group3 = group2 - > addNewGroup ( " Name3 " ) ;
2018-06-15 12:50:01 +02:00
//group3->add(&m_textField);
2013-11-01 16:54:24 +01:00
2018-06-15 12:50:01 +02:00
uiOrdering . skipRemainingFields ( ) ;
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
QList < caf : : PdmOptionItemInfo > calculateValueOptions ( const caf : : PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly ) override
2013-11-01 16:54:24 +01:00
{
QList < caf : : PdmOptionItemInfo > options ;
if ( & m_multiSelectList = = fieldNeedingOptions )
{
options . push_back ( caf : : PdmOptionItemInfo ( " Choice 1 " , " Choice1 " ) ) ;
options . push_back ( caf : : PdmOptionItemInfo ( " Choice 2 " , " Choice2 " ) ) ;
options . push_back ( caf : : PdmOptionItemInfo ( " Choice 3 " , " Choice3 " ) ) ;
options . push_back ( caf : : PdmOptionItemInfo ( " Choice 4 " , " Choice4 " ) ) ;
options . push_back ( caf : : PdmOptionItemInfo ( " Choice 5 " , " Choice5 " ) ) ;
options . push_back ( caf : : PdmOptionItemInfo ( " Choice 6 " , " Choice6 " ) ) ;
}
2015-07-29 14:19:43 +02:00
if ( & m_ptrField = = fieldNeedingOptions )
{
for ( size_t i = 0 ; i < m_objectListOfSameType . size ( ) ; + + i )
{
caf : : PdmUiObjectHandle * uiObject = caf : : uiObj ( m_objectListOfSameType [ i ] ) ;
if ( uiObject )
{
options . push_back ( caf : : PdmOptionItemInfo ( uiObject - > uiName ( ) , QVariant : : fromValue ( caf : : PdmPointer < caf : : PdmObjectHandle > ( m_objectListOfSameType [ i ] ) ) ) ) ;
}
}
}
2013-11-01 16:54:24 +01:00
if ( useOptionsOnly ) * useOptionsOnly = true ;
return options ;
}
2015-07-29 14:19:43 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
caf : : PdmFieldHandle * userDescriptionField ( ) override
2015-07-29 14:19:43 +02:00
{
return & m_textField ;
}
2013-11-01 16:54:24 +01:00
// Fields
caf : : PdmField < bool > m_boolField ;
caf : : PdmField < double > m_doubleField ;
caf : : PdmField < int > m_intField ;
caf : : PdmField < QString > m_textField ;
caf : : PdmField < QString > m_filePath ;
caf : : PdmField < QString > m_longText ;
caf : : PdmField < std : : vector < QString > > m_multiSelectList ;
2015-07-29 14:19:43 +02:00
caf : : PdmChildArrayField < caf : : PdmObjectHandle * > m_objectList ;
caf : : PdmChildArrayField < SmallDemoPdmObjectA * > m_objectListOfSameType ;
caf : : PdmPtrField < SmallDemoPdmObjectA * > m_ptrField ;
caf : : PdmField < bool > m_toggleField ;
2017-11-02 08:50:07 +01:00
MenuItemProducer * m_menuItemProducer ;
2018-10-18 16:35:51 +02:00
caf : : PdmFieldHandle * objectToggleField ( ) override
2015-07-29 14:19:43 +02:00
{
return & m_toggleField ;
}
2018-10-18 16:35:51 +02:00
void fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue ) override
2015-07-29 14:19:43 +02:00
{
if ( changedField = = & m_toggleField )
{
std : : cout < < " Toggle Field changed " < < std : : endl ;
}
}
2017-11-02 08:50:07 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
void onEditorWidgetsCreated ( ) override
2017-11-02 08:50:07 +01:00
{
for ( auto e : m_longText . uiCapability ( ) - > connectedEditors ( ) )
{
caf : : PdmUiTextEditor * textEditor = dynamic_cast < caf : : PdmUiTextEditor * > ( e ) ;
if ( ! textEditor ) continue ;
QWidget * containerWidget = textEditor - > editorWidget ( ) ;
if ( ! containerWidget ) continue ;
for ( auto qObj : containerWidget - > children ( ) )
{
QTextEdit * textEdit = dynamic_cast < QTextEdit * > ( qObj ) ;
if ( textEdit )
{
m_menuItemProducer - > attachTextEdit ( textEdit ) ;
}
}
}
}
2018-06-15 12:50:01 +02:00
protected :
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-10-18 16:35:51 +02:00
void defineCustomContextMenu ( const caf : : PdmFieldHandle * fieldNeedingMenu , QMenu * menu , QWidget * fieldEditorWidget ) override
2018-06-15 12:50:01 +02:00
{
if ( fieldNeedingMenu = = & m_objectListOfSameType )
{
2018-06-29 08:05:38 +02:00
caf : : PdmUiTableView : : addActionsToMenu ( menu , & m_objectListOfSameType ) ;
2018-06-15 12:50:01 +02:00
}
}
2013-11-01 16:54:24 +01:00
} ;
CAF_PDM_SOURCE_INIT ( DemoPdmObject , " DemoPdmObject " ) ;
2018-02-18 18:05:08 +01:00
MainWindow * MainWindow : : sm_mainWindowInstance = nullptr ;
2013-11-01 16:54:24 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
MainWindow : : MainWindow ( )
{
2017-11-08 11:28:28 +01:00
caf : : PdmUiItem : : enableExtraDebugText ( true ) ;
2015-07-29 14:19:43 +02:00
// Initialize command framework
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
// Register default command features (add/delete item in list)
2017-09-08 16:32:45 +02:00
QPixmap pix ;
pix . load ( " :/images/curvePlot.png " ) ;
m_plotLabel = new QLabel ( this ) ;
m_plotLabel - > setPixmap ( pix . scaled ( 250 , 100 ) ) ;
m_smallPlotLabel = new QLabel ( this ) ;
m_smallPlotLabel - > setPixmap ( pix . scaled ( 100 , 50 ) ) ;
2013-11-01 16:54:24 +01:00
createActions ( ) ;
createDockPanels ( ) ;
buildTestModel ( ) ;
2017-09-08 16:32:45 +02:00
2013-11-01 16:54:24 +01:00
setPdmRoot ( m_testRoot ) ;
sm_mainWindowInstance = this ;
2015-07-29 14:19:43 +02:00
caf : : SelectionManager : : instance ( ) - > setPdmRootObject ( m_testRoot ) ;
# ifdef TAP_USE_COMMAND_FRAMEWORK
caf : : CmdExecCommandManager : : instance ( ) - > enableUndoCommandSystem ( true ) ;
undoView - > setStack ( caf : : CmdExecCommandManager : : instance ( ) - > undoStack ( ) ) ;
# endif
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : createDockPanels ( )
{
{
2015-07-29 14:19:43 +02:00
QDockWidget * dockWidget = new QDockWidget ( " PdmTreeView - controls property view " , this ) ;
2013-11-01 16:54:24 +01:00
dockWidget - > setObjectName ( " dockWidget " ) ;
dockWidget - > setAllowedAreas ( Qt : : LeftDockWidgetArea | Qt : : RightDockWidgetArea ) ;
2015-07-29 14:19:43 +02:00
m_pdmUiTreeView = new caf : : PdmUiTreeView ( dockWidget ) ;
dockWidget - > setWidget ( m_pdmUiTreeView ) ;
2013-11-01 16:54:24 +01:00
addDockWidget ( Qt : : LeftDockWidgetArea , dockWidget ) ;
}
2015-07-29 14:19:43 +02:00
2017-09-08 14:43:14 +02:00
{
QDockWidget * dockWidget = new QDockWidget ( " CustomObjectEditor " , this ) ;
dockWidget - > setObjectName ( " dockWidget " ) ;
dockWidget - > setAllowedAreas ( Qt : : LeftDockWidgetArea | Qt : : RightDockWidgetArea ) ;
m_customObjectEditor = new caf : : CustomObjectEditor ;
QWidget * w = m_customObjectEditor - > getOrCreateWidget ( this ) ;
dockWidget - > setWidget ( w ) ;
addDockWidget ( Qt : : RightDockWidgetArea , dockWidget ) ;
}
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02:00
QDockWidget * dockWidget = new QDockWidget ( " cafPropertyView " , this ) ;
2013-11-01 16:54:24 +01:00
dockWidget - > setObjectName ( " dockWidget " ) ;
dockWidget - > setAllowedAreas ( Qt : : LeftDockWidgetArea | Qt : : RightDockWidgetArea ) ;
2015-07-29 14:19:43 +02:00
m_pdmUiPropertyView = new caf : : PdmUiPropertyView ( dockWidget ) ;
dockWidget - > setWidget ( m_pdmUiPropertyView ) ;
2013-11-01 16:54:24 +01:00
addDockWidget ( Qt : : LeftDockWidgetArea , dockWidget ) ;
}
{
2015-07-29 14:19:43 +02:00
QDockWidget * dockWidget = new QDockWidget ( " PdmTreeView2 - controls table view " , this ) ;
2013-11-01 16:54:24 +01:00
dockWidget - > setObjectName ( " dockWidget " ) ;
dockWidget - > setAllowedAreas ( Qt : : LeftDockWidgetArea | Qt : : RightDockWidgetArea ) ;
2015-07-29 14:19:43 +02:00
m_pdmUiTreeView2 = new caf : : PdmUiTreeView ( dockWidget ) ;
m_pdmUiTreeView2 - > enableDefaultContextMenu ( true ) ;
2015-08-24 18:22:16 +02:00
m_pdmUiTreeView2 - > enableSelectionManagerUpdating ( true ) ;
2015-07-29 14:19:43 +02:00
dockWidget - > setWidget ( m_pdmUiTreeView2 ) ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
addDockWidget ( Qt : : RightDockWidgetArea , dockWidget ) ;
}
{
QDockWidget * dockWidget = new QDockWidget ( " cafTableView " , this ) ;
dockWidget - > setObjectName ( " dockWidget " ) ;
dockWidget - > setAllowedAreas ( Qt : : LeftDockWidgetArea | Qt : : RightDockWidgetArea ) ;
m_pdmUiTableView = new caf : : PdmUiTableView ( dockWidget ) ;
dockWidget - > setWidget ( m_pdmUiTableView ) ;
addDockWidget ( Qt : : RightDockWidgetArea , dockWidget ) ;
}
{
QDockWidget * dockWidget = new QDockWidget ( " Undo stack " , this ) ;
dockWidget - > setObjectName ( " dockWidget " ) ;
dockWidget - > setAllowedAreas ( Qt : : LeftDockWidgetArea | Qt : : RightDockWidgetArea ) ;
undoView = new QUndoView ( this ) ;
dockWidget - > setWidget ( undoView ) ;
addDockWidget ( Qt : : RightDockWidgetArea , dockWidget ) ;
2013-11-01 16:54:24 +01:00
}
2015-07-29 14:19:43 +02:00
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : buildTestModel ( )
{
m_testRoot = new DemoPdmObjectGroup ;
2017-09-08 14:43:14 +02:00
ManyGroups * manyGroups = new ManyGroups ;
m_testRoot - > objects . push_back ( manyGroups ) ;
2013-11-01 16:54:24 +01:00
DemoPdmObject * demoObject = new DemoPdmObject ;
2015-08-13 14:16:41 +02:00
m_testRoot - > objects . push_back ( demoObject ) ;
2013-11-01 16:54:24 +01:00
SmallDemoPdmObject * smallObj1 = new SmallDemoPdmObject ;
2015-08-13 14:16:41 +02:00
m_testRoot - > objects . push_back ( smallObj1 ) ;
2013-11-01 16:54:24 +01:00
SmallDemoPdmObjectA * smallObj2 = new SmallDemoPdmObjectA ;
2015-08-13 14:16:41 +02:00
m_testRoot - > objects . push_back ( smallObj2 ) ;
2013-11-01 16:54:24 +01:00
2018-09-25 14:19:03 +02:00
SmallGridDemoPdmObject * smallGridObj = new SmallGridDemoPdmObject ;
m_testRoot - > objects . push_back ( smallGridObj ) ;
2019-04-04 15:58:32 +02:00
SingleEditorPdmObject * singleEditorObj = new SingleEditorPdmObject ;
m_testRoot - > objects . push_back ( singleEditorObj ) ;
2015-07-29 14:19:43 +02:00
DemoPdmObject * demoObj2 = new DemoPdmObject ;
demoObject - > m_textField = " Mitt Demo Obj " ;
demoObject - > m_objectList . push_back ( demoObj2 ) ;
2013-11-01 16:54:24 +01:00
demoObject - > m_objectList . push_back ( new SmallDemoPdmObjectA ( ) ) ;
2015-07-29 14:19:43 +02:00
SmallDemoPdmObject * smallObj3 = new SmallDemoPdmObject ( ) ;
demoObject - > m_objectList . push_back ( smallObj3 ) ;
2013-11-01 16:54:24 +01:00
demoObject - > m_objectList . push_back ( new SmallDemoPdmObject ( ) ) ;
2015-07-29 14:19:43 +02:00
demoObject - > m_objectListOfSameType . push_back ( new SmallDemoPdmObjectA ( ) ) ;
demoObject - > m_objectListOfSameType . push_back ( new SmallDemoPdmObjectA ( ) ) ;
demoObject - > m_objectListOfSameType . push_back ( new SmallDemoPdmObjectA ( ) ) ;
demoObject - > m_objectListOfSameType . push_back ( new SmallDemoPdmObjectA ( ) ) ;
demoObj2 - > m_objectList . push_back ( new SmallDemoPdmObjectA ( ) ) ;
demoObj2 - > m_objectList . push_back ( new SmallDemoPdmObjectA ( ) ) ;
demoObj2 - > m_objectList . push_back ( new SmallDemoPdmObject ( ) ) ;
delete smallObj3 ;
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-07-29 14:19:43 +02:00
void MainWindow : : setPdmRoot ( caf : : PdmObjectHandle * pdmRoot )
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02:00
caf : : PdmUiObjectHandle * uiObject = uiObj ( pdmRoot ) ;
2018-01-11 13:50:22 +01:00
m_pdmUiTreeView - > setPdmItem ( uiObject ) ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
connect ( m_pdmUiTreeView , SIGNAL ( selectionChanged ( ) ) , SLOT ( slotSimpleSelectionChanged ( ) ) ) ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
// Set up test of using a field as a root item
// Hack, because we know that pdmRoot is a PdmObjectGroup ...
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
std : : vector < caf : : PdmFieldHandle * > fields ;
2018-01-11 13:50:22 +01:00
if ( pdmRoot )
{
pdmRoot - > fields ( fields ) ;
}
2015-07-29 14:19:43 +02:00
if ( fields . size ( ) )
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02:00
caf : : PdmFieldHandle * field = fields [ 0 ] ;
2015-10-23 15:21:23 +02:00
caf : : PdmUiFieldHandle * uiFieldHandle = field - > uiCapability ( ) ;
2015-07-29 14:19:43 +02:00
if ( uiFieldHandle )
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02:00
m_pdmUiTreeView2 - > setPdmItem ( uiFieldHandle ) ;
uiFieldHandle - > updateConnectedEditors ( ) ;
2013-11-01 16:54:24 +01:00
}
}
2015-07-29 14:19:43 +02:00
2018-01-11 13:50:22 +01:00
m_pdmUiTreeView2 - > setPdmItem ( uiObject ) ;
2015-07-29 14:19:43 +02:00
connect ( m_pdmUiTreeView2 , SIGNAL ( selectionChanged ( ) ) , SLOT ( slotShowTableView ( ) ) ) ;
2017-09-08 14:43:14 +02:00
// Wire up ManyGroups object
std : : vector < ManyGroups * > obj ;
2018-01-11 13:50:22 +01:00
if ( pdmRoot )
{
pdmRoot - > descendantsIncludingThisOfType ( obj ) ;
}
m_customObjectEditor - > removeWidget ( m_plotLabel ) ;
m_customObjectEditor - > removeWidget ( m_smallPlotLabel ) ;
2017-09-08 14:43:14 +02:00
if ( obj . size ( ) = = 1 )
{
m_customObjectEditor - > setPdmObject ( obj [ 0 ] ) ;
2017-09-08 16:32:45 +02:00
2018-01-11 13:50:22 +01:00
m_customObjectEditor - > defineGridLayout ( 5 , 4 ) ;
2017-09-08 16:32:45 +02:00
m_customObjectEditor - > addBlankCell ( 0 , 0 ) ;
m_customObjectEditor - > addWidget ( m_plotLabel , 0 , 1 , 1 , 2 ) ;
m_customObjectEditor - > addWidget ( m_smallPlotLabel , 1 , 2 , 2 , 1 ) ;
2017-09-08 14:43:14 +02:00
}
2018-01-11 13:50:22 +01:00
else
{
m_customObjectEditor - > setPdmObject ( nullptr ) ;
}
m_customObjectEditor - > updateUi ( ) ;
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
MainWindow : : ~ MainWindow ( )
{
2018-02-18 18:05:08 +01:00
m_pdmUiTreeView - > setPdmItem ( nullptr ) ;
m_pdmUiTreeView2 - > setPdmItem ( nullptr ) ;
m_pdmUiPropertyView - > showProperties ( nullptr ) ;
2018-06-11 15:00:45 +02:00
m_pdmUiTableView - > setChildArrayField ( nullptr ) ;
2017-10-26 07:20:03 +02:00
delete m_pdmUiTreeView ;
delete m_pdmUiTreeView2 ;
delete m_pdmUiPropertyView ;
delete m_pdmUiTableView ;
delete m_customObjectEditor ;
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : releaseTestData ( )
{
if ( m_testRoot )
{
2015-08-13 14:16:41 +02:00
m_testRoot - > objects . deleteAllChildObjects ( ) ;
2013-11-01 16:54:24 +01:00
delete m_testRoot ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
MainWindow * MainWindow : : instance ( )
{
return sm_mainWindowInstance ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : createActions ( )
{
2018-01-11 13:50:22 +01:00
{
QAction * loadAction = new QAction ( " Load Project " , this ) ;
QAction * saveAction = new QAction ( " Save Project " , this ) ;
2013-11-01 16:54:24 +01:00
2018-01-11 13:50:22 +01:00
connect ( loadAction , SIGNAL ( triggered ( ) ) , SLOT ( slotLoadProject ( ) ) ) ;
connect ( saveAction , SIGNAL ( triggered ( ) ) , SLOT ( slotSaveProject ( ) ) ) ;
2013-11-01 16:54:24 +01:00
2018-01-11 13:50:22 +01:00
QMenu * menu = menuBar ( ) - > addMenu ( " &File " ) ;
menu - > addAction ( loadAction ) ;
menu - > addAction ( saveAction ) ;
}
{
QAction * editInsert = new QAction ( " &Insert " , this ) ;
QAction * editRemove = new QAction ( " &Remove " , this ) ;
QAction * editRemoveAll = new QAction ( " Remove all " , this ) ;
2013-11-01 16:54:24 +01:00
2018-01-11 13:50:22 +01:00
connect ( editInsert , SIGNAL ( triggered ( ) ) , SLOT ( slotInsert ( ) ) ) ;
connect ( editRemove , SIGNAL ( triggered ( ) ) , SLOT ( slotRemove ( ) ) ) ;
connect ( editRemoveAll , SIGNAL ( triggered ( ) ) , SLOT ( slotRemoveAll ( ) ) ) ;
QMenu * menu = menuBar ( ) - > addMenu ( " &Edit " ) ;
menu - > addAction ( editInsert ) ;
menu - > addAction ( editRemove ) ;
menu - > addAction ( editRemoveAll ) ;
}
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : slotInsert ( )
{
2015-07-29 14:19:43 +02:00
std : : vector < caf : : PdmUiItem * > selection ;
2015-08-24 18:22:16 +02:00
m_pdmUiTreeView - > selectedUiItems ( selection ) ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
for ( size_t i = 0 ; i < selection . size ( ) ; + + i )
{
caf : : PdmUiFieldHandle * uiFh = dynamic_cast < caf : : PdmUiFieldHandle * > ( selection [ i ] ) ;
2018-02-18 18:05:08 +01:00
caf : : PdmChildArrayField < caf : : PdmObjectHandle * > * field = nullptr ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
if ( uiFh ) field = dynamic_cast < caf : : PdmChildArrayField < caf : : PdmObjectHandle * > * > ( uiFh - > fieldHandle ( ) ) ;
if ( field )
{
field - > push_back ( new DemoPdmObject ) ;
field - > capability < caf : : PdmUiFieldHandle > ( ) - > updateConnectedEditors ( ) ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
return ;
}
#if 0
caf : : PdmChildArrayFieldHandle * listField = NULL ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
if ( uiFh ) listField = dynamic_cast < caf : : PdmChildArrayFieldHandle * > ( uiFh - > fieldHandle ( ) ) ;
2013-11-01 16:54:24 +01:00
2015-07-29 14:19:43 +02:00
if ( listField )
{
caf : : PdmObjectHandle * obj = listField - > createAppendObject ( ) ;
listField - > capability < caf : : PdmUiFieldHandle > ( ) - > updateConnectedEditors ( ) ;
}
# endif
}
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : slotRemove ( )
{
2015-07-29 14:19:43 +02:00
std : : vector < caf : : PdmUiItem * > selection ;
2015-08-24 18:22:16 +02:00
m_pdmUiTreeView - > selectedUiItems ( selection ) ;
2015-07-29 14:19:43 +02:00
for ( size_t i = 0 ; i < selection . size ( ) ; + + i )
{
caf : : PdmObjectHandle * obj = dynamic_cast < caf : : PdmObjectHandle * > ( selection [ i ] ) ;
if ( obj )
{
caf : : PdmFieldHandle * field = obj - > parentField ( ) ;
// Ordering is important
field - > removeChildObject ( obj ) ;
// Delete object
delete obj ;
// Update editors
2015-08-24 18:22:16 +02:00
field - > uiCapability ( ) - > updateConnectedEditors ( ) ;
2015-07-29 14:19:43 +02:00
break ;
}
}
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : slotRemoveAll ( )
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-07-29 14:19:43 +02:00
void MainWindow : : slotSimpleSelectionChanged ( )
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02:00
std : : vector < caf : : PdmUiItem * > selection ;
2015-08-24 18:22:16 +02:00
m_pdmUiTreeView - > selectedUiItems ( selection ) ;
2018-02-18 18:05:08 +01:00
caf : : PdmObjectHandle * obj = nullptr ;
caf : : PdmChildArrayFieldHandle * listField = nullptr ;
2015-07-29 14:19:43 +02:00
if ( selection . size ( ) )
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02:00
caf : : PdmUiObjectHandle * pdmUiObj = dynamic_cast < caf : : PdmUiObjectHandle * > ( selection [ 0 ] ) ;
2015-08-24 18:22:16 +02:00
if ( pdmUiObj ) obj = pdmUiObj - > objectHandle ( ) ;
2013-11-01 16:54:24 +01:00
}
2015-07-29 14:19:43 +02:00
m_pdmUiPropertyView - > showProperties ( obj ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : slotShowTableView ( )
{
std : : vector < caf : : PdmUiItem * > selection ;
2015-08-24 18:22:16 +02:00
m_pdmUiTreeView2 - > selectedUiItems ( selection ) ;
2018-02-18 18:05:08 +01:00
caf : : PdmObjectHandle * obj = nullptr ;
2018-06-11 12:55:26 +02:00
caf : : PdmUiFieldHandle * uiFieldHandle = nullptr ;
caf : : PdmChildArrayFieldHandle * childArrayFieldHandle = nullptr ;
2015-07-29 14:19:43 +02:00
if ( selection . size ( ) )
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02:00
caf : : PdmUiItem * pdmUiItem = selection [ 0 ] ;
2018-06-11 12:55:26 +02:00
uiFieldHandle = dynamic_cast < caf : : PdmUiFieldHandle * > ( pdmUiItem ) ;
if ( uiFieldHandle )
{
childArrayFieldHandle = dynamic_cast < caf : : PdmChildArrayFieldHandle * > ( uiFieldHandle - > fieldHandle ( ) ) ;
}
2015-07-29 14:19:43 +02:00
2018-06-11 12:55:26 +02:00
if ( childArrayFieldHandle )
2015-07-29 14:19:43 +02:00
{
2018-06-11 12:55:26 +02:00
if ( ! childArrayFieldHandle - > hasSameFieldCountForAllObjects ( ) )
2015-07-29 14:19:43 +02:00
{
2018-06-11 12:55:26 +02:00
uiFieldHandle = nullptr ;
2018-06-11 15:00:45 +02:00
childArrayFieldHandle = nullptr ;
2015-07-29 14:19:43 +02:00
}
}
2013-11-01 16:54:24 +01:00
}
2015-07-29 14:19:43 +02:00
2018-06-11 15:00:45 +02:00
m_pdmUiTableView - > setChildArrayField ( childArrayFieldHandle ) ;
2015-07-29 14:19:43 +02:00
2018-06-11 12:55:26 +02:00
if ( uiFieldHandle )
2015-08-24 18:22:16 +02:00
{
2018-06-11 12:55:26 +02:00
uiFieldHandle - > updateConnectedEditors ( ) ;
2015-08-24 18:22:16 +02:00
}
2013-11-01 16:54:24 +01:00
}
2018-01-11 13:50:22 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : slotLoadProject ( )
{
QString fileName = QFileDialog : : getOpenFileName ( nullptr , tr ( " Open Project File " ) , " test.proj " , " Project Files (*.proj);;All files(*.*) " ) ;
if ( ! fileName . isEmpty ( ) )
{
setPdmRoot ( nullptr ) ;
releaseTestData ( ) ;
m_testRoot = new DemoPdmObjectGroup ;
m_testRoot - > fileName = fileName ;
m_testRoot - > readFile ( ) ;
setPdmRoot ( m_testRoot ) ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow : : slotSaveProject ( )
{
QString fileName = QFileDialog : : getSaveFileName ( nullptr , tr ( " Save Project File " ) , " test.proj " , " Project Files (*.proj);;All files(*.*) " ) ;
if ( ! fileName . isEmpty ( ) )
{
m_testRoot - > fileName = fileName ;
m_testRoot - > writeFile ( ) ;
}
}