//=============================================================================
//
// OpenFlipper
// Copyright (C) 2009 by Computer Graphics Group, RWTH Aachen
// www.openflipper.org
//
//-----------------------------------------------------------------------------
//
// License
//
// OpenFlipper is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// OpenFlipper 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 Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with OpenFlipper. If not, see .
//
//-----------------------------------------------------------------------------
//
// $Revision: $
// $Author: $
// $Date: $
//
//=============================================================================
#ifndef VSI_CONTEXT_HH
#define VSI_CONTEXT_HH
//== INCLUDES =================================================================
#include
#include
#include
#include "element.hh"
//== FORWARDDECLARATIONS ======================================================
class QScriptEngine;
//== NAMESPACES ===============================================================
namespace VSI {
//== FORWARDDECLARATIONS ======================================================
class Input;
class Output;
class InOut;
class Type;
//== CLASS DEFINITION =========================================================
/** Class holding all the informations / parsed xml metadata for the visual scripting interface
*/
class Context {
public:
/// Constructor
Context (QScriptEngine *_engine);
/// Destructor
~Context ();
/// Parse xml content
void parse (QByteArray _xml);
/// Returns all available elements
const QVector& elements () { return elements_; };
/// Returns all available elements for a given category
QVector elements (QString _category);
/// Returns the element with a given name
Element *element (QString _name);
/// List of categories
QStringList categories ();
/// Registers a supported datatype
void registerType (Type *_type);
/// Is the given type supported
bool typeSupported (QString _type);
/// Get type object for given type name
Type *getType (QString _type);
/// Can the given types be converted to each other
bool canConvert (QString _type1, QString _type2);
/// Return script engine pointer
QScriptEngine *scriptEngine () { return scriptEngine_; };
/// Converts the given string to bool
static bool strToBool (QString _str);
/// Gets the string of a xml query
static QString getXmlString (QXmlQuery &_xml, QString _expr, QString _default = "");
private:
// parse element from xml
void parseElement (QXmlQuery &_xml);
// parse element input from xml
Input *parseInput (QXmlQuery &_xml, Element *_e);
// parse element output from xml
Output *parseOutput (QXmlQuery &_xml, Element *_e);
// parse element function from xml
Function *parseFunction (QXmlQuery &_xml, Element *_e);
// parse common input and output parts from xml
bool parseInOutBase (QXmlQuery &_xml, InOut *_io);
private:
QVector elements_;
QMap supportedTypes_;
QList types_;
QScriptEngine *scriptEngine_;
};
//=============================================================================
}
//=============================================================================
#endif