From 651b6c612db4e809c506973996f2580c4158ac3a Mon Sep 17 00:00:00 2001 From: mickeyl Date: Sat, 27 Sep 2003 11:29:26 +0000 Subject: merge dasher which has been introduced in BRANCH first (wtf?) into HEAD --- (limited to 'inputmethods/dasher/DasherNode.h') diff --git a/inputmethods/dasher/DasherNode.h b/inputmethods/dasher/DasherNode.h new file mode 100644 index 0000000..705a9d4 --- a/dev/null +++ b/inputmethods/dasher/DasherNode.h @@ -0,0 +1,127 @@ +// DasherNode.h +// +///////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2001-2002 David Ward +// +///////////////////////////////////////////////////////////////////////////// + +#ifndef __DasherNode_h__ +#define __DasherNode_h__ + +#include "NoClones.h" +#include "DasherTypes.h" +#include "LanguageModel.h" + +namespace Dasher {class CDasherNode;} +class Dasher::CDasherNode : private NoClones +{ + // CDasherNode represents a rectangle and character + // nodes have children, siblings and parents +private: + const unsigned int m_iLbnd,m_iHbnd;// the cumulative lower and upper bound prob relative to parent + const unsigned int m_iGroup; // group membership - e.g. 0=nothing 1=caps 2=punc + unsigned int m_iChars, m_iAge; + bool m_bAlive; // if true, then display node, else dont bother + bool m_bControlNode; // if true, node is a control node + bool m_bControlChild; // if true, node is offspring of a control node + //bool m_Cscheme; // color scheme for the node - alternates through relatives + Opts::ColorSchemes m_ColorScheme; + int m_iPhase; // index for coloring + int m_iColour; // for the advanced colour mode + + const symbol m_Symbol; // the character to display + CLanguageModel *m_languagemodel; // pointer to the language model - in future, could be different for each node + CDasherNode **m_Children; // pointer to array of children + CDasherNode *m_parent; // pointer to parent - only needed to grab parent context + CLanguageModel::CNodeContext *m_context; +public: + + CDasherNode(CDasherNode *parent,symbol Symbol, unsigned int igroup, int iphase, Opts::ColorSchemes ColorScheme,int ilbnd,int ihbnd,CLanguageModel *lm, int Colour); + ~CDasherNode(); + bool m_bForce; // flag to force a node to be drawn - shouldn't be public + + // return private data members - read only + CDasherNode ** const Children() const {return m_Children;} + unsigned int Lbnd() const {return m_iLbnd;} + bool Alive() {return m_bAlive;} + bool Control() {return m_bControlChild;} + void Kill() {m_bAlive=0;m_iAge=0;} + unsigned int Hbnd() const {return m_iHbnd;} + unsigned int Group() const {return m_iGroup;} + unsigned int Age() const {return m_iAge;} + symbol Symbol() const {return m_Symbol;} + unsigned int Chars() const {return m_iChars;} + int Phase() const {return m_iPhase;} + Opts::ColorSchemes Cscheme() const {return m_ColorScheme;} + int Colour() const {return m_iColour;} + + CDasherNode* const Get_node_under(int,myint y1,myint y2,myint smousex,myint smousey); // find node under given co-ords + void Get_string_under(const int,const myint y1,const myint y2,const myint smousex,const myint smousey,std::vector&) const; // get string under given co-ords + void Generic_Push_Node(CLanguageModel::CNodeContext *context); + void Push_Node(); // give birth to children + void Push_Node(CLanguageModel::CNodeContext *context); // give birth to children with this context + void Delete_children(); + void Dump_node() const; // diagnostic +}; + +///////////////////////////////////////////////////////////////////////////// +// Inline functions +///////////////////////////////////////////////////////////////////////////// + +using namespace Dasher; +using namespace Opts; + +///////////////////////////////////////////////////////////////////////////// + +inline CDasherNode::CDasherNode(CDasherNode *parent,symbol Symbol, unsigned int igroup, int iphase, ColorSchemes ColorScheme,int ilbnd,int ihbnd,CLanguageModel *lm, int Colour=0) + : m_parent(parent),m_Symbol(Symbol),m_iGroup(igroup),m_iLbnd(ilbnd),m_iHbnd(ihbnd),m_languagemodel(lm),m_iPhase(iphase), + m_context(0), m_iAge(0), m_bAlive(1), m_Children(0), m_bForce(false), m_iChars(0), m_ColorScheme(ColorScheme), m_bControlChild(false), m_iColour(Colour) +{ + /* + switch (ColorScheme) { + case Nodes1: + m_ColorScheme = Nodes2; + break; + case Nodes2: + m_ColorScheme = Nodes1; + break; + case Special1: + m_ColorScheme = Special2; + break; + case Special2: + m_ColorScheme = Special1; + break; + case default: + m_ColorScheme = ColorScheme; + break; + } + */ +} + +///////////////////////////////////////////////////////////////////////////// + +inline void CDasherNode::Delete_children() +{ + if (m_Children) { + unsigned int i; + for (i=1;iReleaseNodeContext(m_context); +} + +///////////////////////////////////////////////////////////////////////////// + +#endif /* #ifndef __DasherNode_h__ */ -- cgit v0.9.0.2