summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--inputmethods/dasher/AlphIO.cpp8
-rw-r--r--inputmethods/dasher/Alphabet.cpp4
-rw-r--r--inputmethods/dasher/AlphabetMap.cpp2
-rw-r--r--inputmethods/dasher/AlphabetMap.h2
-rw-r--r--inputmethods/dasher/DashEdit.h14
-rw-r--r--inputmethods/dasher/DasherInterface.cpp27
-rw-r--r--inputmethods/dasher/DasherInterface.h2
-rw-r--r--inputmethods/dasher/DasherModel.cpp8
-rw-r--r--inputmethods/dasher/DasherNode.cpp2
-rw-r--r--inputmethods/dasher/DasherNode.h20
-rw-r--r--inputmethods/dasher/DasherSettingsInterface.h48
-rw-r--r--inputmethods/dasher/DasherView.cpp4
-rw-r--r--inputmethods/dasher/DasherView.h2
-rw-r--r--inputmethods/dasher/PPMLanguageModel.cpp8
-rw-r--r--inputmethods/dasher/PPMLanguageModel.h7
-rw-r--r--inputmethods/dasher/QtDasherImpl.cc2
-rw-r--r--inputmethods/dasher/QtDasherPlugin.cc2
-rw-r--r--inputmethods/dasher/QtDasherPlugin.h2
-rw-r--r--inputmethods/dasher/QtDasherScreen.cc17
-rw-r--r--inputmethods/dasher/QtDasherScreen.h4
-rw-r--r--inputmethods/dasher/SettingsStore.cpp12
21 files changed, 118 insertions, 79 deletions
diff --git a/inputmethods/dasher/AlphIO.cpp b/inputmethods/dasher/AlphIO.cpp
index 41b1b23..96ca14a 100644
--- a/inputmethods/dasher/AlphIO.cpp
+++ b/inputmethods/dasher/AlphIO.cpp
@@ -1,83 +1,85 @@
1// AlphIO.cpp 1// AlphIO.cpp
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2002 Iain Murray 5// Copyright (c) 2002 Iain Murray
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9 9
10 10
11#include "AlphIO.h" 11#include "AlphIO.h"
12 12
13using namespace Dasher; 13using namespace Dasher;
14using namespace std; 14using namespace std;
15 15
16CAlphIO::CAlphIO(string SystemLocation, string UserLocation) 16CAlphIO::CAlphIO(string SystemLocation, string UserLocation)
17 : SystemLocation(SystemLocation), UserLocation(UserLocation), 17 : BlankInfo(),
18 BlankInfo(), CData("") 18 SystemLocation(SystemLocation),
19 UserLocation(UserLocation),
20 CData("")
19{ 21{
20 CreateDefault(); 22 CreateDefault();
21} 23}
22 24
23 25
24void CAlphIO::GetAlphabets(std::vector< std::string > * AlphabetList) const 26void CAlphIO::GetAlphabets(std::vector< std::string > * AlphabetList) const
25{ 27{
26 AlphabetList->clear(); 28 AlphabetList->clear();
27 29
28 typedef std::map<std::string, AlphInfo>::const_iterator CI; 30 typedef std::map<std::string, AlphInfo>::const_iterator CI;
29 CI End = Alphabets.end(); 31 CI End = Alphabets.end();
30 32
31 for (CI Cur=Alphabets.begin(); Cur!=End; Cur++) 33 for (CI Cur=Alphabets.begin(); Cur!=End; Cur++)
32 AlphabetList->push_back( (*Cur).second.AlphID); 34 AlphabetList->push_back( (*Cur).second.AlphID);
33} 35}
34 36
35 37
36const CAlphIO::AlphInfo& CAlphIO::GetInfo(const std::string& AlphID) 38const CAlphIO::AlphInfo& CAlphIO::GetInfo(const std::string& AlphID)
37{ 39{
38 if (AlphID=="") 40 if (AlphID=="")
39 return Alphabets["Default"]; 41 return Alphabets["Default"];
40 else { 42 else {
41 AlphInfo& CurInfo = Alphabets[AlphID]; 43 // AlphInfo& CurInfo = Alphabets[AlphID];
42 Alphabets[AlphID].AlphID = AlphID; // Ensure consistency 44 Alphabets[AlphID].AlphID = AlphID; // Ensure consistency
43 return Alphabets[AlphID]; 45 return Alphabets[AlphID];
44 } 46 }
45} 47}
46 48
47 49
48void CAlphIO::SetInfo(const AlphInfo& NewInfo) 50void CAlphIO::SetInfo(const AlphInfo& NewInfo)
49{ 51{
50 Alphabets[NewInfo.AlphID] = NewInfo; 52 Alphabets[NewInfo.AlphID] = NewInfo;
51} 53}
52 54
53 55
54void CAlphIO::Delete(const std::string& AlphID) 56void CAlphIO::Delete(const std::string& AlphID)
55{ 57{
56 if (Alphabets.find(AlphID)!=Alphabets.end()) { 58 if (Alphabets.find(AlphID)!=Alphabets.end()) {
57 Alphabets.erase(AlphID); 59 Alphabets.erase(AlphID);
58 } 60 }
59} 61}
60 62
61 63
62void CAlphIO::CreateDefault() 64void CAlphIO::CreateDefault()
63{ 65{
64 // TODO I appreciate these strings should probably be in a resource file. 66 // TODO I appreciate these strings should probably be in a resource file.
65 // Not urgent though as this is not intended to be used. It's just a 67 // Not urgent though as this is not intended to be used. It's just a
66 // last ditch effort in case file I/O totally fails. 68 // last ditch effort in case file I/O totally fails.
67 AlphInfo& Default = Alphabets["Default"]; 69 AlphInfo& Default = Alphabets["Default"];
68 Default.AlphID = "Default"; 70 Default.AlphID = "Default";
69 Default.Type = Opts::Western; 71 Default.Type = Opts::Western;
70 Default.Mutable = false; 72 Default.Mutable = false;
71 Default.Orientation = Opts::LeftToRight; 73 Default.Orientation = Opts::LeftToRight;
72 Default.SpaceCharacter.Display = "_"; 74 Default.SpaceCharacter.Display = "_";
73 Default.SpaceCharacter.Text = " "; 75 Default.SpaceCharacter.Text = " ";
74 Default.TrainingFile = "training_english_GB.txt"; 76 Default.TrainingFile = "training_english_GB.txt";
75 string Chars = "abcdefghijklmnopqrstuvwxyz"; 77 string Chars = "abcdefghijklmnopqrstuvwxyz";
76 Default.Groups.resize(1); 78 Default.Groups.resize(1);
77 Default.Groups[0].Description = "Lower case Latin letters"; 79 Default.Groups[0].Description = "Lower case Latin letters";
78 Default.Groups[0].Characters.resize(Chars.size()); 80 Default.Groups[0].Characters.resize(Chars.size());
79 for (unsigned int i=0; i<Chars.size(); i++) { 81 for (unsigned int i=0; i<Chars.size(); i++) {
80 Default.Groups[0].Characters[i].Text = Chars[i]; 82 Default.Groups[0].Characters[i].Text = Chars[i];
81 Default.Groups[0].Characters[i].Display = Chars[i]; 83 Default.Groups[0].Characters[i].Display = Chars[i];
82 } 84 }
83} 85}
diff --git a/inputmethods/dasher/Alphabet.cpp b/inputmethods/dasher/Alphabet.cpp
index dc58b35..6327d8a 100644
--- a/inputmethods/dasher/Alphabet.cpp
+++ b/inputmethods/dasher/Alphabet.cpp
@@ -1,82 +1,82 @@
1// Alphabet.cpp 1// Alphabet.cpp
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2001-2002 David Ward 5// Copyright (c) 2001-2002 David Ward
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9#include "Alphabet.h" 9#include "Alphabet.h"
10#include "AlphabetMap.h" 10#include "AlphabetMap.h"
11 11
12//#include <iostream> 12//#include <iostream>
13//WinCE doesn't have iostream! 13//WinCE doesn't have iostream!
14 14
15using namespace Dasher; 15using namespace Dasher;
16using namespace std; 16using namespace std;
17 17
18 18
19CAlphabet::CAlphabet() : m_Groups(0), m_DefaultEncoding(Opts::Western), m_Orientation(Opts::LeftToRight) 19CAlphabet::CAlphabet() : m_DefaultEncoding(Opts::Western), m_Orientation(Opts::LeftToRight), m_Groups(0)
20{ 20{
21 m_Characters.push_back(""); 21 m_Characters.push_back("");
22 m_Display.push_back(""); 22 m_Display.push_back("");
23 m_Colours.push_back(""); 23 m_Colours.push_back("");
24 m_Foreground.push_back(""); 24 m_Foreground.push_back("");
25 m_Group.push_back(0); 25 m_Group.push_back(0);
26} 26}
27 27
28 28
29void CAlphabet::GetSymbols(vector<symbol>* Symbols, string* Input, bool IsMore) 29void CAlphabet::GetSymbols(vector<symbol>* Symbols, string* Input, bool IsMore)
30{ 30{
31 string Tmp; 31 string Tmp;
32 symbol CurSymbol=0, TmpSymbol=0; 32 symbol CurSymbol=0, TmpSymbol=0;
33 bool KeyIsPrefix; 33 bool KeyIsPrefix;
34 int z= Input->size(); 34 // int z= Input->size();
35 int extras; 35 int extras;
36 unsigned int bit; 36 unsigned int bit;
37 37
38 for (unsigned int i=0; i<Input->size(); i++) { 38 for (unsigned int i=0; i<Input->size(); i++) {
39 39
40 Tmp = (*Input)[i]; 40 Tmp = (*Input)[i];
41 41
42 /* The string we've been given is in UTF-8. The symbols are 42 /* The string we've been given is in UTF-8. The symbols are
43 also in UTF-8, so we need to pass the entire UTF-8 character 43 also in UTF-8, so we need to pass the entire UTF-8 character
44 which may be several bytes long. RFC 2279 describes this 44 which may be several bytes long. RFC 2279 describes this
45 encoding */ 45 encoding */
46 46
47 if ((*Input)[i] & 0x80) { // Character is more than 1 byte long 47 if ((*Input)[i] & 0x80) { // Character is more than 1 byte long
48 extras = 1; 48 extras = 1;
49 for (bit = 0x20; ((*Input)[i] & bit) != 0; bit >>= 1) 49 for (bit = 0x20; ((*Input)[i] & bit) != 0; bit >>= 1)
50 extras++; 50 extras++;
51 if (extras > 5) { 51 if (extras > 5) {
52 } // Malformed character 52 } // Malformed character
53 while (extras-->0) { 53 while (extras-->0) {
54 Tmp += (*Input)[++i]; 54 Tmp += (*Input)[++i];
55 } 55 }
56 } 56 }
57 57
58 CurSymbol = TextMap.Get(Tmp, &KeyIsPrefix); 58 CurSymbol = TextMap.Get(Tmp, &KeyIsPrefix);
59 59
60 if (KeyIsPrefix) { 60 if (KeyIsPrefix) {
61 CurSymbol = 0; 61 CurSymbol = 0;
62 for (; i<Input->size(); i++) { 62 for (; i<Input->size(); i++) {
63 63
64 Tmp += (*Input)[i]; 64 Tmp += (*Input)[i];
65 65
66 TmpSymbol = TextMap.Get(Tmp, &KeyIsPrefix); 66 TmpSymbol = TextMap.Get(Tmp, &KeyIsPrefix);
67 if (TmpSymbol>0) { 67 if (TmpSymbol>0) {
68 CurSymbol = TmpSymbol; 68 CurSymbol = TmpSymbol;
69 } 69 }
70 if (!KeyIsPrefix) { 70 if (!KeyIsPrefix) {
71 if (CurSymbol!=0) { 71 if (CurSymbol!=0) {
72 Symbols->push_back(CurSymbol); 72 Symbols->push_back(CurSymbol);
73 } else { 73 } else {
74 i -= Tmp.size()-1; 74 i -= Tmp.size()-1;
75 //Tmp.erase(Tmp.begin(), Tmp.end()); 75 //Tmp.erase(Tmp.begin(), Tmp.end());
76 Tmp = ""; 76 Tmp = "";
77 } 77 }
78 break; 78 break;
79 } 79 }
80 } 80 }
81 } else { 81 } else {
82 if (CurSymbol!=0) 82 if (CurSymbol!=0)
diff --git a/inputmethods/dasher/AlphabetMap.cpp b/inputmethods/dasher/AlphabetMap.cpp
index 09e2c72..c687e45 100644
--- a/inputmethods/dasher/AlphabetMap.cpp
+++ b/inputmethods/dasher/AlphabetMap.cpp
@@ -1,63 +1,63 @@
1// AlphabetMap.cpp 1// AlphabetMap.cpp
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2002 Iain Murray 5// Copyright (c) 2002 Iain Murray
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9#include "AlphabetMap.h" 9#include "AlphabetMap.h"
10 10
11using namespace Dasher; 11using namespace Dasher;
12using namespace std; 12using namespace std;
13 13
14alphabet_map::alphabet_map(unsigned int InitialTableSize) 14alphabet_map::alphabet_map(unsigned int InitialTableSize)
15 : Undefined(0), HashTable(InitialTableSize<<1) 15 : HashTable(InitialTableSize<<1), Undefined(0)
16{ 16{
17 Entries.reserve(InitialTableSize); 17 Entries.reserve(InitialTableSize);
18} 18}
19 19
20 20
21void alphabet_map::Add(const string& Key, symbol Value) 21void alphabet_map::Add(const string& Key, symbol Value)
22{ 22{
23 RecursiveAdd(Key, Value, false); 23 RecursiveAdd(Key, Value, false);
24} 24}
25 25
26 26
27void alphabet_map::RecursiveAdd(const string& Key, symbol Value, bool PrefixFlag) 27void alphabet_map::RecursiveAdd(const string& Key, symbol Value, bool PrefixFlag)
28{ 28{
29 Entry*& HashEntry = HashTable[Hash(Key)]; 29 Entry*& HashEntry = HashTable[Hash(Key)];
30 30
31 // Loop through Entries with the correct Hash value. 31 // Loop through Entries with the correct Hash value.
32 for (Entry* i = HashEntry; i; i=i->Next) { 32 for (Entry* i = HashEntry; i; i=i->Next) {
33 if (i->Key==Key) { 33 if (i->Key==Key) {
34 if (PrefixFlag) { 34 if (PrefixFlag) {
35 // Just tagging - don't change symbol. Recurse if necessary 35 // Just tagging - don't change symbol. Recurse if necessary
36 i->KeyIsPrefix = true; 36 i->KeyIsPrefix = true;
37 if (Key.size()>1) 37 if (Key.size()>1)
38 RecursiveAdd(Key.substr(Key.size()-1), Undefined, true); 38 RecursiveAdd(Key.substr(Key.size()-1), Undefined, true);
39 } else { 39 } else {
40 // Add symbol and leave 40 // Add symbol and leave
41 i->Symbol = Value; 41 i->Symbol = Value;
42 } 42 }
43 return; 43 return;
44 } 44 }
45 } 45 }
46 46
47 // When hash table gets 1/2 full... 47 // When hash table gets 1/2 full...
48 // (no I haven't optimised when to resize) 48 // (no I haven't optimised when to resize)
49 if (Entries.size()<<1 >= HashTable.size()) { 49 if (Entries.size()<<1 >= HashTable.size()) {
50 // Double up all the storage 50 // Double up all the storage
51 HashTable.clear(); 51 HashTable.clear();
52 HashTable.resize(Entries.size()<<2); 52 HashTable.resize(Entries.size()<<2);
53 Entries.reserve(Entries.size()<<1); 53 Entries.reserve(Entries.size()<<1);
54 54
55 // Rehash as the pointers will all be mangled. 55 // Rehash as the pointers will all be mangled.
56 for (uint j=0; j<Entries.size(); j++) { 56 for (uint j=0; j<Entries.size(); j++) {
57 Entry*& HashEntry2 = HashTable[Hash(Entries[j].Key)]; 57 Entry*& HashEntry2 = HashTable[Hash(Entries[j].Key)];
58 Entries[j].Next = HashEntry2; 58 Entries[j].Next = HashEntry2;
59 HashEntry2 = &Entries[j]; 59 HashEntry2 = &Entries[j];
60 } 60 }
61 61
62 // Have to recall this function as the key's hash needs recalculating 62 // Have to recall this function as the key's hash needs recalculating
63 RecursiveAdd(Key, Value, PrefixFlag); 63 RecursiveAdd(Key, Value, PrefixFlag);
diff --git a/inputmethods/dasher/AlphabetMap.h b/inputmethods/dasher/AlphabetMap.h
index 3aac1f5..62f20d9 100644
--- a/inputmethods/dasher/AlphabetMap.h
+++ b/inputmethods/dasher/AlphabetMap.h
@@ -23,89 +23,89 @@ The result is this:
23*************************************************** 23***************************************************
24very much thrown together to get Dasher out ASAP. 24very much thrown together to get Dasher out ASAP.
25*************************************************** 25***************************************************
26It is deliberately not like an STL container. 26It is deliberately not like an STL container.
27However, as it has a tiny interface, it should still be easy to replace. 27However, as it has a tiny interface, it should still be easy to replace.
28Sorry if this seems really unprofressional. 28Sorry if this seems really unprofressional.
29 29
30Replacing it might be a good idea. On the other hand it could be customised 30Replacing it might be a good idea. On the other hand it could be customised
31to the needs of the alphabet, so that it works faster. For example, 31to the needs of the alphabet, so that it works faster. For example,
32currently if I have a string "asdf", it might be that "a" is checked 32currently if I have a string "asdf", it might be that "a" is checked
33then "as" is checked then "asd" is checked. I shouldn't need to keep 33then "as" is checked then "asd" is checked. I shouldn't need to keep
34rehashing the leading characters. I plan to fix that here. Doing so with 34rehashing the leading characters. I plan to fix that here. Doing so with
35a standard hash_map would be hard. 35a standard hash_map would be hard.
36 36
37 37
38Usage: 38Usage:
39alphabet_map MyMap(NumberOfEntriesWeExpect); // Can omit NumberOfEntriesWeExpect 39alphabet_map MyMap(NumberOfEntriesWeExpect); // Can omit NumberOfEntriesWeExpect
40MyMap.add("asdf", 15); 40MyMap.add("asdf", 15);
41symbol i = MyMap.get("asdf") // i=15 41symbol i = MyMap.get("asdf") // i=15
42symbol j = MyMap.get("fdsa") // j=0 42symbol j = MyMap.get("fdsa") // j=0
43 43
44You can't remove items once they are added as Dasher has no need for that. 44You can't remove items once they are added as Dasher has no need for that.
45 45
46IAM 08/2002 46IAM 08/2002
47*/ 47*/
48 48
49#ifndef __AlphabetMap_h__ 49#ifndef __AlphabetMap_h__
50#define __AlphabetMap_h__ 50#define __AlphabetMap_h__
51 51
52#include "MSVC_Unannoy.h" 52#include "MSVC_Unannoy.h"
53#include <vector> 53#include <vector>
54#include <string> 54#include <string>
55 55
56#include "DasherTypes.h" 56#include "DasherTypes.h"
57 57
58namespace Dasher {class alphabet_map;} 58namespace Dasher {class alphabet_map;}
59class Dasher::alphabet_map 59class Dasher::alphabet_map
60{ 60{
61public: 61public:
62 alphabet_map(uint InitialTableSize=255); 62 alphabet_map(uint InitialTableSize=255);
63 void Add(const std::string& Key, symbol Value); 63 void Add(const std::string& Key, symbol Value);
64 symbol Get(const std::string& Key, bool* KeyIsPrefix=0) const; 64 symbol Get(const std::string& Key, bool* KeyIsPrefix=0) const;
65 65
66private: 66private:
67 class Entry 67 class Entry
68 { 68 {
69 public: 69 public:
70 Entry(std::string Key, symbol Symbol, Entry* Next) 70 Entry(std::string Key, symbol Symbol, Entry* Next)
71 : Key(Key), Symbol(Symbol), Next(Next), KeyIsPrefix(false) {} 71 : Key(Key), KeyIsPrefix(false), Symbol(Symbol), Next(Next) {}
72 72
73 std::string Key; 73 std::string Key;
74 bool KeyIsPrefix; 74 bool KeyIsPrefix;
75 symbol Symbol; 75 symbol Symbol;
76 Entry* Next; 76 Entry* Next;
77 }; 77 };
78 78
79 void RecursiveAdd(const std::string& Key, symbol Value, bool PrefixFlag); 79 void RecursiveAdd(const std::string& Key, symbol Value, bool PrefixFlag);
80 80
81 // A standard hash -- could try and research something specific. 81 // A standard hash -- could try and research something specific.
82 inline uint Hash(const std::string& Input) const { 82 inline uint Hash(const std::string& Input) const {
83 uint Result = 0; 83 uint Result = 0;
84 84
85 typedef std::string::const_iterator CI; 85 typedef std::string::const_iterator CI;
86 CI Cur = Input.begin(); 86 CI Cur = Input.begin();
87 CI end = Input.end(); 87 CI end = Input.end();
88 88
89 while (Cur!=end) Result = (Result<<1)^*Cur++; 89 while (Cur!=end) Result = (Result<<1)^*Cur++;
90 Result %= HashTable.size(); 90 Result %= HashTable.size();
91 91
92 return Result; 92 return Result;
93 /* 93 /*
94 if (Input.size()==1) // Speedup for ASCII text 94 if (Input.size()==1) // Speedup for ASCII text
95 return Input[0]; 95 return Input[0];
96 96
97 for (int i=0; i<Input.size(); i++) 97 for (int i=0; i<Input.size(); i++)
98 Result = (Result<<1)^Input[i]; 98 Result = (Result<<1)^Input[i];
99 99
100 100
101 return Result%HashTable.size(); 101 return Result%HashTable.size();
102 */ 102 */
103 } 103 }
104 104
105 std::vector<Entry> Entries; 105 std::vector<Entry> Entries;
106 std::vector<Entry*> HashTable; 106 std::vector<Entry*> HashTable;
107 const symbol Undefined; 107 const symbol Undefined;
108}; 108};
109 109
110 110
111#endif /* #ifndef __AlphabetMap_h__ */ 111#endif /* #ifndef __AlphabetMap_h__ */
diff --git a/inputmethods/dasher/DashEdit.h b/inputmethods/dasher/DashEdit.h
index dc14d15..0baeec9 100644
--- a/inputmethods/dasher/DashEdit.h
+++ b/inputmethods/dasher/DashEdit.h
@@ -1,147 +1,147 @@
1//! Class definition for an edit box 1//! Class definition for an edit box
2// DashEdit.h 2// DashEdit.h
3// 3//
4///////////////////////////////////////////////////////////////////////////// 4/////////////////////////////////////////////////////////////////////////////
5// 5//
6// Copyright (c) 2002 Iain Murray 6// Copyright (c) 2002 Iain Murray
7// 7//
8///////////////////////////////////////////////////////////////////////////// 8/////////////////////////////////////////////////////////////////////////////
9 9
10/* 10/*
11An abstract DashEditbox class is described here. 11An abstract DashEditbox class is described here.
12An implementation will handle interaction between Dasher and an actual Edit control. 12An implementation will handle interaction between Dasher and an actual Edit control.
13e.g. - output characters to the edit control 13e.g. - output characters to the edit control
14 - tapping on the edit box updates the Dasher display 14 - tapping on the edit box updates the Dasher display
15*/ 15*/
16 16
17#ifndef __DashEdit_h__ 17#ifndef __DashEdit_h__
18#define __DashEdit_h__ 18#define __DashEdit_h__
19 19
20#include "DasherWidgetInterface.h" 20#include "DasherWidgetInterface.h"
21 21
22namespace Dasher {class CDashEditbox;} 22namespace Dasher {class CDashEditbox;}
23class Dasher::CDashEditbox 23class Dasher::CDashEditbox
24{ 24{
25public: 25public:
26 CDashEditbox() : m_iFlushed(0), m_DasherInterface(0), m_dirty(false) {} 26 CDashEditbox() : m_dirty(false),m_iFlushed(0), m_DasherInterface(0) {}
27 27
28 //! Provide the Editbox with a widget interface 28 //! Provide the Editbox with a widget interface
29 virtual void SetInterface(CDasherWidgetInterface* DasherInterface) {m_DasherInterface = DasherInterface;} 29 virtual void SetInterface(CDasherWidgetInterface* DasherInterface) {m_DasherInterface = DasherInterface;}
30 30
31 //! Write some buffered output to a file 31 //! Write some buffered output to a file
32 virtual void write_to_file()=0; 32 virtual void write_to_file()=0;
33 33
34 //! Set the number of flushed characters 34 //! Set the number of flushed characters
35 // 35 //
36 //! Set the number of flushed characters to an arbitrary number. 36 //! Set the number of flushed characters to an arbitrary number.
37 //! Usually used to reset it to 0 after unflushing 37 //! Usually used to reset it to 0 after unflushing
38 void set_flushed(int i) {m_iFlushed=i;} 38 void set_flushed(int i) {m_iFlushed=i;}
39 39
40 //! Provide context from the editbox for the core 40 //! Provide context from the editbox for the core
41 // 41 //
42 //! Provide the context at the current position within the editbox to 42 //! Provide the context at the current position within the editbox to
43 //! the core. Set str to up to max characters before 43 //! the core. Set str to up to max characters before
44 //! the cursor position within the editbox. 44 //! the cursor position within the editbox.
45 virtual void get_new_context(std::string& str, int max)=0; 45 virtual void get_new_context(std::string& str, int max)=0;
46 46
47 //! Delete flushed text from the editbox 47 //! Delete flushed text from the editbox
48 virtual inline void unflush()=0; 48 virtual void unflush()=0;
49 49
50 //! Enter a the character Symbol into the text box 50 //! Enter a the character Symbol into the text box
51 virtual void output(symbol Symbol)=0; 51 virtual void output(symbol Symbol)=0;
52 52
53 //! Delete the previous symbol from the text box 53 //! Delete the previous symbol from the text box
54 virtual void deletetext()=0; 54 virtual void deletetext()=0;
55 55
56 //! Enter a character into the text box and remember that it is flushed 56 //! Enter a character into the text box and remember that it is flushed
57 // 57 //
58 //! Output the character and increment m_iFlushed. When unflush is 58 //! Output the character and increment m_iFlushed. When unflush is
59 //! called, remove the previous m_iFlushed characters 59 //! called, remove the previous m_iFlushed characters
60 virtual void flush(symbol Symbol)=0; 60 virtual void flush(symbol Symbol)=0;
61 61
62 // File I/O (optional) 62 // File I/O (optional)
63 63
64 //! If Value is true, timestamp all new files (optional) 64 //! If Value is true, timestamp all new files (optional)
65 // 65 //
66 //! If switched on, all new files should be timestamped, either in the 66 //! If switched on, all new files should be timestamped, either in the
67 //! filename or in file metadata 67 //! filename or in file metadata
68 virtual void TimeStampNewFiles(bool Value) {} 68 virtual void TimeStampNewFiles(bool ) {}
69 69
70 //! Return true if any text has been modified since the last save (optional) 70 //! Return true if any text has been modified since the last save (optional)
71 bool IsDirty() {return m_dirty;} 71 bool IsDirty() {return m_dirty;}
72 72
73 //! Generate a new file (optional) 73 //! Generate a new file (optional)
74 // 74 //
75 //! New file - provide a file save dialogue and return the filename in 75 //! New file - provide a file save dialogue and return the filename in
76 //! filename, or provide a blank filename and present a file 76 //! filename, or provide a blank filename and present a file
77 //! save dialogue when Save() is called 77 //! save dialogue when Save() is called
78 virtual void New(const std::string& filename) {}; // filename can be "", but you cannot call Save() without having set a filename. 78 virtual void New(const std::string& ) {}; // filename can be "", but you cannot call Save() without having set a filename.
79 79
80 //! Open a file (optional) 80 //! Open a file (optional)
81 // 81 //
82 //! Provide a file open dialogue and set filename to the 82 //! Provide a file open dialogue and set filename to the
83 //! filename. Return true if a file is chosen and opened successfully, 83 //! filename. Return true if a file is chosen and opened successfully,
84 //! false otherwise 84 //! false otherwise
85 virtual bool Open(const std::string& filename) {return false;}; 85 virtual bool Open(const std::string& ) {return false;};
86 86
87 //! Open a file and append to it (optional) 87 //! Open a file and append to it (optional)
88 // 88 //
89 //! Provide a file open dialogue and set filename to the 89 //! Provide a file open dialogue and set filename to the
90 //! filename. The file will then have any new text appended to it. 90 //! filename. The file will then have any new text appended to it.
91 //! Return true if a file is chosen and opened successfully, false 91 //! Return true if a file is chosen and opened successfully, false
92 //! otherwise 92 //! otherwise
93 virtual bool OpenAppendMode(const std::string& filename) {return false;}; 93 virtual bool OpenAppendMode(const std::string& ) {return false;};
94 //! Save a file as a provided filename (optional) 94 //! Save a file as a provided filename (optional)
95 // 95 //
96 //! Provide a file save dialogue and set filename to the 96 //! Provide a file save dialogue and set filename to the
97 //! filename. Return true if a file is chosen and saved successfully, 97 //! filename. Return true if a file is chosen and saved successfully,
98 //! false otherwise 98 //! false otherwise
99 virtual bool SaveAs(const std::string& filename) {return false;}; 99 virtual bool SaveAs(const std::string& ) {return false;};
100 100
101 //! Save the current file (optional) 101 //! Save the current file (optional)
102 // 102 //
103 //! Save file to the current filename. If there is no current filename, 103 //! Save file to the current filename. If there is no current filename,
104 //! or if saving fails, return false 104 //! or if saving fails, return false
105 virtual bool Save() {return false;}; // returns false if there is no filename set, or if saving fails 105 virtual bool Save() {return false;}; // returns false if there is no filename set, or if saving fails
106 106
107 // Clipboard (optional) 107 // Clipboard (optional)
108 //! Cut selected text (optional) 108 //! Cut selected text (optional)
109 // 109 //
110 //! Copy the selected text to the clipboard and remove it from the 110 //! Copy the selected text to the clipboard and remove it from the
111 //! editbox 111 //! editbox
112 virtual void Cut() {}; 112 virtual void Cut() {};
113 113
114 //! Copy selected text (optional) 114 //! Copy selected text (optional)
115 // 115 //
116 //! Copy the selected text to the clipboard 116 //! Copy the selected text to the clipboard
117 virtual void Copy() {}; 117 virtual void Copy() {};
118 118
119 //! Copy all text (optional) 119 //! Copy all text (optional)
120 // 120 //
121 //! Copy all text in the editbox to the clipboard 121 //! Copy all text in the editbox to the clipboard
122 virtual void CopyAll() {}; 122 virtual void CopyAll() {};
123 123
124 //! Paste text from clipboard (optional) 124 //! Paste text from clipboard (optional)
125 // 125 //
126 //! Paste text from the clipboard into the editbox at the current 126 //! Paste text from the clipboard into the editbox at the current
127 //! position 127 //! position
128 virtual void Paste() {}; 128 virtual void Paste() {};
129 129
130 //! Select all text in the editbox (optional) 130 //! Select all text in the editbox (optional)
131 virtual void SelectAll() {}; 131 virtual void SelectAll() {};
132 132
133 //! Clear all text from the editbox (REQUIRED) 133 //! Clear all text from the editbox (REQUIRED)
134 virtual void Clear()=0; // Must at least be able to clear edit box 134 virtual void Clear()=0; // Must at least be able to clear edit box
135 135
136 //! Set the file encoding 136 //! Set the file encoding
137 // 137 //
138 //! Set the file encoding to the provided encoding Encoding. 138 //! Set the file encoding to the provided encoding Encoding.
139 //! The editbox is responsible for saving the file in the encoding 139 //! The editbox is responsible for saving the file in the encoding
140 //! desired by the user. As Dasher is internally UTF8, it may well be 140 //! desired by the user. As Dasher is internally UTF8, it may well be
141 //! necessary to save in an alternative format based on locale and OS. 141 //! necessary to save in an alternative format based on locale and OS.
142 virtual void SetEncoding(Opts::FileEncodingFormats Encoding)=0; 142 virtual void SetEncoding(Opts::FileEncodingFormats Encoding)=0;
143 143
144 //! Set the font used in the editbox 144 //! Set the font used in the editbox
145 // 145 //
146 //! Set the font used in the editbox to Name and size 146 //! Set the font used in the editbox to Name and size
147 //! Size (in points) 147 //! Size (in points)
diff --git a/inputmethods/dasher/DasherInterface.cpp b/inputmethods/dasher/DasherInterface.cpp
index bb5b85e..4699687 100644
--- a/inputmethods/dasher/DasherInterface.cpp
+++ b/inputmethods/dasher/DasherInterface.cpp
@@ -1,80 +1,97 @@
1// DasherInterface.cpp 1// DasherInterface.cpp
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2002 Iain Murray 5// Copyright (c) 2002 Iain Murray
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9 9
10 10
11#include "DasherInterface.h" 11#include "DasherInterface.h"
12//#include "EnglishAlphabet.h" 12//#include "EnglishAlphabet.h"
13#include "CustomAlphabet.h" 13#include "CustomAlphabet.h"
14#include "DasherViewSquare.h" 14#include "DasherViewSquare.h"
15#include "PPMLanguageModel.h" 15#include "PPMLanguageModel.h"
16#include <iostream> 16#include <iostream>
17namespace { 17namespace {
18 #include "stdio.h" 18 #include "stdio.h"
19} 19}
20using namespace Dasher; 20using namespace Dasher;
21using namespace std; 21using namespace std;
22 22
23 23
24const string CDasherInterface::EmptyString = ""; 24const string CDasherInterface::EmptyString = "";
25 25
26 26
27CDasherInterface::CDasherInterface() 27CDasherInterface::CDasherInterface()
28 : m_DashEditbox(0), m_DasherScreen(0), m_LanguageModel(0), TrainContext(0), m_Alphabet(0), 28 : m_Alphabet(0),
29 m_DasherModel(0), m_DasherView(0), AlphabetID(""), LanguageModelID(-1), ViewID(-1), 29 m_LanguageModel(0),
30 m_MaxBitRate(-1), m_Orientation(Opts::LeftToRight), m_SettingsStore(0), m_SettingsUI(0), 30 m_DasherModel(0),
31 m_UserLocation("usr_"), m_SystemLocation("sys_"), m_AlphIO(0), m_TrainFile(""), 31 m_DashEditbox(0),
32 m_DasherFont(""), m_EditFont(""), m_EditFontSize(0), m_DrawKeyboard(false) 32 m_DasherScreen(0),
33 m_DasherView(0),
34 m_SettingsStore(0),
35 m_SettingsUI(0),
36 m_AlphIO(0),
37 TrainContext(0),
38 AlphabetID(""),
39 LanguageModelID(-1),
40 ViewID(-1),
41 m_MaxBitRate(-1),
42 m_DrawKeyboard(false),
43 m_Orientation(Opts::LeftToRight),
44 m_UserLocation("usr_"),
45 m_SystemLocation("sys_"),
46 m_TrainFile(""),
47 m_DasherFont(""),
48 m_EditFont(""),
49 m_EditFontSize(0)
33{ 50{
34} 51}
35 52
36 53
37CDasherInterface::~CDasherInterface() 54CDasherInterface::~CDasherInterface()
38{ 55{
39 if (m_LanguageModel) 56 if (m_LanguageModel)
40 m_LanguageModel->ReleaseNodeContext(TrainContext); 57 m_LanguageModel->ReleaseNodeContext(TrainContext);
41 delete m_DasherModel; // The order of some of these deletions matters 58 delete m_DasherModel; // The order of some of these deletions matters
42 delete m_LanguageModel; // eg DasherModel has a pointer to LanguageModel. 59 delete m_LanguageModel; // eg DasherModel has a pointer to LanguageModel.
43 delete m_Alphabet; // DM baulks if LM is deleted before it is. 60 delete m_Alphabet; // DM baulks if LM is deleted before it is.
44 delete m_DasherView; 61 delete m_DasherView;
45 // Do NOT delete Edit box or Screen. This class did not create them. 62 // Do NOT delete Edit box or Screen. This class did not create them.
46} 63}
47 64
48 65
49void CDasherInterface::SetSettingsStore(CSettingsStore* SettingsStore) 66void CDasherInterface::SetSettingsStore(CSettingsStore* SettingsStore)
50{ 67{
51 delete m_SettingsStore; 68 delete m_SettingsStore;
52 m_SettingsStore = SettingsStore; 69 m_SettingsStore = SettingsStore;
53 this->SettingsDefaults(m_SettingsStore); 70 this->SettingsDefaults(m_SettingsStore);
54} 71}
55 72
56 73
57void CDasherInterface::SetSettingsUI(CDasherSettingsInterface* SettingsUI) 74void CDasherInterface::SetSettingsUI(CDasherSettingsInterface* SettingsUI)
58{ 75{
59 delete m_SettingsUI; 76 delete m_SettingsUI;
60 m_SettingsUI = SettingsUI; 77 m_SettingsUI = SettingsUI;
61 //this->SettingsDefaults(m_SettingsStore); 78 //this->SettingsDefaults(m_SettingsStore);
62 m_SettingsUI->SettingsDefaults(m_SettingsStore); 79 m_SettingsUI->SettingsDefaults(m_SettingsStore);
63} 80}
64 81
65 82
66void CDasherInterface::SetUserLocation(std::string UserLocation) 83void CDasherInterface::SetUserLocation(std::string UserLocation)
67{ 84{
68 // Nothing clever updates. (At the moment) it is assumed that 85 // Nothing clever updates. (At the moment) it is assumed that
69 // this is set before anything much happens and that it does 86 // this is set before anything much happens and that it does
70 // not require changing. 87 // not require changing.
71 m_UserLocation = UserLocation; 88 m_UserLocation = UserLocation;
72 if (m_Alphabet!=0) 89 if (m_Alphabet!=0)
73 m_TrainFile = m_UserLocation + m_Alphabet->GetTrainingFile(); 90 m_TrainFile = m_UserLocation + m_Alphabet->GetTrainingFile();
74} 91}
75 92
76 93
77void CDasherInterface::SetSystemLocation(std::string SystemLocation) 94void CDasherInterface::SetSystemLocation(std::string SystemLocation)
78{ 95{
79 // Nothing clever updates. (At the moment) it is assumed that 96 // Nothing clever updates. (At the moment) it is assumed that
80 // this is set before anything much happens and that it does 97 // this is set before anything much happens and that it does
diff --git a/inputmethods/dasher/DasherInterface.h b/inputmethods/dasher/DasherInterface.h
index 6338801..7c4496f 100644
--- a/inputmethods/dasher/DasherInterface.h
+++ b/inputmethods/dasher/DasherInterface.h
@@ -1,89 +1,89 @@
1// DasherInterface.h 1// DasherInterface.h
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2002 Iain Murray 5// Copyright (c) 2002 Iain Murray
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9 9
10 10
11#ifndef __DasherInterface_h__ 11#ifndef __DasherInterface_h__
12#define __DasherInterface_h__ 12#define __DasherInterface_h__
13 13
14// TODO - there is a list of things to be configurable in my notes 14// TODO - there is a list of things to be configurable in my notes
15// Check that everything that is not self-contained within the GUI is covered. 15// Check that everything that is not self-contained within the GUI is covered.
16 16
17#include "MSVC_Unannoy.h" 17#include "MSVC_Unannoy.h"
18#include "NoClones.h" 18#include "NoClones.h"
19 19
20#include "DasherWidgetInterface.h" 20#include "DasherWidgetInterface.h"
21#include "DasherAppInterface.h" 21#include "DasherAppInterface.h"
22#include "DasherSettingsInterface.h" 22#include "DasherSettingsInterface.h"
23 23
24#include "DasherScreen.h" 24#include "DasherScreen.h"
25#include "Alphabet.h" 25#include "Alphabet.h"
26#include "AlphIO.h" 26#include "AlphIO.h"
27#include "LanguageModel.h" 27#include "LanguageModel.h"
28#include "DasherModel.h" 28#include "DasherModel.h"
29#include "DashEdit.h" 29#include "DashEdit.h"
30#include "DasherView.h" 30#include "DasherView.h"
31 31
32#include "MSVC_Unannoy.h" 32#include "MSVC_Unannoy.h"
33#include <map> 33#include <map>
34 34
35namespace Dasher {class CDasherInterface;} 35namespace Dasher {class CDasherInterface;}
36class Dasher::CDasherInterface : private NoClones, 36class Dasher::CDasherInterface : private NoClones,
37 public CDasherWidgetInterface, public CDasherAppInterface, public CDasherSettingsInterface 37 public CDasherWidgetInterface, public CDasherAppInterface, public CDasherSettingsInterface
38{ 38{
39public: 39public:
40 CDasherInterface(); 40 CDasherInterface();
41 ~CDasherInterface(); 41 virtual ~CDasherInterface();
42 42
43 //! Tell the core which CSettingsStore should be used 43 //! Tell the core which CSettingsStore should be used
44 void SetSettingsStore(CSettingsStore* SettingsStore); 44 void SetSettingsStore(CSettingsStore* SettingsStore);
45 45
46 //! Tell the core which CDasherSettingsInterface should be used 46 //! Tell the core which CDasherSettingsInterface should be used
47 // 47 //
48 //! Provide a pointer to an instance of CDasherSettingsInterface in 48 //! Provide a pointer to an instance of CDasherSettingsInterface in
49 //! order to allow for platform dependent configuration of certain 49 //! order to allow for platform dependent configuration of certain
50 //! options 50 //! options
51 void SetSettingsUI(CDasherSettingsInterface* SettingsUI); 51 void SetSettingsUI(CDasherSettingsInterface* SettingsUI);
52 52
53 //! Set the path for user specific configuration and files 53 //! Set the path for user specific configuration and files
54 void SetUserLocation(std::string UserLocation); 54 void SetUserLocation(std::string UserLocation);
55 55
56 //! Set the path for system-wide configuration and files 56 //! Set the path for system-wide configuration and files
57 void SetSystemLocation(std::string SystemLocation); 57 void SetSystemLocation(std::string SystemLocation);
58 58
59 // Widget Interface 59 // Widget Interface
60 // ----------------------------------------------------- 60 // -----------------------------------------------------
61 void Start(); 61 void Start();
62 62
63 void TapOn(int MouseX, int MouseY, unsigned long Time); // Times in milliseconds 63 void TapOn(int MouseX, int MouseY, unsigned long Time); // Times in milliseconds
64 void PauseAt(int MouseX, int MouseY); // are required to make 64 void PauseAt(int MouseX, int MouseY); // are required to make
65 void Unpause(unsigned long Time); // Dasher run at the 65 void Unpause(unsigned long Time); // Dasher run at the
66 void Redraw(); // correct speed. 66 void Redraw(); // correct speed.
67 67
68 void ChangeScreen(); // The widgets need to tell the engine when they have been 68 void ChangeScreen(); // The widgets need to tell the engine when they have been
69 void ChangeEdit(); // affected by external interaction 69 void ChangeEdit(); // affected by external interaction
70 70
71 unsigned int GetNumberSymbols(); // These are needed so widgets know 71 unsigned int GetNumberSymbols(); // These are needed so widgets know
72 const std::string& GetDisplayText(symbol Symbol); // how to render the alphabet. All 72 const std::string& GetDisplayText(symbol Symbol); // how to render the alphabet. All
73 const std::string& GetEditText(symbol Symbol); // strings are encoded in UTF-8 73 const std::string& GetEditText(symbol Symbol); // strings are encoded in UTF-8
74 int GetTextColour(symbol Symbol); // the foreground colour of the text 74 int GetTextColour(symbol Symbol); // the foreground colour of the text
75 Opts::ScreenOrientations GetAlphabetOrientation(); 75 Opts::ScreenOrientations GetAlphabetOrientation();
76 Opts::AlphabetTypes GetAlphabetType(); 76 Opts::AlphabetTypes GetAlphabetType();
77 const std::string& GetTrainFile(); 77 const std::string& GetTrainFile();
78 78
79 // App Interface 79 // App Interface
80 // ----------------------------------------------------- 80 // -----------------------------------------------------
81 81
82 // std::map<int, std::string>& GetAlphabets(); // map<key, value> int is a UID string can change. Store UID in preferences. Display string to user. 82 // std::map<int, std::string>& GetAlphabets(); // map<key, value> int is a UID string can change. Store UID in preferences. Display string to user.
83 // std::vector<std::string>& GetAlphabets(); 83 // std::vector<std::string>& GetAlphabets();
84 // std::vector<std::string>& GetLangModels(); 84 // std::vector<std::string>& GetLangModels();
85 // std::vector<std::string>& GetViews(); 85 // std::vector<std::string>& GetViews();
86 86
87 void ChangeScreen(CDasherScreen* NewScreen); // We may change the widgets Dasher uses 87 void ChangeScreen(CDasherScreen* NewScreen); // We may change the widgets Dasher uses
88 void ChangeEdit(CDashEditbox* NewEdit); // at run time. 88 void ChangeEdit(CDashEditbox* NewEdit); // at run time.
89 89
diff --git a/inputmethods/dasher/DasherModel.cpp b/inputmethods/dasher/DasherModel.cpp
index 0450d66..f15fa49 100644
--- a/inputmethods/dasher/DasherModel.cpp
+++ b/inputmethods/dasher/DasherModel.cpp
@@ -1,294 +1,294 @@
1// DasherModel.h 1// DasherModel.h
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2001-2002 David Ward 5// Copyright (c) 2001-2002 David Ward
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9#include <iostream> 9#include <iostream>
10#include "DasherModel.h" 10#include "DasherModel.h"
11 11
12using namespace Dasher; 12using namespace Dasher;
13using namespace std; 13using namespace std;
14 14
15////////////////////////////////////////////////////////////////////// 15//////////////////////////////////////////////////////////////////////
16// CDasherModel 16// CDasherModel
17////////////////////////////////////////////////////////////////////// 17//////////////////////////////////////////////////////////////////////
18 18
19CDasherModel::CDasherModel(CDashEditbox* Editbox, CLanguageModel* LanguageModel, bool Dimensions) 19CDasherModel::CDasherModel(CDashEditbox* Editbox, CLanguageModel* LanguageModel, bool Dimensions)
20 : m_editbox(Editbox), m_languagemodel(LanguageModel), m_Root(0), m_Dimensions(Dimensions) 20 : m_Dimensions(Dimensions), m_editbox(Editbox), m_languagemodel(LanguageModel), m_Root(0)
21{ 21{
22 LearnContext = m_languagemodel->GetRootNodeContext(); 22 LearnContext = m_languagemodel->GetRootNodeContext();
23 23
24 // various settings 24 // various settings
25 int iShift = 12; 25 int iShift = 12;
26 m_DasherY = 1<<iShift; 26 m_DasherY = 1<<iShift;
27 m_DasherOY = m_DasherY/2; 27 m_DasherOY = m_DasherY/2;
28 m_DasherOX = m_DasherY/2; 28 m_DasherOX = m_DasherY/2;
29 m_dAddProb = 0.003; 29 m_dAddProb = 0.003;
30} 30}
31 31
32 32
33CDasherModel::~CDasherModel() 33CDasherModel::~CDasherModel()
34{ 34{
35 m_languagemodel->ReleaseNodeContext(LearnContext); 35 m_languagemodel->ReleaseNodeContext(LearnContext);
36 delete m_Root; // which will also delete all the whole structure 36 delete m_Root; // which will also delete all the whole structure
37} 37}
38 38
39 39
40void CDasherModel::Make_root(int whichchild) 40void CDasherModel::Make_root(int whichchild)
41 // find a new root node 41 // find a new root node
42{ 42{
43 symbol t=m_Root->Symbol(); 43 symbol t=m_Root->Symbol();
44 if (t) { 44 if (t) {
45 m_editbox->output(t); 45 m_editbox->output(t);
46 m_languagemodel->LearnNodeSymbol(LearnContext, t); 46 m_languagemodel->LearnNodeSymbol(LearnContext, t);
47 } 47 }
48 48
49 CDasherNode * oldroot=m_Root; 49 CDasherNode * oldroot=m_Root;
50 50
51 CDasherNode **children=m_Root->Children(); 51 CDasherNode **children=m_Root->Children();
52 m_Root=children[whichchild]; 52 m_Root=children[whichchild];
53 //oldroot->Children()[whichchild]=0; // null the pointer so we don't delete the whole tree 53 //oldroot->Children()[whichchild]=0; // null the pointer so we don't delete the whole tree
54 //delete oldroot; 54 //delete oldroot;
55 55
56 oldroots.push_back(oldroot); 56 oldroots.push_back(oldroot);
57 57
58 myint range=m_Rootmax-m_Rootmin; 58 myint range=m_Rootmax-m_Rootmin;
59 m_Rootmax=m_Rootmin+(range*m_Root->Hbnd())/Normalization(); 59 m_Rootmax=m_Rootmin+(range*m_Root->Hbnd())/Normalization();
60 m_Rootmin+=(range*m_Root->Lbnd())/Normalization(); 60 m_Rootmin+=(range*m_Root->Lbnd())/Normalization();
61} 61}
62 62
63void CDasherModel::Reparent_root(int lower, int upper) 63void CDasherModel::Reparent_root(int lower, int upper)
64{ 64{
65 /* Change the root node to the parent of the existing node 65 /* Change the root node to the parent of the existing node
66 We need to recalculate the coordinates for the "new" root as the 66 We need to recalculate the coordinates for the "new" root as the
67 user may have moved around within the current root */ 67 user may have moved around within the current root */
68 68
69 /* Determine how zoomed in we are */ 69 /* Determine how zoomed in we are */
70 float scalefactor=(m_Rootmax-m_Rootmin)/(upper-lower); 70 float scalefactor=(m_Rootmax-m_Rootmin)/(upper-lower);
71 71
72 m_Rootmax=int(m_Rootmax+((1024-upper)*scalefactor)); 72 m_Rootmax=int(m_Rootmax+((1024-upper)*scalefactor));
73 m_Rootmin=int(m_Rootmin-(lower*scalefactor)); 73 m_Rootmin=int(m_Rootmin-(lower*scalefactor));
74 74
75 m_editbox->deletetext(); 75 m_editbox->deletetext();
76 76
77 m_Root=oldroots.back(); 77 m_Root=oldroots.back();
78 oldroots.pop_back(); 78 oldroots.pop_back();
79} 79}
80 80
81///////////////////////////////////////////////////////////////////////////// 81/////////////////////////////////////////////////////////////////////////////
82 82
83CDasherNode * CDasherModel::Get_node_under_crosshair() 83CDasherNode * CDasherModel::Get_node_under_crosshair()
84{ 84{
85 return m_Root->Get_node_under(Normalization(),m_Rootmin,m_Rootmax,m_DasherOX,m_DasherOY); 85 return m_Root->Get_node_under(Normalization(),m_Rootmin,m_Rootmax,m_DasherOX,m_DasherOY);
86} 86}
87 87
88///////////////////////////////////////////////////////////////////////////// 88/////////////////////////////////////////////////////////////////////////////
89 89
90 90
91CDasherNode * CDasherModel::Get_node_under_mouse(myint Mousex,myint Mousey) 91CDasherNode * CDasherModel::Get_node_under_mouse(myint Mousex,myint Mousey)
92{ 92{
93 return m_Root->Get_node_under(Normalization(),m_Rootmin,m_Rootmax,Mousex,Mousey); 93 return m_Root->Get_node_under(Normalization(),m_Rootmin,m_Rootmax,Mousex,Mousey);
94} 94}
95 95
96///////////////////////////////////////////////////////////////////////////// 96/////////////////////////////////////////////////////////////////////////////
97 97
98 98
99void CDasherModel::Get_string_under_mouse(const myint Mousex,const myint Mousey, vector<symbol> &str) 99void CDasherModel::Get_string_under_mouse(const myint Mousex,const myint Mousey, vector<symbol> &str)
100{ 100{
101 m_Root->Get_string_under(Normalization(),m_Rootmin,m_Rootmax,Mousex,Mousey,str); 101 m_Root->Get_string_under(Normalization(),m_Rootmin,m_Rootmax,Mousex,Mousey,str);
102 return; 102 return;
103} 103}
104 104
105///////////////////////////////////////////////////////////////////////////// 105/////////////////////////////////////////////////////////////////////////////
106 106
107 107
108void CDasherModel::Flush(const myint Mousex,const myint Mousey) 108void CDasherModel::Flush(const myint ,const myint )
109{ 109{
110 vector<symbol> vtUnder; 110 vector<symbol> vtUnder;
111 Get_string_under_mouse(m_DasherOX,m_DasherOY,vtUnder); 111 Get_string_under_mouse(m_DasherOX,m_DasherOY,vtUnder);
112 unsigned int i; 112 unsigned int i;
113 for (i=0;i<vtUnder.size();i++) { 113 for (i=0;i<vtUnder.size();i++) {
114 if (vtUnder[i]==0) 114 if (vtUnder[i]==0)
115 continue; 115 continue;
116 m_editbox->flush(vtUnder[i]); 116 m_editbox->flush(vtUnder[i]);
117 } 117 }
118} 118}
119 119
120///////////////////////////////////////////////////////////////////////////// 120/////////////////////////////////////////////////////////////////////////////
121 121
122void CDasherModel::Update(CDasherNode *node,CDasherNode *under_mouse,int iSafe) 122void CDasherModel::Update(CDasherNode *node,CDasherNode *under_mouse,int iSafe)
123// go through the Dasher nodes, delete ones who have expired 123// go through the Dasher nodes, delete ones who have expired
124// decrease the time left for nodes which arent safe 124// decrease the time left for nodes which arent safe
125// safe nodes are those which are under the mouse or offspring of this node 125// safe nodes are those which are under the mouse or offspring of this node
126{ 126{
127 //if (node->pushme ) 127 //if (node->pushme )
128 // node->push_node(); 128 // node->push_node();
129 if (node==under_mouse) 129 if (node==under_mouse)
130 iSafe=1; 130 iSafe=1;
131 if (!iSafe) 131 if (!iSafe)
132 node->Age(); 132 node->Age();
133 //dchar debug[256]; 133 //dchar debug[256];
134 //wsprintf(debug,TEXT("node->Age %d %f\n"),node->Age, fr.framerate()); 134 //wsprintf(debug,TEXT("node->Age %d %f\n"),node->Age, fr.framerate());
135 //OutputDebugString(debug); 135 //OutputDebugString(debug);
136 136
137 137
138 if (node->Age() > Framerate()) 138 if (node->Age() > Framerate())
139 node->Kill(); 139 node->Kill();
140 140
141 141
142 if (node->Alive()) { 142 if (node->Alive()) {
143 CDasherNode **children=node->Children(); 143 CDasherNode **children=node->Children();
144 if (children) { 144 if (children) {
145 unsigned int i; 145 unsigned int i;
146 for (i=1;i<node->Chars();i++) 146 for (i=1;i<node->Chars();i++)
147 Update(children[i],under_mouse,iSafe); 147 Update(children[i],under_mouse,iSafe);
148 } 148 }
149 } 149 }
150 return; 150 return;
151} 151}
152 152
153///////////////////////////////////////////////////////////////////////////// 153/////////////////////////////////////////////////////////////////////////////
154 154
155void CDasherModel::Start() 155void CDasherModel::Start()
156{ 156{
157 m_Rootmin=0; 157 m_Rootmin=0;
158 m_Rootmax=m_DasherY; 158 m_Rootmax=m_DasherY;
159 159
160 delete m_Root; 160 delete m_Root;
161 CLanguageModel::CNodeContext* therootcontext=m_languagemodel->GetRootNodeContext(); 161 CLanguageModel::CNodeContext* therootcontext=m_languagemodel->GetRootNodeContext();
162 162
163 //Rootparent=new DasherNode(0,0,0,therootcontext,0,0,0,Normalization(),languagemodel); 163 //Rootparent=new DasherNode(0,0,0,therootcontext,0,0,0,Normalization(),languagemodel);
164 if (m_editbox) { 164 if (m_editbox) {
165 m_editbox->set_flushed(0); 165 m_editbox->set_flushed(0);
166 string ContextString; 166 string ContextString;
167 m_editbox->get_new_context(ContextString,5); 167 m_editbox->get_new_context(ContextString,5);
168 if (ContextString.size() != 0) { 168 if (ContextString.size() != 0) {
169 m_languagemodel->EnterText(therootcontext, ContextString); 169 m_languagemodel->EnterText(therootcontext, ContextString);
170 } 170 }
171 m_languagemodel->ReleaseNodeContext(LearnContext); 171 m_languagemodel->ReleaseNodeContext(LearnContext);
172 LearnContext = m_languagemodel->CloneNodeContext(therootcontext); 172 LearnContext = m_languagemodel->CloneNodeContext(therootcontext);
173 } 173 }
174 m_Root=new CDasherNode(0,0,0,0,Opts::Nodes1,0,Normalization(),m_languagemodel); 174 m_Root=new CDasherNode(0,0,0,0,Opts::Nodes1,0,Normalization(),m_languagemodel);
175 m_Root->Push_Node(therootcontext); 175 m_Root->Push_Node(therootcontext);
176 176
177 m_languagemodel->ReleaseNodeContext(therootcontext); 177 m_languagemodel->ReleaseNodeContext(therootcontext);
178 //ppmmodel->dump(); 178 //ppmmodel->dump();
179 //dump(); 179 //dump();
180 180
181} 181}
182 182
183///////////////////////////////////////////////////////////////////////////// 183/////////////////////////////////////////////////////////////////////////////
184 184
185void CDasherModel::Get_new_root_coords(myint Mousex,myint Mousey) 185void CDasherModel::Get_new_root_coords(myint Mousex,myint Mousey)
186{ 186{
187 int cappedrate=0; 187 // int cappedrate=0;
188 double dRx=1.0,dRxnew=1.0; 188 double dRx=1.0,dRxnew=1.0;
189 double dRxnew2; 189 double dRxnew2;
190 190
191 int iSteps=m_fr.Steps(); 191 int iSteps=m_fr.Steps();
192 192
193 if (Mousex<m_DasherOX) { 193 if (Mousex<m_DasherOX) {
194 //rx=1.0001*Ixmap[mx]/Ixmap[cx]; 194 //rx=1.0001*Ixmap[mx]/Ixmap[cx];
195 if (Mousex<=0) 195 if (Mousex<=0)
196 Mousex=1; 196 Mousex=1;
197 dRx=1.0*m_DasherOX/Mousex; 197 dRx=1.0*m_DasherOX/Mousex;
198 dRxnew=pow(dRx,1.0/iSteps); // or exp(log(rx)/steps) - i think the replacement is faster 198 dRxnew=pow(dRx,1.0/iSteps); // or exp(log(rx)/steps) - i think the replacement is faster
199 199
200 dRxnew2=1+(dRx-1)/iSteps; 200 dRxnew2=1+(dRx-1)/iSteps;
201 //+(rx-1)*(rx-1)*(1.0/fr.steps()-1.0)/2/fr.steps(); 201 //+(rx-1)*(rx-1)*(1.0/fr.steps()-1.0)/2/fr.steps();
202 202
203 203
204 const double dRxmax=m_fr.Rxmax(); 204 const double dRxmax=m_fr.Rxmax();
205 if (dRxnew>dRxmax) 205 if (dRxnew>dRxmax)
206 dRxnew=dRxmax; 206 dRxnew=dRxmax;
207 // cappedrate=1; 207 // cappedrate=1;
208 } else { 208 } else {
209 if (Mousex==m_DasherOX) 209 if (Mousex==m_DasherOX)
210 Mousex++; 210 Mousex++;
211 // OutputDebugString(TEXT("zoom out\n")); 211 // OutputDebugString(TEXT("zoom out\n"));
212 dRx=1.0001*m_DasherOX/Mousex; 212 dRx=1.0001*m_DasherOX/Mousex;
213 dRxnew=exp(log(dRx)/iSteps); 213 dRxnew=exp(log(dRx)/iSteps);
214 //get_coords(root->lbnd,root->hbnd,&x1,&y1,&y2); 214 //get_coords(root->lbnd,root->hbnd,&x1,&y1,&y2);
215 //if (x1>0 || y1>0 || y2<CanvasY) 215 //if (x1>0 || y1>0 || y2<CanvasY)
216 //go_back_a_char(); 216 //go_back_a_char();
217 if (m_Rootmax<m_DasherY && m_Rootmin>0) 217 if (m_Rootmax<m_DasherY && m_Rootmin>0)
218 return; 218 return;
219 } 219 }
220 //dchar debug[256]; 220 //dchar debug[256];
221 //_stprintf(debug,TEXT("rx %f rxnew %f approx %f\n"),rx,rxnew,rxnew2); 221 //_stprintf(debug,TEXT("rx %f rxnew %f approx %f\n"),rx,rxnew,rxnew2);
222 //OutputDebugString(debug); 222 //OutputDebugString(debug);
223 //wsprintf(debug,TEXT("rx %f rxnew %f\n"),rx,rxnew); 223 //wsprintf(debug,TEXT("rx %f rxnew %f\n"),rx,rxnew);
224 //OutputDebugString(debug); 224 //OutputDebugString(debug);
225 myint above=(Mousey-m_Rootmin);//*(1-rxnew)/(1-rx); 225 myint above=(Mousey-m_Rootmin);//*(1-rxnew)/(1-rx);
226 myint below=(m_Rootmax-Mousey);//*(1-rxnew)/(1-rx); 226 myint below=(m_Rootmax-Mousey);//*(1-rxnew)/(1-rx);
227 227
228 //wsprintf(debug,TEXT("above %I64d below %I64d \n"),above,below); 228 //wsprintf(debug,TEXT("above %I64d below %I64d \n"),above,below);
229 //OutputDebugString(debug); 229 //OutputDebugString(debug);
230 230
231 myint miDistance=m_DasherY/2-Mousey; 231 myint miDistance=m_DasherY/2-Mousey;
232 miDistance=myint(miDistance*(dRxnew-1)/(dRx-1)); 232 miDistance=myint(miDistance*(dRxnew-1)/(dRx-1));
233 myint miNewrootzoom=Mousey+miDistance; 233 myint miNewrootzoom=Mousey+miDistance;
234 234
235 myint newRootmax=miNewrootzoom+myint(below*dRxnew); 235 myint newRootmax=miNewrootzoom+myint(below*dRxnew);
236 myint newRootmin=miNewrootzoom-myint(above*dRxnew); 236 myint newRootmin=miNewrootzoom-myint(above*dRxnew);
237 if (newRootmin<m_DasherY/2 && newRootmax>m_DasherY/2 && newRootmax<LLONG_MAX && newRootmin>LLONG_MIN) { 237 if (newRootmin<m_DasherY/2 && newRootmax>m_DasherY/2 && newRootmax<LLONG_MAX && newRootmin>LLONG_MIN) {
238 m_Rootmax=newRootmax; 238 m_Rootmax=newRootmax;
239 m_Rootmin=newRootmin; 239 m_Rootmin=newRootmin;
240 } 240 }
241 241
242} 242}
243 243
244///////////////////////////////////////////////////////////////////////////// 244/////////////////////////////////////////////////////////////////////////////
245 245
246void CDasherModel::Tap_on_display(myint miMousex,myint miMousey, unsigned long Time) 246void CDasherModel::Tap_on_display(myint miMousex,myint miMousey, unsigned long )
247 // work out the next viewpoint, opens some new nodes 247 // work out the next viewpoint, opens some new nodes
248{ 248{
249 // works out next viewpoint 249 // works out next viewpoint
250 Get_new_root_coords(miMousex,miMousey); 250 Get_new_root_coords(miMousex,miMousey);
251 251
252 // opens up new nodes 252 // opens up new nodes
253 253
254 // push node under mouse 254 // push node under mouse
255 CDasherNode *under_mouse=Get_node_under_mouse(miMousex,miMousey); 255 CDasherNode *under_mouse=Get_node_under_mouse(miMousex,miMousey);
256 under_mouse->Push_Node(); 256 under_mouse->Push_Node();
257 257
258 258
259 if (Framerate() > 4) { 259 if (Framerate() > 4) {
260 // push node under mouse but with x coord on RHS 260 // push node under mouse but with x coord on RHS
261 CDasherNode *right=Get_node_under_mouse(50,miMousey); 261 CDasherNode *right=Get_node_under_mouse(50,miMousey);
262 right->Push_Node(); 262 right->Push_Node();
263 } 263 }
264 264
265 if (Framerate() > 8) { 265 if (Framerate() > 8) {
266 // push node under the crosshair 266 // push node under the crosshair
267 CDasherNode *under_cross=Get_node_under_crosshair(); 267 CDasherNode *under_cross=Get_node_under_crosshair();
268 under_cross->Push_Node(); 268 under_cross->Push_Node();
269 } 269 }
270 270
271 unsigned int iRandom; 271 unsigned int iRandom;
272#if defined(_WIN32_WCE) 272#if defined(_WIN32_WCE)
273 iRandom=Random(); 273 iRandom=Random();
274#else 274#else
275 iRandom=rand(); 275 iRandom=rand();
276#endif 276#endif
277 if (Framerate() > 8) { 277 if (Framerate() > 8) {
278 // add some noise and push another node 278 // add some noise and push another node
279 CDasherNode *right=Get_node_under_mouse(50,miMousey+iRandom%500-250); 279 CDasherNode *right=Get_node_under_mouse(50,miMousey+iRandom%500-250);
280 right->Push_Node(); 280 right->Push_Node();
281 } 281 }
282#if defined(_WIN32_WCE) 282#if defined(_WIN32_WCE)
283 iRandom=Random(); 283 iRandom=Random();
284#else 284#else
285 iRandom=rand(); 285 iRandom=rand();
286#endif 286#endif
287 if (Framerate() > 15) { 287 if (Framerate() > 15) {
288 // add some noise and push another node 288 // add some noise and push another node
289 CDasherNode *right=Get_node_under_mouse(50,miMousey+iRandom%500-250); 289 CDasherNode *right=Get_node_under_mouse(50,miMousey+iRandom%500-250);
290 right->Push_Node(); 290 right->Push_Node();
291 } 291 }
292 292
293 // only do this is Dasher is flying 293 // only do this is Dasher is flying
294 if (Framerate() > 30) { 294 if (Framerate() > 30) {
diff --git a/inputmethods/dasher/DasherNode.cpp b/inputmethods/dasher/DasherNode.cpp
index 26af10f..3a984ef 100644
--- a/inputmethods/dasher/DasherNode.cpp
+++ b/inputmethods/dasher/DasherNode.cpp
@@ -1,83 +1,83 @@
1// DasherNode.cpp 1// DasherNode.cpp
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2001-2002 David Ward 5// Copyright (c) 2001-2002 David Ward
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9#include "DasherNode.h" 9#include "DasherNode.h"
10using namespace Dasher; 10using namespace Dasher;
11using namespace Opts; 11using namespace Opts;
12using namespace std; 12using namespace std;
13 13
14///////////////////////////////////////////////////////////////////////////// 14/////////////////////////////////////////////////////////////////////////////
15 15
16void CDasherNode::Dump_node () const 16void CDasherNode::Dump_node () const
17 { 17 {
18 /* TODO sort out 18 /* TODO sort out
19 dchar out[256]; 19 dchar out[256];
20 if (m_Symbol) 20 if (m_Symbol)
21 wsprintf(out,TEXT("%7x %3c %7x %5d %7x %5d %8x %8x \n"),this,m_Symbol,m_iGroup,m_context,m_Children,m_Cscheme,m_iLbnd,m_iHbnd); 21 wsprintf(out,TEXT("%7x %3c %7x %5d %7x %5d %8x %8x \n"),this,m_Symbol,m_iGroup,m_context,m_Children,m_Cscheme,m_iLbnd,m_iHbnd);
22 else 22 else
23 wsprintf(out,TEXT("%7x %7x %5d %7x %5d %8x %8x \n"),this,m_iGroup,m_context,m_Children,m_Cscheme,m_iLbnd,m_iHbnd); 23 wsprintf(out,TEXT("%7x %7x %5d %7x %5d %8x %8x \n"),this,m_iGroup,m_context,m_Children,m_Cscheme,m_iLbnd,m_iHbnd);
24 24
25 OutputDebugString(out); 25 OutputDebugString(out);
26 26
27 if (m_Children) { 27 if (m_Children) {
28 unsigned int i; 28 unsigned int i;
29 for (i=1;i<m_iChars;i++) 29 for (i=1;i<m_iChars;i++)
30 m_Children[i]->Dump_node(); 30 m_Children[i]->Dump_node();
31 } 31 }
32 */ 32 */
33} 33}
34 34
35void CDasherNode::Generic_Push_Node(CLanguageModel::CNodeContext *context) { 35void CDasherNode::Generic_Push_Node(CLanguageModel::CNodeContext *) {
36 36
37 m_iAge=0; 37 m_iAge=0;
38 m_bAlive=true; 38 m_bAlive=true;
39 if (m_Symbol && !m_iChars) // make sure it's a valid symbol and don't enter if already done 39 if (m_Symbol && !m_iChars) // make sure it's a valid symbol and don't enter if already done
40 m_languagemodel->EnterNodeSymbol(m_context,m_Symbol); 40 m_languagemodel->EnterNodeSymbol(m_context,m_Symbol);
41 41
42 42
43 vector<symbol> newchars; // place to put this list of characters 43 vector<symbol> newchars; // place to put this list of characters
44 vector<unsigned int> cum,groups; // for the probability list 44 vector<unsigned int> cum,groups; // for the probability list
45 m_languagemodel->GetNodeProbs(m_context,newchars,groups,cum,0.003); 45 m_languagemodel->GetNodeProbs(m_context,newchars,groups,cum,0.003);
46 m_iChars=newchars.size(); 46 m_iChars=newchars.size();
47 // work out cumulative probs 47 // work out cumulative probs
48 unsigned int i; 48 unsigned int i;
49 for (i=1;i<m_iChars;i++) 49 for (i=1;i<m_iChars;i++)
50 cum[i]+=cum[i-1]; 50 cum[i]+=cum[i-1];
51 51
52 m_Children =new CDasherNode *[m_iChars]; 52 m_Children =new CDasherNode *[m_iChars];
53 53
54 // create the children 54 // create the children
55 ColorSchemes NormalScheme, SpecialScheme; 55 ColorSchemes NormalScheme, SpecialScheme;
56 if ((m_ColorScheme==Nodes1) || (m_ColorScheme==Special1)) { 56 if ((m_ColorScheme==Nodes1) || (m_ColorScheme==Special1)) {
57 NormalScheme = Nodes2; 57 NormalScheme = Nodes2;
58 SpecialScheme = Special2; 58 SpecialScheme = Special2;
59 } else { 59 } else {
60 NormalScheme = Nodes1; 60 NormalScheme = Nodes1;
61 SpecialScheme = Special1; 61 SpecialScheme = Special1;
62 } 62 }
63 63
64 ColorSchemes ChildScheme; 64 ColorSchemes ChildScheme;
65 for (i=1;i<m_iChars;i++) { 65 for (i=1;i<m_iChars;i++) {
66 if (newchars[i]==this->m_languagemodel->GetSpaceSymbol()) 66 if (newchars[i]==this->m_languagemodel->GetSpaceSymbol())
67 ChildScheme = SpecialScheme; 67 ChildScheme = SpecialScheme;
68 else 68 else
69 ChildScheme = NormalScheme; 69 ChildScheme = NormalScheme;
70 m_Children[i]=new CDasherNode(this,newchars[i],groups[i],i,ChildScheme,cum[i-1],cum[i],m_languagemodel,m_languagemodel->GetColour(i)); 70 m_Children[i]=new CDasherNode(this,newchars[i],groups[i],i,ChildScheme,cum[i-1],cum[i],m_languagemodel,m_languagemodel->GetColour(i));
71 } 71 }
72} 72}
73 73
74///////////////////////////////////////////////////////////////////////////// 74/////////////////////////////////////////////////////////////////////////////
75 75
76void CDasherNode::Push_Node(CLanguageModel::CNodeContext *context) 76void CDasherNode::Push_Node(CLanguageModel::CNodeContext *context)
77// push a node copying the specified context 77// push a node copying the specified context
78{ 78{
79 79
80 if (m_Children) { 80 if (m_Children) {
81 // if there are children just give them a poke 81 // if there are children just give them a poke
82 unsigned int i; 82 unsigned int i;
83 for (i=1;i<m_iChars;i++) { 83 for (i=1;i<m_iChars;i++) {
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
@@ -29,99 +29,113 @@ private:
29 Opts::ColorSchemes m_ColorScheme; 29 Opts::ColorSchemes m_ColorScheme;
30 int m_iPhase; // index for coloring 30 int m_iPhase; // index for coloring
31 int m_iColour; // for the advanced colour mode 31 int m_iColour; // for the advanced colour mode
32 32
33 const symbol m_Symbol; // the character to display 33 const symbol m_Symbol; // the character to display
34 CLanguageModel *m_languagemodel; // pointer to the language model - in future, could be different for each node 34 CLanguageModel *m_languagemodel; // pointer to the language model - in future, could be different for each node
35 CDasherNode **m_Children; // pointer to array of children 35 CDasherNode **m_Children; // pointer to array of children
36 CDasherNode *m_parent; // pointer to parent - only needed to grab parent context 36 CDasherNode *m_parent; // pointer to parent - only needed to grab parent context
37 CLanguageModel::CNodeContext *m_context; 37 CLanguageModel::CNodeContext *m_context;
38public: 38public:
39 39
40 CDasherNode(CDasherNode *parent,symbol Symbol, unsigned int igroup, int iphase, Opts::ColorSchemes ColorScheme,int ilbnd,int ihbnd,CLanguageModel *lm, int Colour); 40 CDasherNode(CDasherNode *parent,symbol Symbol, unsigned int igroup, int iphase, Opts::ColorSchemes ColorScheme,int ilbnd,int ihbnd,CLanguageModel *lm, int Colour);
41 ~CDasherNode(); 41 ~CDasherNode();
42 bool m_bForce; // flag to force a node to be drawn - shouldn't be public 42 bool m_bForce; // flag to force a node to be drawn - shouldn't be public
43 43
44 // return private data members - read only 44 // return private data members - read only
45 CDasherNode ** const Children() const {return m_Children;} 45 CDasherNode ** const Children() const {return m_Children;}
46 unsigned int Lbnd() const {return m_iLbnd;} 46 unsigned int Lbnd() const {return m_iLbnd;}
47 bool Alive() {return m_bAlive;} 47 bool Alive() {return m_bAlive;}
48 bool Control() {return m_bControlChild;} 48 bool Control() {return m_bControlChild;}
49 void Kill() {m_bAlive=0;m_iAge=0;} 49 void Kill() {m_bAlive=0;m_iAge=0;}
50 unsigned int Hbnd() const {return m_iHbnd;} 50 unsigned int Hbnd() const {return m_iHbnd;}
51 unsigned int Group() const {return m_iGroup;} 51 unsigned int Group() const {return m_iGroup;}
52 unsigned int Age() const {return m_iAge;} 52 unsigned int Age() const {return m_iAge;}
53 symbol Symbol() const {return m_Symbol;} 53 symbol Symbol() const {return m_Symbol;}
54 unsigned int Chars() const {return m_iChars;} 54 unsigned int Chars() const {return m_iChars;}
55 int Phase() const {return m_iPhase;} 55 int Phase() const {return m_iPhase;}
56 Opts::ColorSchemes Cscheme() const {return m_ColorScheme;} 56 Opts::ColorSchemes Cscheme() const {return m_ColorScheme;}
57 int Colour() const {return m_iColour;} 57 int Colour() const {return m_iColour;}
58 58
59 CDasherNode* const Get_node_under(int,myint y1,myint y2,myint smousex,myint smousey); // find node under given co-ords 59 CDasherNode* const Get_node_under(int,myint y1,myint y2,myint smousex,myint smousey); // find node under given co-ords
60 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 60 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
61 void Generic_Push_Node(CLanguageModel::CNodeContext *context); 61 void Generic_Push_Node(CLanguageModel::CNodeContext *context);
62 void Push_Node(); // give birth to children 62 void Push_Node(); // give birth to children
63 void Push_Node(CLanguageModel::CNodeContext *context); // give birth to children with this context 63 void Push_Node(CLanguageModel::CNodeContext *context); // give birth to children with this context
64 void Delete_children(); 64 void Delete_children();
65 void Dump_node() const; // diagnostic 65 void Dump_node() const; // diagnostic
66}; 66};
67 67
68///////////////////////////////////////////////////////////////////////////// 68/////////////////////////////////////////////////////////////////////////////
69// Inline functions 69// Inline functions
70///////////////////////////////////////////////////////////////////////////// 70/////////////////////////////////////////////////////////////////////////////
71 71
72using namespace Dasher; 72using namespace Dasher;
73using namespace Opts; 73using namespace Opts;
74 74
75///////////////////////////////////////////////////////////////////////////// 75/////////////////////////////////////////////////////////////////////////////
76 76
77inline CDasherNode::CDasherNode(CDasherNode *parent,symbol Symbol, unsigned int igroup, int iphase, ColorSchemes ColorScheme,int ilbnd,int ihbnd,CLanguageModel *lm, int Colour=0) 77inline CDasherNode::CDasherNode(CDasherNode *parent,symbol Symbol, unsigned int igroup, int iphase, ColorSchemes ColorScheme,int ilbnd,int ihbnd,CLanguageModel *lm, int Colour=0) :
78 : m_parent(parent),m_Symbol(Symbol),m_iGroup(igroup),m_iLbnd(ilbnd),m_iHbnd(ihbnd),m_languagemodel(lm),m_iPhase(iphase), 78 m_iLbnd(ilbnd),
79 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) 79 m_iHbnd(ihbnd),
80 m_iGroup(igroup),
81 m_iChars(0),
82 m_iAge(0),
83 m_bAlive(1),
84 m_bControlChild(false),
85 m_ColorScheme(ColorScheme),
86 m_iPhase(iphase),
87 m_iColour(Colour),
88 m_Symbol(Symbol),
89 m_languagemodel(lm),
90 m_Children(0),
91 m_parent(parent),
92 m_context(0),
93 m_bForce(false)
80{ 94{
81 /* 95 /*
82 switch (ColorScheme) { 96 switch (ColorScheme) {
83 case Nodes1: 97 case Nodes1:
84 m_ColorScheme = Nodes2; 98 m_ColorScheme = Nodes2;
85 break; 99 break;
86 case Nodes2: 100 case Nodes2:
87 m_ColorScheme = Nodes1; 101 m_ColorScheme = Nodes1;
88 break; 102 break;
89 case Special1: 103 case Special1:
90 m_ColorScheme = Special2; 104 m_ColorScheme = Special2;
91 break; 105 break;
92 case Special2: 106 case Special2:
93 m_ColorScheme = Special1; 107 m_ColorScheme = Special1;
94 break; 108 break;
95 case default: 109 case default:
96 m_ColorScheme = ColorScheme; 110 m_ColorScheme = ColorScheme;
97 break; 111 break;
98 } 112 }
99 */ 113 */
100} 114}
101 115
102///////////////////////////////////////////////////////////////////////////// 116/////////////////////////////////////////////////////////////////////////////
103 117
104inline void CDasherNode::Delete_children() 118inline void CDasherNode::Delete_children()
105{ 119{
106 if (m_Children) { 120 if (m_Children) {
107 unsigned int i; 121 unsigned int i;
108 for (i=1;i<m_iChars;i++) 122 for (i=1;i<m_iChars;i++)
109 delete m_Children[i]; 123 delete m_Children[i];
110 delete [] m_Children; 124 delete [] m_Children;
111 } 125 }
112 m_Children=0; 126 m_Children=0;
113 127
114} 128}
115 129
116///////////////////////////////////////////////////////////////////////////// 130/////////////////////////////////////////////////////////////////////////////
117 131
118inline CDasherNode::~CDasherNode() 132inline CDasherNode::~CDasherNode()
119{ 133{
120 Delete_children(); 134 Delete_children();
121 if (m_context) 135 if (m_context)
122 m_languagemodel->ReleaseNodeContext(m_context); 136 m_languagemodel->ReleaseNodeContext(m_context);
123} 137}
124 138
125///////////////////////////////////////////////////////////////////////////// 139/////////////////////////////////////////////////////////////////////////////
126 140
127#endif /* #ifndef __DasherNode_h__ */ 141#endif /* #ifndef __DasherNode_h__ */
diff --git a/inputmethods/dasher/DasherSettingsInterface.h b/inputmethods/dasher/DasherSettingsInterface.h
index 9d03eba..34b55d4 100644
--- a/inputmethods/dasher/DasherSettingsInterface.h
+++ b/inputmethods/dasher/DasherSettingsInterface.h
@@ -1,146 +1,146 @@
1// DasherSettingsInterface.h 1// DasherSettingsInterface.h
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2002 Iain Murray 5// Copyright (c) 2002 Iain Murray
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9 9
10#ifndef __DasherSettingsInterface_h__ 10#ifndef __DasherSettingsInterface_h__
11#define __DasherSettingsInterface_h__ 11#define __DasherSettingsInterface_h__
12 12
13#include "DasherTypes.h" 13#include "DasherTypes.h"
14#include "SettingsStore.h" 14#include "SettingsStore.h"
15 15
16namespace Dasher {class CDasherSettingsInterface;} 16namespace Dasher {class CDasherSettingsInterface;}
17class Dasher::CDasherSettingsInterface 17class Dasher::CDasherSettingsInterface
18{ 18{
19public: 19public:
20 void SettingsDefaults(CSettingsStore* Store); 20 void SettingsDefaults(CSettingsStore* Store);
21 21
22 // These actually affect the way Dasher works 22 // These actually affect the way Dasher works
23 //! Change the alphabet in use to NewAlphabetID 23 //! Change the alphabet in use to NewAlphabetID
24 virtual void ChangeAlphabet(const std::string& NewAlphabetID) {}; 24 virtual void ChangeAlphabet(const std::string& ) {};
25 25
26 //! Change the maximum bitrate (effectively the speed) of Dasher 26 //! Change the maximum bitrate (effectively the speed) of Dasher
27 virtual void ChangeMaxBitRate(double NewMaxBitRate) {}; 27 virtual void ChangeMaxBitRate(double ) {};
28 28
29 //! Generate a new langage model. Not usually needed 29 //! Generate a new langage model. Not usually needed
30 virtual void ChangeLanguageModel(unsigned int NewLanguageModelID) {}; 30 virtual void ChangeLanguageModel(unsigned int ) {};
31 31
32 //! Generate a new view of the model. Call it with 0 when starting up 32 //! Generate a new view of the model. Call it with 0 when starting up
33 virtual void ChangeView(unsigned int NewViewID) {}; 33 virtual void ChangeView(unsigned int ) {};
34 34
35 //! Change the orientation (l->r, r->l, so on) of the model 35 //! Change the orientation (l->r, r->l, so on) of the model
36 virtual void ChangeOrientation(Opts::ScreenOrientations Orientation) {}; 36 virtual void ChangeOrientation(Opts::ScreenOrientations ) {};
37 37
38 //! Set the file encoding of output files to Encoding 38 //! Set the file encoding of output files to Encoding
39 virtual void SetFileEncoding(Opts::FileEncodingFormats Encoding) {}; 39 virtual void SetFileEncoding(Opts::FileEncodingFormats ) {};
40 40
41 //! Inform the core that the screen has this size 41 //! Inform the core that the screen has this size
42 virtual void SetScreenSize(long Width, long Height) {}; 42 virtual void SetScreenSize(long , long ) {};
43 43
44 //! Set the size of the font used in the Dasher canvas 44 //! Set the size of the font used in the Dasher canvas
45 virtual void SetDasherFontSize(Dasher::Opts::FontSize fontsize) {}; 45 virtual void SetDasherFontSize(Dasher::Opts::FontSize ) {};
46 46
47 //! Set the number of dimensions of input (either 1 or 2) 47 //! Set the number of dimensions of input (either 1 or 2)
48 virtual void SetDasherDimensions(bool Value) {}; 48 virtual void SetDasherDimensions(bool ) {};
49 49
50 // These are recommended options for the Dasher GUI. {{{ They don't actually 50 // These are recommended options for the Dasher GUI. {{{ They don't actually
51 // change the way Dasher works. They are part of the Dasher interface 51 // change the way Dasher works. They are part of the Dasher interface
52 // anyway so that it can handle option saving for you, and to make it 52 // anyway so that it can handle option saving for you, and to make it
53 // easy for the Dasher engine to control the GUI later on. }}} 53 // easy for the Dasher engine to control the GUI later on. }}}
54 54
55 //! True if toolbar should be shown, false otherwise 55 //! True if toolbar should be shown, false otherwise
56 virtual void ShowToolbar(bool Value) {}; 56 virtual void ShowToolbar(bool ) {};
57 57
58 //! True if toolbar should show text, false otherwse 58 //! True if toolbar should show text, false otherwse
59 virtual void ShowToolbarText(bool Value) {}; 59 virtual void ShowToolbarText(bool ) {};
60 60
61 //! True if toolbar should have large icons, false otherwise 61 //! True if toolbar should have large icons, false otherwise
62 virtual void ShowToolbarLargeIcons(bool Value) {}; 62 virtual void ShowToolbarLargeIcons(bool ) {};
63 63
64 //! True if the speed slider should be shown, false otherwise 64 //! True if the speed slider should be shown, false otherwise
65 virtual void ShowSpeedSlider(bool Value) {}; 65 virtual void ShowSpeedSlider(bool ) {};
66 66
67 //! True if the window layout should be fixed, false otherwise 67 //! True if the window layout should be fixed, false otherwise
68 virtual void FixLayout(bool Value) {}; 68 virtual void FixLayout(bool ) {};
69 69
70 //! True if new files should be timestamped, false otherwise 70 //! True if new files should be timestamped, false otherwise
71 virtual void TimeStampNewFiles(bool Value) {}; 71 virtual void TimeStampNewFiles(bool ) {};
72 72
73 //! True if all text should be copied to clipboard when Dasher is stopped, false otherwise 73 //! True if all text should be copied to clipboard when Dasher is stopped, false otherwise
74 virtual void CopyAllOnStop(bool Value) {}; 74 virtual void CopyAllOnStop(bool ) {};
75 75
76 //! True if a box should be drawn to represent the logical position of the mouse 76 //! True if a box should be drawn to represent the logical position of the mouse
77 virtual void DrawMouse(bool Value) {}; 77 virtual void DrawMouse(bool ) {};
78 78
79 //! Set the editbox font 79 //! Set the editbox font
80 virtual void SetEditFont(std::string Name, long Size) {}; 80 virtual void SetEditFont(std::string , long ) {};
81 81
82 //! Set the canvas font 82 //! Set the canvas font
83 virtual void SetDasherFont(std::string Name) {}; 83 virtual void SetDasherFont(std::string ) {};
84 84
85 //! Set the height of the edit box 85 //! Set the height of the edit box
86 virtual void SetEditHeight(long Value) {}; 86 virtual void SetEditHeight(long ) {};
87 87
88 //! Should Dasher start and stop on space bar? 88 //! Should Dasher start and stop on space bar?
89 virtual void StartOnSpace(bool Value) {}; 89 virtual void StartOnSpace(bool ) {};
90 90
91 //! Should Dasher start and stop on left mouse button? 91 //! Should Dasher start and stop on left mouse button?
92 virtual void StartOnLeft(bool Value) {}; 92 virtual void StartOnLeft(bool ) {};
93 93
94 //! Should Dasher be keyboard controlled? 94 //! Should Dasher be keyboard controlled?
95 virtual void KeyControl(bool Value) {}; 95 virtual void KeyControl(bool ) {};
96 96
97 //! Should Dasher pause when the pointer leaves the window? 97 //! Should Dasher pause when the pointer leaves the window?
98 virtual void WindowPause(bool Value) {}; 98 virtual void WindowPause(bool ) {};
99}; 99};
100 100
101 101
102#include <string> 102#include <string>
103 103
104namespace Dasher 104namespace Dasher
105{ 105{
106namespace Keys 106namespace Keys
107{ 107{
108 // Standard Option strings. You are encouraged to use these constants. 108 // Standard Option strings. You are encouraged to use these constants.
109 // ------------------------------------------------------------------- 109 // -------------------------------------------------------------------
110 110
111 // bool options 111 // bool options
112 extern const std::string TIME_STAMP; 112 extern const std::string TIME_STAMP;
113 extern const std::string SHOW_TOOLBAR; 113 extern const std::string SHOW_TOOLBAR;
114 extern const std::string SHOW_TOOLBAR_TEXT; 114 extern const std::string SHOW_TOOLBAR_TEXT;
115 extern const std::string SHOW_LARGE_ICONS; 115 extern const std::string SHOW_LARGE_ICONS;
116 extern const std::string FIX_LAYOUT; 116 extern const std::string FIX_LAYOUT;
117 extern const std::string SHOW_SLIDER; 117 extern const std::string SHOW_SLIDER;
118 extern const std::string COPY_ALL_ON_STOP; 118 extern const std::string COPY_ALL_ON_STOP;
119 extern const std::string DRAW_MOUSE; 119 extern const std::string DRAW_MOUSE;
120 extern const std::string START_SPACE; 120 extern const std::string START_SPACE;
121 extern const std::string START_MOUSE; 121 extern const std::string START_MOUSE;
122 extern const std::string KEY_CONTROL; 122 extern const std::string KEY_CONTROL;
123 extern const std::string WINDOW_PAUSE; 123 extern const std::string WINDOW_PAUSE;
124 // long options 124 // long options
125 extern const std::string FILE_ENCODING; 125 extern const std::string FILE_ENCODING;
126 extern const std::string MAX_BITRATE_TIMES100; 126 extern const std::string MAX_BITRATE_TIMES100;
127 extern const std::string SCREEN_ORIENTATION; 127 extern const std::string SCREEN_ORIENTATION;
128 extern const std::string VIEW_ID; 128 extern const std::string VIEW_ID;
129 extern const std::string LANGUAGE_MODEL_ID; 129 extern const std::string LANGUAGE_MODEL_ID;
130 extern const std::string EDIT_FONT_SIZE; 130 extern const std::string EDIT_FONT_SIZE;
131 extern const std::string EDIT_HEIGHT; 131 extern const std::string EDIT_HEIGHT;
132 extern const std::string SCREEN_WIDTH; 132 extern const std::string SCREEN_WIDTH;
133 extern const std::string SCREEN_HEIGHT; 133 extern const std::string SCREEN_HEIGHT;
134 extern const std::string DASHER_FONTSIZE; 134 extern const std::string DASHER_FONTSIZE;
135 extern const std::string DASHER_DIMENSIONS; 135 extern const std::string DASHER_DIMENSIONS;
136 136
137 // string options 137 // string options
138 extern const std::string ALPHABET_ID; 138 extern const std::string ALPHABET_ID;
139 extern const std::string DASHER_FONT; 139 extern const std::string DASHER_FONT;
140 extern const std::string EDIT_FONT; 140 extern const std::string EDIT_FONT;
141} 141}
142} // namespace Dasher 142} // namespace Dasher
143 143
144 144
145#endif /* #ifndef __DasherSettingsInterface_h__ */ 145#endif /* #ifndef __DasherSettingsInterface_h__ */
146 146
diff --git a/inputmethods/dasher/DasherView.cpp b/inputmethods/dasher/DasherView.cpp
index 3b8cb64..8e32cf1 100644
--- a/inputmethods/dasher/DasherView.cpp
+++ b/inputmethods/dasher/DasherView.cpp
@@ -1,82 +1,82 @@
1// DasherView.cpp 1// DasherView.cpp
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2001-2002 David Ward 5// Copyright (c) 2001-2002 David Ward
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9#include "DasherView.h" 9#include "DasherView.h"
10using namespace Dasher; 10using namespace Dasher;
11 11
12 12
13CDasherView::CDasherView(CDasherScreen* DasherScreen, CDasherModel& DasherModel, Opts::ScreenOrientations Orientation) 13CDasherView::CDasherView(CDasherScreen* DasherScreen, CDasherModel& DasherModel, Opts::ScreenOrientations Orientation)
14 : m_Screen(DasherScreen), m_DasherModel(DasherModel), ScreenOrientation(Orientation), ColourMode(false) 14 : m_Screen(DasherScreen), m_DasherModel(DasherModel), ScreenOrientation(Orientation), ColourMode(false)
15{ 15{
16 //XYScale = (double)m_Screen->GetHeight() / m_Screen->GetWidth(); 16 //XYScale = (double)m_Screen->GetHeight() / m_Screen->GetWidth();
17} 17}
18 18
19 19
20void CDasherView::ChangeOrientation(Dasher::Opts::ScreenOrientations Orientation) 20void CDasherView::ChangeOrientation(Dasher::Opts::ScreenOrientations Orientation)
21{ 21{
22 ScreenOrientation = Orientation; 22 ScreenOrientation = Orientation;
23 Render(); 23 Render();
24} 24}
25 25
26 26
27void CDasherView::FlushAt(int mousex,int mousey) 27void CDasherView::FlushAt(int ,int )
28{ 28{
29 m_DasherModel.Flush(0,0); 29 m_DasherModel.Flush(0,0);
30} 30}
31 31
32int CDasherView::RecursiveRender(CDasherNode* Render, myint y1,myint y2,int mostleft, bool text) 32int CDasherView::RecursiveRender(CDasherNode* Render, myint y1,myint y2,int mostleft, bool text)
33{ 33{
34 symbol CurChar = Render->Symbol(); 34 // symbol CurChar = Render->Symbol();
35 int Color; 35 int Color;
36 36
37 if (ColourMode==true) { 37 if (ColourMode==true) {
38 Color = Render->Colour(); 38 Color = Render->Colour();
39 } else { 39 } else {
40 Color = Render->Phase()%3; 40 Color = Render->Phase()%3;
41 } 41 }
42 42
43 if (RenderNode(Render->Symbol(), Color, Render->Cscheme(), y1, y2, mostleft, Render->m_bForce, text)) 43 if (RenderNode(Render->Symbol(), Color, Render->Cscheme(), y1, y2, mostleft, Render->m_bForce, text))
44 RenderGroups(Render, y1, y2, text); 44 RenderGroups(Render, y1, y2, text);
45 else 45 else
46 Render->Kill(); 46 Render->Kill();
47 47
48 CDasherNode** const Children=Render->Children(); 48 CDasherNode** const Children=Render->Children();
49 if (!Children) 49 if (!Children)
50 return 0; 50 return 0;
51 int norm=DasherModel().Normalization(); 51 int norm=DasherModel().Normalization();
52 for (unsigned int i=1; i<Render->Chars(); i++) { 52 for (unsigned int i=1; i<Render->Chars(); i++) {
53 if (Children[i]->Alive()) { 53 if (Children[i]->Alive()) {
54 myint Range=y2-y1; 54 myint Range=y2-y1;
55 myint newy1=y1+(Range*Children[i]->Lbnd())/norm; 55 myint newy1=y1+(Range*Children[i]->Lbnd())/norm;
56 myint newy2=y1+(Range*Children[i]->Hbnd())/norm; 56 myint newy2=y1+(Range*Children[i]->Hbnd())/norm;
57 RecursiveRender(Children[i], newy1, newy2, mostleft, text); 57 RecursiveRender(Children[i], newy1, newy2, mostleft, text);
58 } 58 }
59 } 59 }
60 return 1; 60 return 1;
61 61
62 62
63} 63}
64 64
65 65
66void CDasherView::RenderGroups(CDasherNode* Render, myint y1, myint y2, bool text) 66void CDasherView::RenderGroups(CDasherNode* Render, myint y1, myint y2, bool text)
67{ 67{
68 CDasherNode** Children = Render->Children(); 68 CDasherNode** Children = Render->Children();
69 if (!Children) 69 if (!Children)
70 return; 70 return;
71 int current=0; 71 int current=0;
72 int lower=0; 72 int lower=0;
73 int upper=0; 73 int upper=0;
74 myint range=y2-y1; 74 myint range=y2-y1;
75 for (unsigned int i=1; i<Render->Chars(); i++) { 75 for (unsigned int i=1; i<Render->Chars(); i++) {
76 int g=Children[i]->Group(); 76 int g=Children[i]->Group();
77 if (g!=current) { 77 if (g!=current) {
78 lower=upper; 78 lower=upper;
79 upper=i; 79 upper=i;
80 80
81 if (current!=0) { 81 if (current!=0) {
82 myint lbnd=Children[lower]->Lbnd(); 82 myint lbnd=Children[lower]->Lbnd();
diff --git a/inputmethods/dasher/DasherView.h b/inputmethods/dasher/DasherView.h
index 81cc24e..6257c03 100644
--- a/inputmethods/dasher/DasherView.h
+++ b/inputmethods/dasher/DasherView.h
@@ -1,79 +1,79 @@
1// DasherView.h 1// DasherView.h
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 2001-2002 David Ward 5// Copyright (c) 2001-2002 David Ward
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9 9
10////////////////////////////////////////////////////////////////////// 10//////////////////////////////////////////////////////////////////////
11// DasherView.h: interface for the DasherView class. 11// DasherView.h: interface for the DasherView class.
12// Copyright 2002 David Ward 12// Copyright 2002 David Ward
13////////////////////////////////////////////////////////////////////// 13//////////////////////////////////////////////////////////////////////
14 14
15#ifndef __DasherView_h_ 15#ifndef __DasherView_h_
16#define __DasherView_h_ 16#define __DasherView_h_
17 17
18#include "MSVC_Unannoy.h" 18#include "MSVC_Unannoy.h"
19#include "DasherScreen.h" 19#include "DasherScreen.h"
20#include "DasherModel.h" 20#include "DasherModel.h"
21 21
22// CDasherView is an abstract view class 22// CDasherView is an abstract view class
23// The implentation must provide several functions - defined here as pure virtual functions 23// The implentation must provide several functions - defined here as pure virtual functions
24// See the CDasherViewSquare class for an example 24// See the CDasherViewSquare class for an example
25 25
26namespace Dasher {class CDasherView;} 26namespace Dasher {class CDasherView;}
27class Dasher::CDasherView 27class Dasher::CDasherView
28{ 28{
29public: 29public:
30 CDasherView(CDasherScreen* DasherScreen, CDasherModel& DasherModel, Dasher::Opts::ScreenOrientations Orientation=Dasher::Opts::LeftToRight); 30 CDasherView(CDasherScreen* DasherScreen, CDasherModel& DasherModel, Dasher::Opts::ScreenOrientations Orientation=Dasher::Opts::LeftToRight);
31 ~CDasherView() {} 31 virtual ~CDasherView() {}
32 32
33 void ChangeOrientation(Dasher::Opts::ScreenOrientations Orientation); 33 void ChangeOrientation(Dasher::Opts::ScreenOrientations Orientation);
34 34
35 // TODO Sort this out 35 // TODO Sort this out
36 void FlushAt(int mousex,int mousey); 36 void FlushAt(int mousex,int mousey);
37 37
38 // renders Dasher 38 // renders Dasher
39 inline void Render(); 39 inline void Render();
40 40
41 // translates the screen coordinates to Dasher coordinates and calls 41 // translates the screen coordinates to Dasher coordinates and calls
42 // dashermodel.TapOnDisplay 42 // dashermodel.TapOnDisplay
43 virtual void TapOnDisplay(int mousex, int mousey, unsigned long Time)=0; 43 virtual void TapOnDisplay(int mousex, int mousey, unsigned long Time)=0;
44 44
45 virtual void ChangeScreen(CDasherScreen* NewScreen) 45 virtual void ChangeScreen(CDasherScreen* NewScreen)
46 { 46 {
47 m_Screen=NewScreen; 47 m_Screen=NewScreen;
48 48
49 // DJW - removed floating point stuff 49 // DJW - removed floating point stuff
50 //XYScale = (double)m_Screen->GetHeight() / m_Screen->GetWidth(); 50 //XYScale = (double)m_Screen->GetHeight() / m_Screen->GetWidth();
51 } 51 }
52 52
53 virtual void DrawMouse(int mousex, int mousey)=0; 53 virtual void DrawMouse(int mousex, int mousey)=0;
54 virtual void DrawKeyboard()=0; 54 virtual void DrawKeyboard()=0;
55 55
56 // Return references to the model and the screen: 56 // Return references to the model and the screen:
57 CDasherModel& DasherModel() {return m_DasherModel;} 57 CDasherModel& DasherModel() {return m_DasherModel;}
58 CDasherScreen& Screen() {return *m_Screen;} 58 CDasherScreen& Screen() {return *m_Screen;}
59 59
60 void Display() {m_Screen->Display();} 60 void Display() {m_Screen->Display();}
61 61
62 // Toggle advanced colour mode 62 // Toggle advanced colour mode
63 void SetColourMode(bool colourmode) {ColourMode=colourmode;} 63 void SetColourMode(bool colourmode) {ColourMode=colourmode;}
64 64
65protected: 65protected:
66 // Orientation of Dasher Screen 66 // Orientation of Dasher Screen
67 inline void MapScreen(int* DrawX, int* DrawY); 67 inline void MapScreen(int* DrawX, int* DrawY);
68 inline void UnMapScreen(int* DrawX, int* DrawY); 68 inline void UnMapScreen(int* DrawX, int* DrawY);
69 69
70private: 70private:
71 CDasherScreen* m_Screen; // provides the graphics (text, lines, rectangles): 71 CDasherScreen* m_Screen; // provides the graphics (text, lines, rectangles):
72 CDasherModel& m_DasherModel; // Model view represents 72 CDasherModel& m_DasherModel; // Model view represents
73 73
74 // Pure virtuals to implement 74 // Pure virtuals to implement
75 virtual void Crosshair(myint sx)=0; // Tells m_Screen to draw a crosshair - or other static decoration 75 virtual void Crosshair(myint sx)=0; // Tells m_Screen to draw a crosshair - or other static decoration
76 virtual int RenderNode(const symbol Character, const int Color, Opts::ColorSchemes ColorScheme, 76 virtual int RenderNode(const symbol Character, const int Color, Opts::ColorSchemes ColorScheme,
77 myint y1, myint y2, int& mostleft, bool& force, bool text)=0; 77 myint y1, myint y2, int& mostleft, bool& force, bool text)=0;
78 78
79 // Responsible for all the Render_node calls 79 // Responsible for all the Render_node calls
diff --git a/inputmethods/dasher/PPMLanguageModel.cpp b/inputmethods/dasher/PPMLanguageModel.cpp
index b725a2b..137b07f 100644
--- a/inputmethods/dasher/PPMLanguageModel.cpp
+++ b/inputmethods/dasher/PPMLanguageModel.cpp
@@ -27,110 +27,110 @@ CPPMLanguageModel::CPPMnode *CPPMLanguageModel::CPPMnode::find_symbol(int sym)
27 while (found) { 27 while (found) {
28 if (found->symbol==sym) 28 if (found->symbol==sym)
29 return found; 29 return found;
30 found=found->next; 30 found=found->next;
31 } 31 }
32 return 0; 32 return 0;
33} 33}
34 34
35 35
36CPPMLanguageModel::CPPMnode * CPPMLanguageModel::CPPMnode::add_symbol_to_node(int sym,int *update) 36CPPMLanguageModel::CPPMnode * CPPMLanguageModel::CPPMnode::add_symbol_to_node(int sym,int *update)
37{ 37{
38 CPPMnode *born,*search; 38 CPPMnode *born,*search;
39 search=find_symbol(sym); 39 search=find_symbol(sym);
40 if (!search) { 40 if (!search) {
41 born = new CPPMnode(sym); 41 born = new CPPMnode(sym);
42 born->next=child; 42 born->next=child;
43 child=born; 43 child=born;
44 // node->count=1; 44 // node->count=1;
45 return born; 45 return born;
46 } else { 46 } else {
47 if (*update) { // perform update exclusions 47 if (*update) { // perform update exclusions
48 search->count++; 48 search->count++;
49 *update=0; 49 *update=0;
50 } 50 }
51 return search; 51 return search;
52 } 52 }
53 53
54} 54}
55 55
56 56
57///////////////////////////////////////////////////////////////////// 57/////////////////////////////////////////////////////////////////////
58// CPPMLanguageModel defs 58// CPPMLanguageModel defs
59///////////////////////////////////////////////////////////////////// 59/////////////////////////////////////////////////////////////////////
60 60
61CPPMLanguageModel::CPPMLanguageModel(CAlphabet *_alphabet,int _normalization) 61CPPMLanguageModel::CPPMLanguageModel(CAlphabet *_alphabet,int _normalization)
62 : CLanguageModel(_alphabet,_normalization) 62 : CLanguageModel(_alphabet,_normalization)
63{ 63{
64 root=new CPPMnode(-1); 64 root=new CPPMnode(-1);
65 m_rootcontext=new CPPMContext(root,0); 65 m_rootcontext=new CPPMContext(root,0);
66} 66}
67 67
68 68
69CPPMLanguageModel::~CPPMLanguageModel() 69CPPMLanguageModel::~CPPMLanguageModel()
70{ 70{
71 delete root; 71 delete root;
72} 72}
73 73
74 74
75bool CPPMLanguageModel::GetProbs(CContext *context,vector<unsigned int> &probs,double addprob) 75bool CPPMLanguageModel::GetProbs(CContext *context,vector<unsigned int> &probs,double )
76 // get the probability distribution at the context 76 // get the probability distribution at the context
77{ 77{
78 // seems like we have to have this hack for VC++ 78 // seems like we have to have this hack for VC++
79 CPPMContext *ppmcontext=static_cast<CPPMContext *> (context); 79 CPPMContext *ppmcontext=static_cast<CPPMContext *> (context);
80 80
81 81
82 int modelchars=GetNumberModelChars(); 82 int modelchars=GetNumberModelChars();
83 int norm=CLanguageModel::normalization(); 83 int norm=CLanguageModel::normalization();
84 probs.resize(modelchars); 84 probs.resize(modelchars);
85 CPPMnode *temp,*s; 85 CPPMnode *temp,*s;
86 int loop,total; 86 int loop,total;
87 int sym; 87 int sym;
88 ulong spent=0; 88 // ulong spent=0;
89 ulong size_of_slice; 89 ulong size_of_slice;
90 bool *exclusions=new bool [modelchars]; 90 bool *exclusions=new bool [modelchars];
91 ulong uniform=modelchars; 91 ulong uniform=modelchars;
92 ulong tospend=norm-uniform; 92 ulong tospend=norm-uniform;
93 temp=ppmcontext->head; 93 temp=ppmcontext->head;
94 for (loop=0; loop <modelchars; loop++) { /* set up the exclusions array */ 94 for (loop=0; loop <modelchars; loop++) { /* set up the exclusions array */
95 probs[loop]=0; 95 probs[loop]=0;
96 exclusions[loop]=0; 96 exclusions[loop]=0;
97 } 97 }
98 while (temp!=0) { 98 while (temp!=0) {
99 //Usprintf(debug,TEXT("tospend %u\n"),tospend); 99 //Usprintf(debug,TEXT("tospend %u\n"),tospend);
100 //DebugOutput(TEXT("round\n")); 100 //DebugOutput(TEXT("round\n"));
101 total=0; 101 total=0;
102 s=temp->child; 102 s=temp->child;
103 while (s) { 103 while (s) {
104 sym=s->symbol; 104 sym=s->symbol;
105 if (!exclusions[s->symbol]) 105 if (!exclusions[s->symbol])
106 total=total+s->count; 106 total=total+s->count;
107 s=s->next; 107 s=s->next;
108 } 108 }
109 if (total) { 109 if (total) {
110 //Usprintf(debug,TEXT"escape %u\n"),tospend* 110 //Usprintf(debug,TEXT"escape %u\n"),tospend*
111 size_of_slice=tospend; 111 size_of_slice=tospend;
112 s=temp->child; 112 s=temp->child;
113 while (s) { 113 while (s) {
114 if (!exclusions[s->symbol]) { 114 if (!exclusions[s->symbol]) {
115 exclusions[s->symbol]=1; 115 exclusions[s->symbol]=1;
116 ulong p=size_of_slice*(2*s->count-1)/2/ulong(total); 116 ulong p=size_of_slice*(2*s->count-1)/2/ulong(total);
117 probs[s->symbol]+=p; 117 probs[s->symbol]+=p;
118 tospend-=p; 118 tospend-=p;
119 } 119 }
120 // Usprintf(debug,TEXT("sym %u counts %d p %u tospend %u \n"),sym,s->count,p,tospend); 120 // Usprintf(debug,TEXT("sym %u counts %d p %u tospend %u \n"),sym,s->count,p,tospend);
121 // DebugOutput(debug); 121 // DebugOutput(debug);
122 s=s->next; 122 s=s->next;
123 } 123 }
124 } 124 }
125 temp = temp->vine; 125 temp = temp->vine;
126 } 126 }
127 //Usprintf(debug,TEXT("Norm %u tospend %u\n"),Norm,tospend); 127 //Usprintf(debug,TEXT("Norm %u tospend %u\n"),Norm,tospend);
128 //DebugOutput(debug); 128 //DebugOutput(debug);
129 129
130 size_of_slice=tospend; 130 size_of_slice=tospend;
131 int symbolsleft=0; 131 int symbolsleft=0;
132 for (sym=1;sym<modelchars;sym++) 132 for (sym=1;sym<modelchars;sym++)
133 if (!probs[sym]) 133 if (!probs[sym])
134 symbolsleft++; 134 symbolsleft++;
135 for (sym=1;sym<modelchars;sym++) 135 for (sym=1;sym<modelchars;sym++)
136 if (!probs[sym]) { 136 if (!probs[sym]) {
@@ -147,151 +147,151 @@ bool CPPMLanguageModel::GetProbs(CContext *context,vector<unsigned int> &probs,d
147 tospend-=p; 147 tospend-=p;
148 } 148 }
149 //Usprintf(debug,TEXT("finaltospend %u\n"),tospend); 149 //Usprintf(debug,TEXT("finaltospend %u\n"),tospend);
150 //DebugOutput(debug); 150 //DebugOutput(debug);
151 151
152 // free(exclusions); // !!! 152 // free(exclusions); // !!!
153 // !!! NB by IAM: p577 Stroustrup 3rd Edition: "Allocating an object using new and deleting it using free() is asking for trouble" 153 // !!! NB by IAM: p577 Stroustrup 3rd Edition: "Allocating an object using new and deleting it using free() is asking for trouble"
154 delete[] exclusions; 154 delete[] exclusions;
155 return true; 155 return true;
156} 156}
157 157
158 158
159void CPPMLanguageModel::AddSymbol(CPPMLanguageModel::CPPMContext &context,int symbol) 159void CPPMLanguageModel::AddSymbol(CPPMLanguageModel::CPPMContext &context,int symbol)
160 // add symbol to the context 160 // add symbol to the context
161 // creates new nodes, updates counts 161 // creates new nodes, updates counts
162 // and leaves 'context' at the new context 162 // and leaves 'context' at the new context
163{ 163{
164 // sanity check 164 // sanity check
165 if (symbol==0 || symbol>=GetNumberModelChars()) 165 if (symbol==0 || symbol>=GetNumberModelChars())
166 return; 166 return;
167 167
168 CPPMnode *vineptr,*temp; 168 CPPMnode *vineptr,*temp;
169 int updatecnt=1; 169 int updatecnt=1;
170 170
171 temp=context.head->vine; 171 temp=context.head->vine;
172 context.head=context.head->add_symbol_to_node(symbol,&updatecnt); 172 context.head=context.head->add_symbol_to_node(symbol,&updatecnt);
173 vineptr=context.head; 173 vineptr=context.head;
174 context.order++; 174 context.order++;
175 175
176 while (temp!=0) { 176 while (temp!=0) {
177 vineptr->vine=temp->add_symbol_to_node(symbol,&updatecnt); 177 vineptr->vine=temp->add_symbol_to_node(symbol,&updatecnt);
178 vineptr=vineptr->vine; 178 vineptr=vineptr->vine;
179 temp=temp->vine; 179 temp=temp->vine;
180 } 180 }
181 vineptr->vine=root; 181 vineptr->vine=root;
182 if (context.order>MAX_ORDER){ 182 if (context.order>MAX_ORDER){
183 context.head=context.head->vine; 183 context.head=context.head->vine;
184 context.order--; 184 context.order--;
185 } 185 }
186} 186}
187 187
188 188
189// update context with symbol 'Symbol' 189// update context with symbol 'Symbol'
190void CPPMLanguageModel::EnterSymbol(CContext* Context, modelchar Symbol) 190void CPPMLanguageModel::EnterSymbol(CContext* Context, modelchar Symbol)
191{ 191{
192 CPPMLanguageModel::CPPMContext& context = * static_cast<CPPMContext *> (Context); 192 CPPMLanguageModel::CPPMContext& context = * static_cast<CPPMContext *> (Context);
193 193
194 CPPMnode *find; 194 CPPMnode *find;
195 CPPMnode *temp=context.head; 195 // CPPMnode *temp=context.head;
196 196
197 while (context.head) { 197 while (context.head) {
198 find =context.head->find_symbol(Symbol); 198 find =context.head->find_symbol(Symbol);
199 if (find) { 199 if (find) {
200 context.order++; 200 context.order++;
201 context.head=find; 201 context.head=find;
202 //Usprintf(debug,TEXT("found context %x order %d\n"),head,order); 202 //Usprintf(debug,TEXT("found context %x order %d\n"),head,order);
203 //DebugOutput(debug); 203 //DebugOutput(debug);
204 return; 204 return;
205 } 205 }
206 context.order--; 206 context.order--;
207 context.head=context.head->vine; 207 context.head=context.head->vine;
208 } 208 }
209 209
210 if (context.head==0) { 210 if (context.head==0) {
211 context.head=root; 211 context.head=root;
212 context.order=0; 212 context.order=0;
213 } 213 }
214 214
215} 215}
216 216
217 217
218void CPPMLanguageModel::LearnSymbol(CContext* Context, modelchar Symbol) 218void CPPMLanguageModel::LearnSymbol(CContext* Context, modelchar Symbol)
219{ 219{
220 CPPMLanguageModel::CPPMContext& context = * static_cast<CPPMContext *> (Context); 220 CPPMLanguageModel::CPPMContext& context = * static_cast<CPPMContext *> (Context);
221 AddSymbol(context, Symbol); 221 AddSymbol(context, Symbol);
222} 222}
223 223
224 224
225void CPPMLanguageModel::dumpSymbol(int symbol) 225void CPPMLanguageModel::dumpSymbol(int symbol)
226{ 226{
227 if ((symbol <= 32) || (symbol >= 127)) 227 if ((symbol <= 32) || (symbol >= 127))
228 printf( "<%d>", symbol ); 228 printf( "<%d>", symbol );
229 else 229 else
230 printf( "%c", symbol ); 230 printf( "%c", symbol );
231} 231}
232 232
233 233
234void CPPMLanguageModel::dumpString( char *str, int pos, int len ) 234void CPPMLanguageModel::dumpString( char *str, int pos, int len )
235 // Dump the string STR starting at position POS 235 // Dump the string STR starting at position POS
236{ 236{
237 char cc; 237 char cc;
238 int p; 238 int p;
239 for (p = pos; p<pos+len; p++) { 239 for (p = pos; p<pos+len; p++) {
240 cc = str [p]; 240 cc = str [p];
241 if ((cc <= 31) || (cc >= 127)) 241 if ((cc <= 31) || (cc >= 127))
242 printf( "<%d>", cc ); 242 printf( "<%d>", cc );
243 else 243 else
244 printf( "%c", cc ); 244 printf( "%c", cc );
245 } 245 }
246} 246}
247 247
248 248
249void CPPMLanguageModel::dumpTrie( CPPMLanguageModel::CPPMnode *t, int d ) 249void CPPMLanguageModel::dumpTrie( CPPMLanguageModel::CPPMnode *, int )
250 // diagnostic display of the PPM trie from node t and deeper 250 // diagnostic display of the PPM trie from node t and deeper
251{ 251{
252//TODO 252//TODO
253/* 253/*
254 dchar debug[256]; 254 dchar debug[256];
255 int sym; 255 int sym;
256 CPPMnode *s; 256 CPPMnode *s;
257 Usprintf( debug,TEXT("%5d %7x "), d, t ); 257 Usprintf( debug,TEXT("%5d %7x "), d, t );
258 //TODO: Uncomment this when headers sort out 258 //TODO: Uncomment this when headers sort out
259 //DebugOutput(debug); 259 //DebugOutput(debug);
260 if (t < 0) // pointer to input 260 if (t < 0) // pointer to input
261 printf( " <" ); 261 printf( " <" );
262 else { 262 else {
263 Usprintf(debug,TEXT( " %3d %5d %7x %7x %7x <"), t->symbol,t->count, t->vine, t->child, t->next ); 263 Usprintf(debug,TEXT( " %3d %5d %7x %7x %7x <"), t->symbol,t->count, t->vine, t->child, t->next );
264 //TODO: Uncomment this when headers sort out 264 //TODO: Uncomment this when headers sort out
265 //DebugOutput(debug); 265 //DebugOutput(debug);
266 } 266 }
267 267
268 dumpString( dumpTrieStr, 0, d ); 268 dumpString( dumpTrieStr, 0, d );
269 Usprintf( debug,TEXT(">\n") ); 269 Usprintf( debug,TEXT(">\n") );
270 //TODO: Uncomment this when headers sort out 270 //TODO: Uncomment this when headers sort out
271 //DebugOutput(debug); 271 //DebugOutput(debug);
272 if (t != 0) { 272 if (t != 0) {
273 s = t->child; 273 s = t->child;
274 while (s != 0) { 274 while (s != 0) {
275 sym =s->symbol; 275 sym =s->symbol;
276 276
277 dumpTrieStr [d] = sym; 277 dumpTrieStr [d] = sym;
278 dumpTrie( s, d+1 ); 278 dumpTrie( s, d+1 );
279 s = s->next; 279 s = s->next;
280 } 280 }
281 } 281 }
282*/ 282*/
283} 283}
284 284
285 285
286void CPPMLanguageModel::dump() 286void CPPMLanguageModel::dump()
287 // diagnostic display of the whole PPM trie 287 // diagnostic display of the whole PPM trie
288{ 288{
289// TODO: 289// TODO:
290/* 290/*
291 dchar debug[256]; 291 dchar debug[256];
292 Usprintf(debug,TEXT( "Dump of Trie : \n" )); 292 Usprintf(debug,TEXT( "Dump of Trie : \n" ));
293 //TODO: Uncomment this when headers sort out 293 //TODO: Uncomment this when headers sort out
294 //DebugOutput(debug); 294 //DebugOutput(debug);
295 Usprintf(debug,TEXT( "---------------\n" )); 295 Usprintf(debug,TEXT( "---------------\n" ));
296 //TODO: Uncomment this when headers sort out 296 //TODO: Uncomment this when headers sort out
297 //DebugOutput(debug); 297 //DebugOutput(debug);
diff --git a/inputmethods/dasher/PPMLanguageModel.h b/inputmethods/dasher/PPMLanguageModel.h
index bd860b8..7025a0a 100644
--- a/inputmethods/dasher/PPMLanguageModel.h
+++ b/inputmethods/dasher/PPMLanguageModel.h
@@ -1,92 +1,93 @@
1// PPMLanguageModel.h 1// PPMLanguageModel.h
2// 2//
3///////////////////////////////////////////////////////////////////////////// 3/////////////////////////////////////////////////////////////////////////////
4// 4//
5// Copyright (c) 1999-2002 David Ward 5// Copyright (c) 1999-2002 David Ward
6// 6//
7///////////////////////////////////////////////////////////////////////////// 7/////////////////////////////////////////////////////////////////////////////
8 8
9#ifndef __PPMLanguageModel_h__ 9#ifndef __PPMLanguageModel_h__
10#define __PPMLanguageModel_h__ 10#define __PPMLanguageModel_h__
11 11
12#include "NoClones.h" 12#include "NoClones.h"
13#include "MSVC_Unannoy.h" 13#include "MSVC_Unannoy.h"
14#include <vector> 14#include <vector>
15#include <stdio.h> 15#include <stdio.h>
16 16
17#include "LanguageModel.h" 17#include "LanguageModel.h"
18 18
19static char dumpTrieStr[40000]; 19// static char dumpTrieStr[40000];
20const int MAX_ORDER = 5; 20const int MAX_ORDER = 5;
21const int maxcont =200; 21const int maxcont =200;
22 22
23namespace Dasher {class CPPMLanguageModel;} 23namespace Dasher {class CPPMLanguageModel;}
24class Dasher::CPPMLanguageModel : public Dasher::CLanguageModel, private NoClones 24class Dasher::CPPMLanguageModel : public Dasher::CLanguageModel, private NoClones
25{ 25{
26public: 26public:
27 CPPMLanguageModel(CAlphabet *_alphabet, int _normalization); 27 CPPMLanguageModel(CAlphabet *_alphabet, int _normalization);
28 ~CPPMLanguageModel(); 28 virtual ~CPPMLanguageModel();
29 29
30 class CPPMnode { 30 class CPPMnode {
31 public: 31 public:
32 CPPMnode* find_symbol(int sym); 32 CPPMnode* find_symbol(int sym);
33 CPPMnode* add_symbol_to_node(int sym,int *update); 33 CPPMnode* add_symbol_to_node(int sym,int *update);
34 CPPMnode* child; 34 CPPMnode* child;
35 CPPMnode* next; 35 CPPMnode* next;
36 CPPMnode* vine; 36 CPPMnode* vine;
37 short int count; 37 short int count;
38 const short int symbol; 38 const short int symbol;
39 CPPMnode(int sym); 39 CPPMnode(int sym);
40 }; 40 };
41 41
42 class CPPMContext : public CContext { 42 class CPPMContext : public CContext {
43 public: 43 public:
44 CPPMContext(CPPMContext const &input) {head = input.head;order= input.order;} 44 CPPMContext(CPPMContext const &input) : CContext(input)
45 { head = input.head;order= input.order;}
45 CPPMContext(CPPMnode* _head=0, int _order=0) : head(_head),order(_order) {}; 46 CPPMContext(CPPMnode* _head=0, int _order=0) : head(_head),order(_order) {};
46 ~CPPMContext() {}; 47 ~CPPMContext() {};
47 void dump(); 48 void dump();
48 CPPMnode* head; 49 CPPMnode* head;
49 int order; 50 int order;
50 }; 51 };
51 52
52 void ReleaseContext(CContext*); 53 void ReleaseContext(CContext*);
53 CContext* GetRootContext(); 54 CContext* GetRootContext();
54 inline CContext* CloneContext(CContext*); 55 inline CContext* CloneContext(CContext*);
55 void EnterSymbol(CContext* context, modelchar Symbol); 56 void EnterSymbol(CContext* context, modelchar Symbol);
56 //inline bool GetProbs(CContext*,std::vector<symbol> &newchars,std::vector<unsigned int> &groups,std::vector<unsigned int> &probs,double addprob); 57 //inline bool GetProbs(CContext*,std::vector<symbol> &newchars,std::vector<unsigned int> &groups,std::vector<unsigned int> &probs,double addprob);
57 bool GetProbs(CContext*, std::vector<unsigned int> &Probs, double AddProb); 58 bool GetProbs(CContext*, std::vector<unsigned int> &Probs, double AddProb);
58 59
59 void LearnSymbol(CContext* Context, modelchar Symbol); 60 void LearnSymbol(CContext* Context, modelchar Symbol);
60 void dump(); 61 void dump();
61 62
62private: 63private:
63 CPPMContext *m_rootcontext; 64 CPPMContext *m_rootcontext;
64 CPPMnode *root; 65 CPPMnode *root;
65 void AddSymbol(CPPMContext& context,int symbol); 66 void AddSymbol(CPPMContext& context,int symbol);
66 void dumpSymbol(int symbol); 67 void dumpSymbol(int symbol);
67 void dumpString( char *str, int pos, int len ); 68 void dumpString( char *str, int pos, int len );
68 void dumpTrie( CPPMnode *t, int d ); 69 void dumpTrie( CPPMnode *t, int d );
69 70
70 71
71 72
72}; 73};
73 74
74//////////////////////////////////////////////////////////////////////// 75////////////////////////////////////////////////////////////////////////
75// Inline functions 76// Inline functions
76//////////////////////////////////////////////////////////////////////// 77////////////////////////////////////////////////////////////////////////
77 78
78//////////////////////////////////////////////////////////////////////// 79////////////////////////////////////////////////////////////////////////
79 80
80inline CPPMLanguageModel::CPPMnode::CPPMnode(int sym) : symbol(sym) 81inline CPPMLanguageModel::CPPMnode::CPPMnode(int sym) : symbol(sym)
81{ 82{
82 child=next=vine=0; 83 child=next=vine=0;
83 count=1; 84 count=1;
84} 85}
85 86
86/////////////////////////////////////////////////////////////////// 87///////////////////////////////////////////////////////////////////
87 88
88inline void CPPMLanguageModel::CPPMContext::dump() 89inline void CPPMLanguageModel::CPPMContext::dump()
89 // diagnostic output 90 // diagnostic output
90{ 91{
91 // TODO uncomment this when headers sorted out 92 // TODO uncomment this when headers sorted out
92 //dchar debug[128]; 93 //dchar debug[128];
diff --git a/inputmethods/dasher/QtDasherImpl.cc b/inputmethods/dasher/QtDasherImpl.cc
index d72f6d9..f4a70dd 100644
--- a/inputmethods/dasher/QtDasherImpl.cc
+++ b/inputmethods/dasher/QtDasherImpl.cc
@@ -1,72 +1,72 @@
1#include <iostream> 1#include <iostream>
2#include <qapplication.h> 2#include <qapplication.h>
3#include <qobject.h> 3#include <qobject.h>
4#include <qpixmap.h> 4#include <qpixmap.h>
5#include "DasherInterface.h" 5#include "DasherInterface.h"
6#include "QtDasherScreen.h" 6#include "QtDasherScreen.h"
7#include "QtDasherImpl.h" 7#include "QtDasherImpl.h"
8 8
9/* XPM */ 9/* XPM */
10static const char * qtdasher_xpm[]={ 10static const char * qtdasher_xpm[]={
11"28 7 2 1", 11"28 7 2 1",
12"# c #303030", 12"# c #303030",
13" c None", 13" c None",
14" ########################## ", 14" ########################## ",
15" ", 15" ",
16" # # ", 16" # # ",
17" # # # # ", 17" # # # # ",
18" # # # # ", 18" # # # # ",
19" # # # ", 19" # # # ",
20" ########################## "}; 20" ########################## "};
21 21
22 22
23QtDasherImpl::QtDasherImpl() 23QtDasherImpl::QtDasherImpl()
24 : qtdasherwidget(0), icn(0), qtdasherinterface(0) 24 : qtdasherinterface(0), qtdasherwidget(0), icn(0)
25{ 25{
26} 26}
27 27
28QtDasherImpl::~QtDasherImpl() 28QtDasherImpl::~QtDasherImpl()
29{ 29{
30 delete qtdasherwidget; 30 delete qtdasherwidget;
31 delete icn; 31 delete icn;
32} 32}
33 33
34QWidget *QtDasherImpl::inputMethod( QWidget *parent, Qt::WFlags f ) 34QWidget *QtDasherImpl::inputMethod( QWidget *parent, Qt::WFlags f )
35{ 35{
36 if ( !qtdasherwidget ) { 36 if ( !qtdasherwidget ) {
37 qtdasherwidget = new QtDasherPlugin( parent, "Dasher", f ); 37 qtdasherwidget = new QtDasherPlugin( parent, "Dasher", f );
38 } 38 }
39 return qtdasherwidget; 39 return qtdasherwidget;
40} 40}
41 41
42void QtDasherImpl::resetState() 42void QtDasherImpl::resetState()
43{ 43{
44 if ( qtdasherwidget ) 44 if ( qtdasherwidget )
45 qtdasherwidget->resetState(); 45 qtdasherwidget->resetState();
46} 46}
47 47
48QPixmap *QtDasherImpl::icon() 48QPixmap *QtDasherImpl::icon()
49{ 49{
50 if ( !icn ) 50 if ( !icn )
51 icn = new QPixmap( (const char **)qtdasher_xpm ); 51 icn = new QPixmap( (const char **)qtdasher_xpm );
52 return icn; 52 return icn;
53} 53}
54 54
55QString QtDasherImpl::name() 55QString QtDasherImpl::name()
56{ 56{
57 return qApp->translate( "InputMethods", "Dasher" ); 57 return qApp->translate( "InputMethods", "Dasher" );
58} 58}
59 59
60void QtDasherImpl::onKeyPress( QObject *receiver, const char *slot ) 60void QtDasherImpl::onKeyPress( QObject *receiver, const char *slot )
61{ 61{
62 if ( qtdasherwidget ) 62 if ( qtdasherwidget )
63 QObject::connect( qtdasherwidget, SIGNAL(key(ushort,ushort,ushort,bool,bool)), receiver, slot ); 63 QObject::connect( qtdasherwidget, SIGNAL(key(ushort,ushort,ushort,bool,bool)), receiver, slot );
64} 64}
65 65
66#ifndef QT_NO_COMPONENT 66#ifndef QT_NO_COMPONENT
67QRESULT QtDasherImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ) 67QRESULT QtDasherImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface )
68{ 68{
69 *iface = 0; 69 *iface = 0;
70 if ( uuid == IID_QUnknown ) 70 if ( uuid == IID_QUnknown )
71 *iface = this; 71 *iface = this;
72 else if ( uuid == IID_InputMethod ) 72 else if ( uuid == IID_InputMethod )
diff --git a/inputmethods/dasher/QtDasherPlugin.cc b/inputmethods/dasher/QtDasherPlugin.cc
index cf4fc2c..f491769 100644
--- a/inputmethods/dasher/QtDasherPlugin.cc
+++ b/inputmethods/dasher/QtDasherPlugin.cc
@@ -4,76 +4,76 @@
4 4
5#include <qpainter.h> 5#include <qpainter.h>
6#include <qlist.h> 6#include <qlist.h>
7#include <qbitmap.h> 7#include <qbitmap.h>
8#include <qlayout.h> 8#include <qlayout.h>
9#include <qvbox.h> 9#include <qvbox.h>
10#include <qdialog.h> 10#include <qdialog.h>
11#include <qscrollview.h> 11#include <qscrollview.h>
12#include <qpopupmenu.h> 12#include <qpopupmenu.h>
13#include <qhbuttongroup.h> 13#include <qhbuttongroup.h>
14#include <qpushbutton.h> 14#include <qpushbutton.h>
15#include <qmessagebox.h> 15#include <qmessagebox.h>
16#include <qwindowsystem_qws.h> 16#include <qwindowsystem_qws.h>
17 17
18QtDasherPlugin::QtDasherPlugin(QWidget* parent, const char* name, WFlags f) : QFrame(parent,name,f) 18QtDasherPlugin::QtDasherPlugin(QWidget* parent, const char* name, WFlags f) : QFrame(parent,name,f)
19{ 19{
20 (new QHBoxLayout(this))->setAutoAdd(TRUE); 20 (new QHBoxLayout(this))->setAutoAdd(TRUE);
21 interface = new CDasherInterface; 21 interface = new CDasherInterface;
22 interface->SetSystemLocation("/opt/QtPalmtop/share/dasher/"); 22 interface->SetSystemLocation("/opt/QtPalmtop/share/dasher/");
23 interface->Unpause(0); 23 interface->Unpause(0);
24 interface->Start(); 24 interface->Start();
25 d = new QtDasherScreen(240,100,interface,this,this); 25 d = new QtDasherScreen(240,100,interface,this,this);
26 interface->ChangeMaxBitRate(2.5); 26 interface->ChangeMaxBitRate(2.5);
27 d->show(); 27 d->show();
28 utf8_codec = new QUtf8Codec; 28 utf8_codec = new QUtf8Codec;
29} 29}
30 30
31QSize QtDasherPlugin::sizeHint() const 31QSize QtDasherPlugin::sizeHint() const
32{ 32{
33 return QSize(240,100); 33 return QSize(240,100);
34} 34}
35 35
36QtDasherPlugin::~QtDasherPlugin() 36QtDasherPlugin::~QtDasherPlugin()
37{ 37{
38 delete d; 38 delete d;
39} 39}
40 40
41void QtDasherPlugin::resetState() 41void QtDasherPlugin::resetState()
42{ 42{
43 flushcount=0; 43 flushcount=0;
44 interface->Start(); 44 interface->Start();
45 interface->Redraw(); 45 interface->Redraw();
46} 46}
47 47
48void QtDasherPlugin::unflush() 48void QtDasherPlugin::unflush()
49{ 49{
50 if (flushcount==0) 50 if (flushcount==0)
51 return; 51 return;
52 for (flushcount; flushcount>0; flushcount--) { 52 for (; flushcount>0; flushcount--) {
53 deletetext(); 53 deletetext();
54 } 54 }
55} 55}
56 56
57void QtDasherPlugin::output(int Symbol) 57void QtDasherPlugin::output(int Symbol)
58{ 58{
59 std::string label = interface->GetEditText(Symbol); 59 std::string label = interface->GetEditText(Symbol);
60 QString unicodestring = utf8_codec->toUnicode(label.c_str()); 60 QString unicodestring = utf8_codec->toUnicode(label.c_str());
61 for (int i=0; i<int(unicodestring.length()); i++) { 61 for (int i=0; i<int(unicodestring.length()); i++) {
62 emit key( unicodestring[i].unicode(), 0, 0, true, false ); 62 emit key( unicodestring[i].unicode(), 0, 0, true, false );
63 emit key( unicodestring[i].unicode(), 0, 0, false, false ); 63 emit key( unicodestring[i].unicode(), 0, 0, false, false );
64 } 64 }
65} 65}
66 66
67void QtDasherPlugin::deletetext() 67void QtDasherPlugin::deletetext()
68{ 68{
69 emit key( 0, Qt::Key_Backspace, 0, true, false); 69 emit key( 0, Qt::Key_Backspace, 0, true, false);
70 emit key( 0, Qt::Key_Backspace, 0, false, false); 70 emit key( 0, Qt::Key_Backspace, 0, false, false);
71} 71}
72 72
73void QtDasherPlugin::flush(int Symbol) 73void QtDasherPlugin::flush(int Symbol)
74{ 74{
75 if (Symbol==0) 75 if (Symbol==0)
76 return; 76 return;
77 output(Symbol); 77 output(Symbol);
78 flushcount++; 78 flushcount++;
79} 79}
diff --git a/inputmethods/dasher/QtDasherPlugin.h b/inputmethods/dasher/QtDasherPlugin.h
index 5f70acf..c979a2f 100644
--- a/inputmethods/dasher/QtDasherPlugin.h
+++ b/inputmethods/dasher/QtDasherPlugin.h
@@ -1,42 +1,42 @@
1#include <qutfcodec.h> 1#include <qutfcodec.h>
2#include <qframe.h> 2#include <qframe.h>
3#include "QtDasherScreen.h" 3#include "QtDasherScreen.h"
4#include "DasherInterface.h" 4#include "DasherInterface.h"
5#include "DashEdit.h" 5#include "DashEdit.h"
6 6
7class QtDasherPlugin : public QFrame, public CDashEditbox 7class QtDasherPlugin : public QFrame, public CDashEditbox
8{ 8{
9 Q_OBJECT 9 Q_OBJECT
10public: 10public:
11 QtDasherPlugin(QWidget* parent=0, const char* name=0, WFlags f=0); 11 QtDasherPlugin(QWidget* parent=0, const char* name=0, WFlags f=0);
12 ~QtDasherPlugin(); 12 ~QtDasherPlugin();
13 13
14 void resetState(); 14 void resetState();
15 QSize sizeHint() const; 15 QSize sizeHint() const;
16 16
17 void write_to_file() {}; 17 void write_to_file() {};
18 void get_new_context(std::string&, int) {}; 18 void get_new_context(std::string&, int) {};
19 void unflush(); 19 void unflush();
20 void output(int); 20 void output(int);
21 void deletetext(); 21 void deletetext();
22 void flush(int); 22 void flush(int);
23 void Clear() {}; 23 void Clear() {};
24 void SetEncoding(Dasher::Opts::FileEncodingFormats) {}; 24 void SetEncoding(Dasher::Opts::FileEncodingFormats) {};
25 void SetFont(std::string Name, long Size) {}; 25 void SetFont(std::string , long ) {};
26 26
27 signals: 27 signals:
28 void key( ushort, ushort, ushort, bool, bool); 28 void key( ushort, ushort, ushort, bool, bool);
29 29
30 private: 30 private:
31 QtDasherScreen *d; 31 QtDasherScreen *d;
32 CDasherInterface *interface; 32 CDasherInterface *interface;
33 int flushcount; 33 int flushcount;
34 QUtf8Codec *utf8_codec; 34 QUtf8Codec *utf8_codec;
35}; 35};
36 36
37 37
38 38
39 39
40 40
41 41
42 42
diff --git a/inputmethods/dasher/QtDasherScreen.cc b/inputmethods/dasher/QtDasherScreen.cc
index 747b705..2179cfb 100644
--- a/inputmethods/dasher/QtDasherScreen.cc
+++ b/inputmethods/dasher/QtDasherScreen.cc
@@ -1,83 +1,88 @@
1// QtDasherScreen.cc 1// QtDasherScreen.cc
2// (c) 2003 Yann Dirson 2// (c) 2003 Yann Dirson
3// Derived from GtkDasherCanvas.cc 3// Derived from GtkDasherCanvas.cc
4// (c) 2002 Philip Cowans 4// (c) 2002 Philip Cowans
5 5
6#include <iostream> 6#include <iostream>
7#include <string> 7#include <string>
8 8
9#include <qpointarray.h> 9#include <qpointarray.h>
10#include <qpoint.h> 10#include <qpoint.h>
11 11
12#include "QtDasherScreen.h" 12#include "QtDasherScreen.h"
13#include "DasherScreen.h" 13#include "DasherScreen.h"
14#include "SettingsStore.h" 14#include "SettingsStore.h"
15 15
16#define MAXFONTSIZE 25 16#define MAXFONTSIZE 25
17#define MINFONTSIZE 8 17#define MINFONTSIZE 8
18 18
19QtDasherScreen::QtDasherScreen (int _width, int _height, 19QtDasherScreen::QtDasherScreen (int _width, int _height,
20 CDasherInterface *_interface, 20 CDasherInterface *_interface,
21 QWidget * _parent, Dasher::CDashEditbox *edit): 21 QWidget * _parent,
22 QWidget(_parent), interface( _interface ), 22 Dasher::CDashEditbox *_edit):
23 fontname( "fixed" ), fontsize(12), 23 QWidget(_parent),
24 Dasher::CDasherScreen(_width, _height) 24 Dasher::CDasherScreen(_width, _height),
25 fontsize(12),
26 interface( _interface ),
27 fontname( "fixed" )
25{ 28{
26 font = QFont (fontname.c_str(), fontsize); 29 font = QFont (fontname.c_str(), fontsize);
27 painter = new QPainter (); 30 painter = new QPainter ();
28 31
29 pixmap = new QPixmap (_width, _height); 32 pixmap = new QPixmap (_width, _height);
30 pixmap->setOptimization(QPixmap::BestOptim); 33 pixmap->setOptimization(QPixmap::BestOptim);
31 interface->SetSettingsStore(new CSettingsStore); 34 interface->SetSettingsStore(new CSettingsStore);
32 35
33 interface->ChangeLanguageModel(0); 36 interface->ChangeLanguageModel(0);
34 interface->ChangeView(0); 37 interface->ChangeView(0);
35 interface->ChangeEdit(edit); 38 interface->ChangeEdit(_edit);
39 edit = _edit;
40
36 41
37/* interface->GetFontSizes(&FontSizes); 42/* interface->GetFontSizes(&FontSizes);
38 43
39 for (int i=0; i<FontSizes.size(); i++) { 44 for (int i=0; i<FontSizes.size(); i++) {
40 if (FontSizes[i]>Fonts.size()) 45 if (FontSizes[i]>Fonts.size())
41 Fonts.resize((FontSizes[i])+1); 46 Fonts.resize((FontSizes[i])+1);
42 Fonts[FontSizes[i]]= QFont (fontname.c_str(), FontSizes[i]); 47 Fonts[FontSizes[i]]= QFont (fontname.c_str(), FontSizes[i]);
43// Fonts[FontSizes[i]].setPixelSize(FontSizes[i]); 48// Fonts[FontSizes[i]].setPixelSize(FontSizes[i]);
44 } 49 }
45*/ 50*/
46 interface->ChangeScreen(this); 51 interface->ChangeScreen(this);
47 52
48 paused=true; 53 paused=true;
49 54
50 QTimer *tmr = new QTimer(this); 55 QTimer *tmr = new QTimer(this);
51 connect (tmr, SIGNAL(timeout()), SLOT(timer())); 56 connect (tmr, SIGNAL(timeout()), SLOT(timer()));
52 tmr->start(200); 57 tmr->start(200);
53 58
54} 59}
55 60
56long QtDasherScreen::get_time() 61long QtDasherScreen::get_time()
57{ 62{
58 long s_now; 63 long s_now;
59 long ms_now; 64 long ms_now;
60 65
61 struct timeval tv; 66 struct timeval tv;
62 struct timezone tz; 67 struct timezone tz;
63 68
64 gettimeofday( &tv, &tz ); 69 gettimeofday( &tv, &tz );
65 70
66 s_now = tv.tv_sec-1054487600; 71 s_now = tv.tv_sec-1054487600;
67 72
68 ms_now = tv.tv_usec / 1000; 73 ms_now = tv.tv_usec / 1000;
69 74
70 return( long(s_now*1000 + ms_now) ); 75 return( long(s_now*1000 + ms_now) );
71 76
72} 77}
73 78
74QtDasherScreen::~QtDasherScreen() 79QtDasherScreen::~QtDasherScreen()
75{ 80{
76 delete painter; 81 delete painter;
77 delete interface; 82 delete interface;
78 delete edit; 83 delete edit;
79} 84}
80 85
81QColor QtDasherScreen::getColor(int Color, const Opts::ColorSchemes ColorScheme) const 86QColor QtDasherScreen::getColor(int Color, const Opts::ColorSchemes ColorScheme) const
82{ 87{
83 switch (ColorScheme) { 88 switch (ColorScheme) {
@@ -98,80 +103,80 @@ QColor QtDasherScreen::getColor(int Color, const Opts::ColorSchemes ColorScheme)
98 case Dasher::Opts::Special1: return QColor (240, 240, 240); 103 case Dasher::Opts::Special1: return QColor (240, 240, 240);
99 case Dasher::Opts::Special2: return QColor (255, 255, 255); 104 case Dasher::Opts::Special2: return QColor (255, 255, 255);
100 case Dasher::Opts::Groups: 105 case Dasher::Opts::Groups:
101 switch (Color) { 106 switch (Color) {
102 case 0: return QColor (255, 255, 0); 107 case 0: return QColor (255, 255, 0);
103 case 1: return QColor (255, 100, 100); 108 case 1: return QColor (255, 100, 100);
104 case 2: return QColor (0, 255, 0); 109 case 2: return QColor (0, 255, 0);
105 default: abort (); 110 default: abort ();
106 } 111 }
107 case Dasher::Opts::Objects: return QColor (0, 0, 0); 112 case Dasher::Opts::Objects: return QColor (0, 0, 0);
108 default: abort(); 113 default: abort();
109 } 114 }
110} 115}
111 116
112void QtDasherScreen::DrawRectangle(int x1, int y1, int x2, int y2, 117void QtDasherScreen::DrawRectangle(int x1, int y1, int x2, int y2,
113 int Color, Opts::ColorSchemes ColorScheme) const 118 int Color, Opts::ColorSchemes ColorScheme) const
114{ 119{
115 painter->setBrush (getColor (Color, ColorScheme)); 120 painter->setBrush (getColor (Color, ColorScheme));
116 painter->drawRect (x1, y1, x2-x1, y2-y1); 121 painter->drawRect (x1, y1, x2-x1, y2-y1);
117} 122}
118 123
119static void Points_to_QPointArray(const Dasher::CDasherScreen::point* const points, 124static void Points_to_QPointArray(const Dasher::CDasherScreen::point* const points,
120 int number, 125 int number,
121 QPointArray &qpa) 126 QPointArray &qpa)
122{ 127{
123 for (int i = 0; i < number; i++) { 128 for (int i = 0; i < number; i++) {
124 qpa.setPoint (i, points[i].x, points[i].y); 129 qpa.setPoint (i, points[i].x, points[i].y);
125 } 130 }
126} 131}
127 132
128void QtDasherScreen::Polyline(point* Points, int Number) const 133void QtDasherScreen::Polyline(point* Points, int Number) const
129{ 134{
130 QPointArray qpa(Number); 135 QPointArray qpa(Number);
131 Points_to_QPointArray (Points, Number, qpa); 136 Points_to_QPointArray (Points, Number, qpa);
132 painter->setPen (SolidLine); 137 painter->setPen (SolidLine);
133 painter->drawPolyline (qpa); 138 painter->drawPolyline (qpa);
134 painter->setPen (NoPen); 139 painter->setPen (NoPen);
135} 140}
136 141
137void QtDasherScreen::DrawPolygon(point* Points, int Number, int Color, 142void QtDasherScreen::DrawPolygon(point* Points, int Number, int Color,
138 Opts::ColorSchemes ColorScheme) const 143 Opts::ColorSchemes ColorScheme) const
139{ 144{
140 painter->setBrush (getColor (Color, ColorScheme)); 145 painter->setBrush (getColor (Color, ColorScheme));
141 QPointArray qpa(Number); 146 QPointArray qpa(Number);
142 Points_to_QPointArray (Points, Number, qpa); 147 Points_to_QPointArray (Points, Number, qpa);
143 painter->drawPolygon (qpa); 148 painter->drawPolygon (qpa);
144} 149}
145 150
146void QtDasherScreen::mousePressEvent (QMouseEvent *e) 151void QtDasherScreen::mousePressEvent (QMouseEvent *)
147{ 152{
148 paused=false; 153 paused=false;
149 interface->Unpause(get_time()); 154 interface->Unpause(get_time());
150} 155}
151 156
152void QtDasherScreen::mouseReleaseEvent(QMouseEvent *e) 157void QtDasherScreen::mouseReleaseEvent(QMouseEvent *e)
153{ 158{
154 QPoint p = e->pos(); 159 QPoint p = e->pos();
155 interface->PauseAt(p.x(), p.y()); 160 interface->PauseAt(p.x(), p.y());
156 paused=true; 161 paused=true;
157} 162}
158 163
159void QtDasherScreen::timer() 164void QtDasherScreen::timer()
160{ 165{
161 if (paused==false) { 166 if (paused==false) {
162 QPoint cursorpos; 167 QPoint cursorpos;
163 cursorpos=this->cursor().pos(); 168 cursorpos=this->cursor().pos();
164 cursorpos=mapFromGlobal(cursorpos); 169 cursorpos=mapFromGlobal(cursorpos);
165 170
166 interface->TapOn(cursorpos.x(), cursorpos.y(), get_time()); 171 interface->TapOn(cursorpos.x(), cursorpos.y(), get_time());
167 } 172 }
168} 173}
169 174
170 175
171 176
172 177
173 178
174 179
175 180
176 181
177 182
diff --git a/inputmethods/dasher/QtDasherScreen.h b/inputmethods/dasher/QtDasherScreen.h
index 06689d6..d3d67cb 100644
--- a/inputmethods/dasher/QtDasherScreen.h
+++ b/inputmethods/dasher/QtDasherScreen.h
@@ -1,97 +1,97 @@
1// QtDasherScreen.h 1// QtDasherScreen.h
2// (c) 2003 Yann Dirson 2// (c) 2003 Yann Dirson
3// Derived from GtkDasherCanvas.h 3// Derived from GtkDasherCanvas.h
4// (c) 2002 Philip Cowans 4// (c) 2002 Philip Cowans
5 5
6#ifndef QT_DASHER_SCREEN_H 6#ifndef QT_DASHER_SCREEN_H
7#define QT_DASHER_SCREEN_H 7#define QT_DASHER_SCREEN_H
8 8
9#include <string> 9#include <string>
10#include <sys/time.h> 10#include <sys/time.h>
11 11
12#include <qwidget.h> 12#include <qwidget.h>
13#include <qpainter.h> 13#include <qpainter.h>
14#include <qfont.h> 14#include <qfont.h>
15#include <qstring.h> 15#include <qstring.h>
16#include <qpixmap.h> 16#include <qpixmap.h>
17#include <qtimer.h> 17#include <qtimer.h>
18#include <qcursor.h> 18#include <qcursor.h>
19 19
20#include "DasherScreen.h" 20#include "DasherScreen.h"
21#include "DashEdit.h" 21#include "DashEdit.h"
22#include "DasherInterface.h" 22#include "DasherInterface.h"
23 23
24using namespace Dasher; 24using namespace Dasher;
25 25
26class QtDasherScreen : public QWidget, public Dasher::CDasherScreen 26class QtDasherScreen : public QWidget, public Dasher::CDasherScreen
27 27
28{ 28{
29 Q_OBJECT 29 Q_OBJECT
30 public: 30 public:
31 QtDasherScreen (int _width, int _height, 31 QtDasherScreen (int _width, int _height,
32 CDasherInterface *_interface, 32 CDasherInterface *_interface,
33 QWidget * _parent=0, Dasher::CDashEditbox* edit=0); 33 QWidget * _parent=0, Dasher::CDashEditbox* edit=0);
34 QtDasherScreen::~QtDasherScreen(); 34 QtDasherScreen::~QtDasherScreen();
35 35
36 void SetFont(std::string Name) 36 void SetFont(std::string Name)
37 { fontname = Name; /* set_the_font(); */ } 37 { fontname = Name; /* set_the_font(); */ }
38 38
39 void SetFontSize(Dasher::Opts::FontSize fontsize) 39 void SetFontSize(Dasher::Opts::FontSize )
40 { 40 {
41#warning QtDasherScreen::SetFontSize() not implemented 41#warning QtDasherScreen::SetFontSize() not implemented
42 } 42 }
43 Dasher::Opts::FontSize GetFontSize() 43 Dasher::Opts::FontSize GetFontSize()
44 { 44 {
45#warning QtDasherScreen::GetFontSize() not implemented 45#warning QtDasherScreen::GetFontSize() not implemented
46 return (Dasher::Opts::Normal); 46 return (Dasher::Opts::Normal);
47 } 47 }
48 48
49 void TextSize(symbol Character, int* Width, int* Height, int Size) const 49 void TextSize(symbol , int* Width, int* Height, int ) const
50 { 50 {
51 // should probably use QPainter::boundingRect() 51 // should probably use QPainter::boundingRect()
52 *Width = *Height = font.pixelSize(); 52 *Width = *Height = font.pixelSize();
53 53
54 } 54 }
55 void DrawText(symbol Character, int x1, int y1, int Size) const 55 void DrawText(symbol Character, int x1, int y1, int Size) const
56 { 56 {
57 // QFont font = QFont (fontname.c_str(), Size); 57 // QFont font = QFont (fontname.c_str(), Size);
58 // font.setPixelSize(Size); 58 // font.setPixelSize(Size);
59 QPoint point = QPoint(x1, y1+Size/2); 59 QPoint point = QPoint(x1, y1+Size/2);
60 60
61 painter->setFont (font); 61 painter->setFont (font);
62 painter->drawText (point, 62 painter->drawText (point,
63 QString(interface->GetDisplayText(Character).c_str())); 63 QString(interface->GetDisplayText(Character).c_str()));
64 } 64 }
65 65
66 void DrawRectangle(int x1, int y1, int x2, int y2, 66 void DrawRectangle(int x1, int y1, int x2, int y2,
67 int Color, Opts::ColorSchemes ColorScheme) const; 67 int Color, Opts::ColorSchemes ColorScheme) const;
68 void Polyline(point* Points, int Number) const; 68 void Polyline(point* Points, int Number) const;
69 void DrawPolygon(point* Points, int Number, int Color, 69 void DrawPolygon(point* Points, int Number, int Color,
70 Opts::ColorSchemes ColorScheme) const; 70 Opts::ColorSchemes ColorScheme) const;
71 71
72 std::vector<int> FontSizes; 72 std::vector<int> FontSizes;
73 std::vector<QFont> Fonts; 73 std::vector<QFont> Fonts;
74 QFont font; 74 QFont font;
75 int fontsize; 75 int fontsize;
76 void Blank() const { 76 void Blank() const {
77 painter->begin(pixmap); 77 painter->begin(pixmap);
78 painter->setPen (NoPen); 78 painter->setPen (NoPen);
79 painter->fillRect(0, 0, m_iWidth, m_iHeight, 79 painter->fillRect(0, 0, m_iWidth, m_iHeight,
80 QColor(255,255,255)); 80 QColor(255,255,255));
81 } 81 }
82 void Display() { 82 void Display() {
83 painter->end(); 83 painter->end();
84 repaint(); 84 repaint();
85 } 85 }
86 86
87 void paintEvent( QPaintEvent * ) 87 void paintEvent( QPaintEvent * )
88 { 88 {
89 bitBlt(this, 0, 0, pixmap); 89 bitBlt(this, 0, 0, pixmap);
90 } 90 }
91 91
92 void mousePressEvent (QMouseEvent *e); 92 void mousePressEvent (QMouseEvent *e);
93 void mouseReleaseEvent (QMouseEvent *e); 93 void mouseReleaseEvent (QMouseEvent *e);
94 94
95 protected: 95 protected:
96 QColor getColor(int Color, const Opts::ColorSchemes ColorScheme) const; 96 QColor getColor(int Color, const Opts::ColorSchemes ColorScheme) const;
97 97
diff --git a/inputmethods/dasher/SettingsStore.cpp b/inputmethods/dasher/SettingsStore.cpp
index c5bbfea..f7661bd 100644
--- a/inputmethods/dasher/SettingsStore.cpp
+++ b/inputmethods/dasher/SettingsStore.cpp
@@ -57,79 +57,79 @@ void CSettingsStore::SetBoolOption(const string& Key, bool Value)
57 BoolMap[Key] = Value; 57 BoolMap[Key] = Value;
58 SaveSetting(Key, Value); 58 SaveSetting(Key, Value);
59} 59}
60 60
61 61
62void CSettingsStore::SetLongOption(const string& Key, long Value) 62void CSettingsStore::SetLongOption(const string& Key, long Value)
63{ 63{
64 LongMap[Key] = Value; 64 LongMap[Key] = Value;
65 SaveSetting(Key, Value); 65 SaveSetting(Key, Value);
66} 66}
67 67
68 68
69void CSettingsStore::SetStringOption(const string& Key, const string& Value) 69void CSettingsStore::SetStringOption(const string& Key, const string& Value)
70{ 70{
71 StringMap[Key] = Value; 71 StringMap[Key] = Value;
72 SaveSetting(Key, Value); 72 SaveSetting(Key, Value);
73} 73}
74 74
75 75
76void CSettingsStore::SetBoolDefault(const string& Key, bool Value) 76void CSettingsStore::SetBoolDefault(const string& Key, bool Value)
77{ 77{
78 bool TmpValue; 78 bool TmpValue;
79 if ( (BoolMap.find(Key)==BoolMap.end()) && (!LoadSetting(Key, &TmpValue)) ) 79 if ( (BoolMap.find(Key)==BoolMap.end()) && (!LoadSetting(Key, &TmpValue)) )
80 SetBoolOption(Key, Value); 80 SetBoolOption(Key, Value);
81} 81}
82 82
83 83
84void CSettingsStore::SetLongDefault(const string& Key, long Value) 84void CSettingsStore::SetLongDefault(const string& Key, long Value)
85{ 85{
86 long TmpValue; 86 long TmpValue;
87 if ( (LongMap.find(Key)==LongMap.end()) && (!LoadSetting(Key, &TmpValue)) ) 87 if ( (LongMap.find(Key)==LongMap.end()) && (!LoadSetting(Key, &TmpValue)) )
88 SetLongOption(Key, Value); 88 SetLongOption(Key, Value);
89} 89}
90 90
91 91
92void CSettingsStore::SetStringDefault(const string& Key, const string& Value) 92void CSettingsStore::SetStringDefault(const string& Key, const string& Value)
93{ 93{
94 string TmpValue; 94 string TmpValue;
95 if ( (StringMap.find(Key)==StringMap.end()) && (!LoadSetting(Key, &TmpValue)) ) 95 if ( (StringMap.find(Key)==StringMap.end()) && (!LoadSetting(Key, &TmpValue)) )
96 SetStringOption(Key, Value); 96 SetStringOption(Key, Value);
97} 97}
98 98
99 99
100/* Private functions -- Settings are not saved between sessions unless these 100/* Private functions -- Settings are not saved between sessions unless these
101functions are over-ridden. 101functions are over-ridden.
102--------------------------------------------------------------------------*/ 102--------------------------------------------------------------------------*/
103 103
104 104
105bool CSettingsStore::LoadSetting(const string& Key, bool* Value) 105bool CSettingsStore::LoadSetting(const string& , bool* )
106{ 106{
107 return false; 107 return false;
108} 108}
109 109
110 110
111bool CSettingsStore::LoadSetting(const string& Key, long* Value) 111bool CSettingsStore::LoadSetting(const string& , long* )
112{ 112{
113 return false; 113 return false;
114} 114}
115 115
116 116
117bool CSettingsStore::LoadSetting(const string& Key, string* Value) 117bool CSettingsStore::LoadSetting(const string& , string* )
118{ 118{
119 return false; 119 return false;
120} 120}
121 121
122 122
123void CSettingsStore::SaveSetting(const string& Key, bool Value) 123void CSettingsStore::SaveSetting(const string& , bool )
124{ 124{
125} 125}
126 126
127 127
128void CSettingsStore::SaveSetting(const string& Key, long Value) 128void CSettingsStore::SaveSetting(const string& , long )
129{ 129{
130} 130}
131 131
132 132
133void CSettingsStore::SaveSetting(const string& Key, const string& Value) 133void CSettingsStore::SaveSetting(const string& , const string& )
134{ 134{
135} 135}