Copied in RPM/Fwk/AppFwk

Commented out use of stipple line, as VizFwk is not update yet
This commit is contained in:
Magne Sjaastad
2015-07-29 14:19:43 +02:00
parent 81cf711036
commit 58149cbdb9
283 changed files with 72838 additions and 4741 deletions

View File

@@ -1,30 +1,46 @@
cmake_minimum_required (VERSION 2.8)
find_package ( Qt4 COMPONENTS QtCore QtGui )
include (${QT_USE_FILE})
project ( cafProjectDataModel_UnitTests )
include_directories (
${CMAKE_SOURCE_DIR}/cafProjectDataModel
${CMAKE_SOURCE_DIR}/cafTests
#Remove when RigStatistics is out
${ResInsight_SOURCE_DIR}/ApplicationCode/ModelVisualization
)
# add the executable
add_executable (${PROJECT_NAME}
include_directories (
${cafPdmCore_SOURCE_DIR}
${cafPdmUiCore_SOURCE_DIR}
${cafPdmXml_SOURCE_DIR}
)
set( PROJECT_FILES
cafPdmBasicTest.cpp
cafProjectDataModel_UnitTests.cpp
Child.cpp
Parent.cpp
TestObj.cpp
)
# add the executable
add_executable (${PROJECT_NAME}
${PROJECT_FILES}
${CMAKE_SOURCE_DIR}/cafTests/gtest/gtest-all.cpp
)
message(${PROJECT_NAME}" - Qt includes : " ${QT_LIBRARIES})
target_link_libraries ( ${PROJECT_NAME}
cafPdmCore
cafPdmUiCore
cafPdmXml
cafProjectDataModel
${QT_LIBRARIES}
${QT_LIBRARIES}
)
source_group("" FILES ${PROJECT_FILES})
# Copy Qt Dlls
if (MSVC)

View File

@@ -1,6 +1,6 @@
#pragma once
#include "cafPdmField.h"
#include "cafPdmChildField.h"
#include "cafPdmObject.h"
#include "cafPdmPointer.h"
@@ -16,7 +16,7 @@ public:
~Child();
caf::PdmField<TestObj*> m_testObj;
caf::PdmChildField<TestObj*> m_testObj;
};

View File

@@ -1,11 +1,12 @@
#include "Child.h"
#include "Parent.h"
//#include "Child.h"
CAF_PDM_SOURCE_INIT(Parent, "Parent");
Parent::Parent()
{
CAF_PDM_InitObject("Parent", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_simpleObjectsField, "SimpleObjects", "A child object", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_simpleObjectF, "SimpleObject", "A child object", "", "", "");
}

View File

@@ -1,8 +1,9 @@
#pragma once
#include "cafPdmField.h"
#include "cafPdmChildField.h"
#include "cafPdmObject.h"
#include "cafPdmPointer.h"
#include "cafPdmChildArrayField.h"
#if 0
class PdmPointerTarget
@@ -47,6 +48,6 @@ public:
void doSome();
caf::PdmPointersField<Child*> m_simpleObjectsField;
caf::PdmField<Child*> m_simpleObjectF;
caf::PdmChildArrayField<Child*> m_simpleObjectsField;
caf::PdmChildField<Child*> m_simpleObjectF;
};

View File

@@ -42,9 +42,12 @@
#include "cafPdmPointer.h"
#include "cafPdmDocument.h"
#include "cafPdmChildField.h"
#include "cafAppEnum.h"
#include <memory>
#include <QFile>
#include "cafPdmReferenceHelper.h"
#include "cafPdmProxyValueField.h"
/// Demo objects to show the usage of the Pdm system
@@ -54,25 +57,33 @@ class SimpleObj: public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
SimpleObj()
SimpleObj() : PdmObject()
{
CAF_PDM_InitObject("Simple Object", "", "", "");
CAF_PDM_InitObject("SimpleObj", "", "Tooltip SimpleObj", "WhatsThis SimpleObj");
CAF_PDM_InitField(&m_position, "Position", 8765.2, "Position", "", "", "");
CAF_PDM_InitField(&m_dir, "Dir", 123.56, "Direction", "", "", "");
CAF_PDM_InitField(&m_up, "Up", 0.0, "Up value", "", "", "" );
CAF_PDM_InitFieldNoDefault(&m_numbers, "Numbers", "Important Numbers", "", "", "");
}
CAF_PDM_InitField(&m_position, "Position", 8765.2, "Position", "", "Tooltip", "WhatsThis");
CAF_PDM_InitField(&m_dir, "Dir", 123.56, "Direction", "", "Tooltip", "WhatsThis");
CAF_PDM_InitField(&m_up, "Up", 0.0, "Up value", "", "Tooltip", "WhatsThis" );
CAF_PDM_InitFieldNoDefault(&m_numbers, "Numbers", "Important Numbers", "", "Tooltip", "WhatsThis");
#if 1
m_proxyDouble.registerSetMethod(this, &SimpleObj::setDoubleMember);
m_proxyDouble.registerGetMethod(this, &SimpleObj::doubleMember);
AddUiCapabilityToField(&m_proxyDouble);
AddXmlCapabilityToField(&m_proxyDouble);
CAF_PDM_InitFieldNoDefault(&m_proxyDouble, "ProxyDouble", "ProxyDouble", "", "", "");
#endif
}
/// Assignment and copying of PDM objects is not focus for the features. This is only a
/// "would it work" test
SimpleObj(const SimpleObj& other)
: PdmObject()
{
CAF_PDM_InitField(&m_position, "Position", 8765.2, "Position", "", "", "");
CAF_PDM_InitField(&m_dir, "Dir", 123.56, "Direction", "", "", "");
CAF_PDM_InitField(&m_up, "Up", 0.0, "Up value", "", "", "" );
CAF_PDM_InitFieldNoDefault(&m_numbers, "Numbers", "Important Numbers", "", "", "");
CAF_PDM_InitField(&m_position, "Position", 8765.2, "Position", "", "", "WhatsThis");
CAF_PDM_InitField(&m_dir, "Dir", 123.56, "Direction", "", "", "WhatsThis");
CAF_PDM_InitField(&m_up, "Up", 0.0, "Up value", "", "", "WhatsThis" );
CAF_PDM_InitFieldNoDefault(&m_numbers, "Numbers", "Important Numbers", "", "", "WhatsThis");
m_position = other.m_position;
m_dir = other.m_dir;
@@ -87,6 +98,14 @@ public:
caf::PdmField<double> m_dir;
caf::PdmField<double> m_up;
caf::PdmField<std::vector<double> > m_numbers;
caf::PdmProxyValueField<double> m_proxyDouble;
void setDoubleMember(const double& d) { m_doubleMember = d; std::cout << "setDoubleMember" << std::endl; }
double doubleMember() const { std::cout << "doubleMember" << std::endl; return m_doubleMember; }
double m_doubleMember;
};
CAF_PDM_SOURCE_INIT(SimpleObj, "SimpleObj");
@@ -99,19 +118,19 @@ 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");
CAF_PDM_InitObject("DemoPdmObject", "", "Tooltip DemoPdmObject", "WhatsThis DemoPdmObject");
CAF_PDM_InitField(&m_doubleField, "BigNumber", 0.0, "Big Number", "",
CAF_PDM_InitField(&m_doubleField, "BigNumber", 0.0, "", "",
"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","",
CAF_PDM_InitField(&m_intField, "IntNumber", 0, "","",
"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("<EFBFBD><EFBFBD><EFBFBD> Test text end"), "", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_simpleObjPtrField, "SimpleObjPtrField", "", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_simpleObjPtrField2, "SimpleObjPtrField2", "", "", "", "");
CAF_PDM_InitField(&m_textField, "TextField", QString("<EFBFBD><EFBFBD><EFBFBD> Test text end"), "TextField", "", "Tooltip", "WhatsThis");
CAF_PDM_InitFieldNoDefault(&m_simpleObjPtrField, "SimpleObjPtrField", "SimpleObjPtrField", "", "Tooltip", "WhatsThis");
CAF_PDM_InitFieldNoDefault(&m_simpleObjPtrField2, "SimpleObjPtrField2", "SimpleObjPtrField2", "", "Tooltip", "WhatsThis");
m_simpleObjPtrField2 = new SimpleObj;
}
@@ -125,8 +144,8 @@ public:
caf::PdmField<int> m_intField;
caf::PdmField<QString> m_textField;
caf::PdmField<SimpleObj*> m_simpleObjPtrField;
caf::PdmField<SimpleObj*> m_simpleObjPtrField2;
caf::PdmChildField<SimpleObj*> m_simpleObjPtrField;
caf::PdmChildField<SimpleObj*> m_simpleObjPtrField2;
};
CAF_PDM_SOURCE_INIT(DemoPdmObject, "DemoPdmObject");
@@ -143,15 +162,17 @@ public:
InheritedDemoObj()
{
CAF_PDM_InitObject("InheritedDemoObj", "", "ToolTip InheritedDemoObj", "Whatsthis InheritedDemoObj");
CAF_PDM_InitFieldNoDefault(&m_texts, "Texts", "Some words", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_testEnumField, "TestEnumValue", "An Enum", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_simpleObjectsField, "SimpleObjects", "A child object", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_simpleObjectsField, "SimpleObjects", "SimpleObjectsField", "", "ToolTip SimpleObjectsField", "Whatsthis SimpleObjectsField");
}
caf::PdmField<std::vector<QString> > m_texts;
caf::PdmField< caf::AppEnum<TestEnumType> > m_testEnumField;
caf::PdmPointersField<SimpleObj*> m_simpleObjectsField;
caf::PdmChildArrayField<SimpleObj*> m_simpleObjectsField;
};
CAF_PDM_SOURCE_INIT(InheritedDemoObj, "InheritedDemoObj");
@@ -171,6 +192,13 @@ void AppEnum<InheritedDemoObj::TestEnumType>::setUp()
}
TEST(BaseTest, Delete)
{
SimpleObj* s2 = new SimpleObj;
delete s2;
}
//--------------------------------------------------------------------------------------------------
/// This is a testbed to try out different aspects, instead of having a main in a prototype program
/// To be disabled when everything gets more mature.
@@ -179,7 +207,7 @@ TEST(BaseTest, Start)
{
DemoPdmObject* a = new DemoPdmObject;
caf::PdmObject* demo = caf::PdmObjectFactory::instance()->create("DemoPdmObject");
caf::PdmObjectHandle* demo = caf::PdmDefaultObjectFactory::instance()->create("DemoPdmObject");
EXPECT_TRUE(demo != NULL);
QString xml;
@@ -196,7 +224,7 @@ TEST(BaseTest, Start)
s.m_dir = 10000;
sp = &s;
a->m_textField = "Hei og h<>";
*s2 = s;
//*s2 = s;
a->m_simpleObjPtrField = s2;
s.writeFields(xmlStream);
@@ -204,7 +232,7 @@ TEST(BaseTest, Start)
a->writeFields(xmlStream);
caf::PdmObjectGroup og;
og.objects.push_back(a);
og.objects.push_back(s2);
og.objects.push_back(new SimpleObj);
og.writeFields(xmlStream);
std::cout << sp.p() << std::endl,
@@ -246,6 +274,7 @@ TEST(BaseTest, NormalPdmField)
EXPECT_TRUE(field1 == field3);
}
#if 0
//--------------------------------------------------------------------------------------------------
/// Test of PdmField of pointer operations
//--------------------------------------------------------------------------------------------------
@@ -284,12 +313,13 @@ TEST(BaseTest, PointerPdmField)
EXPECT_EQ((SimpleObj*)0, field2);
EXPECT_EQ((SimpleObj*)0, field3);
}
#endif
//--------------------------------------------------------------------------------------------------
/// Test of PdmPointersField operations
//--------------------------------------------------------------------------------------------------
TEST(BaseTest, PdmPointersField)
#if 0
TEST(BaseTest, PdmChildArrayField)
{
std::vector<caf::PdmFieldHandle*> parentFields;
@@ -308,7 +338,7 @@ TEST(BaseTest, PdmPointersField)
ihd1->m_simpleObjectsField.push_back(s2);
ihd1->m_simpleObjectsField.push_back(s3);
s1->parentFields(parentFields);
s1->parentField(parentFields);
EXPECT_EQ(size_t(1), parentFields.size());
parentFields.clear();
@@ -321,7 +351,7 @@ TEST(BaseTest, PdmPointersField)
EXPECT_EQ(s3, ihd1->m_simpleObjectsField[2]);
// childObjects
std::vector<caf::PdmObject*> objects;
std::vector<caf::PdmObjectHandle*> objects;
ihd1->m_simpleObjectsField.childObjects(&objects);
EXPECT_EQ(size_t(3), objects.size());
@@ -378,6 +408,8 @@ TEST(BaseTest, PdmPointersField)
}
#endif
template <>
inline void GTestStreamToHelper<QString>(std::ostream* os, const QString& val) {
*os << val.toLatin1().data();
@@ -417,16 +449,23 @@ TEST(BaseTest, ReadWrite)
d2->m_simpleObjPtrField = &s2;
d2->m_simpleObjPtrField2 = s1;
id1->m_simpleObjectsField.push_back(s1);
id1->m_simpleObjectsField.push_back(&s2);
id1->m_simpleObjectsField.push_back(&s2);
id1->m_simpleObjectsField.push_back(&s2);
id1->m_simpleObjectsField.push_back(new SimpleObj);
id1->m_simpleObjectsField[0]->m_numbers.v().push_back(3.0);
id1->m_simpleObjectsField.push_back(new SimpleObj);
id1->m_simpleObjectsField[1]->m_numbers.v().push_back(3.1);
id1->m_simpleObjectsField[1]->m_numbers.v().push_back(3.11);
id1->m_simpleObjectsField[1]->m_numbers.v().push_back(3.12);
id1->m_simpleObjectsField[1]->m_numbers.v().push_back(3.13);
id1->m_simpleObjectsField.push_back(new SimpleObj);
id1->m_simpleObjectsField[2]->m_numbers.v().push_back(3.2);
id1->m_simpleObjectsField.push_back(new SimpleObj);
id1->m_simpleObjectsField[3]->m_numbers.v().push_back(3.3);
// Add to document
xmlDoc.addObject(d1);
xmlDoc.addObject(d2);
xmlDoc.addObject(s1);
xmlDoc.addObject(new SimpleObj);
xmlDoc.addObject(id1);
xmlDoc.addObject(id2);
@@ -470,7 +509,7 @@ TEST(BaseTest, ReadWrite)
EXPECT_EQ(size_t(2),ihDObjs.size() );
ASSERT_EQ(size_t(4), ihDObjs[0]->m_simpleObjectsField.size());
ASSERT_EQ(size_t(4), ihDObjs[0]->m_simpleObjectsField[1]->m_numbers().size());
EXPECT_EQ(2.7, ihDObjs[0]->m_simpleObjectsField[1]->m_numbers()[3]);
EXPECT_EQ(3.13, ihDObjs[0]->m_simpleObjectsField[1]->m_numbers()[3]);
EXPECT_EQ(QString("<EFBFBD><EFBFBD><EFBFBD> Test text end"), ihDObjs[0]->m_textField());
@@ -619,8 +658,6 @@ TEST(BaseTest, PdmPointer)
EXPECT_TRUE(p == d && p2 == d);
EXPECT_TRUE(p.p() == d);
EXPECT_TRUE((*p).uiName() == (*d).uiName());
EXPECT_TRUE(p->uiName() == "File");
p = 0;
EXPECT_TRUE(p == NULL);
EXPECT_TRUE(p.isNull());
@@ -646,30 +683,30 @@ TEST(BaseTest, PdmObjectFactory)
{
{
SimpleObj* s = NULL;
s = dynamic_cast<SimpleObj*> (caf::PdmObjectFactory::instance()->create("SimpleObj"));
s = dynamic_cast<SimpleObj*> (caf::PdmDefaultObjectFactory::instance()->create("SimpleObj"));
EXPECT_TRUE(s != NULL);
}
{
DemoPdmObject* s = NULL;
s = dynamic_cast<DemoPdmObject*> (caf::PdmObjectFactory::instance()->create("DemoPdmObject"));
s = dynamic_cast<DemoPdmObject*> (caf::PdmDefaultObjectFactory::instance()->create("DemoPdmObject"));
EXPECT_TRUE(s != NULL);
delete s;
}
{
InheritedDemoObj* s = NULL;
s = dynamic_cast<InheritedDemoObj*> (caf::PdmObjectFactory::instance()->create("InheritedDemoObj"));
s = dynamic_cast<InheritedDemoObj*> (caf::PdmDefaultObjectFactory::instance()->create("InheritedDemoObj"));
EXPECT_TRUE(s != NULL);
}
{
caf::PdmDocument* s = NULL;
s = dynamic_cast<caf::PdmDocument*> (caf::PdmObjectFactory::instance()->create("PdmDocument"));
s = dynamic_cast<caf::PdmDocument*> (caf::PdmDefaultObjectFactory::instance()->create("PdmDocument"));
EXPECT_TRUE(s != NULL);
}
{
caf::PdmObjectGroup* s = NULL;
s = dynamic_cast<caf::PdmObjectGroup*> (caf::PdmObjectFactory::instance()->create("PdmObjectGroup"));
s = dynamic_cast<caf::PdmObjectGroup*> (caf::PdmDefaultObjectFactory::instance()->create("PdmObjectGroup"));
EXPECT_TRUE(s != NULL);
}
@@ -680,12 +717,12 @@ TEST(BaseTest, PdmObjectFactory)
//--------------------------------------------------------------------------------------------------
TEST(BaseTest, ValidXmlKeywords)
{
EXPECT_TRUE(caf::PdmObject::isValidXmlElementName("Valid_name"));
EXPECT_TRUE(caf::PdmXmlObjectHandle::isValidXmlElementName("Valid_name"));
EXPECT_FALSE(caf::PdmObject::isValidXmlElementName("2Valid_name"));
EXPECT_FALSE(caf::PdmObject::isValidXmlElementName(".Valid_name"));
EXPECT_FALSE(caf::PdmObject::isValidXmlElementName("xml_Valid_name"));
EXPECT_FALSE(caf::PdmObject::isValidXmlElementName("Valid_name_with_space "));
EXPECT_FALSE(caf::PdmXmlObjectHandle::isValidXmlElementName("2Valid_name"));
EXPECT_FALSE(caf::PdmXmlObjectHandle::isValidXmlElementName(".Valid_name"));
EXPECT_FALSE(caf::PdmXmlObjectHandle::isValidXmlElementName("xml_Valid_name"));
EXPECT_FALSE(caf::PdmXmlObjectHandle::isValidXmlElementName("Valid_name_with_space "));
}
TEST(BaseTest, PdmPointersFieldInsertVector)
@@ -703,8 +740,14 @@ TEST(BaseTest, PdmPointersFieldInsertVector)
std::vector<caf::PdmPointer<SimpleObj> > typedObjects;
pdmGroup.objectsByType(&typedObjects);
EXPECT_EQ(size_t(3), typedObjects.size());
ihd1->m_simpleObjectsField.insert(ihd1->m_simpleObjectsField.size(), typedObjects);
std::vector<caf::PdmPointer<SimpleObj> > objs;
objs.push_back(new SimpleObj);
objs.push_back(new SimpleObj);
objs.push_back(new SimpleObj);
ihd1->m_simpleObjectsField.insert(ihd1->m_simpleObjectsField.size(), objs);
EXPECT_EQ(size_t(3), ihd1->m_simpleObjectsField.size());
delete ihd1;
@@ -731,14 +774,159 @@ TEST(BaseTest, PdmObjectGroupCopyOfTypedObjects)
og.objects.push_back(ihd1);
std::vector<caf::PdmPointer<SimpleObj> > simpleObjList;
og.createCopyByType(&simpleObjList);
og.createCopyByType(&simpleObjList, caf::PdmDefaultObjectFactory::instance());
EXPECT_EQ(size_t(3), simpleObjList.size());
EXPECT_EQ(1000, simpleObjList[0]->m_position);
EXPECT_EQ(size_t(1), simpleObjList[0]->m_numbers.v().size());
EXPECT_EQ(10, simpleObjList[0]->m_numbers.v()[0]);
EXPECT_EQ(2000, simpleObjList[1]->m_position);
EXPECT_EQ(3000, simpleObjList[2]->m_position);
std::vector<caf::PdmPointer<InheritedDemoObj> > inheritObjList;
og.createCopyByType(&inheritObjList);
og.createCopyByType(&inheritObjList, caf::PdmDefaultObjectFactory::instance());
EXPECT_EQ(size_t(1), inheritObjList.size());
og.deleteObjects();
EXPECT_EQ(size_t(3), simpleObjList.size());
EXPECT_EQ(size_t(1), inheritObjList.size());
}
//--------------------------------------------------------------------------------------------------
/// PdmChildArrayFieldHandle
//--------------------------------------------------------------------------------------------------
TEST(BaseTest, PdmChildArrayFieldHandle)
{
// virtual size_t size() const = 0;
// virtual bool empty() const = 0;
// virtual void clear() = 0;
// virtual PdmObject* createAppendObject(int indexAfter) = 0;
// virtual void erase(size_t index) = 0;
// virtual void deleteAllChildObjects() = 0;
//
// virtual PdmObject* at(size_t index) = 0;
//
// bool hasSameFieldCountForAllObjects();
SimpleObj* s1 = new SimpleObj;
s1->m_position = 1000;
s1->m_numbers.v().push_back(10);
SimpleObj* s2 = new SimpleObj;
s2->m_position = 2000;
SimpleObj* s3 = new SimpleObj;
s3->m_position = 3000;
InheritedDemoObj* ihd1 = new InheritedDemoObj;
caf::PdmChildArrayFieldHandle* listField = &(ihd1->m_simpleObjectsField);
EXPECT_EQ(0, listField->size());
EXPECT_TRUE(listField->hasSameFieldCountForAllObjects());
EXPECT_TRUE(listField->empty());
ihd1->m_simpleObjectsField.push_back(new SimpleObj);
EXPECT_EQ(1, listField->size());
EXPECT_TRUE(listField->hasSameFieldCountForAllObjects());
EXPECT_FALSE(listField->empty());
ihd1->m_simpleObjectsField.push_back(s1);
ihd1->m_simpleObjectsField.push_back(s2);
ihd1->m_simpleObjectsField.push_back(s3);
EXPECT_EQ(4, listField->size());
EXPECT_TRUE(listField->hasSameFieldCountForAllObjects());
EXPECT_FALSE(listField->empty());
listField->erase(0);
EXPECT_EQ(3, listField->size());
EXPECT_TRUE(listField->hasSameFieldCountForAllObjects());
EXPECT_FALSE(listField->empty());
listField->deleteAllChildObjects();
EXPECT_EQ(0, listField->size());
EXPECT_TRUE(listField->hasSameFieldCountForAllObjects());
EXPECT_TRUE(listField->empty());
}
class ReferenceDemoPdmObject: public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
ReferenceDemoPdmObject()
{
CAF_PDM_InitObject("ReferenceDemoPdmObject", "", "Tooltip DemoPdmObject", "WhatsThis DemoPdmObject");
CAF_PDM_InitFieldNoDefault(&m_pointersField, "SimpleObjPtrField", "SimpleObjPtrField", "", "Tooltip", "WhatsThis");
CAF_PDM_InitFieldNoDefault(&m_simpleObjPtrField2, "SimpleObjPtrField2", "SimpleObjPtrField2", "", "Tooltip", "WhatsThis");
}
// Fields
caf::PdmChildField<PdmObjectHandle*> m_pointersField;
caf::PdmChildArrayField<SimpleObj*> m_simpleObjPtrField2;
};
CAF_PDM_SOURCE_INIT(ReferenceDemoPdmObject, "ReferenceDemoPdmObject");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(BaseTest, PdmReferenceHelper)
{
SimpleObj* s1 = new SimpleObj;
s1->m_position = 1000;
s1->m_numbers.v().push_back(10);
SimpleObj* s2 = new SimpleObj;
s2->m_position = 2000;
SimpleObj* s3 = new SimpleObj;
s3->m_position = 3000;
InheritedDemoObj* ihd1 = new InheritedDemoObj;
caf::PdmChildArrayFieldHandle* listField = &(ihd1->m_simpleObjectsField);
ihd1->m_simpleObjectsField.push_back(new SimpleObj);
ihd1->m_simpleObjectsField.push_back(s1);
ihd1->m_simpleObjectsField.push_back(s2);
ihd1->m_simpleObjectsField.push_back(s3);
{
QString refString = caf::PdmReferenceHelper::referenceFromRootToObject(NULL, s3);
EXPECT_TRUE(refString.isEmpty());
refString = caf::PdmReferenceHelper::referenceFromRootToObject(ihd1, s3);
QString expectedString = ihd1->m_simpleObjectsField.keyword() + " 3";
EXPECT_STREQ(refString.toAscii(), expectedString.toAscii());
caf::PdmObjectHandle* fromRef = caf::PdmReferenceHelper::objectFromReference(ihd1, refString);
EXPECT_TRUE(fromRef == s3);
}
ReferenceDemoPdmObject* objA = new ReferenceDemoPdmObject;
objA->m_pointersField = ihd1;
{
QString refString = caf::PdmReferenceHelper::referenceFromRootToObject(objA, s3);
caf::PdmObjectHandle* fromRef = caf::PdmReferenceHelper::objectFromReference(objA, refString);
EXPECT_TRUE(fromRef == s3);
}
// Test reference to field
{
QString refString = caf::PdmReferenceHelper::referenceFromRootToField(objA, &(ihd1->m_simpleObjectsField));
caf::PdmFieldHandle* fromRef = caf::PdmReferenceHelper::fieldFromReference(objA, refString);
EXPECT_TRUE(fromRef == &(ihd1->m_simpleObjectsField));
}
}

View File

@@ -1,32 +0,0 @@
cmake_minimum_required (VERSION 2.8)
project ( cafTensor_UnitTests )
set(RI_VIZ_FWK_ROOT ../../../Fwk/VizFwk CACHE PATH "Path to VizFwk")
set(RI_GTEST_ROOT .. CACHE PATH "Path to folder containing gtest folder")
set(RI_SRC_ROOT ../../cafTensor CACHE PATH "Path to the code to test")
set(RI_TEST_FILE "" CACHE FILEPATH "Path to test file")
include(${RI_VIZ_FWK_ROOT}/CMake/Utils/ceeDetermineCompilerFlags.cmake)
add_subdirectory(${RI_VIZ_FWK_ROOT}/LibCore buildVizFwk)
add_definitions( -DTEST_FILE="${RI_TEST_FILE}")
include_directories(${RI_VIZ_FWK_ROOT}/LibCore)
include_directories(${RI_GTEST_ROOT})
include_directories(${RI_SRC_ROOT})
set( UNIT_TEST_CPP_SOURCES
main.cpp
cafTensor_UnitTests.cpp
${RI_SRC_ROOT}/cafTensor3.cpp
${RI_SRC_ROOT}/cafTensor3.h
${RI_SRC_ROOT}/cafTensor3.inl
${RI_GTEST_ROOT}/gtest/gtest-all.cpp
)
add_executable( ${PROJECT_NAME} ${UNIT_TEST_CPP_SOURCES} )
target_link_libraries( ${PROJECT_NAME} LibCore)

View File

@@ -1,194 +0,0 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2015- Statoil ASA
// Copyright (C) 2015- Ceetron Solutions AS
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "cafTensor3.h"
#include "gtest/gtest.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(cafTensor3Test, BasicTests)
{
caf::Ten3f T1;
caf::Ten3f T2(1, 2, 3, 4, 5, 6);
caf::Ten3f T3(T2);
EXPECT_EQ(1, T2[caf::Ten3f::SXX]);
EXPECT_EQ(2, T2[caf::Ten3f::SYY]);
EXPECT_EQ(3, T2[caf::Ten3f::SZZ]);
EXPECT_EQ(4, T2[caf::Ten3f::SXY]);
EXPECT_EQ(5, T2[caf::Ten3f::SYZ]);
EXPECT_EQ(6, T2[caf::Ten3f::SZX]);
T1 = T2;
EXPECT_EQ(1, T1[caf::Ten3f::SXX]);
EXPECT_EQ(2, T1[caf::Ten3f::SYY]);
EXPECT_EQ(3, T1[caf::Ten3f::SZZ]);
EXPECT_EQ(4, T1[caf::Ten3f::SXY]);
EXPECT_EQ(5, T1[caf::Ten3f::SYZ]);
EXPECT_EQ(6, T1[caf::Ten3f::SZX]);
EXPECT_TRUE(T2 == T3);
EXPECT_TRUE(T1 == T2);
EXPECT_TRUE(T1.equals(T2));
EXPECT_FALSE(T1 != T2);
T1[caf::Ten3f::SXX] = 7;
EXPECT_TRUE(T1 != T2);
EXPECT_FALSE(T1 == T2);
EXPECT_FALSE(T1.equals(T2));
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(cafTensor3Test, setFromNativeArray)
{
float tensData[6] = {11,12,13,14,15,16};
caf::Ten3f T1;
T1.setFromAbaqusLayout(tensData);
EXPECT_EQ(11, T1[caf::Ten3f::SXX]);
EXPECT_EQ(12, T1[caf::Ten3f::SYY]);
EXPECT_EQ(13, T1[caf::Ten3f::SZZ]);
EXPECT_EQ(14, T1[caf::Ten3f::SXY]);
EXPECT_EQ(15, T1[caf::Ten3f::SZX]);
EXPECT_EQ(16, T1[caf::Ten3f::SYZ]);
caf::Ten3f T2;
T2.setFromInternalLayout(tensData);
EXPECT_EQ(11, T2[caf::Ten3f::SXX]);
EXPECT_EQ(12, T2[caf::Ten3f::SYY]);
EXPECT_EQ(13, T2[caf::Ten3f::SZZ]);
EXPECT_EQ(14, T2[caf::Ten3f::SXY]);
EXPECT_EQ(15, T2[caf::Ten3f::SYZ]);
EXPECT_EQ(16, T2[caf::Ten3f::SZX]);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(cafTensor3Test, zero)
{
caf::Ten3f T0(0,0,0,0,0,0);
cvf::Vec3f pDirs[3];
cvf::Vec3f p0 = T0.calculatePrincipals(pDirs);
EXPECT_TRUE(p0 == cvf::Vec3f::ZERO);
EXPECT_TRUE(pDirs[0] == cvf::Vec3f::ZERO);
EXPECT_TRUE(pDirs[1] == cvf::Vec3f::ZERO);
EXPECT_TRUE(pDirs[2] == cvf::Vec3f::ZERO);
float vm = T0.calculateVonMises();
EXPECT_EQ(0.0f, vm );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(cafTensor3Test, undef)
{
float inf = std::numeric_limits<float>::infinity();
caf::Ten3f T0(0,0,0,0,0,inf);
cvf::Vec3f pDirs[3];
cvf::Vec3f p0 = T0.calculatePrincipals(pDirs);
EXPECT_TRUE(p0 == cvf::Vec3f(inf, inf, inf));
EXPECT_TRUE(pDirs[0] == cvf::Vec3f::ZERO);
EXPECT_TRUE(pDirs[1] == cvf::Vec3f::ZERO);
EXPECT_TRUE(pDirs[2] == cvf::Vec3f::ZERO);
float vm = T0.calculateVonMises();
EXPECT_EQ(inf, vm );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(cafTensor3Test, realTensors1)
{
caf::Ten3f T0(80,50,20,40,45,50);
cvf::Vec3f pDirs[3];
cvf::Vec3f p0 = T0.calculatePrincipals(pDirs);
EXPECT_NEAR( 143.8f, p0[0], 0.1 );
EXPECT_NEAR( 23.6f, p0[1], 0.1 );
EXPECT_NEAR( -17.4f, p0[2], 0.1 );
float vm = T0.calculateVonMises();
EXPECT_NEAR(145.2f, vm, 0.1 );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(cafTensor3Test, realTensors2)
{
caf::Ten3f T0(20,50,80,50,45,40);
cvf::Vec3f pDirs[3];
cvf::Vec3f p0 = T0.calculatePrincipals(pDirs);
EXPECT_NEAR( 143.8f, p0[0], 0.1 );
EXPECT_NEAR( 23.9f, p0[1], 0.1 );
EXPECT_NEAR( -17.6f, p0[2], 0.1 );
float vm = T0.calculateVonMises();
EXPECT_NEAR(145.2f, vm, 0.1 );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(cafTensor3Test, realTensors3)
{
caf::Ten3f T0(10,20,30,0,0,0);
cvf::Vec3f pDirs[3];
cvf::Vec3f p0 = T0.calculatePrincipals(pDirs);
EXPECT_NEAR( 30.0f, p0[0], 0.1 );
EXPECT_NEAR( 20.0f, p0[1], 0.1 );
EXPECT_NEAR( 10.0f, p0[2], 0.1 );
EXPECT_NEAR( 0.0f, pDirs[0][0], 0.1 );
EXPECT_NEAR( 0.0f, pDirs[0][1], 0.1 );
EXPECT_NEAR( 1.0f, pDirs[0][2], 0.1 );
EXPECT_NEAR( 0.0f, pDirs[1][0], 0.1);
EXPECT_NEAR( 1.0f, pDirs[1][1], 0.1 );
EXPECT_NEAR( 0.0f, pDirs[1][2], 0.1 );
EXPECT_NEAR( 1.0f, pDirs[2][0], 0.1 );
EXPECT_NEAR( 0.0f, pDirs[2][1], 0.1 );
EXPECT_NEAR( 0.0f, pDirs[2][2], 0.1 );
float vm = T0.calculateVonMises();
EXPECT_NEAR(17.3f, vm, 0.1 );
}

View File

@@ -1,42 +0,0 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2015 - Statoil ASA
// Copyright (C) 2015 - Ceetron Solutions AS
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "cvfBase.h"
#include "gtest/gtest.h"
#include <stdio.h>
#include "cvfTrace.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int main(int argc, char **argv)
{
cvf::Assert::setReportMode(cvf::Assert::CONSOLE);
testing::InitGoogleTest(&argc, argv);
int result = RUN_ALL_TESTS();
std::cout << "Please press <Enter> to close the window.";
std::cin.get();
return result;
}

View File

@@ -1,7 +1,14 @@
cmake_minimum_required (VERSION 2.8)
# Qt
find_package ( Qt4 COMPONENTS QtCore QtGui QtMain QtOpenGl )
include (${QT_USE_FILE})
project ( cafTestApplication )
option(USE_COMMAND_FRAMEWORK "Use Caf Command Framework" ON)
# Qt MOC
set ( QT_MOC_HEADERS
MainWindow.h
@@ -23,25 +30,58 @@ qt4_add_resources( QRC_FILES_CPP
)
include_directories (
${CMAKE_SOURCE_DIR}/cafProjectDataModel
${CMAKE_SOURCE_DIR}/cafUserInterface
${cafProjectDataModel_SOURCE_DIR}
${cafUserInterface_SOURCE_DIR}
)
# add the executable
add_executable ( ${PROJECT_NAME}
if (USE_COMMAND_FRAMEWORK)
include_directories (
${cafCommand_SOURCE_DIR}
)
ADD_DEFINITIONS(-DTAP_USE_COMMAND_FRAMEWORK)
endif(USE_COMMAND_FRAMEWORK)
include_directories (
${cafPdmCore_SOURCE_DIR}
${cafPdmUiCore_SOURCE_DIR}
${cafPdmXml_SOURCE_DIR}
)
set( PROJECT_FILES
Main.cpp
MainWindow.cpp
WidgetLayoutTest.cpp
)
# add the executable
add_executable ( ${PROJECT_NAME}
${PROJECT_FILES}
${MOC_FILES_CPP}
${QRC_FILES_CPP}
)
target_link_libraries ( ${PROJECT_NAME}
set (TAP_LINK_LIBRARIES
cafUserInterface
cafProjectDataModel
cafPdmXml
${QT_LIBRARIES}
)
if (USE_COMMAND_FRAMEWORK)
set (TAP_LINK_LIBRARIES
${TAP_LINK_LIBRARIES}
cafCommand
)
endif(USE_COMMAND_FRAMEWORK)
target_link_libraries ( ${PROJECT_NAME}
${TAP_LINK_LIBRARIES}
)
source_group("" FILES ${PROJECT_FILES})
# Copy Qt Dlls
if (MSVC)
set (QTLIBLIST QtCore QtGui QtOpenGl)

View File

@@ -1,4 +1,6 @@
#include "cafPdmField.h"
#include "MainWindow.h"
#include "WidgetLayoutTest.h"
@@ -6,16 +8,30 @@
#include <QTreeView>
#include <QAction>
#include <QMenuBar>
#include <QUndoView>
#include "cafPdmField.h"
#include "cafPdmObject.h"
#include "cafPdmDocument.h"
#include "cafAppEnum.h"
#include "cafUiTreeModelPdm.h"
#include "cafPdmUiPropertyView.h"
#ifdef TAP_USE_COMMAND_FRAMEWORK
#include "cafCmdExecCommandManager.h"
#include "cafCmdSelectionHelper.h"
#include "cafCmdFeatureManager.h"
#endif
#include "cafPdmDocument.h"
#include "cafPdmObject.h"
#include "cafPdmUiFilePathEditor.h"
#include "cafPdmUiListEditor.h"
#include "cafPdmUiPropertyView.h"
#include "cafPdmUiTableView.h"
#include "cafPdmUiTextEditor.h"
#include "cafPdmUiTreeView.h"
#include "cafPdmReferenceHelper.h"
#include "cafSelectionManager.h"
#include "cafUiTreeModelPdm.h"
#include "cafPdmProxyValueField.h"
#include "cafPdmPtrField.h"
@@ -26,7 +42,7 @@ public:
DemoPdmObjectGroup()
{
CAF_PDM_InitObject("Demo Object Group", "", "This group object is a demo of the CAF framework", "This group object is a demo of the CAF framework")
}
};
@@ -41,14 +57,46 @@ public:
{
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");
CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis");
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");
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; }
}
caf::PdmField<double> m_doubleField;
caf::PdmField<int> m_intField;
caf::PdmField<QString> m_textField;
caf::PdmProxyValueField<double> m_proxyDoubleField;
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; }
private:
double m_doubleMember;
};
CAF_PDM_SOURCE_INIT(SmallDemoPdmObject, "SmallDemoPdmObject");
@@ -69,18 +117,94 @@ public:
{
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");
CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis");
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(""), "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_testEnumField, "TestEnumValue", caf::AppEnum<TestEnumType>(T1), "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("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", "", "", "");
m_testEnumField.setUiEditorTypeName(caf::PdmUiListEditor::uiEditorTypeName());
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());
}
caf::PdmField<double> m_doubleField;
caf::PdmField<int> m_intField;
caf::PdmField<QString> m_textField;
caf::PdmField< caf::AppEnum<TestEnumType> > m_testEnumField;
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;
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;
}
}
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())
{
caf::PdmUiFieldHandle* uiFieldHandle = caf::uiField(uiObject->userDescriptionField());
if (uiFieldHandle)
{
userDesc = uiFieldHandle->uiValue().toString();
}
}
options.push_back(caf::PdmOptionItemInfo(uiObject->uiName() + "(" + userDesc + ")", QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(objects[i]))));
}
}
}
if (useOptionsOnly) *useOptionsOnly = true;
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual caf::PdmFieldHandle* userDescriptionField()
{
return &m_textField;
}
};
@@ -113,21 +237,23 @@ public:
{
CAF_PDM_InitObject( "Demo Object", "", "This object is a demo of the CAF framework", "This object is a demo of the CAF framework");
CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis");
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");
CAF_PDM_InitField(&m_textField, "TextField", QString(""), "", "", "", "");
CAF_PDM_InitField(&m_textField, "TextField", QString("Demo Object Description Field"), "", "", "", "");
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" );
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");
CAF_PDM_InitFieldNoDefault(&m_objectList, "ObjectList", "Objects list", "", "List" , "This is a list of PdmObjects" );
m_filePath.setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName());
m_filePath.setUiLabelPosition(caf::PdmUiItemInfo::TOP);
m_longText.setUiEditorTypeName(caf::PdmUiTextEditor::uiEditorTypeName());
m_longText.setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
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);
}
@@ -136,6 +262,7 @@ public:
//--------------------------------------------------------------------------------------------------
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
uiOrdering.add(&m_ptrField);
uiOrdering.add(&m_boolField);
caf::PdmUiGroup* group1 = uiOrdering.addNewGroup("Name1");
group1->add(&m_doubleField);
@@ -165,11 +292,34 @@ public:
options.push_back(caf::PdmOptionItemInfo("Choice 6", "Choice6"));
}
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]))));
}
}
}
if (useOptionsOnly) *useOptionsOnly = true;
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual caf::PdmFieldHandle* userDescriptionField()
{
return &m_textField;
}
// Fields
caf::PdmField<bool> m_boolField;
caf::PdmField<double> m_doubleField;
@@ -182,7 +332,25 @@ public:
caf::PdmField<std::vector<QString> > m_multiSelectList;
caf::PdmPointersField< caf::PdmObject* > m_objectList;
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;
}
}
};
CAF_PDM_SOURCE_INIT(DemoPdmObject, "DemoPdmObject");
@@ -196,9 +364,10 @@ MainWindow* MainWindow::sm_mainWindowInstance = NULL;
//--------------------------------------------------------------------------------------------------
MainWindow::MainWindow()
{
m_treeView = NULL;
m_treeModelPdm = NULL;
// Initialize command framework
// Register default command features (add/delete item in list)
createActions();
createDockPanels();
@@ -206,6 +375,13 @@ MainWindow::MainWindow()
setPdmRoot(m_testRoot);
sm_mainWindowInstance = this;
caf::SelectionManager::instance()->setPdmRootObject(m_testRoot);
#ifdef TAP_USE_COMMAND_FRAMEWORK
caf::CmdExecCommandManager::instance()->enableUndoCommandSystem(true);
undoView->setStack(caf::CmdExecCommandManager::instance()->undoStack());
#endif
}
//--------------------------------------------------------------------------------------------------
@@ -214,27 +390,15 @@ MainWindow::MainWindow()
void MainWindow::createDockPanels()
{
{
QDockWidget* dockWidget = new QDockWidget("Workspace", this);
QDockWidget* dockWidget = new QDockWidget("PdmTreeView - controls property view", this);
dockWidget->setObjectName("dockWidget");
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_treeView = new QTreeView(dockWidget);
dockWidget->setWidget(m_treeView);
m_pdmUiTreeView = new caf::PdmUiTreeView(dockWidget);
dockWidget->setWidget(m_pdmUiTreeView);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
}
/*
{
QDockWidget* dockWidget = new QDockWidget("WidgetLayoutTest", this);
dockWidget->setObjectName("dockWidget");
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
WidgetLayoutTest* widgetLayoutTest = new WidgetLayoutTest(dockWidget);
dockWidget->setWidget(widgetLayoutTest);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
}
*/
{
QDockWidget* dockWidget = new QDockWidget("cafPropertyView", this);
@@ -246,6 +410,46 @@ void MainWindow::createDockPanels()
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
}
{
QDockWidget* dockWidget = new QDockWidget("PdmTreeView2 - controls table view", this);
dockWidget->setObjectName("dockWidget");
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_pdmUiTreeView2 = new caf::PdmUiTreeView(dockWidget);
m_pdmUiTreeView2->enableDefaultContextMenu(true);
m_pdmUiTreeView2->setCurrentSelectionToCurrentEditorSelection(true);
dockWidget->setWidget(m_pdmUiTreeView2);
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);
}
}
//--------------------------------------------------------------------------------------------------
@@ -264,36 +468,64 @@ void MainWindow::buildTestModel()
SmallDemoPdmObjectA* smallObj2 = new SmallDemoPdmObjectA;
m_testRoot->addObject(smallObj2);
demoObject->m_objectList.push_back(new DemoPdmObject);
DemoPdmObject* demoObj2 = new DemoPdmObject;
demoObject->m_textField = "Mitt Demo Obj";
demoObject->m_objectList.push_back(demoObj2);
demoObject->m_objectList.push_back(new SmallDemoPdmObjectA());
SmallDemoPdmObject* smallObj3 = new SmallDemoPdmObject();
demoObject->m_objectList.push_back(smallObj3);
demoObject->m_objectList.push_back(new SmallDemoPdmObject());
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;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::setPdmRoot(caf::PdmObject* pdmRoot)
void MainWindow::setPdmRoot(caf::PdmObjectHandle* pdmRoot)
{
caf::PdmUiTreeItem* treeItemRoot = caf::UiTreeItemBuilderPdm::buildViewItems(NULL, 0, pdmRoot);
if (!m_treeModelPdm)
caf::PdmUiObjectHandle* uiObject = uiObj(pdmRoot);
if (uiObject)
{
m_treeModelPdm = new caf::UiTreeModelPdm(this);
m_pdmUiTreeView->setPdmItem(uiObject);
}
m_treeModelPdm->setTreeItemRoot(treeItemRoot);
connect(m_pdmUiTreeView, SIGNAL(selectionChanged()), SLOT(slotSimpleSelectionChanged()));
assert(m_treeView);
m_treeView->setModel(m_treeModelPdm);
// Set up test of using a field as a root item
// Hack, because we know that pdmRoot is a PdmObjectGroup ...
if (treeItemRoot)
std::vector<caf::PdmFieldHandle*> fields;
pdmRoot->fields(fields);
if (fields.size())
{
if (m_treeView->selectionModel())
caf::PdmFieldHandle* field = fields[0];
caf::PdmUiFieldHandle* uiFieldHandle = uiField(field);
if (uiFieldHandle)
{
connect(m_treeView->selectionModel(), SIGNAL(selectionChanged( const QItemSelection & , const QItemSelection & )), SLOT(slotSelectionChanged( const QItemSelection & , const QItemSelection & )));
m_pdmUiTreeView2->setPdmItem(uiFieldHandle);
uiFieldHandle->updateConnectedEditors();
}
}
if (uiObject)
{
m_pdmUiTreeView2->setPdmItem(uiObject);
}
connect(m_pdmUiTreeView2, SIGNAL(selectionChanged()), SLOT(slotShowTableView()));
}
//--------------------------------------------------------------------------------------------------
@@ -301,6 +533,10 @@ void MainWindow::setPdmRoot(caf::PdmObject* pdmRoot)
//--------------------------------------------------------------------------------------------------
MainWindow::~MainWindow()
{
m_pdmUiTreeView->setPdmItem(NULL);
m_pdmUiTreeView2->setPdmItem(NULL);
m_pdmUiPropertyView->showProperties(NULL);
m_pdmUiTableView->setListField(NULL);
}
//--------------------------------------------------------------------------------------------------
@@ -308,12 +544,6 @@ MainWindow::~MainWindow()
//--------------------------------------------------------------------------------------------------
void MainWindow::releaseTestData()
{
m_treeView->setModel(NULL);
if (m_treeModelPdm)
{
delete m_treeModelPdm;
}
if (m_testRoot)
{
m_testRoot->deleteObjects();
@@ -356,27 +586,35 @@ void MainWindow::createActions()
//--------------------------------------------------------------------------------------------------
void MainWindow::slotInsert()
{
QModelIndex index = m_treeView->selectionModel()->currentIndex();
QAbstractItemModel *model = m_treeView->model();
std::vector<caf::PdmUiItem*> selection;
m_pdmUiTreeView->selectedObjects(selection);
if (!model->insertRow(0, index))
return;
for (size_t i = 0; i < selection.size(); ++i)
{
caf::PdmUiFieldHandle* uiFh = dynamic_cast<caf::PdmUiFieldHandle*>(selection[i]);
caf::PdmChildArrayField< caf::PdmObjectHandle*> * field = NULL;
QModelIndex child = model->index(0, 0, index);
if (uiFh) field = dynamic_cast<caf::PdmChildArrayField< caf::PdmObjectHandle*> *>(uiFh->fieldHandle());
if (field)
{
field->push_back(new DemoPdmObject);
field->capability<caf::PdmUiFieldHandle>()->updateConnectedEditors();
return;
}
#if 0
caf::PdmChildArrayFieldHandle* listField = NULL;
// (
// for (int column = 0; column < model->columnCount(index); ++column)
// {
// QModelIndex child = model->index(0, column, index);
// model->setData(child, QVariant("[No data]"), Qt::EditRole);
// if (!model->headerData(column, Qt::Horizontal).isValid())
// model->setHeaderData(column, Qt::Horizontal, QVariant("[No header]"),
// Qt::EditRole);
// }
// )
if (uiFh) listField = dynamic_cast<caf::PdmChildArrayFieldHandle*>(uiFh->fieldHandle());
m_treeView->selectionModel()->setCurrentIndex(model->index(0, 0, index), QItemSelectionModel::ClearAndSelect);
if (listField)
{
caf::PdmObjectHandle* obj = listField->createAppendObject();
listField->capability<caf::PdmUiFieldHandle>()->updateConnectedEditors();
}
#endif
}
}
//--------------------------------------------------------------------------------------------------
@@ -384,9 +622,29 @@ void MainWindow::slotInsert()
//--------------------------------------------------------------------------------------------------
void MainWindow::slotRemove()
{
QModelIndex index = m_treeView->selectionModel()->currentIndex();
QAbstractItemModel *model = m_treeView->model();
model->removeRow(index.row(), index.parent());
std::vector<caf::PdmUiItem*> selection;
m_pdmUiTreeView->selectedObjects(selection);
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
caf::PdmUiFieldHandle::updateConnectedUiEditors(field);
break;
}
}
}
//--------------------------------------------------------------------------------------------------
@@ -400,19 +658,50 @@ void MainWindow::slotRemoveAll()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected )
void MainWindow::slotSimpleSelectionChanged()
{
if (selected.indexes().size() == 1)
std::vector<caf::PdmUiItem*> selection;
m_pdmUiTreeView->selectedObjects(selection);
caf::PdmObjectHandle* obj = NULL;
caf::PdmChildArrayFieldHandle* listField = NULL;
if (selection.size())
{
QModelIndex mi = selected.indexes()[0];
caf::PdmUiTreeItem* treeItem = m_treeModelPdm->getTreeItemFromIndex(mi);
if (treeItem && treeItem->dataObject())
caf::PdmUiObjectHandle* pdmUiObj = dynamic_cast<caf::PdmUiObjectHandle*>( selection[0] );
if (pdmUiObj) obj = pdmUiObj->owner();
}
m_pdmUiPropertyView->showProperties(obj);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::slotShowTableView()
{
std::vector<caf::PdmUiItem*> selection;
m_pdmUiTreeView2->selectedObjects(selection);
caf::PdmObjectHandle* obj = NULL;
caf::PdmChildArrayFieldHandle* listField = NULL;
if (selection.size())
{
caf::PdmUiItem* pdmUiItem = selection[0];
caf::PdmUiFieldHandle* guiField = dynamic_cast<caf::PdmUiFieldHandle*>(pdmUiItem);
if (guiField) listField = dynamic_cast<caf::PdmChildArrayFieldHandle*>(guiField->fieldHandle());
if (listField)
{
m_pdmUiPropertyView->showProperties(treeItem->dataObject());
if (!listField->hasSameFieldCountForAllObjects())
{
listField = NULL;
}
}
}
else
{
m_pdmUiPropertyView->showProperties(NULL);
}
m_pdmUiTableView->setListField(listField);
caf::PdmUiFieldHandle::updateConnectedUiEditors(listField);
}

View File

@@ -6,13 +6,16 @@
class DemoPdmObject;
class QTreeView;
class QUndoView;
namespace caf
{
class PdmObjectGroup;
class PdmObject;
class PdmObjectHandle;
class UiTreeModelPdm;
class PdmUiPropertyView;
class PdmUiTreeView;
class PdmUiTableView;
}
class MainWindow : public QMainWindow
@@ -24,7 +27,7 @@ public:
~MainWindow();
static MainWindow* instance();
void setPdmRoot(caf::PdmObject* pdmRoot);
void setPdmRoot(caf::PdmObjectHandle* pdmRoot);
private:
void createActions();
@@ -40,17 +43,21 @@ private slots:
void slotInsert();
void slotRemove();
void slotRemoveAll();
void slotSelectionChanged(const QItemSelection &, const QItemSelection & );
void slotSimpleSelectionChanged();
void slotShowTableView();
private:
static MainWindow* sm_mainWindowInstance;
private:
QTreeView* m_treeView;
caf::UiTreeModelPdm* m_treeModelPdm;
caf::PdmUiPropertyView* m_pdmUiPropertyView;
caf::PdmObjectGroup* m_testRoot;
QUndoView* undoView;
caf::PdmUiTreeView* m_pdmUiTreeView;
caf::PdmUiTreeView* m_pdmUiTreeView2;
caf::PdmUiPropertyView* m_pdmUiPropertyView;
caf::PdmUiTableView* m_pdmUiTableView;
caf::PdmObjectGroup* m_testRoot;
};

View File

@@ -0,0 +1,56 @@
#include "TapCvfSpecialization.h"
/*
#include "MainWindow.h"
#include "WidgetLayoutTest.h"
#include <QDockWidget>
#include <QTreeView>
#include <QAction>
#include <QMenuBar>
#include <QUndoView>
#include "cafAppEnum.h"
#include "cafAppExecCommandManager.h"
#include "cafCommandFeaturesCore.h"
#include "cafCommandFeatureManager.h"
#include "cafPdmDocument.h"
#include "cafPdmObject.h"
#include "cafPdmUiFilePathEditor.h"
#include "cafPdmUiListEditor.h"
#include "cafPdmUiPropertyView.h"
#include "cafPdmUiTableView.h"
#include "cafPdmUiTextEditor.h"
#include "cafPdmUiTreeView.h"
#include "cafPdmReferenceHelper.h"
#include "cafSelectionManager.h"
#include "cafUiTreeModelPdm.h"
#include "cafPdmProxyValueField.h"
#include "cafPdmPtrField.h"
*/
CAF_PDM_SOURCE_INIT(TapCvfSpecialization, "TapCvfSpecialization");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TapCvfSpecialization::TapCvfSpecialization()
{
CAF_PDM_InitObject("Test Object for type specializations", "", "", "");
/*
CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis");
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");
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; }
*/
}

View File

@@ -0,0 +1,41 @@
#pragma once
#include "..\LibCore\cvfBase.h"
#include "..\LibCore\cvfColor3.h"
#include "..\LibCore\cvfVector3.h"
#include "..\LibCore\cvfMatrix4.h"
#include "cafPdmObject.h"
#include "cafPdmField.h"
class TapCvfSpecialization : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
TapCvfSpecialization();
caf::PdmField<cvf::Color3> m_colorField;
caf::PdmField<cvf::Vec3d> m_vectorField;
caf::PdmField<cvf::Mat4d> m_matrixField;
/*
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;
}
}
*/
};

View File

@@ -0,0 +1,96 @@
cmake_minimum_required (VERSION 2.8)
# Qt
find_package ( Qt4 COMPONENTS QtCore QtGui QtMain QtOpenGl )
include (${QT_USE_FILE})
project ( cafTestCvfApplication )
# Qt MOC
set ( QT_MOC_HEADERS
MainWindow.h
WidgetLayoutTest.h
)
qt4_wrap_cpp( MOC_FILES_CPP
${QT_MOC_HEADERS}
)
# Resource file
set( QRC_FILES
textedit.qrc
)
# Runs RCC on specified files
qt4_add_resources( QRC_FILES_CPP
${QRC_FILES}
)
include_directories (
${LibCore_SOURCE_DIR}
${LibGeometry_SOURCE_DIR}
${LibGuiQt_SOURCE_DIR}
${LibRender_SOURCE_DIR}
${LibViewing_SOURCE_DIR}
${cafPdmCore_SOURCE_DIR}
${cafPdmUiCore_SOURCE_DIR}
${cafPdmXml_SOURCE_DIR}
${cafProjectDataModel_SOURCE_DIR}
${cafCommand_SOURCE_DIR}
# ${cafViewer_SOURCE_DIR}
${cafUserInterface_SOURCE_DIR}
${cafPdmCvf_SOURCE_DIR}
# ${CommonCode_SOURCE_DIR}
)
set( PROJECT_FILES
Main.cpp
MainWindow.cpp
WidgetLayoutTest.cpp
TapCvfSpecialization.cpp
TapProject.cpp
)
# add the executable
add_executable ( ${PROJECT_NAME}
${PROJECT_FILES}
${MOC_FILES_CPP}
${QRC_FILES_CPP}
)
target_link_libraries ( ${PROJECT_NAME}
LibCore
cafPdmCore
cafPdmUiCore
cafPdmXml
cafProjectDataModel
cafCommand
cafUserInterface
cafPdmCvf
${QT_LIBRARIES}
)
source_group("" FILES ${PROJECT_FILES})
# Copy Qt Dlls
if (MSVC)
set (QTLIBLIST QtCore QtGui QtOpenGl)
foreach (qtlib ${QTLIBLIST})
# Debug
execute_process(COMMAND cmake -E copy_if_different ${QT_BINARY_DIR}/${qtlib}d4.dll ${CMAKE_CURRENT_BINARY_DIR}/Debug/${qtlib}d4.dll)
# Release
execute_process(COMMAND cmake -E copy_if_different ${QT_BINARY_DIR}/${qtlib}4.dll ${CMAKE_CURRENT_BINARY_DIR}/Release/${qtlib}4.dll)
endforeach( qtlib )
endif(MSVC)

View File

@@ -0,0 +1,17 @@
#include "MainWindow.h"
#include <QApplication>
#include "cafPdmFieldCvfColor.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow window;
window.setWindowTitle("Ceetron Application Framework Test Application");
window.show();
return app.exec();
}

View File

@@ -0,0 +1,771 @@
#include "cafPdmField.h"
#include "MainWindow.h"
#include "WidgetLayoutTest.h"
#include <QDockWidget>
#include <QTreeView>
#include <QAction>
#include <QMenuBar>
#include <QUndoView>
#include "cafAppEnum.h"
#include "cafAppExecCommandManager.h"
#include "cafCommandFeaturesCore.h"
#include "cafCommandFeatureManager.h"
#include "cafPdmDocument.h"
#include "cafPdmObject.h"
#include "cafPdmUiFilePathEditor.h"
#include "cafPdmUiListEditor.h"
#include "cafPdmUiPropertyView.h"
#include "cafPdmUiTableView.h"
#include "cafPdmUiTextEditor.h"
#include "cafPdmUiTreeView.h"
#include "cafPdmReferenceHelper.h"
#include "cafSelectionManager.h"
#include "cafUiTreeModelPdm.h"
#include "cafPdmProxyValueField.h"
#include "cafPdmPtrField.h"
class DemoPdmObjectGroup: public caf::PdmObjectGroup
{
CAF_PDM_HEADER_INIT;
public:
DemoPdmObjectGroup()
{
}
};
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");
CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis");
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");
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; }
}
caf::PdmField<double> m_doubleField;
caf::PdmField<int> m_intField;
caf::PdmField<QString> m_textField;
caf::PdmProxyValueField<double> m_proxyDoubleField;
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; }
private:
double m_doubleMember;
};
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");
CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis");
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("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", "", "", "");
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());
}
caf::PdmField<double> m_doubleField;
caf::PdmField<int> m_intField;
caf::PdmField<QString> m_textField;
caf::PdmField< caf::AppEnum<TestEnumType> > m_testEnumField;
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;
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;
}
}
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())
{
caf::PdmUiFieldHandle* uiFieldHandle = caf::uiField(uiObject->userDescriptionField());
if (uiFieldHandle)
{
userDesc = uiFieldHandle->uiValue().toString();
}
}
options.push_back(caf::PdmOptionItemInfo(uiObject->uiName() + "(" + userDesc + ")", QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(objects[i]))));
}
}
}
if (useOptionsOnly) *useOptionsOnly = true;
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual caf::PdmFieldHandle* userDescriptionField()
{
return &m_textField;
}
};
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");
CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis");
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");
CAF_PDM_InitField(&m_textField, "TextField", QString("Demo Object Description Field"), "", "", "", "");
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" );
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");
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);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
uiOrdering.add(&m_ptrField);
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"));
}
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]))));
}
}
}
if (useOptionsOnly) *useOptionsOnly = true;
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual caf::PdmFieldHandle* userDescriptionField()
{
return &m_textField;
}
// 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;
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;
}
}
};
CAF_PDM_SOURCE_INIT(DemoPdmObject, "DemoPdmObject");
MainWindow* MainWindow::sm_mainWindowInstance = NULL;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
MainWindow::MainWindow()
{
// Initialize command framework
// Register default command features (add/delete item in list)
caf::AppExecCommandManager::instance()->enableUndoStack(true);
m_treeView = NULL;
m_treeModelPdm = NULL;
createActions();
createDockPanels();
buildTestModel();
setPdmRoot(m_testRoot);
sm_mainWindowInstance = this;
caf::SelectionManager::instance()->setPdmRootObject(m_testRoot);
undoView->setStack(caf::AppExecCommandManager::instance()->undoStack());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::createDockPanels()
{
{
QDockWidget* dockWidget = new QDockWidget("Workspace", this);
dockWidget->setObjectName("dockWidget");
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_treeView = new QTreeView(dockWidget);
dockWidget->setWidget(m_treeView);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
}
{
QDockWidget* dockWidget = new QDockWidget("PdmTreeView", this);
dockWidget->setObjectName("dockWidget");
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_pdmUiTreeView = new caf::PdmUiTreeView(dockWidget);
dockWidget->setWidget(m_pdmUiTreeView);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
}
/*
{
QDockWidget* dockWidget = new QDockWidget("WidgetLayoutTest", this);
dockWidget->setObjectName("dockWidget");
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
WidgetLayoutTest* widgetLayoutTest = new WidgetLayoutTest(dockWidget);
dockWidget->setWidget(widgetLayoutTest);
addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
}
*/
{
QDockWidget* dockWidget = new QDockWidget("cafPropertyView", this);
dockWidget->setObjectName("dockWidget");
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_pdmUiPropertyView = new caf::PdmUiPropertyView(dockWidget);
dockWidget->setWidget(m_pdmUiPropertyView);
addDockWidget(Qt::LeftDockWidgetArea, 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::LeftDockWidgetArea, dockWidget);
}
{
QDockWidget* dockWidget = new QDockWidget("PdmTreeView2", this);
dockWidget->setObjectName("dockWidget");
dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
m_pdmUiTreeView2 = new caf::PdmUiTreeView(dockWidget);
m_pdmUiTreeView2->enableDefaultContextMenu(true);
dockWidget->setWidget(m_pdmUiTreeView2);
addDockWidget(Qt::LeftDockWidgetArea, 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::LeftDockWidgetArea, dockWidget);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::buildTestModel()
{
m_testRoot = new DemoPdmObjectGroup;
DemoPdmObject* demoObject = new DemoPdmObject;
m_testRoot->addObject(demoObject);
SmallDemoPdmObject* smallObj1 = new SmallDemoPdmObject;
m_testRoot->addObject(smallObj1);
SmallDemoPdmObjectA* smallObj2 = new SmallDemoPdmObjectA;
m_testRoot->addObject(smallObj2);
DemoPdmObject* demoObj2 = new DemoPdmObject;
demoObject->m_textField = "Mitt Demo Obj";
demoObject->m_objectList.push_back(demoObj2);
demoObject->m_objectList.push_back(new SmallDemoPdmObjectA());
SmallDemoPdmObject* smallObj3 = new SmallDemoPdmObject();
demoObject->m_objectList.push_back(smallObj3);
demoObject->m_objectList.push_back(new SmallDemoPdmObject());
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;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::setPdmRoot(caf::PdmObjectHandle* pdmRoot)
{
caf::PdmUiTreeItem* treeItemRoot = caf::UiTreeItemBuilderPdm::buildViewItems(NULL, 0, pdmRoot);
if (!m_treeModelPdm)
{
m_treeModelPdm = new caf::UiTreeModelPdm(this);
}
m_treeModelPdm->setTreeItemRoot(treeItemRoot);
assert(m_treeView);
m_treeView->setModel(m_treeModelPdm);
if (treeItemRoot)
{
if (m_treeView->selectionModel())
{
connect(m_treeView->selectionModel(), SIGNAL(selectionChanged( const QItemSelection & , const QItemSelection & )), SLOT(slotSelectionChanged( const QItemSelection & , const QItemSelection & )));
}
}
caf::PdmUiObjectHandle* uiObject = uiObj(pdmRoot);
if (uiObject)
{
m_pdmUiTreeView->setPdmItem(uiObject);
}
connect(m_pdmUiTreeView, SIGNAL(selectionChanged()), SLOT(slotSimpleSelectionChanged()));
// Set up test of using a field as a root item
// Hack, because we know that pdmRoot is a PdmObjectGroup ...
std::vector<caf::PdmFieldHandle*> fields;
pdmRoot->fields(fields);
if (fields.size())
{
caf::PdmFieldHandle* field = fields[0];
caf::PdmUiFieldHandle* uiFieldHandle = uiField(field);
if (uiFieldHandle)
{
m_pdmUiTreeView2->setPdmItem(uiFieldHandle);
uiFieldHandle->updateConnectedEditors();
}
}
if (uiObject)
{
m_pdmUiTreeView2->setPdmItem(uiObject);
}
connect(m_pdmUiTreeView2, SIGNAL(selectionChanged()), SLOT(slotShowTableView()));
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
MainWindow::~MainWindow()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::releaseTestData()
{
m_treeView->setModel(NULL);
if (m_treeModelPdm)
{
delete m_treeModelPdm;
}
if (m_testRoot)
{
m_testRoot->deleteObjects();
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()
{
std::vector<caf::PdmUiItem*> selection;
m_pdmUiTreeView->selectedObjects(selection);
for (size_t i = 0; i < selection.size(); ++i)
{
caf::PdmUiFieldHandle* uiFh = dynamic_cast<caf::PdmUiFieldHandle*>(selection[i]);
caf::PdmChildArrayField< caf::PdmObjectHandle*> * field = NULL;
if (uiFh) field = dynamic_cast<caf::PdmChildArrayField< caf::PdmObjectHandle*> *>(uiFh->fieldHandle());
if (field)
{
field->push_back(new DemoPdmObject);
field->capability<caf::PdmUiFieldHandle>()->updateConnectedEditors();
return;
}
#if 0
caf::PdmChildArrayFieldHandle* listField = NULL;
if (uiFh) listField = dynamic_cast<caf::PdmChildArrayFieldHandle*>(uiFh->fieldHandle());
if (listField)
{
caf::PdmObjectHandle* obj = listField->createAppendObject();
listField->capability<caf::PdmUiFieldHandle>()->updateConnectedEditors();
}
#endif
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::slotRemove()
{
std::vector<caf::PdmUiItem*> selection;
m_pdmUiTreeView->selectedObjects(selection);
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
caf::PdmUiFieldHandle* uiFieldHandle = uiField(field);
if (uiFieldHandle)
{
uiFieldHandle->updateConnectedEditors();
}
break;
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::slotRemoveAll()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::slotSelectionChanged(const QItemSelection & selected, const QItemSelection & deselected )
{
if (selected.indexes().size() == 1)
{
QModelIndex mi = selected.indexes()[0];
caf::PdmUiTreeItem* treeItem = m_treeModelPdm->getTreeItemFromIndex(mi);
if (treeItem && treeItem->dataObject())
{
m_pdmUiPropertyView->showProperties(treeItem->dataObject());
}
}
else
{
m_pdmUiPropertyView->showProperties(NULL);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::slotSimpleSelectionChanged()
{
std::vector<caf::PdmUiItem*> selection;
m_pdmUiTreeView->selectedObjects(selection);
caf::PdmObjectHandle* obj = NULL;
caf::PdmChildArrayFieldHandle* listField = NULL;
if (selection.size())
{
caf::PdmUiObjectHandle* pdmUiObj = dynamic_cast<caf::PdmUiObjectHandle*>( selection[0] );
if (pdmUiObj) obj = pdmUiObj->owner();
}
m_pdmUiPropertyView->showProperties(obj);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void MainWindow::slotShowTableView()
{
std::vector<caf::PdmUiItem*> selection;
m_pdmUiTreeView2->selectedObjects(selection);
caf::PdmObjectHandle* obj = NULL;
caf::PdmChildArrayFieldHandle* listField = NULL;
if (selection.size())
{
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;
}
}
}
m_pdmUiTableView->setListField(listField);
if (listField)
{
listField->capability<caf::PdmUiFieldHandle>()->updateConnectedEditors();
}
}

View File

@@ -0,0 +1,66 @@
#pragma once
#include <QtGui/QMainWindow>
#include <QAbstractItemModel>
#include <QItemSelection>
class DemoPdmObject;
class QTreeView;
class QUndoView;
namespace caf
{
class PdmObjectGroup;
class PdmObjectHandle;
class UiTreeModelPdm;
class PdmUiPropertyView;
class PdmUiTreeView;
class PdmUiTableView;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
~MainWindow();
static MainWindow* instance();
void setPdmRoot(caf::PdmObjectHandle* pdmRoot);
private:
void createActions();
void createMenus();
void createToolBars();
void createDockPanels();
void buildTestModel();
void releaseTestData();
private slots:
void slotInsert();
void slotRemove();
void slotRemoveAll();
void slotSelectionChanged(const QItemSelection &, const QItemSelection & );
void slotSimpleSelectionChanged();
void slotShowTableView();
private:
static MainWindow* sm_mainWindowInstance;
private:
QTreeView* m_treeView;
QUndoView* undoView;
caf::UiTreeModelPdm* m_treeModelPdm;
caf::PdmUiTreeView* m_pdmUiTreeView;
caf::PdmUiTreeView* m_pdmUiTreeView2;
caf::PdmUiPropertyView* m_pdmUiPropertyView;
caf::PdmUiTableView* m_pdmUiTableView;
caf::PdmObjectGroup* m_testRoot;
};

View File

@@ -0,0 +1,60 @@
#include "TapCvfSpecialization.h"
/*
#include "MainWindow.h"
#include "WidgetLayoutTest.h"
#include <QDockWidget>
#include <QTreeView>
#include <QAction>
#include <QMenuBar>
#include <QUndoView>
#include "cafAppEnum.h"
#include "cafAppExecCommandManager.h"
#include "cafCommandFeaturesCore.h"
#include "cafCommandFeatureManager.h"
#include "cafPdmDocument.h"
#include "cafPdmObject.h"
#include "cafPdmUiFilePathEditor.h"
#include "cafPdmUiListEditor.h"
#include "cafPdmUiPropertyView.h"
#include "cafPdmUiTableView.h"
#include "cafPdmUiTextEditor.h"
#include "cafPdmUiTreeView.h"
#include "cafPdmReferenceHelper.h"
#include "cafSelectionManager.h"
#include "cafUiTreeModelPdm.h"
#include "cafPdmProxyValueField.h"
#include "cafPdmPtrField.h"
*/
CAF_PDM_SOURCE_INIT(TapCvfSpecialization, "TapCvfSpecialization");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TapCvfSpecialization::TapCvfSpecialization()
{
CAF_PDM_InitObject("Test Object for type specializations", "", "", "");
CAF_PDM_InitField(&m_vectorField, "m_vectorField", cvf::Vec3d::ZERO, "Start Point", "", "", "");
CAF_PDM_InitField(&m_matrixField, "m_matrixField", cvf::Mat4d::ZERO, "Zero matrix", "", "", "");
CAF_PDM_InitField(&m_colorField, "m_colorField", cvf::Color3f(cvf::Color3::GREEN), "Color3f", "", "", "");
/*
CAF_PDM_InitField(&m_toggleField, "Toggle", false, "Toggle Field", "", "Toggle Field tooltip", " Toggle Field whatsthis");
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");
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; }
*/
}

View File

@@ -0,0 +1,33 @@
#pragma once
#include "cvfBase.h"
#include "cvfColor3.h"
#include "cvfVector3.h"
#include "cvfMatrix4.h"
#include "cafPdmObject.h"
#include "cafPdmField.h"
#include "cafPdmFieldCvfColor.h"
#include "cafPdmFieldCvfVec3d.h"
#include "cafPdmFieldCvfMat4d.h"
class TapCvfSpecialization : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
TapCvfSpecialization();
caf::PdmField<QString> m_testField;
caf::PdmField<cvf::Color3f> m_colorField;
caf::PdmField<cvf::Vec3d> m_vectorField;
caf::PdmField<cvf::Mat4d> m_matrixField;
};

View File

@@ -0,0 +1,20 @@
#include "TapProject.h"
CAF_PDM_SOURCE_INIT(TapProject, "RPMProject");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TapProject::TapProject(void)
{
CAF_PDM_InitFieldNoDefault(&m_objectList, "ObjectList", "Objects list Field", "", "List", "This is a list of PdmObjects");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TapProject::~TapProject(void)
{
}

View File

@@ -0,0 +1,17 @@
#pragma once
#include "cafPdmDocument.h"
class TapProject : public caf::PdmDocument
{
CAF_PDM_HEADER_INIT;
public:
TapProject(void);
virtual ~TapProject(void);
caf::PdmChildArrayField< caf::PdmObjectHandle* > m_objectList;
};

View File

@@ -0,0 +1,108 @@
#include "WidgetLayoutTest.h"
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QGroupBox>
#include <QLabel>
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
WidgetLayoutTest::WidgetLayoutTest(QWidget* parent /*= 0*/, Qt::WindowFlags f /*= 0*/)
: QWidget(parent, f)
{
QVBoxLayout* l = new QVBoxLayout;
setLayout(l);
{
QPushButton* b1 = new QPushButton("Original config", this);
connect(b1, SIGNAL(clicked()), SLOT(setUpInitialConfiguration()));
l->addWidget(b1);
}
{
QPushButton* b1 = new QPushButton("Config A", this);
connect(b1, SIGNAL(clicked()), SLOT(setUpInitialConfigurationA()));
l->addWidget(b1);
}
{
QPushButton* b1 = new QPushButton("Config B", this);
connect(b1, SIGNAL(clicked()), SLOT(setUpInitialConfigurationB()));
l->addWidget(b1);
}
m_mainLayout = new QGridLayout();
l->addLayout(m_mainLayout);
// Create widgets
m_widget1 = new QLineEdit("1", this);
m_widget2 = new QLineEdit("2", this);
m_widget3 = new QLineEdit("3", this);
m_widget4 = new QLineEdit("4", this);
m_widget5 = new QLineEdit("5", this);
m_groupBoxA = new QGroupBox("Groupbox A", this);
m_groupBoxALayout = new QGridLayout();
m_groupBoxA->setLayout(m_groupBoxALayout);
m_groupBoxB = new QGroupBox("Groupbox B", this);
m_groupBoxBLayout = new QGridLayout();
m_groupBoxB->setLayout(m_groupBoxBLayout);
setUpInitialConfiguration();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
WidgetLayoutTest::~WidgetLayoutTest()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void WidgetLayoutTest::setUpInitialConfiguration()
{
m_mainLayout->addWidget(m_widget1);
m_mainLayout->addWidget(m_groupBoxA);
m_groupBoxALayout->addWidget(m_widget2, 0, 0);
if (!m_widget3)
{
m_widget3 = new QLabel("Test label", this);
}
m_groupBoxALayout->addWidget(m_widget3, 1, 0);
m_groupBoxALayout->addWidget(m_groupBoxB, 2, 0);
m_groupBoxBLayout->addWidget(m_widget4);
m_mainLayout->addWidget(m_widget5);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void WidgetLayoutTest::setUpInitialConfigurationA()
{
m_mainLayout->addWidget(m_widget2);
delete m_widget3;
m_widget3 = NULL;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void WidgetLayoutTest::setUpInitialConfigurationB()
{
m_mainLayout->addWidget(m_widget4);
}

View File

@@ -0,0 +1,41 @@
#pragma once
#include <QtGui/QWidget>
class QGridLayout;
class QGroupBox;
class WidgetLayoutTest : public QWidget
{
Q_OBJECT
public:
WidgetLayoutTest(QWidget* parent = 0, Qt::WindowFlags f = 0);
~WidgetLayoutTest();
private:
QGridLayout* m_mainLayout;
QGroupBox* m_groupBoxA;
QGridLayout* m_groupBoxALayout;
QGroupBox* m_groupBoxB;
QGridLayout* m_groupBoxBLayout;
QWidget* m_widget1;
QWidget* m_widget2;
QWidget* m_widget3;
QWidget* m_widget4;
QWidget* m_widget5;
private slots:
void setUpInitialConfiguration();
void setUpInitialConfigurationA();
void setUpInitialConfigurationB();
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 627 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 829 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 695 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 677 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 971 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,43 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/">
<file>images/logo32.png</file>
<file>images/mac/editcopy.png</file>
<file>images/mac/editcut.png</file>
<file>images/mac/editpaste.png</file>
<file>images/mac/editredo.png</file>
<file>images/mac/editundo.png</file>
<file>images/mac/exportpdf.png</file>
<file>images/mac/filenew.png</file>
<file>images/mac/fileopen.png</file>
<file>images/mac/fileprint.png</file>
<file>images/mac/filesave.png</file>
<file>images/mac/textbold.png</file>
<file>images/mac/textcenter.png</file>
<file>images/mac/textitalic.png</file>
<file>images/mac/textjustify.png</file>
<file>images/mac/textleft.png</file>
<file>images/mac/textright.png</file>
<file>images/mac/textunder.png</file>
<file>images/mac/zoomin.png</file>
<file>images/mac/zoomout.png</file>
<file>images/win/editcopy.png</file>
<file>images/win/editcut.png</file>
<file>images/win/editpaste.png</file>
<file>images/win/editredo.png</file>
<file>images/win/editundo.png</file>
<file>images/win/exportpdf.png</file>
<file>images/win/filenew.png</file>
<file>images/win/fileopen.png</file>
<file>images/win/fileprint.png</file>
<file>images/win/filesave.png</file>
<file>images/win/textbold.png</file>
<file>images/win/textcenter.png</file>
<file>images/win/textitalic.png</file>
<file>images/win/textjustify.png</file>
<file>images/win/textleft.png</file>
<file>images/win/textright.png</file>
<file>images/win/textunder.png</file>
<file>images/win/zoomin.png</file>
<file>images/win/zoomout.png</file>
</qresource>
</RCC>