First iteration of the property browser.
--HG-- branch : gsoc2014-dfighter
This commit is contained in:
parent
9315b7229e
commit
a43c2f0a5e
6 changed files with 137 additions and 2 deletions
|
@ -15,7 +15,8 @@ SET(OVQT_PLUG_GEORGES_EDITOR_HDR georges_editor_plugin.h
|
||||||
georges_dirtree_dialog.h
|
georges_dirtree_dialog.h
|
||||||
georges_filesystem_model.h
|
georges_filesystem_model.h
|
||||||
georges_treeview_dialog.h
|
georges_treeview_dialog.h
|
||||||
expandable_headerview.h)
|
expandable_headerview.h
|
||||||
|
browser_ctrl.h)
|
||||||
|
|
||||||
SET(OVQT_PLUG_GEORGES_EDITOR_UIS georges_editor_form.ui
|
SET(OVQT_PLUG_GEORGES_EDITOR_UIS georges_editor_form.ui
|
||||||
georges_dirtree_form.ui
|
georges_dirtree_form.ui
|
||||||
|
|
89
code/studio/src/plugins/georges_editor/browser_ctrl.cpp
Normal file
89
code/studio/src/plugins/georges_editor/browser_ctrl.cpp
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
#include "browser_ctrl.h"
|
||||||
|
#include "3rdparty/qtpropertybrowser/qttreepropertybrowser.h"
|
||||||
|
#include "3rdparty/qtpropertybrowser/qtvariantproperty.h"
|
||||||
|
#include <QModelIndex>
|
||||||
|
|
||||||
|
#include "nel/georges/form.h"
|
||||||
|
|
||||||
|
#include "formitem.h"
|
||||||
|
|
||||||
|
class BrowserCtrlPvt
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BrowserCtrlPvt()
|
||||||
|
{
|
||||||
|
mgr = new QtVariantPropertyManager();
|
||||||
|
factory = new QtVariantEditorFactory();
|
||||||
|
}
|
||||||
|
|
||||||
|
~BrowserCtrlPvt()
|
||||||
|
{
|
||||||
|
delete mgr;
|
||||||
|
mgr = NULL;
|
||||||
|
delete factory;
|
||||||
|
factory = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
QtVariantPropertyManager *mgr;
|
||||||
|
QtVariantEditorFactory *factory;
|
||||||
|
QtTreePropertyBrowser *m_browser;
|
||||||
|
};
|
||||||
|
|
||||||
|
BrowserCtrl::BrowserCtrl( QtTreePropertyBrowser *browser ) :
|
||||||
|
QObject( browser )
|
||||||
|
{
|
||||||
|
m_pvt = new BrowserCtrlPvt();
|
||||||
|
m_pvt->m_browser = browser;
|
||||||
|
}
|
||||||
|
|
||||||
|
BrowserCtrl::~BrowserCtrl()
|
||||||
|
{
|
||||||
|
delete m_pvt;
|
||||||
|
m_pvt = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
void BrowserCtrl::clicked( const QModelIndex &idx )
|
||||||
|
{
|
||||||
|
m_pvt->m_browser->clear();
|
||||||
|
|
||||||
|
GeorgesQt::CFormItem *item = static_cast< GeorgesQt::CFormItem* >( idx.internalPointer() );
|
||||||
|
NLGEORGES::UFormElm &root = m_form->getRootNode();
|
||||||
|
NLGEORGES::UFormElm *node = NULL;
|
||||||
|
bool b = false;
|
||||||
|
|
||||||
|
b = m_form->getRootNode().getNodeByName( &node, item->formName().c_str() );
|
||||||
|
|
||||||
|
if( !b || ( node == NULL ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if( !node->isStruct() )
|
||||||
|
return;
|
||||||
|
|
||||||
|
NLGEORGES::CFormElmStruct *st = static_cast< NLGEORGES::CFormElmStruct* >( node );
|
||||||
|
for( int i = 0; i < st->Elements.size(); i++ )
|
||||||
|
{
|
||||||
|
NLGEORGES::CFormElmStruct::CFormElmStructElm &elm = st->Elements[ i ];
|
||||||
|
|
||||||
|
QString key = elm.Name.c_str();
|
||||||
|
QString value = "";
|
||||||
|
|
||||||
|
if( elm.Element != NULL )
|
||||||
|
{
|
||||||
|
const NLGEORGES::UType *typ = elm.Element->getType();
|
||||||
|
NLGEORGES::UType::TType ttyp = NLGEORGES::UType::String;
|
||||||
|
if( typ != NULL )
|
||||||
|
ttyp = typ->getType();
|
||||||
|
|
||||||
|
NLGEORGES::CFormElmAtom *atom = static_cast< NLGEORGES::CFormElmAtom* >( elm.Element );
|
||||||
|
std::string v;
|
||||||
|
atom->getValue( v, NLGEORGES::UFormElm::NoEval );
|
||||||
|
value = v.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
QtVariantProperty *p = m_pvt->mgr->addProperty( QVariant::String, key );
|
||||||
|
p->setValue( value );
|
||||||
|
m_pvt->m_browser->addProperty( p );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
33
code/studio/src/plugins/georges_editor/browser_ctrl.h
Normal file
33
code/studio/src/plugins/georges_editor/browser_ctrl.h
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#ifndef BROWSER_CTRL_H
|
||||||
|
#define BROWSER_CTRL_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
namespace NLGEORGES
|
||||||
|
{
|
||||||
|
class UForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
class QtTreePropertyBrowser;
|
||||||
|
class QModelIndex;
|
||||||
|
|
||||||
|
class BrowserCtrlPvt;
|
||||||
|
|
||||||
|
class BrowserCtrl : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
BrowserCtrl( QtTreePropertyBrowser *browser );
|
||||||
|
~BrowserCtrl();
|
||||||
|
void setForm( NLGEORGES::UForm *form ){ m_form = form; }
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void clicked( const QModelIndex &idx );
|
||||||
|
|
||||||
|
private:
|
||||||
|
BrowserCtrlPvt *m_pvt;
|
||||||
|
|
||||||
|
NLGEORGES::UForm *m_form;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
|
@ -43,6 +43,7 @@
|
||||||
#include "formitem.h"
|
#include "formitem.h"
|
||||||
#include "formdelegate.h"
|
#include "formdelegate.h"
|
||||||
#include "expandable_headerview.h"
|
#include "expandable_headerview.h"
|
||||||
|
#include "browser_ctrl.h"
|
||||||
|
|
||||||
using namespace NLMISC;
|
using namespace NLMISC;
|
||||||
using namespace NLGEORGES;
|
using namespace NLGEORGES;
|
||||||
|
@ -76,16 +77,22 @@ namespace GeorgesQt
|
||||||
|
|
||||||
m_ui.treeView->setContextMenuPolicy(Qt::CustomContextMenu);
|
m_ui.treeView->setContextMenuPolicy(Qt::CustomContextMenu);
|
||||||
|
|
||||||
|
m_browserCtrl = new BrowserCtrl( m_ui.propertiesBrowser );
|
||||||
|
|
||||||
connect(m_ui.treeView, SIGNAL(customContextMenuRequested(const QPoint&)),
|
connect(m_ui.treeView, SIGNAL(customContextMenuRequested(const QPoint&)),
|
||||||
this, SLOT(showContextMenu(const QPoint&)));
|
this, SLOT(showContextMenu(const QPoint&)));
|
||||||
connect(m_ui.treeView, SIGNAL(doubleClicked (QModelIndex)),
|
connect(m_ui.treeView, SIGNAL(doubleClicked (QModelIndex)),
|
||||||
this, SLOT(doubleClicked (QModelIndex)));
|
this, SLOT(doubleClicked (QModelIndex)));
|
||||||
|
connect(m_ui.treeView, SIGNAL(clicked(const QModelIndex&)),
|
||||||
|
m_browserCtrl, SLOT(clicked(const QModelIndex&)));
|
||||||
connect(m_header, SIGNAL(headerClicked(int)),
|
connect(m_header, SIGNAL(headerClicked(int)),
|
||||||
this, SLOT(headerClicked(int)));
|
this, SLOT(headerClicked(int)));
|
||||||
}
|
}
|
||||||
|
|
||||||
CGeorgesTreeViewDialog::~CGeorgesTreeViewDialog()
|
CGeorgesTreeViewDialog::~CGeorgesTreeViewDialog()
|
||||||
{
|
{
|
||||||
|
m_browserCtrl = NULL;
|
||||||
|
|
||||||
delete m_form;
|
delete m_form;
|
||||||
qDebug() << "DTOR";
|
qDebug() << "DTOR";
|
||||||
}
|
}
|
||||||
|
@ -104,6 +111,7 @@ namespace GeorgesQt
|
||||||
void CGeorgesTreeViewDialog::setForm(const CForm *form)
|
void CGeorgesTreeViewDialog::setForm(const CForm *form)
|
||||||
{
|
{
|
||||||
m_form = (UForm*)form;
|
m_form = (UForm*)form;
|
||||||
|
m_browserCtrl->setForm( (UForm*)form );
|
||||||
}
|
}
|
||||||
|
|
||||||
NLGEORGES::CForm* CGeorgesTreeViewDialog::getFormByName(const QString formName)
|
NLGEORGES::CForm* CGeorgesTreeViewDialog::getFormByName(const QString formName)
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
|
|
||||||
// Project includes
|
// Project includes
|
||||||
|
|
||||||
|
class BrowserCtrl;
|
||||||
|
|
||||||
namespace NLGEORGES
|
namespace NLGEORGES
|
||||||
{
|
{
|
||||||
class UForm;
|
class UForm;
|
||||||
|
@ -113,6 +115,8 @@ namespace GeorgesQt
|
||||||
|
|
||||||
bool m_modified;
|
bool m_modified;
|
||||||
|
|
||||||
|
BrowserCtrl *m_browserCtrl;
|
||||||
|
|
||||||
}; /* CGeorgesTreeViewDialog */
|
}; /* CGeorgesTreeViewDialog */
|
||||||
|
|
||||||
} /* namespace GeorgesQt */
|
} /* namespace GeorgesQt */
|
||||||
|
|
|
@ -307,7 +307,7 @@ namespace GeorgesQt
|
||||||
|
|
||||||
// Is a struct ?
|
// Is a struct ?
|
||||||
if ( (entry.getType () == NLGEORGES::UFormDfn::EntryDfn) || (entry.getType () == NLGEORGES::UFormDfn::EntryVirtualDfn) )
|
if ( (entry.getType () == NLGEORGES::UFormDfn::EntryDfn) || (entry.getType () == NLGEORGES::UFormDfn::EntryVirtualDfn) )
|
||||||
{
|
{
|
||||||
// Is an array of struct ?
|
// Is an array of struct ?
|
||||||
if (entry.getArrayFlag ())
|
if (entry.getArrayFlag ())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue