diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt
index 3661decef..5aba06740 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/CMakeLists.txt
@@ -1,12 +1,14 @@
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}
${LIBXML2_INCLUDE_DIR}
- ${QT_INCLUDES})
+ ${QT_INCLUDES}
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../3rdparty/qtpropertybrowser)
FILE(GLOB SRC *.cpp *.h)
SET(OVQT_EXT_SYS_SRC ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin.h
${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_manager.h
- ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../extension_system/iplugin_spec.h)
SET(OVQT_PLUG_GEORGES_EDITOR_HDR georges_editor_plugin.h
georges_editor_form.h
@@ -36,7 +38,7 @@ SOURCE_GROUP("OVQT Extension System" FILES ${OVQT_EXT_SYS_SRC})
ADD_LIBRARY(ovqt_plugin_georges_editor MODULE ${SRC} ${OVQT_PLUG_GEORGES_EDITOR_MOC_SRC} ${OVQT_EXT_SYS_SRC} ${OVQT_PLUG_GEORGES_EDITOR_UI_HDRS} ${OVQT_PLUGIN_GEORGES_EDITOR_RC_SRCS})
-TARGET_LINK_LIBRARIES(ovqt_plugin_georges_editor ovqt_plugin_core nelmisc nelgeorges ${QT_LIBRARIES})
+TARGET_LINK_LIBRARIES(ovqt_plugin_georges_editor ovqt_plugin_core nelmisc nelgeorges qt_property_browser ${QT_LIBRARIES})
NL_DEFAULT_PROPS(ovqt_plugin_georges_editor "NeL, Tools, 3D: Object Viewer Qt Plugin: Georges Editor")
NL_ADD_RUNTIME_FLAGS(ovqt_plugin_georges_editor)
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/actions.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/actions.cpp
new file mode 100644
index 000000000..dba45fb96
--- /dev/null
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/actions.cpp
@@ -0,0 +1,17 @@
+// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework
+// Copyright (C) 2011 Adrian Jaekel
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#include "actions.h"
\ No newline at end of file
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/actions.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/actions.h
new file mode 100644
index 000000000..c646adc72
--- /dev/null
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/actions.h
@@ -0,0 +1,20 @@
+// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework
+// Copyright (C) 2011 Adrian Jaekel
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef ACTIONS_H
+#define ACTIONS_H
+
+#endif // ACTIONS_H
\ No newline at end of file
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.cpp
index 7f21fa072..ab306bf05 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.cpp
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.cpp
@@ -37,6 +37,8 @@
#include "georgesform_proxy_model.h"
#include "formitem.h"
+#if 0
+
namespace GeorgesQt
{
@@ -276,3 +278,5 @@ namespace GeorgesQt
editor->setGeometry(r);
}
} /* namespace GeorgesQt */
+
+#endif // 0
\ No newline at end of file
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.h
index b6885833e..42b10ef3d 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.h
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formdelegate.h
@@ -19,6 +19,8 @@
#include
+#if 0
+
namespace GeorgesQt
{
@@ -38,4 +40,6 @@ namespace GeorgesQt
};
}
+#endif // 0
+
#endif // FORMDELEGATE_H
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.cpp
index 014338a2d..98bffa7e2 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.cpp
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.cpp
@@ -17,9 +17,11 @@
#include "formitem.h"
// Qt includes
+#include
// NeL includes
#include
+#include
#include
#include
@@ -27,15 +29,8 @@ using namespace NLGEORGES;
namespace GeorgesQt
{
-
- CFormItem::CFormItem(NLGEORGES::UFormElm* elm, const QList &data, CFormItem *parent,
- NLGEORGES::UFormElm::TWhereIsValue wV, NLGEORGES::UFormElm::TWhereIsNode wN)
+ CFormItem::CFormItem()
{
- parentItem = parent;
- itemData = data;
- formElm = elm;
- whereV = wV;
- whereN = wN;
}
CFormItem::~CFormItem()
@@ -61,12 +56,14 @@ namespace GeorgesQt
int CFormItem::columnCount() const
{
//nlinfo("columnCount %d",itemData.count());
- return itemData.count();
+ //return itemData.count();
+ return 1;
}
QVariant CFormItem::data(int column) const
{
- return itemData.value(column);
+ //return itemData.value(column);
+ return QVariant(_Name.c_str());
}
CFormItem *CFormItem::parent()
@@ -84,275 +81,146 @@ namespace GeorgesQt
bool CFormItem::setData(int column, const QVariant &value)
{
- if (column < 0 || column >= itemData.size())
+ if (column != 0)
return false;
- // TODO: default values
- if (!formElm)
- return false;
+ bool deleteInsert = false;
- itemData[column] = value;
- if (formElm->isAtom())
- {
- const NLGEORGES::UType *type = formElm->getType();
- if (type)
- {
- switch (type->getType())
- {
- case NLGEORGES::UType::UnsignedInt:
- case NLGEORGES::UType::SignedInt:
- case NLGEORGES::UType::Double:
- case NLGEORGES::UType::String:
- if (parentItem->formElm->isArray())
- {
- //((NLGEORGES::CFormElm*)parentItem->formElm);//->arrayInsertNodeByName(
- //if(parentItem->formElm->getArrayNode(elmName, num))
- //{
- //}
+
- bool ok;
- // TODO: the node can be renamed from eg "#0" to "foobar"
- int arrayIndex = itemData[0].toString().remove("#").toInt(&ok);
- if(ok)
- {
- NLGEORGES::UFormElm *elmt = 0;
- if(parentItem->formElm->getArrayNode(&elmt, arrayIndex) && elmt)
- {
- if (elmt->isAtom())
- {
- ((NLGEORGES::CFormElmAtom*)elmt)->setValue(value.toString().toStdString().c_str());
- nldebug(QString("array element string %1 %2")
- .arg(itemData[0].toString()).arg(value.toString())
- .toStdString().c_str());
- }
- }
- }
- }
- else
- {
- if(parentItem->formElm->setValueByName(
- value.toString().toStdString().c_str(),
- itemData[0].toString().toStdString().c_str()))
- {
- nldebug(QString("string %1 %2")
- .arg(itemData[0].toString()).arg(value.toString())
- .toStdString().c_str());
- }
- else
- {
- nldebug(QString("FAILED string %1 %2")
- .arg(itemData[0].toString()).arg(value.toString())
- .toStdString().c_str());
- }
- }
- break;
- case NLGEORGES::UType::Color:
- nldebug("Color is TODO");
- break;
- default:
- break;
- }
- }
- }
- else
+ // Get the parent node
+ const NLGEORGES::CFormDfn *parentDfn;
+ uint indexDfn;
+ const NLGEORGES::CFormDfn *nodeDfn;
+ const NLGEORGES::CType *nodeType;
+ NLGEORGES::CFormElm *parentNode;
+ NLGEORGES::UFormDfn::TEntryType type;
+ bool array;
+ bool parentVDfnArray;
+ NLGEORGES::CForm *form=static_cast(m_form);
+ NLGEORGES::CFormElm *elm = static_cast(&form->getRootNode());
+ nlverify ( elm->getNodeByName (_FormName.c_str(), &parentDfn, indexDfn, &nodeDfn, &nodeType, &parentNode, type, array, parentVDfnArray, true, NLGEORGES_FIRST_ROUND) );
+
+ if (parentItem && parentItem->nodeType () == CFormItem::Form)
{
- nldebug("setting sth other than Atom");
+ std::string newName = value.toString().toStdString();
+ _Name = newName;
+
+ // Create an action to update the form.
}
- //formElm->setValueByName();
return true;
}
-// CFormItem *CFormItem::add (/*TSub type,*/ const char *name, uint structId, const char *formName, uint slot)
-// {
- // Add at the end
-// uint index = _Children.size();
-// _Children.push_back (new CGeorgesEditDocSub);
+ bool CFormItem::isEditable(int column)
+ {
+ // Ensure only valid types can be edited.
+ if(_Type == Null)
+ return false;
-// _Children[index]->_Type = type;
-// _Children[index]->_Name = name;
-// _Children[index]->_Parent = this;
-// _Children[index]->_StructId = structId;
-// _Children[index]->_FormName = formName;
-// _Children[index]->_Slot = slot;
-// return _Children[index];
-// CFormItem *newNode = new CFormItem();
-// appendChild(newNode);
-// return NULL;
-// }
+ // Make sure only the first column (name) can be editted.
+ if (column != 0)
+ return false;
- CFormItem *CFormItem::add(NLGEORGES::UFormElm* root, std::string elmName)
+ CFormItem *parent = this->parent();
+
+ // If it wasn't a root node then lets check the node type.
+ const NLGEORGES::CFormDfn *parentDfn;
+ uint indexDfn;
+ const NLGEORGES::CFormDfn *nodeDfn;
+ const NLGEORGES::CType *nodeType;
+ NLGEORGES::CFormElm *parentNode;
+ NLGEORGES::UFormDfn::TEntryType type;
+ bool array;
+ bool parentVDfnArray;
+ NLGEORGES::CForm *form = static_cast(m_form);
+ NLGEORGES::CFormElm *elm = static_cast(&form->getRootNode());
+ nlverify ( elm->getNodeByName (parent->formName ().c_str (), &parentDfn, indexDfn,
+ &nodeDfn, &nodeType, &parentNode, type, array, parentVDfnArray, true, NLGEORGES_FIRST_ROUND) );
+
+ if(array && parentNode)
+ return true;
+
+ return false;
+
+ }
+
+ QIcon CFormItem::getItemImage(CFormItem *rootItem)
+ {
+ if(_Type == CFormItem::Null)
+ {
+ return QIcon(":/images/root.ico");
+ }
+ else if(_Type == CFormItem::Form)
+ {
+ // If the parent is the root item then this is the content.
+ if(parentItem == rootItem)
+ return QIcon(":/images/root.ico");
+
+ // If it wasn't a root node then lets check the node type.
+ const NLGEORGES::CFormDfn *parentDfn;
+ uint indexDfn;
+ const NLGEORGES::CFormDfn *nodeDfn;
+ const NLGEORGES::CType *nodeType;
+ NLGEORGES::CFormElm *node;
+ NLGEORGES::UFormDfn::TEntryType type;
+ bool array;
+ bool parentVDfnArray;
+ NLGEORGES::CForm *form = static_cast(m_form);
+ NLGEORGES::CFormElm *elm = static_cast(&form->getRootNode());
+ nlverify ( elm->getNodeByName (_FormName.c_str(), &parentDfn, indexDfn, &nodeDfn, &nodeType, &node, type, array, parentVDfnArray, true, NLGEORGES_FIRST_ROUND) );
+
+ if(array)
+ {
+ return QIcon(":/images/array.ico");
+ }
+ else
+ {
+ if(type == NLGEORGES::UFormDfn::EntryType)
+ {
+ if(parentDfn)
+ {
+ // Not sure what the hell to do with this. Gets filename from parent dfn?
+ }
+ return QIcon(":/images/zfee51.ico");
+ }
+ else if(type == NLGEORGES::UFormDfn::EntryDfn)
+ {
+ if(parentDfn)
+ {
+ // Not sure what the hell to do with this. Gets filename from parent dfn?
+ }
+ return QIcon(":/images/struct.ico");
+ }
+ else if(type == NLGEORGES::UFormDfn::EntryVirtualDfn)
+ {
+ if(node)
+ {
+ // Not sure what the hell to do with this. Gets filename from parent dfn?
+ std::string dfnName;
+ NLMISC::safe_cast(node)->getDfnName(dfnName);
+ // return dfnName.c_str() ?
+ }
+ return QIcon(":/images/vstruct.ico");
+ }
+ }
+ //return QIcon(":/images/struct.ico");
+ }
+ return QIcon();
+ }
+
+ CFormItem *CFormItem::add (TSub type, const char *name, uint structId, const char *formName, uint slot, NLGEORGES::UForm *formPtr)
{
- CFormItem *newItem = NULL;
- UFormElm::TWhereIsNode *whereN = new UFormElm::TWhereIsNode;
- UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue;
- // Append a new item to the current parent's list of children.
-// std::string elmName;
-// if(root->getStructNodeName(num, elmName))
-// {
- QList columnData;
- //QVariant value;
- std::string value;
- //NLMISC::CRGBA value_color;
- //uint value_uint;
- //sint value_sint;
- //double value_double;
- QString elmtType = "";
- UFormElm *elmt = 0;
- if(root->getNodeByName(&elmt, elmName.c_str(), whereN, true))
- {
- if (elmt)
- {
- if (elmt->isArray())
- elmtType = "Array";
- if (elmt->isStruct())
- elmtType = "Struct";
- if (elmt->isAtom())
- {
- elmtType = "Atom";
- uint numDefinitions = 0;
- const UType *type = elmt->getType();
- if (type)
- {
- numDefinitions = type->getNumDefinition();
- root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
- switch (type->getType())
- {
- case UType::UnsignedInt:
- value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString();
- elmtType.append("_uint");break;
- case UType::SignedInt:
- value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString();
- elmtType.append("_sint");break;
- case UType::Double:
- value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble(),0,'f',1).toStdString();
- elmtType.append("_double");break;
- case UType::String:
- elmtType.append("_string");break;
- case UType::Color:
- elmtType.append("_color");break;
- default:
- elmtType.append("_unknownType");
- }
- }
- else
- {
- elmtType.append("_noType");
- }
+ CFormItem *newNode = new CFormItem();
+ newNode->_Type = type;
+ newNode->_Name = name;
+ newNode->parentItem = this;
+ newNode->_StructId = structId;
+ newNode->_FormName = formName;
+ newNode->_Slot = slot;
+ newNode->m_form = formPtr;
- if (numDefinitions)
- {
- std::string l, v;
- QString tmpLabel, tmpValue;
- for (uint i = 0; i < numDefinitions; i++)
- {
- type->getDefinition(i,l,v);
- tmpLabel = l.c_str();
- tmpValue = v.c_str();
- if (type->getType() == UType::SignedInt)
- {
- if (QString("%1").arg(value.c_str()).toDouble() == tmpValue.toDouble()) {
- value = l;
- break;
- }
- }
- if (type->getType() == UType::String)
- {
- if (QString(value.c_str()) == tmpValue)
- {
- value = l;
- break;
- }
- }
- }
- }
- }
- if (elmt->isVirtualStruct())
- {
- root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
- elmtType = "VirtualStruct";
- }
- switch (*whereN)
- {
- case UFormElm::NodeForm:
- elmtType.append("_fromForm"); break;
- case UFormElm::NodeParentForm:
- elmtType.append("_fromParentForm"); break;
- case UFormElm::NodeDfn:
- elmtType.append("_isDFN"); break;
- case UFormElm::NodeType:
- elmtType.append("_isType"); break;
- default:
- elmtType.append("_noNode");
- }
- switch (*whereV)
- {
- case UFormElm::ValueForm:
- elmtType.append("_formValue"); break;
- case UFormElm::ValueParentForm:
- elmtType.append("_parentValue"); break;
- case UFormElm::ValueDefaultDfn:
- elmtType.append("_dfnValue"); break;
- case UFormElm::ValueDefaultType:
- elmtType.append("_typeValue"); break;
- default:
- elmtType.append("_noValue");
- }
- columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType;
-
- newItem = new CFormItem(elmt, columnData, this, *whereV, *whereN);
- this->appendChild(newItem);
-
- return newItem;
- //if (parents.last()->childCount() > 0) {
- // parents << parents.last()->child(parents.last()->childCount()-1);
- //}
-
- // The building of the tree should be haoppening in the mode,.
- //loadFormData(elmt, parent->child(parent->childCount()-1));
- }
- else
- {
- // add Defaults
- // TODO: spams warnings for non ATOM values but i dont get type of non existing nodes
- bool success = root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
- switch (*whereN)
- {
- case UFormElm::NodeForm:
- elmtType.append("_fromForm"); break;
- case UFormElm::NodeParentForm:
- elmtType.append("_fromParentForm"); break;
- case UFormElm::NodeDfn:
- elmtType.append("_isDFN"); break;
- case UFormElm::NodeType:
- elmtType.append("_isType"); break;
- default:
- elmtType.append("_noNode");
- }
- switch (*whereV)
- {
- case UFormElm::ValueForm:
- elmtType.append("_formValue"); break;
- case UFormElm::ValueParentForm:
- elmtType.append("_parentValue"); break;
- case UFormElm::ValueDefaultDfn:
- elmtType.append("_dfnValue"); break;
- case UFormElm::ValueDefaultType:
- elmtType.append("_typeValue"); break;
- default:
- elmtType.append("_noValue");
- }
-
- columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType;
- newItem = new CFormItem(elmt, columnData, this, *whereV, *whereN);
- this->appendChild(newItem);
- return newItem;
- }
-// }
-// else
-// {
-// nlinfo("getNodeByName returned false");
-// }
- }
+ appendChild(newNode);
+ return newNode;
}
}
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.h
index c56422caf..e08a198bd 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.h
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/formitem.h
@@ -1,76 +1,84 @@
-// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework
-// Copyright (C) 2011 Adrian Jaekel
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU Affero General Public License as
-// published by the Free Software Foundation, either version 3 of the
-// License, or (at your option) any later version.
-//
-// This program 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 Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program. If not, see .
-
-#ifndef FORMITEM_H
-#define FORMITEM_H
-
-// NeL includes
-#include
-
-// Qt includes
-#include
-#include
-
-namespace GeorgesQt
-{
-
- class CFormItem
-
- {
- public:
- CFormItem(NLGEORGES::UFormElm *elm, const QList &data,
- CFormItem *parent = 0,
- NLGEORGES::UFormElm::TWhereIsValue wV = NLGEORGES::UFormElm::ValueForm,
- NLGEORGES::UFormElm::TWhereIsNode wN = NLGEORGES::UFormElm::NodeForm);
- ~CFormItem();
-
- void appendChild(CFormItem *child);
- //CFormItem *add (/*TSub type,*/ const char *name, uint structId, const char *formName, uint slot);
- CFormItem *add(NLGEORGES::UFormElm* root, std::string elmName);
-
- CFormItem *child(int row);
- int childCount() const;
- int columnCount() const;
- QVariant data(int column) const;
- int row() const;
- CFormItem *parent();
- bool setData(int column, const QVariant &value);
- NLGEORGES::UFormElm* getFormElm() {return formElm;}
- NLGEORGES::UFormElm::TWhereIsValue valueFrom()
- {
- return whereV;
- }
- NLGEORGES::UFormElm::TWhereIsNode nodeFrom()
- {
- return whereN;
- }
-
- void setValueFrom(NLGEORGES::UFormElm::TWhereIsValue wV) { whereV = wV; }
- void setNodeFrom(NLGEORGES::UFormElm::TWhereIsNode wN) { whereN = wN; }
-
-
- private:
- //CFormItem() { whereV = NLGEORGES::UFormElm::ValueForm; whereN = NLGEORGES::UFormElm::NodeForm; }
- QList childItems;
- QList itemData;
- CFormItem *parentItem;
- NLGEORGES::UFormElm* formElm;
- NLGEORGES::UFormElm::TWhereIsValue whereV;
- NLGEORGES::UFormElm::TWhereIsNode whereN;
- }; // CFormItem
-
-}
-#endif // FORMITEM_H
+// Object Viewer Qt - Georges Editor Plugin - MMORPG Framework
+// Copyright (C) 2011 Adrian Jaekel
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program 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 Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see .
+
+#ifndef FORMITEM_H
+#define FORMITEM_H
+
+// NeL includes
+#include
+#include
+
+// Qt includes
+#include
+#include
+
+namespace GeorgesQt
+{
+
+ class CFormItem
+ {
+ public:
+ // What is the sub object ?
+ enum TSub
+ {
+ Null, // Nothing in this node (root ?)
+ Header, // Header node
+ Type, // This node is a type
+ Dfn, // This node is a dfn
+ Form, // This node is a form
+ };
+
+ CFormItem();
+ ~CFormItem();
+
+ void appendChild(CFormItem *child);
+
+ CFormItem *add (TSub type, const char *name, uint structId, const char *formName, uint slot, NLGEORGES::UForm *formPtr);
+
+ CFormItem *child(int row);
+ int childCount() const;
+ int columnCount() const;
+ QVariant data(int column) const;
+ int row() const;
+ CFormItem *parent();
+ bool setData(int column, const QVariant &value);
+
+ TSub nodeType() { return _Type; }
+ std::string formName() { return _FormName; }
+ std::string name() { return _Name; }
+ uint structId() { return _StructId; }
+
+ bool isEditable(int column);
+
+ QIcon getItemImage(CFormItem *rootItem);
+
+ private:
+ QList childItems;
+ QList itemData;
+ CFormItem *parentItem;
+ NLGEORGES::UFormElm* formElm;
+ NLGEORGES::UForm *m_form;
+
+ uint _StructId;
+ std::string _Name;
+ std::string _FormName;
+ TSub _Type;
+ uint _Slot;
+
+ }; // CFormItem
+
+}
+#endif // FORMITEM_H
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor.qrc b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor.qrc
index 3d514dbc0..8d71d1438 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor.qrc
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_editor.qrc
@@ -1,5 +1,12 @@
+ images/array.ico
+ images/header.ico
+ images/hold.ico
+ images/root.ico
+ images/struct.ico
+ images/vstruct.ico
+ images/zfee51.ico
images/ic_nel_georges_editor.png
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp
index 92da6e8a0..aa289a4aa 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_dialog.cpp
@@ -72,23 +72,10 @@ namespace GeorgesQt
m_ui.treeView->header()->setStretchLastSection(true);
m_ui.treeViewTabWidget->setTabEnabled (2,false);
- m_ui.checkBoxParent->setStyleSheet("background-color: rgba(0,255,0,30)");
- m_ui.checkBoxDefaults->setStyleSheet("background-color: rgba(255,0,0,30)");
m_form = 0;
- FormDelegate *formdelegate = new FormDelegate(this);
- m_ui.treeView->setItemDelegateForColumn(1, formdelegate);
-
- // Set up custom context menu.
- setContextMenuPolicy(Qt::CustomContextMenu);
- connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&)));
-
connect(m_ui.treeView, SIGNAL(doubleClicked (QModelIndex)),
this, SLOT(doubleClicked (QModelIndex)));
- connect(m_ui.checkBoxParent, SIGNAL(toggled(bool)),
- this, SLOT(filterRows()));
- connect(m_ui.checkBoxDefaults, SIGNAL(toggled(bool)),
- this, SLOT(filterRows()));
connect(m_header, SIGNAL(headerClicked(int)),
this, SLOT(headerClicked(int)));
}
@@ -258,16 +245,9 @@ namespace GeorgesQt
loadedForm = m_form->getFilename().c_str();
CGeorgesFormModel *model = new CGeorgesFormModel(m_form,deps,comments,parents,m_header->expanded());
- CGeorgesFormProxyModel *proxyModel = new CGeorgesFormProxyModel();
- proxyModel->setSourceModel(model);
- m_ui.treeView->setModel(proxyModel);
+ m_ui.treeView->setModel(model);
m_ui.treeView->expandAll();
- // this is a debug output row
- m_ui.treeView->hideColumn(3);
- filterRows();
-
- // //_ui.treeView->setRowHidden(0,QModelIndex(),true);
connect(model, SIGNAL(dataChanged(const QModelIndex, const QModelIndex)),
this, SLOT(modifiedFile()));
@@ -283,8 +263,7 @@ namespace GeorgesQt
NLGEORGES::CForm *parentForm = dynamic_cast(uParentForm);
NLGEORGES::CForm *mainForm = static_cast(m_form);
- CGeorgesFormProxyModel * proxyModel = dynamic_cast(m_ui.treeView->model());
- CGeorgesFormModel *model = dynamic_cast(proxyModel->sourceModel());
+ CGeorgesFormModel *model = dynamic_cast(m_ui.treeView->model());
if(parentForm)
{
@@ -397,19 +376,15 @@ namespace GeorgesQt
void CGeorgesTreeViewDialog::doubleClicked ( const QModelIndex & index )
{
- // TODO: this is messy :( perhaps this can be done better
- CGeorgesFormProxyModel * proxyModel =
- dynamic_cast(m_ui.treeView->model());
- CGeorgesFormModel *model =
- dynamic_cast(proxyModel->sourceModel());
- QModelIndex sourceIndex = proxyModel->mapToSource(index);
+ //CGeorgesFormModel *model =
+ // dynamic_cast((m_ui.treeView->model());
- CFormItem *item = model->getItem(sourceIndex);
+ //CFormItem *item = model->getItem(index);
- if (item->parent() && item->parent()->data(0) == "parents")
- {
- Q_EMIT changeFile(CPath::lookup(item->data(0).toString().toStdString(),false).c_str());
- }
+ //if (item->parent() && item->parent()->data(0) == "parents")
+ //{
+ // Q_EMIT changeFile(CPath::lookup(item->data(0).toString().toStdString(),false).c_str());
+ //}
//// col containing additional stuff like icons
//if (index.column() == 2)
@@ -475,129 +450,129 @@ namespace GeorgesQt
void CGeorgesTreeViewDialog::filterRows()
{
- CGeorgesFormProxyModel * mp = dynamic_cast(m_ui.treeView->model());
- CGeorgesFormModel *m = dynamic_cast(mp->sourceModel());
- if (m) {
- m->setShowParents(m_ui.checkBoxParent->isChecked());
- m->setShowDefaults(m_ui.checkBoxDefaults->isChecked());
- }
+ //CGeorgesFormProxyModel * mp = dynamic_cast(m_ui.treeView->model());
+ //CGeorgesFormModel *m = dynamic_cast(mp->sourceModel());
+ //if (m) {
+ // m->setShowParents(m_ui.checkBoxParent->isChecked());
+ // m->setShowDefaults(m_ui.checkBoxDefaults->isChecked());
+ //}
}
void CGeorgesTreeViewDialog::showContextMenu(const QPoint &pos)
{
- QMenu contextMenu;
- QMenu *structContext = NULL;
- QPoint globalPos = this->mapToGlobal(pos);
-
- // Fisrt we're going to see if we've right clicked on a new item and select it.
- const QModelIndex &index = this->m_ui.treeView->currentIndex();
+ //QMenu contextMenu;
+ //QMenu *structContext = NULL;
+ //QPoint globalPos = this->mapToGlobal(pos);
+ //
+ //// Fisrt we're going to see if we've right clicked on a new item and select it.
+ //const QModelIndex &index = this->m_ui.treeView->currentIndex();
- if(!index.isValid())
- return;
+ //if(!index.isValid())
+ // return;
- CGeorgesFormProxyModel * mp = dynamic_cast(m_ui.treeView->model());
- CGeorgesFormModel *m = dynamic_cast(mp->sourceModel());
- QModelIndex sourceIndex = mp->mapToSource(index);
+ //CGeorgesFormProxyModel * mp = dynamic_cast(m_ui.treeView->model());
+ //CGeorgesFormModel *m = dynamic_cast(mp->sourceModel());
+ //QModelIndex sourceIndex = mp->mapToSource(index);
- if (m)
- {
-
- CFormItem *item = m->getItem(sourceIndex);
+ //if (m)
+ //{
+ //
+ // CFormItem *item = m->getItem(sourceIndex);
- // Right click on the "parents" item
- if (item->data(0) == "parents")
- contextMenu.addAction("Add parent...");
- // Right click on a parent item
- else if(item->parent() && item->parent()->data(0) == "parents")
- {
- contextMenu.addAction("Add parent...");
- contextMenu.addAction("Remove parent");
- }
- else if(item->getFormElm()->isArray())
- contextMenu.addAction("Add array entry...");
- else if(item->getFormElm()->isStruct())
- {
- QMenu *structContext = new QMenu("Add struct element...", this);
- contextMenu.addMenu(structContext);
+ // // Right click on the "parents" item
+ // if (item->data(0) == "parents")
+ // contextMenu.addAction("Add parent...");
+ // // Right click on a parent item
+ // else if(item->parent() && item->parent()->data(0) == "parents")
+ // {
+ // contextMenu.addAction("Add parent...");
+ // contextMenu.addAction("Remove parent");
+ // }
+ // else if(item->getFormElm()->isArray())
+ // contextMenu.addAction("Add array entry...");
+ // else if(item->getFormElm()->isStruct())
+ // {
+ // QMenu *structContext = new QMenu("Add struct element...", this);
+ // contextMenu.addMenu(structContext);
- NLGEORGES::UFormDfn *defn = item->getFormElm()->getStructDfn();
- if(defn)
- {
- for(uint defnNum=0; defnNum < defn->getNumEntry(); defnNum++)
- {
- std::string entryName;
- std::string dummy;
- UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue;
- bool result = defn->getEntryName(defnNum, entryName);
- bool result2 = item->getFormElm()->getValueByName(dummy, entryName.c_str(), NLGEORGES::UFormElm::Eval, whereV);
+ // NLGEORGES::UFormDfn *defn = item->getFormElm()->getStructDfn();
+ // if(defn)
+ // {
+ // for(uint defnNum=0; defnNum < defn->getNumEntry(); defnNum++)
+ // {
+ // std::string entryName;
+ // std::string dummy;
+ // UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue;
+ // bool result = defn->getEntryName(defnNum, entryName);
+ // bool result2 = item->getFormElm()->getValueByName(dummy, entryName.c_str(), NLGEORGES::UFormElm::Eval, whereV);
-
- if(result2 && *whereV != UFormElm::ValueForm)
- {
- structContext->addAction(entryName.c_str());
- }
- delete whereV;
- }
- }
- }
- else if(item->getFormElm()->isAtom() && item->valueFrom() == NLGEORGES::UFormElm::ValueForm)
- contextMenu.addAction("Revert to parent/default...");
+ //
+ // if(result2 && *whereV != UFormElm::ValueForm)
+ // {
+ // structContext->addAction(entryName.c_str());
+ // }
+ // delete whereV;
+ // }
+ // }
+ // }
+ // else if(item->getFormElm()->isAtom() && item->valueFrom() == NLGEORGES::UFormElm::ValueForm)
+ // contextMenu.addAction("Revert to parent/default...");
- QAction *selectedItem = contextMenu.exec(globalPos);
- if(selectedItem)
- {
- if(selectedItem->text() == "Add parent...")
- {
- // Get the file extension of the form so we can build a dialog pattern.
- QString file = m_form->getFilename().c_str();
- file = file.remove(0,file.indexOf(".")+1);
- QString filePattern = "Parent Sheets (*."+file+")";
-
- nlinfo("parent defn name '%s'", file.toStdString().c_str());
- QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select parent sheets..."), m_lastSheetDir, filePattern);
- if(!fileNames.isEmpty())
- {
- Q_FOREACH(QString fileToParent, fileNames)
- {
- // Get just the filename. Georges doesn't want the path.
- QFileInfo pathInfo( fileToParent );
- QString tmpFileName( pathInfo.fileName() );
+ // QAction *selectedItem = contextMenu.exec(globalPos);
+ // if(selectedItem)
+ // {
+ // if(selectedItem->text() == "Add parent...")
+ // {
+ // // Get the file extension of the form so we can build a dialog pattern.
+ // QString file = m_form->getFilename().c_str();
+ // file = file.remove(0,file.indexOf(".")+1);
+ // QString filePattern = "Parent Sheets (*."+file+")";
+ //
+ // nlinfo("parent defn name '%s'", file.toStdString().c_str());
+ // QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select parent sheets..."), m_lastSheetDir, filePattern);
+ // if(!fileNames.isEmpty())
+ // {
+ // Q_FOREACH(QString fileToParent, fileNames)
+ // {
+ // // Get just the filename. Georges doesn't want the path.
+ // QFileInfo pathInfo( fileToParent );
+ // QString tmpFileName( pathInfo.fileName() );
- nlinfo("requesting to add parent form '%s'", tmpFileName.toStdString().c_str());
-
- // Call to add the form and load it into the Georges form.
- addParentForm(tmpFileName);
+ // nlinfo("requesting to add parent form '%s'", tmpFileName.toStdString().c_str());
+ //
+ // // Call to add the form and load it into the Georges form.
+ // addParentForm(tmpFileName);
- // Save the file lookup path for future dialog boxes.
- m_lastSheetDir = pathInfo.absolutePath();
- }
- }
- m_ui.treeView->expandAll();
- }
- else if(selectedItem->text() == "Remove parent")
- {
- NLGEORGES::CForm *form = static_cast(m_form);
- QString parentFileName = item->data(0).toString();
+ // // Save the file lookup path for future dialog boxes.
+ // m_lastSheetDir = pathInfo.absolutePath();
+ // }
+ // }
+ // m_ui.treeView->expandAll();
+ // }
+ // else if(selectedItem->text() == "Remove parent")
+ // {
+ // NLGEORGES::CForm *form = static_cast(m_form);
+ // QString parentFileName = item->data(0).toString();
- for(uint num = 0; num < form->getParentCount(); num++)
- {
- QString curParentName = form->getParent(num)->getFilename().c_str();
- if(parentFileName == curParentName)
- {
- form->removeParent(num);
- m->removeParentForm(parentFileName);
- break;
- }
- }
+ // for(uint num = 0; num < form->getParentCount(); num++)
+ // {
+ // QString curParentName = form->getParent(num)->getFilename().c_str();
+ // if(parentFileName == curParentName)
+ // {
+ // form->removeParent(num);
+ // m->removeParentForm(parentFileName);
+ // break;
+ // }
+ // }
- m_ui.treeView->expandAll();
- }
+ // m_ui.treeView->expandAll();
+ // }
- } // if selected context menu item is valid.
- } // if 'm' model valid.
+ // } // if selected context menu item is valid.
+ //} // if 'm' model valid.
- if(structContext)
- delete structContext;
+ //if(structContext)
+ // delete structContext;
}
} /* namespace GeorgesQt */
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui
index 8d53bfdd6..0bf52a3ea 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georges_treeview_form.ui
@@ -6,8 +6,8 @@
0
0
- 400
- 300
+ 564
+ 525
@@ -18,8 +18,8 @@
- 199
- 165
+ 280
+ 242
@@ -29,9 +29,21 @@
-
+
+
+ 0
+ 0
+
+
+
-
+
+
+ 0
+ 0
+
+
QTabWidget::West
@@ -39,60 +51,40 @@
0
-
- Qt::NoFocus
-
Form
-
-
- 0
-
-
-
-
-
-
- 0
- 0
-
-
-
-
- 0
- 0
-
-
-
- true
-
-
-
- -
-
-
- Parent
-
-
-
- -
-
+
+
-
+
Qt::Horizontal
-
-
- 40
- 20
-
-
-
-
- -
-
-
- Defaults
-
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 0
+
+
+
+ true
+
+
+
+
+
+ 0
+ 0
+
+
+
@@ -126,8 +118,14 @@
-
-
-
+
+
+ QtTreePropertyBrowser
+ QWidget
+
+ 1
+
+
+
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp
index b8c9f56ff..9a329f396 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_model.cpp
@@ -53,7 +53,7 @@ namespace GeorgesQt
{
m_form = form;
m_rootData << "Value" << "Data" << "Extra";// << "Type";
- m_rootItem = new CFormItem(m_rootElm, m_rootData);
+ m_rootItem = new CFormItem();
m_dependencies = deps;
m_comments = comment;
m_parents = parents;
@@ -81,144 +81,12 @@ namespace GeorgesQt
{
return getItem(p_index)->data(p_index.column());
}
- case Qt::BackgroundRole:
- {
- QBrush defaultBrush = QBrush(QColor(255,0,0,30));
- QBrush parentBrush = QBrush(QColor(0,255,0,30));
-
- // if elm not existing it must be some kind of default or type value
- if(!getItem(p_index)->getFormElm())
- {
- return defaultBrush;
- }
-
- // else it might be some parent elm
- switch (getItem(p_index)->nodeFrom())
- {
- case NLGEORGES::UFormElm::NodeParentForm:
- {
- return parentBrush;
- }
- case NLGEORGES::UFormElm::NodeForm:
- {
- switch (getItem(p_index)->valueFrom())
- {
- case NLGEORGES::UFormElm::ValueParentForm:
- {
- return parentBrush;
- }
- default:
- {
- // parent status test kindof ugly, testing only 2 steps deep
- // only needed for colorization as treeview default hides childs
- // when parent is hidden
- CFormItem *parent = getItem(p_index)->parent();
- if (parent)
- {
- if (parent->nodeFrom() == NLGEORGES::UFormElm::NodeParentForm)
- {
- return parentBrush;
- }
-
- CFormItem *parentParent = parent->parent();
- if (parentParent)
- {
- if (parentParent->nodeFrom() == NLGEORGES::UFormElm::NodeParentForm)
- {
- return parentBrush;
- }
- } // endif parentParent
- } // endif parent
- } // end default
- } // end switch valueFrom
- } // end case nodeForm
- } // end switch nodeFrom
- return QVariant();
- }
- case Qt::DecorationRole:
- {
- if (p_index.column() == 2)
- {
- //p_index.
- QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent());
- CFormItem *item = getItem(in);
-
- QString value = item->data(1).toString();
- //QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str();
-
- /*if (value.contains(".shape"))
- {
- if (Modules::objViewInt())
- {
- QIcon *icon = Modules::objViewInt()->saveOneImage(value.toStdString());
- if (icon)
- {
- if(icon->isNull())
- return QIcon(":/images/pqrticles.png");
- else
- return QIcon(*icon);
- }
- else
- {
- return QIcon();
- }
- }
- }*/
- if(value.contains(".tga") || value.contains(".png"))
- {
- QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str();
- if(path.isEmpty())
- {
- path = ":/images/pqrticles.png";
- }
- return QIcon(path);
- }
- }
- return QVariant();
- break;
- }
- case Qt::ToolTipRole:
- {
- if (p_index.column() == 2)
- {
- QModelIndex in = index(p_index.row(),p_index.column()-1,p_index.parent());
- CFormItem *item = getItem(in);
- QString value = item->data(1).toString();
-
- /*if (value.contains(".shape"))
- {
- if (Modules::objViewInt())
- {
- QIcon *icon = Modules::objViewInt()->saveOneImage(value.toStdString());
- if (icon)
- {
- if(icon->isNull())
- return QIcon(":/images/pqrticles.png");
- else
- return QIcon(*icon);
- }
- else
- {
- return QIcon();
- }
- }
- }*/
- if(value.contains(".tga") || value.contains(".png"))
- {
- QString path = NLMISC::CPath::lookup(value.toStdString(),false).c_str();
- if(path.isEmpty())
- {
- path = ":/images/pqrticles.png";
- }
-
- QString imageTooltip = QString("").arg(path);
-
- return imageTooltip;
- }
- }
- return QVariant();
- break;
- }
+ case Qt::DecorationRole:
+ {
+ // Based on the _Type return a QIcon from resources.
+ CFormItem *item = getItem(p_index);
+ return item->getItemImage(m_rootItem);
+ }
default:
return QVariant();
}
@@ -239,14 +107,17 @@ namespace GeorgesQt
/******************************************************************************/
- bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value,
- int role)
+ bool CGeorgesFormModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (role != Qt::EditRole)
return false;
+
+ CFormItem *item = getItem(index);
- CFormItem *item = getItem(index);
+ if(!item->isEditable(index.column()))
+ return false;
+
bool result = item->setData(index.column(), value);
Q_EMIT dataChanged(index, index);
@@ -264,8 +135,12 @@ namespace GeorgesQt
Qt::ItemFlags returnValue = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
- if(index.column() == 1)
- returnValue |= Qt::ItemIsEditable;
+ CFormItem *item = getItem(index);
+
+ if(item->isEditable(index.column()))
+ {
+ returnValue |= Qt::ItemIsEditable;
+ }
return returnValue;
@@ -383,223 +258,7 @@ namespace GeorgesQt
/******************************************************************************/
void CGeorgesFormModel::loadFormData(UFormElm *root, CFormItem *parent) {
-
- if (!root)
- return;
-
- uint num = 0;
-
-
- if (root->isStruct())
- {
- //((CFormElm*)root)->getForm()->getComment();
- uint structSize = 0;
- root->getStructSize(structSize);
- while (num < structSize)
- {
- UFormElm::TWhereIsNode *whereN = new UFormElm::TWhereIsNode;
- UFormElm::TWhereIsValue *whereV = new UFormElm::TWhereIsValue;
- // Append a new item to the current parent's list of children.
- std::string elmName;
- if(root->getStructNodeName(num, elmName))
- {
- QList columnData;
- //QVariant value;
- std::string value;
- //NLMISC::CRGBA value_color;
- //uint value_uint;
- //sint value_sint;
- //double value_double;
- QString elmtType = "";
- UFormElm *elmt = 0;
- if(root->getNodeByName(&elmt, elmName.c_str(), whereN, true))
- {
- if (elmt)
- {
- if (elmt->isArray())
- elmtType = "Array";
- if (elmt->isStruct())
- elmtType = "Struct";
- if (elmt->isAtom())
- {
- elmtType = "Atom";
- uint numDefinitions = 0;
- const UType *type = elmt->getType();
- if (type)
- {
- numDefinitions = type->getNumDefinition();
- root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
- switch (type->getType())
- {
- case UType::UnsignedInt:
- value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString();
- elmtType.append("_uint");break;
- case UType::SignedInt:
- value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble()).toStdString();
- elmtType.append("_sint");break;
- case UType::Double:
- value = QString("%1").arg(QString("%1").arg(value.c_str()).toDouble(),0,'f',1).toStdString();
- elmtType.append("_double");break;
- case UType::String:
- elmtType.append("_string");break;
- case UType::Color:
- elmtType.append("_color");break;
- default:
- elmtType.append("_unknownType");
- }
- }
- else
- {
- elmtType.append("_noType");
- }
-
- if (numDefinitions)
- {
- std::string l, v;
- QString tmpLabel, tmpValue;
- for (uint i = 0; i < numDefinitions; i++)
- {
- type->getDefinition(i,l,v);
- tmpLabel = l.c_str();
- tmpValue = v.c_str();
- if (type->getType() == UType::SignedInt)
- {
- if (QString("%1").arg(value.c_str()).toDouble() == tmpValue.toDouble()) {
- value = l;
- break;
- }
- }
- if (type->getType() == UType::String)
- {
- if (QString(value.c_str()) == tmpValue)
- {
- value = l;
- break;
- }
- }
- }
- }
- }
- if (elmt->isVirtualStruct())
- {
- root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
- elmtType = "VirtualStruct";
- }
- switch (*whereN)
- {
- case UFormElm::NodeForm:
- elmtType.append("_fromForm"); break;
- case UFormElm::NodeParentForm:
- elmtType.append("_fromParentForm"); break;
- case UFormElm::NodeDfn:
- elmtType.append("_isDFN"); break;
- case UFormElm::NodeType:
- elmtType.append("_isType"); break;
- default:
- elmtType.append("_noNode");
- }
- switch (*whereV)
- {
- case UFormElm::ValueForm:
- elmtType.append("_formValue"); break;
- case UFormElm::ValueParentForm:
- elmtType.append("_parentValue"); break;
- case UFormElm::ValueDefaultDfn:
- elmtType.append("_dfnValue"); break;
- case UFormElm::ValueDefaultType:
- elmtType.append("_typeValue"); break;
- default:
- elmtType.append("_noValue");
- }
- columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType;
- parent->appendChild(new CFormItem(elmt, columnData, parent, *whereV, *whereN));
- //if (parents.last()->childCount() > 0) {
- // parents << parents.last()->child(parents.last()->childCount()-1);
- //}
- loadFormData(elmt, parent->child(parent->childCount()-1));
- }
- else
- {
- // add Defaults
- // TODO: spams warnings for non ATOM values but i dont get type of non existing nodes
- bool success = root->getValueByName(value, elmName.c_str(),UFormElm::Eval,whereV);
- switch (*whereN)
- {
- case UFormElm::NodeForm:
- elmtType.append("_fromForm"); break;
- case UFormElm::NodeParentForm:
- elmtType.append("_fromParentForm"); break;
- case UFormElm::NodeDfn:
- elmtType.append("_isDFN"); break;
- case UFormElm::NodeType:
- elmtType.append("_isType"); break;
- default:
- elmtType.append("_noNode");
- }
- switch (*whereV)
- {
- case UFormElm::ValueForm:
- elmtType.append("_formValue"); break;
- case UFormElm::ValueParentForm:
- elmtType.append("_parentValue"); break;
- case UFormElm::ValueDefaultDfn:
- elmtType.append("_dfnValue"); break;
- case UFormElm::ValueDefaultType:
- elmtType.append("_typeValue"); break;
- default:
- elmtType.append("_noValue");
- }
-
- columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType;
- parent->appendChild(new CFormItem(elmt, columnData, parent, *whereV, *whereN));
- }
- }
- else
- {
- nlinfo("getNodeByName returned false");
- }
- }
- num++;
- }
- }
- if (root->isArray())
- {
- uint arraySize = 0;
- root->getArraySize(arraySize);
- while (num < arraySize)
- {
- std::string elmName;
- if(root->getArrayNodeName(elmName, num))
- {
- QList columnData;
- std::string value;
- QString elmtType = "";
-
- UFormElm *elmt = 0;
- if(root->getArrayNode(&elmt,0) && elmt)
- {
- if (elmt->isArray())
- elmtType = "Array";
- if (elmt->isStruct()) {
- elmtType = "Struct";
- }
- if (elmt->isAtom())
- {
- elmt->getValue(value);
- elmtType = "Atom";
- }
- if (elmt->isVirtualStruct())
- elmtType = "VirtualStruct";
-
- elmtType.append("_arrayValue");
- columnData << QString(elmName.c_str()) << QString(value.c_str()) << "";// << elmtType;
- parent->appendChild(new CFormItem(elmt, columnData, parent));
- loadFormData(elmt, parent->child(parent->childCount()-1));
- }
- }
- num++;
- }
- }
+ return;
}
CFormItem *CGeorgesFormModel::addStruct (CFormItem *parent,
@@ -614,8 +273,9 @@ namespace GeorgesQt
NLGEORGES::CForm *formPtr = static_cast(m_form);
// Add the new node
-// CFormItem *newNode = parent->add(/*CGeorgesEditDocSub::Form,*/ name, structId, formName, slot);
- CFormItem *newNode = parent->add(_struct, name);
+ CFormItem *newNode = parent->add(CFormItem::Form, name, structId, formName, slot, m_form);
+
+ nlinfo("Added form %s : %s", name, formName);
// Can be NULL in virtual DFN
if (parentDfn)
@@ -750,8 +410,7 @@ CFormItem *CGeorgesFormModel::addArray(CFormItem *parent,
uint slot)
{
// Add the new node
- //CFormItem *newNode = parent->add (/*CGeorgesEditDocSub::Form,*/ name, structId, formName, slot);
- CFormItem *newNode = parent->add (array, name);
+ CFormItem *newNode = parent->add (CFormItem::Form, name, structId, formName, slot, m_form);
// The array exist
if (array)
@@ -778,14 +437,13 @@ CFormItem *CGeorgesFormModel::addArray(CFormItem *parent,
if (rootDfn)
{
// Get struct ptr
- NLGEORGES::CFormElmStruct *elmPtr = array->Elements[elm].Element ? NLMISC::safe_cast(array->Elements[elm].Element) : NULL;
+ NLGEORGES::CFormElmStruct *elmPtr = array->Elements[elm].Element ? static_cast(array->Elements[elm].Element) : NULL;
addStruct (newNode, elmPtr, rootDfn, formArrayName, elm, formArrayElmName, slot);
}
else
{
- NLGEORGES::CFormElmArray *elmPtr = array->Elements[elm].Element ? NLMISC::safe_cast(array->Elements[elm].Element) : NULL;
- newNode->add (elmPtr, formArrayElmName);
- //newNode->add (/*CGeorgesEditDocSub::Form,*/ formArrayName, elm, formArrayElmName, slot);
+ NLGEORGES::CFormElmArray *elmPtr = array->Elements[elm].Element ? static_cast(array->Elements[elm].Element) : NULL;
+ newNode->add (CFormItem::Form, formArrayName, elm, formArrayElmName, slot, m_form);
}
}
}
@@ -800,7 +458,7 @@ CFormItem *CGeorgesFormModel::addArray(CFormItem *parent,
void CGeorgesFormModel::loadFormHeader()
{
- if (m_parents.size())
+ /* if (m_parents.size())
{
CFormItem *fi_pars = new CFormItem(m_rootElm, QList() << "parents" << "" << "", m_rootItem);
m_rootItem->appendChild(fi_pars);
@@ -809,7 +467,7 @@ CFormItem *CGeorgesFormModel::addArray(CFormItem *parent,
{
fi_pars->appendChild(new CFormItem(m_rootElm, QList() << str << "" << "", fi_pars));
}
- }
+ }*/
/*QStringList dfns = _dependencies["dfn"];
QStringList typs = _dependencies["typ"];
@@ -851,7 +509,7 @@ CFormItem *CGeorgesFormModel::addArray(CFormItem *parent,
{
m_rootElm = &((NLGEORGES::CForm*)m_form)->Elements;
NLGEORGES::CFormElmStruct *rootstruct = &((NLGEORGES::CForm*)m_form)->Elements;
- loadFormHeader();
+ //loadFormHeader();
addStruct(m_rootItem, rootstruct, rootstruct->FormDfn, "Content", 0xffffffff, "", 0);
//loadFormData(m_rootElm, m_rootItem);
}
@@ -875,7 +533,7 @@ CFormItem *CGeorgesFormModel::addArray(CFormItem *parent,
beginResetModel();
m_parents.push_back(parentForm);
delete m_rootItem;
- m_rootItem = new CFormItem(m_rootElm, m_rootData);
+ m_rootItem = new CFormItem();
setupModelData();
endResetModel();
}
@@ -886,7 +544,7 @@ CFormItem *CGeorgesFormModel::addArray(CFormItem *parent,
m_parents.removeOne(parentForm);
delete m_rootItem;
- m_rootItem = new CFormItem(m_rootElm, m_rootData);
+ m_rootItem = new CFormItem();
setupModelData();
endResetModel();
}
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp
index 8b13ca8ba..81179f61c 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.cpp
@@ -23,6 +23,8 @@
#include "georgesform_proxy_model.h"
#include "georgesform_model.h"
+#if 0
+
namespace GeorgesQt
{
@@ -78,4 +80,5 @@ namespace GeorgesQt
}
} /* namespace GeorgesQt */
+#endif // 0
/* end of file */
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.h b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.h
index cfe7fcca6..f4c968f80 100644
--- a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.h
+++ b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/georgesform_proxy_model.h
@@ -20,6 +20,7 @@
// Qt includes
#include
+#if 0
namespace GeorgesQt
{
@@ -41,5 +42,5 @@ namespace GeorgesQt
};/* class CGeorgesFormProxyModel */
} /* namespace GeorgesQt */
-
+#endif // 0
#endif // GEORGESFORM_PROXY_MODEL_H
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/array.ico b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/array.ico
new file mode 100644
index 000000000..923bec0bd
Binary files /dev/null and b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/array.ico differ
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/header.ico b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/header.ico
new file mode 100644
index 000000000..5ebb3632a
Binary files /dev/null and b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/header.ico differ
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/hold.ico b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/hold.ico
new file mode 100644
index 000000000..4b7f115f1
Binary files /dev/null and b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/hold.ico differ
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/root.ico b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/root.ico
new file mode 100644
index 000000000..3fa430766
Binary files /dev/null and b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/root.ico differ
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/struct.ico b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/struct.ico
new file mode 100644
index 000000000..7e2244dc3
Binary files /dev/null and b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/struct.ico differ
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/vstruct.ico b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/vstruct.ico
new file mode 100644
index 000000000..a184d8a37
Binary files /dev/null and b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/vstruct.ico differ
diff --git a/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/zfee51.ico b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/zfee51.ico
new file mode 100644
index 000000000..ad6bbb756
Binary files /dev/null and b/code/nel/tools/3d/object_viewer_qt/src/plugins/georges_editor/images/zfee51.ico differ