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"
# include <QDockWidget>
# include <QTreeView>
# include <QAction>
# include <QMenuBar>
2015-07-29 14:19:43 +02:00
# include <QUndoView>
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
# include "cafPdmObject.h"
2015-08-13 14:16:41 +02:00
# include "cafPdmObjectGroup.h"
# include "cafPdmProxyValueField.h"
# include "cafPdmPtrField.h"
# include "cafPdmReferenceHelper.h"
2013-11-01 16:54:24 +01:00
# include "cafPdmUiFilePathEditor.h"
# include "cafPdmUiListEditor.h"
2015-07-29 14:19:43 +02:00
# include "cafPdmUiPropertyView.h"
# include "cafPdmUiTableView.h"
2013-11-01 16:54:24 +01:00
# include "cafPdmUiTextEditor.h"
2015-07-29 14:19:43 +02:00
# include "cafPdmUiTreeView.h"
# include "cafSelectionManager.h"
2017-09-05 13:29:38 +02:00
# include "cafPdmUiTreeSelectionEditor.h"
2017-10-11 19:39:32 +02:00
# include "cafPdmUiPushButtonEditor.h"
2013-11-01 16:54:24 +01:00
2015-08-13 14:16:41 +02:00
class DemoPdmObjectGroup : public caf : : PdmObjectCollection
2013-11-01 16:54:24 +01:00
{
CAF_PDM_HEADER_INIT ;
public :
DemoPdmObjectGroup ( )
{
2015-08-13 14:16:41 +02:00
objects . uiCapability ( ) - > setUiHidden ( true ) ;
2015-07-29 14:19:43 +02:00
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 " ) ;
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 " , " " , " " , " " ) ;
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 ;
2015-07-29 14:19:43 +02:00
caf : : PdmProxyValueField < double > m_proxyDoubleField ;
2017-03-13 07:39:36 +01:00
caf : : PdmField < std : : vector < QString > > m_multiSelectList ;
2015-07-29 14:19:43 +02:00
caf : : PdmField < bool > m_toggleField ;
virtual caf : : PdmFieldHandle * objectToggleField ( )
{
return & m_toggleField ;
}
virtual void fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
{
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
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual QList < caf : : PdmOptionItemInfo > calculateValueOptions ( const caf : : PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly ) override
{
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 ;
}
2015-07-29 14:19:43 +02:00
private :
double m_doubleMember ;
2017-08-28 15:14:15 +02:00
protected :
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual void defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering ) override
{
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 " ) ;
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 ;
2015-07-29 14:19:43 +02:00
virtual caf : : PdmFieldHandle * objectToggleField ( )
{
return & m_toggleField ;
}
virtual void fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
{
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
}
virtual QList < caf : : PdmOptionItemInfo > calculateValueOptions ( const caf : : PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly )
{
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 ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual caf : : PdmFieldHandle * userDescriptionField ( )
{
return & m_textField ;
}
2013-11-01 16:54:24 +01:00
2017-09-20 09:57:16 +02:00
protected :
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual void defineEditorAttribute ( const caf : : PdmFieldHandle * field , QString uiConfigName , caf : : PdmUiEditorAttribute * attribute ) override
{
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-10-11 19:39:32 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual void defineObjectEditorAttribute ( QString uiConfigName , caf : : PdmUiEditorAttribute * attribute ) override
{
caf : : PdmUiTableViewEditorAttribute * attr = dynamic_cast < caf : : PdmUiTableViewEditorAttribute * > ( attribute ) ;
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 " ) ;
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
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual void defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering )
{
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 " ) ;
group3 - > add ( & m_textField ) ;
//uiConfig->add(&f3);
//uiConfig->forgetRemainingFields();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual QList < caf : : PdmOptionItemInfo > calculateValueOptions ( const caf : : PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly )
{
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
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual caf : : PdmFieldHandle * userDescriptionField ( )
{
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 ;
virtual caf : : PdmFieldHandle * objectToggleField ( )
{
return & m_toggleField ;
}
virtual void fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
{
if ( changedField = = & m_toggleField )
{
std : : cout < < " Toggle Field changed " < < std : : endl ;
}
}
2013-11-01 16:54:24 +01:00
} ;
CAF_PDM_SOURCE_INIT ( DemoPdmObject , " DemoPdmObject " ) ;
MainWindow * MainWindow : : sm_mainWindowInstance = NULL ;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
MainWindow : : MainWindow ( )
{
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 ) ;
m_pdmUiTableView - > setSelectionRole ( caf : : SelectionManager : : CURRENT ) ;
m_pdmUiTableView - > enableDefaultContextMenu ( true ) ;
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
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 ) ;
if ( uiObject )
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02: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 ;
pdmRoot - > fields ( fields ) ;
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
if ( uiObject )
{
m_pdmUiTreeView2 - > setPdmItem ( uiObject ) ;
}
connect ( m_pdmUiTreeView2 , SIGNAL ( selectionChanged ( ) ) , SLOT ( slotShowTableView ( ) ) ) ;
2017-09-08 14:43:14 +02:00
// Wire up ManyGroups object
std : : vector < ManyGroups * > obj ;
pdmRoot - > descendantsIncludingThisOfType ( obj ) ;
if ( obj . size ( ) = = 1 )
{
2017-09-12 08:10:51 +02:00
m_customObjectEditor - > defineGridLayout ( 5 , 4 ) ;
2017-09-08 14:43:14 +02:00
m_customObjectEditor - > setPdmObject ( obj [ 0 ] ) ;
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
m_customObjectEditor - > updateUi ( ) ;
}
2013-11-01 16:54:24 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
MainWindow : : ~ MainWindow ( )
{
2015-07-29 14:19:43 +02:00
m_pdmUiTreeView - > setPdmItem ( NULL ) ;
m_pdmUiTreeView2 - > setPdmItem ( NULL ) ;
m_pdmUiPropertyView - > showProperties ( NULL ) ;
m_pdmUiTableView - > setListField ( NULL ) ;
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 ( )
{
// Create actions
QAction * editInsert = new QAction ( " &Insert " , this ) ;
QAction * editRemove = new QAction ( " &Remove " , this ) ;
QAction * editRemoveAll = new QAction ( " Remove all " , this ) ;
connect ( editInsert , SIGNAL ( triggered ( ) ) , SLOT ( slotInsert ( ) ) ) ;
connect ( editRemove , SIGNAL ( triggered ( ) ) , SLOT ( slotRemove ( ) ) ) ;
connect ( editRemoveAll , SIGNAL ( triggered ( ) ) , SLOT ( slotRemoveAll ( ) ) ) ;
// Create menus
QMenu * editMenu = menuBar ( ) - > addMenu ( " &Edit " ) ;
editMenu - > addAction ( editInsert ) ;
editMenu - > addAction ( editRemove ) ;
editMenu - > addAction ( editRemoveAll ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
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 ] ) ;
caf : : PdmChildArrayField < caf : : PdmObjectHandle * > * field = NULL ;
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 ) ;
2015-07-29 14:19:43 +02:00
caf : : PdmObjectHandle * obj = NULL ;
caf : : PdmChildArrayFieldHandle * listField = NULL ;
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 ) ;
2015-07-29 14:19:43 +02:00
caf : : PdmObjectHandle * obj = NULL ;
caf : : PdmChildArrayFieldHandle * listField = NULL ;
if ( selection . size ( ) )
2013-11-01 16:54:24 +01:00
{
2015-07-29 14:19:43 +02:00
caf : : PdmUiItem * pdmUiItem = selection [ 0 ] ;
caf : : PdmUiFieldHandle * guiField = dynamic_cast < caf : : PdmUiFieldHandle * > ( pdmUiItem ) ;
if ( guiField ) listField = dynamic_cast < caf : : PdmChildArrayFieldHandle * > ( guiField - > fieldHandle ( ) ) ;
if ( listField )
{
if ( ! listField - > hasSameFieldCountForAllObjects ( ) )
{
listField = NULL ;
}
}
2013-11-01 16:54:24 +01:00
}
2015-07-29 14:19:43 +02:00
m_pdmUiTableView - > setListField ( listField ) ;
2015-08-24 18:22:16 +02:00
if ( listField )
{
listField - > uiCapability ( ) - > updateConnectedEditors ( ) ;
}
2013-11-01 16:54:24 +01:00
}