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
|
@ -57,7 +57,9 @@ namespace NLGUI
|
||||||
virtual ~CCtrlBase();
|
virtual ~CCtrlBase();
|
||||||
|
|
||||||
// special parse
|
// special parse
|
||||||
virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup);
|
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)
|
/// Handle all events (implemented by derived classes) (return true to signal event handled)
|
||||||
|
|
|
@ -125,6 +125,8 @@ namespace NLGUI
|
||||||
/// Parse the element and initalize it
|
/// Parse the element and initalize it
|
||||||
virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup);
|
virtual bool parse (xmlNodePtr cur, CInterfaceGroup *parentGroup);
|
||||||
|
|
||||||
|
virtual std::string getProperty( const std::string &name ) const;
|
||||||
|
|
||||||
/// Debug info on memory
|
/// Debug info on memory
|
||||||
virtual uint32 getMemory () { return (uint32)(sizeof(*this)+_Id.size()); }
|
virtual uint32 getMemory () { return (uint32)(sizeof(*this)+_Id.size()); }
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,8 @@ namespace NLGUI
|
||||||
/// Coming from CInterfaceElement
|
/// Coming from CInterfaceElement
|
||||||
virtual bool parse(xmlNodePtr cur, CInterfaceGroup * parentGroup);
|
virtual bool parse(xmlNodePtr cur, CInterfaceGroup * parentGroup);
|
||||||
|
|
||||||
|
std::string getProperty( const std::string &name ) const;
|
||||||
|
|
||||||
virtual uint32 getMemory ();
|
virtual uint32 getMemory ();
|
||||||
|
|
||||||
virtual CInterfaceElement* getElement (const std::string &id);
|
virtual CInterfaceElement* getElement (const std::string &id);
|
||||||
|
|
|
@ -145,6 +145,21 @@ namespace NLGUI
|
||||||
return true;
|
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)
|
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)
|
void CInterfaceElement::setSizeRef(const std::string &sizeref)
|
||||||
{
|
{
|
||||||
|
|
|
@ -353,6 +353,21 @@ namespace NLGUI
|
||||||
return true;
|
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)
|
void CInterfaceGroup::parseMaxSizeRef(const char *ptr)
|
||||||
|
|
|
@ -75,9 +75,10 @@ namespace GUIEditor
|
||||||
|
|
||||||
dock = new QDockWidget( "Widget Properties", this );
|
dock = new QDockWidget( "Widget Properties", this );
|
||||||
dock->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
|
dock->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea );
|
||||||
|
|
||||||
QtTreePropertyBrowser *propBrowser = new QtTreePropertyBrowser;
|
QtTreePropertyBrowser *propBrowser = new QtTreePropertyBrowser;
|
||||||
|
browserCtrl.setupWidgetInfo( widgetInfo );
|
||||||
browserCtrl.setBrowser( propBrowser );
|
browserCtrl.setBrowser( propBrowser );
|
||||||
browserCtrl.setup();
|
|
||||||
dock->setWidget( propBrowser );
|
dock->setWidget( propBrowser );
|
||||||
addDockWidget( Qt::RightDockWidgetArea, dock );
|
addDockWidget( Qt::RightDockWidgetArea, dock );
|
||||||
|
|
||||||
|
@ -86,6 +87,8 @@ namespace GUIEditor
|
||||||
connect( viewPort, SIGNAL( guiLoadComplete() ), hierarchyView, SLOT( onGUILoaded() ) );
|
connect( viewPort, SIGNAL( guiLoadComplete() ), hierarchyView, SLOT( onGUILoaded() ) );
|
||||||
connect( viewPort, SIGNAL( guiLoadComplete() ), procList, SLOT( onGUILoaded() ) );
|
connect( viewPort, SIGNAL( guiLoadComplete() ), procList, SLOT( onGUILoaded() ) );
|
||||||
connect( viewPort, SIGNAL( guiLoadComplete() ), linkList, SLOT( onGUILoaded() ) );
|
connect( viewPort, SIGNAL( guiLoadComplete() ), linkList, SLOT( onGUILoaded() ) );
|
||||||
|
connect( hierarchyView, SIGNAL( selectionChanged( std::string& ) ),
|
||||||
|
&browserCtrl, SLOT( onSelectionChanged( std::string& ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
GUIEditorWindow::~GUIEditorWindow()
|
GUIEditorWindow::~GUIEditorWindow()
|
||||||
|
|
|
@ -1,23 +1,26 @@
|
||||||
// Object Viewer Qt GUI Editor plugin <http://dev.ryzom.com/projects/ryzom/>
|
// Object Viewer Qt GUI Editor plugin <http://dev.ryzom.com/projects/ryzom/>
|
||||||
// Copyright (C) 2010 Winch Gate Property Limited
|
// Copyright (C) 2010 Winch Gate Property Limited
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU Affero General Public License as
|
// it under the terms of the GNU Affero General Public License as
|
||||||
// published by the Free Software Foundation, either version 3 of the
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
// License, or (at your option) any later version.
|
// License, or (at your option) any later version.
|
||||||
//
|
//
|
||||||
// This program is distributed in the hope that it will be useful,
|
// This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU Affero General Public License for more details.
|
// GNU Affero General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU Affero General Public License
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
#include "property_browser_ctrl.h"
|
#include "property_browser_ctrl.h"
|
||||||
#include "../../3rdparty/qtpropertybrowser/QtVariantPropertyManager"
|
#include "../../3rdparty/qtpropertybrowser/QtVariantPropertyManager"
|
||||||
#include "../../3rdparty/qtpropertybrowser/QtTreePropertyBrowser"
|
#include "../../3rdparty/qtpropertybrowser/QtTreePropertyBrowser"
|
||||||
|
#include "nel/gui/interface_group.h"
|
||||||
|
#include "nel/gui/widget_manager.h"
|
||||||
|
#include <typeinfo>
|
||||||
|
|
||||||
namespace GUIEditor
|
namespace GUIEditor
|
||||||
{
|
{
|
||||||
|
@ -39,27 +42,74 @@ namespace GUIEditor
|
||||||
browser = b;
|
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 )
|
if( browser == NULL )
|
||||||
return;
|
return;
|
||||||
|
browser->clear();
|
||||||
|
|
||||||
QtVariantProperty *p;
|
CInterfaceElement *e = CWidgetManager::getInstance()->getElementFromId( id );
|
||||||
|
if( e == NULL )
|
||||||
|
return;
|
||||||
|
|
||||||
|
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 );
|
||||||
|
|
||||||
|
setupProperties( n, e );
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
p = propertyMgr->addProperty( QVariant::String, "Id" );
|
if( prop.propType == "string" )
|
||||||
p->setValue( "ExampleId" );
|
{
|
||||||
browser->addProperty( p );
|
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 = propertyMgr->addProperty( QVariant::Bool, "Active" );
|
p->setValue( value );
|
||||||
p->setValue( true );
|
}
|
||||||
browser->addProperty( p );
|
if( p == NULL )
|
||||||
|
return;
|
||||||
|
|
||||||
p = propertyMgr->addProperty( QVariant::String, "on_enter" );
|
|
||||||
p->setValue( "on_enter_handler" );
|
|
||||||
browser->addProperty( p );
|
|
||||||
|
|
||||||
p = propertyMgr->addProperty( QVariant::String, "on_enter_params" );
|
|
||||||
p->setValue( "someparams" );
|
|
||||||
browser->addProperty( p );
|
browser->addProperty( p );
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,17 +1,17 @@
|
||||||
// Object Viewer Qt GUI Editor plugin <http://dev.ryzom.com/projects/ryzom/>
|
// Object Viewer Qt GUI Editor plugin <http://dev.ryzom.com/projects/ryzom/>
|
||||||
// Copyright (C) 2010 Winch Gate Property Limited
|
// Copyright (C) 2010 Winch Gate Property Limited
|
||||||
//
|
//
|
||||||
// This program is free software: you can redistribute it and/or modify
|
// This program is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU Affero General Public License as
|
// it under the terms of the GNU Affero General Public License as
|
||||||
// published by the Free Software Foundation, either version 3 of the
|
// published by the Free Software Foundation, either version 3 of the
|
||||||
// License, or (at your option) any later version.
|
// License, or (at your option) any later version.
|
||||||
//
|
//
|
||||||
// This program is distributed in the hope that it will be useful,
|
// This program is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU Affero General Public License for more details.
|
// GNU Affero General Public License for more details.
|
||||||
//
|
//
|
||||||
// You should have received a copy of the GNU Affero General Public License
|
// You should have received a copy of the GNU Affero General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,10 +19,18 @@
|
||||||
#define PROP_BROWSER_CTRL
|
#define PROP_BROWSER_CTRL
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
#include "widget_info.h"
|
||||||
|
|
||||||
class QtTreePropertyBrowser;
|
class QtTreePropertyBrowser;
|
||||||
class QtVariantPropertyManager;
|
class QtVariantPropertyManager;
|
||||||
|
|
||||||
|
namespace NLGUI
|
||||||
|
{
|
||||||
|
class CInterfaceElement;
|
||||||
|
}
|
||||||
|
|
||||||
namespace GUIEditor
|
namespace GUIEditor
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -36,11 +44,18 @@ namespace GUIEditor
|
||||||
CPropBrowserCtrl();
|
CPropBrowserCtrl();
|
||||||
~CPropBrowserCtrl();
|
~CPropBrowserCtrl();
|
||||||
void setBrowser( QtTreePropertyBrowser *b );
|
void setBrowser( QtTreePropertyBrowser *b );
|
||||||
void setup();
|
void setupWidgetInfo( const std::map< std::string, SWidgetInfo > &info );
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void onSelectionChanged( std::string &id );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void setupProperties( const std::string &type, const NLGUI::CInterfaceElement *element );
|
||||||
|
void setupProperty( const SPropEntry &prop, const NLGUI::CInterfaceElement *element );
|
||||||
|
|
||||||
QtTreePropertyBrowser *browser;
|
QtTreePropertyBrowser *browser;
|
||||||
QtVariantPropertyManager *propertyMgr;
|
QtVariantPropertyManager *propertyMgr;
|
||||||
|
std::map< std::string, SWidgetInfo > widgetInfo;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,6 +137,9 @@ namespace GUIEditor
|
||||||
if( item->parent() == NULL )
|
if( item->parent() == NULL )
|
||||||
return;
|
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:
|
private:
|
||||||
std::string currentSelection;
|
std::string currentSelection;
|
||||||
std::string masterGroup;
|
std::string masterGroup;
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void selectionChanged( std::string &id );
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,8 +18,8 @@
|
||||||
#ifndef WIDGET_INFO_H
|
#ifndef WIDGET_INFO_H
|
||||||
#define WIDGET_INFO_H
|
#define WIDGET_INFO_H
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
namespace GUIEditor
|
namespace GUIEditor
|
||||||
{
|
{
|
||||||
|
@ -28,7 +28,7 @@ namespace GUIEditor
|
||||||
std::string propName;
|
std::string propName;
|
||||||
std::string propType;
|
std::string propType;
|
||||||
std::string propDefault;
|
std::string propDefault;
|
||||||
|
|
||||||
static SPropEntry create( const char *propname, const char *proptype, const char *propdefault )
|
static SPropEntry create( const char *propname, const char *proptype, const char *propdefault )
|
||||||
{
|
{
|
||||||
SPropEntry entry;
|
SPropEntry entry;
|
||||||
|
|
Loading…
Reference in a new issue