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.h127
1 files changed, 127 insertions, 0 deletions
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<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)
+{
+ /*
+ 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__ */