⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qvnode.h

📁 Windows上的MUD客户端程序
💻 H
字号:
#ifndef  _QV_NODE_
#define  _QV_NODE_

#include <QvString.h>
#include <ChTypes.h>

#define new DEBUG_NEW

class QvChildList;
class QvDict;
class QvFieldData;
class QvInput;
class QvNodeList;
class QvState;

// Chaco classes
class ChQvBounds;
class ChRenderContext;
class ostream;
class ChQvRenderData;

// Abstract Chaco class to hold renderer-specific data in a Qv node
// Derive for each class and each renderer as needed 
class ChQvRenderData
{
	protected:
		bool m_boolDirty;

	public:
		ChQvRenderData() : m_boolDirty(true) {};
		virtual ~ChQvRenderData() {};

		inline bool IsDirty() { return m_boolDirty; };
		virtual void SetDirty( bool boolDirty = true ) 
			{ 
				m_boolDirty = boolDirty;
				return;
			};
};

class QvNode {

  public:
    enum Stage {
	FIRST_INSTANCE,		// First real instance being constructed
	PROTO_INSTANCE,		// Prototype instance being constructed
	OTHER_INSTANCE,		// Subsequent instance being constructed
    };

    QvFieldData	*fieldData;
    QvChildList	*children;
    QvBool	isBuiltIn;

    QvName		*objName;
    QvNode();
    virtual ~QvNode();

    const QvName &	getName() const;
    void		setName(const QvName &name);

    static void		init();
    static void		term();
    static QvBool	read(QvInput *in, QvNode *&node);

    virtual QvFieldData *getFieldData() = 0;

    virtual void	traverse(QvState *state) = 0;
	// Use and Release and GetBounds added by Chaco
	virtual int Use() { return ++m_iUsage; };
	virtual int Release()
		 {
		 	int usage = --m_iUsage;
			if(usage <= 0) delete this;
			return usage;
		  };
	 inline int GetUsage() { return m_iUsage; };
	 #if 0
	 virtual int GetBounds(QvState *state, ChQvBounds * pBounds) {return 0;}; 
	 #endif
	 virtual void write(ostream &strm) {};
	 virtual void Invalidate(ChRenderContext *pRC);
	 virtual int GetType(string & strType) = 0;
	 static QvBool		skipToBrace(QvInput *in);


  protected:
    virtual QvBool	readInstance(QvInput *in);
	int	m_iUsage;
	ChQvRenderData	*m_pRenderData;
  public:
  	ChQvRenderData	*GetRenderData()
  	 {
  	 	return m_pRenderData;
  	 };

  private:
    static QvDict	*nameDict;

    static void		addName(QvNode *, const char *);
    static void		removeName(QvNode *, const char *);
    static QvNode *	readReference(QvInput *in);
    static QvBool	readNode(QvInput *in, QvName &className,QvNode *&node);
    static QvBool	readNodeInstance(QvInput *in, const QvName &className,
					 const QvName &refName, QvNode *&node);
    static QvNode *	createInstance(QvInput *in, const QvName &className);
    static QvNode *	createInstanceFromName(const QvName &className);
    static void		flushInput(QvInput *in);

};

#endif /* _QV_NODE_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -