summaryrefslogtreecommitdiff
path: root/inputmethods/dasher/DasherNode.h
Side-by-side diff
Diffstat (limited to 'inputmethods/dasher/DasherNode.h') (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/dasher/DasherNode.h20
1 files changed, 17 insertions, 3 deletions
diff --git a/inputmethods/dasher/DasherNode.h b/inputmethods/dasher/DasherNode.h
index 705a9d4..fb00d47 100644
--- a/inputmethods/dasher/DasherNode.h
+++ b/inputmethods/dasher/DasherNode.h
@@ -1,127 +1,141 @@
// 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<symbol>&) 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)
+inline CDasherNode::CDasherNode(CDasherNode *parent,symbol Symbol, unsigned int igroup, int iphase, ColorSchemes ColorScheme,int ilbnd,int ihbnd,CLanguageModel *lm, int Colour=0) :
+ m_iLbnd(ilbnd),
+ m_iHbnd(ihbnd),
+ m_iGroup(igroup),
+ m_iChars(0),
+ m_iAge(0),
+ m_bAlive(1),
+ m_bControlChild(false),
+ m_ColorScheme(ColorScheme),
+ m_iPhase(iphase),
+ m_iColour(Colour),
+ m_Symbol(Symbol),
+ m_languagemodel(lm),
+ m_Children(0),
+ m_parent(parent),
+ m_context(0),
+ m_bForce(false)
{
/*
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;i<m_iChars;i++)
delete m_Children[i];
delete [] m_Children;
}
m_Children=0;
}
/////////////////////////////////////////////////////////////////////////////
inline CDasherNode::~CDasherNode()
{
Delete_children();
if (m_context)
m_languagemodel->ReleaseNodeContext(m_context);
}
/////////////////////////////////////////////////////////////////////////////
#endif /* #ifndef __DasherNode_h__ */