summaryrefslogtreecommitdiff
path: root/noncore
authorllornkcor <llornkcor>2002-12-20 01:35:01 (UTC)
committer llornkcor <llornkcor>2002-12-20 01:35:01 (UTC)
commit876e1a4724a7bd75dc642e295de354241096e028 (patch) (unidiff)
treea37c5dcc9d78e04bb6b859ab89d8cf81e6745087 /noncore
parent5fd6636ba3d94b48dd543887316c47c5388a43c2 (diff)
downloadopie-876e1a4724a7bd75dc642e295de354241096e028.zip
opie-876e1a4724a7bd75dc642e295de354241096e028.tar.gz
opie-876e1a4724a7bd75dc642e295de354241096e028.tar.bz2
update - sorry it took so long. hope this works correctly
Diffstat (limited to 'noncore') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/Aportis.cpp2
-rw-r--r--noncore/apps/opie-reader/Aportis.h10
-rw-r--r--noncore/apps/opie-reader/Bkmks.cpp310
-rw-r--r--noncore/apps/opie-reader/Bkmks.h37
-rw-r--r--noncore/apps/opie-reader/BuffDoc.cpp248
-rw-r--r--noncore/apps/opie-reader/BuffDoc.h30
-rw-r--r--noncore/apps/opie-reader/CBuffer.cpp4
-rw-r--r--noncore/apps/opie-reader/CDrawBuffer.cpp264
-rw-r--r--noncore/apps/opie-reader/CDrawBuffer.h27
-rw-r--r--noncore/apps/opie-reader/CExpander.h87
-rw-r--r--noncore/apps/opie-reader/CFilter.cpp127
-rw-r--r--noncore/apps/opie-reader/CFilter.h18
-rw-r--r--noncore/apps/opie-reader/Filedata.h51
-rw-r--r--noncore/apps/opie-reader/FontControl.cpp37
-rw-r--r--noncore/apps/opie-reader/FontControl.h47
-rw-r--r--noncore/apps/opie-reader/GraphicWin.h65
-rw-r--r--noncore/apps/opie-reader/Navigation.cpp98
-rw-r--r--noncore/apps/opie-reader/Navigation.h16
-rw-r--r--noncore/apps/opie-reader/Palm2QImage.cpp290
-rw-r--r--noncore/apps/opie-reader/Palm2QImage.h7
-rw-r--r--noncore/apps/opie-reader/QTReader.cpp540
-rw-r--r--noncore/apps/opie-reader/QTReader.h56
-rw-r--r--noncore/apps/opie-reader/QTReaderApp.cpp1693
-rw-r--r--noncore/apps/opie-reader/QTReaderApp.h50
-rw-r--r--noncore/apps/opie-reader/StateData.h32
-rw-r--r--noncore/apps/opie-reader/StyleConsts.cpp99
-rw-r--r--noncore/apps/opie-reader/StyleConsts.h192
-rw-r--r--noncore/apps/opie-reader/Text.h28
-rw-r--r--noncore/apps/opie-reader/ZText.h35
-rw-r--r--noncore/apps/opie-reader/cbkmkselector.h4
-rw-r--r--noncore/apps/opie-reader/config.h4
-rw-r--r--noncore/apps/opie-reader/fileBrowser.cpp3
-rw-r--r--noncore/apps/opie-reader/infowin.cpp5
-rw-r--r--noncore/apps/opie-reader/main.cpp6
-rw-r--r--noncore/apps/opie-reader/name.h8
-rw-r--r--noncore/apps/opie-reader/opie-reader.pro129
-rw-r--r--noncore/apps/opie-reader/opie.h6
-rw-r--r--noncore/apps/opie-reader/pdb.cpp12
-rw-r--r--noncore/apps/opie-reader/plucker.cpp1280
-rw-r--r--noncore/apps/opie-reader/plucker.h73
-rw-r--r--noncore/apps/opie-reader/ppm_expander.cpp2
-rw-r--r--noncore/apps/opie-reader/ppm_expander.h12
-rw-r--r--noncore/apps/opie-reader/ustring.h12
-rw-r--r--noncore/apps/opie-reader/version.h2
-rw-r--r--noncore/apps/opie-reader/ztxt.cpp2
-rw-r--r--noncore/apps/opie-reader/ztxt.h42
46 files changed, 4580 insertions, 1522 deletions
diff --git a/noncore/apps/opie-reader/Aportis.cpp b/noncore/apps/opie-reader/Aportis.cpp
index 1327ff8..b4988da 100644
--- a/noncore/apps/opie-reader/Aportis.cpp
+++ b/noncore/apps/opie-reader/Aportis.cpp
@@ -90,7 +90,7 @@ CList<Bkmk>* Aportis::getbkmklist()
90 return t; 90 return t;
91} 91}
92 92
93int Aportis::openfile(const char *src) 93int Aportis::OpenFile(const char *src)
94{ 94{
95 // printf("In openfile\n"); 95 // printf("In openfile\n");
96 int ret = 0; 96 int ret = 0;
diff --git a/noncore/apps/opie-reader/Aportis.h b/noncore/apps/opie-reader/Aportis.h
index 1ca5e73..af1fd3b 100644
--- a/noncore/apps/opie-reader/Aportis.h
+++ b/noncore/apps/opie-reader/Aportis.h
@@ -75,6 +75,14 @@ class Aportis : public CExpander, Cpdb {
75 unsigned char circbuf[2048]; 75 unsigned char circbuf[2048];
76 char bCompressed; 76 char bCompressed;
77public: 77public:
78 virtual void suspend()
79 {
80 CExpander::suspend(fin);
81 }
82 virtual void unsuspend()
83 {
84 CExpander::unsuspend(fin);
85 }
78 virtual void sizes(unsigned long& _file, unsigned long& _text) 86 virtual void sizes(unsigned long& _file, unsigned long& _text)
79 { 87 {
80 _file = dwLen; 88 _file = dwLen;
@@ -83,7 +91,7 @@ public:
83 virtual bool hasrandomaccess() { return true; } 91 virtual bool hasrandomaccess() { return true; }
84 virtual ~Aportis() {} 92 virtual ~Aportis() {}
85 Aportis(); 93 Aportis();
86 virtual int openfile(const char *src); 94 virtual int OpenFile(const char *src);
87 virtual int getch(); 95 virtual int getch();
88 virtual unsigned int locate(); 96 virtual unsigned int locate();
89 virtual void locate(unsigned int n); 97 virtual void locate(unsigned int n);
diff --git a/noncore/apps/opie-reader/Bkmks.cpp b/noncore/apps/opie-reader/Bkmks.cpp
index 30d2881..998601a 100644
--- a/noncore/apps/opie-reader/Bkmks.cpp
+++ b/noncore/apps/opie-reader/Bkmks.cpp
@@ -1,3 +1,4 @@
1#include "name.h"
1#include <qmessagebox.h> 2#include <qmessagebox.h>
2 3
3#include "Bkmks.h" 4#include "Bkmks.h"
@@ -9,26 +10,56 @@
9 10
10const unsigned long BkmkFile::magic = ((unsigned long)'q' << 24) | ((unsigned long)'t' << 16) | ((unsigned long)'r' << 8) | ((unsigned long)BKMKTYPE); 11const unsigned long BkmkFile::magic = ((unsigned long)'q' << 24) | ((unsigned long)'t' << 16) | ((unsigned long)'r' << 8) | ((unsigned long)BKMKTYPE);
11 12
13Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p)
14{
15 init(_nm, _nmlen, _anno, _annolen, _p);
16}
17
18Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p)
19{
20 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p);
21}
12 22
13Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_p) 23Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_p)
14{ 24{
15 int len = ustrlen(_nm)+1;
16 m_name = new tchar[len];
17 for (int i = 0; i < len; i++) m_name[i] = _nm[i];
18 25
19 if (_anno == NULL) 26 if (_anno == NULL)
20 { 27 {
21 m_anno = new tchar[1]; 28 tchar t = 0;
22 m_anno[0] = 0; 29 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p);
23 } 30 }
24 else 31 else
25 { 32 {
26 len = ustrlen(_anno)+1; 33 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p);
27 m_anno = new tchar[len];
28 for (int i = 0; i < len; i++) m_anno[i] = _anno[i];
29 } 34 }
30} 35}
31 36
37void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p)
38{
39 m_namelen = _nmlen;
40 if (m_namelen > 0)
41 {
42 m_name = new unsigned char[m_namelen];
43 memcpy(m_name, _nm, m_namelen);
44 }
45 else
46 {
47 m_name = NULL;
48 }
49
50 m_annolen = _annolen;
51 if (m_annolen > 0)
52 {
53 m_anno = new unsigned char[m_annolen];
54 memcpy(m_anno, _anno, m_annolen);
55 }
56 else
57 {
58 m_anno = NULL;
59 }
60 m_position = _p;
61}
62
32Bkmk::~Bkmk() 63Bkmk::~Bkmk()
33{ 64{
34 if (m_name != NULL) delete [] m_name; 65 if (m_name != NULL) delete [] m_name;
@@ -41,67 +72,93 @@ Bkmk& Bkmk::operator=(const Bkmk& rhs)
41{ 72{
42 if (m_name != NULL) 73 if (m_name != NULL)
43 { 74 {
44 delete [] m_name; 75 delete [] m_name;
45 m_name = NULL; 76 m_name = NULL;
46 } 77 }
47 if (m_anno != NULL) 78 if (m_anno != NULL)
48 { 79 {
49 delete [] m_anno; 80 delete [] m_anno;
50 m_anno = NULL; 81 m_anno = NULL;
51 } 82 }
52 if (rhs.m_name != NULL) 83 if (rhs.m_name != NULL)
53 { 84 {
54 int len = ustrlen(rhs.m_name)+1; 85 m_namelen = rhs.m_namelen;
55 m_name = new tchar[len]; 86 m_name = new unsigned char[m_namelen];
56 for (int i = 0; i < len; i++) m_name[i] = rhs.m_name[i]; 87 memcpy(m_name, rhs.m_name, m_namelen);
57 } 88 }
58 else 89 else
59 m_name = NULL; 90 m_name = NULL;
60 if (rhs.m_anno != NULL) 91 if (rhs.m_anno != NULL)
61 { 92 {
62 int len = ustrlen(rhs.m_anno)+1; 93 m_annolen = rhs.m_annolen;
63 m_anno = new tchar[len]; 94 m_anno = new unsigned char[m_annolen];
64 for (int i = 0; i < len; i++) m_anno[i] = rhs.m_anno[i]; 95 memcpy(m_anno, rhs.m_anno, m_annolen);
65 } 96 }
66 else 97 else
67 m_anno = NULL; 98 m_anno = NULL;
68 m_position = rhs.m_position; 99 m_position = rhs.m_position;
69 return *this; 100 return *this;
70} 101}
71 102
72bool Bkmk::operator==(const Bkmk& rhs) 103bool Bkmk::operator==(const Bkmk& rhs)
73{ 104{
74 return (m_position == rhs.m_position && ustrcmp(m_name,rhs.m_name) == 0); 105 return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0);
106}
107
108void Bkmk::setAnno(unsigned char* t, unsigned short len)
109{
110 if (m_anno != NULL)
111 {
112 delete [] m_anno;
113 m_anno = NULL;
114 }
115 if (t != NULL)
116 {
117 m_annolen = len;
118 m_anno = new unsigned char[m_annolen];
119 memcpy(m_anno, t, m_annolen);
120 }
121 else
122 {
123 m_annolen = sizeof(tchar);
124 m_anno = new unsigned char[m_annolen];
125 *((tchar*)m_anno) = 0;
126 }
75} 127}
76 128
77void Bkmk::setAnno(tchar* t) 129void Bkmk::setAnno(tchar* t)
78{ 130{
79 if (m_anno != NULL) 131 if (m_anno != NULL)
80 { 132 {
81 delete [] m_anno; 133 delete [] m_anno;
82 m_anno = NULL; 134 m_anno = NULL;
83 } 135 }
84 if (t != NULL) 136 if (t != NULL)
85 { 137 {
86 int len = ustrlen(t)+1; 138 unsigned short len = ustrlen(t)+1;
87 m_anno = new tchar[len]; 139 m_annolen = sizeof(tchar)*len;
88 for (int i = 0; i < len; i++) m_anno[i] = t[i]; 140 m_anno = new unsigned char[m_annolen];
141 memcpy(m_anno, t, m_annolen);
89 } 142 }
90 else 143 else
91 m_anno = NULL; 144 {
145 m_annolen = sizeof(tchar);
146 m_anno = new unsigned char[m_annolen];
147 *((tchar*)m_anno) = 0;
148 }
92} 149}
93 150
94BkmkFile::BkmkFile(const char *fnm, bool w ) 151BkmkFile::BkmkFile(const char *fnm, bool w = false)
95 : 152 :
96 wt(w), isUpgraded(false) 153 wt(w), isUpgraded(false)
97{ 154{
98 if (w) 155 if (w)
99 { 156 {
100 f = fopen(fnm, "wb"); 157 f = fopen(fnm, "wb");
101 } 158 }
102 else 159 else
103 { 160 {
104 f = fopen(fnm, "rb"); 161 f = fopen(fnm, "rb");
105 } 162 }
106} 163}
107 164
@@ -110,55 +167,28 @@ BkmkFile::~BkmkFile()
110 if (f != NULL) fclose(f); 167 if (f != NULL) fclose(f);
111} 168}
112 169
113void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos) 170void BkmkFile::write(const Bkmk& b)
114{ 171{
115 if (f != NULL) 172 if (f != NULL)
116 { 173 {
117 unsigned short ln = ustrlen(nm); 174 fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f);
118 fwrite(&ln,sizeof(ln),1,f); 175 fwrite(b.m_name,1,b.m_namelen,f);
119 fwrite(nm,sizeof(tchar),ln,f); 176 fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f);
120 ln = ustrlen(an); 177 fwrite(b.m_anno,1,b.m_annolen,f);
121 fwrite(&ln,sizeof(ln),1,f); 178 fwrite(&b.m_position,sizeof(b.m_position),1,f);
122 if (ln > 0) fwrite(an,sizeof(tchar),ln,f);
123 fwrite(&pos,sizeof(pos),1,f);
124 } 179 }
125} 180}
126 181
127void BkmkFile::write(const Bkmk& b) { write(b.name(), b.anno(), b.value()); }
128
129void BkmkFile::write(CList<Bkmk>& bl) 182void BkmkFile::write(CList<Bkmk>& bl)
130{ 183{
131 if (f != NULL) 184 if (f != NULL)
132 { 185 {
133 fwrite(&magic, sizeof(magic), 1, f); 186 fwrite(&magic, sizeof(magic), 1, f);
134 for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++) 187 for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++)
135 { 188 {
136 write(*i); 189 write(*i);
137 } 190 }
138 }
139}
140
141Bkmk* BkmkFile::read()
142{
143 Bkmk* b = NULL;
144 if (f != NULL)
145 {
146 unsigned short ln;
147 if (fread(&ln,sizeof(ln),1,f) == 1)
148 {
149 b = new Bkmk;
150 b->m_name = new tchar[ln+1];
151 fread(b->m_name,sizeof(tchar),ln,f);
152 b->m_name[ln] = 0;
153
154 fread(&ln,sizeof(ln),1,f);
155 b->m_anno = new tchar[ln+1];
156 if (ln > 0) fread(b->m_anno,sizeof(tchar),ln,f);
157 b->m_anno[ln] = 0;
158 fread(&b->m_position,sizeof(b->m_position),1,f);
159 }
160 } 191 }
161 return b;
162} 192}
163 193
164CList<Bkmk>* BkmkFile::readall() 194CList<Bkmk>* BkmkFile::readall()
@@ -166,75 +196,127 @@ CList<Bkmk>* BkmkFile::readall()
166 CList<Bkmk>* bl = NULL; 196 CList<Bkmk>* bl = NULL;
167 if (f != NULL) 197 if (f != NULL)
168 { 198 {
169 unsigned long newmagic; 199 unsigned long newmagic;
170 fread(&newmagic, sizeof(newmagic), 1, f); 200 fread(&newmagic, sizeof(newmagic), 1, f);
171 if (newmagic != magic) 201 if ((newmagic & 0xffffff00) != (magic & 0xffffff00))
172 { 202 {
173 if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of OpieReader\ndid you upgrade from?", "0_4*", "Any other version") == 0) 203 if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of " PROGNAME "\ndid you upgrade from?", "0_4*", "Any other version") == 0)
174 { 204 {
175 fseek(f,0,SEEK_SET); 205 fseek(f,0,SEEK_SET);
176 bl = readall04(); 206 bl = readall00(&read05);
177 } 207 }
178 else 208 else
179 { 209 {
180 fseek(f,0,SEEK_SET); 210 fseek(f,0,SEEK_SET);
181 bl = readall03(); 211 bl = readall00(&read03);
182 } 212 }
183 isUpgraded = true; 213 isUpgraded = true;
184 } 214 }
185 else 215 else
186 { 216 {
187 bl = readall04(); 217 switch(newmagic & 0xff)
188 } 218 {
219 case 6:
220 isUpgraded = false;
221 bl = readall00(read06);
222 qDebug("Correct version!");
223 break;
224 case 5:
225 isUpgraded = true;
226 bl = readall00(read05);
227 qDebug("Known version!");
228 break;
229 default:
230 qDebug("Unknown version!");
231 isUpgraded = true;
232 bl = readall00(read05);
233 }
234 }
189 } 235 }
190 return bl; 236 return bl;
191} 237}
192 238
193CList<Bkmk>* BkmkFile::readall04() 239CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*))
194{ 240{
195 CList<Bkmk>* bl = new CList<Bkmk>; 241 CList<Bkmk>* bl = new CList<Bkmk>;
196 while (1) 242 while (1)
197 { 243 {
198 Bkmk* b = read(); 244 Bkmk* b = (*readfn)(f);
199 if (b == NULL) break; 245 if (b == NULL) break;
200 bl->push_back(*b); 246 bl->push_back(*b);
201 delete b; 247 delete b;
202 } 248 }
203 return bl; 249 return bl;
204} 250}
205 251
206CList<Bkmk>* BkmkFile::readall03() 252Bkmk* BkmkFile::read03(FILE* f)
207{ 253{
208 CList<Bkmk>* bl = new CList<Bkmk>; 254 Bkmk* b = NULL;
209 while (1) 255 if (f != NULL)
210 { 256 {
211 Bkmk* b = read03(); 257 unsigned short ln;
212 if (b == NULL) break; 258 if (fread(&ln,sizeof(ln),1,f) == 1)
213 bl->push_back(*b); 259 {
214 delete b; 260 tchar* name = new tchar[ln+1];
261 fread(name,sizeof(tchar),ln,f);
262 name[ln] = 0;
263
264 ln = 0;
265 tchar* anno = new tchar[ln+1];
266 anno[ln] = 0;
267
268 unsigned int pos;
269 fread(&pos,sizeof(pos),1,f);
270 b = new Bkmk(name,anno,pos);
271 }
215 } 272 }
216 return bl; 273 return b;
217} 274}
218 275
219Bkmk* BkmkFile::read03() 276Bkmk* BkmkFile::read05(FILE* f)
220{ 277{
221 Bkmk* b = NULL; 278 Bkmk* b = NULL;
222 if (f != NULL) 279 if (f != NULL)
223 { 280 {
224 unsigned short ln; 281 unsigned short ln;
225 if (fread(&ln,sizeof(ln),1,f) == 1) 282 if (fread(&ln,sizeof(ln),1,f) == 1)
226 { 283 {
227 b = new Bkmk; 284 tchar* nm = new tchar[ln+1];
228 b->m_name = new tchar[ln+1]; 285 fread(nm,sizeof(tchar),ln,f);
229 fread(b->m_name,sizeof(tchar),ln,f); 286 nm[ln] = 0;
230 b->m_name[ln] = 0; 287 fread(&ln,sizeof(ln),1,f);
288 tchar* anno = new tchar[ln+1];
289 if (ln > 0) fread(anno,sizeof(tchar),ln,f);
290 anno[ln] = 0;
291 unsigned int pos;
292 fread(&pos,sizeof(pos),1,f);
293 b = new Bkmk(nm,anno,pos);
294 }
295 }
296 return b;
297}
231 298
232 ln = 0; 299Bkmk* BkmkFile::read06(FILE* f)
233 b->m_anno = new tchar[ln+1]; 300{
234 b->m_anno[ln] = 0; 301 Bkmk* b = NULL;
302 if (f != NULL)
303 {
304 unsigned short ln;
305 if (fread(&ln,sizeof(ln),1,f) == 1)
306 {
307 b = new Bkmk;
308 b->m_namelen = ln;
309 b->m_name = new unsigned char[b->m_namelen];
310 fread(b->m_name,1,b->m_namelen,f);
235 311
236 fread(&b->m_position,sizeof(b->m_position),1,f); 312 fread(&(b->m_annolen),sizeof(b->m_annolen),1,f);
237 } 313 if (b->m_annolen > 0)
314 {
315 b->m_anno = new unsigned char[b->m_annolen];
316 fread(b->m_anno,1,b->m_annolen,f);
317 }
318 fread(&(b->m_position),sizeof(b->m_position),1,f);
319 }
238 } 320 }
239 return b; 321 return b;
240} 322}
diff --git a/noncore/apps/opie-reader/Bkmks.h b/noncore/apps/opie-reader/Bkmks.h
index b38184a..ee528e4 100644
--- a/noncore/apps/opie-reader/Bkmks.h
+++ b/noncore/apps/opie-reader/Bkmks.h
@@ -2,6 +2,7 @@
2#define __Bkmks_h 2#define __Bkmks_h
3 3
4#include "config.h" 4#include "config.h"
5#include "Filedata.h"
5#include <stdio.h> 6#include <stdio.h>
6 7
7template<class T> 8template<class T>
@@ -10,11 +11,16 @@ class CList;
10class Bkmk 11class Bkmk
11{ 12{
12 friend class BkmkFile; 13 friend class BkmkFile;
13 tchar* m_name; 14 unsigned char* m_name;
14 tchar* m_anno; 15 unsigned short m_namelen;
16 unsigned char* m_anno;
17 unsigned short m_annolen;
15 unsigned int m_position; 18 unsigned int m_position;
19 void init(const void*, unsigned short, const void*, unsigned short, unsigned int);
16 public: 20 public:
17 Bkmk() : m_name(NULL), m_anno(NULL), m_position(0) {}; 21 Bkmk() : m_name(NULL), m_namelen(0), m_anno(NULL), m_annolen(0), m_position(0) {};
22 Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p);
23 Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short _annolen, unsigned int _p);
18 Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p); 24 Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p);
19 Bkmk(const Bkmk& rhs) : m_name(NULL), m_anno(NULL) 25 Bkmk(const Bkmk& rhs) : m_name(NULL), m_anno(NULL)
20 { 26 {
@@ -22,12 +28,24 @@ class Bkmk
22 } 28 }
23 ~Bkmk(); 29 ~Bkmk();
24 unsigned int value() const { return m_position; } 30 unsigned int value() const { return m_position; }
25 tchar *name() const { return m_name; } 31 void value(unsigned int _v) { m_position = _v; }
26 tchar *anno() const { return m_anno; } 32 tchar *name() const { return (tchar*)m_name; }
33 tchar *anno() const { return (tchar*)m_anno; }
27 bool operator<(const Bkmk& rhs) { return (m_position < rhs.m_position); } 34 bool operator<(const Bkmk& rhs) { return (m_position < rhs.m_position); }
28 Bkmk& operator=(const Bkmk& rhs); 35 Bkmk& operator=(const Bkmk& rhs);
29 bool operator==(const Bkmk& rhs); 36 bool operator==(const Bkmk& rhs);
30 void setAnno(tchar* t); 37 void setAnno(tchar* t);
38 void setAnno(unsigned char* t, unsigned short len);
39 unsigned char* filedata()
40 {
41 CFiledata fd(anno());
42 return m_anno+fd.length();
43 }
44 unsigned short filedatalen()
45 {
46 CFiledata fd(anno());
47 return m_annolen - fd.length();
48 }
31}; 49};
32 50
33class BkmkFile 51class BkmkFile
@@ -37,11 +55,10 @@ class BkmkFile
37 bool isUpgraded; 55 bool isUpgraded;
38 static const unsigned long magic; 56 static const unsigned long magic;
39 private: 57 private:
40 Bkmk* read(); 58 static Bkmk* read06(FILE*);
41 Bkmk* read03(); 59 static Bkmk* read05(FILE*);
42 CList<Bkmk>* readall03(); 60 static Bkmk* read03(FILE*);
43 CList<Bkmk>* readall04(); 61 CList<Bkmk>* readall00(Bkmk*(*fn)(FILE*));
44 void write(tchar* nm, tchar* an, const unsigned int& pos);
45 void write(const Bkmk& b); 62 void write(const Bkmk& b);
46 public: 63 public:
47 bool upgraded() { return isUpgraded; } 64 bool upgraded() { return isUpgraded; }
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp
index d4541ea..1123960 100644
--- a/noncore/apps/opie-reader/BuffDoc.cpp
+++ b/noncore/apps/opie-reader/BuffDoc.cpp
@@ -1,3 +1,5 @@
1#include "name.h"
2
1#include "BuffDoc.h" 3#include "BuffDoc.h"
2//#include <FL/fl_draw.h> 4//#include <FL/fl_draw.h>
3#include "config.h" 5#include "config.h"
@@ -13,8 +15,8 @@ bool BuffDoc::hyperlink(unsigned int n)
13 lastispara = false; 15 lastispara = false;
14 if (exp != NULL) 16 if (exp != NULL)
15 { 17 {
16 bRet = exp->hyperlink(n); 18 bRet = exp->hyperlink(n);
17 lastsizes[0] = laststartline = exp->locate(); 19 lastsizes[0] = laststartline = exp->locate();
18 } 20 }
19 return bRet; 21 return bRet;
20} 22}
@@ -30,22 +32,128 @@ void BuffDoc::locate(unsigned int n)
30 // qDebug("BuffDoc:Located"); 32 // qDebug("BuffDoc:Located");
31} 33}
32 34
33bool BuffDoc::getline(CDrawBuffer* buff, int w) 35#define NEWLINEBREAK
36#ifdef NEWLINEBREAK
37bool BuffDoc::getline(CDrawBuffer* buff, int wth)
34{ 38{
39 bool moreleft = true;
40 bool margindone = false;
41 int w = wth-2*BORDER;
35 tchar ch = 32; 42 tchar ch = 32;
36 CStyle cs; 43 CStyle cs;
37 buff->empty(); 44 buff->empty();
38 if (exp == NULL) 45 if (exp == NULL)
39 { 46 {
40// (*buff)[0] = '\0'; 47 buff->empty();
41 buff->empty(); 48 buff->setEof();
42 return false; 49 return false;
50 }
51 int len = 0;
52 if (lastword.length() > 0)
53 {
54 *buff = lastword;
55 cs = lastword.laststyle();
56 w -= buff->leftMargin() + buff->rightMargin();
57 margindone = true;
58 len = lastword.length();
59 }
60 else buff->empty();
61 lastword.empty();
62 unsigned int slen = buff->width(len);
63 lastispara = false;
64 while (1)
65 {
66 lastsizes[len] = exp->locate();
67 getch(ch, cs);
68 if (ch == UEOF)
69 {
70 lastword.empty();
71 if (len == 0)
72 {
73 buff->setEof();
74 moreleft = false;
75 }
76 laststartline = exp->locate();
77 break;
78 }
79 if (ch == 10)
80 {
81 lastword.empty();
82 lastispara = true;
83 laststartline = exp->locate();
84 break;
85 }
86 buff->addch(ch, cs);
87 len++;
88 if (!margindone)
89 {
90 w -= buff->leftMargin() + buff->rightMargin();
91 margindone = true;
92 }
93 if ((slen = buff->width(len)) > w)
94 {
95 if (ch == ' ' || len == 1)
96 {
97 lastword.empty();
98 laststartline = exp->locate();
99 break;
100 }
101 else // should do a backward search for spaces, first.
102 {
103 for (int i = len-1; i > 0; i--)
104 {
105 if ((*buff)[i] == ' ')
106 {
107 (*buff)[len] = 0;
108 lastword.setright(*buff, i+1);
109 buff->truncate(i);
110 (*buff)[i] = '\0';
111 laststartline = lastsizes[i+1];
112 buff->resize();
113 for (int j = 0; j < lastword.length(); j++)
114 {
115 lastsizes[j] = lastsizes[j+i+1];
116 }
117 return true;
118 }
119 }
120 laststartline = lastsizes[len-1];
121 lastword.setright(*buff, len - 1);
122 buff->truncate(len-1);
123 buff->addch('-', cs);
124 for (int j = 0; j < lastword.length(); j++)
125 {
126 lastsizes[j] = lastsizes[j+len];
127 }
128 break;
129 }
130 }
131 }
132 (*buff)[len] = '\0';
133 buff->resize();
134 return moreleft;
135}
136#else
137bool BuffDoc::getline(CDrawBuffer* buff, int wth)
138{
139 bool margindone = false;
140 int w = wth-2*BORDER;
141 tchar ch = 32;
142 CStyle cs;
143 buff->empty();
144 if (exp == NULL)
145 {
146 //(*buff)[0] = '\0';
147 buff->empty();
148 return false;
43 } 149 }
44 int len = 0, lastcheck = 0; 150 int len = 0, lastcheck = 0;
45 if (lastword.length() > 0) 151 if (lastword.length() > 0)
46 { 152 {
47 *buff = lastword; 153 *buff = lastword;
48 cs = lastword.laststyle(); 154 cs = lastword.laststyle();
155 w -= buff->leftMargin() + buff->rightMargin();
156 margindone = true;
49 } 157 }
50 else buff->empty(); 158 else buff->empty();
51// qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data())); 159// qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data()));
@@ -53,18 +161,28 @@ bool BuffDoc::getline(CDrawBuffer* buff, int w)
53 unsigned int slen = buff->width(len); 161 unsigned int slen = buff->width(len);
54 if (slen > w) 162 if (slen > w)
55 { 163 {
56 for ( ; len > 0; len--) 164 for ( ; len > 1; len--)
57 { 165 {
58 if (buff->width(len) < w) break; 166 if (buff->width(len) < w) break;
59 } 167 }
60// lastword = buff->data() + len - 1; 168// lastword = buff->data() + len - 1;
61 laststartline = lastsizes[len-1]; 169 laststartline = lastsizes[len-1];
62 lastword.setright(*buff, len - 1);
63 for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1]; 170 for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1];
64// (*buff)[len-1] = '-'; 171// (*buff)[len-1] = '-';
65 buff->truncate(len-1); 172 if (len > 2)
66 buff->addch('-', cs); 173 {
67 (*buff)[len] = '\0'; 174 lastword.setright(*buff, len - 1);
175 buff->truncate(len-1);
176 buff->addch('-', cs);
177 (*buff)[len] = '\0';
178 }
179
180 else
181 {
182 lastword.empty();
183 (*buff)[len] = '\0';
184 }
185 buff->resize();
68 return true; 186 return true;
69 } 187 }
70 if (lastispara) 188 if (lastispara)
@@ -77,6 +195,7 @@ bool BuffDoc::getline(CDrawBuffer* buff, int w)
77// (*buff)[len] = '\0'; 195// (*buff)[len] = '\0';
78 buff->truncate(len); 196 buff->truncate(len);
79 laststartline = exp->locate(); 197 laststartline = exp->locate();
198 buff->resize();
80 return true; 199 return true;
81 } 200 }
82 lastispara = false; 201 lastispara = false;
@@ -88,27 +207,40 @@ bool BuffDoc::getline(CDrawBuffer* buff, int w)
88 getch(ch, cs); 207 getch(ch, cs);
89 while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128) 208 while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128)
90 { 209 {
91 len++; 210 len++;
92 buff->addch(ch,cs); 211 buff->addch(ch,cs);
93 allsizes[len] = exp->locate(); 212 allsizes[len] = exp->locate();
94 getch(ch, cs); 213 getch(ch, cs);
95 } 214 }
96 (*buff)[len] = 0; 215 (*buff)[len] = 0;
97 slen = buff->width(len); 216 slen = buff->width(len);
98 len++; 217 len++;
99 buff->addch(' ', cs); 218 buff->addch(' ', cs);
219 if (!margindone)
220 {
221 w -= buff->leftMargin() + buff->rightMargin();
222 margindone = true;
223 }
100 allsizes[len] = exp->locate(); 224 allsizes[len] = exp->locate();
101 if (slen < w && ch != ' ') 225 if (slen < w && ch != ' ')
102 { 226 {
103 lastcheck = len; 227 lastcheck = len;
104 break; 228 break;
105 } 229 }
106 lastispara = (ch == '\012'); 230 lastispara = (ch == '\012');
107 } 231 }
108 (*buff)[len] = '\0'; 232 (*buff)[len] = '\0';
109// lastword = buff->data()+lastcheck; 233// lastword = buff->data()+lastcheck;
110 lastword.setright(*buff, lastcheck); 234#ifdef WINDOWS
235 lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1);
236 {
237 int i;
238 for (i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
239 }
240#else
241 lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1);
111 for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; 242 for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
243#endif
112 if (lastcheck > 0) 244 if (lastcheck > 0)
113 { 245 {
114 laststartline = allsizes[lastcheck]; 246 laststartline = allsizes[lastcheck];
@@ -122,28 +254,37 @@ bool BuffDoc::getline(CDrawBuffer* buff, int w)
122 buff->truncate(lastcheck); 254 buff->truncate(lastcheck);
123 } 255 }
124// buff->frig(); 256// buff->frig();
125 return (ch != UEOF); 257 buff->resize();
258 if (ch == UEOF && buff->length() == 0)
259 {
260 buff->setEof();
261 return false;
262 }
263 return true;
126} 264}
265#endif
127 266
128bool BuffDoc::getline(CDrawBuffer* buff, int w, int cw) 267bool BuffDoc::getline(CDrawBuffer* buff, int wth, int cw)
129{ 268{
269 int w = wth-2*BORDER;
130 buff->empty(); 270 buff->empty();
131 if (exp == NULL) 271 if (exp == NULL)
132 { 272 {
133 return false; 273 return false;
134 } 274 }
135 tchar ch; 275 tchar ch;
136 CStyle cs; 276 CStyle cs;
137 int i = 0; 277 int i = 0;
138 while (i*cw < w) 278 while (i*cw < w)
139 { 279 {
140 getch(ch, cs); 280 getch(ch, cs);
141 if (ch == '\12' || ch == UEOF) break; 281 if (ch == '\12' || ch == UEOF) break;
142 buff->addch(ch,cs); 282 buff->addch(ch,cs);
143 i++; 283 i++;
144 } 284 }
145 buff->truncate(i); 285 buff->truncate(i);
146 laststartline = exp->locate(); 286 laststartline = exp->locate();
287 buff->resize();
147 return (ch != UEOF); 288 return (ch != UEOF);
148} 289}
149 290
@@ -164,53 +305,44 @@ int BuffDoc::openfile(QWidget* _parent, const char *src)
164 int ret = exp->openfile(src); 305 int ret = exp->openfile(src);
165 if (ret == -1) 306 if (ret == -1)
166 { 307 {
167 delete exp; 308 delete exp;
168 exp = NULL; 309 exp = NULL;
169 return ret; 310 return ret;
170 } 311 }
171 if (ret == -2) 312 if (ret == -2)
172 { 313 {
173 314
174 delete exp; 315 delete exp;
175 exp = new ztxt; 316 exp = new ztxt;
176 ret = exp->openfile(src); 317 ret = exp->openfile(src);
177 } 318 }
178 if (ret != 0) 319 if (ret != 0)
179 { 320 {
180 321
181 delete exp; 322 delete exp;
182 exp = new CPlucker; 323 exp = new CPlucker;
183 ret = exp->openfile(src); 324 ret = exp->openfile(src);
184 } 325 }
185#ifndef SMALL
186 if (ret != 0) 326 if (ret != 0)
187 { 327 {
188 delete exp; 328 delete exp;
189 qDebug("Trying ppms"); 329 qDebug("Trying ppms");
190 exp = new ppm_expander; 330 exp = new ppm_expander;
191 ret = exp->openfile(src); 331 ret = exp->openfile(src);
192 } 332 }
193
194 if (ret != 0) 333 if (ret != 0)
195 { 334 {
196 delete exp; 335 delete exp;
197 exp = new Text; 336 exp = new Text;
198// qDebug("Trying text"); 337 // qDebug("Trying text");
199 ret = exp->openfile(src); 338 ret = exp->openfile(src);
200 } 339 }
201#else 340
202 if (ret != 0)
203 {
204 delete exp;
205 exp = new Text;
206 ret = exp->openfile(src);
207 }
208#endif
209 if (ret != 0) 341 if (ret != 0)
210 { 342 {
211 delete exp; 343 delete exp;
212 QMessageBox::information(_parent, "OpieReader", "Unknown file compression type","Try another file"); 344 QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file");
213 return ret; 345 return ret;
214 } 346 }
215 // qDebug("Doing final open:%x:%x",exp,filt); 347 // qDebug("Doing final open:%x:%x",exp,filt);
216 348
diff --git a/noncore/apps/opie-reader/BuffDoc.h b/noncore/apps/opie-reader/BuffDoc.h
index 1aac817..78d8457 100644
--- a/noncore/apps/opie-reader/BuffDoc.h
+++ b/noncore/apps/opie-reader/BuffDoc.h
@@ -19,6 +19,27 @@ class BuffDoc
19 CExpander* exp; 19 CExpander* exp;
20 CFilterChain* filt; 20 CFilterChain* filt;
21 public: 21 public:
22 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
23 {
24 if (exp == NULL)
25 {
26 data = NULL;
27 len = 0;
28 }
29 else
30 {
31 exp->setSaveData(data, len, src, srclen);
32 }
33 }
34 void putSaveData(unsigned char*& src, unsigned short& srclen)
35 {
36 if (exp != NULL)
37 {
38 exp->putSaveData(src, srclen);
39 }
40 }
41 void suspend() { if (exp != NULL) exp->suspend(); }
42 void unsuspend() { if (exp != NULL) exp->unsuspend(); }
22 ~BuffDoc() 43 ~BuffDoc()
23 { 44 {
24 delete filt; 45 delete filt;
@@ -61,10 +82,15 @@ class BuffDoc
61 else 82 else
62 ch = UEOF; 83 ch = UEOF;
63 } 84 }
85 QPixmap* getPicture(unsigned long tgt) { return (exp == NULL) ? NULL : exp->getPicture(tgt); }
86 unsigned int startSection() { return (exp == NULL) ? 0 : exp->startSection(); }
87 unsigned int endSection() { return (exp == NULL) ? 0 : exp->endSection(); }
64 unsigned int locate() { return (exp == NULL) ? 0 : laststartline; } 88 unsigned int locate() { return (exp == NULL) ? 0 : laststartline; }
65 unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); } 89 unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); }
90 void setContinuous(bool _b) { if (exp != NULL) exp->setContinuous(_b); }
66 MarkupType PreferredMarkup() { return (exp == NULL) ? cTEXT : exp->PreferredMarkup(); } 91 MarkupType PreferredMarkup() { return (exp == NULL) ? cTEXT : exp->PreferredMarkup(); }
67 bool hyperlink(unsigned int n); 92 bool hyperlink(unsigned int n);
93 size_t getHome() { return ((exp != NULL) ? exp->getHome() : 0); }
68 void locate(unsigned int n); 94 void locate(unsigned int n);
69 bool getline(CDrawBuffer* buff, int w); 95 bool getline(CDrawBuffer* buff, int w);
70 bool getline(CDrawBuffer* buff, int w, int cw); 96 bool getline(CDrawBuffer* buff, int w, int cw);
@@ -79,6 +105,10 @@ class BuffDoc
79 laststartline = exp->locate(); 105 laststartline = exp->locate();
80 return i; 106 return i;
81 } 107 }
108 void saveposn(size_t posn) { exp->saveposn(posn); }
109 bool forward(size_t& loc) { return exp->forward(loc); }
110 bool back(size_t& loc) { return exp->back(loc); }
111 bool hasnavigation() { return exp->hasnavigation(); }
82}; 112};
83 113
84#endif 114#endif
diff --git a/noncore/apps/opie-reader/CBuffer.cpp b/noncore/apps/opie-reader/CBuffer.cpp
index 0780a88..526b25f 100644
--- a/noncore/apps/opie-reader/CBuffer.cpp
+++ b/noncore/apps/opie-reader/CBuffer.cpp
@@ -11,7 +11,7 @@ CBufferBase& CBufferBase::assign(const void* sztmp, size_t ms)
11 return *this; 11 return *this;
12} 12}
13 13
14CBufferBase::CBufferBase(size_t ms, size_t n) : len(n), membersize(ms) 14CBufferBase::CBufferBase(size_t ms, size_t n = 16) : len(n), membersize(ms)
15{ 15{
16 buffer = new unsigned char[len*membersize]; 16 buffer = new unsigned char[len*membersize];
17 memset(buffer, 0, len*membersize); 17 memset(buffer, 0, len*membersize);
@@ -31,7 +31,7 @@ void* CBufferBase::operator[](int i)
31 return buffer+i*membersize; 31 return buffer+i*membersize;
32} 32}
33 33
34size_t CBufferBase::bstrlen(unsigned char* _buffer) 34size_t CBufferBase::bstrlen(unsigned char* _buffer = NULL)
35{ 35{
36 if (_buffer == NULL) _buffer = buffer; 36 if (_buffer == NULL) _buffer = buffer;
37 unsigned char* zero = new unsigned char[membersize]; 37 unsigned char* zero = new unsigned char[membersize];
diff --git a/noncore/apps/opie-reader/CDrawBuffer.cpp b/noncore/apps/opie-reader/CDrawBuffer.cpp
index 892456f..ca220e6 100644
--- a/noncore/apps/opie-reader/CDrawBuffer.cpp
+++ b/noncore/apps/opie-reader/CDrawBuffer.cpp
@@ -1,19 +1,25 @@
1
2#include "CDrawBuffer.h" 1#include "CDrawBuffer.h"
3#include "FontControl.h" 2#include "FontControl.h"
4#include <qfontmetrics.h> 3#include <qfontmetrics.h>
5#include <qpainter.h> 4#include <qpainter.h>
5#include <qpixmap.h>
6#include "opie.h"
7
8CDrawBuffer::~CDrawBuffer()
9{
10 while (!segs.isEmpty()) segs.erase(0);
11}
6 12
7void CDrawBuffer::setright(CDrawBuffer& rhs, int f) 13void CDrawBuffer::setright(CDrawBuffer& rhs, int f)
8{ 14{
9 int i; 15 int i;
10// qDebug("Trying 1:%d:%s", f, (const char*)toQString(rhs.data()));
11 len = rhs.len; 16 len = rhs.len;
12 m_maxstyle = rhs.m_maxstyle; 17 fc = rhs.fc;
13 m_ascent = rhs.m_ascent; 18 m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0;
14 m_descent = rhs.m_descent; 19 while (!segs.isEmpty())
15 m_lineSpacing = rhs.m_lineSpacing; 20 {
16 while (!segs.isEmpty()) segs.erase(0); 21 segs.erase(0);
22 }
17 for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); ) 23 for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); )
18 { 24 {
19 CList<textsegment>::iterator next = iter; 25 CList<textsegment>::iterator next = iter;
@@ -22,13 +28,15 @@ void CDrawBuffer::setright(CDrawBuffer& rhs, int f)
22 { 28 {
23 int st = next->start-f; 29 int st = next->start-f;
24 if (st < 0) st = 0; 30 if (st < 0) st = 0;
31
32 CStyle _style = next->style;
33
25 segs.push_back(textsegment(st,next->style)); 34 segs.push_back(textsegment(st,next->style));
26 } 35 }
27 } 36 }
28 for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i]; 37 for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i];
29 (*this)[i-f] = '\0'; 38 (*this)[i-f] = '\0';
30 len = i; 39 len = i;
31// qDebug("Tried 1");
32} 40}
33 41
34CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs) 42CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs)
@@ -40,7 +48,11 @@ CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs)
40 m_ascent = rhs.m_ascent; 48 m_ascent = rhs.m_ascent;
41 m_descent = rhs.m_descent; 49 m_descent = rhs.m_descent;
42 m_lineSpacing = rhs.m_lineSpacing; 50 m_lineSpacing = rhs.m_lineSpacing;
43 while (!segs.isEmpty()) segs.erase(0); 51 m_lineExtraSpacing = rhs.m_lineExtraSpacing;
52 while (!segs.isEmpty())
53 {
54 segs.erase(0);
55 }
44 for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++) 56 for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++)
45 { 57 {
46 segs.push_back(*iter); 58 segs.push_back(*iter);
@@ -55,7 +67,10 @@ CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs)
55CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp) 67CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp)
56{ 68{
57 int i; 69 int i;
58 while (!segs.isEmpty()) segs.erase(0); 70 while (!segs.isEmpty())
71 {
72 segs.erase(0);
73 }
59 segs.push_back(textsegment(0, CStyle())); 74 segs.push_back(textsegment(0, CStyle()));
60 for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i]; 75 for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i];
61 (*this)[i] = '\0'; 76 (*this)[i] = '\0';
@@ -67,33 +82,24 @@ void CDrawBuffer::empty()
67{ 82{
68 len = 0; 83 len = 0;
69 (*this)[0] = 0; 84 (*this)[0] = 0;
70 while (!segs.isEmpty()) segs.erase(0); 85 while (!segs.isEmpty())
86 {
87 segs.erase(0);
88 }
71 segs.push_back(textsegment(0,CStyle())); 89 segs.push_back(textsegment(0,CStyle()));
72 m_maxstyle = m_ascent = m_descent = m_lineSpacing = 0; 90 m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0;
91 m_bEof = false;
73} 92}
74 93
75void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/) 94void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/)
76{ 95{
77 if (len == 0) 96 if (len == 0)
78 { 97 {
79 int thissize = fc->getsize(_style);
80 m_maxstyle = thissize;
81 m_ascent = fc->ascent(_style);
82 m_descent = fc->descent(_style);
83 m_lineSpacing = fc->lineSpacing(_style);
84 segs.first().start = 0; 98 segs.first().start = 0;
85 segs.first().style = _style; 99 segs.first().style = _style;
86 } 100 }
87 else if (_style != segs.last().style) 101 else if (_style != segs.last().style)
88 { 102 {
89 int thissize = fc->getsize(_style);
90 if (thissize > m_maxstyle)
91 {
92 m_maxstyle = thissize;
93 m_ascent = fc->ascent(_style);
94 m_descent = fc->descent(_style);
95 m_lineSpacing = fc->lineSpacing(_style);
96 }
97 segs.push_back(textsegment(len, _style)); 103 segs.push_back(textsegment(len, _style));
98 } 104 }
99 (*this)[len++] = ch; 105 (*this)[len++] = ch;
@@ -120,52 +126,119 @@ int CDrawBuffer::width(int numchars)
120 end = numchars; 126 end = numchars;
121 } 127 }
122 CStyle currentstyle = textstart->style; 128 CStyle currentstyle = textstart->style;
123 QFont f(fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); 129 if (currentstyle.isPicture())
124 QString str = text.mid(textstart->start, end-textstart->start); 130 {
125 QFontMetrics fm(f); 131 currentx += currentstyle.getPicture()->width();
126 currentx += fm.width(str); 132 }
133 else
134 {
135 if (currentstyle.isMono() && !fc->hasCourier())
136 {
137 int cw = (7*fc->getsize(currentstyle))/10;
138 currentx += cw*(end-textstart->start);
139 }
140 else
141 {
142 QFont f(currentstyle.isMono() ? QString("courier") : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) );
143 // f.setUnderline(currentstyle.isUnderline());
144 QString str = text.mid(textstart->start, end-textstart->start);
145 QFontMetrics fm(f);
146 currentx += fm.width(str);
147 }
148 }
127 textstart = textend; 149 textstart = textend;
128 } 150 }
129 while (textend != segs.end() && end != numchars); 151 while (textend != segs.end() && end != numchars);
130 return currentx; 152 return currentx;
131} 153}
132 154
155int CDrawBuffer::leftMargin()
156{
157 return (segs.begin()->style.getLeftMargin()*fc->getsize(segs.begin()->style))/6;
158}
159
160int CDrawBuffer::rightMargin()
161{
162 return (segs.begin()->style.getRightMargin()*fc->getsize(segs.begin()->style))/6;
163}
164
165int CDrawBuffer::offset(int scwidth)
166{
167 int currentx = BORDER;
168 switch(segs.begin()->style.getJustify())
169 {
170 case m_AlignRight:
171 {
172 currentx = scwidth - BORDER - rightMargin() - width();
173 }
174 break;
175 case m_AlignCentre:
176 {
177 currentx = (
178 scwidth +
179 leftMargin() - rightMargin()
180 - width())/2;
181 }
182 break;
183 case m_AlignJustify:
184 case m_AlignLeft:
185 currentx = BORDER + leftMargin();
186 break;
187 }
188 return currentx;
189}
190
133void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth) 191void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth)
134{ 192{
135 int currentx = 0; 193 int currentx = offset(scwidth);
136 QString text = toQString(data()); 194 QString text = toQString(data());
137 CList<textsegment>::iterator textstart = segs.begin(); 195 CList<textsegment>::iterator textstart = segs.begin();
196/*
138 StyleType align = textstart->style.getJustify(); 197 StyleType align = textstart->style.getJustify();
139 switch (align) 198 switch (align)
140 { 199 {
141 case CStyle::m_AlignRight: 200 case CStyle::m_AlignRight:
142 { 201 {
143 // int linelength = width(); 202 currentx = scwidth - width() - 2*BORDER;
144 currentx = scwidth - width();
145 } 203 }
146 break; 204 break;
147 case CStyle::m_AlignCentre: 205 case CStyle::m_AlignCentre:
148 { 206 {
149 // int linelength = width(); 207 currentx = (scwidth - width())/2 - BORDER;
150 currentx = (scwidth - width())/2;
151 } 208 }
152 break; 209 break;
153 case CStyle::m_AlignJustify: 210 case CStyle::m_AlignJustify:
154 case CStyle::m_AlignLeft: 211 case CStyle::m_AlignLeft:
155 break; 212 break;
156 } 213 }
214*/
157 CList<textsegment>::iterator textend = textstart; 215 CList<textsegment>::iterator textend = textstart;
158 do 216 do
159 { 217 {
160 textend++; 218 textend++;
161 int end = (textend != segs.end()) ? textend->start : length(); 219 int end = (textend != segs.end()) ? textend->start : length();
162 CStyle currentstyle = textstart->style; 220 CStyle currentstyle = textstart->style;
163 QFont f(fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); 221 QFont f((currentstyle.isMono() && fc->hasCourier()) ? QString("courier") : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) );
222 //f.setUnderline(currentstyle.isUnderline());
223 //if (currentstyle.isUnderline()) qDebug("UNDERLINE");
164 _p->setFont(f); 224 _p->setFont(f);
165 QString str = text.mid(textstart->start, end-textstart->start); 225 QString str = text.mid(textstart->start, end-textstart->start);
166 _p->setPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue())); 226#ifdef OPIE
227 _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100));
228#else
229 _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10));
230#endif
167 if (_bMono) 231 if (_bMono)
168 { 232 {
233 if (currentstyle.isUnderline())
234 {
235 _p->drawLine( currentx, _y, currentx + str.length()*_charWidth, _y);
236 }
237 if (currentstyle.isStrikethru())
238 {
239 int ascent = fc->ascent(currentstyle)/3;
240 _p->drawLine( currentx, _y-ascent, currentx + str.length()*_charWidth, _y-ascent);
241 }
169 for (int i = 0; i < str.length(); i++) 242 for (int i = 0; i < str.length(); i++)
170 { 243 {
171 _p->drawText( currentx + i*_charWidth, _y, QString(str[i])); 244 _p->drawText( currentx + i*_charWidth, _y, QString(str[i]));
@@ -174,13 +247,57 @@ void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int
174 } 247 }
175 else 248 else
176 { 249 {
177 _p->drawText( currentx, _y, str); 250 if (currentstyle.isPicture())
178 QFontMetrics fm(f); 251 {
179 currentx += fm.width(str); 252 int ascent = fc->ascent(currentstyle)/2;
253 int yoffset = currentstyle.getPicture()->height()/2 + ascent;
254 _p->drawPixmap( currentx, _y-yoffset, *(currentstyle.getPicture()));
255 currentx += currentstyle.getPicture()->width();
256 }
257 else
258 {
259 if (currentstyle.isMono() && !fc->hasCourier())
260 {
261 int cw = (7*fc->getsize(currentstyle))/10;
262 int w = cw*(end-textstart->start);
263 if (currentstyle.isUnderline())
264 {
265 _p->drawLine( currentx, _y, currentx + w, _y);
266 }
267 if (currentstyle.isStrikethru())
268 {
269 int ascent = fc->ascent(currentstyle)/3;
270 _p->drawLine( currentx, _y-ascent, currentx + w, _y-ascent);
271 }
272 QString str = text.mid(textstart->start, end-textstart->start);
273
274 for (int i = 0; i < str.length(); i++)
275 {
276 _p->drawText( currentx, _y, QString(str[i]));
277 currentx += cw;
278 }
279 }
280 else
281 {
282 QFontMetrics fm(f);
283 int w = fm.width(str);
284 if (currentstyle.isUnderline())
285 {
286 _p->drawLine( currentx, _y, currentx + w, _y);
287 }
288 if (currentstyle.isStrikethru())
289 {
290 int ascent = fc->ascent(currentstyle)/3;
291 _p->drawLine( currentx, _y-ascent, currentx + w, _y-ascent);
292 }
293 _p->drawText( currentx, _y, str);
294 currentx += w;
295 }
296 }
180 } 297 }
181 textstart = textend; 298 textstart = textend;
182 } 299 }
183 while (textend != segs.end()); 300 while (textend != segs.end() && textstart->start < length()-1);
184} 301}
185 302
186CStyle CDrawBuffer::laststyle() 303CStyle CDrawBuffer::laststyle()
@@ -188,7 +305,7 @@ CStyle CDrawBuffer::laststyle()
188 return segs.last().style; 305 return segs.last().style;
189} 306}
190 307
191bool CDrawBuffer::isLink(int numchars, size_t& tgt) 308linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt)
192{ 309{
193 int end = 0; 310 int end = 0;
194 CStyle currentstyle; 311 CStyle currentstyle;
@@ -198,14 +315,65 @@ bool CDrawBuffer::isLink(int numchars, size_t& tgt)
198 { 315 {
199 textend++; 316 textend++;
200 end = (textend != segs.end()) ? textend->start : length(); 317 end = (textend != segs.end()) ? textend->start : length();
201 if (numchars >= 0 && end > numchars)
202 {
203 end = numchars;
204 }
205 currentstyle = textstart->style; 318 currentstyle = textstart->style;
319/*
320 if (currentstyle.isPicture()) qDebug("Passed thru picture");
321 if (currentstyle.getLink()) qDebug("Passed thru link");
322 qDebug("islink:%d - %d", numchars, end);
323*/
206 textstart = textend; 324 textstart = textend;
207 } 325 }
208 while (textend != segs.end() && end != numchars); 326 while (textend != segs.end() && end <= numchars);
209 tgt = currentstyle.getData(); 327// if (currentstyle.isPicture()) qDebug("Clicked on picture");
210 return currentstyle.getLink(); 328 if (currentstyle.getPictureLink())
329 {
330 tgt = currentstyle.getPictureLinkData();
331 return ePicture;
332 }
333 if (currentstyle.getLink())
334 {
335 tgt = currentstyle.getData();
336 return eLink;
337 }
338 return eNone;
339}
340
341void CDrawBuffer::resize()
342{
343 int i;
344 m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0;
345 for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= length(); )
346 {
347 CList<textsegment>::iterator next = iter;
348 iter++;
349 int st = next->start;
350 if (st < 0) st = 0;
351
352 CStyle _style = next->style;
353
354 int linespacing, ascent, descent, extra;
355
356 ascent = fc->ascent(_style);
357 descent = fc->descent(_style);
358 linespacing = fc->lineSpacing(_style);
359 extra = linespacing - ascent - descent;
360 if (_style.isPicture())
361 {
362 descent = (_style.getPicture()->height()-ascent)/2;
363 ascent = (_style.getPicture()->height()+ascent)/2;
364 }
365/*
366 else if (fc != NULL)
367 {
368 ascent = fc->ascent(_style);
369 descent = fc->descent(_style);
370 linespacing = fc->lineSpacing(_style);
371 extra = linespacing - ascent - descent;
372 }
373*/
374 if (ascent > m_ascent) m_ascent = ascent;
375 if (descent > m_descent) m_descent = descent;
376 if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra;
377 m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing;
378 }
211} 379}
diff --git a/noncore/apps/opie-reader/CDrawBuffer.h b/noncore/apps/opie-reader/CDrawBuffer.h
index 4d3696e..0d8968c 100644
--- a/noncore/apps/opie-reader/CDrawBuffer.h
+++ b/noncore/apps/opie-reader/CDrawBuffer.h
@@ -7,11 +7,18 @@
7 7
8class QPainter; 8class QPainter;
9 9
10enum linkType
11{
12 eNone,
13 eLink,
14 ePicture
15};
16
10struct textsegment 17struct textsegment
11{ 18{
12 int start; 19 int start;
13 CStyle style; 20 CStyle style;
14 textsegment(int _start, CStyle _style) 21 textsegment(int _start, const CStyle& _style)
15 : 22 :
16 start(_start), style(_style) 23 start(_start), style(_style)
17 {} 24 {}
@@ -24,14 +31,23 @@ class CDrawBuffer : public CBuffer
24 CList<textsegment> segs; 31 CList<textsegment> segs;
25 int len; 32 int len;
26 FontControl* fc; 33 FontControl* fc;
27 int m_maxstyle, m_ascent, m_descent, m_lineSpacing; 34 int m_maxstyle, m_ascent, m_descent, m_lineSpacing, m_lineExtraSpacing;
35 bool m_bEof;
36 CDrawBuffer(const CDrawBuffer&);
37 CDrawBuffer& operator=(const tchar*sztmp);
28 public: 38 public:
39 int leftMargin();
40 int rightMargin();
41 void setEof() { m_bEof = true; }
42 bool eof() { return m_bEof; }
43 CDrawBuffer& operator=(CDrawBuffer&);
29 CDrawBuffer(FontControl* _fs = NULL) 44 CDrawBuffer(FontControl* _fs = NULL)
30 : 45 :
31 fc(_fs) 46 fc(_fs)
32 { 47 {
33 empty(); 48 empty();
34 } 49 }
50 ~CDrawBuffer();
35/* 51/*
36 CDrawBuffer() 52 CDrawBuffer()
37 : 53 :
@@ -41,9 +57,8 @@ class CDrawBuffer : public CBuffer
41 } 57 }
42*/ 58*/
43 int width(int numchars = -1); 59 int width(int numchars = -1);
60 int offset(int);
44 void render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scw); 61 void render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scw);
45 CDrawBuffer& operator=(const tchar*sztmp);
46 CDrawBuffer& operator=(CDrawBuffer&);
47 void empty(); 62 void empty();
48 void addch(tchar ch, CStyle _style); 63 void addch(tchar ch, CStyle _style);
49 void truncate(int); 64 void truncate(int);
@@ -52,8 +67,10 @@ class CDrawBuffer : public CBuffer
52 int ascent() { return m_ascent; } 67 int ascent() { return m_ascent; }
53 int descent() { return m_descent; } 68 int descent() { return m_descent; }
54 int lineSpacing() { return m_lineSpacing; } 69 int lineSpacing() { return m_lineSpacing; }
70 int lineExtraSpacing() { return m_lineExtraSpacing; }
55 71
56// void frig(); 72// void frig();
57 bool isLink(int numchars, size_t& tgt); 73 linkType getLinkType(int numchars, size_t& tgt);
74 void resize();
58}; 75};
59#endif 76#endif
diff --git a/noncore/apps/opie-reader/CExpander.h b/noncore/apps/opie-reader/CExpander.h
index b1147a6..c281398 100644
--- a/noncore/apps/opie-reader/CExpander.h
+++ b/noncore/apps/opie-reader/CExpander.h
@@ -1,10 +1,16 @@
1#ifndef __CExpander_h 1#ifndef __CExpander_h
2#define __CExpander_h 2#define __CExpander_h
3 3
4#include <unistd.h>
5#include <stdio.h>
6#include <time.h>
7#include <qmessagebox.h>
4#include "config.h" 8#include "config.h"
5#include "StyleConsts.h" 9#include "StyleConsts.h"
6#include "Markups.h" 10#include "Markups.h"
11#include "name.h"
7 12
13class QPixmap;
8class Bkmk; 14class Bkmk;
9 15
10template<class T> 16template<class T>
@@ -18,10 +24,26 @@ class CCharacterSource
18 24
19class CExpander 25class CExpander
20{ 26{
27 protected:
28 size_t m_homepos;
29 bool m_continuous;
30 char* fname;
31 bool bSuspended;
32 size_t suspos;
33 time_t sustime;
21 public: 34 public:
22 CExpander() {}; 35 virtual void suspend() = 0;
23 virtual ~CExpander() {}; 36 virtual void unsuspend() = 0;
24 virtual int openfile(const char *src) = 0; 37 size_t getHome() { return m_homepos; }
38 CExpander() : m_homepos(0), fname(NULL) {};
39 virtual ~CExpander() { if (fname != NULL) delete [] fname; };
40 int openfile(const char *src)
41 {
42 bSuspended = false;
43 fname = strdup(src);
44 return OpenFile(src);
45 }
46 virtual int OpenFile(const char *src) = 0;
25 virtual unsigned int locate() = 0; 47 virtual unsigned int locate() = 0;
26 virtual void locate(unsigned int n) = 0; 48 virtual void locate(unsigned int n) = 0;
27 virtual bool hasrandomaccess() = 0; 49 virtual bool hasrandomaccess() = 0;
@@ -39,5 +61,64 @@ class CExpander
39 return true; 61 return true;
40 } 62 }
41 virtual MarkupType PreferredMarkup() = 0; 63 virtual MarkupType PreferredMarkup() = 0;
64 virtual void saveposn(size_t posn) {}
65 virtual bool forward(size_t& loc) {}
66 virtual bool back(size_t& loc) {}
67 virtual bool hasnavigation() { return false; }
68 virtual unsigned long startSection()
69 {
70 return 0;
71 }
72 virtual unsigned long endSection()
73 {
74 unsigned long file, text;
75 sizes(file, text);
76 return text;
77 }
78 virtual QPixmap* getPicture(unsigned long tgt) { return NULL; }
79 void setContinuous(bool _b) { m_continuous = _b; }
80
81 virtual void suspend(FILE*& fin)
82 {
83 bSuspended = true;
84 suspos = ftell(fin);
85 fclose(fin);
86 fin = NULL;
87 sustime = time(NULL);
88 }
89 virtual void unsuspend(FILE*& fin)
90 {
91 if (bSuspended)
92 {
93 bSuspended = false;
94 int delay = time(NULL) - sustime;
95 if (delay < 10) sleep(10-delay);
96 fin = fopen(fname, "rb");
97 for (int i = 0; fin == NULL && i < 5; i++)
98 {
99 sleep(5);
100 fin = fopen(fname, "rb");
101 }
102 if (fin == NULL)
103 {
104 QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file");
105 exit(0);
106 }
107 suspos = fseek(fin, suspos, SEEK_SET);
108 }
109 }
110 virtual void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
111 {
112 len = srclen;
113 data = new unsigned char[len];
114 memcpy(data, src, len);
115 }
116 virtual void putSaveData(unsigned char*& src, unsigned short& srclen)
117 {
118 if (srclen != 0)
119 {
120 qDebug("Don't know what to do with non-zero save data");
121 }
122 }
42}; 123};
43#endif 124#endif
diff --git a/noncore/apps/opie-reader/CFilter.cpp b/noncore/apps/opie-reader/CFilter.cpp
index c17cf61..d5e3116 100644
--- a/noncore/apps/opie-reader/CFilter.cpp
+++ b/noncore/apps/opie-reader/CFilter.cpp
@@ -532,7 +532,7 @@ void PeanutFormatter::getch(tchar& ch, CStyle& sty)
532 parent->getch(ch, dummy); 532 parent->getch(ch, dummy);
533 break; 533 break;
534 case 'c': 534 case 'c':
535 if (currentstyle.getJustify() == CStyle::m_AlignCentre) 535 if (currentstyle.getJustify() == m_AlignCentre)
536 { 536 {
537 currentstyle.setLeftJustify(); 537 currentstyle.setLeftJustify();
538 } 538 }
@@ -543,7 +543,7 @@ void PeanutFormatter::getch(tchar& ch, CStyle& sty)
543 parent->getch(ch, dummy); 543 parent->getch(ch, dummy);
544 break; 544 break;
545 case 'r': 545 case 'r':
546 if (currentstyle.getJustify() == CStyle::m_AlignRight) 546 if (currentstyle.getJustify() == m_AlignRight)
547 { 547 {
548 currentstyle.setLeftJustify(); 548 currentstyle.setLeftJustify();
549 } 549 }
@@ -559,3 +559,126 @@ void PeanutFormatter::getch(tchar& ch, CStyle& sty)
559 } 559 }
560 sty = currentstyle; 560 sty = currentstyle;
561} 561}
562
563void OnePara::getch(tchar& ch, CStyle& sty)
564{
565 parent->getch(ch, sty);
566 if (m_lastchar == 10)
567 {
568 while (ch == 10) parent->getch(ch, sty);
569 }
570 m_lastchar = ch;
571}
572
573#ifdef REPALM
574void repalm::getch(tchar& ch, CStyle& sty)
575{
576 parent->getch(ch, sty);
577 switch (ch)
578 {
579 case 0x80:
580 ch = 0x20ac;
581 break;
582 case 0x82:
583 ch = 0x201a;
584 break;
585 case 0x83:
586 ch = 0x0192;
587 break;
588 case 0x84:
589 ch = 0x201e;
590 break;
591 case 0x85:
592 ch = 0x2026;
593 break;
594 case 0x86:
595 ch = 0x2020;
596 break;
597 case 0x87:
598 ch = 0x2021;
599 break;
600 case 0x88:
601 ch = 0x02c6;
602 break;
603 case 0x89:
604 ch = 0x2030;
605 break;
606 case 0x8a:
607 ch = 0x0160;
608 break;
609 case 0x8b:
610 ch = 0x2039;
611 break;
612 case 0x8c:
613 ch = 0x0152;
614 break;
615/*
616 case 0x8e:
617 ch = 0x017d;
618 break;
619*/
620 case 0x91:
621 ch = 0x2018;
622 break;
623 case 0x92:
624 ch = 0x2019;
625 break;
626 case 0x93:
627 ch = 0x201c;
628 break;
629 case 0x94:
630 ch = 0x201d;
631 break;
632 case 0x95:
633 ch = 0x2022;
634 break;
635 case 0x96:
636 ch = 0x2013;
637 break;
638 case 0x97:
639 ch = 0x2014;
640 break;
641 case 0x98:
642 ch = 0x02dc;
643 break;
644 case 0x99:
645 ch = 0x2122;
646 break;
647 case 0x9a:
648 ch = 0x0161;
649 break;
650 case 0x9b:
651 ch = 0x203a;
652 break;
653 case 0x9c:
654 ch = 0x0153;
655 break;
656 case 0x9e:
657 ch = 0x017e;
658 break;
659 case 0x9f:
660 ch = 0x0178;
661 break;
662 case 0x18:
663 ch = 0x2026;
664 break;
665 case 0x19:
666 ch = 0x2007;
667 break;
668 case 0x8d:
669 ch = 0x2662;
670 break;
671 case 0x8e:
672 ch = 0x2663;
673 break;
674 case 0x8f:
675 ch = 0x2661;
676 break;
677 case 0x90:
678 ch = 0x2660;
679 break;
680 default:
681 break;
682 }
683}
684#endif
diff --git a/noncore/apps/opie-reader/CFilter.h b/noncore/apps/opie-reader/CFilter.h
index 8cfd7eb..2d0c30f 100644
--- a/noncore/apps/opie-reader/CFilter.h
+++ b/noncore/apps/opie-reader/CFilter.h
@@ -266,4 +266,22 @@ class PeanutFormatter : public CFilter
266 virtual ~PeanutFormatter() {} 266 virtual ~PeanutFormatter() {}
267 virtual void getch(tchar& ch, CStyle& sty); 267 virtual void getch(tchar& ch, CStyle& sty);
268}; 268};
269
270class OnePara : public CFilter
271{
272 tchar m_lastchar;
273 public:
274 OnePara() : m_lastchar(0) {}
275 virtual ~OnePara() {}
276 virtual void getch(tchar& ch, CStyle& sty);
277};
278
279#ifdef REPALM
280class repalm : public CFilter
281{
282 public:
283 virtual ~repalm() {}
284 virtual void getch(tchar& ch, CStyle& sty);
285};
286#endif
269#endif 287#endif
diff --git a/noncore/apps/opie-reader/Filedata.h b/noncore/apps/opie-reader/Filedata.h
new file mode 100644
index 0000000..f920238
--- a/dev/null
+++ b/noncore/apps/opie-reader/Filedata.h
@@ -0,0 +1,51 @@
1#ifndef __FILEDATA_H
2#define __FILEDATA_H
3
4#include <time.h>
5
6class CFiledata
7{
8 unsigned char* data;
9 bool m_own;
10 public:
11 CFiledata(tchar* d)
12 {
13 data = (unsigned char*)d;
14 m_own = false;
15 }
16 CFiledata(time_t dt, tchar* nm)
17 {
18 int nlen = ustrlen(nm)+1;
19 data = new unsigned char[sizeof(time_t)+sizeof(tchar)*nlen];
20 *((time_t *)data) = dt;
21 memcpy(data+sizeof(time_t), nm, sizeof(tchar)*nlen);
22 m_own = true;
23 }
24 ~CFiledata()
25 {
26 if (m_own && data != NULL)
27 {
28 delete [] data;
29 qDebug("~Filedata: deleting");
30 }
31 else
32 {
33 qDebug("~Filedata: not deleting");
34 }
35 }
36 tchar* name() const { return (tchar*)(data+sizeof(time_t)); }
37 time_t date() { return *((time_t *)data); }
38 void setdate(time_t _t) { *((time_t *)data) = _t; }
39 unsigned char* content() { return data; }
40 size_t length() const { return sizeof(time_t)+sizeof(tchar)*(ustrlen(name())+1); }
41 bool operator==(const CFiledata& rhs)
42 {
43 return ((length() == rhs.length()) && (memcmp(data, rhs.data, length()) == 0));
44 }
45 bool samename(const CFiledata& rhs)
46 {
47 return (ustrcmp((tchar *)(data+sizeof(time_t)),(tchar *)(rhs.data+sizeof(time_t))) == 0);
48 }
49};
50
51#endif
diff --git a/noncore/apps/opie-reader/FontControl.cpp b/noncore/apps/opie-reader/FontControl.cpp
new file mode 100644
index 0000000..f0ed98b
--- a/dev/null
+++ b/noncore/apps/opie-reader/FontControl.cpp
@@ -0,0 +1,37 @@
1#include "opie.h"
2#include "FontControl.h"
3
4bool FontControl::ChangeFont(QString& n, int tgt)
5{
6 QValueList<int>::Iterator it;
7 QFontDatabase fdb;
8 QValueList<int> sizes = fdb.pointSizes(n);
9 if (sizes.count() == 0)
10 {
11 return false;
12 }
13 else
14 {
15 m_fontname = n;
16 m_maxsize = sizes.count();
17 if (m_fontsizes != NULL) delete [] m_fontsizes;
18 m_fontsizes = new int[m_maxsize];
19 uint i = 0;
20 uint best = 0;
21 for (it = sizes.begin(); it != sizes.end(); it++)
22 {
23#ifdef OPIE
24 m_fontsizes[i] = (*it);
25#else
26 m_fontsizes[i] = (*it)/10;
27#endif
28 if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best]))
29 {
30 best = i;
31 }
32 i++;
33 }
34 m_size = best;
35 }
36 return true;
37}
diff --git a/noncore/apps/opie-reader/FontControl.h b/noncore/apps/opie-reader/FontControl.h
index d427680..02049d0 100644
--- a/noncore/apps/opie-reader/FontControl.h
+++ b/noncore/apps/opie-reader/FontControl.h
@@ -11,10 +11,11 @@ class FontControl
11 int m_size; 11 int m_size;
12 QString m_fontname; 12 QString m_fontname;
13 int m_maxsize; 13 int m_maxsize;
14 bool m_hasCourier;
14 public: 15 public:
15 FontControl(QString n = "helvetica", int size = 10) 16 FontControl(QString n = "helvetica", int size = 10)
16 : 17 :
17 m_fontsizes(NULL) 18 m_fontsizes(NULL), m_hasCourier(false)
18 { 19 {
19 ChangeFont(n, size); 20 ChangeFont(n, size);
20 } 21 }
@@ -22,11 +23,22 @@ class FontControl
22 { 23 {
23 if (m_fontsizes != NULL) delete [] m_fontsizes; 24 if (m_fontsizes != NULL) delete [] m_fontsizes;
24 } 25 }
26 void hasCourier(bool _b) { m_hasCourier = _b; }
27 bool hasCourier() { return m_hasCourier; }
25 QString name() { return m_fontname; } 28 QString name() { return m_fontname; }
26 int currentsize() { return m_fontsizes[m_size]; } 29 int currentsize() { return m_fontsizes[m_size]; }
27 int getsize(CStyle size) 30 int getsize(CStyle size)
28 { 31 {
29 return m_fontsizes[m_size+size.getFontSize()]; 32 int tgt = m_size+size.getFontSize();
33 if (tgt < 0)
34 {
35 tgt = 0;
36 }
37 if (tgt >= m_maxsize)
38 {
39 tgt = m_maxsize - 1;
40 }
41 return m_fontsizes[tgt];
30 } 42 }
31 int ascent() 43 int ascent()
32 { 44 {
@@ -86,36 +98,7 @@ class FontControl
86 { 98 {
87 return ChangeFont(n, currentsize()); 99 return ChangeFont(n, currentsize());
88 } 100 }
89 bool ChangeFont(QString& n, int tgt) 101 bool ChangeFont(QString& n, int tgt);
90 {
91 QValueList<int>::Iterator it;
92 QFontDatabase fdb;
93 QValueList<int> sizes = fdb.pointSizes(n);
94 if (sizes.count() == 0)
95 {
96 return false;
97 }
98 else
99 {
100 m_fontname = n;
101 m_maxsize = sizes.count();
102 if (m_fontsizes != NULL) delete [] m_fontsizes;
103 m_fontsizes = new int[m_maxsize];
104 uint i = 0;
105 uint best = 0;
106 for (it = sizes.begin(); it != sizes.end(); it++)
107 {
108 m_fontsizes[i] = (*it);
109 if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best]))
110 {
111 best = i;
112 }
113 i++;
114 }
115 m_size = best;
116 }
117 return true;
118 }
119}; 102};
120 103
121#endif 104#endif
diff --git a/noncore/apps/opie-reader/GraphicWin.h b/noncore/apps/opie-reader/GraphicWin.h
new file mode 100644
index 0000000..31811d2
--- a/dev/null
+++ b/noncore/apps/opie-reader/GraphicWin.h
@@ -0,0 +1,65 @@
1#ifndef __GRAPHICWIN_H
2#define __GRAPHICWIN_H
3
4#include <qscrollview.h>
5#include <qpixmap.h>
6#include <qpushbutton.h>
7#include <qlayout.h>
8
9class GraphicScroll : public QScrollView
10{
11 Q_OBJECT
12 QWidget* m_picture;
13 protected:
14 void hideEvent( QHideEvent * p)
15 {
16 m_picture->setFixedSize(1,1);
17 }
18 public:
19 GraphicScroll( QWidget *parent=0, const char *name=0, WFlags f = 0)
20 : QScrollView(parent, name, f)
21 {
22 m_picture = new QWidget(viewport());
23 addChild(m_picture);
24 }
25 void setPixmap(QPixmap& pm)
26 {
27 m_picture->setFixedSize(pm.size());
28 m_picture->setBackgroundPixmap(pm);
29 }
30/*
31 private slots:
32 void graphicClose() { emit Close(); }
33 signals:
34 void Close();
35*/
36
37};
38
39
40class GraphicWin : public QWidget
41{
42 Q_OBJECT
43
44 GraphicScroll* m_scroll;
45 signals:
46 void Closed();
47 private slots:
48 void slotClosed() { emit Closed(); }
49
50 public:
51
52 void setPixmap(QPixmap& pm) { m_scroll->setPixmap(pm); }
53 GraphicWin( QWidget *parent=0, const char *name=0, WFlags f = 0)
54 : QWidget(parent, name, f)
55 {
56 QVBoxLayout* grid = new QVBoxLayout(this);
57 m_scroll = new GraphicScroll(this);
58 QPushButton* exitButton = new QPushButton("Close", this);
59 connect(exitButton, SIGNAL( released() ), this, SLOT( slotClosed() ) );
60 grid->addWidget(m_scroll,1);
61 grid->addWidget(exitButton);
62 }
63};
64
65#endif
diff --git a/noncore/apps/opie-reader/Navigation.cpp b/noncore/apps/opie-reader/Navigation.cpp
new file mode 100644
index 0000000..7b392ba
--- a/dev/null
+++ b/noncore/apps/opie-reader/Navigation.cpp
@@ -0,0 +1,98 @@
1#include "Navigation.h"
2
3void CNavigation::saveposn(size_t posn)
4{
5// qDebug("Saved:%u [%u,%u,%u]", posn, historystart, historycurrent, historyend);
6 historycurrent = historyend = (historycurrent+1)%NAVIGATION_HISTORY_SIZE;
7 history[historycurrent] = posn;
8 if (historystart == historyend) historystart = (historystart+1)%NAVIGATION_HISTORY_SIZE;
9// qDebug("Saved:%u [%u,%u,%u]", posn, historystart, historycurrent, historyend);
10}
11
12bool CNavigation::forward(size_t& loc)
13{
14 if (historycurrent != historyend)
15 {
16 historycurrent = (historycurrent + 1)%NAVIGATION_HISTORY_SIZE;
17 loc = history[historycurrent];
18 //qDebug("Forward:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend);
19 return true;
20 }
21 else
22 {
23 return false;
24 }
25}
26
27bool CNavigation::back(size_t& loc)
28{
29 if (historyend != historystart)
30 {
31 //qDebug("Back:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend);
32 if (historycurrent == historyend && history[historycurrent] != loc)
33 {
34 historyend = (historyend+1) % NAVIGATION_HISTORY_SIZE;
35 history[historyend] = loc;
36 }
37 else
38 {
39 size_t sv = historycurrent;
40 historycurrent = (historycurrent + NAVIGATION_HISTORY_SIZE - 1) % NAVIGATION_HISTORY_SIZE;
41 if (historycurrent == historystart)
42 {
43 historycurrent = sv;
44 return false;
45 }
46 }
47 loc = history[historycurrent];
48 //qDebug("Back:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend);
49 return true;
50 }
51 else
52 {
53 return false;
54 }
55}
56
57#include <stdio.h>
58
59void CNavigation::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
60{
61 len = srclen+sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE);
62 data = new unsigned char[len];
63 unsigned char* p = data;
64 memcpy(p, src, srclen);
65 p += srclen;
66 memcpy(p, &historystart, sizeof(size_t));
67 p += sizeof(size_t);
68 memcpy(p, &historyend, sizeof(size_t));
69 p += sizeof(size_t);
70 memcpy(p, &historycurrent, sizeof(size_t));
71 p += sizeof(size_t);
72 memcpy(p, history, sizeof(size_t)*NAVIGATION_HISTORY_SIZE);
73 printf("<%u,%u,%u>\n", historystart, historyend, historycurrent);
74 for (int i = historystart; i <= historyend; i++)
75 printf("<%u> ", history[i]);
76 printf("\n");
77}
78
79void CNavigation::putSaveData(unsigned char*& src, unsigned short& srclen)
80{
81 if (srclen >= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE))
82 {
83 unsigned char* p = src;
84 memcpy(&historystart, p, sizeof(size_t));
85 p += sizeof(size_t);
86 memcpy(&historyend, p, sizeof(size_t));
87 p += sizeof(size_t);
88 memcpy(&historycurrent, p, sizeof(size_t));
89 p += sizeof(size_t);
90 memcpy(history, p, sizeof(size_t)*NAVIGATION_HISTORY_SIZE);
91 src = p + sizeof(size_t)*NAVIGATION_HISTORY_SIZE;
92 srclen -= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE);
93 }
94 printf("<%u,%u,%u>\n", historystart, historyend, historycurrent);
95 for (int i = historystart; i <= historyend; i++)
96 printf("<%u> ", history[i]);
97 printf("\n");
98}
diff --git a/noncore/apps/opie-reader/Navigation.h b/noncore/apps/opie-reader/Navigation.h
new file mode 100644
index 0000000..57fb006
--- a/dev/null
+++ b/noncore/apps/opie-reader/Navigation.h
@@ -0,0 +1,16 @@
1#include <stdlib.h>
2
3const size_t NAVIGATION_HISTORY_SIZE = 32;
4
5class CNavigation
6{
7 size_t history[NAVIGATION_HISTORY_SIZE];
8 size_t historystart, historyend, historycurrent;
9 public:
10 CNavigation() : historystart(0),historyend(0),historycurrent(0) {}
11 void saveposn(size_t posn);
12 bool forward(size_t& loc);
13 bool back(size_t& loc);
14 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen);
15 void putSaveData(unsigned char*& src, unsigned short& srclen);
16};
diff --git a/noncore/apps/opie-reader/Palm2QImage.cpp b/noncore/apps/opie-reader/Palm2QImage.cpp
new file mode 100644
index 0000000..ef88cc5
--- a/dev/null
+++ b/noncore/apps/opie-reader/Palm2QImage.cpp
@@ -0,0 +1,290 @@
1/* -*- mode: c; indent-tabs-mode: nil; -*- */
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5#include <unistd.h> /* for link */
6#include <sys/types.h>
7#include <sys/stat.h>
8#include <stdarg.h>
9
10#include <qimage.h>
11
12/***********************************************************************/
13/***********************************************************************/
14/***** *****/
15/***** Code to decode the Palm image format to JPEG *****/
16/***** *****/
17/***********************************************************************/
18/***********************************************************************/
19
20#define READ_BIGENDIAN_SHORT(p) (((p)[0] << 8)|((p)[1]))
21#define READ_BIGENDIAN_LONG(p) (((p)[0] << 24)|((p)[1] << 16)|((p)[2] << 8)|((p)[3]))
22
23#define PALM_IS_COMPRESSED_FLAG 0x8000
24#define PALM_HAS_COLORMAP_FLAG 0x4000
25#define PALM_HAS_TRANSPARENCY_FLAG 0x2000
26#define PALM_DIRECT_COLOR_FLAG 0x0400
27#define PALM_4_BYTE_FIELD_FLAG 0x0200
28
29#define PALM_COMPRESSION_SCANLINE 0x00
30#define PALM_COMPRESSION_RLE 0x01
31#define PALM_COMPRESSION_PACKBITS 0x02
32#define PALM_COMPRESSION_NONE 0xFF
33
34#define PALM_COLORMAP_SIZE 232
35
36typedef struct {
37 unsigned char red;
38 unsigned char green;
39 unsigned char blue;
40} ColorMapEntry;
41
42static ColorMapEntry Palm8BitColormap[] = {
43 { 255, 255, 255 }, { 255, 204, 255 }, { 255, 153, 255 }, { 255, 102, 255 },
44 { 255, 51, 255 }, { 255, 0, 255 }, { 255, 255, 204 }, { 255, 204, 204 },
45 { 255, 153, 204 }, { 255, 102, 204 }, { 255, 51, 204 }, { 255, 0, 204 },
46 { 255, 255, 153 }, { 255, 204, 153 }, { 255, 153, 153 }, { 255, 102, 153 },
47 { 255, 51, 153 }, { 255, 0, 153 }, { 204, 255, 255 }, { 204, 204, 255 },
48 { 204, 153, 255 }, { 204, 102, 255 }, { 204, 51, 255 }, { 204, 0, 255 },
49 { 204, 255, 204 }, { 204, 204, 204 }, { 204, 153, 204 }, { 204, 102, 204 },
50 { 204, 51, 204 }, { 204, 0, 204 }, { 204, 255, 153 }, { 204, 204, 153 },
51 { 204, 153, 153 }, { 204, 102, 153 }, { 204, 51, 153 }, { 204, 0, 153 },
52 { 153, 255, 255 }, { 153, 204, 255 }, { 153, 153, 255 }, { 153, 102, 255 },
53 { 153, 51, 255 }, { 153, 0, 255 }, { 153, 255, 204 }, { 153, 204, 204 },
54 { 153, 153, 204 }, { 153, 102, 204 }, { 153, 51, 204 }, { 153, 0, 204 },
55 { 153, 255, 153 }, { 153, 204, 153 }, { 153, 153, 153 }, { 153, 102, 153 },
56 { 153, 51, 153 }, { 153, 0, 153 }, { 102, 255, 255 }, { 102, 204, 255 },
57 { 102, 153, 255 }, { 102, 102, 255 }, { 102, 51, 255 }, { 102, 0, 255 },
58 { 102, 255, 204 }, { 102, 204, 204 }, { 102, 153, 204 }, { 102, 102, 204 },
59 { 102, 51, 204 }, { 102, 0, 204 }, { 102, 255, 153 }, { 102, 204, 153 },
60 { 102, 153, 153 }, { 102, 102, 153 }, { 102, 51, 153 }, { 102, 0, 153 },
61 { 51, 255, 255 }, { 51, 204, 255 }, { 51, 153, 255 }, { 51, 102, 255 },
62 { 51, 51, 255 }, { 51, 0, 255 }, { 51, 255, 204 }, { 51, 204, 204 },
63 { 51, 153, 204 }, { 51, 102, 204 }, { 51, 51, 204 }, { 51, 0, 204 },
64 { 51, 255, 153 }, { 51, 204, 153 }, { 51, 153, 153 }, { 51, 102, 153 },
65 { 51, 51, 153 }, { 51, 0, 153 }, { 0, 255, 255 }, { 0, 204, 255 },
66 { 0, 153, 255 }, { 0, 102, 255 }, { 0, 51, 255 }, { 0, 0, 255 },
67 { 0, 255, 204 }, { 0, 204, 204 }, { 0, 153, 204 }, { 0, 102, 204 },
68 { 0, 51, 204 }, { 0, 0, 204 }, { 0, 255, 153 }, { 0, 204, 153 },
69 { 0, 153, 153 }, { 0, 102, 153 }, { 0, 51, 153 }, { 0, 0, 153 },
70 { 255, 255, 102 }, { 255, 204, 102 }, { 255, 153, 102 }, { 255, 102, 102 },
71 { 255, 51, 102 }, { 255, 0, 102 }, { 255, 255, 51 }, { 255, 204, 51 },
72 { 255, 153, 51 }, { 255, 102, 51 }, { 255, 51, 51 }, { 255, 0, 51 },
73 { 255, 255, 0 }, { 255, 204, 0 }, { 255, 153, 0 }, { 255, 102, 0 },
74 { 255, 51, 0 }, { 255, 0, 0 }, { 204, 255, 102 }, { 204, 204, 102 },
75 { 204, 153, 102 }, { 204, 102, 102 }, { 204, 51, 102 }, { 204, 0, 102 },
76 { 204, 255, 51 }, { 204, 204, 51 }, { 204, 153, 51 }, { 204, 102, 51 },
77 { 204, 51, 51 }, { 204, 0, 51 }, { 204, 255, 0 }, { 204, 204, 0 },
78 { 204, 153, 0 }, { 204, 102, 0 }, { 204, 51, 0 }, { 204, 0, 0 },
79 { 153, 255, 102 }, { 153, 204, 102 }, { 153, 153, 102 }, { 153, 102, 102 },
80 { 153, 51, 102 }, { 153, 0, 102 }, { 153, 255, 51 }, { 153, 204, 51 },
81 { 153, 153, 51 }, { 153, 102, 51 }, { 153, 51, 51 }, { 153, 0, 51 },
82 { 153, 255, 0 }, { 153, 204, 0 }, { 153, 153, 0 }, { 153, 102, 0 },
83 { 153, 51, 0 }, { 153, 0, 0 }, { 102, 255, 102 }, { 102, 204, 102 },
84 { 102, 153, 102 }, { 102, 102, 102 }, { 102, 51, 102 }, { 102, 0, 102 },
85 { 102, 255, 51 }, { 102, 204, 51 }, { 102, 153, 51 }, { 102, 102, 51 },
86 { 102, 51, 51 }, { 102, 0, 51 }, { 102, 255, 0 }, { 102, 204, 0 },
87 { 102, 153, 0 }, { 102, 102, 0 }, { 102, 51, 0 }, { 102, 0, 0 },
88 { 51, 255, 102 }, { 51, 204, 102 }, { 51, 153, 102 }, { 51, 102, 102 },
89 { 51, 51, 102 }, { 51, 0, 102 }, { 51, 255, 51 }, { 51, 204, 51 },
90 { 51, 153, 51 }, { 51, 102, 51 }, { 51, 51, 51 }, { 51, 0, 51 },
91 { 51, 255, 0 }, { 51, 204, 0 }, { 51, 153, 0 }, { 51, 102, 0 },
92 { 51, 51, 0 }, { 51, 0, 0 }, { 0, 255, 102 }, { 0, 204, 102 },
93 { 0, 153, 102 }, { 0, 102, 102 }, { 0, 51, 102 }, { 0, 0, 102 },
94 { 0, 255, 51 }, { 0, 204, 51 }, { 0, 153, 51 }, { 0, 102, 51 },
95 { 0, 51, 51 }, { 0, 0, 51 }, { 0, 255, 0 }, { 0, 204, 0 },
96 { 0, 153, 0 }, { 0, 102, 0 }, { 0, 51, 0 }, { 17, 17, 17 },
97 { 34, 34, 34 }, { 68, 68, 68 }, { 85, 85, 85 }, { 119, 119, 119 },
98 { 136, 136, 136 }, { 170, 170, 170 }, { 187, 187, 187 }, { 221, 221, 221 },
99 { 238, 238, 238 }, { 192, 192, 192 }, { 128, 0, 0 }, { 128, 0, 128 },
100 { 0, 128, 0 }, { 0, 128, 128 }, { 0, 0, 0 }, { 0, 0, 0 },
101 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
102 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
103 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
104 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
105 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
106 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }};
107
108static ColorMapEntry Palm1BitColormap[] = {{ 255, 255, 255 }, { 0, 0, 0 }};
109
110static ColorMapEntry Palm2BitColormap[] = {
111 { 255, 255, 255 }, { 192, 192, 192 }, { 128, 128, 128 }, { 0, 0, 0 }};
112
113static ColorMapEntry Palm4BitColormap[] = {
114 { 255, 255, 255 }, { 238, 238, 238 }, { 221, 221, 221 }, { 204, 204, 204 },
115 { 187, 187, 187 }, { 170, 170, 170 }, { 153, 153, 153 }, { 136, 136, 136 },
116 { 119, 119, 119 }, { 102, 102, 102 }, { 85, 85, 85 }, { 68, 68, 68 },
117 { 51, 51, 51 }, { 34, 34, 34 }, { 17, 17, 17 }, { 0, 0, 0 }};
118
119QImage* Palm2QImage
120 (unsigned char *image_bytes_in, int byte_count_in)
121{
122 unsigned int width, height, bytes_per_row, flags, next_depth_offset;
123 unsigned int bits_per_pixel, version, transparent_index, compression_type, i, j, inval, inbit, mask, incount;
124 unsigned int palm_red_bits, palm_green_bits, palm_blue_bits;
125 unsigned char *palm_ptr, *x_ptr, *imagedata, *inbyte, *rowbuf, *lastrow,
126 *imagedatastart, *palmimage;
127 ColorMapEntry *colormap;
128
129 palmimage = image_bytes_in;
130 width = READ_BIGENDIAN_SHORT(palmimage + 0);
131 height = READ_BIGENDIAN_SHORT(palmimage + 2);
132 bytes_per_row = READ_BIGENDIAN_SHORT(palmimage + 4);
133 flags = READ_BIGENDIAN_SHORT(palmimage + 6);
134 bits_per_pixel = palmimage[8];
135 version = palmimage[9];
136 next_depth_offset = READ_BIGENDIAN_SHORT(palmimage + 10);
137 transparent_index = palmimage[12];
138 compression_type = palmimage[13];
139 /* bytes 14 and 15 are reserved by Palm and always 0 */
140
141#if 0
142 qDebug ("Palm image is %dx%d, %d bpp, version %d, flags 0x%x, compression %d",
143 width, height, bits_per_pixel, version, flags, compression_type);
144#endif
145
146 if (compression_type == PALM_COMPRESSION_PACKBITS) {
147 qDebug ("Image uses packbits compression; not yet supported");
148 return NULL;
149 } else if ((compression_type != PALM_COMPRESSION_NONE) &&
150 (compression_type != PALM_COMPRESSION_RLE) &&
151 (compression_type != PALM_COMPRESSION_SCANLINE)) {
152 qDebug ("Image uses unknown compression, code 0x%x", compression_type);
153 return NULL;
154 }
155
156 /* as of PalmOS 4.0, there are 6 different kinds of Palm pixmaps:
157
158 1, 2, or 4 bit grayscale
159 8-bit StaticColor using the Palm standard colormap
160 8-bit PseudoColor using a user-specified colormap
161 16-bit DirectColor using 5 bits for red, 6 for green, and 5 for blue
162
163 Each of these can be compressed with one of four compression schemes,
164 "RLE", "Scanline", "PackBits", or none.
165
166 We begin by constructing the colormap.
167 */
168
169 if (flags & PALM_HAS_COLORMAP_FLAG) {
170 qDebug("Palm images with custom colormaps are not currently supported.\n");
171 return NULL;
172 } else if (bits_per_pixel == 1) {
173 colormap = Palm1BitColormap;
174 imagedatastart = palmimage + 16;
175 } else if (bits_per_pixel == 2) {
176 colormap = Palm2BitColormap;
177 imagedatastart = palmimage + 16;
178 } else if (bits_per_pixel == 4) {
179 colormap = Palm4BitColormap;
180 imagedatastart = palmimage + 16;
181 } else if (bits_per_pixel == 8) {
182 colormap = Palm8BitColormap;
183 imagedatastart = palmimage + 16;
184 } else if (bits_per_pixel == 16 && (flags & PALM_DIRECT_COLOR_FLAG)) {
185 colormap = NULL;
186 palm_red_bits = palmimage[16];
187 palm_green_bits = palmimage[17];
188 palm_blue_bits = palmimage[18];
189 if (palm_blue_bits > 8 || palm_green_bits > 8 || palm_red_bits > 8) {
190 qDebug("Can't handle this format DirectColor image -- too wide in some color (%d:%d:%d)\n",
191 palm_red_bits, palm_green_bits, palm_blue_bits);
192 return NULL;
193 }
194 if (bits_per_pixel > (8 * sizeof(unsigned long))) {
195 qDebug ("Can't handle this format DirectColor image -- too many bits per pixel (%d)\n",
196 bits_per_pixel);
197 return NULL;
198 }
199 imagedatastart = palmimage + 24;
200 } else {
201 qDebug("Unknown bits-per-pixel of %d encountered.\n", bits_per_pixel);
202 return NULL;
203 }
204
205 QImage* qimage = new QImage(width, height, 16);
206
207 /* row by row, uncompress the Palm image and copy it to the JPEG buffer */
208 rowbuf = new unsigned char[bytes_per_row * width];
209 lastrow = new unsigned char[bytes_per_row * width];
210
211 for (i=0, palm_ptr = imagedatastart , x_ptr = imagedata; i < height; ++i) {
212
213 /* first, uncompress the Palm image */
214 if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_RLE)) {
215 for (j = 0; j < bytes_per_row; ) {
216 incount = *palm_ptr++;
217 inval = *palm_ptr++;
218 memset(rowbuf + j, inval, incount);
219 j += incount;
220 }
221 } else if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_SCANLINE)) {
222 for (j = 0; j < bytes_per_row; j += 8) {
223 incount = *palm_ptr++;
224 inval = ((bytes_per_row - j) < 8) ? (bytes_per_row - j) : 8;
225 for (inbit = 0; inbit < inval; inbit += 1) {
226 if (incount & (1 << (7 - inbit)))
227 rowbuf[j + inbit] = *palm_ptr++;
228 else
229 rowbuf[j + inbit] = lastrow[j + inbit];
230 }
231 }
232 memcpy (lastrow, rowbuf, bytes_per_row);
233 } else if (((flags & PALM_IS_COMPRESSED_FLAG) &&
234 (compression_type == PALM_COMPRESSION_NONE)) ||
235 (flags && PALM_IS_COMPRESSED_FLAG) == 0) {
236 memcpy (rowbuf, palm_ptr, bytes_per_row);
237 palm_ptr += bytes_per_row;
238 }
239
240 /* next, write it to the GDK bitmap */
241 if (colormap) {
242 mask = (1 << bits_per_pixel) - 1;
243 for (inbit = 8 - bits_per_pixel, inbyte = rowbuf, j = 0; j < width; ++j) {
244 inval = ((*inbyte) & (mask << inbit)) >> inbit;
245 /* correct for oddity of the 8-bit color Palm pixmap... */
246 if ((bits_per_pixel == 8) && (inval == 0xFF)) inval = 231;
247 /* now lookup the correct color and set the pixel in the GTK bitmap */
248 QRgb colour = qRgb(colormap[inval].red, colormap[inval].green, colormap[inval].blue);
249 qimage->setPixel(j, i, colour);
250 if (!inbit) {
251 ++inbyte;
252 inbit = 8 - bits_per_pixel;
253 } else {
254 inbit -= bits_per_pixel;
255 }
256 }
257 } else if (!colormap &&
258 bits_per_pixel == 16) {
259 for (inbyte = rowbuf, j = 0; j < width; ++j) {
260 inval = (inbyte[0] << 8) | inbyte[1];
261#if 0
262 qDebug ("pixel is %d,%d (%02x:%02x:%02x)",
263 j, i,
264 (inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1),
265 (inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1),
266 (inval >> 0) & ((1 << palm_blue_bits) - 1));
267#endif
268 QRgb colour = qRgb(
269 (inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1),
270 (inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1),
271 (inval >> 0) & ((1 << palm_blue_bits) - 1));
272 qimage->setPixel(j, i, colour);
273 inbyte += 2;
274 }
275 }
276 }
277
278 delete [] rowbuf;
279 delete [] lastrow;
280
281 return qimage;
282}
283
284QPixmap* hRule(int w, int h, unsigned char r, unsigned char g, unsigned char b)
285{
286// qDebug("hrule [%d, %d]", w, h);
287 QPixmap* qimage = new QPixmap(w, h);
288 qimage->fill(QColor(r,g,b));
289 return qimage;
290}
diff --git a/noncore/apps/opie-reader/Palm2QImage.h b/noncore/apps/opie-reader/Palm2QImage.h
new file mode 100644
index 0000000..3ac2d19
--- a/dev/null
+++ b/noncore/apps/opie-reader/Palm2QImage.h
@@ -0,0 +1,7 @@
1#include <qimage.h>
2#include <qpixmap.h>
3
4QImage* Palm2QImage
5(unsigned char *image_bytes_in, int byte_count_in);
6
7QPixmap* hRule(int w, int h, unsigned char r=0, unsigned char g=0, unsigned char b=0);
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp
index 7cf08e5..3995ee7 100644
--- a/noncore/apps/opie-reader/QTReader.cpp
+++ b/noncore/apps/opie-reader/QTReader.cpp
@@ -22,6 +22,7 @@
22#include <qfontdatabase.h> 22#include <qfontdatabase.h>
23#include <qpe/global.h> 23#include <qpe/global.h>
24#include <qpe/qcopenvelope_qws.h> 24#include <qpe/qcopenvelope_qws.h>
25#include "StateData.h"
25 26
26#ifdef _UNICODE 27#ifdef _UNICODE
27const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; 28const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 };
@@ -35,7 +36,7 @@ const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 };
35//const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 }; 36//const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 };
36//const int QTReader::fontsizes[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,0}; 37//const int QTReader::fontsizes[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,0};
37 38
38QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : 39QTReader::QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0) :
39 QWidget(parent, name, f), 40 QWidget(parent, name, f),
40 m_delay(100), 41 m_delay(100),
41 m_scrolldy1(0), 42 m_scrolldy1(0),
@@ -48,7 +49,9 @@ QTReader::QTReader( QWidget *parent, const char *name, WFlags f) :
48 m_fm(NULL), 49 m_fm(NULL),
49 mouseUpOn(true), 50 mouseUpOn(true),
50 m_twotouch(true), 51 m_twotouch(true),
51 m_touchone(true) 52 m_touchone(true),
53 bDoUpdates(false),
54 m_navkeys(true)
52{ 55{
53 m_overlap = 1; 56 m_overlap = 1;
54// init(); 57// init();
@@ -81,21 +84,60 @@ long QTReader::real_delay()
81 84
82void QTReader::mousePressEvent( QMouseEvent* _e ) 85void QTReader::mousePressEvent( QMouseEvent* _e )
83{ 86{
87 buffdoc.unsuspend();
84 if (_e->button() == RightButton) 88 if (_e->button() == RightButton)
85 { 89 {
86 mouseUpOn = false; 90 mouseUpOn = false;
87 if (_e->y() > height()/2) 91 if (buffdoc.hasnavigation())
88 { 92 {
89 goDown(); 93 if (_e->y() > (2*height())/3)
94 {
95 goDown();
96 }
97 else if (_e->y() < height()/3)
98 {
99 goUp();
100 }
101 else
102 {
103 if (_e->x() < width()/3)
104 {
105 size_t target = pagelocate();
106 if (buffdoc.back(target))
107 {
108 locate(target);
109 }
110 }
111 else if (_e->x() > (2*width())/3)
112 {
113 size_t target = pagelocate();
114 if (buffdoc.forward(target))
115 {
116 locate(target);
117 }
118 }
119 else
120 {
121 buffdoc.saveposn(pagelocate());
122 locate(buffdoc.getHome());
123 }
124 }
90 } 125 }
91 else 126 else
92 { 127 {
93 goUp(); 128 if (_e->y() > height()/2)
129 {
130 goDown();
131 }
132 else
133 {
134 goUp();
135 }
94 } 136 }
95 } 137 }
96} 138}
97 139
98bool QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt) 140linkType QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt)
99{ 141{
100 int lineno = 0; 142 int lineno = 0;
101 int ht = textarray[0]->lineSpacing(); 143 int ht = textarray[0]->lineSpacing();
@@ -112,10 +154,11 @@ bool QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t
112 { 154 {
113 int i; 155 int i;
114 CDrawBuffer* t = textarray[lineno]; 156 CDrawBuffer* t = textarray[lineno];
115 for (i = t->length(); t->width(i) > x; i--); 157 x = x - t->offset(width());
158 for (i = t->length(); i >= 0 && t->width(i) > x; i--);
116 offset = i; 159 offset = i;
117 } 160 }
118 return textarray[lineno]->isLink(offset, tgt); 161 return textarray[lineno]->getLinkType(offset, tgt);
119} 162}
120 163
121void QTReader::setTwoTouch(bool _b) 164void QTReader::setTwoTouch(bool _b)
@@ -124,8 +167,15 @@ void QTReader::setTwoTouch(bool _b)
124 m_twotouch = m_touchone = _b; 167 m_twotouch = m_touchone = _b;
125} 168}
126 169
170void QTReader::setContinuous(bool _b)
171{
172 buffdoc.unsuspend();
173 buffdoc.setContinuous(m_continuousDocument = _b);
174}
175
127void QTReader::mouseReleaseEvent( QMouseEvent* _e ) 176void QTReader::mouseReleaseEvent( QMouseEvent* _e )
128{ 177{
178 buffdoc.unsuspend();
129 if (_e->button() == LeftButton) 179 if (_e->button() == LeftButton)
130 { 180 {
131 if (mouseUpOn) 181 if (mouseUpOn)
@@ -141,18 +191,43 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
141 ht += textarray[++lineno]->lineSpacing(); 191 ht += textarray[++lineno]->lineSpacing();
142 } 192 }
143 size_t startpos, startoffset, tgt; 193 size_t startpos, startoffset, tgt;
144 if (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt)) 194 switch (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt))
145 { 195 {
146 if (buffdoc.hyperlink(tgt)) 196 case eLink:
147 { 197 {
148 fillbuffer(); 198 size_t saveposn = pagelocate();
149 update(); 199 if (buffdoc.hyperlink(tgt))
200 {
201 buffdoc.saveposn(saveposn);
202 fillbuffer();
203 update();
204 }
205 else
206 {
207 locate(pagelocate());
208 }
209 return;
150 } 210 }
151 else 211 case ePicture:
152 { 212 {
153 locate(pagelocate()); 213 qDebug("Picture:%x", tgt);
214 QPixmap* pm = buffdoc.getPicture(tgt);
215 if (pm != NULL)
216 {
217 emit OnShowPicture(*pm);
218 delete pm;
219 }
220 else
221 {
222 locate(pagelocate());
223 }
224 return;
154 } 225 }
155 return; 226 case eNone:
227 break;
228 default:
229 qDebug("Unknown linktype");
230 return;
156 } 231 }
157 if (m_twotouch) 232 if (m_twotouch)
158 { 233 {
@@ -212,11 +287,12 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
212 { 287 {
213 CDrawBuffer* t = textarray[lineno]; 288 CDrawBuffer* t = textarray[lineno];
214 int first = 0; 289 int first = 0;
290 int tgt = _e->x() - t->offset(width());
215 while (1) 291 while (1)
216 { 292 {
217 int i = first+1; 293 int i = first+1;
218 while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; 294 while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
219 if (t->width(i) > _e->x()) 295 if (t->width(i) > tgt)
220 { 296 {
221 wrd = toQString(t->data()+first, i - first); 297 wrd = toQString(t->data()+first, i - first);
222 break; 298 break;
@@ -282,8 +358,77 @@ void QTReader::goUp()
282 } 358 }
283} 359}
284 360
361void QTReader::NavUp()
362{
363 buffdoc.unsuspend();
364 if (buffdoc.hasnavigation())
365 {
366/*
367 size_t target = pagelocate();
368 if (buffdoc.back(target))
369 {
370 locate(target);
371 }
372*/
373 locate(buffdoc.startSection());
374 }
375 else
376 {
377 goUp();
378 }
379}
380
381void QTReader::NavDown()
382{
383 buffdoc.unsuspend();
384 if (buffdoc.hasnavigation())
385 {
386/*
387 size_t target = pagelocate();
388 if (buffdoc.forward(target))
389 {
390 locate(target);
391 }
392*/
393 dopageup(buffdoc.endSection());
394 }
395 else
396 {
397 goDown();
398 }
399}
400
401void QTReader::zoomin()
402{
403 if (m_fontControl.increasesize())
404 {
405 bool sc = m_autoScroll;
406 setfont();
407 m_autoScroll = false;
408 locate(pagelocate());
409 update();
410 m_autoScroll = sc;
411 if (m_autoScroll) autoscroll();
412 }
413}
414
415void QTReader::zoomout()
416{
417 if (m_fontControl.decreasesize())
418 {
419 bool sc = m_autoScroll;
420 m_autoScroll = false;
421 setfont();
422 locate(pagelocate());
423 update();
424 m_autoScroll = sc;
425 if (m_autoScroll) autoscroll();
426 }
427}
428
285void QTReader::keyPressEvent(QKeyEvent* e) 429void QTReader::keyPressEvent(QKeyEvent* e)
286{ 430{
431 buffdoc.unsuspend();
287 switch (e->key()) 432 switch (e->key())
288 { 433 {
289 case Key_Down: 434 case Key_Down:
@@ -357,36 +502,34 @@ void QTReader::keyPressEvent(QKeyEvent* e)
357 } 502 }
358 break; 503 break;
359 */ 504 */
360 case Key_Right: 505 case Key_Right:
361 { 506 {
362 e->accept(); 507 e->accept();
363 if (m_fontControl.increasesize()) 508 if (m_navkeys && buffdoc.hasnavigation())
364 { 509 {
365 bool sc = m_autoScroll; 510 size_t target = pagelocate();
366 setfont(); 511 if (buffdoc.forward(target))
367 m_autoScroll = false; 512 {
368 locate(pagelocate()); 513 locate(target);
369 update(); 514 }
370 m_autoScroll = sc; 515 }
371 if (m_autoScroll) autoscroll(); 516 else zoomin();
372 }
373 } 517 }
374 break; 518 break;
375 case Key_Left: 519 case Key_Left:
376 { 520 {
377 e->accept(); 521 e->accept();
378 if (m_fontControl.decreasesize()) 522 if (m_navkeys && buffdoc.hasnavigation())
379 { 523 {
380 bool sc = m_autoScroll; 524 size_t target = pagelocate();
381 m_autoScroll = false; 525 if (buffdoc.back(target))
382 setfont(); 526 {
383 locate(pagelocate()); 527 locate(target);
384 update(); 528 }
385 m_autoScroll = sc; 529 }
386 if (m_autoScroll) autoscroll(); 530 else zoomout();
387 }
388 } 531 }
389 break; 532 break;
390 case Key_Space: 533 case Key_Space:
391 case Key_Return: 534 case Key_Return:
392 { 535 {
@@ -409,6 +552,8 @@ void QTReader::setautoscroll(bool _sc)
409 } 552 }
410 else 553 else
411 { 554 {
555 CDrawBuffer* reusebuffer = textarray[numlines];
556 if (reusebuffer == NULL || reusebuffer->eof()) return;
412 m_autoScroll = true; 557 m_autoScroll = true;
413 autoscroll(); 558 autoscroll();
414 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed 559 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed
@@ -417,6 +562,7 @@ void QTReader::setautoscroll(bool _sc)
417 562
418bool QTReader::getline(CDrawBuffer *buff) 563bool QTReader::getline(CDrawBuffer *buff)
419{ 564{
565 buffdoc.unsuspend();
420 if (m_bMonoSpaced) 566 if (m_bMonoSpaced)
421 { 567 {
422 return buffdoc.getline(buff ,width(), m_charWidth); 568 return buffdoc.getline(buff ,width(), m_charWidth);
@@ -459,17 +605,16 @@ void QTReader::doscroll()
459 605
460 if (textarray[numlines] == NULL) 606 if (textarray[numlines] == NULL)
461 { 607 {
462 textarray[numlines] = new CDrawBuffer; 608 textarray[numlines] = new CDrawBuffer(&m_fontControl);
463 } 609 }
464 locnarray[numlines] = locate(); 610 locnarray[numlines] = locate();
465 int ch = getline(textarray[numlines]); 611 int ch = getline(textarray[numlines]);
466 textarray[numlines-1]->render(&p, height() - textarray[numlines]->descent() - 2, m_bMonoSpaced, m_charWidth, width()); 612 textarray[numlines-1]->render(&p, height() - textarray[numlines-1]->descent() - 2, m_bMonoSpaced, m_charWidth, width());
467 mylastpos = locate(); 613 mylastpos = locate();
468 if (!ch) 614 if (!ch)
469 { 615 {
470 m_autoScroll = false; 616 m_autoScroll = false;
471 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); 617 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
472 emit OnRedraw();
473 } 618 }
474 emit OnRedraw(); 619 emit OnRedraw();
475 } 620 }
@@ -492,78 +637,70 @@ void QTReader::setfont()
492 637
493void QTReader::drawFonts( QPainter *p ) 638void QTReader::drawFonts( QPainter *p )
494{ 639{
495 setfont(); 640 if (bDoUpdates)
496 if (m_lastwidth != width() || m_lastheight != height()) 641 {
497 { 642 qDebug("How refreshing...");
498 m_lastwidth = width(); 643 if (buffdoc.empty()) return;
499 m_lastheight = height(); 644 setfont();
500 locate(pagelocate()); 645 if (m_lastwidth != width())
501 } 646 {
502 else 647 qDebug("Not Optimised %d", m_lastwidth);
503 { 648 m_lastwidth = width();
504 649 m_lastheight = height();
505/* 650 locate(pagelocate());
506 int sl = screenlines(); 651 qDebug("Not Optimised %d", m_lastwidth);
507 if (sl < numlines) 652 }
508 { 653 else
509 //qDebug("df:<%u,%u>",sl,numlines); 654 {
510 655 if (m_lastheight > height())
511 size_t newpos = locnarray[sl]; 656 {
512 CDrawBuffer** nta = new CDrawBuffer*[sl]; 657 qDebug("Optimised < %d", numlines);
513 size_t* nla = new size_t[sl]; 658 int ypos = 0;
514 for (int i = 0; i < sl; i++) 659 for (int i = 0; i < numlines; i++)
515 { 660 {
516 nta[i] = textarray[i]; 661 if ((ypos += textarray[i]->lineSpacing()) > height())
517 nla[i] = locnarray[i]; 662 {
518 } 663 numlines = i;
519 for (int i = sl; i < numlines; i++) delete textarray[i]; 664 jumpto(locnarray[i+1]);
520 delete [] locnarray; 665 break;
521 delete [] textarray; 666 }
522 textarray = nta; 667 }
523 locnarray = nla; 668 qDebug("Optimised < %d", numlines);
524 numlines = sl; 669 m_lastheight = height();
525 jumpto(mylastpos = newpos); 670 }
526 } 671 else if (m_lastheight < height())
527 if (sl > numlines) 672 {
528 { 673 qDebug("Optimised > %d", numlines);
529 //qDebug("df:<%u,%u>",sl,numlines); 674 int ypos = 0;
530 CDrawBuffer** nta = new CDrawBuffer*[sl]; 675 for (int i = 0; i <= numlines; i++)
531 size_t* nla = new size_t[sl]; 676 {
532 for (int i = 0; i < numlines; i++) 677 ypos += textarray[i]->lineSpacing();
533 { 678 }
534 nta[i] = textarray[i]; 679 fillbuffer(numlines+1, ypos);
535 nla[i] = locnarray[i]; 680 qDebug("Optimised > %d", numlines);
536 } 681 m_lastheight = height();
537 if (locate() != mylastpos) jumpto(mylastpos); 682 }
538 for (int i = numlines; i < sl; i++) 683 if (numlines > 0)
539 { 684 {
540 nta[i] = new CDrawBuffer(&m_fontControl); 685 int ypos = textarray[0]->ascent();
541 nla[i] = locate(); 686 textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width());
542 getline(nta[i]); 687 for (int i = 1; i < numlines; i++)
543 } 688 {
544 mylastpos = locate(); 689 // ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2;
545 delete [] locnarray; 690 ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+
546 delete [] textarray; 691 (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2;
547 textarray = nta; 692 textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width());
548 locnarray = nla; 693 }
549 numlines = sl;
550 }
551*/
552 if (numlines > 0)
553 {
554 int ypos = textarray[0]->ascent();
555 textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width());
556 for (int i = 1; i < numlines; i++)
557 {
558 ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2;
559 textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width());
560
561 }
562// mylastpos = locate(); 694// mylastpos = locate();
563 } 695 }
564 } 696 }
565 m_scrolldy1 = m_scrolldy2 = 0; 697 m_scrolldy1 = m_scrolldy2 = 0;
566 emit OnRedraw(); 698 emit OnRedraw();
699 }
700 else
701 {
702 qDebug("Not so refreshing...");
703 }
567} 704}
568 705
569QString QTReader::firstword() 706QString QTReader::firstword()
@@ -607,6 +744,7 @@ void QTReader::init()
607{ 744{
608 // setCaption( "Qt Draw Demo Application" ); 745 // setCaption( "Qt Draw Demo Application" );
609 746
747 buffdoc.unsuspend();
610 setBackgroundColor( white ); 748 setBackgroundColor( white );
611// QPainter p(this); 749// QPainter p(this);
612// p.setBackgroundMode( Qt::OpaqueMode ); 750// p.setBackgroundMode( Qt::OpaqueMode );
@@ -618,14 +756,14 @@ void QTReader::init()
618 timer = new QTimer(this); 756 timer = new QTimer(this);
619 connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); 757 connect(timer, SIGNAL(timeout()), this, SLOT(doscroll()));
620// QMessageBox::information(this, "init", m_lastfile, 1); 758// QMessageBox::information(this, "init", m_lastfile, 1);
621 m_lastwidth = width();
622 m_lastheight = height();
623 setfont(); 759 setfont();
760/*
624 if (!m_lastfile.isEmpty()) 761 if (!m_lastfile.isEmpty())
625 { 762 {
626 m_string = DocLnk(m_lastfile).name(); 763 m_string = DocLnk(m_lastfile).name();
627 load_file(m_lastfile); 764 load_file(m_lastfile);
628 } 765 }
766*/
629} 767}
630 768
631// 769//
@@ -701,6 +839,7 @@ int main( int argc, tchar **argv )
701 839
702bool QTReader::locate(unsigned long n) { 840bool QTReader::locate(unsigned long n) {
703 //printf("Locate\n"); 841 //printf("Locate\n");
842 buffdoc.unsuspend();
704 buffdoc.locate(n); 843 buffdoc.locate(n);
705 // qDebug("&buffdoc.located"); 844 // qDebug("&buffdoc.located");
706 fillbuffer(); 845 fillbuffer();
@@ -719,6 +858,7 @@ unsigned int QTReader::screenlines()
719 858
720bool QTReader::fillbuffer(int reuse, int ht) 859bool QTReader::fillbuffer(int reuse, int ht)
721{ 860{
861 buffdoc.unsuspend();
722 if (buffdoc.empty()) return false; 862 if (buffdoc.empty()) return false;
723 m_scrolldy1 = m_scrolldy2 = 0; 863 m_scrolldy1 = m_scrolldy2 = 0;
724 int ch; 864 int ch;
@@ -726,7 +866,7 @@ bool QTReader::fillbuffer(int reuse, int ht)
726 unsigned int oldpagepos = locnarray[reuse]; 866 unsigned int oldpagepos = locnarray[reuse];
727 int ypos = ht; 867 int ypos = ht;
728 numlines = reuse; 868 numlines = reuse;
729 while (ypos < height()) 869 while (ypos < height() || numlines < 2)
730 { 870 {
731 if (textarray[numlines] == NULL) 871 if (textarray[numlines] == NULL)
732 { 872 {
@@ -738,7 +878,7 @@ bool QTReader::fillbuffer(int reuse, int ht)
738 numlines++; 878 numlines++;
739 if (!ch) 879 if (!ch)
740 { 880 {
741 if (numlines - reuse == 1/* && locnarray[0] == buffdoc.locate()*/) 881 if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/)
742 { 882 {
743 locate(oldpagepos); 883 locate(oldpagepos);
744 return false; 884 return false;
@@ -761,6 +901,7 @@ bool QTReader::fillbuffer(int reuse, int ht)
761 901
762void QTReader::dopagedn() 902void QTReader::dopagedn()
763{ 903{
904 buffdoc.unsuspend();
764 int skip = 0, ypos = 0; 905 int skip = 0, ypos = 0;
765 if (locate() != mylastpos) 906 if (locate() != mylastpos)
766 { 907 {
@@ -768,6 +909,7 @@ void QTReader::dopagedn()
768 jumpto(mylastpos); 909 jumpto(mylastpos);
769 } 910 }
770 CDrawBuffer* reusebuffer = textarray[numlines]; 911 CDrawBuffer* reusebuffer = textarray[numlines];
912 if (reusebuffer != NULL && reusebuffer->eof()) return;
771 if (reusebuffer != NULL) 913 if (reusebuffer != NULL)
772 { 914 {
773 for (int i = 0; i <= m_overlap; i++) 915 for (int i = 0; i <= m_overlap; i++)
@@ -777,6 +919,7 @@ void QTReader::dopagedn()
777 size_t reuselocn = locnarray[offset]; 919 size_t reuselocn = locnarray[offset];
778 textarray[offset] = textarray[i]; 920 textarray[offset] = textarray[i];
779 textarray[i] = reusebuffer; 921 textarray[i] = reusebuffer;
922 // reusebuffer->empty();
780 locnarray[offset] = locnarray[i]; 923 locnarray[offset] = locnarray[i];
781 locnarray[i] = reuselocn; 924 locnarray[i] = reuselocn;
782 ypos += textarray[i]->lineSpacing(); 925 ypos += textarray[i]->lineSpacing();
@@ -791,50 +934,73 @@ void QTReader::dopagedn()
791 934
792void QTReader::dopageup() 935void QTReader::dopageup()
793{ 936{
937 buffdoc.unsuspend();
938 dopageup(locnarray[(m_overlap < numlines) ? m_overlap : numlines/2]);
939}
940
941void QTReader::dopageup(unsigned int target)
942{
943 buffdoc.unsuspend();
794 CBufferFace<CDrawBuffer*> buff; 944 CBufferFace<CDrawBuffer*> buff;
795 CBufferFace<size_t> loc; 945 CBufferFace<size_t> loc;
796 unsigned int target = locnarray[(m_overlap < numlines) ? m_overlap : numlines/2];
797 946
798 size_t delta; 947 size_t delta, guess = 2048;
799 if (target < 2048) 948 bool ch = true;
800 { 949 int nbfl, ypos = 0;
801 delta = target;
802 jumpto(0);
803 }
804 else
805 {
806 delta = 2048;
807 950
808 jumpto(target - delta); 951 while (1)
809 952 {
810 buff[0] = new CDrawBuffer(&m_fontControl); 953 ch = true;
811 954 nbfl = 0;
812 do 955 if (target < guess)
956 {
957 delta = 0; // 0 is a flag to say don't guess any more
958 jumpto( (m_continuousDocument) ? 0 : buffdoc.startSection() );
959 }
960 else if (!m_continuousDocument && (target - guess < buffdoc.startSection()))
961 {
962 delta = 0; // 0 is a flag to say don't guess any more
963 jumpto(buffdoc.startSection());
964 }
965 else
813 { 966 {
967 delta = guess;
814 968
815 if (!getline(buff[0])) break; 969 jumpto(target - delta);
816 970
817 if (locate() > target) continue; 971 buff[0] = new CDrawBuffer(&m_fontControl);
972
973 do
974 {
975
976 if (!getline(buff[0])) break;
977
978 if (locate() > target) break;
979 }
980 while (!buffdoc.iseol());
818 } 981 }
819 while (!buffdoc.iseol()); 982
820 } 983 ypos = 0;
821 int nbfl = 0; 984 while (locate() < target)
822 985 {
823 bool ch = true; 986 if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl);
824 int ypos = 0; 987 loc[nbfl] = locate();
825 while (locate() < target) 988 ch = getline(buff[nbfl]);
826 { 989 ypos += buff[nbfl]->lineSpacing();
827 if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); 990 nbfl++;
828 loc[nbfl] = locate(); 991 if (!ch) break;
829 ch = getline(buff[nbfl]); 992 }
830 ypos += buff[nbfl]->lineSpacing(); 993 if (ypos < height() && (delta != 0))
831 nbfl++; 994 {
832 if (!ch) break; 995 for (int i = 0; i < nbfl; i++)
833 } 996 {
834 if (ypos < height()) 997 delete buff[i];
835 { 998 buff[i] = NULL;
836 locate(0); 999 }
837 return; 1000 guess <<= 1;
1001 continue;
1002 }
1003 break;
838 } 1004 }
839 if (ch) 1005 if (ch)
840 { 1006 {
@@ -845,26 +1011,36 @@ void QTReader::dopageup()
845 } 1011 }
846 ypos = 0; 1012 ypos = 0;
847 numlines = 0; 1013 numlines = 0;
848 while (ypos < height() && numlines <= nbfl-2) 1014 while (ypos < height() && numlines <= nbfl-1)
849 { 1015 {
850 ypos += buff[nbfl - numlines - 2]->lineSpacing(); 1016 ypos += buff[nbfl - numlines - 1]->lineSpacing();
851 numlines++; 1017 numlines++;
852 } 1018 }
853 --numlines; 1019 --numlines;
854 int offset = nbfl; 1020 int offset = nbfl-1;
855 offset -= numlines+1; 1021 offset -= numlines;
1022 ypos = 0;
856 for (int i = 0; i <= numlines; i++) 1023 for (int i = 0; i <= numlines; i++)
857 { 1024 {
858 delete textarray[i]; 1025 delete textarray[i];
859 textarray[i] = buff[offset+i]; 1026 textarray[i] = buff[offset+i];
860 locnarray[i] = loc[offset + i]; 1027 locnarray[i] = loc[offset + i];
1028 ypos += textarray[i]->lineSpacing();
861 } 1029 }
862 for (int i = 0; i < nbfl - numlines - 1; i++) 1030 for (int i = 0; i < nbfl - numlines - 1; i++)
863 { 1031 {
864 delete buff[i]; 1032 delete buff[i];
865 } 1033 }
866 1034
867// --numlines; 1035 while (ypos < height())
1036 {
1037 numlines++;
1038 locnarray[numlines] = locate();
1039 if (textarray[numlines] == NULL) textarray[numlines] = new CDrawBuffer(&m_fontControl);
1040 if (!getline(textarray[numlines])) break;
1041 ypos += textarray[numlines]->lineSpacing();
1042 }
1043
868 mylastpos = locate(); 1044 mylastpos = locate();
869 1045
870 update(); 1046 update();
@@ -883,9 +1059,12 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn)
883 } 1059 }
884 m_lastfile = newfile; 1060 m_lastfile = newfile;
885 // QMessageBox::information(0, "Opening...", newfile); 1061 // QMessageBox::information(0, "Opening...", newfile);
1062 m_lastwidth = width();
1063 m_lastheight = height();
886 if (buffdoc.openfile(this,newfile) == 0) 1064 if (buffdoc.openfile(this,newfile) == 0)
887 { 1065 {
888 bRC = true; 1066 bRC = true;
1067 buffdoc.setContinuous(m_continuousDocument);
889 // qDebug("buffdoc.openfile done"); 1068 // qDebug("buffdoc.openfile done");
890 locate(lcn); 1069 locate(lcn);
891 // qDebug("buffdoc.locate done"); 1070 // qDebug("buffdoc.locate done");
@@ -1012,6 +1191,7 @@ void QTReader::lineUp()
1012*/ 1191*/
1013void QTReader::lineUp() 1192void QTReader::lineUp()
1014{ 1193{
1194 buffdoc.unsuspend();
1015 CDrawBuffer* buff = textarray[numlines]; 1195 CDrawBuffer* buff = textarray[numlines];
1016 unsigned int loc; 1196 unsigned int loc;
1017 unsigned int end = locnarray[numlines]; 1197 unsigned int end = locnarray[numlines];
@@ -1019,6 +1199,7 @@ void QTReader::lineUp()
1019 if (locate() != mylastpos) jumpto(mylastpos); 1199 if (locate() != mylastpos) jumpto(mylastpos);
1020 unsigned int target = locnarray[0]; 1200 unsigned int target = locnarray[0];
1021 if (target == 0) return; 1201 if (target == 0) return;
1202 if (!m_continuousDocument && (target == buffdoc.startSection())) return;
1022 if (buffdoc.hasrandomaccess()) 1203 if (buffdoc.hasrandomaccess())
1023 { 1204 {
1024 unsigned int delta = locate()-pagelocate(); 1205 unsigned int delta = locate()-pagelocate();
@@ -1034,6 +1215,14 @@ void QTReader::lineUp()
1034 getline(buff); 1215 getline(buff);
1035 break; 1216 break;
1036 } 1217 }
1218 else if (!m_continuousDocument && (target - delta < buffdoc.startSection()))
1219 {
1220 delta = target-buffdoc.startSection();
1221 jumpto(buffdoc.startSection());
1222 loc = locate();
1223 getline(buff);
1224 break;
1225 }
1037 jumpto(target-delta); 1226 jumpto(target-delta);
1038 do 1227 do
1039 { 1228 {
@@ -1107,3 +1296,32 @@ MarkupType QTReader::PreferredMarkup()
1107 } 1296 }
1108 return m; 1297 return m;
1109} 1298}
1299
1300void QTReader::setstate(const statedata& sd)
1301{
1302 bstripcr = sd.bstripcr;
1303 btextfmt = sd.btextfmt;
1304 bautofmt = sd.bautofmt;
1305 bstriphtml = sd.bstriphtml;
1306 bpeanut = sd.bpeanut;
1307 bdehyphen = sd.bdehyphen;
1308 bonespace = sd.bonespace;
1309 bunindent = sd.bunindent;
1310 brepara = sd.brepara;
1311 bdblspce = sd.bdblspce;
1312 m_bpagemode = sd.m_bpagemode;
1313 m_navkeys = sd.m_navkeys;
1314 m_bMonoSpaced = sd.m_bMonoSpaced;
1315 bremap = sd.bremap;
1316 bmakebold = sd.bmakebold;
1317 m_continuousDocument = sd.Continuous;
1318#ifdef REPALM
1319 brepalm = sd.brepalm;
1320#endif
1321 bindenter = sd.bindenter;
1322 m_encd = sd.m_charpc;
1323 m_fontname = sd.m_fontname;
1324 setContinuous(sd.Continuous);
1325 ChangeFont(sd.m_textsize);
1326 refresh();
1327}
diff --git a/noncore/apps/opie-reader/QTReader.h b/noncore/apps/opie-reader/QTReader.h
index 78230b4..3d5f57d 100644
--- a/noncore/apps/opie-reader/QTReader.h
+++ b/noncore/apps/opie-reader/QTReader.h
@@ -13,12 +13,15 @@ class CDrawBuffer;
13//class CBuffer; 13//class CBuffer;
14class QPainter; 14class QPainter;
15class QTimer; 15class QTimer;
16class QPixmap;
17class statedata;
16 18
17class QTReader : public QWidget 19class QTReader : public QWidget
18{ 20{
19 Q_OBJECT 21 Q_OBJECT
20 22
21 friend class QTReaderApp; 23 friend class QTReaderApp;
24 void suspend() { buffdoc.suspend(); }
22 void drawText(QPainter& p, int x, int y, tchar* text); 25 void drawText(QPainter& p, int x, int y, tchar* text);
23 int m_delay; 26 int m_delay;
24 unsigned int m_overlap; 27 unsigned int m_overlap;
@@ -37,7 +40,18 @@ public:
37 QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0); 40 QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0);
38 // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0); 41 // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0);
39 ~QTReader(); 42 ~QTReader();
43 void zoomin();
44 void zoomout();
45 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
46 {
47 buffdoc.setSaveData(data, len, src, srclen);
48 }
49 void putSaveData(unsigned char*& src, unsigned short& srclen)
50 {
51 buffdoc.putSaveData(src, srclen);
52 }
40 bool empty(); 53 bool empty();
54 void setContinuous(bool _b);
41 void toggle_autoscroll(); 55 void toggle_autoscroll();
42 void setautoscroll(bool); 56 void setautoscroll(bool);
43 void disableAutoscroll() { m_autoScroll = false; } 57 void disableAutoscroll() { m_autoScroll = false; }
@@ -108,6 +122,18 @@ public:
108 bstripcr = _b; 122 bstripcr = _b;
109 setfilter(getfilter()); 123 setfilter(getfilter());
110 } 124 }
125 void setonespace(bool _b)
126 {
127 bonespace = _b;
128 setfilter(getfilter());
129 }
130#ifdef REPALM
131 void setrepalm(bool _b)
132 {
133 brepalm = _b;
134 setfilter(getfilter());
135 }
136#endif
111 void setstriphtml(bool _b) 137 void setstriphtml(bool _b)
112 { 138 {
113 bstriphtml = _b; 139 bstriphtml = _b;
@@ -190,8 +216,12 @@ public:
190 if (bdehyphen) filt->addfilter(new dehyphen); 216 if (bdehyphen) filt->addfilter(new dehyphen);
191 if (bunindent) filt->addfilter(new unindent); 217 if (bunindent) filt->addfilter(new unindent);
192 if (brepara) filt->addfilter(new repara); 218 if (brepara) filt->addfilter(new repara);
219 if (bonespace) filt->addfilter(new OnePara);
193 if (bindenter) filt->addfilter(new indenter(bindenter)); 220 if (bindenter) filt->addfilter(new indenter(bindenter));
194 if (bdblspce) filt->addfilter(new dblspce); 221 if (bdblspce) filt->addfilter(new dblspce);
222#ifdef REPALM
223 if (brepalm) filt->addfilter(new repalm);
224#endif
195 if (bremap) filt->addfilter(new remap); 225 if (bremap) filt->addfilter(new remap);
196 if (bmakebold) filt->addfilter(new embolden); 226 if (bmakebold) filt->addfilter(new embolden);
197 return filt; 227 return filt;
@@ -216,9 +246,10 @@ private slots:
216 //myoutput stuff 246 //myoutput stuff
217 private: 247 private:
218 bool mouseUpOn; 248 bool mouseUpOn;
219 bool getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt); 249 linkType getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt);
220 bool m_twotouch, m_touchone; 250 bool m_twotouch, m_touchone;
221 size_t m_startpos, m_startoffset; 251 size_t m_startpos, m_startoffset;
252 void dopageup(unsigned int);
222 void dopageup(); 253 void dopageup();
223 void lineDown(); 254 void lineDown();
224 void lineUp(); 255 void lineUp();
@@ -229,24 +260,31 @@ private slots:
229 CBufferFace<CDrawBuffer*> textarray; 260 CBufferFace<CDrawBuffer*> textarray;
230 CBufferFace<size_t> locnarray; 261 CBufferFace<size_t> locnarray;
231 unsigned int numlines; 262 unsigned int numlines;
232 bool bstripcr, btextfmt, bstriphtml, bdehyphen, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt; 263 bool bstripcr, btextfmt, bstriphtml, bdehyphen, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt, bonespace;
233 bool m_bpagemode, m_bMonoSpaced; 264#ifdef REPALM
265 bool brepalm;
266#endif
267 bool m_bpagemode, m_bMonoSpaced, m_continuousDocument;
234 unsigned char bindenter; 268 unsigned char bindenter;
235 QString m_lastfile; 269 QString m_lastfile;
236 size_t m_lastposn; 270 size_t m_lastposn;
237 public: 271 public:
272 bool bDoUpdates;
273 bool m_navkeys;
274 void NavUp();
275 void NavDown();
238 int getch() { return buffdoc.getch(); } 276 int getch() { return buffdoc.getch(); }
239 bool tight; 277 bool tight;
240 bool load_file(const char *newfile, unsigned int lcn=0); 278 bool load_file(const char *newfile, unsigned int lcn=0);
241 BuffDoc buffdoc; 279 BuffDoc buffdoc;
242 CList<Bkmk>* getbkmklist() { return buffdoc.getbkmklist(); } 280 CList<Bkmk>* getbkmklist() { return buffdoc.getbkmklist(); }
243 bool locate(unsigned long n); 281 bool locate(unsigned long n);
244 void jumpto(unsigned long n) { buffdoc.locate(n); } 282 void jumpto(unsigned long n) { buffdoc.unsuspend(); buffdoc.locate(n); }
245 unsigned long locate() { return buffdoc.locate(); } 283 unsigned long locate() { buffdoc.unsuspend(); return buffdoc.locate(); }
246 unsigned long explocate() { return buffdoc.explocate(); } 284 unsigned long explocate() { buffdoc.unsuspend(); return buffdoc.explocate(); }
247 unsigned long pagelocate() { return locnarray[0]; } 285 unsigned long pagelocate() { return locnarray[0]; }
248 unsigned long mylastpos; 286 unsigned long mylastpos;
249 void setfilter(CFilterChain *f) { buffdoc.setfilter(f); locate(pagelocate()); } 287 void setfilter(CFilterChain *f) { buffdoc.unsuspend(); buffdoc.setfilter(f); locate(pagelocate()); }
250 void restore() { jumpto(mylastpos); } 288 void restore() { jumpto(mylastpos); }
251 void goUp(); 289 void goUp();
252 void refresh() { locate(pagelocate()); } 290 void refresh() { locate(pagelocate()); }
@@ -256,17 +294,19 @@ private slots:
256 void textsize(int ts) { m_textsize = ts; } 294 void textsize(int ts) { m_textsize = ts; }
257 bool fillbuffer(int ru = 0, int ht = 0); 295 bool fillbuffer(int ru = 0, int ht = 0);
258 unsigned int screenlines(); 296 unsigned int screenlines();
259 void sizes(unsigned long& fs, unsigned long& ts) { buffdoc.sizes(fs,ts); } 297 void sizes(unsigned long& fs, unsigned long& ts) { buffdoc.unsuspend(); buffdoc.sizes(fs,ts); }
260 static const char *fonts[]; 298 static const char *fonts[];
261// unsigned int *fontsizes; 299// unsigned int *fontsizes;
262 int m_ascent, m_descent, m_linespacing; 300 int m_ascent, m_descent, m_linespacing;
263 QFontMetrics* m_fm; 301 QFontMetrics* m_fm;
264 QString firstword(); 302 QString firstword();
303 void setstate(const statedata& sd);
265 304
266 signals: 305 signals:
267 void OnRedraw(); 306 void OnRedraw();
268 void OnWordSelected(const QString&, size_t, const QString&); 307 void OnWordSelected(const QString&, size_t, const QString&);
269 void OnActionPressed(); 308 void OnActionPressed();
309 void OnShowPicture(QPixmap&);
270}; 310};
271 311
272#endif 312#endif
diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp
index 8726df7..2044b1d 100644
--- a/noncore/apps/opie-reader/QTReaderApp.cpp
+++ b/noncore/apps/opie-reader/QTReaderApp.cpp
@@ -1,5 +1,5 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. Allrights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
@@ -21,7 +21,10 @@
21#include <qclipboard.h> 21#include <qclipboard.h>
22#include <qwidgetstack.h> 22#include <qwidgetstack.h>
23#include <qpe/qpemenubar.h> 23#include <qpe/qpemenubar.h>
24#include <qpe/qpetoolbar.h> 24//#include <qpe/qpetoolbar.h>
25#include <qmenubar.h>
26#include <qtoolbar.h>
27#include <qpe/menubutton.h>
25#include <qpe/fontdatabase.h> 28#include <qpe/fontdatabase.h>
26#include <qcombobox.h> 29#include <qcombobox.h>
27#include <qpopupmenu.h> 30#include <qpopupmenu.h>
@@ -42,6 +45,7 @@
42#include <qpe/qcopenvelope_qws.h> 45#include <qpe/qcopenvelope_qws.h>
43 46
44#include "QTReader.h" 47#include "QTReader.h"
48#include "GraphicWin.h"
45#include "Bkmks.h" 49#include "Bkmks.h"
46#include "cbkmkselector.h" 50#include "cbkmkselector.h"
47#include "infowin.h" 51#include "infowin.h"
@@ -55,6 +59,16 @@
55#include "QTReaderApp.h" 59#include "QTReaderApp.h"
56#include "fileBrowser.h" 60#include "fileBrowser.h"
57#include "CDrawBuffer.h" 61#include "CDrawBuffer.h"
62#include "Filedata.h"
63#include "opie.h"
64#include "name.h"
65#include "StateData.h"
66
67#ifdef OPIE
68#define PICDIR "opie-reader/"
69#else
70#define PICDIR
71#endif
58 72
59 73
60unsigned long QTReaderApp::m_uid = 0; 74unsigned long QTReaderApp::m_uid = 0;
@@ -68,22 +82,23 @@ void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); }
68void QTReaderApp::listBkmkFiles() 82void QTReaderApp::listBkmkFiles()
69{ 83{
70 bkmkselector->clear(); 84 bkmkselector->clear();
85 bkmkselector->setText("Cancel");
71 int cnt = 0; 86 int cnt = 0;
72 DIR *d; 87 DIR *d;
73 d = opendir((const char *)Global::applicationFileName("uqtreader","")); 88 d = opendir((const char *)Global::applicationFileName(APPDIR,""));
74 89
75 while(1) 90 while(1)
76 { 91 {
77 struct dirent* de; 92 struct dirent* de;
78 struct stat buf; 93 struct stat buf;
79 de = readdir(d); 94 de = readdir(d);
80 if (de == NULL) break; 95 if (de == NULL) break;
81 96
82 if (lstat((const char *)Global::applicationFileName("uqtreader",de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) 97 if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode))
83 { 98 {
84 bkmkselector->insertItem(de->d_name); 99 bkmkselector->insertItem(de->d_name);
85 cnt++; 100 cnt++;
86 } 101 }
87 } 102 }
88 103
89 closedir(d); 104 closedir(d);
@@ -93,13 +108,21 @@ void QTReaderApp::listBkmkFiles()
93//tjw menu->hide(); 108//tjw menu->hide();
94 editBar->hide(); 109 editBar->hide();
95 if (m_fontVisible) m_fontBar->hide(); 110 if (m_fontVisible) m_fontBar->hide();
96 if (regVisible) regBar->hide(); 111 if (regVisible)
97 if (searchVisible) searchBar->hide(); 112 {
98 m_nRegAction = cRmBkmkFile; 113 Global::hideInputMethod();
114 regBar->hide();
115 }
116 if (searchVisible)
117 {
118 Global::hideInputMethod();
119 searchBar->hide();
120 }
121 m_nRegAction = cRmBkmkFile;
99 editorStack->raiseWidget( bkmkselector ); 122 editorStack->raiseWidget( bkmkselector );
100 } 123 }
101 else 124 else
102 QMessageBox::information(this, "OpieReader", "No bookmark files"); 125 QMessageBox::information(this, PROGNAME, "No bookmark files");
103} 126}
104 127
105QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) 128QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
@@ -109,23 +132,26 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
109// qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml")); 132// qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml"));
110 133
111 pBkmklist = NULL; 134 pBkmklist = NULL;
112 doc = 0; 135 pOpenlist = NULL;
136// doc = 0;
113 137
114 m_fBkmksChanged = false; 138 m_fBkmksChanged = false;
115 139
116 QString lang = getenv( "LANG" ); 140 QString lang = getenv( "LANG" );
117 141
118 m_autogenstr = "^ *[A-Z].*[a-z] *$"; 142 m_autogenstr = "^ *[A-Z].*[a-z] *$";
119 setToolBarsMovable( FALSE ); 143 setToolBarsMovable( FALSE );
120 144
121 setIcon( Resource::loadPixmap( "opie-reader/uqtreader" ) ); 145 setIcon( Resource::loadPixmap( "uqtreader" ) );
122 146
123 QPEToolBar *bar = new QPEToolBar( this ); 147// QPEToolBar *bar = new QPEToolBar( this );
148 QToolBar *bar = new QToolBar( this );
124 bar->setHorizontalStretchable( TRUE ); 149 bar->setHorizontalStretchable( TRUE );
125 addToolBar(bar, "tool",QMainWindow::Top, true); 150 addToolBar(bar, "tool",QMainWindow::Top, true);
126//tjw menu = bar; 151//tjw menu = bar;
127 152
128 QPEMenuBar *mb = new QPEMenuBar( bar ); 153 QPEMenuBar *mb = new QPEMenuBar( bar );
154// QMenuBar *mb = new QMenuBar( bar );
129 QPopupMenu *file = new QPopupMenu( this ); 155 QPopupMenu *file = new QPopupMenu( this );
130 QPopupMenu *format = new QPopupMenu( this ); 156 QPopupMenu *format = new QPopupMenu( this );
131 // QPopupMenu *edit = new QPopupMenu( this ); 157 // QPopupMenu *edit = new QPopupMenu( this );
@@ -159,6 +185,10 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
159 editorStack->addWidget(m_infoWin, get_unique_id()); 185 editorStack->addWidget(m_infoWin, get_unique_id());
160 connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) ); 186 connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) );
161 187
188 m_graphicwin = new GraphicWin(editorStack);
189 editorStack->addWidget(m_graphicwin, get_unique_id());
190 connect( m_graphicwin, SIGNAL( Closed() ), this, SLOT( infoClose() ) );
191
162// bkmkselector = new QListBox(editorStack, "Bookmarks"); 192// bkmkselector = new QListBox(editorStack, "Bookmarks");
163 bkmkselector = new CBkmkSelector(editorStack, "Bookmarks"); 193 bkmkselector = new CBkmkSelector(editorStack, "Bookmarks");
164 // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) ); 194 // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) );
@@ -175,12 +205,17 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
175 // don't need the close visible, it is redundant... 205 // don't need the close visible, it is redundant...
176 importSelector->setCloseVisible( FALSE ); 206 importSelector->setCloseVisible( FALSE );
177*/ 207*/
208 qDebug("Reading file list");
209 readfilelist();
178 210
179 reader = new QTReader( editorStack ); 211 reader = new QTReader( editorStack );
180 212
213 reader->bDoUpdates = false;
214
181 ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold); 215 ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold);
182 216
183 Config config( "uqtreader" ); 217 qDebug("Reading config");
218 Config config( APPDIR );
184 config.setGroup( "View" ); 219 config.setGroup( "View" );
185 220
186 reader->bstripcr = config.readBoolEntry( "StripCr", true ); 221 reader->bstripcr = config.readBoolEntry( "StripCr", true );
@@ -189,6 +224,7 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
189 reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); 224 reader->bstriphtml = config.readBoolEntry( "StripHtml", false );
190 reader->bpeanut = config.readBoolEntry( "Peanut", false ); 225 reader->bpeanut = config.readBoolEntry( "Peanut", false );
191 reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); 226 reader->bdehyphen = config.readBoolEntry( "Dehyphen", false );
227 reader->bonespace = config.readBoolEntry( "OneSpace", false );
192 reader->bunindent = config.readBoolEntry( "Unindent", false ); 228 reader->bunindent = config.readBoolEntry( "Unindent", false );
193 reader->brepara = config.readBoolEntry( "Repara", false ); 229 reader->brepara = config.readBoolEntry( "Repara", false );
194 reader->bdblspce = config.readBoolEntry( "DoubleSpace", false ); 230 reader->bdblspce = config.readBoolEntry( "DoubleSpace", false );
@@ -198,13 +234,18 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
198 reader->m_lastfile = config.readEntry( "LastFile", QString::null ); 234 reader->m_lastfile = config.readEntry( "LastFile", QString::null );
199 reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); 235 reader->m_lastposn = config.readNumEntry( "LastPosn", 0 );
200 reader->m_bpagemode = config.readBoolEntry( "PageMode", true ); 236 reader->m_bpagemode = config.readBoolEntry( "PageMode", true );
237 reader->m_navkeys = config.readBoolEntry( "CursorNavigation", false );
201 reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false); 238 reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false);
202 reader->m_fontname = config.readEntry( "Fontname", "helvetica" ); 239 reader->m_fontname = config.readEntry( "Fontname", "helvetica" );
203 reader->m_encd = config.readNumEntry( "Encoding", 0 ); 240 reader->m_encd = config.readNumEntry( "Encoding", 0 );
204 reader->m_charpc = config.readNumEntry( "CharSpacing", 100 ); 241 reader->m_charpc = config.readNumEntry( "CharSpacing", 100 );
205 reader->m_overlap = config.readNumEntry( "Overlap", 0 ); 242 reader->m_overlap = config.readNumEntry( "Overlap", 0 );
243#ifdef REPALM
244 reader->brepalm = config.readBoolEntry( "Repalm", true );
245#endif
206 reader->bremap = config.readBoolEntry( "Remap", true ); 246 reader->bremap = config.readBoolEntry( "Remap", true );
207 reader->bmakebold = config.readBoolEntry( "MakeBold", false ); 247 reader->bmakebold = config.readBoolEntry( "MakeBold", false );
248 reader->setContinuous(config.readBoolEntry( "Continuous", true ));
208 m_targetapp = config.readEntry( "TargetApp", QString::null ); 249 m_targetapp = config.readEntry( "TargetApp", QString::null );
209 m_targetmsg = config.readEntry( "TargetMsg", QString::null ); 250 m_targetmsg = config.readEntry( "TargetMsg", QString::null );
210 m_twoTouch = config.readBoolEntry( "TwoTouch", false); 251 m_twoTouch = config.readBoolEntry( "TwoTouch", false);
@@ -215,6 +256,8 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
215 setTwoTouch(m_twoTouch); 256 setTwoTouch(m_twoTouch);
216 257
217 258
259 connect( reader, SIGNAL( OnShowPicture(QPixmap&) ), this, SLOT( showgraphic(QPixmap&) ) );
260
218 connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) ); 261 connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) );
219 connect( reader, SIGNAL( OnActionPressed() ), this, SLOT( OnActionPressed() ) ); 262 connect( reader, SIGNAL( OnActionPressed() ), this, SLOT( OnActionPressed() ) );
220 connect( reader, SIGNAL( OnWordSelected(const QString&, size_t, const QString&) ), this, SLOT( OnWordSelected(const QString&, size_t, const QString&) ) ); 263 connect( reader, SIGNAL( OnWordSelected(const QString&, size_t, const QString&) ), this, SLOT( OnWordSelected(const QString&, size_t, const QString&) ) );
@@ -225,6 +268,11 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
225 a->addTo( bar ); 268 a->addTo( bar );
226 a->addTo( file ); 269 a->addTo( file );
227 270
271 a = new QAction( tr( "Close" ), Resource::loadPixmap( "fileclose" ), QString::null, 0, this, 0 );
272 connect( a, SIGNAL( activated() ), this, SLOT( fileClose() ) );
273// a->addTo( bar );
274 a->addTo( file );
275
228 /* 276 /*
229 a = new QAction( tr( "Revert" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); 277 a = new QAction( tr( "Revert" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
230 connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) ); 278 connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) );
@@ -250,18 +298,40 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
250 298
251 m_buttonAction[2] = new QAction( tr( "Mark" ), QString::null, 0, ag, NULL, true ); 299 m_buttonAction[2] = new QAction( tr( "Mark" ), QString::null, 0, ag, NULL, true );
252 300
301 m_buttonAction[3] = new QAction( tr( "Fullscreen" ), QString::null, 0, ag, NULL, true );
302
253 ag->addTo(spacemenu); 303 ag->addTo(spacemenu);
254 304
255 connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( buttonActionSelected(QAction*) ) ); 305 connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( buttonActionSelected(QAction*) ) );
256 306
307 file->insertSeparator();
308
309 ag = new QActionGroup(this);
310 ag->setExclusive(false);
311 QPopupMenu *encoding = new QPopupMenu(this);
312 file->insertItem( tr( "Navigation" ), encoding );
313
314 a = m_scrollButton = new QAction( tr( "Scroll" ), Resource::loadPixmap( PICDIR "panel-arrow-down" ), QString::null, 0, ag, 0, true );
257 315
258 a = m_scrollButton = new QAction( tr( "Scroll" ), Resource::loadPixmap( "opie-reader/panel-arrow-down" ), QString::null, 0, this, 0, true );
259// connect( a, SIGNAL( activated() ), this, SLOT( autoScroll() ) );
260 a->setOn(false); 316 a->setOn(false);
261 connect( a, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) ); 317 connect( a, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) );
262 file->insertSeparator();
263 a->addTo( bar ); 318 a->addTo( bar );
264 a->addTo( file ); 319
320 a = new QAction( tr( "Jump" ), QString::null, 0, ag, NULL);
321 connect( a, SIGNAL( activated() ), this, SLOT( jump() ) );
322
323 a = new QAction( tr( "Page/Line Scroll" ), QString::null, 0, ag, NULL, true );
324 connect( a, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) );
325 a->setOn(reader->m_bpagemode);
326
327 a = new QAction( tr( "Set Overlap" ), QString::null, 0, ag, NULL);
328 connect( a, SIGNAL( activated() ), this, SLOT( setoverlap() ) );
329
330 a = new QAction( tr( "Use Cursor" ), QString::null, 0, ag, NULL, true );
331 connect( a, SIGNAL( toggled(bool) ), this, SLOT( navkeys(bool) ) );
332 a->setOn(reader->m_navkeys);
333
334 ag->addTo(encoding);
265 335
266 /* 336 /*
267 a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true ); 337 a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true );
@@ -272,18 +342,6 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
272 // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); 342 // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
273 a->addTo( file ); 343 a->addTo( file );
274 */ 344 */
275 a = new QAction( tr( "Jump" ), QString::null, 0, this, NULL);
276 connect( a, SIGNAL( activated() ), this, SLOT( jump() ) );
277 a->addTo( file );
278
279 a = new QAction( tr( "Page/Line Scroll" ), QString::null, 0, this, NULL, true );
280 connect( a, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) );
281 a->setOn(reader->m_bpagemode);
282 a->addTo( file );
283
284 a = new QAction( tr( "Set Overlap" ), QString::null, 0, this, NULL);
285 connect( a, SIGNAL( activated() ), this, SLOT( setoverlap() ) );
286 a->addTo( file );
287 345
288 file->insertSeparator(); 346 file->insertSeparator();
289 347
@@ -298,7 +356,7 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
298 356
299 ag = new QActionGroup(this); 357 ag = new QActionGroup(this);
300 ag->setExclusive(false); 358 ag->setExclusive(false);
301 QPopupMenu *encoding = new QPopupMenu(this); 359 encoding = new QPopupMenu(this);
302 file->insertItem( tr( "Target" ), encoding ); 360 file->insertItem( tr( "Target" ), encoding );
303 361
304 a = new QAction( tr( "Annotation" ), QString::null, 0, ag, NULL, true ); 362 a = new QAction( tr( "Annotation" ), QString::null, 0, ag, NULL, true );
@@ -345,6 +403,17 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
345 a->addTo( file ); 403 a->addTo( file );
346 404
347 405
406 m_fullscreen = false;
407 a = m_actFullscreen = new QAction( tr( "Fullscreen" ), QString::null, 0, this, NULL, true );
408 connect( a, SIGNAL( toggled(bool) ), this, SLOT( setfullscreen(bool) ) );
409 a->setOn(m_fullscreen);
410 a->addTo( file );
411
412 a = new QAction( tr( "Continuous" ), QString::null, 0, ag, NULL, true );
413 connect( a, SIGNAL( toggled(bool) ), this, SLOT( setcontinuous(bool) ) );
414 a->setOn(reader->m_continuousDocument);
415 a->addTo( file );
416
348 a = m_bkmkAvail = new QAction( tr( "Annotation" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); 417 a = m_bkmkAvail = new QAction( tr( "Annotation" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 );
349 connect( a, SIGNAL( activated() ), this, SLOT( showAnnotation() ) ); 418 connect( a, SIGNAL( activated() ), this, SLOT( showAnnotation() ) );
350 a->addTo( bar ); 419 a->addTo( bar );
@@ -395,6 +464,10 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
395 connect( a, SIGNAL( toggled(bool) ), this, SLOT( dehyphen(bool) ) ); 464 connect( a, SIGNAL( toggled(bool) ), this, SLOT( dehyphen(bool) ) );
396// a->addTo( format ); 465// a->addTo( format );
397 466
467 a = new QAction( tr( "Single Space" ), QString::null, 0, ag, NULL, true );
468 a->setOn(reader->bonespace);
469 connect( a, SIGNAL( toggled(bool) ), this, SLOT( onespace(bool) ) );
470
398 a = new QAction( tr( "Unindent" ), QString::null, 0, ag, NULL, true ); 471 a = new QAction( tr( "Unindent" ), QString::null, 0, ag, NULL, true );
399 connect( a, SIGNAL( toggled(bool) ), this, SLOT( unindent(bool) ) ); 472 connect( a, SIGNAL( toggled(bool) ), this, SLOT( unindent(bool) ) );
400 a->setOn(reader->bunindent); 473 a->setOn(reader->bunindent);
@@ -416,7 +489,11 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
416 489
417 a = new QAction( tr( "Indent-" ), QString::null, 0, ag, NULL ); 490 a = new QAction( tr( "Indent-" ), QString::null, 0, ag, NULL );
418 connect( a, SIGNAL( activated() ), this, SLOT( indentminus() ) ); 491 connect( a, SIGNAL( activated() ), this, SLOT( indentminus() ) );
419 492#ifdef REPALM
493 a = new QAction( tr( "Repalm" ), QString::null, 0, ag, NULL, true );
494 a->setOn(reader->brepalm);
495 connect( a, SIGNAL( toggled(bool) ), this, SLOT( repalm(bool) ) );
496#endif
420 a = new QAction( tr( "Remap" ), QString::null, 0, ag, NULL, true ); 497 a = new QAction( tr( "Remap" ), QString::null, 0, ag, NULL, true );
421 connect( a, SIGNAL( toggled(bool) ), this, SLOT( remap(bool) ) ); 498 connect( a, SIGNAL( toggled(bool) ), this, SLOT( remap(bool) ) );
422 a->setOn(reader->bremap); 499 a->setOn(reader->bremap);
@@ -429,17 +506,20 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
429 506
430 // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true ); 507 // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true );
431 // a = new QAction( tr( "Zoom" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 ); 508 // a = new QAction( tr( "Zoom" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 );
432 a = new QAction( tr( "Zoom" ), QString::null, 0, this);
433 connect( a, SIGNAL( activated() ), this, SLOT( TBDzoom() ) );
434 format->insertSeparator(); 509 format->insertSeparator();
510 a = new QAction( tr( "Zoom In" ), QString::null, 0, this);
511 connect( a, SIGNAL( activated() ), this, SLOT( zoomin() ) );
512 a->addTo( format );
513 a = new QAction( tr( "Zoom Out" ), QString::null, 0, this);
514 connect( a, SIGNAL( activated() ), this, SLOT( zoomout() ) );
435 a->addTo( format ); 515 a->addTo( format );
436 // a->addTo( editBar ); 516 // a->addTo( editBar );
517 format->insertSeparator();
437 518
438 519
439 a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true ); 520 a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true );
440 connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) ); 521 connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) );
441 a->setOn(reader->m_bMonoSpaced); 522 a->setOn(reader->m_bMonoSpaced);
442 format->insertSeparator();
443 a->addTo( format ); 523 a->addTo( format );
444 524
445 a = new QAction( tr( "Set width" ), QString::null, 0, this, NULL); 525 a = new QAction( tr( "Set width" ), QString::null, 0, this, NULL);
@@ -537,10 +617,10 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
537 617
538#ifdef __ISEARCH 618#ifdef __ISEARCH
539 connect( searchEdit, SIGNAL( textChanged( const QString & ) ), 619 connect( searchEdit, SIGNAL( textChanged( const QString & ) ),
540 this, SLOT( search( const QString& ) ) ); 620 this, SLOT( search( const QString& ) ) );
541#else 621#else
542 connect( searchEdit, SIGNAL( returnPressed( ) ), 622 connect( searchEdit, SIGNAL( returnPressed( ) ),
543 this, SLOT( search( ) ) ); 623 this, SLOT( search( ) ) );
544#endif 624#endif
545 a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 ); 625 a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 );
546 connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) ); 626 connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) );
@@ -563,7 +643,7 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
563 regBar->setStretchableWidget( regEdit ); 643 regBar->setStretchableWidget( regEdit );
564 644
565 connect( regEdit, SIGNAL( returnPressed( ) ), 645 connect( regEdit, SIGNAL( returnPressed( ) ),
566 this, SLOT( do_regaction() ) ); 646 this, SLOT( do_regaction() ) );
567 647
568 a = new QAction( tr( "Do Reg" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); 648 a = new QAction( tr( "Do Reg" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 );
569 connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) ); 649 connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) );
@@ -579,45 +659,94 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
579 659
580 m_fontBar->setHorizontalStretchable( TRUE ); 660 m_fontBar->setHorizontalStretchable( TRUE );
581 661
662 qDebug("Font selector");
582 m_fontSelector = new QComboBox(false, m_fontBar); 663 m_fontSelector = new QComboBox(false, m_fontBar);
583 m_fontBar->setStretchableWidget( m_fontSelector ); 664 m_fontBar->setStretchableWidget( m_fontSelector );
584 { 665 {
585 FontDatabase f; 666 FontDatabase f;
586 QStringList flist = f.families(); 667 QStringList flist = f.families();
587 m_fontSelector->insertStringList(flist); 668 m_fontSelector->insertStringList(flist);
588 669
589 bool realfont = false; 670 bool realfont = false;
590 for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++) 671 for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++)
591 { 672 {
592 if (reader->m_fontname == *nm) 673 if (reader->m_fontname == *nm)
593 { 674 {
594 realfont = true; 675 realfont = true;
595 break; 676 }
596 } 677 if (*nm == "courier") reader->m_fontControl.hasCourier(true);
597 } 678 }
598 if (!realfont) reader->m_fontname = flist[0]; 679 if (!realfont) reader->m_fontname = flist[0];
599 } // delete the FontDatabase!!! 680 } // delete the FontDatabase!!!
600 681
601 connect( m_fontSelector, SIGNAL( activated(const QString& ) ), 682 connect( m_fontSelector, SIGNAL( activated(const QString& ) ),
602 this, SLOT( do_setfont(const QString&) ) ); 683 this, SLOT( do_setfont(const QString&) ) );
603 684
604 m_fontBar->hide(); 685 m_fontBar->hide();
605 m_fontVisible = false; 686 m_fontVisible = false;
606 687
607 connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ), 688 connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ),
608 this, SLOT( msgHandler(const QCString&, const QByteArray&) ) ); 689 this, SLOT( msgHandler(const QCString&, const QByteArray&) ) );
609
610 690
691 qDebug("Initing");
611 reader->init(); 692 reader->init();
612 if (!reader->m_lastfile.isEmpty()) 693 qDebug("Inited");
613 {
614 openFile( reader->m_lastfile );
615 doc = new DocLnk(reader->m_lastfile);
616 }
617 m_EncodingAction[reader->m_encd]->setOn(true); 694 m_EncodingAction[reader->m_encd]->setOn(true);
618 m_buttonAction[m_spaceTarget]->setOn(true); 695 m_buttonAction[m_spaceTarget]->setOn(true);
696 qDebug("fonting");
619 do_setfont(reader->m_fontname); 697 do_setfont(reader->m_fontname);
620} 698 if (!reader->m_lastfile.isEmpty())
699 {
700 qDebug("doclnk");
701 //doc = new DocLnk(reader->m_lastfile);
702 qDebug("doclnk done");
703 if (pOpenlist != NULL)
704 {
705
706/*
707 int ind = 0;
708 Bkmk* p = (*pOpenlist)[ind];
709 while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile)
710 {
711 p = (*pOpenlist)[++ind];
712 }
713*/
714 Bkmk* p = NULL;
715 for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++)
716 {
717 p = iter.pContent();
718 if (toQString(CFiledata(p->anno()).name()) == reader->m_lastfile)
719 {
720 break;
721 }
722 qDebug("Item:%s", (const char*)toQString(CFiledata(p->anno()).name()));
723 p = NULL;
724 }
725 if (p != NULL)
726 {
727 qDebug("openfrombkmk");
728 openfrombkmk(p);
729 }
730 else
731 {
732 qDebug("openfile");
733 openFile( reader->m_lastfile );
734 }
735 }
736 else
737 {
738 qDebug("Openfile 2");
739 if (!reader->m_lastfile.isNull())
740 openFile( reader->m_lastfile );
741 }
742 }
743 qApp->processEvents();
744 reader->bDoUpdates = true;
745 reader->update();
746 qDebug("finished update");
747}
748
749void QTReaderApp::suspend() { reader->suspend(); }
621 750
622void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data) 751void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data)
623{ 752{
@@ -628,242 +757,256 @@ void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data)
628 QDataStream stream( _data, IO_ReadOnly ); 757 QDataStream stream( _data, IO_ReadOnly );
629 if ( msg == "info(QString)" ) 758 if ( msg == "info(QString)" )
630 { 759 {
631 QString info; 760 QString info;
632 stream >> info; 761 stream >> info;
633 QMessageBox::information(this, "OpieReader", info); 762 QMessageBox::information(this, PROGNAME, info);
634 } 763 }
635 else if ( msg == "warn(QString)" ) 764 else if ( msg == "warn(QString)" )
636 { 765 {
637 QString info; 766 QString info;
638 stream >> info; 767 stream >> info;
639 QMessageBox::warning(this, "OpieReader", info); 768 QMessageBox::warning(this, PROGNAME, info);
640 } 769 }
641 770
642 771
643 else if ( msg == "exit()" ) 772 else if ( msg == "exit()" )
644 { 773 {
645 m_dontSave = true; 774 m_dontSave = true;
646 close(); 775 close();
647 } 776 }
648 else if ( msg == "pageDown()" ) 777 else if ( msg == "pageDown()" )
649 { 778 {
650 reader->dopagedn(); 779 reader->dopagedn();
651 } 780 }
652 else if ( msg == "pageUp()" ) 781 else if ( msg == "pageUp()" )
653 { 782 {
654 reader->dopageup(); 783 reader->dopageup();
655 } 784 }
656 else if ( msg == "lineDown()" ) 785 else if ( msg == "lineDown()" )
657 { 786 {
658 reader->lineDown(); 787 reader->lineDown();
659 } 788 }
660 else if ( msg == "lineUp()" ) 789 else if ( msg == "lineUp()" )
661 { 790 {
662 reader->lineUp(); 791 reader->lineUp();
663 } 792 }
664 else if ( msg == "showText()" ) 793 else if ( msg == "showText()" )
665 { 794 {
666 showEditTools(); 795 showEditTools();
667 } 796 }
668 else if ( msg == "File/Open(QString)" ) 797 else if ( msg == "File/Open(QString)" )
669 { 798 {
670 QString info; 799 QString info;
671 stream >> info; 800 stream >> info;
672 openFile( info ); 801 openFile( info );
673 } 802 }
674 else if ( msg == "File/Info()" ) 803 else if ( msg == "File/Info()" )
675 { 804 {
676 showinfo(); 805 showinfo();
677 } 806 }
678 else if ( msg == "File/Start Block()" ) 807 else if ( msg == "File/Start Block()" )
679 { 808 {
680 editMark(); 809 editMark();
681 } 810 }
682 else if ( msg == "File/Copy Block()" ) 811 else if ( msg == "File/Copy Block()" )
683 { 812 {
684 editCopy(); 813 editCopy();
685 } 814 }
686 else if ( msg == "File/Scroll(int)" ) 815 else if ( msg == "File/Scroll(int)" )
687 { 816 {
688 int info; 817 int info;
689 stream >> info; 818 stream >> info;
690 autoScroll(info); 819 autoScroll(info);
691 } 820 }
692 else if ( msg == "File/Jump(int)" ) 821 else if ( msg == "File/Jump(int)" )
693 { 822 {
694 int info; 823 int info;
695 stream >> info; 824 stream >> info;
696 reader->locate(info); 825 reader->locate(info);
697 } 826 }
698 else if ( msg == "File/Page/Line Scroll(int)" ) 827 else if ( msg == "File/Page/Line Scroll(int)" )
699 { 828 {
700 int info; 829 int info;
701 stream >> info; 830 stream >> info;
702 pagemode(info); 831 pagemode(info);
703 } 832 }
704 else if ( msg == "File/Set Overlap(int)" ) 833 else if ( msg == "File/Set Overlap(int)" )
705 { 834 {
706 int info; 835 int info;
707 stream >> info; 836 stream >> info;
708 reader->m_overlap = info; 837 reader->m_overlap = info;
709 } 838 }
710 else if ( msg == "File/Set Dictionary(QString)" ) 839 else if ( msg == "File/Set Dictionary(QString)" )
711 { 840 {
712 QString info; 841 QString info;
713 stream >> info; 842 stream >> info;
714 do_settarget(info); 843 do_settarget(info);
715 } 844 }
716 else if ( msg == "File/Two/One Touch(int)" ) 845 else if ( msg == "File/Two/One Touch(int)" )
717 { 846 {
718 int info; 847 int info;
719 stream >> info; 848 stream >> info;
720 setTwoTouch(info); 849 setTwoTouch(info);
721 } 850 }
722 else if ( msg == "Target/Annotation(int)" ) 851 else if ( msg == "Target/Annotation(int)" )
723 { 852 {
724 int info; 853 int info;
725 stream >> info; 854 stream >> info;
726 OnAnnotation(info); 855 OnAnnotation(info);
727 } 856 }
728 else if ( msg == "Target/Dictionary(int)" ) 857 else if ( msg == "Target/Dictionary(int)" )
729 { 858 {
730 int info; 859 int info;
731 stream >> info; 860 stream >> info;
732 OnDictionary(info); 861 OnDictionary(info);
733 } 862 }
734 else if ( msg == "Target/Clipboard(int)" ) 863 else if ( msg == "Target/Clipboard(int)" )
735 { 864 {
736 int info; 865 int info;
737 stream >> info; 866 stream >> info;
738 OnClipboard(info); 867 OnClipboard(info);
739 } 868 }
740 else if ( msg == "File/Find(QString)" ) 869 else if ( msg == "File/Find(QString)" )
741 { 870 {
742 QString info; 871 QString info;
743 stream >> info; 872 stream >> info;
744 QRegExp arg(info); 873 QRegExp arg(info);
745 size_t pos = reader->pagelocate(); 874 size_t pos = reader->pagelocate();
746 size_t start = pos; 875 size_t start = pos;
747 CDrawBuffer test(&(reader->m_fontControl)); 876 CDrawBuffer test(&(reader->m_fontControl));
748 reader->buffdoc.getline(&test,reader->width()); 877 reader->buffdoc.getline(&test,reader->width());
749 while (arg.match(toQString(test.data())) == -1) 878 while (arg.match(toQString(test.data())) == -1)
750 { 879 {
751 pos = reader->locate(); 880 pos = reader->locate();
752 if (!reader->buffdoc.getline(&test,reader->width())) 881 if (!reader->buffdoc.getline(&test,reader->width()))
753 { 882 {
754 QMessageBox::information(this, "OpieReader", QString("Can't find\n")+info); 883 QMessageBox::information(this, PROGNAME, QString("Can't find\n")+info);
755 pos = start; 884 pos = start;
756 break; 885 break;
757 } 886 }
758 } 887 }
759 reader->locate(pos); 888 reader->locate(pos);
760 } 889 }
761 else if ( msg == "Layout/Strip CR(int)" ) 890 else if ( msg == "Layout/Strip CR(int)" )
762 { 891 {
763 int info; 892 int info;
764 stream >> info; 893 stream >> info;
765 stripcr(info); 894 stripcr(info);
895 }
896 else if ( msg == "Layout/Single Space" )
897 {
898 int info;
899 stream >> info;
900 onespace(info);
901 }
902#ifdef REPALM
903 else if ( msg == "Layout/Repalm(int)" )
904 {
905 int info;
906 stream >> info;
907 repalm(info);
766 } 908 }
909#endif
767 else if ( msg == "Markup/Auto(int)" ) 910 else if ( msg == "Markup/Auto(int)" )
768 { 911 {
769 int info; 912 int info;
770 stream >> info; 913 stream >> info;
771 autofmt(info); 914 autofmt(info);
772 } 915 }
773 else if ( msg == "Markup/Text(int)" ) 916 else if ( msg == "Markup/Text(int)" )
774 { 917 {
775 int info; 918 int info;
776 stream >> info; 919 stream >> info;
777 textfmt(info); 920 textfmt(info);
778 } 921 }
779 else if ( msg == "Markup/HTML(int)" ) 922 else if ( msg == "Markup/HTML(int)" )
780 { 923 {
781 int info; 924 int info;
782 stream >> info; 925 stream >> info;
783 striphtml(info); 926 striphtml(info);
784 } 927 }
785 else if ( msg == "Markup/Peanut(int)" ) 928 else if ( msg == "Markup/Peanut(int)" )
786 { 929 {
787 int info; 930 int info;
788 stream >> info; 931 stream >> info;
789 peanut(info); 932 peanut(info);
790 } 933 }
791 else if ( msg == "Layout/Dehyphen(int)" ) 934 else if ( msg == "Layout/Dehyphen(int)" )
792 { 935 {
793 int info; 936 int info;
794 stream >> info; 937 stream >> info;
795 dehyphen(info); 938 dehyphen(info);
796 } 939 }
797 else if ( msg == "Layout/Unindent(int)" ) 940 else if ( msg == "Layout/Unindent(int)" )
798 { 941 {
799 int info; 942 int info;
800 stream >> info; 943 stream >> info;
801 unindent(info); 944 unindent(info);
802 } 945 }
803 else if ( msg == "Layout/Re-paragraph(int)" ) 946 else if ( msg == "Layout/Re-paragraph(int)" )
804 { 947 {
805 int info; 948 int info;
806 stream >> info; 949 stream >> info;
807 repara(info); 950 repara(info);
808 } 951 }
809 else if ( msg == "Layout/Double Space(int)" ) 952 else if ( msg == "Layout/Double Space(int)" )
810 { 953 {
811 int info; 954 int info;
812 stream >> info; 955 stream >> info;
813 dblspce(info); 956 dblspce(info);
814 } 957 }
815 else if ( msg == "Layout/Indent(int)" ) 958 else if ( msg == "Layout/Indent(int)" )
816 { 959 {
817 int info; 960 int info;
818 stream >> info; 961 stream >> info;
819 reader->bindenter = info; 962 reader->bindenter = info;
820 reader->setfilter(reader->getfilter()); 963 reader->setfilter(reader->getfilter());
821 } 964 }
822 else if ( msg == "Layout/Remap(int)" ) 965 else if ( msg == "Layout/Remap(int)" )
823 { 966 {
824 int info; 967 int info;
825 stream >> info; 968 stream >> info;
826 remap(info); 969 remap(info);
827 } 970 }
828 else if ( msg == "Layout/Embolden(int)" ) 971 else if ( msg == "Layout/Embolden(int)" )
829 { 972 {
830 int info; 973 int info;
831 stream >> info; 974 stream >> info;
832 embolden(info); 975 embolden(info);
833 } 976 }
834 else if ( msg == "Format/Ideogram/Word(int)" ) 977 else if ( msg == "Format/Ideogram/Word(int)" )
835 { 978 {
836 int info; 979 int info;
837 stream >> info; 980 stream >> info;
838 monospace(info); 981 monospace(info);
839 } 982 }
840 else if ( msg == "Format/Set width(int)" ) 983 else if ( msg == "Format/Set width(int)" )
841 { 984 {
842 int info; 985 int info;
843 stream >> info; 986 stream >> info;
844 reader->m_charpc = info; 987 reader->m_charpc = info;
845 reader->setfont(); 988 reader->setfont();
846 reader->refresh(); 989 reader->refresh();
847 } 990 }
848 else if ( msg == "Format/Encoding(QString)" ) 991 else if ( msg == "Format/Encoding(QString)" )
849 { 992 {
850 QString info; 993 QString info;
851 stream >> info; 994 stream >> info;
852 reader->setencoding(EncNameToInt(info)); 995 reader->setencoding(EncNameToInt(info));
853 } 996 }
854 else if ( msg == "Format/Set Font(QString,int)" ) 997 else if ( msg == "Format/Set Font(QString,int)" )
855 { 998 {
856 QString fontname; 999 QString fontname;
857 int size; 1000 int size;
858 stream >> fontname; 1001 stream >> fontname;
859 stream >> size; 1002 stream >> size;
860 setfontHelper(fontname, size); 1003 setfontHelper(fontname, size);
861 } 1004 }
862 else if ( msg == "Marks/Autogen(QString)" ) 1005 else if ( msg == "Marks/Autogen(QString)" )
863 { 1006 {
864 QString info; 1007 QString info;
865 stream >> info; 1008 stream >> info;
866 do_autogen(info); 1009 do_autogen(info);
867 } 1010 }
868} 1011}
869 1012
@@ -871,16 +1014,32 @@ ActionTypes QTReaderApp::ActNameToInt(const QString& _enc)
871{ 1014{
872 for (int i = 0; i < MAX_ACTIONS; i++) 1015 for (int i = 0; i < MAX_ACTIONS; i++)
873 { 1016 {
874 if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i; 1017 if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i;
875 } 1018 }
876 return cesAutoScroll; 1019 return cesAutoScroll;
877} 1020}
878 1021
1022void QTReaderApp::setfullscreen(bool sfs)
1023{
1024 reader->bDoUpdates = false;
1025 m_fullscreen = sfs;
1026 showEditTools();
1027 qApp->processEvents();
1028 reader->bDoUpdates = true;
1029 reader->update();
1030}
1031
1032void QTReaderApp::setcontinuous(bool sfs)
1033{
1034 reader->setContinuous(sfs);
1035 reader->refresh();
1036}
1037
879int QTReaderApp::EncNameToInt(const QString& _enc) 1038int QTReaderApp::EncNameToInt(const QString& _enc)
880{ 1039{
881 for (int i = 0; i < MAX_ENCODING; i++) 1040 for (int i = 0; i < MAX_ENCODING; i++)
882 { 1041 {
883 if (m_EncodingAction[i]->text() == _enc) return i; 1042 if (m_EncodingAction[i]->text() == _enc) return i;
884 } 1043 }
885 return 0; 1044 return 0;
886/* 1045/*
@@ -910,23 +1069,96 @@ QTReaderApp::~QTReaderApp()
910void QTReaderApp::autoScroll(bool _b) 1069void QTReaderApp::autoScroll(bool _b)
911{ 1070{
912 reader->setautoscroll(_b); 1071 reader->setautoscroll(_b);
1072 setScrollState(reader->m_autoScroll);
913} 1073}
914 1074
915void QTReaderApp::TBD() 1075void QTReaderApp::zoomin()
916{ 1076{
917 QMessageBox::information(this, "OpieReader", "Not yet implemented", 1); 1077 reader->zoomin();
918} 1078}
919 1079
920void QTReaderApp::TBDzoom() 1080void QTReaderApp::zoomout()
921{ 1081{
922 QMessageBox::information(this, "OpieReader", "Zooming is done interactively\nTry left/right cursor keys", 1); 1082 reader->zoomout();
923} 1083}
924 1084
925void QTReaderApp::clearBkmkList() 1085void QTReaderApp::clearBkmkList()
926{ 1086{
927 delete pBkmklist; 1087 delete pBkmklist;
928 pBkmklist = NULL; 1088 pBkmklist = NULL;
929 m_fBkmksChanged = false; 1089 m_fBkmksChanged = false;
1090}
1091
1092void QTReaderApp::fileClose()
1093{
1094 if (pOpenlist != NULL)
1095 {
1096 int ind = 0;
1097 Bkmk* p = (*pOpenlist)[ind];
1098 while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile)
1099 {
1100 p = (*pOpenlist)[++ind];
1101 }
1102 if (p != NULL) pOpenlist->erase(ind);
1103 switch (QMessageBox::information ( this , PROGNAME, "What do you want to delete?", "Nothing", "Marks", "Marks\nFile", 1, 0 ))
1104 {
1105 case 0:
1106 default:
1107 break;
1108 case 2:
1109 unlink((const char*)reader->m_lastfile);
1110 case 1:
1111 unlink((const char *)Global::applicationFileName(APPDIR, reader->m_string));
1112 }
1113 }
1114
1115 fileOpen2();
1116}
1117
1118void QTReaderApp::updatefileinfo()
1119{
1120 if (reader->m_string.isNull()) return;
1121 if (reader->m_lastfile.isNull()) return;
1122 tchar* nm = fromQString(reader->m_string);
1123 tchar* fl = fromQString(reader->m_lastfile);
1124 qDebug("Lastfile:%x", fl);
1125 bool notadded = true;
1126 if (pOpenlist == NULL) pOpenlist = new CList<Bkmk>;
1127 else
1128 {
1129 for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++)
1130 {
1131 if (ustrcmp(CFiledata(iter->anno()).name(), fl) == 0)
1132 {
1133 iter->value(reader->pagelocate());
1134 unsigned short dlen;
1135 unsigned char* data;
1136 CFiledata fd(iter->anno());
1137 reader->setSaveData(data, dlen, fd.content(), fd.length());
1138 qDebug("Filedata(1):%u, %u", fd.length(), dlen);
1139 // getstate(data, dlen);
1140 iter->setAnno(data, dlen);
1141 notadded = false;
1142 delete [] data;
1143 break;
1144 }
1145 }
1146 }
1147 qDebug("Added?:%x", notadded);
1148 if (notadded)
1149 {
1150 struct stat fnstat;
1151 stat((const char *)reader->m_lastfile, &fnstat);
1152 CFiledata fd(fnstat.st_mtime, fl);
1153 unsigned short dlen;
1154 unsigned char* data;
1155 reader->setSaveData(data, dlen, fd.content(), fd.length());
1156 pOpenlist->push_front(Bkmk(nm, data, dlen, reader->pagelocate()));
1157 qDebug("Filedata(2):%u, %u", fd.length(), dlen);
1158 delete [] data;
1159 }
1160 delete [] nm;
1161 delete [] fl;
930} 1162}
931 1163
932void QTReaderApp::fileOpen() 1164void QTReaderApp::fileOpen()
@@ -937,35 +1169,69 @@ void QTReaderApp::fileOpen()
937 if (regVisible) regBar->hide(); 1169 if (regVisible) regBar->hide();
938 if (searchVisible) searchBar->hide(); 1170 if (searchVisible) searchBar->hide();
939*/ 1171*/
1172 qDebug("fileOpen");
1173// if (!reader->m_lastfile.isEmpty())
1174 updatefileinfo();
1175 fileOpen2();
1176}
1177
1178void QTReaderApp::fileOpen2()
1179{
940 if (pBkmklist != NULL) 1180 if (pBkmklist != NULL)
941 { 1181 {
942 if (m_fBkmksChanged) 1182 if (m_fBkmksChanged)
943 { 1183 {
944 if (QMessageBox::warning(this, "OpieReader", "Save bookmarks?", "Save", "Don't bother") == 0) 1184 if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0)
945 savebkmks(); 1185 savebkmks();
946 } 1186 }
947 delete pBkmklist; 1187 delete pBkmklist;
948 pBkmklist = NULL; 1188 pBkmklist = NULL;
949 m_fBkmksChanged = false; 1189 m_fBkmksChanged = false;
950 } 1190 }
951 reader->disableAutoscroll(); 1191 reader->disableAutoscroll();
952/* 1192/*
953 editorStack->raiseWidget( fileSelector ); 1193 editorStack->raiseWidget( fileSelector );
954 fileSelector->reread(); 1194 fileSelector->reread();
955*/ 1195*/
956 fileBrowser* fb = new fileBrowser(this,"OpieReader",TRUE, 1196 if (pOpenlist != NULL)
957 0, 1197 {
958// WStyle_Customize | WStyle_NoBorderEx, 1198 m_nRegAction = cOpenFile;
959 "*", QFileInfo(reader->m_lastfile).dirPath(true)); 1199 listbkmk(pOpenlist, "Browse");
1200 }
1201 else
1202 {
1203 QString fn = usefilebrowser();
1204 if (!fn.isEmpty() && QFileInfo(fn).isFile())
1205 {
1206 openFile(fn);
1207 }
1208 reader->setFocus();
1209 }
1210}
1211
1212QString QTReaderApp::usefilebrowser()
1213{
1214 fileBrowser* fb = new fileBrowser(this,"QTReader",TRUE,
1215 0,
1216 // WStyle_Customize | WStyle_NoBorderEx,
1217 "*", QFileInfo(reader->m_lastfile).dirPath(true));
960 1218
1219
1220 QString fn;
961 if (fb->exec()) 1221 if (fb->exec())
962 { 1222 {
963 QString fn(fb->fileList[0]); 1223 fn = fb->fileList[0];
964// fb->populateList();
965 if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn);
966 } 1224 }
1225 qDebug("Selected %s", (const char*)fn);
967 delete fb; 1226 delete fb;
968 reader->setFocus(); 1227 return fn;
1228}
1229
1230void QTReaderApp::showgraphic(QPixmap& pm)
1231{
1232 m_graphicwin->setPixmap(pm);
1233 editorStack->raiseWidget( m_graphicwin );
1234 m_graphicwin->setFocus();
969} 1235}
970 1236
971void QTReaderApp::showinfo() 1237void QTReaderApp::showinfo()
@@ -973,19 +1239,19 @@ void QTReaderApp::showinfo()
973 unsigned long fs, ts, pl; 1239 unsigned long fs, ts, pl;
974 if (reader->empty()) 1240 if (reader->empty())
975 { 1241 {
976 QMessageBox::information(this, "OpieReader", "No file loaded", 1); 1242 QMessageBox::information(this, PROGNAME, "No file loaded", 1);
977 } 1243 }
978 else 1244 else
979 { 1245 {
980 reader->sizes(fs,ts); 1246 reader->sizes(fs,ts);
981 pl = reader->pagelocate(); 1247 pl = reader->pagelocate();
982 m_infoWin->setFileSize(fs); 1248 m_infoWin->setFileSize(fs);
983 m_infoWin->setTextSize(ts); 1249 m_infoWin->setTextSize(ts);
984 m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts); 1250 m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts);
985 m_infoWin->setLocation(pl); 1251 m_infoWin->setLocation(pl);
986 m_infoWin->setRead((100*pl + (ts >> 1))/ts); 1252 m_infoWin->setRead((100*pl + (ts >> 1))/ts);
987 editorStack->raiseWidget( m_infoWin ); 1253 editorStack->raiseWidget( m_infoWin );
988 m_infoWin->setFocus(); 1254 m_infoWin->setFocus();
989 } 1255 }
990} 1256}
991 1257
@@ -997,13 +1263,13 @@ void QTReaderApp::addAnno(const QString& name, const QString& text, size_t posn)
997 int i; 1263 int i;
998 for (i = 0; i < name.length(); i++) 1264 for (i = 0; i < name.length(); i++)
999 { 1265 {
1000 buff[i] = name[i].unicode(); 1266 buff[i] = name[i].unicode();
1001 } 1267 }
1002 buff[i] = 0; 1268 buff[i] = 0;
1003 CBuffer buff2(text.length()+1); 1269 CBuffer buff2(text.length()+1);
1004 for (i = 0; i < text.length(); i++) 1270 for (i = 0; i < text.length(); i++)
1005 { 1271 {
1006 buff2[i] = text[i].unicode(); 1272 buff2[i] = text[i].unicode();
1007 } 1273 }
1008 buff2[i] = 0; 1274 buff2[i] = 0;
1009 pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn)); 1275 pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn));
@@ -1018,40 +1284,40 @@ void QTReaderApp::addAnno(const QString& name, const QString& text)
1018{ 1284{
1019 if (m_annoIsEditing) 1285 if (m_annoIsEditing)
1020 { 1286 {
1021 if (name.isEmpty()) 1287 if (name.isEmpty())
1022 { 1288 {
1023 QMessageBox::information(this, "OpieReader", "Need a name for the bookmark\nPlease try again", 1); 1289 QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nPlease try again", 1);
1024 } 1290 }
1025 else 1291 else
1026 { 1292 {
1027 addAnno(name, text, m_annoWin->getPosn()); 1293 addAnno(name, text, m_annoWin->getPosn());
1028 } 1294 }
1029 showEditTools(); 1295 showEditTools();
1030 } 1296 }
1031 else 1297 else
1032 { 1298 {
1033 if (m_annoWin->edited()) 1299 if (m_annoWin->edited())
1034 { 1300 {
1035 CBuffer buff(text.length()+1); 1301 CBuffer buff(text.length()+1);
1036 int i; 1302 int i;
1037 for (i = 0; i < text.length(); i++) 1303 for (i = 0; i < text.length(); i++)
1038 { 1304 {
1039 buff[i] = text[i].unicode(); 1305 buff[i] = text[i].unicode();
1040 } 1306 }
1041 buff[i] = 0; 1307 buff[i] = 0;
1042 m_fBkmksChanged = true; 1308 m_fBkmksChanged = true;
1043 m_anno->setAnno(buff.data()); 1309 m_anno->setAnno(buff.data());
1044 } 1310 }
1045 bool found = findNextBookmark(m_anno->value()+1); 1311 bool found = findNextBookmark(m_anno->value()+1);
1046 if (found) 1312 if (found)
1047 { 1313 {
1048 m_annoWin->setName(toQString(m_anno->name())); 1314 m_annoWin->setName(toQString(m_anno->name()));
1049 m_annoWin->setAnno(toQString(m_anno->anno())); 1315 m_annoWin->setAnno(toQString(m_anno->anno()));
1050 } 1316 }
1051 else 1317 else
1052 { 1318 {
1053 showEditTools(); 1319 showEditTools();
1054 } 1320 }
1055 } 1321 }
1056} 1322}
1057 1323
@@ -1060,15 +1326,15 @@ bool QTReaderApp::findNextBookmark(size_t start)
1060 bool found = false; 1326 bool found = false;
1061 for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++) 1327 for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++)
1062 { 1328 {
1063 if (iter->value() >= start) 1329 if (iter->value() >= start)
1064 { 1330 {
1065 if (iter->value() < reader->locate()) 1331 if (iter->value() < reader->locate())
1066 { 1332 {
1067 found = true; 1333 found = true;
1068 m_anno = iter.pContent(); 1334 m_anno = iter.pContent();
1069 } 1335 }
1070 break; 1336 break;
1071 } 1337 }
1072 } 1338 }
1073 return found; 1339 return found;
1074} 1340}
@@ -1077,16 +1343,17 @@ void QTReaderApp::addanno()
1077{ 1343{
1078 if (reader->empty()) 1344 if (reader->empty())
1079 { 1345 {
1080 QMessageBox::information(this, "OpieReader", "No file loaded", 1); 1346 QMessageBox::information(this, PROGNAME, "No file loaded", 1);
1081 } 1347 }
1082 else 1348 else
1083 { 1349 {
1084 m_annoWin->setName(""); 1350 m_annoWin->setName("");
1085 m_annoWin->setAnno(""); 1351 m_annoWin->setAnno("");
1086 m_annoWin->setPosn(reader->pagelocate()); 1352 m_annoWin->setPosn(reader->pagelocate());
1087 m_annoIsEditing = true; 1353 m_annoIsEditing = true;
1088 editorStack->raiseWidget( m_annoWin ); 1354 editorStack->raiseWidget( m_annoWin );
1089 m_annoWin->setFocus(); 1355 Global::showInputMethod();
1356 m_annoWin->setFocus();
1090 } 1357 }
1091} 1358}
1092 1359
@@ -1116,34 +1383,44 @@ void QTReaderApp::editMark()
1116 1383
1117void QTReaderApp::editCopy() 1384void QTReaderApp::editCopy()
1118{ 1385{
1119 QClipboard* cb = QApplication::clipboard(); 1386 QClipboard* cb = QApplication::clipboard();
1120 QString text; 1387 QString text;
1121 int ch; 1388 int ch;
1122 unsigned long currentpos = reader->pagelocate(); 1389 unsigned long currentpos = reader->pagelocate();
1123 unsigned long endpos = reader->locate(); 1390 unsigned long endpos = reader->locate();
1124 reader->jumpto(m_savedpos); 1391 reader->jumpto(m_savedpos);
1125 while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF) 1392 while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF)
1126 { 1393 {
1127 text += ch; 1394 text += ch;
1128 } 1395 }
1129 cb->setText(text); 1396 cb->setText(text);
1130 reader->locate(currentpos); 1397 reader->locate(currentpos);
1131} 1398}
1132 1399
1133void QTReaderApp::pageup() 1400void QTReaderApp::pageup()
1134{ 1401{
1135 reader->goUp(); 1402 reader->NavUp();
1136} 1403}
1137 1404
1138void QTReaderApp::pagedn() 1405void QTReaderApp::pagedn()
1139{ 1406{
1140 reader->goDown(); 1407 reader->NavDown();
1141} 1408}
1142 1409
1143void QTReaderApp::stripcr(bool _b) 1410void QTReaderApp::stripcr(bool _b)
1144{ 1411{
1145 reader->setstripcr(_b); 1412 reader->setstripcr(_b);
1146} 1413}
1414void QTReaderApp::onespace(bool _b)
1415{
1416 reader->setonespace(_b);
1417}
1418#ifdef REPALM
1419void QTReaderApp::repalm(bool _b)
1420{
1421 reader->setrepalm(_b);
1422}
1423#endif
1147void QTReaderApp::remap(bool _b) 1424void QTReaderApp::remap(bool _b)
1148{ 1425{
1149 reader->setremap(_b); 1426 reader->setremap(_b);
@@ -1188,7 +1465,10 @@ void QTReaderApp::pagemode(bool _b)
1188{ 1465{
1189 reader->setpagemode(_b); 1466 reader->setpagemode(_b);
1190} 1467}
1191 1468void QTReaderApp::navkeys(bool _b)
1469{
1470 reader->m_navkeys = _b;
1471}
1192void QTReaderApp::monospace(bool _b) 1472void QTReaderApp::monospace(bool _b)
1193{ 1473{
1194 reader->setmono(_b); 1474 reader->setmono(_b);
@@ -1216,8 +1496,8 @@ void QTReaderApp::settarget()
1216{ 1496{
1217 m_nRegAction = cSetTarget; 1497 m_nRegAction = cSetTarget;
1218 QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp) 1498 QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp)
1219 + "/" 1499 + "/"
1220 + ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg); 1500 + ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg);
1221 regEdit->setText(text); 1501 regEdit->setText(text);
1222 do_regedit(); 1502 do_regedit();
1223} 1503}
@@ -1228,10 +1508,10 @@ void QTReaderApp::do_overlap(const QString& lcn)
1228 unsigned long ulcn = lcn.toULong(&ok); 1508 unsigned long ulcn = lcn.toULong(&ok);
1229 if (ok) 1509 if (ok)
1230 { 1510 {
1231 reader->m_overlap = ulcn; 1511 reader->m_overlap = ulcn;
1232 } 1512 }
1233 else 1513 else
1234 QMessageBox::information(this, "OpieReader", "Must be a number"); 1514 QMessageBox::information(this, PROGNAME, "Must be a number");
1235} 1515}
1236 1516
1237void QTReaderApp::do_mono(const QString& lcn) 1517void QTReaderApp::do_mono(const QString& lcn)
@@ -1240,13 +1520,13 @@ void QTReaderApp::do_mono(const QString& lcn)
1240 unsigned long ulcn = lcn.toULong(&ok); 1520 unsigned long ulcn = lcn.toULong(&ok);
1241 if (ok) 1521 if (ok)
1242 { 1522 {
1243 reader->m_charpc = ulcn; 1523 reader->m_charpc = ulcn;
1244 reader->setfont(); 1524 reader->setfont();
1245 reader->refresh(); 1525 reader->refresh();
1246// reader->setmono(true); 1526 //reader->setmono(true);
1247 } 1527 }
1248 else 1528 else
1249 QMessageBox::information(this, "OpieReader", "Must be a number"); 1529 QMessageBox::information(this, PROGNAME, "Must be a number");
1250} 1530}
1251 1531
1252/* 1532/*
@@ -1264,6 +1544,7 @@ void QTReaderApp::editFind()
1264#ifdef __ISEARCH 1544#ifdef __ISEARCH
1265 searchStack = new QStack<searchrecord>; 1545 searchStack = new QStack<searchrecord>;
1266#endif 1546#endif
1547 Global::showInputMethod();
1267 searchBar->show(); 1548 searchBar->show();
1268 searchVisible = TRUE; 1549 searchVisible = TRUE;
1269 searchEdit->setFocus(); 1550 searchEdit->setFocus();
@@ -1291,6 +1572,7 @@ void QTReaderApp::findClose()
1291{ 1572{
1292 searchVisible = FALSE; 1573 searchVisible = FALSE;
1293 searchEdit->setText(""); 1574 searchEdit->setText("");
1575 Global::hideInputMethod();
1294 searchBar->hide(); 1576 searchBar->hide();
1295#ifdef __ISEARCH 1577#ifdef __ISEARCH
1296// searchStack = new QStack<searchrecord>; 1578// searchStack = new QStack<searchrecord>;
@@ -1308,6 +1590,7 @@ void QTReaderApp::regClose()
1308 regVisible = FALSE; 1590 regVisible = FALSE;
1309 regEdit->setText(""); 1591 regEdit->setText("");
1310 regBar->hide(); 1592 regBar->hide();
1593 Global::hideInputMethod();
1311 reader->setFocus(); 1594 reader->setFocus();
1312} 1595}
1313 1596
@@ -1318,8 +1601,17 @@ bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg)
1318#endif 1601#endif
1319{ 1602{
1320 bool ret = true; 1603 bool ret = true;
1604 unsigned long fs, ts;
1605 reader->sizes(fs,ts);
1321 size_t pos = reader->locate(); 1606 size_t pos = reader->locate();
1322 reader->buffdoc.getline(&test,reader->width()); 1607 reader->buffdoc.getline(&test,reader->width());
1608 pbar->show();
1609 pbar->resize(width(), editBar->height());
1610 pbar->reset();
1611 int lastpc = (100*pos)/ts;
1612 pbar->setProgress(lastpc);
1613 qApp->processEvents();
1614 reader->setFocus();
1323#ifdef __ISEARCH 1615#ifdef __ISEARCH
1324 while (strstr(test.data(),(const tchar*)arg) == NULL) 1616 while (strstr(test.data(),(const tchar*)arg) == NULL)
1325#else 1617#else
@@ -1331,17 +1623,28 @@ bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg)
1331#endif 1623#endif
1332 { 1624 {
1333 pos = reader->locate(); 1625 pos = reader->locate();
1626 unsigned int lcn = reader->locate();
1627 int pc = (100*pos)/ts;
1628 if (pc != lastpc)
1629 {
1630 pbar->setProgress(pc);
1631 qApp->processEvents();
1632 reader->setFocus();
1633 lastpc = pc;
1634 }
1635
1334 if (!reader->buffdoc.getline(&test,reader->width())) 1636 if (!reader->buffdoc.getline(&test,reader->width()))
1335 { 1637 {
1336 if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2) 1638 if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2)
1337 pos = searchStart; 1639 pos = searchStart;
1338 else 1640 else
1339 pos = start; 1641 pos = start;
1340 ret = false; 1642 ret = false;
1341 findClose(); 1643 findClose();
1342 break; 1644 break;
1343 } 1645 }
1344 } 1646 }
1647 pbar->hide();
1345 reader->locate(pos); 1648 reader->locate(pos);
1346 return ret; 1649 return ret;
1347} 1650}
@@ -1388,83 +1691,151 @@ void QTReaderApp::search()
1388 1691
1389void QTReaderApp::openFile( const QString &f ) 1692void QTReaderApp::openFile( const QString &f )
1390{ 1693{
1391 openFile(DocLnk(f)); 1694 qDebug("File:%s", (const char*)f);
1392} 1695// openFile(DocLnk(f));
1393 1696//}
1394void QTReaderApp::openFile( const DocLnk &f ) 1697//
1395{ 1698//void QTReaderApp::openFile( const DocLnk &f )
1699//{
1396 clear(); 1700 clear();
1397 FileManager fm; 1701 QFileInfo fm(f);
1398 if ( fm.exists( f ) ) 1702 if ( fm.exists() )
1399 { 1703 {
1400// QMessageBox::information(0, "Progress", "Calling fileNew()"); 1704// QMessageBox::information(0, "Progress", "Calling fileNew()");
1401 1705
1402 clear(); 1706 if (fm.extension( FALSE ) == "desktop")
1707 {
1708 DocLnk d(f);
1709 QFileInfo fnew(d.file());
1710 fm = fnew;
1711 if (!fm.exists()) return;
1712 }
1403 1713
1404 // editorStack->raiseWidget( reader ); 1714 clear();
1405
1406 // reader->setFocus();
1407
1408 // QMessageBox::information(0, "DocLnk", "Begin");
1409 doc = new DocLnk(f);
1410 // QMessageBox::information(0, "DocLnk done", doc->file());
1411 // QMessageBox::information(0, "Progress", "Calling setText()");
1412 // QMessageBox::information(0, "Progress", "Textset");
1413 1715
1414 // updateCaption(); 1716 reader->setText(fm.baseName(), fm.absFilePath());
1415 showEditTools(); 1717 showEditTools();
1416 reader->setText(doc->name(), doc->file());
1417 readbkmks(); 1718 readbkmks();
1418 } 1719 }
1419 else 1720 else
1420 { 1721 {
1421 QMessageBox::information(this, "OpieReader", "File does not exist"); 1722 QMessageBox::information(this, PROGNAME, "File does not exist");
1723 }
1724
1725}
1726/*
1727void QTReaderApp::resizeEvent(QResizeEvent* e)
1728{
1729 if (m_fullscreen)
1730 {
1731 showNormal();
1732 showFullScreen();
1733 }
1734}
1735*/
1736void QTReaderApp::keyPressEvent(QKeyEvent* e)
1737{
1738 if (m_fullscreen)
1739 {
1740 switch(e->key())
1741 {
1742 case Key_Escape:
1743 m_actFullscreen->setOn(false);
1744 if (m_fullscreen)
1745 {
1746 qDebug("Fullscreen already set - remove this!");
1747 }
1748 else
1749 {
1750 m_fullscreen = false;
1751 reader->bDoUpdates = false;
1752 showEditTools();
1753 qApp->processEvents();
1754 reader->bDoUpdates = true;
1755 reader->update();
1756 }
1757 e->accept();
1758 break;
1759 default:
1760 e->ignore();
1761 }
1762 }
1763 else
1764 {
1765 e->ignore();
1422 } 1766 }
1423
1424} 1767}
1425 1768
1426void QTReaderApp::showEditTools() 1769void QTReaderApp::showEditTools()
1427{ 1770{
1428 if ( !doc ) 1771// if ( !doc )
1429 close(); 1772 //close();
1430// fileSelector->hide(); 1773 if (m_fullscreen)
1431//tjw menu->show(); 1774 {
1432 editBar->show(); 1775 editBar->hide();
1433 if ( searchVisible ) 1776 searchBar->hide();
1434 searchBar->show(); 1777 regBar->hide();
1435 if ( regVisible ) 1778 Global::hideInputMethod();
1436 regBar->show(); 1779 m_fontBar->hide();
1437 if (m_fontVisible) m_fontBar->show(); 1780 //showNormal();
1438 1781 showFullScreen();
1782 }
1783 else
1784 {
1785 qDebug("him");
1786 Global::hideInputMethod();
1787 qDebug("eb");
1788 editBar->show();
1789 if ( searchVisible )
1790 {
1791 Global::showInputMethod();
1792 searchBar->show();
1793 }
1794 if ( regVisible )
1795 {
1796 Global::showInputMethod();
1797 regBar->show();
1798 }
1799 if (m_fontVisible) m_fontBar->show();
1800 qDebug("sn");
1801 showNormal();
1802 qDebug("sm");
1803 showMaximized();
1804 //setCentralWidget(reader);
1805 }
1806
1807 qDebug("uc");
1439 updateCaption(); 1808 updateCaption();
1809 qDebug("rw");
1440 editorStack->raiseWidget( reader ); 1810 editorStack->raiseWidget( reader );
1811 qDebug("sf");
1441 reader->setFocus(); 1812 reader->setFocus();
1442} 1813}
1443/* 1814/*
1444void QTReaderApp::save() 1815void QTReaderApp::save()
1445{ 1816{
1446 if ( !doc ) 1817 if ( !doc )
1447 return; 1818 return;
1448 if ( !editor->edited() ) 1819 if ( !editor->edited() )
1449 return; 1820 return;
1450 1821
1451 QString rt = editor->text(); 1822 QString rt = editor->text();
1452 QString pt = rt; 1823 QString pt = rt;
1453 1824
1454 if ( doc->name().isEmpty() ) { 1825 if ( doc->name().isEmpty() ) {
1455 unsigned ispace = pt.find( ' ' ); 1826 unsigned ispace = pt.find( ' ' );
1456 unsigned ienter = pt.find( '\n' ); 1827 unsigned ienter = pt.find( '\n' );
1457 int i = (ispace < ienter) ? ispace : ienter; 1828 int i = (ispace < ienter) ? ispace : ienter;
1458 QString docname; 1829 QString docname;
1459 if ( i == -1 ) { 1830 if ( i == -1 ) {
1460 if ( pt.isEmpty() ) 1831 if ( pt.isEmpty() )
1461 docname = "Empty Text"; 1832 docname = "Empty Text";
1462 else 1833 else
1463 docname = pt; 1834 docname = pt;
1464 } else { 1835 } else {
1465 docname = pt.left( i ); 1836 docname = pt.left( i );
1466 } 1837 }
1467 doc->setName(docname); 1838 doc->setName(docname);
1468 } 1839 }
1469 FileManager fm; 1840 FileManager fm;
1470 fm.saveFile( *doc, rt ); 1841 fm.saveFile( *doc, rt );
@@ -1473,121 +1844,143 @@ void QTReaderApp::save()
1473 1844
1474void QTReaderApp::clear() 1845void QTReaderApp::clear()
1475{ 1846{
1476 if (doc != 0) 1847// if (doc != 0)
1477 { 1848// {
1478// QMessageBox::information(this, "QTReader", "Deleting doc", 1); 1849// QMessageBox::information(this, PROGNAME, "Deleting doc", 1);
1479 delete doc; 1850 //delete doc;
1480// QMessageBox::information(this, "QTReader", "Deleted doc", 1); 1851// QMessageBox::information(this, PROGNAME, "Deleted doc", 1);
1481 doc = 0; 1852 //doc = 0;
1482 } 1853 // }
1483 reader->clear(); 1854 reader->clear();
1484} 1855}
1485 1856
1486void QTReaderApp::updateCaption() 1857void QTReaderApp::updateCaption()
1487{ 1858{
1488 if ( !doc ) 1859// if ( !doc )
1489 setCaption( tr("OpieReader") ); 1860 //setCaption( tr("QTReader") );
1490 else { 1861// else {
1491 QString s = doc->name(); 1862 //QString s = doc->name();
1492 if ( s.isEmpty() ) 1863 //if ( s.isEmpty() )
1493 s = tr( "Unnamed" ); 1864 // s = tr( "Unnamed" );
1494 setCaption( s + " - " + tr("OpieReader") ); 1865 setCaption( reader->m_string + " - " + tr(SHORTPROGNAME) );
1495 } 1866// }
1496} 1867}
1497 1868
1498void QTReaderApp::setDocument(const QString& fileref) 1869void QTReaderApp::setDocument(const QString& fileref)
1499{ 1870{
1500 bFromDocView = TRUE; 1871 bFromDocView = TRUE;
1501//QMessageBox::information(0, "setDocument", fileref); 1872//QMessageBox::information(0, "setDocument", fileref);
1502 openFile(DocLnk(fileref)); 1873 openFile(fileref);
1503// showEditTools(); 1874// showEditTools();
1504} 1875}
1505 1876
1506void QTReaderApp::closeEvent( QCloseEvent *e ) 1877void QTReaderApp::closeEvent( QCloseEvent *e )
1507{ 1878{
1508 if (m_dontSave) 1879 if (m_fullscreen)
1509 { 1880 {
1510 e->accept(); 1881 m_fullscreen = false;
1882 showEditTools();
1883 e->accept();
1884 }
1885 else if (m_dontSave)
1886 {
1887 e->accept();
1511 } 1888 }
1512 else 1889 else
1513 { 1890 {
1514 if (editorStack->visibleWidget() == reader) 1891 if (editorStack->visibleWidget() == reader)
1515 { 1892 {
1516 if (m_fontVisible) 1893 if (m_fontVisible)
1517 { 1894 {
1518 m_fontBar->hide(); 1895 m_fontBar->hide();
1519 m_fontVisible = false; 1896 m_fontVisible = false;
1520 } 1897 }
1521 if (regVisible) 1898 if (regVisible)
1522 { 1899 {
1523 regBar->hide(); 1900 regBar->hide();
1524 regVisible = false; 1901 Global::hideInputMethod();
1525 return; 1902 regVisible = false;
1526 } 1903 return;
1527 if (searchVisible) 1904 }
1528 { 1905 if (searchVisible)
1529 searchBar->hide(); 1906 {
1530 searchVisible = false; 1907 searchBar->hide();
1531 return; 1908 Global::hideInputMethod();
1532 } 1909 searchVisible = false;
1533 if (m_fBkmksChanged && pBkmklist != NULL) 1910 return;
1534 { 1911 }
1535 if (QMessageBox::warning(this, "OpieReader", "Save bookmarks?", "Save", "Don't bother") == 0) 1912 if (m_fBkmksChanged && pBkmklist != NULL)
1536 savebkmks(); 1913 {
1537 delete pBkmklist; 1914 if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0)
1538 pBkmklist = NULL; 1915 savebkmks();
1539 m_fBkmksChanged = false; 1916 delete pBkmklist;
1540 } 1917 pBkmklist = NULL;
1541 bFromDocView = FALSE; 1918 m_fBkmksChanged = false;
1542 saveprefs(); 1919 }
1543 e->accept(); 1920 bFromDocView = FALSE;
1544 } 1921 updatefileinfo();
1545 else 1922 saveprefs();
1546 { 1923 e->accept();
1547 showEditTools(); 1924 }
1548 } 1925 else
1926 {
1927 showEditTools();
1928 }
1549 } 1929 }
1550} 1930}
1551 1931
1552void QTReaderApp::do_gotomark() 1932void QTReaderApp::do_gotomark()
1553{ 1933{
1554 m_nRegAction = cGotoBkmk; 1934 m_nRegAction = cGotoBkmk;
1555 listbkmk(); 1935 listbkmk(pBkmklist);
1556} 1936}
1557 1937
1558void QTReaderApp::do_delmark() 1938void QTReaderApp::do_delmark()
1559{ 1939{
1560 m_nRegAction = cDelBkmk; 1940 m_nRegAction = cDelBkmk;
1561 listbkmk(); 1941 listbkmk(pBkmklist);
1562} 1942}
1563 1943
1564void QTReaderApp::listbkmk() 1944void QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab)
1565{ 1945{
1566 bkmkselector->clear(); 1946 bkmkselector->clear();
1947 if (_lab.isNull())
1948 bkmkselector->setText("Cancel");
1949 else
1950 bkmkselector->setText(_lab);
1567 int cnt = 0; 1951 int cnt = 0;
1568 if (pBkmklist != NULL) 1952 if (plist != NULL)
1569 { 1953 {
1570 for (CList<Bkmk>::iterator i = pBkmklist->begin(); i != pBkmklist->end(); i++) 1954 for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++)
1571 { 1955 {
1572#ifdef _UNICODE 1956#ifdef _UNICODE
1573 bkmkselector->insertItem(toQString(i->name())); 1957 qDebug("Item:%s", (const char*)toQString(i->name()));
1958 bkmkselector->insertItem(toQString(i->name()));
1574#else 1959#else
1575 bkmkselector->insertItem(i->name()); 1960 bkmkselector->insertItem(i->name());
1576#endif 1961#endif
1577 cnt++; 1962 cnt++;
1578 } 1963 }
1579 } 1964 }
1580 if (cnt > 0) 1965 if (cnt > 0)
1581 { 1966 {
1582//tjw menu->hide(); 1967//tjw menu->hide();
1583 editBar->hide(); 1968 editBar->hide();
1584 if (m_fontVisible) m_fontBar->hide(); 1969 if (m_fontVisible) m_fontBar->hide();
1585 if (regVisible) regBar->hide(); 1970 if (regVisible)
1586 if (searchVisible) searchBar->hide(); 1971 {
1972 Global::hideInputMethod();
1973 regBar->hide();
1974 }
1975 if (searchVisible)
1976 {
1977 Global::hideInputMethod();
1978 searchBar->hide();
1979 }
1587 editorStack->raiseWidget( bkmkselector ); 1980 editorStack->raiseWidget( bkmkselector );
1588 } 1981 }
1589 else 1982 else
1590 QMessageBox::information(this, "OpieReader", "No bookmarks in memory"); 1983 QMessageBox::information(this, PROGNAME, "No bookmarks in memory");
1591} 1984}
1592 1985
1593void QTReaderApp::do_autogen() 1986void QTReaderApp::do_autogen()
@@ -1600,33 +1993,95 @@ void QTReaderApp::do_autogen()
1600void QTReaderApp::do_regedit() 1993void QTReaderApp::do_regedit()
1601{ 1994{
1602// editBar->hide(); 1995// editBar->hide();
1996 reader->bDoUpdates = false;
1997 qDebug("Showing regbar");
1603 regBar->show(); 1998 regBar->show();
1999 qDebug("Showing kbd");
2000 Global::showInputMethod();
1604 regVisible = true; 2001 regVisible = true;
1605 regEdit->setFocus(); 2002 regEdit->setFocus();
2003 qApp->processEvents();
2004 reader->bDoUpdates = true;
2005 reader->update();
2006}
2007
2008bool QTReaderApp::openfrombkmk(Bkmk* bk)
2009{
2010 QString fn = toQString(
2011 CFiledata(bk->anno()).name()
2012 );
2013 qDebug("fileinfo");
2014 if (!fn.isEmpty() && QFileInfo(fn).isFile())
2015 {
2016 qDebug("Opening");
2017 openFile(fn);
2018 struct stat fnstat;
2019 stat((const char *)reader->m_lastfile, &fnstat);
2020
2021 if (CFiledata(bk->anno()).date()
2022 != fnstat.st_mtime)
2023 {
2024 CFiledata fd(bk->anno());
2025 fd.setdate(fnstat.st_mtime);
2026 bk->value(0);
2027 }
2028 else
2029 {
2030 unsigned short svlen = bk->filedatalen();
2031 unsigned char* svdata = bk->filedata();
2032 reader->putSaveData(svdata, svlen);
2033 // setstate(svdata, svlen);
2034 if (svlen != 0)
2035 {
2036 QMessageBox::warning(this, PROGNAME, "Not all file data used\nNew version?");
2037 }
2038 qDebug("updating");
2039 reader->locate(bk->value());
2040 }
2041 return true;
2042 }
2043 else
2044 {
2045 return false;
2046 }
1606} 2047}
1607 2048
1608void QTReaderApp::gotobkmk(int ind) 2049void QTReaderApp::gotobkmk(int ind)
1609{ 2050{
1610 switch (m_nRegAction) 2051 switch (m_nRegAction)
1611 { 2052 {
1612 case cGotoBkmk: 2053 case cOpenFile:
1613 reader->locate((*pBkmklist)[ind]->value()); 2054 {
1614 break; 2055 if (!openfrombkmk((*pOpenlist)[ind]))
1615 case cDelBkmk: 2056 {
1616// qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name()); 2057 pOpenlist->erase(ind);
1617 pBkmklist->erase(ind); 2058 QMessageBox::information(this, PROGNAME, "Can't find file");
1618 m_fBkmksChanged = true; 2059 }
1619// pBkmklist->sort(); 2060 }
1620 break; 2061 break;
1621 case cRmBkmkFile: 2062 case cGotoBkmk:
1622 unlink((const char *)Global::applicationFileName("uqtreader",bkmkselector->text(ind))); 2063 reader->locate((*pBkmklist)[ind]->value());
1623 break; 2064 break;
2065 case cDelBkmk:
2066 // qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name());
2067 pBkmklist->erase(ind);
2068 m_fBkmksChanged = true;
2069 // pBkmklist->sort();
2070 break;
2071 case cRmBkmkFile:
2072 unlink((const char *)Global::applicationFileName(APPDIR,bkmkselector->text(ind)));
2073 break;
1624 } 2074 }
1625 showEditTools(); 2075 showEditTools();
1626} 2076}
1627 2077
1628void QTReaderApp::cancelbkmk() 2078void QTReaderApp::cancelbkmk()
1629{ 2079{
2080 if (m_nRegAction == cOpenFile)
2081 {
2082 QString fn = usefilebrowser();
2083 if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn);
2084 }
1630 showEditTools(); 2085 showEditTools();
1631} 2086}
1632 2087
@@ -1644,39 +2099,44 @@ void QTReaderApp::do_jump(const QString& lcn)
1644 bool ok; 2099 bool ok;
1645 unsigned long ulcn = lcn.toULong(&ok); 2100 unsigned long ulcn = lcn.toULong(&ok);
1646 if (ok) 2101 if (ok)
1647 reader->locate(ulcn); 2102 reader->locate(ulcn);
1648 else 2103 else
1649 QMessageBox::information(this, "OpieReader", "Must be a number"); 2104 QMessageBox::information(this, PROGNAME, "Must be a number");
1650} 2105}
1651 2106
1652void QTReaderApp::do_regaction() 2107void QTReaderApp::do_regaction()
1653{ 2108{
2109 reader->bDoUpdates = false;
1654 regBar->hide(); 2110 regBar->hide();
2111 Global::hideInputMethod();
1655 regVisible = false; 2112 regVisible = false;
1656 switch(m_nRegAction) 2113 switch(m_nRegAction)
1657 { 2114 {
1658 case cAutoGen: 2115 case cAutoGen:
1659 do_autogen(regEdit->text()); 2116 do_autogen(regEdit->text());
1660 break; 2117 break;
1661 case cAddBkmk: 2118 case cAddBkmk:
1662 do_addbkmk(regEdit->text()); 2119 do_addbkmk(regEdit->text());
1663 break; 2120 break;
1664 case cJump: 2121 case cJump:
1665 do_jump(regEdit->text()); 2122 do_jump(regEdit->text());
1666 break; 2123 break;
1667 case cMonoSpace: 2124 case cMonoSpace:
1668 do_mono(regEdit->text()); 2125 do_mono(regEdit->text());
1669 break; 2126 break;
1670 case cOverlap: 2127 case cOverlap:
1671 do_overlap(regEdit->text()); 2128 do_overlap(regEdit->text());
1672 break; 2129 break;
1673 case cSetTarget: 2130 case cSetTarget:
1674 do_settarget(regEdit->text()); 2131 do_settarget(regEdit->text());
1675 break; 2132 break;
1676 } 2133 }
1677 reader->restore(); 2134 reader->restore();
1678// editBar->show(); 2135// editBar->show();
1679 reader->setFocus(); 2136 reader->setFocus();
2137 qApp->processEvents();
2138 reader->bDoUpdates = true;
2139 reader->update();
1680} 2140}
1681 2141
1682void QTReaderApp::do_settarget(const QString& _txt) 2142void QTReaderApp::do_settarget(const QString& _txt)
@@ -1684,14 +2144,14 @@ void QTReaderApp::do_settarget(const QString& _txt)
1684 int ind = _txt.find('/'); 2144 int ind = _txt.find('/');
1685 if (ind == -1) 2145 if (ind == -1)
1686 { 2146 {
1687 m_targetapp = ""; 2147 m_targetapp = "";
1688 m_targetmsg = ""; 2148 m_targetmsg = "";
1689 QMessageBox::information(this, "OpieReader", "Format is\nappname/messagename"); 2149 QMessageBox::information(this, PROGNAME, "Format is\nappname/messagename");
1690 } 2150 }
1691 else 2151 else
1692 { 2152 {
1693 m_targetapp = _txt.left(ind); 2153 m_targetapp = _txt.left(ind);
1694 m_targetmsg = _txt.right(_txt.length()-ind-1); 2154 m_targetmsg = _txt.right(_txt.length()-ind-1);
1695 } 2155 }
1696} 2156}
1697 2157
@@ -1699,33 +2159,42 @@ void QTReaderApp::setfont()
1699{ 2159{
1700 for (int i = 1; i <= m_fontSelector->count(); i++) 2160 for (int i = 1; i <= m_fontSelector->count(); i++)
1701 { 2161 {
1702 if (m_fontSelector->text(i) == reader->m_fontname) 2162 if (m_fontSelector->text(i) == reader->m_fontname)
1703 { 2163 {
1704 m_fontSelector->setCurrentItem(i); 2164 m_fontSelector->setCurrentItem(i);
1705 break; 2165 break;
1706 } 2166 }
1707 } 2167 }
1708 m_fontBar->show(); 2168 m_fontBar->show();
1709 m_fontVisible = true; 2169 m_fontVisible = true;
1710} 2170}
1711 2171
1712void QTReaderApp::setfontHelper(const QString& lcn, int size) 2172void QTReaderApp::setfontHelper(const QString& lcn, int size = 0)
1713{ 2173{
1714 if (size == 0) size = reader->m_fontControl.currentsize(); 2174 if (size == 0) size = reader->m_fontControl.currentsize();
1715 QFont f(lcn, 10 /*, QFont::Bold*/); 2175 QFont f(lcn, 10 /*, QFont::Bold*/);
2176 qDebug("bs");
1716 bkmkselector->setFont( f ); 2177 bkmkselector->setFont( f );
2178 qDebug("re");
1717 regEdit->setFont( f ); 2179 regEdit->setFont( f );
2180 qDebug("se");
1718 searchEdit->setFont( f ); 2181 searchEdit->setFont( f );
2182 qDebug("aw");
1719 m_annoWin->setFont( f ); 2183 m_annoWin->setFont( f );
1720 reader->m_fontname = lcn; 2184 reader->m_fontname = lcn;
2185 qDebug("cf1");
1721 if (!reader->ChangeFont(size)) 2186 if (!reader->ChangeFont(size))
1722 { 2187 {
1723 reader->ChangeFont(size); 2188 qDebug("cf2");
2189 reader->ChangeFont(size);
1724 } 2190 }
2191 qDebug("ref");
1725 reader->refresh(); 2192 reader->refresh();
1726 m_fontBar->hide(); 2193 m_fontBar->hide();
1727 m_fontVisible = false; 2194 m_fontVisible = false;
1728 showEditTools(); 2195 qDebug("showedit");
2196 if (reader->isVisible()) showEditTools();
2197 qDebug("showeditdone");
1729} 2198}
1730 2199
1731void QTReaderApp::do_setfont(const QString& lcn) 2200void QTReaderApp::do_setfont(const QString& lcn)
@@ -1759,9 +2228,9 @@ pbar->resize(width(), editBar->height());
1759 if (pc != lastpc) 2228 if (pc != lastpc)
1760 { 2229 {
1761 pbar->setProgress(pc); 2230 pbar->setProgress(pc);
1762 qApp->processEvents(); 2231 qApp->processEvents();
1763 if (reader->locate() != lcn) reader->jumpto(lcn); 2232 if (reader->locate() != lcn) reader->jumpto(lcn);
1764 reader->setFocus(); 2233 reader->setFocus();
1765 lastpc = pc; 2234 lastpc = pc;
1766 } 2235 }
1767 i = reader->buffdoc.getpara(buff); 2236 i = reader->buffdoc.getpara(buff);
@@ -1770,7 +2239,7 @@ pbar->resize(width(), editBar->height());
1770#else 2239#else
1771 if (re.match(buff.data()) != -1) 2240 if (re.match(buff.data()) != -1)
1772#endif 2241#endif
1773 pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn)); 2242 pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn));
1774 } 2243 }
1775 pBkmklist->sort(); 2244 pBkmklist->sort();
1776 pbar->setProgress(100); 2245 pbar->setProgress(100);
@@ -1781,7 +2250,7 @@ pbar->resize(width(), editBar->height());
1781void QTReaderApp::saveprefs() 2250void QTReaderApp::saveprefs()
1782{ 2251{
1783// reader->saveprefs("uqtreader"); 2252// reader->saveprefs("uqtreader");
1784 Config config( "uqtreader" ); 2253 Config config( APPDIR );
1785 config.setGroup( "View" ); 2254 config.setGroup( "View" );
1786 2255
1787 reader->m_lastposn = reader->pagelocate(); 2256 reader->m_lastposn = reader->pagelocate();
@@ -1791,6 +2260,7 @@ void QTReaderApp::saveprefs()
1791 config.writeEntry( "TextFmt", reader->btextfmt ); 2260 config.writeEntry( "TextFmt", reader->btextfmt );
1792 config.writeEntry( "StripHtml", reader->bstriphtml ); 2261 config.writeEntry( "StripHtml", reader->bstriphtml );
1793 config.writeEntry( "Dehyphen", reader->bdehyphen ); 2262 config.writeEntry( "Dehyphen", reader->bdehyphen );
2263 config.writeEntry( "OneSpace", reader->bonespace );
1794 config.writeEntry( "Unindent", reader->bunindent ); 2264 config.writeEntry( "Unindent", reader->bunindent );
1795 config.writeEntry( "Repara", reader->brepara ); 2265 config.writeEntry( "Repara", reader->brepara );
1796 config.writeEntry( "DoubleSpace", reader->bdblspce ); 2266 config.writeEntry( "DoubleSpace", reader->bdblspce );
@@ -1800,6 +2270,7 @@ void QTReaderApp::saveprefs()
1800 config.writeEntry( "LastFile", reader->m_lastfile ); 2270 config.writeEntry( "LastFile", reader->m_lastfile );
1801 config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); 2271 config.writeEntry( "LastPosn", (int)(reader->pagelocate()) );
1802 config.writeEntry( "PageMode", reader->m_bpagemode ); 2272 config.writeEntry( "PageMode", reader->m_bpagemode );
2273 config.writeEntry( "CursorNavigation", reader->m_navkeys );
1803 config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); 2274 config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced );
1804 config.writeEntry( "Fontname", reader->m_fontname ); 2275 config.writeEntry( "Fontname", reader->m_fontname );
1805 config.writeEntry( "Encoding", reader->m_encd ); 2276 config.writeEntry( "Encoding", reader->m_encd );
@@ -1812,9 +2283,15 @@ void QTReaderApp::saveprefs()
1812 config.writeEntry( "Dictionary", m_doDictionary); 2283 config.writeEntry( "Dictionary", m_doDictionary);
1813 config.writeEntry( "Clipboard", m_doClipboard); 2284 config.writeEntry( "Clipboard", m_doClipboard);
1814 config.writeEntry( "SpaceTarget", m_spaceTarget); 2285 config.writeEntry( "SpaceTarget", m_spaceTarget);
2286#ifdef REPALM
2287 config.writeEntry( "Repalm", reader->brepalm );
2288#endif
1815 config.writeEntry( "Remap", reader->bremap ); 2289 config.writeEntry( "Remap", reader->bremap );
1816 config.writeEntry( "Peanut", reader->bpeanut ); 2290 config.writeEntry( "Peanut", reader->bpeanut );
1817 config.writeEntry( "MakeBold", reader->bmakebold ); 2291 config.writeEntry( "MakeBold", reader->bmakebold );
2292 config.writeEntry( "Continuous", reader->m_continuousDocument );
2293
2294 savefilelist();
1818} 2295}
1819 2296
1820void QTReaderApp::indentplus() 2297void QTReaderApp::indentplus()
@@ -1844,40 +2321,40 @@ void info_cb(Fl_Widget* o, void* _data)
1844 2321
1845 if (infowin == NULL) 2322 if (infowin == NULL)
1846 { 2323 {
1847 2324
1848 infowin = new Fl_Window(160,240); 2325 infowin = new Fl_Window(160,240);
1849 filename = new Fl_Output(45,5,110,14,"Filename"); 2326 filename = new Fl_Output(45,5,110,14,"Filename");
1850 filesize = new Fl_Output(45,25,110,14,"Filesize"); 2327 filesize = new Fl_Output(45,25,110,14,"Filesize");
1851 textsize = new Fl_Output(45,45,110,14,"Textsize"); 2328 textsize = new Fl_Output(45,45,110,14,"Textsize");
1852 comprat = new CBar(45,65,110,14,"Ratio %"); 2329 comprat = new CBar(45,65,110,14,"Ratio %");
1853 posn = new Fl_Output(45,85,110,14,"Location"); 2330 posn = new Fl_Output(45,85,110,14,"Location");
1854 frcn = new CBar(45,105,110,14,"% Read"); 2331 frcn = new CBar(45,105,110,14,"% Read");
1855 about = new Fl_Multiline_Output(5,125,150,90); 2332 about = new Fl_Multiline_Output(5,125,150,90);
1856 about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files"); 2333 about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files");
1857 Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay"); 2334 Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay");
1858 infowin->set_modal(); 2335 infowin->set_modal();
1859 } 2336 }
1860 if (((reader_ui *)_data)->g_filename[0] != '\0') 2337 if (((reader_ui *)_data)->g_filename[0] != '\0')
1861 { 2338 {
1862 unsigned long fs,ts; 2339 unsigned long fs,ts;
1863 tchar sz[20]; 2340 tchar sz[20];
1864 ((reader_ui *)_data)->input->sizes(fs,ts); 2341 ((reader_ui *)_data)->input->sizes(fs,ts);
1865 unsigned long pl = ((reader_ui *)_data)->input->locate(); 2342 unsigned long pl = ((reader_ui *)_data)->input->locate();
1866 2343
1867 filename->value(((reader_ui *)_data)->g_filename); 2344 filename->value(((reader_ui *)_data)->g_filename);
1868 2345
1869 sprintf(sz,"%u",fs); 2346 sprintf(sz,"%u",fs);
1870 filesize->value(sz); 2347 filesize->value(sz);
1871 2348
1872 sprintf(sz,"%u",ts); 2349 sprintf(sz,"%u",ts);
1873 textsize->value(sz); 2350 textsize->value(sz);
1874 2351
1875 comprat->value(100-(100*fs + (ts >> 1))/ts); 2352 comprat->value(100-(100*fs + (ts >> 1))/ts);
1876 2353
1877 sprintf(sz,"%u",pl); 2354 sprintf(sz,"%u",pl);
1878 posn->value(sz); 2355 posn->value(sz);
1879 2356
1880 frcn->value((100*pl + (ts >> 1))/ts); 2357 frcn->value((100*pl + (ts >> 1))/ts);
1881 } 2358 }
1882 infowin->show(); 2359 infowin->show();
1883} 2360}
@@ -1887,27 +2364,61 @@ void QTReaderApp::savebkmks()
1887{ 2364{
1888 if (pBkmklist != NULL) 2365 if (pBkmklist != NULL)
1889 { 2366 {
1890 BkmkFile bf((const char *)Global::applicationFileName("uqtreader",reader->m_string), true); 2367 BkmkFile bf((const char *)Global::applicationFileName(APPDIR, reader->m_string), true);
1891 bf.write(*pBkmklist); 2368 bf.write(*pBkmklist);
2369 }
2370 m_fBkmksChanged = false;
2371}
2372
2373void QTReaderApp::readfilelist()
2374{
2375 BkmkFile bf((const char *)Global::applicationFileName(APPDIR, ".openfiles"));
2376 qDebug("Reading open files");
2377 pOpenlist = bf.readall();
2378 if (pOpenlist != NULL) qDebug("...with success");
2379 else qDebug("...without success!");
2380}
2381
2382void QTReaderApp::savefilelist()
2383{
2384 if (pOpenlist != NULL)
2385 {
2386 BkmkFile bf((const char *)Global::applicationFileName(APPDIR, ".openfiles"), true);
2387 qDebug("Writing open files");
2388 bf.write(*pOpenlist);
1892 } 2389 }
1893 m_fBkmksChanged = false;
1894} 2390}
1895 2391
1896void QTReaderApp::readbkmks() 2392void QTReaderApp::readbkmks()
1897{ 2393{
1898 if (pBkmklist != NULL) 2394 if (pBkmklist != NULL)
1899 { 2395 {
1900 delete pBkmklist; 2396 delete pBkmklist;
2397 }
2398 struct stat fnstat;
2399 struct stat bkstat;
2400 if (
2401 stat((const char *)reader->m_lastfile, &fnstat) == 0
2402 &&
2403 stat((const char *)Global::applicationFileName(APPDIR, reader->m_string), &bkstat) == 0
2404 )
2405 {
2406 if (bkstat.st_mtime < fnstat.st_mtime)
2407 {
2408 unlink((const char *)Global::applicationFileName(APPDIR, reader->m_string));
2409 }
1901 } 2410 }
1902 BkmkFile bf((const char *)Global::applicationFileName("uqtreader",reader->m_string)); 2411
2412 BkmkFile bf((const char *)Global::applicationFileName(APPDIR, reader->m_string));
2413
1903 pBkmklist = bf.readall(); 2414 pBkmklist = bf.readall();
1904 m_fBkmksChanged = bf.upgraded(); 2415 m_fBkmksChanged = bf.upgraded();
1905 if (pBkmklist == NULL) 2416 if (pBkmklist == NULL)
1906 { 2417 {
1907 pBkmklist = reader->getbkmklist(); 2418 pBkmklist = reader->getbkmklist();
1908 } 2419 }
1909 if (pBkmklist != NULL) 2420 if (pBkmklist != NULL)
1910 pBkmklist->sort(); 2421 pBkmklist->sort();
1911} 2422}
1912 2423
1913void QTReaderApp::addbkmk() 2424void QTReaderApp::addbkmk()
@@ -1919,36 +2430,36 @@ void QTReaderApp::addbkmk()
1919 2430
1920void QTReaderApp::do_addbkmk(const QString& text) 2431void QTReaderApp::do_addbkmk(const QString& text)
1921{ 2432{
1922 if (text.isEmpty()) 2433 if (text.isEmpty())
1923 { 2434 {
1924 QMessageBox::information(this, "OpieReader", "Need a name for the bookmark\nSelect add again", 1); 2435 QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nSelect add again", 1);
1925 } 2436 }
1926 else 2437 else
1927 { 2438 {
1928 if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; 2439 if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>;
1929#ifdef _UNICODE 2440#ifdef _UNICODE
1930 CBuffer buff; 2441 CBuffer buff;
1931 int i = 0; 2442 int i = 0;
1932 for (i = 0; i < text.length(); i++) 2443 for (i = 0; i < text.length(); i++)
1933 { 2444 {
1934 buff[i] = text[i].unicode(); 2445 buff[i] = text[i].unicode();
1935 } 2446 }
1936 buff[i] = 0; 2447 buff[i] = 0;
1937 pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate())); 2448 pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate()));
1938#else 2449#else
1939 pBkmklist->push_front(Bkmk((const tchar*)text,reader->pagelocate())); 2450 pBkmklist->push_front(Bkmk((const tchar*)text, reader->pagelocate()));
1940#endif 2451#endif
1941 m_fBkmksChanged = true; 2452 m_fBkmksChanged = true;
1942 pBkmklist->sort(); 2453 pBkmklist->sort();
1943 } 2454 }
1944} 2455}
1945 2456
1946void QTReaderApp::OnRedraw() 2457void QTReaderApp::OnRedraw()
1947{ 2458{
1948 if (pBkmklist != NULL) 2459 if (pBkmklist != NULL)
1949 { 2460 {
1950 bool found = findNextBookmark(reader->pagelocate()); 2461 bool found = findNextBookmark(reader->pagelocate());
1951 m_bkmkAvail->setEnabled(found); 2462 m_bkmkAvail->setEnabled(found);
1952 } 2463 }
1953} 2464}
1954 2465
@@ -1957,6 +2468,7 @@ void QTReaderApp::showAnnotation()
1957 m_annoWin->setName(toQString(m_anno->name())); 2468 m_annoWin->setName(toQString(m_anno->name()));
1958 m_annoWin->setAnno(toQString(m_anno->anno())); 2469 m_annoWin->setAnno(toQString(m_anno->anno()));
1959 m_annoIsEditing = false; 2470 m_annoIsEditing = false;
2471 Global::showInputMethod();
1960 editorStack->raiseWidget( m_annoWin ); 2472 editorStack->raiseWidget( m_annoWin );
1961 m_annoWin->setFocus(); 2473 m_annoWin->setFocus();
1962} 2474}
@@ -1967,33 +2479,34 @@ void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, const QString&
1967 2479
1968 if (m_doClipboard) 2480 if (m_doClipboard)
1969 { 2481 {
1970 QClipboard* cb = QApplication::clipboard(); 2482 QClipboard* cb = QApplication::clipboard();
1971 cb->setText(wrd); 2483 cb->setText(wrd);
1972 if (wrd.length() > 10) 2484 if (wrd.length() > 10)
1973 { 2485 {
1974 Global::statusMessage(wrd.left(8) + ".."); 2486 Global::statusMessage(wrd.left(8) + "..");
1975 } 2487 }
1976 else 2488 else
1977 { 2489 {
1978 Global::statusMessage(wrd); 2490 Global::statusMessage(wrd);
1979 } 2491 }
1980 } 2492 }
1981 if (m_doAnnotation) 2493 if (m_doAnnotation)
1982 { 2494 {
1983// addAnno(wrd, "Need to be able to edit this", posn); 2495 //addAnno(wrd, "Need to be able to edit this", posn);
1984 m_annoWin->setName(line); 2496 m_annoWin->setName(line);
1985 m_annoWin->setAnno(""); 2497 m_annoWin->setAnno("");
1986 m_annoWin->setPosn(posn); 2498 m_annoWin->setPosn(posn);
1987 m_annoIsEditing = true; 2499 m_annoIsEditing = true;
1988 editorStack->raiseWidget( m_annoWin ); 2500 Global::showInputMethod();
2501 editorStack->raiseWidget( m_annoWin );
1989 } 2502 }
1990 if (m_doDictionary) 2503 if (m_doDictionary)
1991 { 2504 {
1992 if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty()) 2505 if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty())
1993 { 2506 {
1994 QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8()); 2507 QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8());
1995 e << wrd; 2508 e << wrd;
1996 } 2509 }
1997 } 2510 }
1998} 2511}
1999 2512
@@ -2001,29 +2514,93 @@ void QTReaderApp::OnActionPressed()
2001{ 2514{
2002 switch (m_spaceTarget) 2515 switch (m_spaceTarget)
2003 { 2516 {
2004 case cesOpenFile: 2517 case cesOpenFile:
2005 { 2518 {
2006 fileOpen(); 2519 fileOpen();
2007 } 2520 }
2008 break; 2521 break;
2009 case cesAutoScroll: 2522 case cesAutoScroll:
2010 { 2523 {
2011 reader->setautoscroll(!reader->m_autoScroll); 2524 reader->setautoscroll(!reader->m_autoScroll);
2012 setScrollState(reader->m_autoScroll); 2525 setScrollState(reader->m_autoScroll);
2013 } 2526 }
2014 break; 2527 break;
2015 case cesActionMark: 2528 case cesActionMark:
2016 { 2529 {
2017 addbkmk(); 2530 addbkmk();
2018 } 2531 }
2019 break; 2532 break;
2020 default: 2533 case cesFullScreen:
2021 { 2534 {
2022 qDebug("Unknown ActionType:%u", m_spaceTarget); 2535 m_actFullscreen->setOn(true);
2023 } 2536 }
2024 break; 2537 break;
2538 default:
2539 {
2540 qDebug("Unknown ActionType:%u", m_spaceTarget);
2541 }
2542 break;
2025 } 2543 }
2026} 2544}
2027 2545
2028void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); } 2546void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); }
2029void QTReaderApp::restoreFocus() { reader->setFocus(); } 2547void QTReaderApp::restoreFocus() { reader->setFocus(); }
2548
2549/*
2550void QTReaderApp::setstate(unsigned char* _sd, unsigned short _sdlen)
2551{
2552 unsigned short sdlen;
2553 memcpy(&sdlen, _sd, sizeof(sdlen));
2554 sdlen -= sizeof(sdlen);
2555 _sd += sizeof(sdlen);
2556 statedata* sd;
2557 char* data;
2558 if (sdlen < sizeof(statedata)+1)
2559 {
2560 sdlen = sizeof(statedata)+1;
2561 }
2562 data = new char[sdlen];
2563 sd = (statedata*)data;
2564 memcpy(sd, _sd, sdlen);
2565 data[sdlen] = 0;
2566 reader->setstate(*sd);
2567 delete [] data;
2568}
2569
2570void QTReaderApp::getstate(unsigned char*& data, unsigned short& len)
2571{
2572 unsigned char* olddata = data;
2573 unsigned short oldlen = len;
2574 len = oldlen+sizeof(unsigned short)+sizeof(statedata)+reader->m_fontname.length();
2575 data = new unsigned char[len];
2576 memcpy(data, olddata, oldlen);
2577 delete [] olddata;
2578 memcpy(data+oldlen, &len, sizeof(len));
2579 statedata* sd = (statedata*)(data+oldlen+sizeof(unsigned short));
2580
2581 sd->bstripcr = reader->bstripcr;
2582 sd->btextfmt = reader->btextfmt;
2583 sd->bautofmt = reader->bautofmt;
2584 sd->bstriphtml = reader->bstriphtml;
2585 sd->bpeanut = reader->bpeanut;
2586 sd->bdehyphen = reader->bdehyphen;
2587 sd->bonespace = reader->bonespace;
2588 sd->bunindent = reader->bunindent;
2589 sd->brepara = reader->brepara;
2590 sd->bdblspce = reader->bdblspce;
2591 sd->m_bpagemode = reader->m_bpagemode;
2592 sd->m_navkeys = reader->m_navkeys;
2593 sd->m_bMonoSpaced = reader->m_bMonoSpaced;
2594 sd->bremap = reader->bremap;
2595 sd->bmakebold = reader->bmakebold;
2596 sd->Continuous = reader->m_continuousDocument;
2597#ifdef REPALM
2598 sd->brepalm = reader->brepalm;
2599#endif
2600 sd->bindenter = reader->bindenter;
2601 sd->m_textsize = reader->m_textsize; //reader->m_fontControl.currentsize()
2602 sd->m_encd = reader->m_encd;
2603 sd->m_charpc = reader->m_charpc;
2604 strcpy(sd->m_fontname, reader->m_fontname.latin1());
2605}
2606*/
diff --git a/noncore/apps/opie-reader/QTReaderApp.h b/noncore/apps/opie-reader/QTReaderApp.h
index 22c57e4..cb33e4a 100644
--- a/noncore/apps/opie-reader/QTReaderApp.h
+++ b/noncore/apps/opie-reader/QTReaderApp.h
@@ -23,7 +23,7 @@
23//#define __ISEARCH 23//#define __ISEARCH
24 24
25#define MAX_ENCODING 6 25#define MAX_ENCODING 6
26#define MAX_ACTIONS 3 26#define MAX_ACTIONS 4
27 27
28#include <qmainwindow.h> 28#include <qmainwindow.h>
29#include "CExpander.h" 29#include "CExpander.h"
@@ -39,7 +39,7 @@ class QWidgetStack;
39class QToolButton; 39class QToolButton;
40class QPopupMenu; 40class QPopupMenu;
41class QToolBar; 41class QToolBar;
42class QPEToolBar; 42//class QPEToolBar;
43class CBkmkSelector; 43class CBkmkSelector;
44class QProgressBar; 44class QProgressBar;
45class QAction; 45class QAction;
@@ -47,12 +47,14 @@ class CAnnoEdit;
47class QFloatBar; 47class QFloatBar;
48class CDrawBuffer; 48class CDrawBuffer;
49class QTReader; 49class QTReader;
50class QPixmap;
50 51
51enum ActionTypes 52enum ActionTypes
52{ 53{
53 cesOpenFile = 0, 54 cesOpenFile = 0,
54 cesAutoScroll, 55 cesAutoScroll,
55 cesActionMark 56 cesActionMark,
57 cesFullScreen
56}; 58};
57 59
58#ifdef __ISEARCH 60#ifdef __ISEARCH
@@ -65,6 +67,7 @@ struct searchrecord
65#endif 67#endif
66 68
67class infowin; 69class infowin;
70class GraphicWin;
68 71
69class QTReaderApp : public QMainWindow 72class QTReaderApp : public QMainWindow
70{ 73{
@@ -76,16 +79,18 @@ class QTReaderApp : public QMainWindow
76 public: 79 public:
77 QTReaderApp( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 80 QTReaderApp( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
78 ~QTReaderApp(); 81 ~QTReaderApp();
79 82 void suspend();
80 void openFile( const QString & ); 83 void openFile( const QString & );
81 84
82 void setScrollState(bool _b); 85 void setScrollState(bool _b);
83 86
84 protected: 87 protected:
85 void setfontHelper(const QString& lcn, int size = 0); 88 void setfontHelper(const QString& lcn, int size = 0);
86 QAction* m_bkmkAvail; 89 QAction* m_bkmkAvail, *m_actFullscreen;
87 CAnnoEdit* m_annoWin; 90 CAnnoEdit* m_annoWin;
88 Bkmk* m_anno; 91 Bkmk* m_anno;
92// void resizeEvent(QResizeEvent* e);
93 void keyPressEvent(QKeyEvent* e);
89 void closeEvent( QCloseEvent *e ); 94 void closeEvent( QCloseEvent *e );
90 void readbkmks(); 95 void readbkmks();
91 void do_mono(const QString&); 96 void do_mono(const QString&);
@@ -97,10 +102,15 @@ class QTReaderApp : public QMainWindow
97 bool m_doAnnotation; 102 bool m_doAnnotation;
98 bool m_doDictionary; 103 bool m_doDictionary;
99 bool m_doClipboard; 104 bool m_doClipboard;
105 bool m_fullscreen;
100 106
101 public: 107 public:
102 void saveprefs(); 108 void saveprefs();
103private slots: 109private slots:
110 void zoomin();
111 void zoomout();
112 void setfullscreen(bool sfs);
113 void setcontinuous(bool sfs);
104 void setTwoTouch(bool _b); 114 void setTwoTouch(bool _b);
105 void restoreFocus(); 115 void restoreFocus();
106 void OnAnnotation(bool _b) 116 void OnAnnotation(bool _b)
@@ -116,6 +126,7 @@ private slots:
116 m_doClipboard = _b; 126 m_doClipboard = _b;
117 } 127 }
118 void OnWordSelected(const QString&, size_t, const QString&); 128 void OnWordSelected(const QString&, size_t, const QString&);
129 void showgraphic(QPixmap&);
119 void addAnno(const QString&, const QString&, size_t); 130 void addAnno(const QString&, const QString&, size_t);
120 void addAnno(const QString&, const QString&); 131 void addAnno(const QString&, const QString&);
121 void addanno(); 132 void addanno();
@@ -141,13 +152,12 @@ private slots:
141 // void oldFile(); 152 // void oldFile();
142 void showinfo(); 153 void showinfo();
143 void setDocument(const QString&); 154 void setDocument(const QString&);
144 void TBD();
145 void TBDzoom();
146 155
147 void indentplus(); 156 void indentplus();
148 void indentminus(); 157 void indentminus();
149 158
150 void fileOpen(); 159 void fileOpen();
160 void fileClose();
151 161
152 void editCopy(); 162 void editCopy();
153 void editFind(); 163 void editFind();
@@ -166,10 +176,13 @@ private slots:
166 void search(); 176 void search();
167#endif 177#endif
168 178
169 void openFile( const DocLnk & );
170 void showEditTools(); 179 void showEditTools();
171 180
172 void stripcr(bool); 181 void stripcr(bool);
182 void onespace(bool);
183#ifdef REPALM
184// void repalm(bool);
185#endif
173 void peanut(bool _b); 186 void peanut(bool _b);
174 void remap(bool); 187 void remap(bool);
175 void embolden(bool); 188 void embolden(bool);
@@ -181,6 +194,7 @@ private slots:
181 void repara(bool); 194 void repara(bool);
182 void dblspce(bool); 195 void dblspce(bool);
183 void pagemode(bool); 196 void pagemode(bool);
197 void navkeys(bool);
184 // void gotobkmk(const QString& bm); 198 // void gotobkmk(const QString& bm);
185 void gotobkmk(int); 199 void gotobkmk(int);
186 void cancelbkmk(); 200 void cancelbkmk();
@@ -192,8 +206,18 @@ private slots:
192 void OnActionPressed(); 206 void OnActionPressed();
193 207
194 private: 208 private:
209/*
210 void setstate(unsigned char* _sd, unsigned short _sdlen);
211 void getstate(unsigned char*& data, unsigned short& len);
212*/
213 void fileOpen2();
214 void readfilelist();
215 void savefilelist();
216 void updatefileinfo();
217 bool openfrombkmk(Bkmk*);
195 QString m_targetapp, m_targetmsg; 218 QString m_targetapp, m_targetmsg;
196 void listbkmk(); 219 void listbkmk(CList<Bkmk>*, const QString& _lab = QString::null);
220 QString usefilebrowser();
197 void do_regedit(); 221 void do_regedit();
198 void colorChanged( const QColor &c ); 222 void colorChanged( const QColor &c );
199 void clear(); 223 void clear();
@@ -223,11 +247,11 @@ private slots:
223 QWidgetStack *editorStack; 247 QWidgetStack *editorStack;
224 QTReader* reader; 248 QTReader* reader;
225 QComboBox* m_fontSelector; 249 QComboBox* m_fontSelector;
226 QPEToolBar /* *menu,*/ *editBar; 250// QPEToolBar /* *menu,*/ *editBar;
251 QToolBar /* *menu,*/ *editBar;
227 QFloatBar *searchBar, *regBar/*, *m_fontBar*/; 252 QFloatBar *searchBar, *regBar/*, *m_fontBar*/;
228 QToolBar /* *searchBar, *regBar,*/ *m_fontBar; 253 QToolBar /* *searchBar, *regBar,*/ *m_fontBar;
229 QLineEdit *searchEdit, *regEdit; 254 QLineEdit *searchEdit, *regEdit;
230 DocLnk *doc;
231 bool searchVisible; 255 bool searchVisible;
232 bool regVisible; 256 bool regVisible;
233 bool m_fontVisible, m_twoTouch; 257 bool m_fontVisible, m_twoTouch;
@@ -243,7 +267,9 @@ private slots:
243 } 267 }
244 */ 268 */
245 CList<Bkmk>* pBkmklist; 269 CList<Bkmk>* pBkmklist;
270 CList<Bkmk>* pOpenlist;
246 infowin* m_infoWin; 271 infowin* m_infoWin;
272 GraphicWin* m_graphicwin;
247 QProgressBar* pbar; 273 QProgressBar* pbar;
248 bool m_fBkmksChanged; 274 bool m_fBkmksChanged;
249 int m_nRegAction; 275 int m_nRegAction;
@@ -260,4 +286,6 @@ const int cJump = 5;
260const int cMonoSpace = 6; 286const int cMonoSpace = 6;
261const int cOverlap = 7; 287const int cOverlap = 7;
262const int cSetTarget = 8; 288const int cSetTarget = 8;
289const int cOpenFile = 9;
290
263#endif 291#endif
diff --git a/noncore/apps/opie-reader/StateData.h b/noncore/apps/opie-reader/StateData.h
new file mode 100644
index 0000000..0cb0f07
--- a/dev/null
+++ b/noncore/apps/opie-reader/StateData.h
@@ -0,0 +1,32 @@
1#ifndef __STATEDATA_H
2#define __STATEDATA_H
3
4struct statedata
5{
6 bool bstripcr/*:1*/;
7 bool btextfmt/*:1*/;
8 bool bautofmt/*:1*/;
9 bool bstriphtml/*:1*/;
10 bool bpeanut/*:1*/;
11 bool bdehyphen/*:1*/;
12 bool bonespace/*:1*/;
13 bool bunindent/*:1*/;
14 bool brepara/*:1*/;
15 bool bdblspce/*:1*/;
16 bool m_bpagemode/*:1*/;
17 bool m_navkeys/*:1*/;
18 bool m_bMonoSpaced/*:1*/;
19 bool bremap/*:1*/;
20 bool bmakebold/*:1*/;
21 bool Continuous/*:1*/;
22#ifdef REPALM
23 bool brepalm/*:1*/;
24#endif
25 int bindenter;
26 int m_textsize;
27 int m_encd;
28 int m_charpc;
29 char m_fontname[1];
30};
31
32#endif
diff --git a/noncore/apps/opie-reader/StyleConsts.cpp b/noncore/apps/opie-reader/StyleConsts.cpp
new file mode 100644
index 0000000..e111dbd
--- a/dev/null
+++ b/noncore/apps/opie-reader/StyleConsts.cpp
@@ -0,0 +1,99 @@
1
2#include <qpixmap.h>
3#include "StyleConsts.h"
4
5GraphicLink::~GraphicLink() { delete graphic; }
6
7pmstore::~pmstore()
8{
9// qDebug("Deleting image");
10 delete graphic;
11}
12
13CStyle::~CStyle()
14{
15 if (graphic != NULL)
16 {
17 if (--(graphic->count) == 0)
18 {
19 delete graphic;
20 }
21 }
22}
23
24CStyle::CStyle(CStyle& rhs) : graphic(NULL)
25{
26 *this = rhs;
27}
28
29CStyle::CStyle(const CStyle& rhs) : graphic(NULL)
30{
31 *this = rhs;
32}
33
34CStyle& CStyle::operator=(const CStyle& rhs)
35{
36 if (rhs.graphic != NULL)
37 {
38 (rhs.graphic->count)++;
39 if (graphic != NULL)
40 {
41 if (--(graphic->count) == 0)
42 {
43 delete graphic;
44 }
45 }
46 graphic = rhs.graphic;
47 }
48 else
49 {
50 if (graphic != NULL)
51 {
52 if (--(graphic->count) == 0)
53 {
54 delete graphic;
55 }
56 graphic = NULL;
57 }
58 }
59 sty = rhs.sty;
60 return *this;
61}
62
63void CStyle::clearPicture()
64{
65 if (graphic != NULL)
66 {
67 if (--(graphic->count) == 0)
68 {
69 delete graphic;
70 }
71 graphic = NULL;
72 }
73}
74
75void CStyle::unset()
76{
77 sty.unset();
78 if (graphic != NULL)
79 {
80 if (--(graphic->count) == 0)
81 {
82 delete graphic;
83 }
84 graphic = NULL;
85 }
86}
87
88void CStyle::setPicture(QPixmap* _g, bool il, unsigned long tgt)
89{
90 if (graphic != NULL)
91 {
92 if (--(graphic->count) == 0)
93 {
94 delete graphic;
95 }
96 graphic = NULL;
97 }
98 if (_g != NULL) graphic = new pmstore(_g, il, tgt);
99}
diff --git a/noncore/apps/opie-reader/StyleConsts.h b/noncore/apps/opie-reader/StyleConsts.h
index b6dd861..5aacdf0 100644
--- a/noncore/apps/opie-reader/StyleConsts.h
+++ b/noncore/apps/opie-reader/StyleConsts.h
@@ -3,111 +3,175 @@
3 3
4typedef unsigned short StyleType; 4typedef unsigned short StyleType;
5 5
6class CStyle 6#include <stdlib.h>
7#include <qglobal.h>
8class QPixmap;
9
10struct GraphicLink
7{ 11{
8// 15 14 13-5 4 3 2 1 0 12 QPixmap* graphic;
9//bold italic spare align align fs fs fs 13 bool isLink;
10 static const StyleType m_Bold = 1 << 15; 14 unsigned long link;
11 static const StyleType m_Italic = 1 << 14; 15 GraphicLink(QPixmap* p, bool isLnk, unsigned long tgt) :
12 static const StyleType m_FontMask = 7; 16 graphic(p), isLink(isLnk), link(tgt) {}
13 static const StyleType m_FontBase = 3; 17 ~GraphicLink();
14 18};
15 static const StyleType m_AlignShift = 3;
16 static const StyleType m_AlignMask = 3 << m_AlignShift;
17 static const StyleType m_EveryBit = 0xffff;
18 19
20struct pmstore
21{
22 unsigned int count;
23 GraphicLink* graphic;
24 pmstore(QPixmap* p, bool isLnk, unsigned long tgt) : count(1)
25 {
26 graphic = new GraphicLink(p, isLnk, tgt);
27 }
28 ~pmstore();
29};
19 30
20 StyleType sty; 31enum EalignmentType
32{
33 m_AlignLeft,
34 m_AlignRight,
35 m_AlignCentre,
36 m_AlignJustify
37};
21 38
22 void unjustify() { sty &= m_EveryBit ^ m_AlignMask; } 39class CBasicStyle
40{
41 friend class CStyle;
42 bool m_bold,
43 m_italic;
44 int m_fontsize;
45 EalignmentType m_align;
23 unsigned char red, green, blue; 46 unsigned char red, green, blue;
24 unsigned long data; 47 unsigned long data;
25 bool isLink; 48 bool isLink;
26 public: 49 bool m_underline;
27 unsigned char Red() { return red; } 50 bool m_strikethru;
28 unsigned char Green() { return green; } 51 bool m_monospaced;
29 unsigned char Blue() { return blue; } 52 unsigned char m_leftmargin, m_rightmargin;
30 void setColour(unsigned char r, unsigned char g, unsigned char b) 53 CBasicStyle()
31 { 54 {
32 red = r; 55 unset();
33 green = g; 56 }
34 blue = b; 57 bool operator!=(const CBasicStyle& rhs)
35 } 58 {
36 static const StyleType m_AlignLeft = 0; 59 return (memcmp(this, &rhs, sizeof(CBasicStyle)) != 0);
37 static const StyleType m_AlignRight = 1 << m_AlignShift; 60 }
38 static const StyleType m_AlignCentre = 2 << m_AlignShift;
39 static const StyleType m_AlignJustify = 3 << m_AlignShift;
40 CStyle()
41 :
42 sty(m_FontBase),
43 red(0), green(0), blue(0),
44 data(0), isLink(false)
45 {}
46// CStyle(const int _fs) : sty(m_FontBase+_fs) {}
47
48 void unset() 61 void unset()
49 { 62 {
50 sty = m_FontBase; 63 m_bold = false;
64 m_italic = false;
65 m_fontsize = 0;
66 m_align = m_AlignLeft;
51 red = green = blue = 0; 67 red = green = blue = 0;
52 data = 0; 68 data = 0;
53 isLink = false; 69 isLink = false;
70 m_underline = false;
71 m_strikethru = false;
72 m_leftmargin = 0;
73 m_rightmargin = 0;
74 m_monospaced = false;
54 } 75 }
76};
55 77
56 void setBold() { sty |= m_Bold; } 78class CStyle
57 void setItalic() { sty |= m_Italic; } 79{
58 void unsetBold() { sty &= m_EveryBit ^ m_Bold; } 80 CBasicStyle sty;
59 void unsetItalic() { sty &= m_EveryBit ^ m_Italic; } 81 pmstore* graphic;
60 bool isBold() { return ((sty & m_Bold) != 0); } 82 public:
61 bool isItalic() { return ((sty & m_Italic) != 0); } 83 bool getPictureLink()
84 {
85 return (graphic != NULL && graphic->graphic->isLink);
86 }
87 unsigned long getPictureLinkData()
88 {
89 return graphic->graphic->link;
90 }
91 void setLeftMargin(unsigned char m) { sty.m_leftmargin = m; }
92 unsigned char getLeftMargin() { return sty.m_leftmargin; }
93 void setRightMargin(unsigned char m) { sty.m_rightmargin = m; }
94 unsigned char getRightMargin() { return sty.m_rightmargin; }
95 unsigned char Red() { return sty.red; }
96 unsigned char Green() { return sty.green; }
97 unsigned char Blue() { return sty.blue; }
98 void setColour(unsigned char r, unsigned char g, unsigned char b)
99 {
100 sty.red = r;
101 sty.green = g;
102 sty.blue = b;
103 }
104 CStyle() : graphic(NULL) {}
105 ~CStyle();
106 CStyle(CStyle&);
107 CStyle(const CStyle&);
108 CStyle& operator=(const CStyle&);
109 void unset();
110 bool isPicture() { return (graphic != NULL); }
111 void clearPicture();
112 void setPicture(QPixmap* _g, bool il=false, unsigned long tgt=0);
113 QPixmap* getPicture()
114 {
115 QPixmap* pm = ((graphic != NULL) ? graphic->graphic->graphic : NULL);
116 return pm;
117 }
118 void setUnderline() { sty.m_underline = true; }
119 void unsetUnderline() { sty.m_underline = false; }
120 bool isUnderline() { return sty.m_underline; }
121 void setStrikethru() { sty.m_strikethru = true; }
122 void unsetStrikethru() { sty.m_strikethru = false; }
123 bool isStrikethru() { return sty.m_strikethru; }
124 void setBold() { sty.m_bold = true; }
125 void unsetBold() { sty.m_bold = false; }
126 bool isBold() { return sty.m_bold; }
127 void setItalic() { sty.m_italic = true; }
128 void unsetItalic() { sty.m_italic = false; }
129 bool isItalic() { return sty.m_italic; }
130 void setMono() { sty.m_monospaced = true; }
131 void unsetMono() { sty.m_monospaced = false; }
132 bool isMono() { return sty.m_monospaced; }
62 133
63 void setLeftJustify() 134 void setLeftJustify()
64 { 135 {
65 unjustify(); 136 sty.m_align = m_AlignLeft;
66 sty |= m_AlignLeft;
67 } 137 }
68 void setRightJustify() 138 void setRightJustify()
69 { 139 {
70 unjustify(); 140 sty.m_align = m_AlignRight;
71 sty |= m_AlignRight;
72 } 141 }
73 void setCentreJustify() 142 void setCentreJustify()
74 { 143 {
75 unjustify(); 144 sty.m_align = m_AlignCentre;
76 sty |= m_AlignCentre;
77 } 145 }
78 void setFullJustify() 146 void setFullJustify()
79 { 147 {
80 unjustify(); 148 sty.m_align = m_AlignJustify;
81 sty |= m_AlignJustify;
82 } 149 }
83 StyleType getJustify() 150 StyleType getJustify()
84 { 151 {
85 return sty & m_AlignMask; 152 return sty.m_align;
86 } 153 }
87 154
88 void setFontSize(int _fs) 155 void setFontSize(int _fs)
89 { 156 {
90 sty &= m_EveryBit ^ m_FontMask; 157 sty.m_fontsize = _fs;
91 sty |= m_FontBase + _fs;
92 } 158 }
93 int getFontSize() 159 int getFontSize()
94 { 160 {
95 return (sty & m_FontMask) - m_FontBase; 161 return sty.m_fontsize;
96 } 162 }
97 bool operator!=(const CStyle& rhs) 163 bool operator!=(const CStyle& rhs)
98 { 164 {
99 return 165 return
100 ( 166 (
101 (sty != rhs.sty) || (red != rhs.red) || (green != rhs.green) || 167 (sty != rhs.sty) ||
102 (blue != rhs.blue) || 168 (graphic != rhs.graphic)
103 (data != rhs.data) || 169 );
104 (isLink != rhs.isLink) 170 }
105 ); 171 void setLink(bool _l) { sty.isLink = _l; }
106 } 172 bool getLink() { return sty.isLink; }
107 void setLink(bool _l) { isLink = _l; } 173 void setData(unsigned long _d) { sty.data = _d; }
108 bool getLink() { return isLink; } 174 unsigned long getData() { return sty.data; }
109 void setData(unsigned long _d) { data = _d; }
110 unsigned long getData() { return data; }
111}; 175};
112 176
113#endif 177#endif
diff --git a/noncore/apps/opie-reader/Text.h b/noncore/apps/opie-reader/Text.h
deleted file mode 100644
index 4c689be..0000000
--- a/noncore/apps/opie-reader/Text.h
+++ b/dev/null
@@ -1,28 +0,0 @@
1#ifndef __Text_h
2#define __Text_h
3#include <stdio.h>
4#include <sys/stat.h>
5#include "CExpander.h"
6
7class Text: public CExpander {
8 FILE* file;
9public:
10 Text() : file(NULL) {};
11 virtual ~Text() { if (file != NULL) fclose(file); }
12 virtual int openfile(const tchar *src)
13 {
14 if (file != NULL) fclose(file);
15 return ((file = fopen(src,"rb")) == NULL);
16 }
17 virtual int getch() { return fgetc(file); }
18 virtual unsigned int locate() { return ftell(file); }
19 virtual void locate(unsigned int n) { fseek(file,n,SEEK_SET); }
20 virtual bool hasrandomaccess() { return true; }
21 virtual void sizes(unsigned long& _file, unsigned long& _text)
22 {
23 struct stat _stat;
24 fstat(fileno(file),&_stat);
25 _text = _file = _stat.st_size;
26 }
27};
28#endif
diff --git a/noncore/apps/opie-reader/ZText.h b/noncore/apps/opie-reader/ZText.h
index debfe8c..22d3733 100644
--- a/noncore/apps/opie-reader/ZText.h
+++ b/noncore/apps/opie-reader/ZText.h
@@ -10,14 +10,43 @@ class Text: public CExpander {
10 gzFile file; 10 gzFile file;
11 unsigned long fsize; 11 unsigned long fsize;
12public: 12public:
13 virtual void suspend()
14 {
15 bSuspended = true;
16 suspos = gztell(file);
17 gzclose(file);
18 file = NULL;
19 sustime = time(NULL);
20 }
21 virtual void unsuspend()
22 {
23 if (bSuspended)
24 {
25 bSuspended = false;
26 int delay = time(NULL) - sustime;
27 if (delay < 10) sleep(10-delay);
28 file = gzopen(fname, "rb");
29 for (int i = 0; file == NULL && i < 5; i++)
30 {
31 sleep(5);
32 file = gzopen(fname, "rb");
33 }
34 if (file == NULL)
35 {
36 QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file");
37 exit(0);
38 }
39 suspos = gzseek(file, suspos, SEEK_SET);
40 }
41 }
13 Text() : file(NULL) {}; 42 Text() : file(NULL) {};
14 virtual ~Text() 43 virtual ~Text()
15 { 44 {
16 if (file != NULL) gzclose(file); 45 if (file != NULL) gzclose(file);
17 } 46 }
18 virtual int openfile(const char *src) 47 virtual int OpenFile(const char *src)
19 { 48 {
20 if (file != NULL) gzclose(file); 49 if (file != NULL) gzclose(file);
21 struct stat _stat; 50 struct stat _stat;
22 stat(src,&_stat); 51 stat(src,&_stat);
23 fsize = _stat.st_size; 52 fsize = _stat.st_size;
@@ -33,7 +62,7 @@ public:
33 } 62 }
34 virtual MarkupType PreferredMarkup() 63 virtual MarkupType PreferredMarkup()
35 { 64 {
36 return cTEXT; 65 return cTEXT;
37 } 66 }
38}; 67};
39#endif 68#endif
diff --git a/noncore/apps/opie-reader/cbkmkselector.h b/noncore/apps/opie-reader/cbkmkselector.h
index 1a49c5a..1a70048 100644
--- a/noncore/apps/opie-reader/cbkmkselector.h
+++ b/noncore/apps/opie-reader/cbkmkselector.h
@@ -9,6 +9,7 @@ class CBkmkSelector : public QWidget
9 Q_OBJECT 9 Q_OBJECT
10 10
11 QListBox* bkmkselector; 11 QListBox* bkmkselector;
12 QPushButton* exitButton;
12 13
13signals: 14signals:
14 void selected(int i); 15 void selected(int i);
@@ -27,7 +28,7 @@ public:
27 28
28 QVBoxLayout* grid = new QVBoxLayout(this); 29 QVBoxLayout* grid = new QVBoxLayout(this);
29 bkmkselector = new QListBox(this, "Bookmarks"); 30 bkmkselector = new QListBox(this, "Bookmarks");
30 QPushButton* exitButton = new QPushButton("Cancel", this); 31 exitButton = new QPushButton("Cancel", this);
31 connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( slotSelected(int) ) ); 32 connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( slotSelected(int) ) );
32 connect(bkmkselector, SIGNAL( clicked(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) ); 33 connect(bkmkselector, SIGNAL( clicked(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) );
33 connect(exitButton, SIGNAL( released() ), this, SLOT( slotCancel() ) ); 34 connect(exitButton, SIGNAL( released() ), this, SLOT( slotCancel() ) );
@@ -37,5 +38,6 @@ public:
37 void clear() { bkmkselector->clear(); } 38 void clear() { bkmkselector->clear(); }
38 void insertItem(const QString& item) { bkmkselector->insertItem(item); } 39 void insertItem(const QString& item) { bkmkselector->insertItem(item); }
39 QString text(int index) const { return bkmkselector->text(index); } 40 QString text(int index) const { return bkmkselector->text(index); }
41 void setText(const QString& _l) { exitButton->setText(_l); }
40}; 42};
41 43
diff --git a/noncore/apps/opie-reader/config.h b/noncore/apps/opie-reader/config.h
index 5150270..b6281a4 100644
--- a/noncore/apps/opie-reader/config.h
+++ b/noncore/apps/opie-reader/config.h
@@ -18,4 +18,8 @@ const int UEOF = -1;
18 18
19#include "ustring.h" 19#include "ustring.h"
20 20
21#define BORDER 2
22
23//#define _FAST
24
21#endif 25#endif
diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp
index b21d59d..21c970b 100644
--- a/noncore/apps/opie-reader/fileBrowser.cpp
+++ b/noncore/apps/opie-reader/fileBrowser.cpp
@@ -39,6 +39,7 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags
39 buttonShowHidden->setOn( false ); 39 buttonShowHidden->setOn( false );
40 40
41 dirLabel = new QLabel(this, "DirLabel"); 41 dirLabel = new QLabel(this, "DirLabel");
42 dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak);
42 dirLabel->setText(currentDir.canonicalPath()); 43 dirLabel->setText(currentDir.canonicalPath());
43 44
44 ListView = new QtrListView( this, "ListView" ); 45 ListView = new QtrListView( this, "ListView" );
@@ -47,6 +48,8 @@ fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags
47 ListView->addColumn( tr( "Size" ) ); 48 ListView->addColumn( tr( "Size" ) );
48 ListView->setSelectionMode(QListView::Single); 49 ListView->setSelectionMode(QListView::Single);
49 ListView->setAllColumnsShowFocus( TRUE ); 50 ListView->setAllColumnsShowFocus( TRUE );
51 ListView->setColumnWidthMode(0, QListView::Manual);
52 ListView->setColumnWidthMode(1, QListView::Manual);
50 53
51 // signals and slots connections 54 // signals and slots connections
52 connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) ); 55 connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) );
diff --git a/noncore/apps/opie-reader/infowin.cpp b/noncore/apps/opie-reader/infowin.cpp
index 7b8f280..30adebf 100644
--- a/noncore/apps/opie-reader/infowin.cpp
+++ b/noncore/apps/opie-reader/infowin.cpp
@@ -1,8 +1,9 @@
1#include "name.h"
1#include "infowin.h" 2#include "infowin.h"
2#include "version.h" 3#include "version.h"
3#include <stdio.h> 4#include <stdio.h>
4 5
5infowin::infowin( QWidget *parent, const char *name, WFlags f) : 6infowin::infowin( QWidget *parent=0, const char *name=0, WFlags f = 0) :
6 QWidget(parent, name, f) 7 QWidget(parent, name, f)
7{ 8{
8 grid = new QGridLayout(this, 6, 2); 9 grid = new QGridLayout(this, 6, 2);
@@ -33,7 +34,7 @@ infowin::infowin( QWidget *parent, const char *name, WFlags f) :
33 read->setAlignment( AlignVCenter | AlignRight ); 34 read->setAlignment( AlignVCenter | AlignRight );
34 grid->addWidget(read, 4, 1); 35 grid->addWidget(read, 4, 1);
35 char vstr[128]; 36 char vstr[128];
36 sprintf(vstr, "QT Reader v%u.%u%c (%s)\nA small e-text reader", MAJOR, BKMKTYPE, MINOR, RELEASE_TYPE); 37 sprintf(vstr, PROGNAME " v%u.%u%c (%s)\nA small e-text reader", MAJOR, BKMKTYPE, MINOR, RELEASE_TYPE);
37 l = new QLabel(vstr, this); 38 l = new QLabel(vstr, this);
38 grid->addWidget(l, 5, 0); 39 grid->addWidget(l, 5, 0);
39 QPushButton* exitbutton = new QPushButton("Cancel", this); 40 QPushButton* exitbutton = new QPushButton("Cancel", this);
diff --git a/noncore/apps/opie-reader/main.cpp b/noncore/apps/opie-reader/main.cpp
index 08f59a8..2440037 100644
--- a/noncore/apps/opie-reader/main.cpp
+++ b/noncore/apps/opie-reader/main.cpp
@@ -9,7 +9,11 @@ QTReaderApp* app = NULL;
9 9
10void handler(int signum) 10void handler(int signum)
11{ 11{
12 if (app != NULL) app->saveprefs(); 12 if (app != NULL)
13 {
14 app->suspend();
15 app->saveprefs();
16 }
13 signal(signum, handler); 17 signal(signum, handler);
14} 18}
15 19
diff --git a/noncore/apps/opie-reader/name.h b/noncore/apps/opie-reader/name.h
new file mode 100644
index 0000000..d419005
--- a/dev/null
+++ b/noncore/apps/opie-reader/name.h
@@ -0,0 +1,8 @@
1#ifndef __NAME_H
2#define __NAME_H
3
4#define PROGNAME "Opie-Reader"
5#define SHORTPROGNAME "Reader"
6#define APPDIR "uqtreader"
7
8#endif
diff --git a/noncore/apps/opie-reader/opie-reader.pro b/noncore/apps/opie-reader/opie-reader.pro
index 51849a3..139c03a 100644
--- a/noncore/apps/opie-reader/opie-reader.pro
+++ b/noncore/apps/opie-reader/opie-reader.pro
@@ -1,58 +1,73 @@
1TEMPLATE = app 1 TEMPLATE= app
2CONFIG = qt warn_on release 2 CONFIG = qt warn_on release
3HEADERS = Aportis.h \ 3 HEADERS = Aportis.h \
4 BuffDoc.h \ 4 Bkmks.h \
5 CBuffer.h \ 5 BuffDoc.h \
6 CDrawBuffer.h \ 6 CAnnoEdit.h \
7 CExpander.h \ 7 CBuffer.h \
8 CFilter.h \ 8 CDrawBuffer.h \
9 QTReader.h \ 9 CEncoding.h \
10 QTReaderApp.h \ 10 CExpander.h \
11 ZText.h \ 11 CFilter.h \
12 arith.h \ 12 Filedata.h \
13 my_list.h \ 13 FontControl.h \
14 ppm.h \ 14 GraphicWin.h \
15 ppm_expander.h \ 15 Markups.h \
16 cbkmkselector.h \ 16 Navigation.h \
17 fileBrowser.h \ 17 Palm2QImage.h \
18 ztxt.h \ 18 QFloatBar.h \
19 QtrListView.h \ 19 QTReader.h \
20 infowin.h \ 20 QTReaderApp.h \
21 version.h \ 21 QtrListView.h \
22 pdb.h \ 22 Queue.h \
23 utypes.h \ 23 StateData.h \
24 ustring.h \ 24 StyleConsts.h \
25 CEncoding.h \ 25 ZText.h \
26 CAnnoEdit.h \ 26 arith.h \
27 QFloatBar.h \ 27 cbkmkselector.h \
28 StyleConsts.h \ 28 config.h \
29 FontControl.h \ 29 fileBrowser.h \
30 plucker.h \ 30 infowin.h \
31 Markups.h \ 31 my_list.h \
32 Bkmks.h \ 32 name.h \
33 config.h 33 opie.h \
34SOURCES = Aportis.cpp \ 34 pdb.h \
35 BuffDoc.cpp \ 35 plucker.h \
36 CBuffer.cpp \ 36 ppm.h \
37 CDrawBuffer.cpp \ 37 ppm_expander.h \
38 QTReader.cpp \ 38 ustring.h \
39 QTReaderApp.cpp \ 39 utypes.h \
40 arith_d.cpp \ 40 version.h \
41 main.cpp \ 41 ztxt.h
42 ppm.cpp \ 42
43 ppm_expander.cpp \ 43 SOURCES = Aportis.cpp \
44 ztxt.cpp \ 44 Bkmks.cpp \
45 QtrListView.cpp \ 45 BuffDoc.cpp \
46 infowin.cpp \ 46 CBuffer.cpp \
47 pdb.cpp \ 47 CDrawBuffer.cpp \
48 CEncoding.cpp \ 48 CEncoding.cpp \
49 CFilter.cpp \ 49 CFilter.cpp \
50 plucker.cpp \ 50 FontControl.cpp \
51 Bkmks.cpp \ 51 Navigation.cpp \
52 fileBrowser.cpp 52 Palm2QImage.cpp \
53DESTDIR = $(OPIEDIR)/bin 53 QTReader.cpp \
54INCLUDEPATH += $(OPIEDIR)/include 54 QTReaderApp.cpp \
55DEPENDPATH += $(OPIEDIR)/include 55 QtrListView.cpp \
56TARGET = reader 56 StyleConsts.cpp \
57LIBS += -lqpe 57 arith_d.cpp \
58 fileBrowser.cpp \
59 infowin.cpp \
60 main.cpp \
61 pdb.cpp \
62 plucker.cpp \
63 ppm.cpp \
64 ppm_expander.cpp \
65 ztxt.cpp
66
67 INTERFACES=
68 DESTDIR = $(OPIEDIR)/bin
69 INCLUDEPATH+= $(OPIEDIR)/include
70 DEPENDPATH+= $(OPIEDIR)/include
71 TARGET = reader
72 LIBS += -lqpe
58 73
diff --git a/noncore/apps/opie-reader/opie.h b/noncore/apps/opie-reader/opie.h
new file mode 100644
index 0000000..e28c2ab
--- a/dev/null
+++ b/noncore/apps/opie-reader/opie.h
@@ -0,0 +1,6 @@
1#ifndef __OPIE_H
2#define __OPIE_H
3
4#define OPIE
5
6#endif
diff --git a/noncore/apps/opie-reader/pdb.cpp b/noncore/apps/opie-reader/pdb.cpp
index 68b904e..3054424 100644
--- a/noncore/apps/opie-reader/pdb.cpp
+++ b/noncore/apps/opie-reader/pdb.cpp
@@ -1,4 +1,7 @@
1#include "pdb.h" 1#include "pdb.h"
2#include <sys/types.h>
3#include <sys/stat.h>
4#include <unistd.h>
2 5
3size_t Cpdb::recordpos(int n) 6size_t Cpdb::recordpos(int n)
4{ 7{
@@ -46,10 +49,13 @@ bool Cpdb::openfile(const char *src)
46 49
47 // just holds the first few chars of the file 50 // just holds the first few chars of the file
48 //char buf[0x100]; 51 //char buf[0x100];
49 fseek(fin,0,SEEK_END); 52 struct stat buf;
50 file_length = ftell(fin); 53 stat(src, &buf);
54 file_length = buf.st_size;
55// fseek(fin,0,SEEK_END);
56// file_length = ftell(fin);
51 57
52 fseek(fin,0,SEEK_SET); 58// fseek(fin,0,SEEK_SET);
53 59
54 fread(&head, 1, sizeof(head), fin); 60 fread(&head, 1, sizeof(head), fin);
55 61
diff --git a/noncore/apps/opie-reader/plucker.cpp b/noncore/apps/opie-reader/plucker.cpp
index ddda4bc..eb039de 100644
--- a/noncore/apps/opie-reader/plucker.cpp
+++ b/noncore/apps/opie-reader/plucker.cpp
@@ -1,18 +1,58 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <string.h> 2#include <string.h>
3#include <qmessagebox.h> 3#include <qmessagebox.h>
4#include "plucker.h" 4#include <qpixmap.h>
5#include <qpe/qcopenvelope_qws.h>
6#ifdef LOCALPICTURES
7#include <qscrollview.h>
8#endif
9#include <qpe/global.h>
10#include <qclipboard.h>
11#include <qpe/qpeapplication.h>
5 12
13#include "plucker.h"
6#include "Aportis.h" 14#include "Aportis.h"
15#include "Palm2QImage.h"
16#include "name.h"
17
18CPlucker::CPlucker() :
19#ifdef LOCALPICTURES
20 m_viewer(NULL),
21 m_picture(NULL),
22#endif
23 expandedtextbuffer(NULL),
24 compressedtextbuffer(NULL),
25 urls(NULL)
26 { /*printf("constructing:%x\n",fin);*/ }
7 27
8CPlucker::CPlucker() : expandedtextbuffer(NULL), compressedtextbuffer(NULL) { /*printf("constructing:%x\n",fin);*/ }
9 28
29void CPlucker::Expand(UInt16 reclen, UInt8 type, UInt8* buffer, UInt16 buffersize)
30{
31 if (type%2 == 0)
32 {
33 fread(buffer, reclen, sizeof(char), fin);
34 }
35 else
36 {
37 fread(compressedtextbuffer, reclen, sizeof(char), fin);
38 switch (ntohs(hdr0.version))
39 {
40 case 2:
41 UnZip(reclen, buffer, buffersize);
42 break;
43 case 1:
44 UnDoc(reclen, buffer, buffersize);
45 break;
46 }
47 }
48}
10 49
11int CPlucker::openfile(const char *src) 50int CPlucker::OpenFile(const char *src)
12{ 51{
52 m_lastBreak = 0;
13 if (!Cpdb::openfile(src)) 53 if (!Cpdb::openfile(src))
14 { 54 {
15 return -1; 55 return -1;
16 } 56 }
17 57
18//printf("Okay %u\n", 4); 58//printf("Okay %u\n", 4);
@@ -21,15 +61,7 @@ int CPlucker::openfile(const char *src)
21 61
22// qDebug("Cool - this IS plucker"); 62// qDebug("Cool - this IS plucker");
23 63
24 textlength = 0; 64 EOPPhase = 0;
25 for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
26 {
27 CPlucker_dataRecord thisHdr;
28 gotorecordnumber(recptr);
29 fread(&thisHdr, 1, sizeof(thisHdr), fin);
30 if (thisHdr.type < 2) textlength += htons(thisHdr.size);
31 }
32
33 gotorecordnumber(0); 65 gotorecordnumber(0);
34 fread(&hdr0, 1, sizeof(hdr0), fin); 66 fread(&hdr0, 1, sizeof(hdr0), fin);
35//printf("Okay %u\n", 5); 67//printf("Okay %u\n", 5);
@@ -37,18 +69,144 @@ int CPlucker::openfile(const char *src)
37 compressedtextbuffer = new UInt8[buffersize]; 69 compressedtextbuffer = new UInt8[buffersize];
38 expandedtextbuffer = new UInt8[buffersize]; 70 expandedtextbuffer = new UInt8[buffersize];
39 71
40// qDebug("Total number of records:%u", ntohs(head.recordList.numRecords)); 72 qDebug("Total number of records:%u", ntohs(head.recordList.numRecords));
41 73
42 unsigned int nrecs = ntohs(hdr0.nRecords); 74 unsigned int nrecs = ntohs(hdr0.nRecords);
43// qDebug("Version %u, no. res %u", ntohs(hdr0.version), nrecs); 75 qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs);
44 for (unsigned int i = 0; i < 4*nrecs; i++) 76 UInt16 homerecid = 1;
77 UInt16 urlid = 0;
78 bool urlsfound = false;
79 for (unsigned int i = 0; i < nrecs; i++)
45 { 80 {
46 UInt8 id; 81 UInt16 id, name;
47 fread(&id, 1, sizeof(id), fin); 82 fread(&name, 1, sizeof(name), fin);
48// qDebug("%x", id); 83 fread(&id, 1, sizeof(id), fin);
84 qDebug("N:%d, I:%d", ntohs(name), ntohs(id));
85 if (ntohs(name) == 0) homerecid = ntohs(id);
86 if (ntohs(name) == 2)
87 {
88 urlsfound = true;
89 urlid = id;
90 qDebug("Found url index:%d", ntohs(urlid));
91 }
92 //qDebug("%x", id);
49 } 93 }
94
95 textlength = 0;
96 for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
97 {
98 CPlucker_dataRecord thisHdr;
99 gotorecordnumber(recptr);
100 fread(&thisHdr, 1, sizeof(thisHdr), fin);
101 if (ntohs(thisHdr.uid) == homerecid)
102 {
103 m_homepos = textlength;
104 qDebug("Home pos found after %u records", recptr);
105 break;
106 }
107 if (thisHdr.type < 2) textlength += ntohs(thisHdr.size);
108 }
109 textlength = 0;
110
111 if (urlsfound)
112 {
113 unsigned short recptr = finduid(ntohs(urlid));
114 if (recptr != 0)
115 {
116 CPlucker_dataRecord thisHdr;
117 gotorecordnumber(recptr);
118 fread(&thisHdr, 1, sizeof(thisHdr), fin);
119 fread(&urlid, 1, sizeof(urlid), fin);
120 fread(&urlid, 1, sizeof(urlid), fin);
121 qDebug("urls are in %d", ntohs(urlid));
122 recptr = finduid(ntohs(urlid));
123 if (recptr != 0)
124 {
125 gotorecordnumber(recptr);
126 fread(&thisHdr, 1, sizeof(thisHdr), fin);
127 qDebug("Found urls:%x",thisHdr.type);
128 UInt16 reclen = recordlength(recptr) - sizeof(thisHdr);
129 gotorecordnumber(recptr);
130 fread(&thisHdr, 1, sizeof(thisHdr), fin);
131 urlsize = ntohs(thisHdr.size);
132 urls = new char[urlsize];
133 Expand(reclen, thisHdr.type, (UInt8*)urls, urlsize);
134 }
135 }
136 }
137/*
138 for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
139 {
140 CPlucker_dataRecord thisHdr;
141 gotorecordnumber(recptr);
142 fread(&thisHdr, 1, sizeof(thisHdr), fin);
143 if (thisHdr.uid == urlid)
144 {
145 qDebug("Found urls:%x",thisHdr.type);
146 UInt16 reclen = recordlength(recptr) - sizeof(thisHdr);
147 gotorecordnumber(recptr);
148 fread(&thisHdr, 1, sizeof(thisHdr), fin);
149 urlsize = ntohs(thisHdr.size);
150 urls = new char[urlsize];
151 Expand(reclen, thisHdr.type, (UInt8*)urls, urlsize);
152 break;
153 }
154 }
155*/
50 home(); 156 home();
157#ifdef LOCALPICTURES
158 if (m_viewer == NULL)
159 {
160 m_viewer = new QScrollView(NULL);
161 m_picture = new QWidget(m_viewer->viewport());
162 m_viewer->addChild(m_picture);
163 }
164#endif
51 return 0; 165 return 0;
166
167}
168
169void CPlucker::sizes(unsigned long& _file, unsigned long& _text)
170{
171 qDebug("Sizes called:%u",textlength);
172 _file = file_length;
173 if (textlength == 0)
174 {
175 for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
176 {
177 CPlucker_dataRecord thisHdr;
178 gotorecordnumber(recptr);
179 fread(&thisHdr, 1, sizeof(thisHdr), fin);
180 if (thisHdr.type < 2) textlength += ntohs(thisHdr.size);
181 }
182 }
183 _text = textlength;
184//ntohl(hdr0.size);
185}
186
187
188char* CPlucker::geturl(UInt16 i)
189{
190 if (urls == NULL) return NULL;
191 char* ptr = urls;
192 int rn = 1;
193 while (ptr - urls < urlsize)
194 {
195 if (rn == i) return ptr;
196 ptr += strlen(ptr)+1;
197 rn++;
198 }
199 return NULL;
200}
201
202CPlucker::~CPlucker()
203{
204 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer;
205 if (compressedtextbuffer != NULL) delete [] compressedtextbuffer;
206 if (urls != NULL) delete [] urls;
207#ifdef LOCALPICTURES
208 if (m_viewer != NULL) delete m_viewer;
209#endif
52} 210}
53 211
54int CPlucker::bgetch() 212int CPlucker::bgetch()
@@ -56,207 +214,355 @@ int CPlucker::bgetch()
56 int ch = EOF; 214 int ch = EOF;
57 if (bufferpos >= buffercontent) 215 if (bufferpos >= buffercontent)
58 { 216 {
59 if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF; 217 if (!m_continuous) return EOF;
60// qDebug("Passing through %u", currentpos); 218 if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF;
61 if (!expand(bufferrec+1)) return EOF; 219 //qDebug("Passing through %u", currentpos);
62 mystyle.unset(); 220 if (!expand(bufferrec+1)) return EOF;
221 mystyle.unset();
222 ch = 10;
223 EOPPhase = 4;
63 } 224 }
64 225 else if (bufferpos == m_nextPara)
65 if (bufferpos == m_nextPara)
66 { 226 {
67 UInt16 attr = m_ParaAttrs[m_nextParaIndex]; 227 while (bufferpos == m_nextPara)
68 m_nextParaIndex++; 228 {
69 if (m_nextParaIndex == m_nParas) 229 UInt16 attr = m_ParaAttrs[m_nextParaIndex];
70 { 230 m_nextParaIndex++;
71 m_nextPara = -1; 231 if (m_nextParaIndex == m_nParas)
72 } 232 {
73 else 233 m_nextPara = -1;
74 { 234 }
75 m_nextPara += m_ParaOffsets[m_nextParaIndex]; 235 else
76 } 236 {
77// qDebug("New paragraph"); 237 m_nextPara += m_ParaOffsets[m_nextParaIndex];
78 ch = 10; 238 }
239 }
240 mystyle.unset();
241 if (m_lastBreak == locate())
242 {
243 currentpos++;
244 ch = expandedtextbuffer[bufferpos++];
245 }
246 else
247 {
248 ch = 10;
249 }
79 } 250 }
80 else 251 else
81 { 252 {
82 currentpos++; 253 currentpos++;
83 ch = expandedtextbuffer[bufferpos++]; 254 ch = expandedtextbuffer[bufferpos++];
84 } 255 }
85 return ch; 256 return ch;
86} 257}
87 258
88int CPlucker::getch() 259int CPlucker::getch()
89{ 260{
90 int ch = bgetch(); 261 mystyle.clearPicture();
91 while (ch == 0) 262
92 { 263
93 ch = bgetch(); 264 if (EOPPhase > 0)
94// qDebug("Function:%x", ch);
95 switch (ch)
96 {
97 case 0x38:
98 ch = 10;
99 break;
100 case 0x0a:
101 case 0x0c:
102 {
103 unsigned long ln = 0;
104 int skip = ch & 7;
105 for (int i = 0; i < 2; i++)
106 { 265 {
107 int ch = bgetch(); 266 int ch = 10;
108 ln = (ln << 8) + ch; 267 switch (EOPPhase)
109// qDebug("ch:%d, ln:%u", ch, ln); 268 {
269 case 4:
270 mystyle.setPicture(hRule(100,5));
271 mystyle.setCentreJustify();
272 ch = '#';
273 break;
274 case 3:
275 mystyle.setFontSize(3);
276 ch = 10;
277 break;
278 case 2:
279 ch = 10;
280 break;
281 case 1:
282 mystyle.unset();
283 default:
284 ch = 10;
285 }
286 EOPPhase--;
287 return ch;
110 } 288 }
111 if (skip == 2) 289
290
291 int ch = bgetch();
292 while (ch == 0)
112 { 293 {
113 ln <<= 16; 294 ch = bgetch();
295 //qDebug("Function:%x", ch);
296 switch (ch)
297 {
298 case 0x38:
299 // qDebug("Break:%u", locate());
300 if (m_lastBreak == locate())
301 {
302 ch = bgetch();
303 }
304 else
305 {
306 ch = 10;
307 }
308 m_lastBreak = locate();
309 break;
310 case 0x0a:
311 case 0x0c:
312 {
313 unsigned long ln = 0;
314 int skip = ch & 7;
315 for (int i = 0; i < 2; i++)
316 {
317 int ch = bgetch();
318 ln = (ln << 8) + ch;
319 // qDebug("ch:%d, ln:%u", ch, ln);
320 }
321 if (skip == 2)
322 {
323 ln <<= 16;
324 }
325 else
326 {
327 for (int i = 0; i < 2; i++)
328 {
329 int ch = bgetch();
330 ln = (ln << 8) + ch;
331 // qDebug("ch:%d, ln:%u", ch, ln);
332 }
333 }
334 // qDebug("ln:%u", ln);
335 mystyle.setLink(true);
336 mystyle.setData(ln);
337 // mystyle.setColour(255, 0, 0);
338 bool hasseen = false;
339 for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++)
340 {
341 if (*it == ln)
342 {
343 hasseen = true;
344 break;
345 }
346 }
347 if (hasseen)
348 {
349 mystyle.setStrikethru();
350 }
351 else
352 {
353 mystyle.setUnderline();
354 }
355 ch = bgetch();
356 }
357 break;
358 case 0x08:
359 ch = bgetch();
360 // mystyle.setColour(0, 0, 0);
361 mystyle.unsetUnderline();
362 mystyle.unsetStrikethru();
363 mystyle.setLink(false);
364 mystyle.setData(0);
365 break;
366 case 0x40:
367 mystyle.setItalic();
368 ch = bgetch();
369 break;
370 case 0x48:
371 mystyle.unsetItalic();
372 ch = bgetch();
373 break;
374 case 0x11:
375 {
376 ch = bgetch();
377 // qDebug("Font:%d",ch);
378 switch (ch)
379 {
380 case 0:
381 mystyle.unsetMono();
382 mystyle.unsetBold();
383 mystyle.setFontSize(0);
384 break;
385 case 1:
386 mystyle.unsetMono();
387 mystyle.setBold();
388 mystyle.setFontSize(3);
389 break;
390 case 2:
391 mystyle.unsetMono();
392 mystyle.setBold();
393 mystyle.setFontSize(2);
394 break;
395 case 3:
396 mystyle.unsetMono();
397 mystyle.setBold();
398 // mystyle.unsetBold();
399 mystyle.setFontSize(1);
400 break;
401 case 4:
402 mystyle.unsetMono();
403 mystyle.setBold();
404 // mystyle.unsetBold();
405 mystyle.setFontSize(0);
406 break;
407 case 5:
408 mystyle.unsetMono();
409 mystyle.setBold();
410 mystyle.setFontSize(0);
411 break;
412 case 6:
413 mystyle.unsetMono();
414 mystyle.setBold();
415 mystyle.setFontSize(0);
416 break;
417 case 7:
418 mystyle.unsetMono();
419 mystyle.setBold();
420 mystyle.setFontSize(0);
421 break;
422 case 8: // should be fixed width
423 qDebug("Trying fixed width");
424 mystyle.unsetBold();
425 mystyle.setFontSize(0);
426 mystyle.setMono();
427 break;
428 default:
429 mystyle.unsetBold();
430 mystyle.unsetMono();
431 mystyle.setFontSize(0);
432 break;
433 }
434 ch = bgetch();
435 }
436 break;
437 case 0x29:
438 ch = bgetch();
439 switch (ch)
440 {
441 case 0:
442 mystyle.setLeftJustify();
443 // qDebug("left");
444 break;
445 case 1:
446 mystyle.setRightJustify();
447 // qDebug("right");
448 break;
449 case 2:
450 mystyle.setCentreJustify();
451 // qDebug("centre");
452 break;
453 case 3:
454 mystyle.setFullJustify();
455 // qDebug("full");
456 break;
457
458 }
459 ch = bgetch();
460 break;
461 case 0x53:
462 {
463 int r = bgetch();
464 int g = bgetch();
465 int b = bgetch();
466 mystyle.setColour(r,g,b);
467 ch = bgetch();
468 }
469 break;
470 case 0x1a:
471 case 0x5c:
472 {
473 bool hasalternate = (ch == 0x5c);
474 UInt16 ir = bgetch();
475 ir = (ir << 8) + bgetch();
476 if (hasalternate)
477 {
478 qDebug("Alternate image:%x", ir);
479 UInt16 ir2 = bgetch();
480 ir2 = (ir2 << 8) + bgetch();
481 mystyle.setPicture(expandimg(ir2, true), true, ir);
482#ifdef LOCALPICTURES
483 UInt32 ln = ir;
484 ln <<= 16;
485 mystyle.setLink(true);
486 mystyle.setData(ln);
487#endif
488 }
489 else
490 {
491 mystyle.setPicture(expandimg(ir));
492 }
493 if (mystyle.getLink()) qDebug("Picture link!");
494 ch = '#';
495 }
496 // ch = bgetch();
497 break;
498 case 0x33:
499 {
500 UInt8 h = bgetch();
501 UInt8 wc = bgetch();
502 UInt8 pc = bgetch();
503 UInt16 w = wc;
504 // qDebug("h,w,pc [%u, %u, %u]", h, w, pc);
505 if (w == 0)
506 {
507 w = (240*(unsigned long)pc)/100;
508 }
509 if (w == 0) w = 320;
510 mystyle.setPicture(hRule(w,h,mystyle.Red(),mystyle.Green(),mystyle.Blue()));
511 // if (mystyle.getLink()) qDebug("hRule link!");
512 ch = '#';
513 }
514 break;
515 case 0x60:
516 mystyle.setUnderline();
517 ch = bgetch();
518 break;
519 case 0x68:
520 mystyle.unsetUnderline();
521 ch = bgetch();
522 break;
523 case 0x22:
524 ch = bgetch();
525 mystyle.setLeftMargin(ch);
526 // qDebug("Left margin:%d", ch);
527 ch = bgetch();
528 mystyle.setRightMargin(ch);
529 // qDebug("Right margin:%d", ch);
530 ch = bgetch();
531 break;
532 case 0x70:
533 mystyle.setStrikethru();
534 ch = bgetch();
535 break;
536 case 0x78:
537 mystyle.unsetStrikethru();
538 ch = bgetch();
539 break;
540 case 0x83:
541 case 0x85:
542 default:
543 qDebug("Function:%x NOT IMPLEMENTED", ch);
544 {
545 int skip = ch & 7;
546 for (int i = 0; i < skip; i++)
547 {
548 ch = bgetch();
549 // qDebug("Arg %d, %d", i, ch);
550 }
551 ch = bgetch();
552 }
553 }
114 } 554 }
115 else 555
556 if (m_lastIsBreak && !mystyle.isMono())
116 { 557 {
117 for (int i = 0; i < 2; i++) 558 while (ch == ' ')
118 { 559 {
119 int ch = bgetch(); 560 ch = getch();
120 ln = (ln << 8) + ch; 561 }
121// qDebug("ch:%d, ln:%u", ch, ln);
122 }
123 }
124// qDebug("ln:%u", ln);
125 mystyle.setLink(true);
126 mystyle.setData(ln);
127 mystyle.setColour(255, 0, 0);
128 ch = bgetch();
129 }
130 break;
131 case 0x08:
132 ch = bgetch();
133 mystyle.setColour(0, 0, 0);
134 mystyle.setLink(false);
135 mystyle.setData(0);
136 break;
137 case 0x40:
138 mystyle.setItalic();
139 ch = bgetch();
140 break;
141 case 0x48:
142 mystyle.unsetItalic();
143 ch = bgetch();
144 break;
145 case 0x11:
146 {
147 ch = bgetch();
148 qDebug("Font:%d",ch);
149 switch (ch)
150 {
151 case 0:
152 mystyle.unsetBold();
153 mystyle.setFontSize(0);
154 break;
155 case 1:
156 mystyle.setBold();
157 mystyle.setFontSize(1);
158 break;
159 case 2:
160 mystyle.setBold();
161 mystyle.setFontSize(1);
162 break;
163 case 3:
164// mystyle.setBold();
165 mystyle.setFontSize(1);
166 break;
167 case 4:
168// mystyle.setBold();
169 mystyle.setFontSize(1);
170 break;
171 case 5:
172 mystyle.setBold();
173 mystyle.setFontSize(0);
174 break;
175 case 6:
176 mystyle.setBold();
177 mystyle.setFontSize(0);
178 break;
179 case 7:
180 mystyle.setBold();
181 mystyle.setFontSize(0);
182 break;
183 case 8: // should be fixed width
184 mystyle.unsetBold();
185 mystyle.setFontSize(0);
186 break;
187 default:
188 mystyle.unsetBold();
189 mystyle.setFontSize(0);
190 break;
191 }
192 ch = bgetch();
193 }
194 break;
195 case 0x29:
196 ch = bgetch();
197 switch (ch)
198 {
199 case 0:
200 mystyle.setLeftJustify();
201// qDebug("left");
202 break;
203 case 1:
204 mystyle.setRightJustify();
205// qDebug("right");
206 break;
207 case 2:
208 mystyle.setCentreJustify();
209// qDebug("centre");
210 break;
211 case 3:
212 mystyle.setFullJustify();
213// qDebug("full");
214 break;
215
216 }
217 ch = bgetch();
218 break;
219 case 0x53:
220 {
221 int r = bgetch();
222 int g = bgetch();
223 int b = bgetch();
224 mystyle.setColour(r,g,b);
225 ch = bgetch();
226 }
227 break;
228 case 0x1a:
229/*
230 {
231 UInt16 ir = bgetch();
232 ir = (ir << 8) + bgetch();
233 expandimg(ir);
234 }
235 ch = bgetch();
236 break;
237*/
238 case 0x33:
239 case 0x22:
240 case 0x5c:
241 case 0x60:
242 case 0x68:
243 case 0x70:
244 case 0x78:
245 case 0x83:
246 case 0x85:
247 default:
248 qDebug("Function:%x NOT IMPLEMENTED", ch);
249 {
250 int skip = ch & 7;
251 for (int i = 0; i < skip; i++)
252 {
253 ch = bgetch();
254 qDebug("Arg %d, %d", i, ch);
255 }
256 ch = bgetch();
257 }
258 }
259 } 562 }
563
564 m_lastIsBreak = (ch == 10);
565
260 return ch; 566 return ch;
261} 567}
262 568
@@ -276,10 +582,10 @@ unsigned int CPlucker::locate()
276 CPlucker_dataRecord thisHdr; 582 CPlucker_dataRecord thisHdr;
277 while (thisrec < bufferrec) 583 while (thisrec < bufferrec)
278 { 584 {
279 fread(&thisHdr, 1, sizeof(thisHdr), fin); 585 fread(&thisHdr, 1, sizeof(thisHdr), fin);
280 if (thisHdr.type < 2) locpos += htons(thisHdr.size); 586 if (thisHdr.type < 2) locpos += ntohs(thisHdr.size);
281 thisrec++; 587 thisrec++;
282 gotorecordnumber(thisrec); 588 gotorecordnumber(thisrec);
283 } 589 }
284 return locpos+bufferpos; 590 return locpos+bufferpos;
285*/ 591*/
@@ -293,57 +599,255 @@ void CPlucker::locate(unsigned int n)
293 CPlucker_dataRecord thisHdr; 599 CPlucker_dataRecord thisHdr;
294 do 600 do
295 { 601 {
296 thisrec++; 602 thisrec++;
297 locpos += bs; 603 locpos += bs;
298 gotorecordnumber(thisrec); 604 gotorecordnumber(thisrec);
299 fread(&thisHdr, 1, sizeof(thisHdr), fin); 605 fread(&thisHdr, 1, sizeof(thisHdr), fin);
300 if (thisHdr.type < 2) 606 if (thisHdr.type < 2)
301 { 607 {
302 bs = htons(thisHdr.size); 608 bs = ntohs(thisHdr.size);
303 } 609 }
304 else 610 else
305 { 611 {
306 bs = 0; 612 bs = 0;
307 } 613 }
308 } while (locpos + bs < n); 614 } while (locpos + bs <= n);
309 currentpos = locpos; 615 currentpos = locpos;
310 expand(thisrec); 616 expand(thisrec);
617#ifdef _FAST
311 while (currentpos < n && bufferpos < buffercontent) bgetch(); 618 while (currentpos < n && bufferpos < buffercontent) bgetch();
619#else
620 while (currentpos < n && bufferpos < buffercontent) getch();
621#endif
312} 622}
313 623
314bool CPlucker::hyperlink(unsigned int n) 624bool CPlucker::hyperlink(unsigned int n)
315{ 625{
626 visited.push_front(n);
316 UInt16 tuid = (n >> 16); 627 UInt16 tuid = (n >> 16);
317 n &= 0xffff; 628 n &= 0xffff;
629// qDebug("Hyper:<%u,%u>", tuid, n);
318 UInt16 thisrec = 1; 630 UInt16 thisrec = 1;
319 currentpos = 0; 631 currentpos = 0;
320 gotorecordnumber(thisrec); 632 gotorecordnumber(thisrec);
321 CPlucker_dataRecord thisHdr; 633 CPlucker_dataRecord thisHdr;
322 while (1) 634 while (1)
323 { 635 {
324 fread(&thisHdr, 1, sizeof(thisHdr), fin); 636 fread(&thisHdr, 1, sizeof(thisHdr), fin);
325 if (tuid <= htons(thisHdr.uid)) break; 637 if (tuid == ntohs(thisHdr.uid)) break;
326 if (thisHdr.type < 2) currentpos += htons(thisHdr.size); 638 if (thisHdr.type < 2) currentpos += ntohs(thisHdr.size);
327// qDebug("hyper-cp:%u", currentpos); 639 //qDebug("hyper-cp:%u", currentpos);
328 thisrec++; 640 thisrec++;
329 gotorecordnumber(thisrec); 641 if (thisrec >= ntohs(head.recordList.numRecords))
642 {
643 if (urls == NULL)
644 {
645 QMessageBox::information(NULL,
646 PROGNAME,
647 QString("No external links\nin this pluck")
648 );
649 }
650 else
651 {
652 char *turl = geturl(tuid);
653 if (turl == NULL)
654 {
655 QMessageBox::information(NULL,
656 PROGNAME,
657 QString("Couldn't find link")
658 );
659 }
660 else
661 {
662 QString wrd(turl);
663 QClipboard* cb = QApplication::clipboard();
664 cb->setText(wrd);
665 if (wrd.length() > 10)
666 {
667 Global::statusMessage(wrd.left(8) + "..");
668 }
669 }
670 }
671 return false;
672 }
673 gotorecordnumber(thisrec);
330 } 674 }
331 if (thisHdr.type > 1) 675 if (thisHdr.type > 1)
332 { 676 {
333 QMessageBox::information(NULL, 677 if (thisHdr.type == 4)
334 QString("OpieReader"), 678 {
335 QString("External links\nnot yet supported") 679 QMessageBox::information(NULL,
336 ); 680 PROGNAME,
337 return false; 681 QString("Mailto links\nnot yet supported (2)"));
682 }
683 else
684 {
685#ifdef LOCALPICTURES
686 if (thisHdr.type > 3)
687 {
688#endif
689 QMessageBox::information(NULL,
690 PROGNAME,
691 QString("External links\nnot yet supported (2)")
692 );
693#ifdef LOCALPICTURES
694 }
695 else
696 {
697 showimg(tuid);
698 }
699#endif
700 }
701 return false;
702 }
703/*
704 if (thisHdr.type == 2 || thisHdr.type == 3)
705 {
706 expandimg(thisrec);
707
338 } 708 }
709*/
339 else 710 else
340 { 711 {
341 expand(thisrec); 712 expand(thisrec);
342 while (bufferpos < n && bufferpos < buffercontent) getch(); 713 if (n != 0)
714 {
715 if (n >= m_nParas)
716 {
717 QMessageBox::information(NULL,
718 PROGNAME,
719 QString("Error in link\nPara # too big")
720 );
721 return false;
722 }
723 unsigned int noff = 0;
724 for (int i = 0; i < n; i++) noff += m_ParaOffsets[i];
725 n = noff;
726 }
727 if (n > ntohs(thisHdr.size))
728 {
729 QMessageBox::information(NULL,
730 PROGNAME,
731 QString("Error in link\nOffset too big")
732 );
733 return false;
734 }
735 qDebug("Hyper:<%u,%u>", tuid, n);
736 while (bufferpos < n && bufferpos < buffercontent) getch();
343 } 737 }
344 return true; 738 return true;
345} 739}
740/*
741bool CPlucker::hyperlink(unsigned int n)
742{
743 visited.push_front(n);
744 UInt16 tuid = (n >> 16);
745 n &= 0xffff;
746// qDebug("Hyper:<%u,%u>", tuid, n);
747 UInt16 thisrec = finduid(tuid);
748 if (thisrec == 0)
749 {
750 if (urls == NULL)
751 {
752 QMessageBox::information(NULL,
753 PROGNAME,
754 QString("No external links\nin this pluck")
755 );
756 }
757 else
758 {
759 char *turl = geturl(tuid);
760 if (turl == NULL)
761 {
762 QMessageBox::information(NULL,
763 PROGNAME,
764 QString("Couldn't find link")
765 );
766 }
767 else
768 {
769 QString wrd(turl);
770 QClipboard* cb = QApplication::clipboard();
771 cb->setText(wrd);
772 if (wrd.length() > 10)
773 {
774 Global::statusMessage(wrd.left(8) + "..");
775 }
776 }
777 }
778 return false;
779 }
780 else
781 {
782 currentpos = 0;
783 gotorecordnumber(thisrec);
784 CPlucker_dataRecord thisHdr;
785 fread(&thisHdr, 1, sizeof(thisHdr), fin);
346 786
787 if (thisHdr.type > 1)
788 {
789 if (thisHdr.type == 4)
790 {
791 QMessageBox::information(NULL,
792 PROGNAME,
793 QString("Mailto links\nnot yet supported (2)"));
794 }
795 else
796 {
797#ifdef LOCALPICTURES
798 if (thisHdr.type > 3)
799 {
800#endif
801 QMessageBox::information(NULL,
802 PROGNAME,
803 QString("External links\nnot yet supported (2)")
804 );
805#ifdef LOCALPICTURES
806 }
807 else
808 {
809 showimg(tuid);
810 }
811#endif
812 }
813 return false;
814 }
815// if (thisHdr.type == 2 || thisHdr.type == 3)
816// {
817// expandimg(thisrec);
818// }
819 else
820 {
821 expand(thisrec);
822 if (n != 0)
823 {
824 if (n >= m_nParas)
825 {
826 QMessageBox::information(NULL,
827 PROGNAME,
828 QString("Error in link\nPara # too big")
829 );
830 return false;
831 }
832 unsigned int noff = 0;
833 for (int i = 0; i < n; i++) noff += m_ParaOffsets[i];
834 n = noff;
835 }
836 if (n > ntohs(thisHdr.size))
837 {
838 QMessageBox::information(NULL,
839 PROGNAME,
840 QString("Error in link\nOffset too big")
841 );
842 return false;
843 }
844 qDebug("Hyper:<%u,%u>", tuid, n);
845 while (bufferpos < n && bufferpos < buffercontent) getch();
846 }
847 return true;
848 }
849}
850*/
347bool CPlucker::expand(int thisrec) 851bool CPlucker::expand(int thisrec)
348{ 852{
349 mystyle.unset(); 853 mystyle.unset();
@@ -352,58 +856,42 @@ bool CPlucker::expand(int thisrec)
352 CPlucker_dataRecord thisHdr; 856 CPlucker_dataRecord thisHdr;
353 while (1) 857 while (1)
354 { 858 {
355 fread(&thisHdr, 1, sizeof(thisHdr), fin); 859 fread(&thisHdr, 1, sizeof(thisHdr), fin);
356// qDebug("This (%d) type is %d, uid is %u", thisrec, thisHdr.type, ntohs(thisHdr.uid)); 860 //qDebug("This (%d) type is %d, uid is %u", thisrec, thisHdr.type, ntohs(thisHdr.uid));
357 if (thisHdr.type < 2) break; 861 if (thisHdr.type < 2) break;
358 qDebug("Skipping paragraph of type %d", thisHdr.type); 862 qDebug("Skipping paragraph of type %d", thisHdr.type);
359 if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false; 863 if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false;
360 reclen = recordlength(thisrec); 864 reclen = recordlength(thisrec);
361 gotorecordnumber(thisrec); 865 gotorecordnumber(thisrec);
362 } 866 }
363 m_nParas = ntohs(thisHdr.nParagraphs); 867 m_nParas = ntohs(thisHdr.nParagraphs);
364// qDebug("It has %u paragraphs and is %u bytes", htons(thisHdr.nParagraphs), htons(thisHdr.size)); 868 //qDebug("It has %u paragraphs and is %u bytes", ntohs(thisHdr.nParagraphs), ntohs(thisHdr.size));
365 uid = ntohs(thisHdr.uid); 869 uid = ntohs(thisHdr.uid);
366 for (int i = 0; i < m_nParas; i++) 870 for (int i = 0; i < m_nParas; i++)
367 { 871 {
368 UInt16 ubytes, attrs; 872 UInt16 ubytes, attrs;
369 fread(&ubytes, 1, sizeof(ubytes), fin); 873 fread(&ubytes, 1, sizeof(ubytes), fin);
370 fread(&attrs, 1, sizeof(attrs), fin); 874 fread(&attrs, 1, sizeof(attrs), fin);
371 m_ParaOffsets[i] = ntohs(ubytes); 875 m_ParaOffsets[i] = ntohs(ubytes);
372 m_ParaAttrs[i] = ntohs(attrs); 876 m_ParaAttrs[i] = ntohs(attrs);
373// qDebug("Bytes %u, Attr %x", ntohs(ubytes), attrs); 877 //qDebug("Bytes %u, Attr %x", ntohs(ubytes), attrs);
374 } 878 }
375 if (m_nParas > 0) 879 if (m_nParas > 0)
376 { 880 {
377 m_nextPara = m_ParaOffsets[0]; 881 m_nextPara = m_ParaOffsets[0];
378// qDebug("First offset = %u", m_nextPara); 882 //qDebug("First offset = %u", m_nextPara);
379 m_nextParaIndex = 0; 883 m_nextParaIndex = 0;
380 } 884 }
381 else 885 else
382 { 886 {
383 m_nextPara = -1; 887 m_nextPara = -1;
384 } 888 }
385 889
386 reclen -= sizeof(thisHdr)+4*m_nParas; 890 reclen -= sizeof(thisHdr)+4*m_nParas;
387 891
388 buffercontent = htons(thisHdr.size); 892 buffercontent = ntohs(thisHdr.size);
389 893
390 if (thisHdr.type == 0) 894 Expand(reclen, thisHdr.type, expandedtextbuffer, buffercontent);
391 {
392 fread(expandedtextbuffer, reclen, sizeof(char), fin);
393 }
394 else
395 {
396 fread(compressedtextbuffer, reclen, sizeof(char), fin);
397 switch (ntohs(hdr0.version))
398 {
399 case 2:
400 UnZip(reclen, expandedtextbuffer, buffercontent);
401 break;
402 case 1:
403 UnDoc(reclen, expandedtextbuffer, buffercontent);
404 break;
405 }
406 }
407 bufferpos = 0; 895 bufferpos = 0;
408 bufferrec = thisrec; 896 bufferrec = thisrec;
409// qDebug("BC:%u, HS:%u", buffercontent, ntohs(thisHdr.size)); 897// qDebug("BC:%u, HS:%u", buffercontent, ntohs(thisHdr.size));
@@ -440,6 +928,8 @@ void CPlucker::UnZip(size_t reclen, UInt8* tgtbuffer, UInt16 bsize)
440 928
441 err = inflate( &zstream, Z_SYNC_FLUSH ); 929 err = inflate( &zstream, Z_SYNC_FLUSH );
442 930
931 //qDebug("err:%d - %u", err, zstream.avail_in);
932
443 } while ( err == Z_OK ); 933 } while ( err == Z_OK );
444 934
445 inflateEnd(&zstream); 935 inflateEnd(&zstream);
@@ -511,69 +1001,241 @@ CList<Bkmk>* CPlucker::getbkmklist()
511 1001
512 for (int i = 1; i < ntohs(head.recordList.numRecords); i++) 1002 for (int i = 1; i < ntohs(head.recordList.numRecords); i++)
513 { 1003 {
514 gotorecordnumber(i); 1004 gotorecordnumber(i);
515 fread(&thisHdr, 1, sizeof(thisHdr), fin); 1005 fread(&thisHdr, 1, sizeof(thisHdr), fin);
516 if (thisHdr.type == 8) 1006 if (thisHdr.type == 8)
517 { 1007 {
518 UInt16 n; 1008 UInt16 n;
519 fread(&n, 1, sizeof(n), fin); 1009 fread(&n, 1, sizeof(n), fin);
520 n = ntohs(n); 1010 n = ntohs(n);
521 qDebug("Found %u bookmarks", n); 1011 qDebug("Found %u bookmarks", n);
522 } 1012 }
523 qDebug("Found:%d, %u", i , thisHdr.type); 1013 qDebug("Found:%d, %u", i , thisHdr.type);
524 } 1014 }
525*/ 1015*/
526 return NULL; 1016 return NULL;
527} 1017}
528 1018
529void CPlucker::expandimg(UInt16 tgt) 1019QImage* CPlucker::getimg(UInt16 tgt)
530{ 1020{
531 qDebug("Image:%u", tgt); 1021// static int imageno;
1022// char* file = "tmp1";
1023// sprintf(file, "image%04u.tbmp", imageno++);
1024// qDebug("Image:%u", tgt);
532 CPlucker_dataRecord thisHdr; 1025 CPlucker_dataRecord thisHdr;
533 size_t reclen; 1026 size_t reclen;
1027 UInt16 thisrec = finduid(tgt);
1028 reclen = recordlength(thisrec);
1029 gotorecordnumber(thisrec);
1030 fread(&thisHdr, 1, sizeof(thisHdr), fin);
1031/*
534 UInt16 thisrec = 0; 1032 UInt16 thisrec = 0;
535 do 1033 do
536 { 1034 {
537 thisrec++; 1035 hthisrec++;
538 reclen = recordlength(thisrec); 1036 reclen = recordlength(thisrec);
539 gotorecordnumber(thisrec); 1037 gotorecordnumber(thisrec);
540 qDebug("thisrec:%u.%u", ftell(fin),thisrec); 1038 //qDebug("thisrec:%u.%u", ftell(fin),thisrec);
541 fread(&thisHdr, 1, sizeof(thisHdr), fin); 1039 fread(&thisHdr, 1, sizeof(thisHdr), fin);
542 } 1040 }
543 while (ntohs(thisHdr.uid) != tgt); 1041 while (ntohs(thisHdr.uid) != tgt);
544 1042*/
545 reclen -= sizeof(thisHdr); 1043 reclen -= sizeof(thisHdr);
546 1044
547 UInt16 imgsize = htons(thisHdr.size); 1045 UInt16 imgsize = ntohs(thisHdr.size);
548 UInt8* imgbuffer = new UInt8[imgsize]; 1046 UInt8* imgbuffer = new UInt8[imgsize];
549 1047
550 qDebug("type:%u", thisHdr.type); 1048// qDebug("type:%u", thisHdr.type);
1049 Expand(reclen, thisHdr.type, imgbuffer, imgsize);
551 1050
552 if (thisHdr.type == 2) 1051 QImage* qimage = Palm2QImage(imgbuffer, imgsize);
1052
1053 delete [] imgbuffer;
1054
1055 return qimage;
1056}
1057
1058#include <qnamespace.h>
1059
1060QPixmap* CPlucker::expandimg(UInt16 tgt, bool border)
1061{
1062 QImage* qimage = getimg(tgt);
1063 if (qimage == NULL) return NULL;
1064 QPixmap* image = new QPixmap(0,0);
1065 QPixmap* ret;
1066// qDebug("New image");
1067 image->convertFromImage(*qimage);
1068 delete qimage;
1069 if (border)
553 { 1070 {
554 qDebug("Not compressed:%u.%u", ftell(fin),reclen); 1071 ret = new QPixmap(image->width()+4, image->height()+4);
555 fread(imgbuffer, reclen, sizeof(char), fin); 1072 ret->fill(Qt::red);
556 qDebug("Not compressed:%u.%u", ftell(fin),reclen); 1073 bitBlt(ret, 2, 2, image, 0, 0, -1, -1);//, Qt::RasterOp::CopyROP);
1074 delete image;
557 } 1075 }
558 else 1076 else
559 { 1077 {
560 qDebug("Compressed"); 1078 ret = image;
561 fread(compressedtextbuffer, reclen, sizeof(char), fin);
562 switch (ntohs(hdr0.version))
563 {
564 case 2:
565 UnZip(reclen, imgbuffer, imgsize);
566 break;
567 case 1:
568 UnDoc(reclen, imgbuffer, imgsize);
569 break;
570 }
571 } 1079 }
572 FILE* imgfile = fopen("/home/tim/newreader/imagefile.tbmp", "w"); 1080 return ret;
573 if (imgfile != NULL) 1081}
1082
1083#ifdef _BUFFERPICS
1084#include <qmap.h>
1085#endif
1086
1087QPixmap* CPlucker::getPicture(unsigned long tgt)
1088{
1089#ifdef _BUFFERPICS
1090 static QMap<unsigned long, QPixmap> pix;
1091 QMap<unsigned long, QPixmap>::Iterator t = pix.find(tgt);
1092 if (t == pix.end())
574 { 1093 {
575 fwrite(imgbuffer, 1, imgsize, imgfile); 1094 pix[tgt] = *expandimg(tgt);
576 fclose(imgfile); 1095 return &pix[tgt];
577 } 1096 }
578 delete [] imgbuffer; 1097 else
1098 return &(t.data());
1099#else
1100 return expandimg(tgt);
1101#endif
1102}
1103
1104#ifdef LOCALPICTURES
1105#include <unistd.h>
1106#include <qpe/global.h>
1107void CPlucker::showimg(UInt16 tgt)
1108{
1109 qDebug("Crassssssh!");
1110 QPixmap* qimage = expandimg(tgt);
1111 m_picture->setFixedSize(qimage->size());
1112 m_picture->setBackgroundPixmap(*qimage);
1113 delete qimage;
1114 m_viewer->show();
1115
1116/*
1117 char tmp[] = "uqtreader.XXXXXX";
1118 QImage* qimage = getimg(tgt);
1119 QPixmap* image = new QPixmap(0,0);
1120// qDebug("New image");
1121 image->convertFromImage(*qimage);
1122 delete qimage;
1123 char tmpfile[sizeof(tmp)+1];
1124 strcpy(tmpfile,tmp);
1125 int f = mkstemp(tmpfile);
1126 close(f);
1127 qDebug("TMPFILE:%s", tmpfile);
1128 if (image->save(tmpfile,"PNG"))
1129 {
1130 QCopEnvelope e("QPE/Application/showimg", "setDocument(QString)");
1131 e << QString(tmpfile);
1132 }
1133 Global::statusMessage("Opening image");
1134 sleep(5);
1135 delete image;
1136 unlink(tmpfile);
1137*/
1138}
1139
1140#endif
1141
1142void CPlucker::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
1143{
1144 unsigned short sz = 0;
1145 for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++)
1146 {
1147 sz++;
1148 }
1149 size_t newlen = srclen+sizeof(sz)+sz*sizeof(unsigned long);
1150 unsigned char* newdata = new unsigned char[newlen];
1151 unsigned char* pdata = newdata;
1152 memcpy(newdata, src, srclen);
1153 newdata += srclen;
1154 memcpy(newdata, &sz, sizeof(sz));
1155 newdata += sizeof(sz);
1156 for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++)
1157 {
1158 unsigned long t = *it;
1159 qDebug("[%u]", t);
1160 memcpy(newdata, &t, sizeof(t));
1161 newdata += sizeof(t);
1162 }
1163 m_nav.setSaveData(data, len, pdata, newlen);
1164 delete [] pdata;
1165}
1166
1167void CPlucker::putSaveData(unsigned char*& src, unsigned short& srclen)
1168{
1169 unsigned short sz;
1170 if (srclen >= sizeof(sz))
1171 {
1172 memcpy(&sz, src, sizeof(sz));
1173 src += sizeof(sz);
1174 srclen -= sizeof(sz);
1175 }
1176 for (int i = 0; i < sz; i++)
1177 {
1178 unsigned long t;
1179 if (srclen >= sizeof(t))
1180 {
1181 memcpy(&t, src, sizeof(t));
1182 qDebug("[%u]", t);
1183 visited.push_front(t);
1184 src += sizeof(t);
1185 srclen -= sizeof(t);
1186 }
1187 else
1188 {
1189 QMessageBox::warning(NULL, PROGNAME, "File data mismatch\nMight fix itself");
1190 break;
1191 }
1192 }
1193 m_nav.putSaveData(src, srclen);
1194}
1195
1196unsigned short CPlucker::finduid(unsigned short urlid)
1197{
1198// qDebug("Finding %u", urlid);
1199 unsigned short jmin = 1, jmax = ntohs(head.recordList.numRecords);
1200 unsigned short jmid = (jmin+jmax) >> 1;
1201 while (jmax - jmin > 1)
1202 {
1203 CPlucker_dataRecord thisHdr;
1204 gotorecordnumber(jmid);
1205 fread(&thisHdr, 1, sizeof(thisHdr), fin);
1206 unsigned short luid = ntohs(thisHdr.uid);
1207 //qDebug("%u %u %u : %u", jmin, jmid, jmax, urlid);
1208 if (luid == urlid)
1209 {
1210 return jmid;
1211 }
1212 if (luid < urlid)
1213 {
1214 jmin = jmid;
1215 }
1216 else
1217 {
1218 jmax = jmid;
1219 }
1220 jmid = (jmin+jmax) >> 1;
1221 }
1222 CPlucker_dataRecord thisHdr;
1223 gotorecordnumber(jmin);
1224 fread(&thisHdr, 1, sizeof(thisHdr), fin);
1225 unsigned short luid = ntohs(thisHdr.uid);
1226 qDebug("jmin at end:%u,%u", jmin, luid);
1227 if (luid == urlid)
1228 {
1229 return jmin;
1230 }
1231 gotorecordnumber(jmax);
1232 fread(&thisHdr, 1, sizeof(thisHdr), fin);
1233 luid = ntohs(thisHdr.uid);
1234 qDebug("jmax at end:%u,%u", jmax, luid);
1235 if (luid == urlid)
1236 {
1237 return jmax;
1238 }
1239 qDebug("Couldn't find %u", urlid);
1240 return 0; // Not found!
579} 1241}
diff --git a/noncore/apps/opie-reader/plucker.h b/noncore/apps/opie-reader/plucker.h
index d3ca732..083eac6 100644
--- a/noncore/apps/opie-reader/plucker.h
+++ b/noncore/apps/opie-reader/plucker.h
@@ -6,6 +6,13 @@
6#include "ztxt.h" 6#include "ztxt.h"
7#include "pdb.h" 7#include "pdb.h"
8#include "CBuffer.h" 8#include "CBuffer.h"
9#include "Navigation.h"
10#include "my_list.h"
11
12#ifdef LOCALPICTURES
13class QScrollView;
14class QWidget;
15#endif
9 16
10struct CPlucker_dataRecord 17struct CPlucker_dataRecord
11{ 18{
@@ -29,13 +36,22 @@ struct CPluckerbkmk
29 tchar title[MAX_BMRK_LENGTH]; 36 tchar title[MAX_BMRK_LENGTH];
30}; 37};
31 38
32
33const UInt32 CPLUCKER_ID = 0x5458547a; 39const UInt32 CPLUCKER_ID = 0x5458547a;
34 40
35class CPlucker : public CExpander, Cpdb 41class CPlucker : public CExpander, Cpdb
36{ 42{
37 size_t textlength; 43 unsigned short finduid(unsigned short);
44 char* geturl(UInt16);
45 void Expand(UInt16, UInt8, UInt8*, UInt16);
46 CList<unsigned long> visited;
47 bool m_lastIsBreak;
48#ifdef LOCALPICTURES
49 QScrollView* m_viewer;
50 QWidget* m_picture;
51#endif
52 size_t textlength, m_lastBreak;
38 UInt16 uid; 53 UInt16 uid;
54 UInt8 EOPPhase;
39 int m_nextPara, m_nextParaIndex; 55 int m_nextPara, m_nextParaIndex;
40 CBufferFace<UInt16> m_ParaOffsets; 56 CBufferFace<UInt16> m_ParaOffsets;
41 CBufferFace<UInt16> m_ParaAttrs; 57 CBufferFace<UInt16> m_ParaAttrs;
@@ -46,6 +62,8 @@ class CPlucker : public CExpander, Cpdb
46 UInt32 buffercontent; 62 UInt32 buffercontent;
47 UInt8* expandedtextbuffer; 63 UInt8* expandedtextbuffer;
48 UInt8* compressedtextbuffer; 64 UInt8* compressedtextbuffer;
65 char* urls;
66 size_t urlsize;
49 size_t bufferpos; 67 size_t bufferpos;
50 UInt16 bufferrec; 68 UInt16 bufferrec;
51 CPlucker_record0 hdr0; 69 CPlucker_record0 hdr0;
@@ -53,24 +71,29 @@ class CPlucker : public CExpander, Cpdb
53 bool expand(int); 71 bool expand(int);
54 void UnZip(size_t, UInt8*, UInt16); 72 void UnZip(size_t, UInt8*, UInt16);
55 void UnDoc(size_t, UInt8*, UInt16); 73 void UnDoc(size_t, UInt8*, UInt16);
56 void expandimg(UInt16 tgt); 74#ifdef LOCALPICTURES
75 void showimg(UInt16 tgt);
76#endif
77 QImage* getimg(UInt16 tgt);
78 QPixmap* expandimg(UInt16 tgt, bool border=false);
57 void home(); 79 void home();
58 int bgetch(); 80 int bgetch();
81 CNavigation m_nav;
59 public: 82 public:
60 virtual void sizes(unsigned long& _file, unsigned long& _text) 83 virtual void suspend()
61 { 84 {
62 _file = file_length; 85 CExpander::suspend(fin);
63 _text = textlength; 86 }
64//ntohl(hdr0.size); 87 virtual void unsuspend()
65 } 88 {
89 CExpander::unsuspend(fin);
90 }
91 virtual QPixmap* getPicture(unsigned long tgt);
92 virtual void sizes(unsigned long& _file, unsigned long& _text);
66 virtual bool hasrandomaccess() { return true; } 93 virtual bool hasrandomaccess() { return true; }
67 virtual ~CPlucker() 94 virtual ~CPlucker();
68 {
69 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer;
70 if (compressedtextbuffer != NULL) delete [] compressedtextbuffer;
71 }
72 CPlucker(); 95 CPlucker();
73 virtual int openfile(const char *src); 96 virtual int OpenFile(const char *src);
74 virtual int getch(); 97 virtual int getch();
75 virtual void getch(int&, CStyle&); 98 virtual void getch(int&, CStyle&);
76 virtual unsigned int locate(); 99 virtual unsigned int locate();
@@ -78,9 +101,23 @@ class CPlucker : public CExpander, Cpdb
78 virtual CList<Bkmk>* getbkmklist(); 101 virtual CList<Bkmk>* getbkmklist();
79 virtual bool hyperlink(unsigned int n); 102 virtual bool hyperlink(unsigned int n);
80 virtual MarkupType PreferredMarkup() 103 virtual MarkupType PreferredMarkup()
81 { 104 {
82 return cNONE; 105 return cNONE;
83 } 106 }
107 void saveposn(size_t posn) { m_nav.saveposn(posn); }
108 bool forward(size_t& loc) { return m_nav.forward(loc); }
109 bool back(size_t& loc) { return m_nav.back(loc); }
110 bool hasnavigation() { return true; }
111 unsigned long startSection()
112 {
113 return currentpos-bufferpos;
114 }
115 unsigned long endSection()
116 {
117 return startSection()+buffercontent;
118 }
119 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen);
120 void putSaveData(unsigned char*& src, unsigned short& srclen);
84}; 121};
85 122
86#endif 123#endif
diff --git a/noncore/apps/opie-reader/ppm_expander.cpp b/noncore/apps/opie-reader/ppm_expander.cpp
index 4f0a277..fe2745c 100644
--- a/noncore/apps/opie-reader/ppm_expander.cpp
+++ b/noncore/apps/opie-reader/ppm_expander.cpp
@@ -35,7 +35,7 @@ ppm_expander::~ppm_expander() {
35 if (my_file_in != NULL) fclose(my_file_in); 35 if (my_file_in != NULL) fclose(my_file_in);
36} 36}
37 37
38int ppm_expander::openfile(const char* infile) 38int ppm_expander::OpenFile(const char* infile)
39{ 39{
40 my_file_in=fopen(infile,"rb"); 40 my_file_in=fopen(infile,"rb");
41 my_read_buf = new PPM_ReadBuf(my_file_in); 41 my_read_buf = new PPM_ReadBuf(my_file_in);
diff --git a/noncore/apps/opie-reader/ppm_expander.h b/noncore/apps/opie-reader/ppm_expander.h
index 115988d..4278c82 100644
--- a/noncore/apps/opie-reader/ppm_expander.h
+++ b/noncore/apps/opie-reader/ppm_expander.h
@@ -25,7 +25,15 @@ class ppm_expander : public CExpander {
25 FILE* my_file_in; 25 FILE* my_file_in;
26 PPM_ReadBuf* my_read_buf; 26 PPM_ReadBuf* my_read_buf;
27 ppm_worker ppm; 27 ppm_worker ppm;
28 public: 28public:
29 virtual void suspend()
30 {
31 CExpander::suspend(my_file_in);
32 }
33 virtual void unsuspend()
34 {
35 CExpander::unsuspend(my_file_in);
36 }
29 ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL) 37 ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL)
30 { 38 {
31 bufsize = 1024; 39 bufsize = 1024;
@@ -33,7 +41,7 @@ class ppm_expander : public CExpander {
33 buf_out = new UCHAR[bufsize]; 41 buf_out = new UCHAR[bufsize];
34 outbytes = 0; 42 outbytes = 0;
35 } 43 }
36 virtual int openfile(const char* infile); 44 virtual int OpenFile(const char* infile);
37 virtual int getch(); 45 virtual int getch();
38 int locate(unsigned short block, unsigned int n); 46 int locate(unsigned short block, unsigned int n);
39 virtual ~ppm_expander(); 47 virtual ~ppm_expander();
diff --git a/noncore/apps/opie-reader/ustring.h b/noncore/apps/opie-reader/ustring.h
index a4dc048..a3ef8df 100644
--- a/noncore/apps/opie-reader/ustring.h
+++ b/noncore/apps/opie-reader/ustring.h
@@ -63,6 +63,18 @@ inline QString toQString(tchar *_p, unsigned int len)
63 while (*p != 0 && i < len) ret[i++] = *(p++); 63 while (*p != 0 && i < len) ret[i++] = *(p++);
64 return ret; 64 return ret;
65} 65}
66
67inline tchar* fromQString(const QString& qs)
68{
69 int len = qs.length();
70 tchar* ret = new tchar[len+1];
71 for (int i = 0; i < len; i++)
72 {
73 ret[i] = qs[i].unicode();
74 }
75 ret[len] = 0;
76 return ret;
77}
66#else 78#else
67 79
68inline size_t ustrlen(const tchar* _p) { return strlen(_p); } 80inline size_t ustrlen(const tchar* _p) { return strlen(_p); }
diff --git a/noncore/apps/opie-reader/version.h b/noncore/apps/opie-reader/version.h
index 8b6c756..003e9db 100644
--- a/noncore/apps/opie-reader/version.h
+++ b/noncore/apps/opie-reader/version.h
@@ -1,5 +1,5 @@
1 1
2#define MAJOR 0 2#define MAJOR 0
3#define BKMKTYPE 5 3#define BKMKTYPE 6
4#define MINOR 'a' 4#define MINOR 'a'
5#define RELEASE_TYPE "beta" 5#define RELEASE_TYPE "beta"
diff --git a/noncore/apps/opie-reader/ztxt.cpp b/noncore/apps/opie-reader/ztxt.cpp
index 289b13a..8091d32 100644
--- a/noncore/apps/opie-reader/ztxt.cpp
+++ b/noncore/apps/opie-reader/ztxt.cpp
@@ -7,7 +7,7 @@
7ztxt::ztxt() : bInit(false), expandedtextbuffer(NULL), compressedtextbuffer(NULL) { /*printf("constructing:%x\n",fin);*/ } 7ztxt::ztxt() : bInit(false), expandedtextbuffer(NULL), compressedtextbuffer(NULL) { /*printf("constructing:%x\n",fin);*/ }
8 8
9 9
10int ztxt::openfile(const char *src) 10int ztxt::OpenFile(const char *src)
11{ 11{
12 if (!Cpdb::openfile(src)) 12 if (!Cpdb::openfile(src))
13 { 13 {
diff --git a/noncore/apps/opie-reader/ztxt.h b/noncore/apps/opie-reader/ztxt.h
index 20558a6..d7cb96a 100644
--- a/noncore/apps/opie-reader/ztxt.h
+++ b/noncore/apps/opie-reader/ztxt.h
@@ -74,32 +74,40 @@ class ztxt : public CExpander, Cpdb
74 zTXT_record0 hdr0; 74 zTXT_record0 hdr0;
75 size_t currentpos; 75 size_t currentpos;
76 void home(); 76 void home();
77 public: 77public:
78 virtual void suspend()
79 {
80 CExpander::suspend(fin);
81 }
82 virtual void unsuspend()
83 {
84 CExpander::unsuspend(fin);
85 }
78 virtual void sizes(unsigned long& _file, unsigned long& _text) 86 virtual void sizes(unsigned long& _file, unsigned long& _text)
79 { 87 {
80 _file = file_length; 88 _file = file_length;
81 _text = ntohl(hdr0.size); 89 _text = ntohl(hdr0.size);
82 } 90 }
83 virtual bool hasrandomaccess() { return (hdr0.randomAccess != 0); } 91 virtual bool hasrandomaccess() { return (hdr0.randomAccess != 0); }
84 virtual ~ztxt() 92 virtual ~ztxt()
85 { 93 {
86 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; 94 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer;
87 if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; 95 if (compressedtextbuffer != NULL) delete [] compressedtextbuffer;
88 if (bInit) 96 if (bInit)
89 { 97 {
90 inflateEnd(&zstream); 98 inflateEnd(&zstream);
91 } 99 }
92 } 100 }
93 ztxt(); 101 ztxt();
94 virtual int openfile(const char *src); 102 virtual int OpenFile(const char *src);
95 virtual int getch(); 103 virtual int getch();
96 virtual unsigned int locate(); 104 virtual unsigned int locate();
97 virtual void locate(unsigned int n); 105 virtual void locate(unsigned int n);
98 virtual CList<Bkmk>* getbkmklist(); 106 virtual CList<Bkmk>* getbkmklist();
99 virtual MarkupType PreferredMarkup() 107 virtual MarkupType PreferredMarkup()
100 { 108 {
101 return cTEXT; 109 return cTEXT;
102 } 110 }
103}; 111};
104 112
105#endif 113#endif