ADDED: #1471 Implemented basic framework for querying widget properties. Not yet fully implemented.
--HG-- branch : gsoc2012-gui-editor
This commit is contained in:
parent
feeb3165c4
commit
bd41a67067
12 changed files with 177 additions and 48 deletions
|
@ -59,6 +59,8 @@ namespace NLGUI
|
|||
// special parse
|
||||
virtual bool parse(xmlNodePtr cur, CInterfaceGroup *parentGroup);
|
||||
|
||||
std::string getProperty( const std::string &name ) const;
|
||||
|
||||
|
||||
/// Handle all events (implemented by derived classes) (return true to signal event handled)
|
||||
virtual bool handleEvent (const NLGUI::CEventDescriptor &event);
|
||||
|
|
|
@ -125,6 +125,8 @@ namespace NLGUI
|
|||
/// Parse the element and initalize it
|
||||
virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup);
|
||||
|
||||
virtual std::string getProperty( const std::string &name ) const;
|
||||
|
||||
/// Debug info on memory
|
||||
virtual uint32 getMemory () { return (uint32)(sizeof(*this)+_Id.size()); }
|
||||
|
||||
|
|
|
@ -41,6 +41,8 @@ namespace NLGUI
|
|||
/// Coming from CInterfaceElement
|
||||
virtual bool parse(xmlNodePtr cur, CInterfaceGroup * parentGroup);
|
||||
|
||||
std::string getProperty( const std::string &name ) const;
|
||||
|
||||
virtual uint32 getMemory ();
|
||||
|
||||
virtual CInterfaceElement* getElement (const std::string &id);
|
||||
|
|
|
@ -145,6 +145,21 @@ namespace NLGUI
|
|||
return true;
|
||||
}
|
||||
|
||||
std::string CCtrlBase::getProperty( const std::string &name ) const
|
||||
{
|
||||
if( name == "on_tooltip" )
|
||||
{
|
||||
return _OnContextHelp.toString();
|
||||
}
|
||||
else
|
||||
if( name == "on_tooltip_params" )
|
||||
{
|
||||
return _OnContextHelpParams.toString();
|
||||
}
|
||||
|
||||
return CInterfaceElement::getProperty( name );
|
||||
}
|
||||
|
||||
// ***************************************************************************
|
||||
void CCtrlBase::convertTooltipHotSpot(const char *prop, THotSpot &parentHS, THotSpot &childHS)
|
||||
{
|
||||
|
|
|
@ -235,6 +235,25 @@ namespace NLGUI
|
|||
}
|
||||
|
||||
|
||||
std::string CInterfaceElement::getProperty( const std::string &name ) const
|
||||
{
|
||||
if( name == "id" )
|
||||
{
|
||||
return getId();
|
||||
}
|
||||
else
|
||||
if( name == "active" )
|
||||
{
|
||||
if( getActive() )
|
||||
return "true";
|
||||
else
|
||||
return "false";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void CInterfaceElement::setSizeRef(const std::string &sizeref)
|
||||
{
|
||||
|
|
|
@ -353,6 +353,21 @@ namespace NLGUI
|
|||
return true;
|
||||
}
|
||||
|
||||
std::string CInterfaceGroup::getProperty( const std::string &name ) const
|
||||
{
|
||||
if( name == "on_enter" )
|
||||
{
|
||||
return getAHOnEnter();
|
||||
}
|
||||
else
|
||||
if( name == "on_enter_params" )
|
||||
{
|
||||
return getAHOnEnterParams();
|
||||
}
|
||||
|
||||
return CCtrlBase::getProperty( name );
|
||||
}
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
void CInterfaceGroup::parseMaxSizeRef(const char *ptr)
|
||||
|
|
|
@ -75,9 +75,10 @@ namespace GUIEditor
|
|||
|
||||
dock = new QDockWidget( "Widget Properties", this );
|
||||
dock->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
|
||||
|
||||
QtTreePropertyBrowser *propBrowser = new QtTreePropertyBrowser;
|
||||
browserCtrl.setupWidgetInfo( widgetInfo );
|
||||
browserCtrl.setBrowser( propBrowser );
|
||||
browserCtrl.setup();
|
||||
dock->setWidget( propBrowser );
|
||||
addDockWidget( Qt::RightDockWidgetArea, dock );
|
||||
|
||||
|
@ -86,6 +87,8 @@ namespace GUIEditor
|
|||
connect( viewPort, SIGNAL( guiLoadComplete() ), hierarchyView, SLOT( onGUILoaded() ) );
|
||||
connect( viewPort, SIGNAL( guiLoadComplete() ), procList, SLOT( onGUILoaded() ) );
|
||||
connect( viewPort, SIGNAL( guiLoadComplete() ), linkList, SLOT( onGUILoaded() ) );
|
||||
connect( hierarchyView, SIGNAL( selectionChanged( std::string& ) ),
|
||||
&browserCtrl, SLOT( onSelectionChanged( std::string& ) ) );
|
||||
}
|
||||
|
||||
GUIEditorWindow::~GUIEditorWindow()
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
#include "property_browser_ctrl.h"
|
||||
#include "../../3rdparty/qtpropertybrowser/QtVariantPropertyManager"
|
||||
#include "../../3rdparty/qtpropertybrowser/QtTreePropertyBrowser"
|
||||
#include "nel/gui/interface_group.h"
|
||||
#include "nel/gui/widget_manager.h"
|
||||
#include <typeinfo>
|
||||
|
||||
namespace GUIEditor
|
||||
{
|
||||
|
@ -39,27 +42,74 @@ namespace GUIEditor
|
|||
browser = b;
|
||||
}
|
||||
|
||||
void CPropBrowserCtrl::setup()
|
||||
void CPropBrowserCtrl::setupWidgetInfo( const std::map< std::string, SWidgetInfo > &info )
|
||||
{
|
||||
widgetInfo.clear();
|
||||
|
||||
std::map< std::string, SWidgetInfo >::const_iterator itr;
|
||||
for( itr = info.begin(); itr != info.end(); ++itr )
|
||||
{
|
||||
const SWidgetInfo &w = itr->second;
|
||||
widgetInfo[ w.GUIName ] = w;
|
||||
}
|
||||
}
|
||||
|
||||
void CPropBrowserCtrl::onSelectionChanged( std::string &id )
|
||||
{
|
||||
if( browser == NULL )
|
||||
return;
|
||||
browser->clear();
|
||||
|
||||
QtVariantProperty *p;
|
||||
CInterfaceElement *e = CWidgetManager::getInstance()->getElementFromId( id );
|
||||
if( e == NULL )
|
||||
return;
|
||||
|
||||
p = propertyMgr->addProperty( QVariant::String, "Id" );
|
||||
p->setValue( "ExampleId" );
|
||||
browser->addProperty( p );
|
||||
std::string n;
|
||||
n = typeid( *e ).name();
|
||||
std::string::size_type i = n.find_last_of( ':' );
|
||||
if( i != std::string::npos )
|
||||
n = n.substr( i + 1, n.size() - 1 );
|
||||
|
||||
p = propertyMgr->addProperty( QVariant::Bool, "Active" );
|
||||
p->setValue( true );
|
||||
browser->addProperty( p );
|
||||
setupProperties( n, e );
|
||||
}
|
||||
|
||||
p = propertyMgr->addProperty( QVariant::String, "on_enter" );
|
||||
p->setValue( "on_enter_handler" );
|
||||
browser->addProperty( p );
|
||||
void CPropBrowserCtrl::setupProperties( const std::string &type, const CInterfaceElement *element )
|
||||
{
|
||||
std::map< std::string, SWidgetInfo >::iterator itr = widgetInfo.find( type );
|
||||
if( itr == widgetInfo.end() )
|
||||
return;
|
||||
SWidgetInfo &w = itr->second;
|
||||
|
||||
std::vector< SPropEntry >::const_iterator pItr;
|
||||
for( pItr = w.props.begin(); pItr != w.props.end(); ++pItr )
|
||||
{
|
||||
const SPropEntry &prop = *pItr;
|
||||
setupProperty( prop, element );
|
||||
}
|
||||
}
|
||||
|
||||
void CPropBrowserCtrl::setupProperty( const SPropEntry &prop, const CInterfaceElement *element )
|
||||
{
|
||||
QtVariantProperty *p = NULL;
|
||||
|
||||
if( prop.propType == "string" )
|
||||
{
|
||||
p = propertyMgr->addProperty( QVariant::String, prop.propName.c_str() );
|
||||
p->setValue( element->getProperty( prop.propName ).c_str() );
|
||||
}
|
||||
else
|
||||
if( prop.propType == "bool" )
|
||||
{
|
||||
p = propertyMgr->addProperty( QVariant::Bool, prop.propName.c_str() );
|
||||
bool value = false;
|
||||
if( element->getProperty( prop.propName ) == "true" )
|
||||
value = true;
|
||||
|
||||
p->setValue( value );
|
||||
}
|
||||
if( p == NULL )
|
||||
return;
|
||||
|
||||
p = propertyMgr->addProperty( QVariant::String, "on_enter_params" );
|
||||
p->setValue( "someparams" );
|
||||
browser->addProperty( p );
|
||||
}
|
||||
}
|
|
@ -19,10 +19,18 @@
|
|||
#define PROP_BROWSER_CTRL
|
||||
|
||||
#include <QObject>
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include "widget_info.h"
|
||||
|
||||
class QtTreePropertyBrowser;
|
||||
class QtVariantPropertyManager;
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
class CInterfaceElement;
|
||||
}
|
||||
|
||||
namespace GUIEditor
|
||||
{
|
||||
|
||||
|
@ -36,11 +44,18 @@ namespace GUIEditor
|
|||
CPropBrowserCtrl();
|
||||
~CPropBrowserCtrl();
|
||||
void setBrowser( QtTreePropertyBrowser *b );
|
||||
void setup();
|
||||
void setupWidgetInfo( const std::map< std::string, SWidgetInfo > &info );
|
||||
|
||||
public Q_SLOTS:
|
||||
void onSelectionChanged( std::string &id );
|
||||
|
||||
private:
|
||||
void setupProperties( const std::string &type, const NLGUI::CInterfaceElement *element );
|
||||
void setupProperty( const SPropEntry &prop, const NLGUI::CInterfaceElement *element );
|
||||
|
||||
QtTreePropertyBrowser *browser;
|
||||
QtVariantPropertyManager *propertyMgr;
|
||||
std::map< std::string, SWidgetInfo > widgetInfo;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -137,6 +137,9 @@ namespace GUIEditor
|
|||
if( item->parent() == NULL )
|
||||
return;
|
||||
|
||||
CWidgetManager::getInstance()->setCurrentEditorSelection( makeFullName( item, item->text( 0 ).toStdString() ) );
|
||||
std::string selection = makeFullName( item, item->text( 0 ).toStdString() );
|
||||
CWidgetManager::getInstance()->setCurrentEditorSelection( selection );
|
||||
|
||||
Q_EMIT selectionChanged( selection );
|
||||
}
|
||||
}
|
||||
|
|
|
@ -52,6 +52,9 @@ namespace GUIEditor
|
|||
private:
|
||||
std::string currentSelection;
|
||||
std::string masterGroup;
|
||||
|
||||
Q_SIGNALS:
|
||||
void selectionChanged( std::string &id );
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
#ifndef WIDGET_INFO_H
|
||||
#define WIDGET_INFO_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace GUIEditor
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue