1 #include "ConversionManager.h"
6 using namespace Dasher
;
8 CConversionManager::CConversionManager(CDasherModel
*pModel
, CLanguageModel
*pLanguageModel
) {
10 m_pLanguageModel
= pLanguageModel
;
12 // Assume that this is sorted:
13 std::vector
<std::string
> vCandidateList
;
15 vCandidateList
.push_back("hello");
16 vCandidateList
.push_back("foo");
17 vCandidateList
.push_back("fish");
19 // TODO: Delete list when we're done
21 m_pRoot
= new CConversionManagerNode
;
23 m_pRoot
->m_strSymbol
= "Convert";
24 m_pRoot
->m_pChild
= 0;
26 m_pRoot
->m_iNumChildren
= 0;
28 for(std::vector
<std::string
>::iterator
it(vCandidateList
.begin()); it
!= vCandidateList
.end(); ++it
) {
29 CConversionManagerNode
*pCurrentNode(m_pRoot
);
31 // TODO: Need to do unicode here!
34 for(int j(0); j
< it
->size(); ++j
) {
35 CConversionManagerNode
*pNextNode
;
37 pNextNode
= pCurrentNode
->FindChild(it
->substr(j
,1));
40 pNextNode
= new CConversionManagerNode
;
42 pNextNode
->m_strSymbol
= it
->substr(j
,1);
43 pNextNode
->m_pChild
= 0;
44 pNextNode
->m_pNext
= pCurrentNode
->m_pChild
;
45 pNextNode
->m_iNumChildren
= 0;
46 pCurrentNode
->m_pChild
= pNextNode
;
47 ++pCurrentNode
->m_iNumChildren
;
50 pCurrentNode
= pNextNode
;
55 // TODO: Actually need ref counting this time around - and need to check that it's properly implemented elsewhere
56 void CConversionManager::Ref() {
59 void CConversionManager::Unref() {
62 CDasherNode
*CConversionManager::GetRoot(CDasherNode
*pParent
, int iLower
, int iUpper
, void *pUserData
) {
63 CDasherNode
*pNewNode
;
65 // TODO: Parameters here are placeholders - need to figure out what's right
66 pNewNode
= new CDasherNode(pParent
, m_pModel
->GetStartConversionSymbol(), 0, Opts::Nodes2
, iLower
, iUpper
, m_pLanguageModel
, 2);
68 // FIXME - handle context properly
69 pNewNode
->SetContext(m_pLanguageModel
->CreateEmptyContext());
71 pNewNode
->m_pNodeManager
= this;
72 pNewNode
->m_pUserData
= m_pRoot
;
73 pNewNode
->m_strDisplayText
= m_pRoot
->m_strSymbol
;
74 pNewNode
->m_bShove
= false;
75 pNewNode
->m_pBaseGroup
= 0;
80 void CConversionManager::PopulateChildren( CDasherNode
*pNode
) {
82 CDasherNode
*pNewNode
;
84 CConversionManagerNode
*pCurrentCMNode(static_cast<CConversionManagerNode
*>(pNode
->m_pUserData
));
85 CConversionManagerNode
*pCurrentCMChild(pCurrentCMNode
->m_pChild
);
91 while(pCurrentCMChild
) {
92 int iLbnd( iIdx
*(m_pModel
->GetLongParameter(LP_NORMALIZATION
)/pCurrentCMNode
->m_iNumChildren
));
93 int iHbnd( (iIdx
+1)*(m_pModel
->GetLongParameter(LP_NORMALIZATION
)/pCurrentCMNode
->m_iNumChildren
));
95 // TODO: Parameters here are placeholders - need to figure out what's right
96 pNewNode
= new CDasherNode(pNode
, m_pModel
->GetStartConversionSymbol(), 0, Opts::Nodes2
, iLbnd
, iHbnd
, m_pLanguageModel
, 1);
98 // FIXME - handle context properly
99 pNewNode
->SetContext(m_pLanguageModel
->CreateEmptyContext());
101 pNewNode
->m_pNodeManager
= this;
102 pNewNode
->m_pUserData
= m_pRoot
;
103 pNewNode
->m_strDisplayText
= pCurrentCMChild
->m_strSymbol
;
104 pNewNode
->m_bShove
= false;
105 pNewNode
->m_pBaseGroup
= 0;
107 pNode
->Children().push_back(pNewNode
);
109 pCurrentCMChild
= pCurrentCMChild
->m_pNext
;
114 // TODO: Placeholder algorithm here
115 for(int i(0); i
< 2; ++i
) {
116 int iLbnd( i
*(m_pModel
->GetLongParameter(LP_NORMALIZATION
)/2));
117 int iHbnd( (i
+1)*(m_pModel
->GetLongParameter(LP_NORMALIZATION
)/2));
119 pNewNode
= m_pModel
->GetRoot(0, pNode
, iLbnd
, iHbnd
, NULL
);
120 pNewNode
->Seen(false);
122 pNode
->Children().push_back(pNewNode
);
127 void CConversionManager::ClearNode( CDasherNode
*pNode
) {