summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/Aportis.cpp8
-rw-r--r--noncore/apps/opie-reader/Aportis.h26
-rw-r--r--noncore/apps/opie-reader/Bkmks.cpp8
-rw-r--r--noncore/apps/opie-reader/BuffDoc.cpp128
-rw-r--r--noncore/apps/opie-reader/BuffDoc.h18
-rw-r--r--noncore/apps/opie-reader/CAnnoEdit.h1
-rw-r--r--noncore/apps/opie-reader/CBuffer.cpp8
-rw-r--r--noncore/apps/opie-reader/CDrawBuffer.cpp281
-rw-r--r--noncore/apps/opie-reader/CDrawBuffer.h17
-rw-r--r--noncore/apps/opie-reader/CEncoding.cpp24
-rw-r--r--noncore/apps/opie-reader/CEncoding.h21
-rw-r--r--noncore/apps/opie-reader/CExpander.h63
-rw-r--r--noncore/apps/opie-reader/CFilter.cpp58
-rw-r--r--noncore/apps/opie-reader/CFilter.h93
-rw-r--r--noncore/apps/opie-reader/Filedata.h4
-rw-r--r--noncore/apps/opie-reader/FontControl.cpp27
-rw-r--r--noncore/apps/opie-reader/FontControl.h63
-rw-r--r--noncore/apps/opie-reader/Navigation.cpp112
-rw-r--r--noncore/apps/opie-reader/Navigation.h2
-rw-r--r--noncore/apps/opie-reader/Palm2QImage.cpp15
-rw-r--r--noncore/apps/opie-reader/Palm2QImage.h2
-rw-r--r--noncore/apps/opie-reader/QFloatBar.h1
-rw-r--r--noncore/apps/opie-reader/QTReader.cpp716
-rw-r--r--noncore/apps/opie-reader/QTReader.h150
-rw-r--r--noncore/apps/opie-reader/QTReaderApp.cpp3074
-rw-r--r--noncore/apps/opie-reader/QTReaderApp.h259
-rw-r--r--noncore/apps/opie-reader/StateData.h1
-rw-r--r--noncore/apps/opie-reader/StyleConsts.cpp13
-rw-r--r--noncore/apps/opie-reader/StyleConsts.h32
-rw-r--r--noncore/apps/opie-reader/ZText.h45
-rw-r--r--noncore/apps/opie-reader/fileBrowser.cpp91
-rw-r--r--noncore/apps/opie-reader/fileBrowser.h9
-rw-r--r--noncore/apps/opie-reader/infowin.cpp4
-rw-r--r--noncore/apps/opie-reader/main.cpp24
-rw-r--r--noncore/apps/opie-reader/opie-reader.pro18
-rw-r--r--noncore/apps/opie-reader/pdb.cpp15
-rw-r--r--noncore/apps/opie-reader/pdb.h2
-rw-r--r--noncore/apps/opie-reader/plucker.cpp1179
-rw-r--r--noncore/apps/opie-reader/plucker.h125
-rw-r--r--noncore/apps/opie-reader/ppm_expander.h25
-rw-r--r--noncore/apps/opie-reader/ustring.h10
-rw-r--r--noncore/apps/opie-reader/version.h6
-rw-r--r--noncore/apps/opie-reader/ztxt.h31
43 files changed, 4114 insertions, 2695 deletions
diff --git a/noncore/apps/opie-reader/Aportis.cpp b/noncore/apps/opie-reader/Aportis.cpp
index b4988da..2f8cdc3 100644
--- a/noncore/apps/opie-reader/Aportis.cpp
+++ b/noncore/apps/opie-reader/Aportis.cpp
@@ -1,374 +1,374 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <string.h> 2#include <string.h>
3#include "Aportis.h" 3#include "Aportis.h"
4#include "my_list.h" 4#include "my_list.h"
5#include "Bkmks.h" 5#include "Bkmks.h"
6 6
7Aportis::Aportis() : peanutfile(false) { /*printf("constructing:%x\n",fin);*/ } 7Aportis::Aportis() : peanutfile(false) { /*printf("constructing:%x\n",fin);*/ }
8 8
9void Aportis::dePeanut(int& ch) 9void Aportis::dePeanut(int& ch)
10{ 10{
11 if (peanutfile && ch != EOF) 11 if (peanutfile && ch != EOF)
12 { 12 {
13 unsigned char c = ch; 13 unsigned char c = ch;
14 if (peanutfile) c ^= 0xa5; 14 if (peanutfile) c ^= 0xa5;
15 ch = c; 15 ch = c;
16 } 16 }
17} 17}
18 18
19CList<Bkmk>* Aportis::getbkmklist() 19CList<Bkmk>* Aportis::getbkmklist()
20{ 20{
21/* 21/*
22 if (peanutfile) 22 if (peanutfile)
23 { 23 {
24 if (nRecs2 > nRecs) 24 if (nRecs2 > nRecs)
25 { 25 {
26 CList<Bkmk>* t = new CList<Bkmk>; 26 CList<Bkmk>* t = new CList<Bkmk>;
27 for (int i = nRecs; i < nRecs2; i++) 27 for (int i = nRecs; i < nRecs2; i++)
28 { 28 {
29 char name[17]; 29 char name[17];
30 name[16] = '\0'; 30 name[16] = '\0';
31 qDebug("Record:%d, Length:%u",i,recordlength(i)); 31 // qDebug("Record:%d, Length:%u",i,recordlength(i));
32 gotorecordnumber(i); 32 gotorecordnumber(i);
33 fread(name,1,16,fin); 33 fread(name,1,16,fin);
34 unsigned long lcn; 34 unsigned long lcn;
35 fread(&lcn,sizeof(lcn),1,fin); 35 fread(&lcn,sizeof(lcn),1,fin);
36 lcn ^= 0xa5a5a5a5; 36 lcn ^= 0xa5a5a5a5;
37 lcn = SwapLong(lcn); 37 lcn = SwapLong(lcn);
38 qDebug("Bookmark:%s:%u", name,lcn); 38 // qDebug("Bookmark:%s:%u", name,lcn);
39 tchar tname[17]; 39 tchar tname[17];
40 memset(tname, 0, sizeof(tname)); 40 memset(tname, 0, sizeof(tname));
41 for (int i = 0; name[i] != 0; i++) 41 for (int i = 0; name[i] != 0; i++)
42 { 42 {
43 tname[i] = name[i] ^ 0xa5; 43 tname[i] = name[i] ^ 0xa5;
44 } 44 }
45 t->push_back(Bkmk(tname, NULL, lcn)); 45 t->push_back(Bkmk(tname, NULL, lcn));
46 } 46 }
47 return t; 47 return t;
48 } 48 }
49 else 49 else
50 { 50 {
51 return NULL; 51 return NULL;
52 } 52 }
53 } 53 }
54*/ 54*/
55 if (bCompressed != 4) return NULL; 55 if (bCompressed != 4) return NULL;
56 CList<Bkmk>* t = new CList<Bkmk>; 56 CList<Bkmk>* t = new CList<Bkmk>;
57 size_t cur = ftell(fin); 57 size_t cur = ftell(fin);
58 for (int i = 0; i < nRecs2; i++) 58 for (int i = 0; i < nRecs2; i++)
59 { 59 {
60 DWORD dwPos; 60 DWORD dwPos;
61 fseek(fin, 0x56 + 8*i, SEEK_SET); 61 fseek(fin, 0x56 + 8*i, SEEK_SET);
62 fread(&dwPos, 4, 1, fin); 62 fread(&dwPos, 4, 1, fin);
63 dwPos = SwapLong(dwPos); 63 dwPos = SwapLong(dwPos);
64 fseek(fin,dwPos,SEEK_SET); 64 fseek(fin,dwPos,SEEK_SET);
65 unsigned char ch; 65 unsigned char ch;
66 fread(&ch,1,1,fin); 66 fread(&ch,1,1,fin);
67 if (ch != 241) 67 if (ch != 241)
68 { 68 {
69 char name[17]; 69 char name[17];
70 name[16] = '\0'; 70 name[16] = '\0';
71 fseek(fin,dwPos,SEEK_SET); 71 fseek(fin,dwPos,SEEK_SET);
72 fread(name,1,16,fin); 72 fread(name,1,16,fin);
73 unsigned long lcn; 73 unsigned long lcn;
74 fread(&lcn,sizeof(lcn),1,fin); 74 fread(&lcn,sizeof(lcn),1,fin);
75 lcn = SwapLong(lcn); 75 lcn = SwapLong(lcn);
76#ifdef _UNICODE 76#ifdef _UNICODE
77 tchar tname[17]; 77 tchar tname[17];
78 memset(tname, 0, sizeof(tname)); 78 memset(tname, 0, sizeof(tname));
79 for (int i = 0; name[i] != 0; i++) 79 for (int i = 0; name[i] != 0; i++)
80 { 80 {
81 tname[i] = name[i]; 81 tname[i] = name[i];
82 } 82 }
83 t->push_back(Bkmk(tname, NULL, lcn)); 83 t->push_back(Bkmk(tname, NULL, lcn));
84#else 84#else
85 t->push_back(Bkmk(name,lcn)); 85 t->push_back(Bkmk(name,lcn));
86#endif 86#endif
87 } 87 }
88 } 88 }
89 fseek(fin, cur, SEEK_SET); 89 fseek(fin, cur, SEEK_SET);
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;
97 97
98 if (!Cpdb::openfile(src)) return -1; 98 if (!Cpdb::openfile(src)) return -1;
99 99
100 if (head.creator != 0x64414552 // 'dAER' 100 if (head.creator != 0x64414552 // 'dAER'
101 || head.type != 0x74584554) // 'tXET') 101 || head.type != 0x74584554) // 'tXET')
102 { 102 {
103 103
104 if (memcmp(&head.creator, "PPrs", 4) == 0 && memcmp(&head.type, "PNRd", 4) == 0) 104 if (memcmp(&head.creator, "PPrs", 4) == 0 && memcmp(&head.type, "PNRd", 4) == 0)
105 { 105 {
106 peanutfile = true; 106 peanutfile = true;
107 } 107 }
108 else 108 else
109 { 109 {
110 return -2; 110 return -2;
111 } 111 }
112 } 112 }
113 113
114 nRecs2 = nRecs = SwapWord(head.recordList.numRecords) - 1; 114 nRecs2 = nRecs = SwapWord(head.recordList.numRecords) - 1;
115 fseek(fin,0,SEEK_END); 115 fseek(fin,0,SEEK_END);
116 dwLen = ftell(fin); 116 dwLen = ftell(fin);
117 117
118 if (peanutfile) 118 if (peanutfile)
119 { 119 {
120 120
121 PeanutHeader hdr0; 121 PeanutHeader hdr0;
122 gotorecordnumber(0); 122 gotorecordnumber(0);
123 fread(&hdr0, sizeof(hdr0), 1, fin); 123 fread(&hdr0, sizeof(hdr0), 1, fin);
124 qDebug("Version:%x", ntohs(hdr0.Version)); 124// qDebug("Version:%x", ntohs(hdr0.Version));
125 if (hdr0.Version && 0x0200) 125 if (hdr0.Version && 0x0200)
126 { 126 {
127 bCompressed = 2; 127 bCompressed = 2;
128 } 128 }
129 else 129 else
130 { 130 {
131 bCompressed = 1; 131 bCompressed = 1;
132 } 132 }
133 BlockSize = 4096; 133 BlockSize = 4096;
134 nRecs = SwapWord(hdr0.Records)-1; 134 nRecs = SwapWord(hdr0.Records)-1;
135 dwTLen = nRecs*BlockSize; 135 dwTLen = nRecs*BlockSize;
136 } 136 }
137 else 137 else
138 { 138 {
139 gotorecordnumber(0); 139 gotorecordnumber(0);
140 tDocRecord0 hdr0; 140 tDocRecord0 hdr0;
141 fread(&hdr0, sizeof(hdr0), 1, fin); 141 fread(&hdr0, sizeof(hdr0), 1, fin);
142 bCompressed = SwapWord(hdr0.wVersion); 142 bCompressed = SwapWord(hdr0.wVersion);
143 if (bCompressed!=1 && bCompressed!=2 && bCompressed != 4) { 143 if (bCompressed!=1 && bCompressed!=2 && bCompressed != 4) {
144 ret = bCompressed; 144 ret = bCompressed;
145 bCompressed = 2; 145 bCompressed = 2;
146 } 146 }
147 switch (bCompressed) 147 switch (bCompressed)
148 { 148 {
149 case 4: 149 case 4:
150 { 150 {
151 dwTLen = 0; 151 dwTLen = 0;
152 int i; 152 int i;
153 for (i = 0; i < nRecs; i++) 153 for (i = 0; i < nRecs; i++)
154 { 154 {
155 unsigned int bs = GetBS(i); 155 unsigned int bs = GetBS(i);
156 if (bs == 0) break; 156 if (bs == 0) break;
157 else dwTLen += bs; 157 else dwTLen += bs;
158 } 158 }
159 nRecs = i; 159 nRecs = i;
160 BlockSize = 0; 160 BlockSize = 0;
161 } 161 }
162 break; 162 break;
163 case 1: 163 case 1:
164 case 2: 164 case 2:
165 default: 165 default:
166 nRecs = SwapWord(hdr0.wNumRecs); 166 nRecs = SwapWord(hdr0.wNumRecs);
167 dwTLen = SwapLong(hdr0.dwStoryLen); 167 dwTLen = SwapLong(hdr0.dwStoryLen);
168 BlockSize = SwapWord(hdr0.wRecSize); 168 BlockSize = SwapWord(hdr0.wRecSize);
169 if (BlockSize == 0) 169 if (BlockSize == 0)
170 { 170 {
171 BlockSize = 4096; 171 BlockSize = 4096;
172 printf("WARNING: Blocksize not set in source file\n"); 172 printf("WARNING: Blocksize not set in source file\n");
173 } 173 }
174 } 174 }
175 } 175 }
176 176
177 177
178 178
179 // this is the main record buffer 179 // this is the main record buffer
180 // it knows how to stretch to accomodate the decompress 180 // it knows how to stretch to accomodate the decompress
181 currentrec = 0; 181 currentrec = 0;
182 cbptr = 0; 182 cbptr = 0;
183 outptr = 0; 183 outptr = 0;
184 refreshbuffer(); 184 refreshbuffer();
185 qDebug("Number of records:[%u,%u]", nRecs, nRecs2); 185// qDebug("Number of records:[%u,%u]", nRecs, nRecs2);
186 return ret; 186 return ret;
187} 187}
188 188
189int Aportis::getch() 189int Aportis::getch()
190{ 190{
191 if (bCompressed == 1) 191 if (bCompressed == 1)
192 { 192 {
193 if ((dwRecLen == 0) && !refreshbuffer()) return EOF; 193 if ((dwRecLen == 0) && !refreshbuffer()) return EOF;
194 else 194 else
195 { 195 {
196 int c = getc(fin); 196 int c = getc(fin);
197 dePeanut(c); 197 dePeanut(c);
198 dwRecLen--; 198 dwRecLen--;
199 currentpos++; 199 currentpos++;
200 return c; 200 return c;
201 } 201 }
202 } 202 }
203 if (outptr != cbptr) 203 if (outptr != cbptr)
204 { 204 {
205 currentpos++; 205 currentpos++;
206 return (circbuf[outptr = (outptr + 1) % 2048]); 206 return (circbuf[outptr = (outptr + 1) % 2048]);
207 } 207 }
208 if ((dwRecLen == 0) && !refreshbuffer()) return EOF; 208 if ((dwRecLen == 0) && !refreshbuffer()) return EOF;
209 currentpos++; 209 currentpos++;
210 int c; 210 int c;
211 211
212 // take a char from the input buffer 212 // take a char from the input buffer
213 c = getc(fin); 213 c = getc(fin);
214 dePeanut(c); 214 dePeanut(c);
215 dwRecLen--; 215 dwRecLen--;
216 // separate the char into zones: 0, 1...8, 9...0x7F, 0x80...0xBF, 0xC0...0xFF 216 // separate the char into zones: 0, 1...8, 9...0x7F, 0x80...0xBF, 0xC0...0xFF
217 217
218 // codes 1...8 mean copy that many chars; for accented chars & binary 218 // codes 1...8 mean copy that many chars; for accented chars & binary
219 if (c == 0) 219 if (c == 0)
220 { 220 {
221 circbuf[outptr = cbptr = (cbptr+1)%2048] = c; 221 circbuf[outptr = cbptr = (cbptr+1)%2048] = c;
222 return c; 222 return c;
223 } 223 }
224 else if (c >= 0x09 && c <= 0x7F) 224 else if (c >= 0x09 && c <= 0x7F)
225 { 225 {
226 circbuf[outptr = cbptr = (cbptr+1)%2048] = c; 226 circbuf[outptr = cbptr = (cbptr+1)%2048] = c;
227 return c; 227 return c;
228 } 228 }
229 else if (c >= 0x01 && c <= 0x08) 229 else if (c >= 0x01 && c <= 0x08)
230 { 230 {
231 dwRecLen -= c; 231 dwRecLen -= c;
232 while(c--) 232 while(c--)
233 { 233 {
234 int c = getc(fin); 234 int c = getc(fin);
235 dePeanut(c); 235 dePeanut(c);
236 circbuf[cbptr = (cbptr+1)%2048] = c; 236 circbuf[cbptr = (cbptr+1)%2048] = c;
237 } 237 }
238 return circbuf[outptr = (outptr+1)%2048]; 238 return circbuf[outptr = (outptr+1)%2048];
239 } 239 }
240 else if (c >= 0x80 && c <= 0xBF) 240 else if (c >= 0x80 && c <= 0xBF)
241 { 241 {
242 int m,n; 242 int m,n;
243 c <<= 8; 243 c <<= 8;
244 int c1 = getc(fin); 244 int c1 = getc(fin);
245 dePeanut(c1); 245 dePeanut(c1);
246 c += c1; 246 c += c1;
247 dwRecLen--; 247 dwRecLen--;
248 m = (c & 0x3FFF) >> COUNT_BITS; 248 m = (c & 0x3FFF) >> COUNT_BITS;
249 n = c & ((1<<COUNT_BITS) - 1); 249 n = c & ((1<<COUNT_BITS) - 1);
250 n += 3; 250 n += 3;
251 while (n--) 251 while (n--)
252 { 252 {
253 cbptr = (cbptr+1)%2048; 253 cbptr = (cbptr+1)%2048;
254 circbuf[cbptr] = circbuf[(cbptr+2048-m)%2048]; 254 circbuf[cbptr] = circbuf[(cbptr+2048-m)%2048];
255 } 255 }
256 return circbuf[outptr = (outptr+1)%2048]; 256 return circbuf[outptr = (outptr+1)%2048];
257 } 257 }
258 else if (c >= 0xC0 && c <= 0xFF) 258 else if (c >= 0xC0 && c <= 0xFF)
259 { 259 {
260 circbuf[cbptr = (cbptr+1)%2048] = ' '; 260 circbuf[cbptr = (cbptr+1)%2048] = ' ';
261 circbuf[cbptr = (cbptr+1)%2048] = c^0x80; 261 circbuf[cbptr = (cbptr+1)%2048] = c^0x80;
262 return circbuf[outptr = (outptr+1)%2048]; 262 return circbuf[outptr = (outptr+1)%2048];
263 } 263 }
264} 264}
265 265
266unsigned int Aportis::GetBS(unsigned int bn) 266unsigned int Aportis::GetBS(unsigned int bn)
267{ 267{
268 DWORD dwPos; 268 DWORD dwPos;
269 WORD fs; 269 WORD fs;
270 270
271 fseek(fin, 0x56 + 8*bn, SEEK_SET); 271 fseek(fin, 0x56 + 8*bn, SEEK_SET);
272 fread(&dwPos, 4, 1, fin); 272 fread(&dwPos, 4, 1, fin);
273 dwPos = SwapLong(dwPos); 273 dwPos = SwapLong(dwPos);
274 fseek(fin,dwPos,SEEK_SET); 274 fseek(fin,dwPos,SEEK_SET);
275 275
276// gotorecordnumber(bn+1); 276// gotorecordnumber(bn+1);
277 unsigned char ch; 277 unsigned char ch;
278 fread(&ch,1,1,fin); 278 fread(&ch,1,1,fin);
279 if (ch == 241) 279 if (ch == 241)
280 { 280 {
281 fread(&fs,sizeof(fs),1,fin); 281 fread(&fs,sizeof(fs),1,fin);
282 fs = SwapWord(fs); 282 fs = SwapWord(fs);
283 } 283 }
284 else 284 else
285 fs = 0; 285 fs = 0;
286 return fs; 286 return fs;
287} 287}
288 288
289unsigned int Aportis::locate() 289unsigned int Aportis::locate()
290{ 290{
291 if (bCompressed == 4) 291 if (bCompressed == 4)
292 { 292 {
293 size_t cur = ftell(fin); 293 size_t cur = ftell(fin);
294 unsigned int clen = 0; 294 unsigned int clen = 0;
295 for (unsigned int i = 0; i < currentrec-1; i++) 295 for (unsigned int i = 0; i < currentrec-1; i++)
296 { 296 {
297 unsigned int bs = GetBS(i); 297 unsigned int bs = GetBS(i);
298 if (bs == 0) break; 298 if (bs == 0) break;
299 clen += bs; 299 clen += bs;
300 } 300 }
301 fseek(fin,cur,SEEK_SET); 301 fseek(fin,cur,SEEK_SET);
302 return clen+currentpos; 302 return clen+currentpos;
303 } 303 }
304 else 304 else
305 return (currentrec-1)*BlockSize+currentpos; 305 return (currentrec-1)*BlockSize+currentpos;
306} 306}
307 307
308void Aportis::locate(unsigned int n) 308void Aportis::locate(unsigned int n)
309{ 309{
310 unsigned int offset; 310 unsigned int offset;
311 // currentrec = (n >> OFFBITS); 311 // currentrec = (n >> OFFBITS);
312 switch (bCompressed) 312 switch (bCompressed)
313 { 313 {
314 case 4: 314 case 4:
315 { 315 {
316 DWORD clen = 0; 316 DWORD clen = 0;
317 offset = n; 317 offset = n;
318 unsigned int i; 318 unsigned int i;
319 for (i = 0; i < nRecs; i++) 319 for (i = 0; i < nRecs; i++)
320 { 320 {
321 unsigned int bs = GetBS(i); 321 unsigned int bs = GetBS(i);
322 if (bs == 0) break; 322 if (bs == 0) break;
323 clen += bs; 323 clen += bs;
324 if (clen > n) break; 324 if (clen > n) break;
325 offset = n - clen; 325 offset = n - clen;
326 } 326 }
327 currentrec = i; 327 currentrec = i;
328 } 328 }
329 break; 329 break;
330 case 1: 330 case 1:
331 case 2: 331 case 2:
332 default: 332 default:
333 currentrec = n / BlockSize; 333 currentrec = n / BlockSize;
334 offset = n % BlockSize; 334 offset = n % BlockSize;
335 } 335 }
336 336
337 outptr = cbptr; 337 outptr = cbptr;
338 refreshbuffer(); 338 refreshbuffer();
339 while (currentpos < offset && getch() != EOF); 339 while (currentpos < offset && getch() != EOF);
340} 340}
341 341
342bool Aportis::refreshbuffer() 342bool Aportis::refreshbuffer()
343{ 343{
344 if (currentrec < nRecs) 344 if (currentrec < nRecs)
345 { 345 {
346 dwRecLen = recordlength(currentrec+1); 346 dwRecLen = recordlength(currentrec+1);
347 gotorecordnumber(currentrec+1); 347 gotorecordnumber(currentrec+1);
348 if (bCompressed == 4) 348 if (bCompressed == 4)
349 { 349 {
350 unsigned char t[3]; 350 unsigned char t[3];
351 fread(t,1,3,fin); 351 fread(t,1,3,fin);
352 if (t[0] != 241) 352 if (t[0] != 241)
353 { 353 {
354 printf("You shouldn't be here!\n"); 354 printf("You shouldn't be here!\n");
355 return false; 355 return false;
356 } 356 }
357 dwRecLen -= 3; 357 dwRecLen -= 3;
358 } 358 }
359 /* 359 /*
360 int n = fread(t.buf, 1, dwRecLen, fin); 360 int n = fread(t.buf, 1, dwRecLen, fin);
361 t.len = n; 361 t.len = n;
362 // if(bCompressed) 362 // if(bCompressed)
363 t.Decompress(); 363 t.Decompress();
364 364
365 t.buf[t.Len()] = '\0'; 365 t.buf[t.Len()] = '\0';
366 */ 366 */
367 currentpos = 0; 367 currentpos = 0;
368 currentrec++; 368 currentrec++;
369 return true; 369 return true;
370 } 370 }
371 else { 371 else {
372 return false; 372 return false;
373 } 373 }
374} 374}
diff --git a/noncore/apps/opie-reader/Aportis.h b/noncore/apps/opie-reader/Aportis.h
index af1fd3b..202a36f 100644
--- a/noncore/apps/opie-reader/Aportis.h
+++ b/noncore/apps/opie-reader/Aportis.h
@@ -1,108 +1,110 @@
1/* 1/*
2 Derived from makedoc9 by Pat Beirne 2 Derived from makedoc9 by Pat Beirne
3*/ 3*/
4 4
5#ifndef __Aportis_h 5#ifndef __Aportis_h
6#define __Aportis_h 6#define __Aportis_h
7 7#include "useqpe.h"
8#include "CExpander.h" 8#include "CExpander.h"
9#include "pdb.h" 9#include "pdb.h"
10 10
11typedef UInt32 DWORD; 11typedef UInt32 DWORD;
12typedef UInt16 WORD; 12typedef UInt16 WORD;
13 13
14#define DISP_BITS 11 14#define DISP_BITS 11
15#define COUNT_BITS 3 15#define COUNT_BITS 3
16/* 16/*
17// all numbers in these structs are big-endian, MAC format 17// all numbers in these structs are big-endian, MAC format
18struct tDocHeader { 18struct tDocHeader {
19 char sName[32]; 19 char sName[32];
20 DWORD dwUnknown1; 20 DWORD dwUnknown1;
21 DWORD dwTime1; 21 DWORD dwTime1;
22 DWORD dwTime2; 22 DWORD dwTime2;
23 DWORD dwTime3; 23 DWORD dwTime3;
24 DWORD dwLastSync; 24 DWORD dwLastSync;
25 DWORD ofsSort; 25 DWORD ofsSort;
26 DWORD ofsCatagories; 26 DWORD ofsCatagories;
27 DWORD dwCreator; 27 DWORD dwCreator;
28 DWORD dwType; 28 DWORD dwType;
29 DWORD dwUnknown2; 29 DWORD dwUnknown2;
30 DWORD dwUnknown3; 30 DWORD dwUnknown3;
31 WORD wNumRecs; 31 WORD wNumRecs;
32}; 32};
33*/ 33*/
34struct tDocRecord0 { 34struct tDocRecord0 {
35 WORD wVersion;// 1=plain text, 2=compressed 35 WORD wVersion;// 1=plain text, 2=compressed
36 WORD wSpare; 36 WORD wSpare;
37 DWORD dwStoryLen; // in chars, when decompressed 37 DWORD dwStoryLen; // in chars, when decompressed
38 WORD wNumRecs; // text records only; equals tDocHeader.wNumRecs-1 38 WORD wNumRecs; // text records only; equals tDocHeader.wNumRecs-1
39 WORD wRecSize; // usually 0x1000 39 WORD wRecSize; // usually 0x1000
40 DWORD dwSpare2; 40 DWORD dwSpare2;
41}; 41};
42 42
43struct PeanutHeader 43struct PeanutHeader
44{ 44{
45 UInt16 Version; 45 UInt16 Version;
46 UInt8 Junk1[6]; 46 UInt8 Junk1[6];
47 UInt16 Records; 47 UInt16 Records;
48 UInt8 Junk2[106]; 48 UInt8 Junk2[106];
49}; 49};
50 50
51////////////// utilities ////////////////////////////////////// 51////////////// utilities //////////////////////////////////////
52 52
53inline WORD SwapWord(WORD r) 53inline WORD SwapWord(WORD r)
54{ 54{
55 return (r>>8) + (r<<8); 55 return (r>>8) + (r<<8);
56} 56}
57 57
58inline DWORD SwapLong(DWORD r) 58inline DWORD SwapLong(DWORD r)
59{ 59{
60 return ((r>>24) & 0xFF) + (r<<24) + ((r>>8) & 0xFF00) + ((r<<8) & 0xFF0000); 60 return ((r>>24) & 0xFF) + (r<<24) + ((r>>8) & 0xFF00) + ((r<<8) & 0xFF0000);
61} 61}
62 62
63class Aportis : public CExpander, Cpdb { 63class Aportis : public CExpander, Cpdb {
64 bool peanutfile; 64 bool peanutfile;
65 void dePeanut(int&); 65 void dePeanut(int&);
66 DWORD dwLen; 66 DWORD dwLen;
67 WORD nRecs2; 67 WORD nRecs2;
68 DWORD dwTLen; 68 DWORD dwTLen;
69 WORD nRecs; 69 WORD nRecs;
70 WORD BlockSize; 70 WORD BlockSize;
71 DWORD dwRecLen; 71 DWORD dwRecLen;
72 int currentrec, currentpos; 72 int currentrec, currentpos;
73 unsigned int cbptr; 73 unsigned int cbptr;
74 unsigned int outptr; 74 unsigned int outptr;
75 unsigned char circbuf[2048]; 75 unsigned char circbuf[2048];
76 char bCompressed; 76 char bCompressed;
77public: 77public:
78 virtual void suspend() 78#ifdef USEQPE
79 void suspend()
79 { 80 {
80 CExpander::suspend(fin); 81 CExpander::suspend(fin);
81 } 82 }
82 virtual void unsuspend() 83 void unsuspend()
83 { 84 {
84 CExpander::unsuspend(fin); 85 CExpander::unsuspend(fin);
85 } 86 }
86 virtual void sizes(unsigned long& _file, unsigned long& _text) 87#endif
88 void sizes(unsigned long& _file, unsigned long& _text)
87 { 89 {
88 _file = dwLen; 90 _file = dwLen;
89 _text = dwTLen; 91 _text = dwTLen;
90 } 92 }
91 virtual bool hasrandomaccess() { return true; } 93 bool hasrandomaccess() { return true; }
92 virtual ~Aportis() {} 94 virtual ~Aportis() {}
93 Aportis(); 95 Aportis();
94 virtual int OpenFile(const char *src); 96 int OpenFile(const char *src);
95 virtual int getch(); 97 int getch();
96 virtual unsigned int locate(); 98 unsigned int locate();
97 virtual void locate(unsigned int n); 99 void locate(unsigned int n);
98 virtual CList<Bkmk>* getbkmklist(); 100 CList<Bkmk>* getbkmklist();
99 virtual MarkupType PreferredMarkup() 101 MarkupType PreferredMarkup()
100 { 102 {
101 return (peanutfile) ? cPML : cTEXT; 103 return (peanutfile) ? cPML : cTEXT;
102 } 104 }
103private: 105private:
104 bool refreshbuffer(); 106 bool refreshbuffer();
105 unsigned int GetBS(unsigned int bn); 107 unsigned int GetBS(unsigned int bn);
106}; 108};
107 109
108#endif 110#endif
diff --git a/noncore/apps/opie-reader/Bkmks.cpp b/noncore/apps/opie-reader/Bkmks.cpp
index a8bee13..889c6d8 100644
--- a/noncore/apps/opie-reader/Bkmks.cpp
+++ b/noncore/apps/opie-reader/Bkmks.cpp
@@ -1,322 +1,322 @@
1#include "name.h"
2#include <qmessagebox.h> 1#include <qmessagebox.h>
3 2
4#include "Bkmks.h" 3#include "Bkmks.h"
5 4
6#include "StyleConsts.h" 5#include "StyleConsts.h"
7#include "Markups.h" 6#include "Markups.h"
8#include "my_list.h" 7#include "my_list.h"
9#include "version.h" 8#include "version.h"
9#include "names.h"
10 10
11const 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);
12 12
13Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p) 13Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p)
14{ 14{
15 init(_nm, _nmlen, _anno, _annolen, _p); 15 init(_nm, _nmlen, _anno, _annolen, _p);
16} 16}
17 17
18Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p) 18Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p)
19{ 19{
20 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p); 20 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p);
21} 21}
22 22
23Bkmk::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)
24{ 24{
25 25
26 if (_anno == NULL) 26 if (_anno == NULL)
27 { 27 {
28 tchar t = 0; 28 tchar t = 0;
29 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p); 29 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p);
30 } 30 }
31 else 31 else
32 { 32 {
33 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p); 33 init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p);
34 } 34 }
35} 35}
36 36
37void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p) 37void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p)
38{ 38{
39 m_namelen = _nmlen; 39 m_namelen = _nmlen;
40 if (m_namelen > 0) 40 if (m_namelen > 0)
41 { 41 {
42 m_name = new unsigned char[m_namelen]; 42 m_name = new unsigned char[m_namelen];
43 memcpy(m_name, _nm, m_namelen); 43 memcpy(m_name, _nm, m_namelen);
44 } 44 }
45 else 45 else
46 { 46 {
47 m_name = NULL; 47 m_name = NULL;
48 } 48 }
49 49
50 m_annolen = _annolen; 50 m_annolen = _annolen;
51 if (m_annolen > 0) 51 if (m_annolen > 0)
52 { 52 {
53 m_anno = new unsigned char[m_annolen]; 53 m_anno = new unsigned char[m_annolen];
54 memcpy(m_anno, _anno, m_annolen); 54 memcpy(m_anno, _anno, m_annolen);
55 } 55 }
56 else 56 else
57 { 57 {
58 m_anno = NULL; 58 m_anno = NULL;
59 } 59 }
60 m_position = _p; 60 m_position = _p;
61} 61}
62 62
63Bkmk::~Bkmk() 63Bkmk::~Bkmk()
64{ 64{
65 if (m_name != NULL) delete [] m_name; 65 if (m_name != NULL) delete [] m_name;
66 m_name = NULL; 66 m_name = NULL;
67 if (m_anno != NULL) delete [] m_anno; 67 if (m_anno != NULL) delete [] m_anno;
68 m_anno = NULL; 68 m_anno = NULL;
69} 69}
70 70
71Bkmk& Bkmk::operator=(const Bkmk& rhs) 71Bkmk& Bkmk::operator=(const Bkmk& rhs)
72{ 72{
73 if (m_name != NULL) 73 if (m_name != NULL)
74 { 74 {
75 delete [] m_name; 75 delete [] m_name;
76 m_name = NULL; 76 m_name = NULL;
77 } 77 }
78 if (m_anno != NULL) 78 if (m_anno != NULL)
79 { 79 {
80 delete [] m_anno; 80 delete [] m_anno;
81 m_anno = NULL; 81 m_anno = NULL;
82 } 82 }
83 if (rhs.m_name != NULL) 83 if (rhs.m_name != NULL)
84 { 84 {
85 m_namelen = rhs.m_namelen; 85 m_namelen = rhs.m_namelen;
86 m_name = new unsigned char[m_namelen]; 86 m_name = new unsigned char[m_namelen];
87 memcpy(m_name, rhs.m_name, m_namelen); 87 memcpy(m_name, rhs.m_name, m_namelen);
88 } 88 }
89 else 89 else
90 m_name = NULL; 90 m_name = NULL;
91 if (rhs.m_anno != NULL) 91 if (rhs.m_anno != NULL)
92 { 92 {
93 m_annolen = rhs.m_annolen; 93 m_annolen = rhs.m_annolen;
94 m_anno = new unsigned char[m_annolen]; 94 m_anno = new unsigned char[m_annolen];
95 memcpy(m_anno, rhs.m_anno, m_annolen); 95 memcpy(m_anno, rhs.m_anno, m_annolen);
96 } 96 }
97 else 97 else
98 m_anno = NULL; 98 m_anno = NULL;
99 m_position = rhs.m_position; 99 m_position = rhs.m_position;
100 return *this; 100 return *this;
101} 101}
102 102
103bool Bkmk::operator==(const Bkmk& rhs) 103bool Bkmk::operator==(const Bkmk& rhs)
104{ 104{
105 return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0); 105 return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0);
106} 106}
107 107
108void Bkmk::setAnno(unsigned char* t, unsigned short len) 108void Bkmk::setAnno(unsigned char* t, unsigned short len)
109{ 109{
110 if (m_anno != NULL) 110 if (m_anno != NULL)
111 { 111 {
112 delete [] m_anno; 112 delete [] m_anno;
113 m_anno = NULL; 113 m_anno = NULL;
114 } 114 }
115 if (t != NULL) 115 if (t != NULL)
116 { 116 {
117 m_annolen = len; 117 m_annolen = len;
118 m_anno = new unsigned char[m_annolen]; 118 m_anno = new unsigned char[m_annolen];
119 memcpy(m_anno, t, m_annolen); 119 memcpy(m_anno, t, m_annolen);
120 } 120 }
121 else 121 else
122 { 122 {
123 m_annolen = sizeof(tchar); 123 m_annolen = sizeof(tchar);
124 m_anno = new unsigned char[m_annolen]; 124 m_anno = new unsigned char[m_annolen];
125 *((tchar*)m_anno) = 0; 125 *((tchar*)m_anno) = 0;
126 } 126 }
127} 127}
128 128
129void Bkmk::setAnno(tchar* t) 129void Bkmk::setAnno(tchar* t)
130{ 130{
131 if (m_anno != NULL) 131 if (m_anno != NULL)
132 { 132 {
133 delete [] m_anno; 133 delete [] m_anno;
134 m_anno = NULL; 134 m_anno = NULL;
135 } 135 }
136 if (t != NULL) 136 if (t != NULL)
137 { 137 {
138 unsigned short len = ustrlen(t)+1; 138 unsigned short len = ustrlen(t)+1;
139 m_annolen = sizeof(tchar)*len; 139 m_annolen = sizeof(tchar)*len;
140 m_anno = new unsigned char[m_annolen]; 140 m_anno = new unsigned char[m_annolen];
141 memcpy(m_anno, t, m_annolen); 141 memcpy(m_anno, t, m_annolen);
142 } 142 }
143 else 143 else
144 { 144 {
145 m_annolen = sizeof(tchar); 145 m_annolen = sizeof(tchar);
146 m_anno = new unsigned char[m_annolen]; 146 m_anno = new unsigned char[m_annolen];
147 *((tchar*)m_anno) = 0; 147 *((tchar*)m_anno) = 0;
148 } 148 }
149} 149}
150 150
151BkmkFile::BkmkFile(const char *fnm, bool w) 151BkmkFile::BkmkFile(const char *fnm, bool w)
152 : 152 :
153 wt(w), isUpgraded(false) 153 wt(w), isUpgraded(false)
154{ 154{
155 if (w) 155 if (w)
156 { 156 {
157 f = fopen(fnm, "wb"); 157 f = fopen(fnm, "wb");
158 } 158 }
159 else 159 else
160 { 160 {
161 f = fopen(fnm, "rb"); 161 f = fopen(fnm, "rb");
162 } 162 }
163} 163}
164 164
165BkmkFile::~BkmkFile() 165BkmkFile::~BkmkFile()
166{ 166{
167 if (f != NULL) fclose(f); 167 if (f != NULL) fclose(f);
168} 168}
169 169
170void BkmkFile::write(const Bkmk& b) 170void BkmkFile::write(const Bkmk& b)
171{ 171{
172 if (f != NULL) 172 if (f != NULL)
173 { 173 {
174 fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f); 174 fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f);
175 fwrite(b.m_name,1,b.m_namelen,f); 175 fwrite(b.m_name,1,b.m_namelen,f);
176 fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f); 176 fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f);
177 fwrite(b.m_anno,1,b.m_annolen,f); 177 fwrite(b.m_anno,1,b.m_annolen,f);
178 fwrite(&b.m_position,sizeof(b.m_position),1,f); 178 fwrite(&b.m_position,sizeof(b.m_position),1,f);
179 } 179 }
180} 180}
181 181
182void BkmkFile::write(CList<Bkmk>& bl) 182void BkmkFile::write(CList<Bkmk>& bl)
183{ 183{
184 if (f != NULL) 184 if (f != NULL)
185 { 185 {
186 fwrite(&magic, sizeof(magic), 1, f); 186 fwrite(&magic, sizeof(magic), 1, f);
187 for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++) 187 for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++)
188 { 188 {
189 write(*i); 189 write(*i);
190 } 190 }
191 } 191 }
192} 192}
193 193
194CList<Bkmk>* BkmkFile::readall() 194CList<Bkmk>* BkmkFile::readall()
195{ 195{
196 CList<Bkmk>* bl = NULL; 196 CList<Bkmk>* bl = NULL;
197 if (f != NULL) 197 if (f != NULL)
198 { 198 {
199 unsigned long newmagic; 199 unsigned long newmagic;
200 fread(&newmagic, sizeof(newmagic), 1, f); 200 fread(&newmagic, sizeof(newmagic), 1, f);
201 if ((newmagic & 0xffffff00) != (magic & 0xffffff00)) 201 if ((newmagic & 0xffffff00) != (magic & 0xffffff00))
202 { 202 {
203 if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of " PROGNAME "\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)
204 { 204 {
205 fseek(f,0,SEEK_SET); 205 fseek(f,0,SEEK_SET);
206 bl = readall00(&read05); 206 bl = readall00(&read05);
207 } 207 }
208 else 208 else
209 { 209 {
210 fseek(f,0,SEEK_SET); 210 fseek(f,0,SEEK_SET);
211 bl = readall00(&read03); 211 bl = readall00(&read03);
212 } 212 }
213 isUpgraded = true; 213 isUpgraded = true;
214 } 214 }
215 else 215 else
216 { 216 {
217 switch(newmagic & 0xff) 217 switch(newmagic & 0xff)
218 { 218 {
219 case 6: 219 case 6:
220 isUpgraded = false; 220 isUpgraded = false;
221 bl = readall00(read06); 221 bl = readall00(read06);
222 qDebug("Correct version!"); 222 // qDebug("Correct version!");
223 break; 223 break;
224 case 5: 224 case 5:
225 isUpgraded = true; 225 isUpgraded = true;
226 bl = readall00(read05); 226 bl = readall00(read05);
227 qDebug("Known version!"); 227 // qDebug("Known version!");
228 break; 228 break;
229 default: 229 default:
230 qDebug("Unknown version!"); 230 // qDebug("Unknown version!");
231 isUpgraded = true; 231 isUpgraded = true;
232 bl = readall00(read05); 232 bl = readall00(read05);
233 } 233 }
234 } 234 }
235 } 235 }
236 return bl; 236 return bl;
237} 237}
238 238
239CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*)) 239CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*))
240{ 240{
241 CList<Bkmk>* bl = new CList<Bkmk>; 241 CList<Bkmk>* bl = new CList<Bkmk>;
242 while (1) 242 while (1)
243 { 243 {
244 Bkmk* b = (*readfn)(f); 244 Bkmk* b = (*readfn)(f);
245 if (b == NULL) break; 245 if (b == NULL) break;
246 bl->push_back(*b); 246 bl->push_back(*b);
247 delete b; 247 delete b;
248 } 248 }
249 return bl; 249 return bl;
250} 250}
251 251
252Bkmk* BkmkFile::read03(FILE* f) 252Bkmk* BkmkFile::read03(FILE* f)
253{ 253{
254 Bkmk* b = NULL; 254 Bkmk* b = NULL;
255 if (f != NULL) 255 if (f != NULL)
256 { 256 {
257 unsigned short ln; 257 unsigned short ln;
258 if (fread(&ln,sizeof(ln),1,f) == 1) 258 if (fread(&ln,sizeof(ln),1,f) == 1)
259 { 259 {
260 tchar* name = new tchar[ln+1]; 260 tchar* name = new tchar[ln+1];
261 fread(name,sizeof(tchar),ln,f); 261 fread(name,sizeof(tchar),ln,f);
262 name[ln] = 0; 262 name[ln] = 0;
263 263
264 ln = 0; 264 ln = 0;
265 tchar* anno = new tchar[ln+1]; 265 tchar* anno = new tchar[ln+1];
266 anno[ln] = 0; 266 anno[ln] = 0;
267 267
268 unsigned int pos; 268 unsigned int pos;
269 fread(&pos,sizeof(pos),1,f); 269 fread(&pos,sizeof(pos),1,f);
270 b = new Bkmk(name,anno,pos); 270 b = new Bkmk(name,anno,pos);
271 } 271 }
272 } 272 }
273 return b; 273 return b;
274} 274}
275 275
276Bkmk* BkmkFile::read05(FILE* f) 276Bkmk* BkmkFile::read05(FILE* f)
277{ 277{
278 Bkmk* b = NULL; 278 Bkmk* b = NULL;
279 if (f != NULL) 279 if (f != NULL)
280 { 280 {
281 unsigned short ln; 281 unsigned short ln;
282 if (fread(&ln,sizeof(ln),1,f) == 1) 282 if (fread(&ln,sizeof(ln),1,f) == 1)
283 { 283 {
284 tchar* nm = new tchar[ln+1]; 284 tchar* nm = new tchar[ln+1];
285 fread(nm,sizeof(tchar),ln,f); 285 fread(nm,sizeof(tchar),ln,f);
286 nm[ln] = 0; 286 nm[ln] = 0;
287 fread(&ln,sizeof(ln),1,f); 287 fread(&ln,sizeof(ln),1,f);
288 tchar* anno = new tchar[ln+1]; 288 tchar* anno = new tchar[ln+1];
289 if (ln > 0) fread(anno,sizeof(tchar),ln,f); 289 if (ln > 0) fread(anno,sizeof(tchar),ln,f);
290 anno[ln] = 0; 290 anno[ln] = 0;
291 unsigned int pos; 291 unsigned int pos;
292 fread(&pos,sizeof(pos),1,f); 292 fread(&pos,sizeof(pos),1,f);
293 b = new Bkmk(nm,anno,pos); 293 b = new Bkmk(nm,anno,pos);
294 } 294 }
295 } 295 }
296 return b; 296 return b;
297} 297}
298 298
299Bkmk* BkmkFile::read06(FILE* f) 299Bkmk* BkmkFile::read06(FILE* f)
300{ 300{
301 Bkmk* b = NULL; 301 Bkmk* b = NULL;
302 if (f != NULL) 302 if (f != NULL)
303 { 303 {
304 unsigned short ln; 304 unsigned short ln;
305 if (fread(&ln,sizeof(ln),1,f) == 1) 305 if (fread(&ln,sizeof(ln),1,f) == 1)
306 { 306 {
307 b = new Bkmk; 307 b = new Bkmk;
308 b->m_namelen = ln; 308 b->m_namelen = ln;
309 b->m_name = new unsigned char[b->m_namelen]; 309 b->m_name = new unsigned char[b->m_namelen];
310 fread(b->m_name,1,b->m_namelen,f); 310 fread(b->m_name,1,b->m_namelen,f);
311 311
312 fread(&(b->m_annolen),sizeof(b->m_annolen),1,f); 312 fread(&(b->m_annolen),sizeof(b->m_annolen),1,f);
313 if (b->m_annolen > 0) 313 if (b->m_annolen > 0)
314 { 314 {
315 b->m_anno = new unsigned char[b->m_annolen]; 315 b->m_anno = new unsigned char[b->m_annolen];
316 fread(b->m_anno,1,b->m_annolen,f); 316 fread(b->m_anno,1,b->m_annolen,f);
317 } 317 }
318 fread(&(b->m_position),sizeof(b->m_position),1,f); 318 fread(&(b->m_position),sizeof(b->m_position),1,f);
319 } 319 }
320 } 320 }
321 return b; 321 return b;
322} 322}
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp
index 1123960..2402904 100644
--- a/noncore/apps/opie-reader/BuffDoc.cpp
+++ b/noncore/apps/opie-reader/BuffDoc.cpp
@@ -1,356 +1,416 @@
1#include "name.h" 1#include "names.h"
2
3#define NEWLINEBREAK
2 4
3#include "BuffDoc.h" 5#include "BuffDoc.h"
4//#include <FL/fl_draw.h> 6//#include <FL/fl_draw.h>
5#include "config.h" 7#include "config.h"
6#include "CDrawBuffer.h" 8#include "CDrawBuffer.h"
7#include "plucker.h" 9#include "plucker.h"
10#include "usenef.h"
11#ifdef USENEF
12#include "nef.h"
13#include "arrierego.h"
14#endif
8 15
9 16linkType BuffDoc::hyperlink(unsigned int n, QString& wrd)
10bool BuffDoc::hyperlink(unsigned int n)
11{ 17{
12 bool bRet = false; 18 linkType bRet = eNone;
13 lastword.empty();
14 lastsizes[0] = laststartline = n;
15 lastispara = false;
16 if (exp != NULL) 19 if (exp != NULL)
17 { 20 {
18 bRet = exp->hyperlink(n); 21 bRet = exp->hyperlink(n, wrd);
19 lastsizes[0] = laststartline = exp->locate(); 22 if (bRet == eLink)
23 {
24 lastword.empty();
25 lastsizes[0] = laststartline = n;
26#ifdef NEWLINEBREAK
27 lastispara = true;
28#else
29 lastispara = false;
30#endif
31 lastsizes[0] = laststartline = exp->locate();
32 }
20 } 33 }
21 return bRet; 34 return bRet;
22} 35}
23 36
24void BuffDoc::locate(unsigned int n) 37void BuffDoc::locate(unsigned int n)
25{ 38{
26 // qDebug("BuffDoc:locating:%u",n); 39 // //qDebug("BuffDoc:locating:%u",n);
27 lastword.empty(); 40 lastword.empty();
28 lastsizes[0] = laststartline = n; 41 lastsizes[0] = laststartline = n;
29 lastispara = false; 42#ifdef NEWLINEBREAK
43 lastispara = true;
44#else
45 lastispara = false;
46#endif
30 // tchar linebuf[1024]; 47 // tchar linebuf[1024];
31 if (exp != NULL) exp->locate(n); 48 if (exp != NULL) exp->locate(n);
32 // qDebug("BuffDoc:Located"); 49 // //qDebug("BuffDoc:Located");
33} 50}
34 51
35#define NEWLINEBREAK
36#ifdef NEWLINEBREAK 52#ifdef NEWLINEBREAK
37bool BuffDoc::getline(CDrawBuffer* buff, int wth) 53bool BuffDoc::getline(CDrawBuffer* buff, int wth, unsigned char _border)
38{ 54{
39 bool moreleft = true; 55 bool moreleft = true;
40 bool margindone = false; 56 bool margindone = false;
41 int w = wth-2*BORDER; 57 int w = wth-2*_border;
42 tchar ch = 32; 58 tchar ch = 32;
43 CStyle cs; 59 CStyle cs;
44 buff->empty(); 60 buff->empty();
45 if (exp == NULL) 61 if (exp == NULL)
46 { 62 {
47 buff->empty(); 63 buff->empty();
48 buff->setEof(); 64 buff->setEof();
49 return false; 65 return false;
50 } 66 }
51 int len = 0; 67 int len = 0;
52 if (lastword.length() > 0) 68 if (lastword.length() > 0)
53 { 69 {
54 *buff = lastword; 70 *buff = lastword;
55 cs = lastword.laststyle(); 71 cs = lastword.laststyle();
56 w -= buff->leftMargin() + buff->rightMargin(); 72 w -= buff->leftMargin() + buff->rightMargin();
57 margindone = true; 73 margindone = true;
58 len = lastword.length(); 74 len = lastword.length();
59 } 75 }
60 else buff->empty(); 76 else buff->empty();
61 lastword.empty(); 77 lastword.empty();
62 unsigned int slen = buff->width(len); 78 unsigned int slen = buff->width(len);
63 lastispara = false; 79 if (lastispara) buff->setstartpara();
64 while (1) 80 while (1)
65 { 81 {
66 lastsizes[len] = exp->locate(); 82 lastsizes[len] = exp->locate();
67 getch(ch, cs); 83 getch(ch, cs);
84 if (ch == 10 && len == 0 && !lastispara)
85 {
86 lastsizes[len] = exp->locate();
87 getch(ch, cs);
88 }
68 if (ch == UEOF) 89 if (ch == UEOF)
69 { 90 {
70 lastword.empty();
71 if (len == 0) 91 if (len == 0)
72 { 92 {
73 buff->setEof(); 93 buff->setEof();
74 moreleft = false; 94 moreleft = false;
75 } 95 }
76 laststartline = exp->locate(); 96 laststartline = exp->locate();
77 break; 97 break;
78 } 98 }
79 if (ch == 10) 99 if (ch == 10)
80 { 100 {
81 lastword.empty(); 101 buff->setendpara();
82 lastispara = true; 102 lastispara = true;
83 laststartline = exp->locate(); 103 laststartline = exp->locate();
84 break; 104 break;
85 } 105 }
106 lastispara = false;
86 buff->addch(ch, cs); 107 buff->addch(ch, cs);
87 len++; 108 len++;
88 if (!margindone) 109 if (!margindone)
89 { 110 {
90 w -= buff->leftMargin() + buff->rightMargin(); 111 w -= buff->leftMargin() + buff->rightMargin();
91 margindone = true; 112 margindone = true;
92 } 113 }
93 if ((slen = buff->width(len)) > w) 114 if ((slen = buff->width(len)) > w)
94 { 115 {
95 if (ch == ' ' || len == 1) 116 if (ch == ' ' || len == 1)
96 { 117 {
97 lastword.empty(); 118 if (ch == ' ') buff->truncate(len-1);
98 laststartline = exp->locate(); 119 laststartline = exp->locate();
99 break; 120 break;
100 } 121 }
101 else // should do a backward search for spaces, first. 122 else // should do a backward search for spaces, first.
102 { 123 {
103 for (int i = len-1; i > 0; i--) 124 for (int i = len-2; i > 0; i--)
104 { 125 {
105 if ((*buff)[i] == ' ') 126 if ((*buff)[i] == ' ')
106 { 127 {
107 (*buff)[len] = 0; 128 (*buff)[len] = 0;
108 lastword.setright(*buff, i+1); 129 lastword.setright(*buff, i+1);
109 buff->truncate(i); 130 buff->truncate(i);
110 (*buff)[i] = '\0'; 131 (*buff)[i] = '\0';
111 laststartline = lastsizes[i+1]; 132 laststartline = lastsizes[i+1];
112 buff->resize(); 133 buff->resize();
113 for (int j = 0; j < lastword.length(); j++) 134 for (int j = 0; j < lastword.length(); j++)
114 { 135 {
115 lastsizes[j] = lastsizes[j+i+1]; 136 lastsizes[j] = lastsizes[j+i+1];
116 } 137 }
117 return true; 138 return true;
118 } 139 }
140 if ((*buff)[i] == '-' && !(((*buff)[i-1] == '-') || ((*buff)[i+1] == '-')))
141 {
142 (*buff)[len] = 0;
143 lastword.setright(*buff, i+1);
144 buff->truncate(i+1);
145 (*buff)[i+1] = '\0';
146 laststartline = lastsizes[i+1];
147 buff->resize();
148 for (int j = 0; j < lastword.length(); j++)
149 {
150 lastsizes[j] = lastsizes[j+i+1];
151 }
152 return true;
153 }
119 } 154 }
120 laststartline = lastsizes[len-1]; 155 laststartline = lastsizes[len-1];
156 (*buff)[len] = 0;
121 lastword.setright(*buff, len - 1); 157 lastword.setright(*buff, len - 1);
122 buff->truncate(len-1); 158 buff->truncate(len-1);
123 buff->addch('-', cs); 159 buff->addch('-', cs);
124 for (int j = 0; j < lastword.length(); j++) 160 for (int j = 0; j < lastword.length(); j++)
125 { 161 {
126 lastsizes[j] = lastsizes[j+len]; 162 lastsizes[j] = lastsizes[j+len];
127 } 163 }
128 break; 164 break;
129 } 165 }
130 } 166 }
131 } 167 }
132 (*buff)[len] = '\0'; 168 (*buff)[len] = '\0';
133 buff->resize(); 169 buff->resize();
134 return moreleft; 170 return moreleft;
135} 171}
136#else 172#else
137bool BuffDoc::getline(CDrawBuffer* buff, int wth) 173bool BuffDoc::getline(CDrawBuffer* buff, int wth, unsigned char _border)
138{ 174{
139 bool margindone = false; 175 bool margindone = false;
140 int w = wth-2*BORDER; 176 int w = wth-2*_border;
141 tchar ch = 32; 177 tchar ch = 32;
142 CStyle cs; 178 CStyle cs;
143 buff->empty(); 179 buff->empty();
144 if (exp == NULL) 180 if (exp == NULL)
145 { 181 {
146 //(*buff)[0] = '\0'; 182 //(*buff)[0] = '\0';
147 buff->empty(); 183 buff->empty();
148 return false; 184 return false;
149 } 185 }
150 int len = 0, lastcheck = 0; 186 int len = 0, lastcheck = 0;
151 if (lastword.length() > 0) 187 if (lastword.length() > 0)
152 { 188 {
153 *buff = lastword; 189 *buff = lastword;
154 cs = lastword.laststyle(); 190 cs = lastword.laststyle();
155 w -= buff->leftMargin() + buff->rightMargin(); 191 w -= buff->leftMargin() + buff->rightMargin();
156 margindone = true; 192 margindone = true;
157 } 193 }
158 else buff->empty(); 194 else buff->empty();
159// qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data())); 195// //qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data()));
160 lastcheck = len = buff->length(); 196 lastcheck = len = buff->length();
161 unsigned int slen = buff->width(len); 197 unsigned int slen = buff->width(len);
162 if (slen > w) 198 if (slen > w)
163 { 199 {
164 for ( ; len > 1; len--) 200 for ( ; len > 1; len--)
165 { 201 {
166 if (buff->width(len) < w) break; 202 if (buff->width(len) < w) break;
167 } 203 }
168// lastword = buff->data() + len - 1; 204// lastword = buff->data() + len - 1;
169 laststartline = lastsizes[len-1]; 205 laststartline = lastsizes[len-1];
170 for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1]; 206 for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1];
171// (*buff)[len-1] = '-'; 207// (*buff)[len-1] = '-';
172 if (len > 2) 208 if (len > 2)
173 { 209 {
174 lastword.setright(*buff, len - 1); 210 lastword.setright(*buff, len - 1);
175 buff->truncate(len-1); 211 buff->truncate(len-1);
176 buff->addch('-', cs); 212 buff->addch('-', cs);
177 (*buff)[len] = '\0'; 213 (*buff)[len] = '\0';
178 } 214 }
179 215
180 else 216 else
181 { 217 {
182 lastword.empty(); 218 lastword.empty();
183 (*buff)[len] = '\0'; 219 (*buff)[len] = '\0';
184 } 220 }
185 buff->resize(); 221 buff->resize();
186 return true; 222 return true;
187 } 223 }
188 if (lastispara) 224 if (lastispara)
189 { 225 {
190 lastispara = false; 226 lastispara = false;
191// lastword[0] = '\0'; 227// lastword[0] = '\0';
192 lastword.empty(); 228 lastword.empty();
193 len = buff->length(); 229 len = buff->length();
194 while (buff->width(len) > w) len--; 230 while (buff->width(len) > w) len--;
195// (*buff)[len] = '\0'; 231// (*buff)[len] = '\0';
196 buff->truncate(len); 232 buff->truncate(len);
197 laststartline = exp->locate(); 233 laststartline = exp->locate();
198 buff->resize(); 234 buff->resize();
199 return true; 235 return true;
200 } 236 }
201 lastispara = false; 237 lastispara = false;
202 for (int i = 0; i < len; i++) allsizes[i] = lastsizes[i]; 238 for (int i = 0; i < len; i++) allsizes[i] = lastsizes[i];
203 while (slen < w) 239 while (slen < w)
204 { 240 {
205 lastcheck = len; 241 lastcheck = len;
206 allsizes[len] = exp->locate(); 242 allsizes[len] = exp->locate();
207 getch(ch, cs); 243 getch(ch, cs);
208 while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128) 244 while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128)
209 { 245 {
210 len++; 246 len++;
211 buff->addch(ch,cs); 247 buff->addch(ch,cs);
212 allsizes[len] = exp->locate(); 248 allsizes[len] = exp->locate();
213 getch(ch, cs); 249 getch(ch, cs);
214 } 250 }
215 (*buff)[len] = 0; 251 (*buff)[len] = 0;
216 slen = buff->width(len); 252 slen = buff->width(len);
217 len++; 253 len++;
218 buff->addch(' ', cs); 254 buff->addch(' ', cs);
219 if (!margindone) 255 if (!margindone)
220 { 256 {
221 w -= buff->leftMargin() + buff->rightMargin(); 257 w -= buff->leftMargin() + buff->rightMargin();
222 margindone = true; 258 margindone = true;
223 } 259 }
224 allsizes[len] = exp->locate(); 260 allsizes[len] = exp->locate();
225 if (slen < w && ch != ' ') 261 if (slen < w && ch != ' ')
226 { 262 {
227 lastcheck = len; 263 lastcheck = len;
228 break; 264 break;
229 } 265 }
230 lastispara = (ch == '\012'); 266 lastispara = (ch == '\012');
231 } 267 }
232 (*buff)[len] = '\0'; 268 (*buff)[len] = '\0';
233// lastword = buff->data()+lastcheck; 269// lastword = buff->data()+lastcheck;
234#ifdef WINDOWS 270#ifdef _WINDOWS
235 lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1); 271 lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1);
236 { 272 {
237 int i; 273 int i;
238 for (i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; 274 for (i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
239 } 275 }
240#else 276#else
241 lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1); 277 lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1);
242 for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; 278 for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
243#endif 279#endif
244 if (lastcheck > 0) 280 if (lastcheck > 0)
245 { 281 {
246 laststartline = allsizes[lastcheck]; 282 laststartline = allsizes[lastcheck];
247// (*buff)[lastcheck-1] = '\0'; 283// (*buff)[lastcheck-1] = '\0';
248 buff->truncate(lastcheck-1); 284 buff->truncate(lastcheck-1);
249 } 285 }
250 else 286 else
251 { 287 {
252 laststartline = (lastcheck == len) ? exp->locate() : allsizes[lastcheck+1]; 288 laststartline = (lastcheck == len) ? exp->locate() : allsizes[lastcheck+1];
253// (*buff)[lastcheck] = '\0'; 289// (*buff)[lastcheck] = '\0';
254 buff->truncate(lastcheck); 290 buff->truncate(lastcheck);
255 } 291 }
256// buff->frig(); 292// buff->frig();
257 buff->resize(); 293 buff->resize();
258 if (ch == UEOF && buff->length() == 0) 294 if (ch == UEOF && buff->length() == 0)
259 { 295 {
260 buff->setEof(); 296 buff->setEof();
261 return false; 297 return false;
262 } 298 }
263 return true; 299 return true;
264} 300}
265#endif 301#endif
266 302
267bool BuffDoc::getline(CDrawBuffer* buff, int wth, int cw) 303bool BuffDoc::getline(CDrawBuffer* buff, int wth, int cw, unsigned char _border)
268{ 304{
269 int w = wth-2*BORDER; 305 int w = wth-2*_border;
270 buff->empty(); 306 buff->empty();
271 if (exp == NULL) 307 if (exp == NULL)
272 { 308 {
273 return false; 309 return false;
274 } 310 }
275 tchar ch; 311 tchar ch;
276 CStyle cs; 312 CStyle cs;
277 int i = 0; 313 int i = 1;
278 while (i*cw < w) 314 while (i*cw < w-buff->offset(w,0))
279 { 315 {
280 getch(ch, cs); 316 getch(ch, cs);
281 if (ch == '\12' || ch == UEOF) break; 317 if (ch == '\12' || ch == UEOF) break;
282 buff->addch(ch,cs); 318 buff->addch(ch,cs);
283 i++; 319 i++;
284 } 320 }
285 buff->truncate(i); 321 buff->truncate(i);
286 laststartline = exp->locate(); 322 laststartline = exp->locate();
287 buff->resize(); 323 buff->resize();
288 return (ch != UEOF); 324 return (ch != UEOF);
289} 325}
290 326
291int BuffDoc::openfile(QWidget* _parent, const char *src) 327int BuffDoc::openfile(QWidget* _parent, const char *src)
292{ 328{
293 // qDebug("BuffDoc:Openfile:%s", src); 329 // //qDebug("BuffDoc:Openfile:%s", src);
294 // qDebug("Trying aportis %x",exp); 330 // //qDebug("Trying aportis %x",exp);
295 if (exp != NULL) delete exp; 331 if (exp != NULL) delete exp;
296 lastword.empty(); 332 lastword.empty();
297 lastsizes[0] = laststartline = 0; 333 lastsizes[0] = laststartline = 0;
334#ifdef NEWLINEBREAK
335 lastispara = true;
336#else
298 lastispara = false; 337 lastispara = false;
338#endif
299 /* 339 /*
300 exp = new Text; 340 exp = new Text;
301 int ret = exp->openfile(src); 341 int ret = exp->openfile(src);
302 */ 342 */
303 343
304 exp = new Aportis; 344 exp = new Aportis;
305 int ret = exp->openfile(src); 345 int ret = exp->openfile(src);
306 if (ret == -1) 346 if (ret == -1)
307 { 347 {
308 delete exp; 348 delete exp;
309 exp = NULL; 349 exp = NULL;
310 return ret; 350 return ret;
311 } 351 }
312 if (ret == -2) 352 if (ret == -2)
313 { 353 {
314 354
315 delete exp; 355 delete exp;
316 exp = new ztxt; 356 exp = new ztxt;
317 ret = exp->openfile(src); 357 ret = exp->openfile(src);
318 } 358 }
359#ifdef USENEF
360 if (ret != 0)
361 {
362
363 delete exp;
364 exp = new CArriere;
365 ret = exp->openfile(src);
366 }
367 if (ret != 0)
368 {
369
370 delete exp;
371 exp = new CNEF;
372 ret = exp->openfile(src);
373 }
374#endif
319 if (ret != 0) 375 if (ret != 0)
320 { 376 {
321 377
322 delete exp; 378 delete exp;
323 exp = new CPlucker; 379 exp = new CPlucker;
324 ret = exp->openfile(src); 380 ret = exp->openfile(src);
325 } 381 }
326 if (ret != 0) 382 if (ret != 0)
327 { 383 {
328 delete exp; 384 delete exp;
329 qDebug("Trying ppms"); 385 //qDebug("Trying ppms");
330 exp = new ppm_expander; 386 exp = new ppm_expander;
331 ret = exp->openfile(src); 387 ret = exp->openfile(src);
332 } 388 }
333 if (ret != 0) 389 if (ret != 0)
334 { 390 {
335 delete exp; 391 delete exp;
336 exp = new Text; 392 exp = new Text;
337 // qDebug("Trying text"); 393 // //qDebug("Trying text");
338 ret = exp->openfile(src); 394 ret = exp->openfile(src);
339 } 395 }
340 396
341 if (ret != 0) 397 if (ret != 0)
342 { 398 {
343 delete exp; 399 delete exp;
344 QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file"); 400 QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file");
345 return ret; 401 return ret;
346 } 402 }
347 // qDebug("Doing final open:%x:%x",exp,filt); 403 // //qDebug("Doing final open:%x:%x",exp,filt);
348 404
349 lastword.empty(); 405 lastword.empty();
350 lastsizes[0] = laststartline = 0; 406 lastsizes[0] = laststartline = 0;
407#ifdef NEWLINEBREAK
408 lastispara = true;
409#else
351 lastispara = false; 410 lastispara = false;
411#endif
352 exp->locate(0); 412 exp->locate(0);
353 filt->setsource(exp); 413 filt->setsource(exp);
354 // qDebug("BuffDoc:file opened"); 414 // //qDebug("BuffDoc:file opened");
355 return 0; 415 return 0;
356} 416}
diff --git a/noncore/apps/opie-reader/BuffDoc.h b/noncore/apps/opie-reader/BuffDoc.h
index 78d8457..29d0329 100644
--- a/noncore/apps/opie-reader/BuffDoc.h
+++ b/noncore/apps/opie-reader/BuffDoc.h
@@ -1,114 +1,122 @@
1#ifndef __BuffDoc_h 1#ifndef __BuffDoc_h
2#define __BuffDoc_h 2#define __BuffDoc_h
3 3
4#include "useqpe.h"
4#include "ZText.h" 5#include "ZText.h"
5#include "Aportis.h" 6#include "Aportis.h"
6#include "ztxt.h" 7#include "ztxt.h"
7#include "ppm_expander.h" 8#include "ppm_expander.h"
8#include "CDrawBuffer.h" 9#include "CDrawBuffer.h"
9#include "CFilter.h" 10#include "CFilter.h"
10#include <qfontmetrics.h> 11#include <qfontmetrics.h>
11#include <qmessagebox.h> 12#include <qmessagebox.h>
12 13
13class BuffDoc 14class BuffDoc
14{ 15{
15 CDrawBuffer lastword; 16 CDrawBuffer lastword;
16 CSizeBuffer lastsizes, allsizes; 17 CSizeBuffer lastsizes, allsizes;
17 size_t laststartline; 18 size_t laststartline;
18 bool lastispara; 19 bool lastispara;
19 CExpander* exp; 20 CExpander* exp;
20 CFilterChain* filt; 21 CFilterChain* filt;
21 public: 22 public:
22 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) 23 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
23 { 24 {
24 if (exp == NULL) 25 if (exp == NULL)
25 { 26 {
26 data = NULL; 27 data = NULL;
27 len = 0; 28 len = 0;
28 } 29 }
29 else 30 else
30 { 31 {
31 exp->setSaveData(data, len, src, srclen); 32 exp->setSaveData(data, len, src, srclen);
32 } 33 }
33 } 34 }
34 void putSaveData(unsigned char*& src, unsigned short& srclen) 35 void putSaveData(unsigned char*& src, unsigned short& srclen)
35 { 36 {
36 if (exp != NULL) 37 if (exp != NULL)
37 { 38 {
38 exp->putSaveData(src, srclen); 39 exp->putSaveData(src, srclen);
39 } 40 }
40 } 41 }
42#ifdef USEQPE
41 void suspend() { if (exp != NULL) exp->suspend(); } 43 void suspend() { if (exp != NULL) exp->suspend(); }
42 void unsuspend() { if (exp != NULL) exp->unsuspend(); } 44 void unsuspend() { if (exp != NULL) exp->unsuspend(); }
45#else
46 void suspend() {}
47 void unsuspend() {}
48#endif
43 ~BuffDoc() 49 ~BuffDoc()
44 { 50 {
45 delete filt; 51 delete filt;
46 delete exp; 52 delete exp;
47 } 53 }
48 BuffDoc() 54 BuffDoc()
49 { 55 {
50 exp = NULL; 56 exp = NULL;
51 filt = NULL; 57 filt = NULL;
52 lastword.empty(); 58 lastword.empty();
53 // qDebug("Buffdoc created"); 59 // // qDebug("Buffdoc created");
54 } 60 }
55 bool empty() { return (exp == NULL); } 61 bool empty() { return (exp == NULL); }
56 void setfilter(CFilterChain* _f) 62 void setfilter(CFilterChain* _f)
57 { 63 {
58 if (filt != NULL) delete filt; 64 if (filt != NULL) delete filt;
59 filt = _f; 65 filt = _f;
60 filt->setsource(exp); 66 filt->setsource(exp);
61 } 67 }
62 CList<Bkmk>* getbkmklist() { return exp->getbkmklist(); } 68 CList<Bkmk>* getbkmklist() { return exp->getbkmklist(); }
63 bool hasrandomaccess() { return (exp == NULL) ? false : exp->hasrandomaccess(); } 69 bool hasrandomaccess() { return (exp == NULL) ? false : exp->hasrandomaccess(); }
64 bool iseol() { return (lastword[0] == '\0'); } 70 bool iseol() { return (lastword[0] == '\0'); }
65 int openfile(QWidget* _parent, const char *src); 71 int openfile(QWidget* _parent, const char *src);
66 tchar getch() 72 tchar getch()
67 { 73 {
68 tchar ch = UEOF; 74 tchar ch = UEOF;
69 CStyle sty; 75 CStyle sty;
70 if (exp != NULL) 76 if (exp != NULL)
71 { 77 {
72 filt->getch(ch, sty); 78 filt->getch(ch, sty);
73 } 79 }
74 return ch; 80 return ch;
75 } 81 }
76 void getch(tchar& ch, CStyle& sty) 82 void getch(tchar& ch, CStyle& sty)
77 { 83 {
78 if (exp != NULL) 84 if (exp != NULL)
79 { 85 {
80 filt->getch(ch, sty); 86 filt->getch(ch, sty);
81 } 87 }
82 else 88 else
83 ch = UEOF; 89 ch = UEOF;
84 } 90 }
85 QPixmap* getPicture(unsigned long tgt) { return (exp == NULL) ? NULL : exp->getPicture(tgt); } 91 void setwidth(int w) { if (exp != NULL) exp->setwidth(w); }
92 QImage* getPicture(unsigned long tgt) { return (exp == NULL) ? NULL : exp->getPicture(tgt); }
86 unsigned int startSection() { return (exp == NULL) ? 0 : exp->startSection(); } 93 unsigned int startSection() { return (exp == NULL) ? 0 : exp->startSection(); }
87 unsigned int endSection() { return (exp == NULL) ? 0 : exp->endSection(); } 94 unsigned int endSection() { return (exp == NULL) ? 0 : exp->endSection(); }
88 unsigned int locate() { return (exp == NULL) ? 0 : laststartline; } 95 unsigned int locate() { return (exp == NULL) ? 0 : laststartline; }
89 unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); } 96 unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); }
90 void setContinuous(bool _b) { if (exp != NULL) exp->setContinuous(_b); } 97 void setContinuous(bool _b) { if (exp != NULL) exp->setContinuous(_b); }
91 MarkupType PreferredMarkup() { return (exp == NULL) ? cTEXT : exp->PreferredMarkup(); } 98 MarkupType PreferredMarkup() { return (exp == NULL) ? cTEXT : exp->PreferredMarkup(); }
92 bool hyperlink(unsigned int n); 99 linkType hyperlink(unsigned int n, QString& wrd);
93 size_t getHome() { return ((exp != NULL) ? exp->getHome() : 0); } 100 size_t getHome() { return ((exp != NULL) ? exp->getHome() : 0); }
94 void locate(unsigned int n); 101 void locate(unsigned int n);
95 bool getline(CDrawBuffer* buff, int w); 102 bool getline(CDrawBuffer* buff, int w, unsigned char _border);
96 bool getline(CDrawBuffer* buff, int w, int cw); 103 bool getline(CDrawBuffer* buff, int w, int cw, unsigned char _border);
97 void sizes(unsigned long& fs, unsigned long& ts) { exp->sizes(fs,ts); } 104 void sizes(unsigned long& fs, unsigned long& ts) { exp->sizes(fs,ts); }
98 int getpara(CBuffer& buff) 105 int getpara(CBuffer& buff)
99 { 106 {
100 tchar ch; 107 tchar ch;
101 int i = 0; 108 int i = 0;
102 while ((ch = getch()) != 10 && ch != UEOF) buff[i++] = ch; 109 while ((ch = getch()) != 10 && ch != UEOF) buff[i++] = ch;
103 buff[i] = '\0'; 110 buff[i] = '\0';
104 if (i == 0 && ch == UEOF) i = -1; 111 if (i == 0 && ch == UEOF) i = -1;
105 laststartline = exp->locate(); 112 laststartline = exp->locate();
106 return i; 113 return i;
107 } 114 }
108 void saveposn(size_t posn) { exp->saveposn(posn); } 115 void saveposn(size_t posn) { exp->saveposn(posn); }
116 void writeposn(size_t posn) { exp->writeposn(posn); }
109 bool forward(size_t& loc) { return exp->forward(loc); } 117 bool forward(size_t& loc) { return exp->forward(loc); }
110 bool back(size_t& loc) { return exp->back(loc); } 118 bool back(size_t& loc) { return exp->back(loc); }
111 bool hasnavigation() { return exp->hasnavigation(); } 119 bool hasnavigation() { return exp->hasnavigation(); }
112}; 120};
113 121
114#endif 122#endif
diff --git a/noncore/apps/opie-reader/CAnnoEdit.h b/noncore/apps/opie-reader/CAnnoEdit.h
index 3cc9f78..f320061 100644
--- a/noncore/apps/opie-reader/CAnnoEdit.h
+++ b/noncore/apps/opie-reader/CAnnoEdit.h
@@ -1,58 +1,59 @@
1#ifndef __CANNOEDIT_H 1#ifndef __CANNOEDIT_H
2#define __CANNOEDIT_H 2#define __CANNOEDIT_H
3#include <qlabel.h> 3#include <qlabel.h>
4#include <qlayout.h> 4#include <qlayout.h>
5#include <qpushbutton.h> 5#include <qpushbutton.h>
6#include <qlineedit.h> 6#include <qlineedit.h>
7#include <qmultilineedit.h> 7#include <qmultilineedit.h>
8 8
9class CAnnoEdit : public QWidget 9class CAnnoEdit : public QWidget
10{ 10{
11 Q_OBJECT 11 Q_OBJECT
12 12
13 QLineEdit* m_name; 13 QLineEdit* m_name;
14 QMultiLineEdit* m_anno; 14 QMultiLineEdit* m_anno;
15 size_t m_posn; 15 size_t m_posn;
16 public: 16 public:
17 void setPosn(size_t p) { m_posn = p; } 17 void setPosn(size_t p) { m_posn = p; }
18 size_t getPosn() { return m_posn; } 18 size_t getPosn() { return m_posn; }
19 void setName(const QString& name) 19 void setName(const QString& name)
20 { 20 {
21 m_name->setText(name); 21 m_name->setText(name);
22 } 22 }
23 void setAnno(const QString& name) 23 void setAnno(const QString& name)
24 { 24 {
25 m_anno->setText(name); 25 m_anno->setText(name);
26 m_anno->setEdited(false); 26 m_anno->setEdited(false);
27 } 27 }
28 bool edited() { return m_anno->edited(); } 28 bool edited() { return m_anno->edited(); }
29 CAnnoEdit(QWidget *parent=0, const char *name=0, WFlags f = 0) : 29 CAnnoEdit(QWidget *parent=0, const char *name=0, WFlags f = 0) :
30 QWidget(parent, name, f) 30 QWidget(parent, name, f)
31 { 31 {
32 QVBoxLayout* grid = new QVBoxLayout(this); 32 QVBoxLayout* grid = new QVBoxLayout(this);
33 m_name = new QLineEdit(this, "Name"); 33 m_name = new QLineEdit(this, "Name");
34 m_anno = new QMultiLineEdit(this, "Annotation"); 34 m_anno = new QMultiLineEdit(this, "Annotation");
35 m_anno->setWordWrap(QMultiLineEdit::WidgetWidth);
35 QPushButton* exitButton = new QPushButton("Okay", this); 36 QPushButton* exitButton = new QPushButton("Okay", this);
36 connect(exitButton, SIGNAL( released() ), this, SLOT( slotOkay() ) ); 37 connect(exitButton, SIGNAL( released() ), this, SLOT( slotOkay() ) );
37 QPushButton* cancelButton = new QPushButton("Cancel", this); 38 QPushButton* cancelButton = new QPushButton("Cancel", this);
38 connect(cancelButton, SIGNAL( released() ), this, SLOT( slotCancel() ) ); 39 connect(cancelButton, SIGNAL( released() ), this, SLOT( slotCancel() ) );
39 QLabel *l = new QLabel("Text",this); 40 QLabel *l = new QLabel("Text",this);
40 grid->addWidget(l); 41 grid->addWidget(l);
41 grid->addWidget(m_name); 42 grid->addWidget(m_name);
42 l = new QLabel("Annotation",this); 43 l = new QLabel("Annotation",this);
43 grid->addWidget(l); 44 grid->addWidget(l);
44 grid->addWidget(m_anno,1); 45 grid->addWidget(m_anno,1);
45 QHBoxLayout* hgrid = new QHBoxLayout(grid); 46 QHBoxLayout* hgrid = new QHBoxLayout(grid);
46 hgrid->addWidget(cancelButton); 47 hgrid->addWidget(cancelButton);
47 hgrid->addWidget(exitButton); 48 hgrid->addWidget(exitButton);
48 } 49 }
49 private slots: 50 private slots:
50 void slotOkay() { emit finished(m_name->text(), m_anno->text()); } 51 void slotOkay() { emit finished(m_name->text(), m_anno->text()); }
51 void slotCancel() { emit cancelled(); } 52 void slotCancel() { emit cancelled(); }
52 public: 53 public:
53 signals: 54 signals:
54 void finished(const QString&, const QString&); 55 void finished(const QString&, const QString&);
55 void cancelled(); 56 void cancelled();
56}; 57};
57 58
58#endif 59#endif
diff --git a/noncore/apps/opie-reader/CBuffer.cpp b/noncore/apps/opie-reader/CBuffer.cpp
index 0780a88..03d7733 100644
--- a/noncore/apps/opie-reader/CBuffer.cpp
+++ b/noncore/apps/opie-reader/CBuffer.cpp
@@ -1,46 +1,46 @@
1#include "CBuffer.h" 1#include "CBuffer.h"
2 2
3CBufferBase& CBufferBase::assign(const void* sztmp, size_t ms) 3CBufferBase& CBufferBase::assign(const void* sztmp, size_t ms)
4{ 4{
5 if (ms*membersize > len) 5 if (ms*membersize > len)
6 { 6 {
7 delete [] buffer; 7 delete [] buffer;
8 buffer = new unsigned char[len = ms*membersize]; 8 buffer = new unsigned char[len = ms*membersize];
9 } 9 }
10 memcpy(buffer, sztmp, ms*membersize); 10 memcpy(buffer, sztmp, len);
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) : len(n*ms), membersize(ms)
15{ 15{
16 buffer = new unsigned char[len*membersize]; 16 buffer = new unsigned char[len];
17 memset(buffer, 0, len*membersize); 17 memset(buffer, 0, len);
18} 18}
19 19
20void* CBufferBase::operator[](int i) 20void* CBufferBase::operator[](int i)
21{ 21{
22 if ((i+1)*membersize > len) 22 if ((i+1)*membersize > len)
23 { 23 {
24 unsigned char* oldbuffer = buffer; 24 unsigned char* oldbuffer = buffer;
25 buffer = new unsigned char[(i+1)*membersize]; 25 buffer = new unsigned char[(i+1)*membersize];
26 memcpy(buffer, oldbuffer, len); 26 memcpy(buffer, oldbuffer, len);
27 memset(buffer+len, 0, (i+1)*membersize-len); 27 memset(buffer+len, 0, (i+1)*membersize-len);
28 len = (i+1)*membersize; 28 len = (i+1)*membersize;
29 delete [] oldbuffer; 29 delete [] oldbuffer;
30 } 30 }
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)
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];
38 memset(zero,0,membersize); 38 memset(zero,0,membersize);
39 unsigned char* element = _buffer; 39 unsigned char* element = _buffer;
40 while (memcmp(element, zero, membersize) != 0) 40 while (memcmp(element, zero, membersize) != 0)
41 { 41 {
42 element += membersize; 42 element += membersize;
43 } 43 }
44 delete [] zero; 44 delete [] zero;
45 return (element - _buffer)/membersize; 45 return (element - _buffer)/membersize;
46} 46}
diff --git a/noncore/apps/opie-reader/CDrawBuffer.cpp b/noncore/apps/opie-reader/CDrawBuffer.cpp
index ca220e6..77b76fb 100644
--- a/noncore/apps/opie-reader/CDrawBuffer.cpp
+++ b/noncore/apps/opie-reader/CDrawBuffer.cpp
@@ -1,379 +1,550 @@
1#include "CDrawBuffer.h" 1#include "CDrawBuffer.h"
2#include "FontControl.h" 2#include "FontControl.h"
3#include <qfontmetrics.h> 3#include <qfontmetrics.h>
4#include <qpainter.h> 4#include <qpainter.h>
5#include <qpixmap.h> 5#include <qpixmap.h>
6#include <qimage.h>
7#include "useqpe.h"
6#include "opie.h" 8#include "opie.h"
7 9
8CDrawBuffer::~CDrawBuffer() 10CDrawBuffer::~CDrawBuffer()
9{ 11{
10 while (!segs.isEmpty()) segs.erase(0); 12 while (!segs.isEmpty()) segs.erase(0);
11} 13}
12 14
13void CDrawBuffer::setright(CDrawBuffer& rhs, int f) 15void CDrawBuffer::setright(CDrawBuffer& rhs, int f)
14{ 16{
15 int i; 17 int i;
16 len = rhs.len; 18 len = rhs.len;
17 fc = rhs.fc; 19 fc = rhs.fc;
18 m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; 20 m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0;
19 while (!segs.isEmpty()) 21 while (!segs.isEmpty())
20 { 22 {
21 segs.erase(0); 23 segs.erase(0);
22 } 24 }
23 for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); ) 25 for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); )
24 { 26 {
25 CList<textsegment>::iterator next = iter; 27 CList<textsegment>::iterator next = iter;
26 iter++; 28 iter++;
27 if (iter == rhs.segs.end() || iter->start > f) 29 if (iter == rhs.segs.end() || iter->start > f)
28 { 30 {
29 int st = next->start-f; 31 int st = next->start-f;
30 if (st < 0) st = 0; 32 if (st < 0) st = 0;
31 33
32 CStyle _style = next->style; 34 CStyle _style = next->style;
33 35
34 segs.push_back(textsegment(st,next->style)); 36 segs.push_back(textsegment(st,next->style));
35 } 37 }
36 } 38 }
37 for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i]; 39 for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i];
38 (*this)[i-f] = '\0'; 40 (*this)[i-f] = '\0';
39 len = i; 41 len = i;
40} 42}
41 43
42CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs) 44CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs)
43{ 45{
44 int i; 46 int i;
45// qDebug("Trying 2"); 47// //qDebug("Trying 2");
46 len = rhs.len; 48 len = rhs.len;
47 m_maxstyle = rhs.m_maxstyle; 49 m_maxstyle = rhs.m_maxstyle;
48 m_ascent = rhs.m_ascent; 50 m_ascent = rhs.m_ascent;
49 m_descent = rhs.m_descent; 51 m_descent = rhs.m_descent;
50 m_lineSpacing = rhs.m_lineSpacing; 52 m_lineSpacing = rhs.m_lineSpacing;
51 m_lineExtraSpacing = rhs.m_lineExtraSpacing; 53 m_lineExtraSpacing = rhs.m_lineExtraSpacing;
52 while (!segs.isEmpty()) 54 while (!segs.isEmpty())
53 { 55 {
54 segs.erase(0); 56 segs.erase(0);
55 } 57 }
56 for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++) 58 for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++)
57 { 59 {
58 segs.push_back(*iter); 60 segs.push_back(*iter);
59 } 61 }
60 for (i = 0; rhs[i] != '\0'; i++) (*this)[i] = rhs[i]; 62 for (i = 0; rhs[i] != '\0'; i++) (*this)[i] = rhs[i];
61 (*this)[i] = '\0'; 63 (*this)[i] = '\0';
62 len = i; 64 len = i;
63// qDebug("Tried 2"); 65// //qDebug("Tried 2");
64 return *this; 66 return *this;
65} 67}
66 68
67CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp) 69CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp)
68{ 70{
69 int i; 71 int i;
70 while (!segs.isEmpty()) 72 while (!segs.isEmpty())
71 { 73 {
72 segs.erase(0); 74 segs.erase(0);
73 } 75 }
74 segs.push_back(textsegment(0, CStyle())); 76 segs.push_back(textsegment(0, CStyle()));
75 for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i]; 77 for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i];
76 (*this)[i] = '\0'; 78 (*this)[i] = '\0';
77 len = i; 79 len = i;
78 return *this; 80 return *this;
79} 81}
80 82
81void CDrawBuffer::empty() 83void CDrawBuffer::empty()
82{ 84{
85 m_bSop = false;
86 m_bEop = false;
83 len = 0; 87 len = 0;
84 (*this)[0] = 0; 88 (*this)[0] = 0;
85 while (!segs.isEmpty()) 89 while (!segs.isEmpty())
86 { 90 {
87 segs.erase(0); 91 segs.erase(0);
88 } 92 }
89 segs.push_back(textsegment(0,CStyle())); 93 segs.push_back(textsegment(0,CStyle()));
90 m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; 94 m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0;
91 m_bEof = false; 95 m_bEof = false;
92} 96}
93 97
94void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/) 98void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/)
95{ 99{
96 if (len == 0) 100 if (len == 0)
97 { 101 {
98 segs.first().start = 0; 102 segs.first().start = 0;
99 segs.first().style = _style; 103 segs.first().style = _style;
100 } 104 }
101 else if (_style != segs.last().style) 105 else if (_style != segs.last().style)
102 { 106 {
103 segs.push_back(textsegment(len, _style)); 107 segs.push_back(textsegment(len, _style));
104 } 108 }
105 (*this)[len++] = ch; 109 (*this)[len++] = ch;
106} 110}
107 111
108void CDrawBuffer::truncate(int n) 112void CDrawBuffer::truncate(int n)
109{ 113{
110 len = n; 114 len = n;
111 (*this)[n] = 0; 115 (*this)[n] = 0;
112} 116}
113 117
114int CDrawBuffer::width(int numchars) 118int CDrawBuffer::width(int numchars, bool onscreen, int scwidth, unsigned char _border)
115{ 119{
120 int gzoom = fc->gzoom();
116 int currentx = 0, end = 0; 121 int currentx = 0, end = 0;
117 QString text = toQString(data()); 122 QString text = (numchars < 0) ? toQString(data()) : toQString(data(), numchars);
118 CList<textsegment>::iterator textstart = segs.begin(); 123 CList<textsegment>::iterator textstart = segs.begin();
124 int extraspace = 0;
125 bool just = (onscreen && !m_bEop && textstart->style.getJustify() == m_AlignJustify);
126 int spaces = 0;
127 int spacesofar = 0;
128 int spacenumber = 0;
129 int nonspace = 0;
130 if (just)
131 {
132 for (int i = 0; i < len; i++)
133 {
134 if ((*this)[i] != ' ')
135 {
136 nonspace = i;
137 break;
138 }
139 }
140#ifdef _WINDOWS
141 for (i = nonspace; i < len; i++)
142#else
143 for (int i = nonspace; i < len; i++)
144#endif
145 {
146 if ((*this)[i] == ' ')
147 {
148 spaces++;
149 }
150 }
151 if (spaces == 0)
152 {
153 just = false;
154 }
155 else
156 {
157 extraspace = (scwidth - 2*_border - rightMargin() - leftMargin() - width());
158 if (extraspace == 0) just = false;
159 }
160 }
119 CList<textsegment>::iterator textend = textstart; 161 CList<textsegment>::iterator textend = textstart;
120 do 162 do
121 { 163 {
122 textend++; 164 textend++;
123 end = (textend != segs.end()) ? textend->start : length(); 165 end = (textend != segs.end()) ? textend->start : len;
124 if (numchars >= 0 && end > numchars) 166 if (numchars >= 0 && end > numchars)
125 { 167 {
126 end = numchars; 168 end = numchars;
127 } 169 }
128 CStyle currentstyle = textstart->style; 170 CStyle currentstyle = textstart->style;
129 if (currentstyle.isPicture()) 171 if (currentstyle.isPicture())
130 { 172 {
131 currentx += currentstyle.getPicture()->width(); 173 if (currentstyle.canScale())
174 {
175 currentx += (gzoom*currentstyle.getPicture()->width())/100;
176 }
177 else
178 {
179 currentx += currentstyle.getPicture()->width();
180 }
132 } 181 }
133 else 182 else
134 { 183 {
135 if (currentstyle.isMono() && !fc->hasCourier()) 184 if (currentstyle.isMono() && !fc->hasCourier())
136 { 185 {
137 int cw = (7*fc->getsize(currentstyle))/10; 186 int cw = (7*fc->getsize(currentstyle))/10;
138 currentx += cw*(end-textstart->start); 187 currentx += cw*(end-textstart->start);
139 } 188 }
140 else 189 else
141 { 190 {
142 QFont f(currentstyle.isMono() ? QString("courier") : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); 191 QFont f(currentstyle.isMono() ? QString(fc->fixedfontname()) : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) );
143 // f.setUnderline(currentstyle.isUnderline()); 192 // f.setUnderline(currentstyle.isUnderline());
144 QString str = text.mid(textstart->start, end-textstart->start); 193 QString str = text.mid(textstart->start, end-textstart->start);
145 QFontMetrics fm(f); 194 QFontMetrics fm(f);
146 currentx += fm.width(str); 195 if (just)
196 {
197 int lastspace = -1;
198 int nsp = 0;
199 int cx = currentx;
200 while ((nsp = str.find(" ", lastspace+1)) >= 0)
201 {
202 if (nsp > nonspace)
203 {
204 spacenumber++;
205 int nexttoadd = (extraspace*spacenumber+spaces/2)/spaces - spacesofar;
206 QString nstr = str.mid(lastspace+1, nsp-lastspace);
207 int lw = fm.width(nstr);
208 cx += lw+nexttoadd;
209 spacesofar += nexttoadd;
210 lastspace = nsp;
211 }
212 else
213 {
214 QString nstr = str.mid(lastspace+1, nsp-lastspace);
215 // qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr);
216 int lw = fm.width(nstr);
217 cx += lw;
218 lastspace = nsp;
219 }
220 }
221 QString nstr = str.right(str.length()-1-lastspace);
222 cx += fm.width(nstr);
223 currentx = cx;
224 }
225 else
226 {
227 currentx += fm.width(str);
228 }
147 } 229 }
148 } 230 }
149 textstart = textend; 231 textstart = textend;
150 } 232 }
151 while (textend != segs.end() && end != numchars); 233 while (textend != segs.end() && end != numchars && textstart->start < len);
152 return currentx; 234 return currentx;
153} 235}
154 236
155int CDrawBuffer::leftMargin() 237int CDrawBuffer::leftMargin()
156{ 238{
157 return (segs.begin()->style.getLeftMargin()*fc->getsize(segs.begin()->style))/6; 239 return (segs.begin()->style.getLeftMargin()*fc->getsize(segs.begin()->style)+3)/6;
158} 240}
159 241
160int CDrawBuffer::rightMargin() 242int CDrawBuffer::rightMargin()
161{ 243{
162 return (segs.begin()->style.getRightMargin()*fc->getsize(segs.begin()->style))/6; 244 return (segs.begin()->style.getRightMargin()*fc->getsize(segs.begin()->style)+3)/6;
163} 245}
164 246
165int CDrawBuffer::offset(int scwidth) 247int CDrawBuffer::offset(int scwidth, unsigned char _border)
166{ 248{
167 int currentx = BORDER; 249 int currentx = _border;
168 switch(segs.begin()->style.getJustify()) 250 switch(segs.begin()->style.getJustify())
169 { 251 {
170 case m_AlignRight: 252 case m_AlignRight:
171 { 253 {
172 currentx = scwidth - BORDER - rightMargin() - width(); 254 currentx = scwidth - _border - rightMargin() - width();
173 } 255 }
174 break; 256 break;
175 case m_AlignCentre: 257 case m_AlignCentre:
176 { 258 {
177 currentx = ( 259 currentx = (
178 scwidth + 260 scwidth +
179 leftMargin() - rightMargin() 261 leftMargin() - rightMargin()
180 - width())/2; 262 - width())/2;
181 } 263 }
182 break; 264 break;
183 case m_AlignJustify: 265 case m_AlignJustify:
184 case m_AlignLeft: 266 case m_AlignLeft:
185 currentx = BORDER + leftMargin(); 267 currentx = _border + leftMargin();
186 break; 268 break;
187 } 269 }
188 return currentx; 270 return currentx;
189} 271}
190 272
191void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth) 273void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth, unsigned char _border)
192{ 274{
193 int currentx = offset(scwidth); 275 int gzoom = fc->gzoom();
276 int currentx = offset(scwidth, _border);
194 QString text = toQString(data()); 277 QString text = toQString(data());
195 CList<textsegment>::iterator textstart = segs.begin(); 278 CList<textsegment>::iterator textstart = segs.begin();
196/* 279 int extraspace = 0;
197 StyleType align = textstart->style.getJustify(); 280 bool just = (!m_bEop && textstart->style.getJustify() == m_AlignJustify);
198 switch (align) 281 int spaces = 0;
282 int spacesofar = 0;
283 int spacenumber = 0;
284 int nonspace = 0;
285 if (just)
199 { 286 {
200 case CStyle::m_AlignRight: 287 for (int i = 0; i < len; i++)
201 { 288 {
202 currentx = scwidth - width() - 2*BORDER; 289 if ((*this)[i] != ' ')
290 {
291 nonspace = i;
292 break;
293 }
203 } 294 }
204 break; 295#ifdef _WINDOWS
205 case CStyle::m_AlignCentre: 296 for (i = nonspace; i < len; i++)
297#else
298 for (int i = nonspace; i < len; i++)
299#endif
206 { 300 {
207 currentx = (scwidth - width())/2 - BORDER; 301 if ((*this)[i] == ' ')
302 {
303 spaces++;
304 }
305 }
306 if (spaces == 0)
307 {
308 just = false;
309 }
310 else
311 {
312 extraspace = (scwidth - 2*_border - rightMargin() - leftMargin() - width());
313 if (extraspace == 0) just = false;
208 } 314 }
209 break;
210 case CStyle::m_AlignJustify:
211 case CStyle::m_AlignLeft:
212 break;
213 } 315 }
214*/
215 CList<textsegment>::iterator textend = textstart; 316 CList<textsegment>::iterator textend = textstart;
216 do 317 do
217 { 318 {
218 textend++; 319 textend++;
219 int end = (textend != segs.end()) ? textend->start : length(); 320 int end = (textend != segs.end()) ? textend->start : len;
220 CStyle currentstyle = textstart->style; 321 CStyle currentstyle = textstart->style;
221 QFont f((currentstyle.isMono() && fc->hasCourier()) ? QString("courier") : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); 322 QFont f((currentstyle.isMono() && fc->hasCourier()) ? fc->fixedfontname() : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) );
222 //f.setUnderline(currentstyle.isUnderline()); 323 //f.setUnderline(currentstyle.isUnderline());
223 //if (currentstyle.isUnderline()) qDebug("UNDERLINE"); 324 //if (currentstyle.isUnderline()) qDebug("UNDERLINE");
224 _p->setFont(f); 325 _p->setFont(f);
225 QString str = text.mid(textstart->start, end-textstart->start); 326 QString str = text.mid(textstart->start, end-textstart->start);
226#ifdef OPIE 327#if defined(OPIE) || !defined(USEQPE)
227 _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100)); 328 _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100));
228#else 329#else
229 _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10)); 330 _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10));
230#endif 331#endif
332 int voffset = currentstyle.getVOffset()*fc->getsize(currentstyle)/2;
231 if (_bMono) 333 if (_bMono)
232 { 334 {
233 if (currentstyle.isUnderline()) 335 if (currentstyle.isUnderline())
234 { 336 {
235 _p->drawLine( currentx, _y, currentx + str.length()*_charWidth, _y); 337 _p->drawLine( currentx, _y+voffset, currentx + str.length()*_charWidth, _y+voffset);
236 } 338 }
237 if (currentstyle.isStrikethru()) 339 if (currentstyle.isStrikethru())
238 { 340 {
239 int ascent = fc->ascent(currentstyle)/3; 341 int ascent = fc->ascent(currentstyle)/3;
240 _p->drawLine( currentx, _y-ascent, currentx + str.length()*_charWidth, _y-ascent); 342 _p->drawLine( currentx, _y-ascent+voffset, currentx + str.length()*_charWidth, _y-ascent+voffset);
241 } 343 }
242 for (int i = 0; i < str.length(); i++) 344 for (int i = 0; i < str.length(); i++)
243 { 345 {
244 _p->drawText( currentx + i*_charWidth, _y, QString(str[i])); 346 _p->drawText( currentx + i*_charWidth, _y+voffset, QString(str[i]));
245 } 347 }
246 currentx += str.length()*_charWidth; 348 currentx += str.length()*_charWidth;
247 } 349 }
248 else 350 else
249 { 351 {
250 if (currentstyle.isPicture()) 352 if (currentstyle.isPicture())
251 { 353 {
354 int ht = (gzoom*currentstyle.getPicture()->height())/100;
355 int wt = (gzoom*currentstyle.getPicture()->width())/100;
252 int ascent = fc->ascent(currentstyle)/2; 356 int ascent = fc->ascent(currentstyle)/2;
253 int yoffset = currentstyle.getPicture()->height()/2 + ascent; 357 int yoffset = ht/2 + ascent;
254 _p->drawPixmap( currentx, _y-yoffset, *(currentstyle.getPicture())); 358
255 currentx += currentstyle.getPicture()->width(); 359 QPixmap pc;
360 if (gzoom != 100 && currentstyle.canScale())
361 {
362 QImage im = currentstyle.getPicture()->smoothScale(wt,ht);
363 pc.convertFromImage(im);
364 }
365 else
366 {
367 pc.convertFromImage(*currentstyle.getPicture());
368 }
369 _p->drawPixmap( currentx, _y-yoffset, pc );
370 currentx += wt;
256 } 371 }
257 else 372 else
258 { 373 {
259 if (currentstyle.isMono() && !fc->hasCourier()) 374 if (currentstyle.isMono() && !fc->hasCourier())
260 { 375 {
261 int cw = (7*fc->getsize(currentstyle))/10; 376 int cw = (7*fc->getsize(currentstyle))/10;
262 int w = cw*(end-textstart->start); 377 int w = cw*(end-textstart->start);
263 if (currentstyle.isUnderline()) 378 if (currentstyle.isUnderline())
264 { 379 {
265 _p->drawLine( currentx, _y, currentx + w, _y); 380 _p->drawLine( currentx, _y+voffset, currentx + w, _y+voffset);
266 } 381 }
267 if (currentstyle.isStrikethru()) 382 if (currentstyle.isStrikethru())
268 { 383 {
269 int ascent = fc->ascent(currentstyle)/3; 384 int ascent = fc->ascent(currentstyle)/3;
270 _p->drawLine( currentx, _y-ascent, currentx + w, _y-ascent); 385 _p->drawLine( currentx, _y-ascent+voffset, currentx + w, _y-ascent+voffset);
271 } 386 }
272 QString str = text.mid(textstart->start, end-textstart->start); 387 QString str = text.mid(textstart->start, end-textstart->start);
273 388
274 for (int i = 0; i < str.length(); i++) 389 for (unsigned int i = 0; i < str.length(); i++)
275 { 390 {
276 _p->drawText( currentx, _y, QString(str[i])); 391#ifdef _WINDOWS
392 _p->drawText( currentx, _y+voffset, QString(str.at(i)));
393#else
394 _p->drawText( currentx, _y+voffset, QString(str[i]));
395#endif
277 currentx += cw; 396 currentx += cw;
278 } 397 }
279 } 398 }
280 else 399 else
281 { 400 {
282 QFontMetrics fm(f); 401 QFontMetrics fm(f);
283 int w = fm.width(str); 402 int w;
403 if (just)
404 {
405 int lastspace = -1;
406 int nsp = 0;
407 int cx = currentx;
408 while ((nsp = str.find(" ", lastspace+1)) >= 0)
409 {
410 if (nsp+textstart->start >= nonspace)
411 {
412 spacenumber++;
413 int nexttoadd = (extraspace*spacenumber+spaces/2)/spaces - spacesofar;
414 QString nstr = str.mid(lastspace+1, nsp-lastspace);
415 // qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr);
416 int lw = fm.width(nstr);
417 _p->drawText( cx, _y+voffset, nstr);
418 cx += lw+nexttoadd;
419 spacesofar += nexttoadd;
420 lastspace = nsp;
421 }
422 else
423 {
424 QString nstr = str.mid(lastspace+1, nsp-lastspace);
425 // qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr);
426 int lw = fm.width(nstr);
427 _p->drawText( cx, _y+voffset, nstr);
428 cx += lw;
429 lastspace = nsp;
430 }
431 }
432 QString nstr = str.right(str.length()-1-lastspace);
433 _p->drawText( cx, _y+voffset, nstr);
434 cx += fm.width(nstr);
435 w = cx - currentx;
436 }
437 else
438 {
439 _p->drawText( currentx, _y+voffset, str);
440 w = fm.width(str);
441 }
284 if (currentstyle.isUnderline()) 442 if (currentstyle.isUnderline())
285 { 443 {
286 _p->drawLine( currentx, _y, currentx + w, _y); 444 _p->drawLine( currentx, _y+voffset, currentx + w, _y+voffset);
287 } 445 }
288 if (currentstyle.isStrikethru()) 446 if (currentstyle.isStrikethru())
289 { 447 {
290 int ascent = fc->ascent(currentstyle)/3; 448 int ascent = fc->ascent(currentstyle)/3;
291 _p->drawLine( currentx, _y-ascent, currentx + w, _y-ascent); 449 _p->drawLine( currentx, _y-ascent+voffset, currentx + w, _y-ascent+voffset);
292 } 450 }
293 _p->drawText( currentx, _y, str);
294 currentx += w; 451 currentx += w;
295 } 452 }
296 } 453 }
297 } 454 }
298 textstart = textend; 455 textstart = textend;
299 } 456 }
300 while (textend != segs.end() && textstart->start < length()-1); 457 while (textend != segs.end() && textstart->start < len);
301} 458}
302 459
303CStyle CDrawBuffer::laststyle() 460CStyle CDrawBuffer::laststyle()
304{ 461{
305 return segs.last().style; 462 return segs.last().style;
306} 463}
307 464
308linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt) 465linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt)
309{ 466{
310 int end = 0; 467 int end = 0;
311 CStyle currentstyle; 468 CStyle currentstyle;
312 CList<textsegment>::iterator textstart = segs.begin(); 469 CList<textsegment>::iterator textstart = segs.begin();
313 CList<textsegment>::iterator textend = textstart; 470 CList<textsegment>::iterator textend = textstart;
314 do 471 do
315 { 472 {
316 textend++; 473 textend++;
317 end = (textend != segs.end()) ? textend->start : length(); 474 end = (textend != segs.end()) ? textend->start : len;
318 currentstyle = textstart->style; 475 currentstyle = textstart->style;
319/* 476/*
320 if (currentstyle.isPicture()) qDebug("Passed thru picture"); 477 if (currentstyle.isPicture()) qDebug("Passed thru picture");
321 if (currentstyle.getLink()) qDebug("Passed thru link"); 478 if (currentstyle.getLink()) qDebug("Passed thru link");
322 qDebug("islink:%d - %d", numchars, end); 479 //qDebug("islink:%d - %d", numchars, end);
323*/ 480*/
324 textstart = textend; 481 textstart = textend;
325 } 482 }
326 while (textend != segs.end() && end <= numchars); 483 while (textend != segs.end() && end <= numchars);
327// if (currentstyle.isPicture()) qDebug("Clicked on picture"); 484// if (currentstyle.isPicture()) qDebug("Clicked on picture");
328 if (currentstyle.getPictureLink()) 485 if (currentstyle.getPictureLink())
329 { 486 {
330 tgt = currentstyle.getPictureLinkData(); 487 tgt = currentstyle.getPictureLinkData();
331 return ePicture; 488 return ePicture;
332 } 489 }
333 if (currentstyle.getLink()) 490 if (currentstyle.getLink())
334 { 491 {
335 tgt = currentstyle.getData(); 492 tgt = currentstyle.getData();
336 return eLink; 493 return eLink;
337 } 494 }
338 return eNone; 495 return eNone;
339} 496}
340 497
341void CDrawBuffer::resize() 498void CDrawBuffer::resize()
342{ 499{
343 int i; 500 int gzoom = fc->gzoom();
344 m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; 501 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(); ) 502 for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= len; )
346 { 503 {
347 CList<textsegment>::iterator next = iter; 504 CList<textsegment>::iterator next = iter;
348 iter++; 505 iter++;
349 int st = next->start; 506 int st = next->start;
350 if (st < 0) st = 0; 507 if (st < 0) st = 0;
351 508
352 CStyle _style = next->style; 509 CStyle _style = next->style;
353 510
354 int linespacing, ascent, descent, extra; 511 int linespacing, ascent, descent, extra;
355 512
356 ascent = fc->ascent(_style); 513 ascent = fc->ascent(_style);
357 descent = fc->descent(_style); 514 descent = fc->descent(_style);
358 linespacing = fc->lineSpacing(_style); 515 linespacing = fc->lineSpacing(_style);
359 extra = linespacing - ascent - descent; 516 extra = linespacing - ascent - descent;
360 if (_style.isPicture()) 517 if (_style.isPicture() && _style.canScale())
361 { 518 {
362 descent = (_style.getPicture()->height()-ascent)/2; 519 descent = ((gzoom*_style.getPicture()->height())/100-ascent)/2;
363 ascent = (_style.getPicture()->height()+ascent)/2; 520 ascent = ((gzoom*_style.getPicture()->height())/100+ascent)/2;
364 } 521 }
365/* 522/*
366 else if (fc != NULL) 523 else if (fc != NULL)
367 { 524 {
368 ascent = fc->ascent(_style); 525 ascent = fc->ascent(_style);
369 descent = fc->descent(_style); 526 descent = fc->descent(_style);
370 linespacing = fc->lineSpacing(_style); 527 linespacing = fc->lineSpacing(_style);
371 extra = linespacing - ascent - descent; 528 extra = linespacing - ascent - descent;
372 } 529 }
373*/ 530*/
374 if (ascent > m_ascent) m_ascent = ascent; 531 if (ascent > m_ascent) m_ascent = ascent;
375 if (descent > m_descent) m_descent = descent; 532 if (descent > m_descent) m_descent = descent;
376 if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra; 533 if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra;
377 m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing; 534 m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing;
378 } 535 }
536 int lead = fc->getlead();
537 if (lead != 0)
538 {
539 int xt = (lead*m_lineSpacing+5)/10;
540 m_descent += xt;
541 m_lineSpacing += xt;
542 }
543 if (m_bSop)
544 {
545 int xt = ((segs.begin()->style.getExtraSpace()+fc->getextraspace())*fc->getsize(segs.begin()->style)+5)/10;
546 //qDebug("ExtraSpace:%d", xt);
547 m_ascent += xt;
548 m_lineSpacing += xt;
549 }
379} 550}
diff --git a/noncore/apps/opie-reader/CDrawBuffer.h b/noncore/apps/opie-reader/CDrawBuffer.h
index 0d8968c..9ec0ed9 100644
--- a/noncore/apps/opie-reader/CDrawBuffer.h
+++ b/noncore/apps/opie-reader/CDrawBuffer.h
@@ -1,76 +1,73 @@
1#ifndef __CDRAWBUFFER_H 1#ifndef __CDRAWBUFFER_H
2#define __CDRAWBUFFER_H 2#define __CDRAWBUFFER_H
3 3
4#include "StyleConsts.h" 4#include "StyleConsts.h"
5#include "CBuffer.h" 5#include "CBuffer.h"
6#include "my_list.h" 6#include "my_list.h"
7#include "linktype.h"
7 8
8class QPainter; 9class QPainter;
9 10
10enum linkType
11{
12 eNone,
13 eLink,
14 ePicture
15};
16
17struct textsegment 11struct textsegment
18{ 12{
19 int start; 13 int start;
20 CStyle style; 14 CStyle style;
21 textsegment(int _start, const CStyle& _style) 15 textsegment(int _start, const CStyle& _style)
22 : 16 :
23 start(_start), style(_style) 17 start(_start), style(_style)
24 {} 18 {}
25}; 19};
26 20
27class FontControl; 21class FontControl;
28 22
29class CDrawBuffer : public CBuffer 23class CDrawBuffer : public CBuffer
30{ 24{
31 CList<textsegment> segs; 25 CList<textsegment> segs;
32 int len; 26 int len;
33 FontControl* fc; 27 FontControl* fc;
34 int m_maxstyle, m_ascent, m_descent, m_lineSpacing, m_lineExtraSpacing; 28 int m_maxstyle, m_ascent, m_descent, m_lineSpacing, m_lineExtraSpacing;
35 bool m_bEof; 29 bool m_bEof;
30 bool m_bSop, m_bEop;
36 CDrawBuffer(const CDrawBuffer&); 31 CDrawBuffer(const CDrawBuffer&);
37 CDrawBuffer& operator=(const tchar*sztmp); 32 CDrawBuffer& operator=(const tchar*sztmp);
38 public: 33 public:
34 void setstartpara() { m_bSop = true; }
35 void setendpara() { m_bEop = true; }
39 int leftMargin(); 36 int leftMargin();
40 int rightMargin(); 37 int rightMargin();
41 void setEof() { m_bEof = true; } 38 void setEof() { m_bEof = true; }
42 bool eof() { return m_bEof; } 39 bool eof() { return m_bEof; }
43 CDrawBuffer& operator=(CDrawBuffer&); 40 CDrawBuffer& operator=(CDrawBuffer&);
44 CDrawBuffer(FontControl* _fs = NULL) 41 CDrawBuffer(FontControl* _fs = NULL)
45 : 42 :
46 fc(_fs) 43 fc(_fs)
47 { 44 {
48 empty(); 45 empty();
49 } 46 }
50 ~CDrawBuffer(); 47 ~CDrawBuffer();
51/* 48/*
52 CDrawBuffer() 49 CDrawBuffer()
53 : 50 :
54 size(0) 51 size(0)
55 { 52 {
56 empty(); 53 empty();
57 } 54 }
58*/ 55*/
59 int width(int numchars = -1); 56 int width(int numchars = -1, bool onscreen = false, int scwidth = 0, unsigned char _border = 0);
60 int offset(int); 57 int offset(int, unsigned char);
61 void render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scw); 58 void render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scw, unsigned char);
62 void empty(); 59 void empty();
63 void addch(tchar ch, CStyle _style); 60 void addch(tchar ch, CStyle _style);
64 void truncate(int); 61 void truncate(int);
65 void setright(CDrawBuffer&, int); 62 void setright(CDrawBuffer&, int);
66 CStyle laststyle(); 63 CStyle laststyle();
67 int ascent() { return m_ascent; } 64 int ascent() { return m_ascent; }
68 int descent() { return m_descent; } 65 int descent() { return m_descent; }
69 int lineSpacing() { return m_lineSpacing; } 66 int lineSpacing() { return m_lineSpacing; }
70 int lineExtraSpacing() { return m_lineExtraSpacing; } 67 int lineExtraSpacing() { return m_lineExtraSpacing; }
71 68
72// void frig(); 69// void frig();
73 linkType getLinkType(int numchars, size_t& tgt); 70 linkType getLinkType(int numchars, size_t& tgt);
74 void resize(); 71 void resize();
75}; 72};
76#endif 73#endif
diff --git a/noncore/apps/opie-reader/CEncoding.cpp b/noncore/apps/opie-reader/CEncoding.cpp
index c1dcfe8..60a1057 100644
--- a/noncore/apps/opie-reader/CEncoding.cpp
+++ b/noncore/apps/opie-reader/CEncoding.cpp
@@ -1,210 +1,210 @@
1#include <stdio.h> 1#include <stdio.h>
2#include "CEncoding.h" 2#include "CEncoding.h"
3 3
4void CUtf8::getch(tchar& ch, CStyle& sty) 4void CUtf8::getch(tchar& ch, CStyle& sty)
5{ 5{
6 int iret; 6 tchar ret;
7 parent->getch(iret, sty); 7 parent->getch(ret, sty);
8 if (iret == EOF) 8 if (ret == UEOF)
9 { 9 {
10 ch = UEOF; 10 ch = UEOF;
11 return; 11 return;
12 } 12 }
13 tchar ret = iret;
14 int count = 0; 13 int count = 0;
15 if (ret & (1 << 7)) 14 if (ret & (1 << 7))
16 { 15 {
17 unsigned char flags = ret << 1; 16 unsigned char flags = ret << 1;
18 while ((flags & (1 << 7)) != 0) 17 while ((flags & (1 << 7)) != 0)
19 { 18 {
20 ret <<= 6; 19 ret <<= 6;
20 tchar iret;
21 parent->getch(iret, sty); 21 parent->getch(iret, sty);
22 ret += iret & 0x3f; 22 ret += iret & 0x3f;
23 flags <<= 1; 23 flags <<= 1;
24 count++; 24 count++;
25 } 25 }
26 switch (count) 26 switch (count)
27 { 27 {
28 case 0: 28 case 0:
29 break; 29 break;
30 case 1: 30 case 1:
31 ret &= 0x07ff; 31 ret &= 0x07ff;
32 break; 32 break;
33 case 2: 33 case 2:
34 break; 34 break;
35 case 3: 35 case 3:
36 case 4: 36 case 4:
37 case 5: 37 case 5:
38 default: 38 default:
39 printf("Only 16bit unicode supported..."); 39 printf("Only 16bit unicode supported...");
40 } 40 }
41 } 41 }
42 ch = ret; 42 ch = ret;
43 return; 43 return;
44} 44}
45 45
46void CUcs16be::getch(tchar& ch, CStyle& sty) 46void CUcs16be::getch(tchar& ch, CStyle& sty)
47{ 47{
48 int iret; 48 tchar iret;
49 parent->getch(iret, sty); 49 parent->getch(iret, sty);
50 if (iret == EOF) 50 if (iret == UEOF)
51 { 51 {
52 ch = UEOF; 52 ch = UEOF;
53 return; 53 return;
54 } 54 }
55 tchar ret = iret; 55 tchar ret = iret;
56 parent->getch(iret, sty); 56 parent->getch(iret, sty);
57 ch = (ret << 8) + iret; 57 ch = (ret << 8) + iret;
58} 58}
59 59
60void CUcs16le::getch(tchar& ch, CStyle& sty) 60void CUcs16le::getch(tchar& ch, CStyle& sty)
61{ 61{
62 int iret; 62 tchar iret;
63 parent->getch(iret, sty); 63 parent->getch(iret, sty);
64 if (iret == EOF) 64 if (iret == UEOF)
65 { 65 {
66 ch = UEOF; 66 ch = UEOF;
67 return; 67 return;
68 } 68 }
69 tchar ret = iret; 69 tchar ret = iret;
70 parent->getch(iret, sty); 70 parent->getch(iret, sty);
71 ch = ret + (iret << 8); 71 ch = ret + (iret << 8);
72} 72}
73 73
74void Ccp1252::getch(tchar& ch, CStyle& sty) 74void Ccp1252::getch(tchar& ch, CStyle& sty)
75{ 75{
76 int iret; 76 tchar iret;
77 parent->getch(iret, sty); 77 parent->getch(iret, sty);
78 ch = iret; 78 ch = iret;
79 switch (ch) 79 switch (ch)
80 { 80 {
81 case EOF: 81 case UEOF:
82 ch = UEOF; 82 ch = UEOF;
83 break; 83 break;
84 case 0x80: 84 case 0x80:
85 ch = 0x20ac; 85 ch = 0x20ac;
86 break; 86 break;
87 case 0x82: 87 case 0x82:
88 ch = 0x201a; 88 ch = 0x201a;
89 break; 89 break;
90 case 0x83: 90 case 0x83:
91 ch = 0x0192; 91 ch = 0x0192;
92 break; 92 break;
93 case 0x84: 93 case 0x84:
94 ch = 0x201e; 94 ch = 0x201e;
95 break; 95 break;
96 case 0x85: 96 case 0x85:
97 ch = 0x2026; 97 ch = 0x2026;
98 break; 98 break;
99 case 0x86: 99 case 0x86:
100 ch = 0x2020; 100 ch = 0x2020;
101 break; 101 break;
102 case 0x87: 102 case 0x87:
103 ch = 0x2021; 103 ch = 0x2021;
104 break; 104 break;
105 case 0x88: 105 case 0x88:
106 ch = 0x02c6; 106 ch = 0x02c6;
107 break; 107 break;
108 case 0x89: 108 case 0x89:
109 ch = 0x2030; 109 ch = 0x2030;
110 break; 110 break;
111 case 0x8a: 111 case 0x8a:
112 ch = 0x0160; 112 ch = 0x0160;
113 break; 113 break;
114 case 0x8b: 114 case 0x8b:
115 ch = 0x2039; 115 ch = 0x2039;
116 break; 116 break;
117 case 0x8c: 117 case 0x8c:
118 ch = 0x0152; 118 ch = 0x0152;
119 break; 119 break;
120 case 0x8e: 120 case 0x8e:
121 ch = 0x017d; 121 ch = 0x017d;
122 break; 122 break;
123 case 0x91: 123 case 0x91:
124 ch = 0x2018; 124 ch = 0x2018;
125 break; 125 break;
126 case 0x92: 126 case 0x92:
127 ch = 0x2019; 127 ch = 0x2019;
128 break; 128 break;
129 case 0x93: 129 case 0x93:
130 ch = 0x201c; 130 ch = 0x201c;
131 break; 131 break;
132 case 0x94: 132 case 0x94:
133 ch = 0x201d; 133 ch = 0x201d;
134 break; 134 break;
135 case 0x95: 135 case 0x95:
136 ch = 0x2022; 136 ch = 0x2022;
137 break; 137 break;
138 case 0x96: 138 case 0x96:
139 ch = 0x2013; 139 ch = 0x2013;
140 break; 140 break;
141 case 0x97: 141 case 0x97:
142 ch = 0x2014; 142 ch = 0x2014;
143 break; 143 break;
144 case 0x98: 144 case 0x98:
145 ch = 0x02dc; 145 ch = 0x02dc;
146 break; 146 break;
147 case 0x99: 147 case 0x99:
148 ch = 0x2122; 148 ch = 0x2122;
149 break; 149 break;
150 case 0x9a: 150 case 0x9a:
151 ch = 0x0161; 151 ch = 0x0161;
152 break; 152 break;
153 case 0x9b: 153 case 0x9b:
154 ch = 0x203a; 154 ch = 0x203a;
155 break; 155 break;
156 case 0x9c: 156 case 0x9c:
157 ch = 0x0153; 157 ch = 0x0153;
158 break; 158 break;
159 case 0x9e: 159 case 0x9e:
160 ch = 0x017e; 160 ch = 0x017e;
161 break; 161 break;
162 case 0x9f: 162 case 0x9f:
163 ch = 0x0178; 163 ch = 0x0178;
164 break; 164 break;
165 default: 165 default:
166 break; 166 break;
167 } 167 }
168} 168}
169 169
170void CPalm::getch(tchar& ch, CStyle& sty) 170void CPalm::getch(tchar& ch, CStyle& sty)
171{ 171{
172 Ccp1252::getch(ch, sty); 172 Ccp1252::getch(ch, sty);
173 switch (ch) 173 switch (ch)
174 { 174 {
175 case 0x18: 175 case 0x18:
176 ch = 0x2026; 176 ch = 0x2026;
177 break; 177 break;
178 case 0x19: 178 case 0x19:
179 ch = 0x2007; 179 ch = 0x2007;
180 break; 180 break;
181 case 0x8d: 181 case 0x8d:
182 ch = 0x2662; 182 ch = 0x2662;
183 break; 183 break;
184 case 0x8e: 184 case 0x8e:
185 ch = 0x2663; 185 ch = 0x2663;
186 break; 186 break;
187 case 0x8f: 187 case 0x8f:
188 ch = 0x2661; 188 ch = 0x2661;
189 break; 189 break;
190 case 0x90: 190 case 0x90:
191 ch = 0x2660; 191 ch = 0x2660;
192 break; 192 break;
193 default: 193 default:
194 break; 194 break;
195 } 195 }
196} 196}
197 197
198void CAscii::getch(tchar& ch, CStyle& sty) 198void CAscii::getch(tchar& ch, CStyle& sty)
199{ 199{
200 int iret; 200 tchar iret;
201 parent->getch(iret, sty); 201 parent->getch(iret, sty);
202 if (iret == EOF) 202 if (iret == UEOF)
203 { 203 {
204 ch = UEOF; 204 ch = UEOF;
205 } 205 }
206 else 206 else
207 { 207 {
208 ch = iret; 208 ch = iret;
209 } 209 }
210} 210}
diff --git a/noncore/apps/opie-reader/CEncoding.h b/noncore/apps/opie-reader/CEncoding.h
index 86562e7..463fba9 100644
--- a/noncore/apps/opie-reader/CEncoding.h
+++ b/noncore/apps/opie-reader/CEncoding.h
@@ -1,53 +1,74 @@
1#ifndef __CENCODING_H 1#ifndef __CENCODING_H
2#define __CENCODING_H 2#define __CENCODING_H
3 3
4#include "CExpander.h" 4#include "CExpander.h"
5 5
6#define MAX_ENCODING 6
7
6class CEncoding : public CCharacterSource 8class CEncoding : public CCharacterSource
7{ 9{
8 friend class CFilterChain; 10 friend class CFilterChain;
9 protected: 11 protected:
10 CExpander* parent; 12 CExpander* parent;
13 linkType hyperlink(unsigned int n, QString& t) { return parent->hyperlink(n,t); }
11public: 14public:
12 CEncoding() : parent(NULL) {} 15 CEncoding() : parent(NULL) {}
13 void setparent(CExpander* p) { parent = p; } 16 void setparent(CExpander* p) { parent = p; }
14 virtual ~CEncoding() {}; 17 virtual ~CEncoding() {};
15}; 18};
16 19
17class CUtf8 : public CEncoding 20class CUtf8 : public CEncoding
18{ 21{
19public: 22public:
20 void getch(tchar& ch, CStyle& sty); 23 void getch(tchar& ch, CStyle& sty);
21}; 24};
22 25
23class CUcs16be : public CEncoding 26class CUcs16be : public CEncoding
24{ 27{
25public: 28public:
26 void getch(tchar& ch, CStyle& sty); 29 void getch(tchar& ch, CStyle& sty);
27}; 30};
28 31
29class CUcs16le : public CEncoding 32class CUcs16le : public CEncoding
30{ 33{
31public: 34public:
32 void getch(tchar& ch, CStyle& sty); 35 void getch(tchar& ch, CStyle& sty);
33}; 36};
34 37
35class Ccp1252 : public CEncoding 38class Ccp1252 : public CEncoding
36{ 39{
37public: 40public:
38 void getch(tchar& ch, CStyle& sty); 41 void getch(tchar& ch, CStyle& sty);
39}; 42};
40 43
41class CPalm : public Ccp1252 44class CPalm : public Ccp1252
42{ 45{
43public: 46public:
44 void getch(tchar& ch, CStyle& sty); 47 void getch(tchar& ch, CStyle& sty);
45}; 48};
46 49
47class CAscii : public CEncoding 50class CAscii : public CEncoding
48{ 51{
49public: 52public:
50 void getch(tchar& ch, CStyle& sty); 53 void getch(tchar& ch, CStyle& sty);
51}; 54};
52 55
56#include "CEncoding_tables.h"
57
58class CGeneral8Bit : public CEncoding
59{
60 int m_index;
61 public:
62 CGeneral8Bit(int _i) : m_index(_i)
63 {
64 // qDebug("8Bit:%d", _i);
65 // qDebug("%s", unicodetable::iterator(_i)->mime);
66 }
67 void getch(tchar& ch, CStyle& sty)
68 {
69 parent->getch(ch, sty);
70 ch = unicodetable::unicodevalue(m_index, ch);
71 }
72};
73
53#endif 74#endif
diff --git a/noncore/apps/opie-reader/CExpander.h b/noncore/apps/opie-reader/CExpander.h
index c281398..7b21d3e 100644
--- a/noncore/apps/opie-reader/CExpander.h
+++ b/noncore/apps/opie-reader/CExpander.h
@@ -1,124 +1,151 @@
1#ifndef __CExpander_h 1#ifndef __CExpander_h
2#define __CExpander_h 2#define __CExpander_h
3 3
4#ifndef _WINDOWS
4#include <unistd.h> 5#include <unistd.h>
6#endif
5#include <stdio.h> 7#include <stdio.h>
6#include <time.h> 8#include <time.h>
7#include <qmessagebox.h> 9#include <qmessagebox.h>
10#include "useqpe.h"
8#include "config.h" 11#include "config.h"
9#include "StyleConsts.h" 12#include "StyleConsts.h"
10#include "Markups.h" 13#include "Markups.h"
11#include "name.h" 14#include "names.h"
15#include "linktype.h"
12 16
13class QPixmap; 17class QImage;
14class Bkmk; 18class Bkmk;
15 19
16template<class T> 20template<class T>
17class CList; 21class CList;
18 22
19class CCharacterSource 23class CCharacterSource
20{ 24{
21 public: 25 public:
22 virtual void getch(tchar&, CStyle&) = 0; 26 virtual void getch(tchar&, CStyle&) = 0;
27 virtual linkType hyperlink(unsigned int n, QString&) = 0;
23}; 28};
24 29
25class CExpander 30class CExpander
26{ 31{
27 protected: 32 protected:
28 size_t m_homepos; 33 size_t m_homepos;
29 bool m_continuous; 34 bool m_continuous;
30 char* fname; 35 char* fname;
31 bool bSuspended; 36 bool bSuspended;
32 size_t suspos; 37 size_t suspos;
33 time_t sustime; 38 time_t sustime;
39 int m_scrWidth;
40 unsigned long m_currentstart, m_currentend;
34 public: 41 public:
35 virtual void suspend() = 0; 42#ifdef USEQPE
43 virtual void suspend() = 0;
36 virtual void unsuspend() = 0; 44 virtual void unsuspend() = 0;
45#endif
37 size_t getHome() { return m_homepos; } 46 size_t getHome() { return m_homepos; }
38 CExpander() : m_homepos(0), fname(NULL) {}; 47 CExpander() : m_homepos(0), fname(NULL), m_scrWidth(240), m_currentstart(1), m_currentend(0) {};
39 virtual ~CExpander() { if (fname != NULL) delete [] fname; }; 48 virtual ~CExpander() { if (fname != NULL) delete [] fname; };
40 int openfile(const char *src) 49 int openfile(const char *src)
41 { 50 {
42 bSuspended = false; 51 bSuspended = false;
43 fname = strdup(src); 52 fname = strdup(src);
44 return OpenFile(src); 53 return OpenFile(src);
45 } 54 }
46 virtual int OpenFile(const char *src) = 0; 55 virtual int OpenFile(const char *src) = 0;
47 virtual unsigned int locate() = 0; 56 virtual unsigned int locate() = 0;
48 virtual void locate(unsigned int n) = 0; 57 virtual void locate(unsigned int n) = 0;
49 virtual bool hasrandomaccess() = 0; 58 virtual bool hasrandomaccess() = 0;
50 virtual void sizes(unsigned long& file, unsigned long& text) = 0; 59 virtual void sizes(unsigned long& file, unsigned long& text) = 0;
51 virtual CList<Bkmk>* getbkmklist() { return NULL; } 60 virtual CList<Bkmk>* getbkmklist() { return NULL; }
52 virtual void getch(int& ch, CStyle& sty) 61 virtual void getch(tchar& ch, CStyle& sty)
53 { 62 {
54 ch = getch(); 63 int ich = getch();
64 ch = (ich == EOF) ? UEOF : ich;
55 sty.unset(); 65 sty.unset();
56 } 66 }
57 virtual int getch() = 0; 67 virtual int getch() = 0;
58 virtual bool hyperlink(unsigned int n) 68 virtual linkType hyperlink(unsigned int n, QString& wrd)
59 { 69 {
60 locate(n); 70 locate(n);
61 return true; 71 return eLink;
62 } 72 }
63 virtual MarkupType PreferredMarkup() = 0; 73 virtual MarkupType PreferredMarkup() = 0;
64 virtual void saveposn(size_t posn) {} 74 virtual void saveposn(size_t posn) {}
65 virtual bool forward(size_t& loc) {} 75 virtual void writeposn(size_t posn) {}
66 virtual bool back(size_t& loc) {} 76 virtual bool forward(size_t& loc) { return false; }
77 virtual bool back(size_t& loc) { return false; }
67 virtual bool hasnavigation() { return false; } 78 virtual bool hasnavigation() { return false; }
68 virtual unsigned long startSection() 79 unsigned long startSection()
80 {
81 unsigned long current = locate();
82 if (m_currentstart > current || current > m_currentend)
83 {
84 start2endSection();
85 }
86 return m_currentstart;
87 }
88 unsigned long endSection()
69 { 89 {
70 return 0; 90 unsigned long current = locate();
91 if (m_currentstart > current || current > m_currentend)
92 {
93 start2endSection();
94 }
95 return m_currentend;
71 } 96 }
72 virtual unsigned long endSection() 97 virtual void start2endSection()
73 { 98 {
74 unsigned long file, text; 99 m_currentstart = 0;
75 sizes(file, text); 100 unsigned long file;
76 return text; 101 sizes(file, m_currentend);
77 } 102 }
78 virtual QPixmap* getPicture(unsigned long tgt) { return NULL; } 103 virtual QImage* getPicture(unsigned long tgt) { return NULL; }
79 void setContinuous(bool _b) { m_continuous = _b; } 104 void setContinuous(bool _b) { m_continuous = _b; }
80 105#ifdef USEQPE
81 virtual void suspend(FILE*& fin) 106 virtual void suspend(FILE*& fin)
82 { 107 {
83 bSuspended = true; 108 bSuspended = true;
84 suspos = ftell(fin); 109 suspos = ftell(fin);
85 fclose(fin); 110 fclose(fin);
86 fin = NULL; 111 fin = NULL;
87 sustime = time(NULL); 112 sustime = time(NULL);
88 } 113 }
89 virtual void unsuspend(FILE*& fin) 114 virtual void unsuspend(FILE*& fin)
90 { 115 {
91 if (bSuspended) 116 if (bSuspended)
92 { 117 {
93 bSuspended = false; 118 bSuspended = false;
94 int delay = time(NULL) - sustime; 119 int delay = time(NULL) - sustime;
95 if (delay < 10) sleep(10-delay); 120 if (delay < 10) sleep(10-delay);
96 fin = fopen(fname, "rb"); 121 fin = fopen(fname, "rb");
97 for (int i = 0; fin == NULL && i < 5; i++) 122 for (int i = 0; fin == NULL && i < 5; i++)
98 { 123 {
99 sleep(5); 124 sleep(5);
100 fin = fopen(fname, "rb"); 125 fin = fopen(fname, "rb");
101 } 126 }
102 if (fin == NULL) 127 if (fin == NULL)
103 { 128 {
104 QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file"); 129 QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file");
105 exit(0); 130 exit(0);
106 } 131 }
107 suspos = fseek(fin, suspos, SEEK_SET); 132 suspos = fseek(fin, suspos, SEEK_SET);
108 } 133 }
109 } 134 }
135#endif
110 virtual void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) 136 virtual void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
111 { 137 {
112 len = srclen; 138 len = srclen;
113 data = new unsigned char[len]; 139 data = new unsigned char[len];
114 memcpy(data, src, len); 140 memcpy(data, src, len);
115 } 141 }
116 virtual void putSaveData(unsigned char*& src, unsigned short& srclen) 142 virtual void putSaveData(unsigned char*& src, unsigned short& srclen)
117 { 143 {
118 if (srclen != 0) 144 if (srclen != 0)
119 { 145 {
120 qDebug("Don't know what to do with non-zero save data"); 146 qDebug("Don't know what to do with non-zero save data");
121 } 147 }
122 } 148 }
149 void setwidth(int w) { m_scrWidth = w; }
123}; 150};
124#endif 151#endif
diff --git a/noncore/apps/opie-reader/CFilter.cpp b/noncore/apps/opie-reader/CFilter.cpp
index d5e3116..73a0872 100644
--- a/noncore/apps/opie-reader/CFilter.cpp
+++ b/noncore/apps/opie-reader/CFilter.cpp
@@ -1,684 +1,742 @@
1#include "CDrawBuffer.h" 1#include "CDrawBuffer.h"
2#include "CFilter.h" 2#include "CFilter.h"
3 3
4unsigned short striphtml::skip_ws() 4unsigned short striphtml::skip_ws()
5{ 5{
6 tchar ch; 6 tchar ch;
7 CStyle sty; 7 CStyle sty;
8 do 8 do
9 { 9 {
10 parent->getch(ch, sty); 10 parent->getch(ch, sty);
11 } 11 }
12 while (ch < 33); 12 while (ch < 33);
13 return ch; 13 return ch;
14} 14}
15 15
16unsigned short striphtml::skip_ws_end() 16unsigned short striphtml::skip_ws_end()
17{ 17{
18 tchar ch; 18 tchar ch;
19 CStyle sty; 19 CStyle sty;
20 parent->getch(ch, sty); 20 parent->getch(ch, sty);
21 if (ch == ' ') 21 if (ch == ' ')
22 { 22 {
23 do 23 do
24 { 24 {
25 parent->getch(ch, sty); 25 parent->getch(ch, sty);
26 } 26 }
27 while (ch != '>'); 27 while (ch != '>');
28 } 28 }
29 return ch; 29 return ch;
30} 30}
31 31
32unsigned short striphtml::parse_m() 32unsigned short striphtml::parse_m()
33{ 33{
34 tchar ch; 34 tchar ch;
35 CStyle sty; 35 CStyle sty;
36 parent->getch(ch, sty); 36 parent->getch(ch, sty);
37 if (ch == 'm' || ch == 'M') 37 if (ch == 'm' || ch == 'M')
38 { 38 {
39 ch = skip_ws_end(); 39 ch = skip_ws_end();
40 if (ch == '>') 40 if (ch == '>')
41 { 41 {
42 return 0; 42 return 0;
43 } 43 }
44 } 44 }
45 return ch; 45 return ch;
46} 46}
47 47
48void striphtml::mygetch(tchar& ch, CStyle& sty) 48void striphtml::mygetch(tchar& ch, CStyle& sty)
49{ 49{
50 parent->getch(ch, sty); 50 parent->getch(ch, sty);
51 if (ch == 10) ch = ' '; 51 if (ch == 10) ch = ' ';
52} 52}
53 53
54void striphtml::getch(tchar& ch, CStyle& sty) 54void striphtml::getch(tchar& ch, CStyle& sty)
55{ 55{
56 CStyle dummy; 56 CStyle dummy;
57 mygetch(ch, dummy); 57 mygetch(ch, dummy);
58 if (ch == 10) ch = ' '; 58 if (ch == 10) ch = ' ';
59 while (ch == '<') 59 while (ch == '<')
60 { 60 {
61 ch = skip_ws(); 61 ch = skip_ws();
62 62
63 switch (ch) 63 switch (ch)
64 { 64 {
65 case 'p': 65 case 'p':
66 case 'P': 66 case 'P':
67 ch = skip_ws_end(); 67 ch = skip_ws_end();
68 if (ch == '>') 68 if (ch == '>')
69 { 69 {
70 ch = 10; 70 ch = 10;
71 continue; 71 continue;
72 } 72 }
73 break; 73 break;
74 case 'b': 74 case 'b':
75 case 'B': 75 case 'B':
76 ch = skip_ws_end(); 76 ch = skip_ws_end();
77 if (ch == '>') 77 if (ch == '>')
78 { 78 {
79 currentstyle.setBold(); 79 currentstyle.setBold();
80 mygetch(ch, dummy); 80 mygetch(ch, dummy);
81 continue; 81 continue;
82 } 82 }
83 else if (ch == 'r' || ch == 'R') 83 else if (ch == 'r' || ch == 'R')
84 { 84 {
85 ch = skip_ws_end(); 85 ch = skip_ws_end();
86 if (ch == '>') 86 if (ch == '>')
87 { 87 {
88 ch = 10; 88 ch = 10;
89 continue; 89 continue;
90 } 90 }
91 } 91 }
92 break; 92 break;
93 case 'i': 93 case 'i':
94 case 'I': 94 case 'I':
95 ch = skip_ws_end(); 95 ch = skip_ws_end();
96 if (ch == '>') 96 if (ch == '>')
97 { 97 {
98 currentstyle.setItalic(); 98 currentstyle.setItalic();
99 mygetch(ch, dummy); 99 mygetch(ch, dummy);
100 continue; 100 continue;
101 } 101 }
102 break; 102 break;
103 case 'e': 103 case 'e':
104 case 'E': 104 case 'E':
105 if ((ch = parse_m()) == 0) 105 if ((ch = parse_m()) == 0)
106 { 106 {
107 currentstyle.setItalic(); 107 currentstyle.setItalic();
108 mygetch(ch, dummy); 108 mygetch(ch, dummy);
109 continue; 109 continue;
110 } 110 }
111 break; 111 break;
112 case 'h': 112 case 'h':
113 case 'H': 113 case 'H':
114 mygetch(ch, dummy); 114 mygetch(ch, dummy);
115 if ('0' < ch && ch <= '9') 115 if ('0' < ch && ch <= '9')
116 { 116 {
117 tchar hs = ch; 117 tchar hs = ch;
118 ch = skip_ws_end(); 118 ch = skip_ws_end();
119 if (ch == '>') 119 if (ch == '>')
120 { 120 {
121 switch (hs) 121 switch (hs)
122 { 122 {
123 case '1': 123 case '1':
124 // currentstyle = ucBold | ucFontBase+2 | (ucAlignCentre << ucAlignShift); 124 // currentstyle = ucBold | ucFontBase+2 | (ucAlignCentre << ucAlignShift);
125 currentstyle.unset(); 125 currentstyle.unset();
126 currentstyle.setFontSize(2); 126 currentstyle.setFontSize(2);
127 currentstyle.setBold(); 127 currentstyle.setBold();
128 currentstyle.setCentreJustify(); 128 currentstyle.setCentreJustify();
129 break; 129 break;
130 case '2': 130 case '2':
131 // currentstyle = ucBold | ucFontBase+1; 131 // currentstyle = ucBold | ucFontBase+1;
132 currentstyle.unset(); 132 currentstyle.unset();
133 currentstyle.setFontSize(1); 133 currentstyle.setFontSize(1);
134 currentstyle.setBold(); 134 currentstyle.setBold();
135 break; 135 break;
136 default: 136 default:
137 // currentstyle = ucBold | ucFontBase; 137 // currentstyle = ucBold | ucFontBase;
138 currentstyle.unset(); 138 currentstyle.unset();
139 currentstyle.setBold(); 139 currentstyle.setBold();
140 } 140 }
141 ch = 10; 141 ch = 10;
142 // mygetch(ch, dummy); 142 // mygetch(ch, dummy);
143 continue; 143 continue;
144 } 144 }
145 } 145 }
146 break; 146 break;
147 case '/': 147 case '/':
148 mygetch(ch, dummy); 148 mygetch(ch, dummy);
149 switch (ch) 149 switch (ch)
150 { 150 {
151 case 'b': 151 case 'b':
152 case 'B': 152 case 'B':
153 ch = skip_ws_end(); 153 ch = skip_ws_end();
154 if (ch == '>') 154 if (ch == '>')
155 { 155 {
156 currentstyle.unsetBold(); 156 currentstyle.unsetBold();
157 mygetch(ch, dummy); 157 mygetch(ch, dummy);
158 continue; 158 continue;
159 } 159 }
160 break; 160 break;
161 case 'i': 161 case 'i':
162 case 'I': 162 case 'I':
163 ch = skip_ws_end(); 163 ch = skip_ws_end();
164 if (ch == '>') 164 if (ch == '>')
165 { 165 {
166 currentstyle.unsetItalic(); 166 currentstyle.unsetItalic();
167 mygetch(ch, dummy); 167 mygetch(ch, dummy);
168 continue; 168 continue;
169 } 169 }
170 break; 170 break;
171 case 'e': 171 case 'e':
172 case 'E': 172 case 'E':
173 if ((ch = parse_m()) == 0) 173 if ((ch = parse_m()) == 0)
174 { 174 {
175 currentstyle.unsetItalic(); 175 currentstyle.unsetItalic();
176 mygetch(ch, dummy); 176 mygetch(ch, dummy);
177 continue; 177 continue;
178 } 178 }
179 break; 179 break;
180 case 'h': 180 case 'h':
181 case 'H': 181 case 'H':
182 mygetch(ch, dummy); 182 mygetch(ch, dummy);
183 if ('0' < ch && ch <= '9') 183 if ('0' < ch && ch <= '9')
184 { 184 {
185 ch = skip_ws_end(); 185 ch = skip_ws_end();
186 if (ch == '>') 186 if (ch == '>')
187 { 187 {
188 currentstyle.unset(); 188 currentstyle.unset();
189 //mygetch(ch, dummy); 189 //mygetch(ch, dummy);
190 ch = 10; 190 ch = 10;
191 continue; 191 continue;
192 } 192 }
193 } 193 }
194 break; 194 break;
195 default: 195 default:
196 break; 196 break;
197 } 197 }
198 break; 198 break;
199 default: 199 default:
200 break; 200 break;
201 } 201 }
202 while (ch != '>' && ch != UEOF) 202 while (ch != '>' && ch != UEOF)
203 { 203 {
204 mygetch(ch, dummy); 204 mygetch(ch, dummy);
205 } 205 }
206 mygetch(ch, dummy); 206 mygetch(ch, dummy);
207 } 207 }
208 if (ch == '&') 208 if (ch == '&')
209 { 209 {
210 mygetch(ch, dummy); 210 mygetch(ch, dummy);
211 if (ch == '#') 211 if (ch == '#')
212 { 212 {
213 int id = 0; 213 int id = 0;
214 mygetch(ch, dummy); 214 mygetch(ch, dummy);
215 while (ch != ';' && ch != UEOF) 215 while (ch != ';' && ch != UEOF)
216 { 216 {
217 id = 10*id+ch-'0'; 217 id = 10*id+ch-'0';
218 mygetch(ch, dummy); 218 mygetch(ch, dummy);
219 } 219 }
220 ch = id; 220 ch = id;
221 } 221 }
222 } 222 }
223// sty = (dummy == ucFontBase) ? currentstyle : dummy; 223// sty = (dummy == ucFontBase) ? currentstyle : dummy;
224 sty = currentstyle; 224 sty = currentstyle;
225 return; 225 return;
226} 226}
227 227
228 228
229void textfmt::mygetch(tchar& ch, CStyle& sty) 229void textfmt::mygetch(tchar& ch, CStyle& sty)
230{ 230{
231 if (uselast) 231 if (uselast)
232 { 232 {
233 ch = lastchar; 233 ch = lastchar;
234 uselast = false; 234 uselast = false;
235 } 235 }
236 else 236 else
237 { 237 {
238 parent->getch(ch, sty); 238 parent->getch(ch, sty);
239 } 239 }
240} 240}
241 241
242void textfmt::getch(tchar& ch, CStyle& sty) 242void textfmt::getch(tchar& ch, CStyle& sty)
243{ 243{
244 mygetch(ch, sty); 244 mygetch(ch, sty);
245 do 245 do
246 { 246 {
247 sty = currentstyle; 247 sty = currentstyle;
248 switch (ch) 248 switch (ch)
249 { 249 {
250 case 10: 250 case 10:
251 currentstyle.unset(); 251 currentstyle.unset();
252 sty = currentstyle; 252 sty = currentstyle;
253 break; 253 break;
254// Use this if you want to replace -- by em-dash 254// Use this if you want to replace -- by em-dash
255 case '-': 255 case '-':
256 // parent->getch(ch, sty); 256 // parent->getch(ch, sty);
257 mygetch(ch, sty); 257 mygetch(ch, sty);
258 if (ch == '-') 258 if (ch == '-')
259 { 259 {
260 ch = 0x2014; 260 ch = 0x2014;
261 } 261 }
262 else 262 else
263 { 263 {
264 lastchar = ch; 264 lastchar = ch;
265 uselast = true; 265 uselast = true;
266 ch = '-'; 266 ch = '-';
267 } 267 }
268 break; 268 break;
269 case '*': 269 case '*':
270 if (currentstyle.isBold()) 270 if (currentstyle.isBold())
271 { 271 {
272// Already bold - time to turn it off? 272// Already bold - time to turn it off?
273// The next two lines ensure that * follows a character but it works better without 273// The next two lines ensure that * follows a character but it works better without
274 // QChar c(lastchar); 274 // QChar c(lastchar);
275 // if ((lastchar != '*') && (c.isPunct() || c.isLetterOrNumber())) 275 // if ((lastchar != '*') && (c.isPunct() || c.isLetterOrNumber()))
276 if (lastchar != '*') 276 if (lastchar != '*')
277 { 277 {
278 currentstyle.unsetBold(); 278 currentstyle.unsetBold();
279 CStyle dummy; 279 CStyle dummy;
280 // parent->getch(ch, dummy); 280 // parent->getch(ch, dummy);
281 mygetch(ch, dummy); 281 mygetch(ch, dummy);
282 } 282 }
283 } 283 }
284 else 284 else
285 { 285 {
286// not bold - time to turn it on? 286// not bold - time to turn it on?
287 CStyle dummy; 287 CStyle dummy;
288 // parent->getch(ch, dummy); 288 // parent->getch(ch, dummy);
289 mygetch(ch, dummy); 289 mygetch(ch, dummy);
290 QChar c(ch); 290 QChar c(ch);
291 if ((ch != '*') && (c.isPunct() || c.isLetterOrNumber())) 291 if ((ch != '*') && (c.isPunct() || c.isLetterOrNumber()))
292 { 292 {
293 currentstyle.setBold(); 293 currentstyle.setBold();
294 } 294 }
295 else 295 else
296 { 296 {
297 lastchar = ch; 297 lastchar = ch;
298 uselast = true; 298 uselast = true;
299 ch = '*'; 299 ch = '*';
300 } 300 }
301 301
302 } 302 }
303 break; 303 break;
304 case '_': 304 case '_':
305 if (currentstyle.isItalic()) 305 if (currentstyle.isItalic())
306 { 306 {
307// Already bold - time to turn it off? 307// Already bold - time to turn it off?
308// The next two lines ensure that * follows a character but it works better without 308// The next two lines ensure that * follows a character but it works better without
309 // QChar c(lastchar); 309 // QChar c(lastchar);
310 // if ((lastchar != '_') && (c.isPunct() || c.isLetterOrNumber())) 310 // if ((lastchar != '_') && (c.isPunct() || c.isLetterOrNumber()))
311 if (lastchar != '_') 311 if (lastchar != '_')
312 { 312 {
313 currentstyle.unsetItalic(); 313 currentstyle.unsetItalic();
314 CStyle dummy; 314 CStyle dummy;
315 // parent->getch(ch, dummy); 315 // parent->getch(ch, dummy);
316 mygetch(ch, dummy); 316 mygetch(ch, dummy);
317 } 317 }
318 } 318 }
319 else 319 else
320 { 320 {
321// not bold - time to turn it on? 321// not bold - time to turn it on?
322 CStyle dummy; 322 CStyle dummy;
323 // parent->getch(ch, dummy); 323 // parent->getch(ch, dummy);
324 mygetch(ch, dummy); 324 mygetch(ch, dummy);
325 QChar c(ch); 325 QChar c(ch);
326 if ((ch != '_') && (c.isPunct() || c.isLetterOrNumber())) 326 if ((ch != '_') && (c.isPunct() || c.isLetterOrNumber()))
327 { 327 {
328 currentstyle.setItalic(); 328 currentstyle.setItalic();
329 } 329 }
330 else 330 else
331 { 331 {
332 lastchar = ch; 332 lastchar = ch;
333 uselast = true; 333 uselast = true;
334 ch = '_'; 334 ch = '_';
335 } 335 }
336 336
337 } 337 }
338 break; 338 break;
339 } 339 }
340 } 340 }
341 while (sty != currentstyle); 341 while (sty != currentstyle);
342 if (!uselast) lastchar = ch; 342 if (!uselast) lastchar = ch;
343 return; 343 return;
344} 344}
345 345
346void remap::getch(tchar& ch, CStyle& sty) 346void remap::getch(tchar& ch, CStyle& sty)
347{ 347{
348 if (q[offset] != 0) 348 if (q[offset] != 0)
349 { 349 {
350 q[offset++]; 350 q[offset++];
351 sty = currentstyle; 351 sty = currentstyle;
352 return; 352 return;
353 } 353 }
354 parent->getch(ch, sty); 354 parent->getch(ch, sty);
355 switch (ch) 355 switch (ch)
356 { 356 {
357 case 0x201a: 357 case 0x201a:
358 ch = '\''; 358 ch = '\'';
359 break; 359 break;
360 case 0x0192: 360 case 0x0192:
361 ch = 'f'; 361 ch = 'f';
362 break; 362 break;
363 case 0x201e: 363 case 0x201e:
364 ch = '"'; 364 ch = '"';
365 break; 365 break;
366 case 0x2026: 366 case 0x2026:
367 offset = 0; 367 offset = 0;
368 q[0] = '.'; 368 q[0] = '.';
369 q[1] = '.'; 369 q[1] = '.';
370 q[2] = 0; 370 q[2] = 0;
371 ch = '.'; // should be ... 371 ch = '.'; // should be ...
372 break; 372 break;
373 case 0x0160: 373 case 0x0160:
374 ch = 'S'; 374 ch = 'S';
375 break; 375 break;
376 case 0x2039: 376 case 0x2039:
377 ch = '<'; 377 ch = '<';
378 break; 378 break;
379 case 0x0152: 379 case 0x0152:
380 offset = 0; 380 offset = 0;
381 q[0] = 'E'; 381 q[0] = 'E';
382 q[1] = 0; 382 q[1] = 0;
383 ch = 'O'; 383 ch = 'O';
384 break; 384 break;
385 case 0x017d: 385 case 0x017d:
386 ch = 'Z'; 386 ch = 'Z';
387 break; 387 break;
388 case 0x2018: 388 case 0x2018:
389 ch = '\''; 389 ch = '\'';
390 break; 390 break;
391 case 0x2019: 391 case 0x2019:
392 ch = '\''; 392 ch = '\'';
393 break; 393 break;
394 case 0x201c: 394 case 0x201c:
395 ch = '"'; 395 ch = '"';
396 break; 396 break;
397 case 0x201d: 397 case 0x201d:
398 ch = '"'; 398 ch = '"';
399 break; 399 break;
400 case 0x2022: 400 case 0x2022:
401 ch = '>'; 401 ch = '>';
402 break; 402 break;
403 case 0x2013: 403 case 0x2013:
404 ch = '-'; 404 ch = '-';
405 break; 405 break;
406 case 0x2014: 406 case 0x2014:
407 offset = 0; 407 offset = 0;
408 q[0] = '-'; 408 q[0] = '-';
409 q[1] = 0; 409 q[1] = 0;
410 ch = '-'; // should be -- 410 ch = '-'; // should be --
411 break; 411 break;
412 case 0x02dc: 412 case 0x02dc:
413 ch = '~'; 413 ch = '~';
414 break; 414 break;
415 case 0x0161: 415 case 0x0161:
416 ch = 's'; 416 ch = 's';
417 break; 417 break;
418 case 0x203a: 418 case 0x203a:
419 ch = '>'; 419 ch = '>';
420 break; 420 break;
421 case 0x0153: 421 case 0x0153:
422 offset = 0; 422 offset = 0;
423 q[0] = 'e'; 423 q[0] = 'e';
424 q[1] = 0; 424 q[1] = 0;
425 ch = 'o';// should be oe 425 ch = 'o';// should be oe
426 break; 426 break;
427 case 0x017e: 427 case 0x017e:
428 ch = 'z'; 428 ch = 'z';
429 break; 429 break;
430 case 0x0178: 430 case 0x0178:
431 ch = 'Y'; 431 ch = 'Y';
432 break; 432 break;
433 } 433 }
434 currentstyle = sty; 434 currentstyle = sty;
435} 435}
436 436
437void PeanutFormatter::getch(tchar& ch, CStyle& sty) 437void PeanutFormatter::getch(tchar& ch, CStyle& sty)
438{ 438{
439 CStyle dummy; 439 CStyle dummy;
440 currentstyle.setColour(0,0,0); 440 currentstyle.setColour(0,0,0);
441 parent->getch(ch, dummy); 441 parent->getch(ch, dummy);
442 while (ch == '\\') 442 while (ch == '\\')
443 { 443 {
444 parent->getch(ch, dummy); 444 parent->getch(ch, dummy);
445 if (ch == '\\') break; 445 if (ch == '\\') break;
446 switch(ch) 446 switch(ch)
447 { 447 {
448 case 'a': 448 case 'a':
449 { 449 {
450 int code = 0; 450 int code = 0;
451 for (int i = 0; i < 3; i++) 451 for (int i = 0; i < 3; i++)
452 { 452 {
453 parent->getch(ch, dummy); 453 parent->getch(ch, dummy);
454 code = 10*code + ch - '0'; 454 code = 10*code + ch - '0';
455 } 455 }
456 ch = code; 456 ch = code;
457 } 457 }
458 break; 458 break;
459 case 'v': 459 case 'v':
460 { 460 {
461 while (1) 461 while (1)
462 { 462 {
463 parent->getch(ch, dummy); 463 parent->getch(ch, dummy);
464 if (ch == '\\') 464 if (ch == '\\')
465 { 465 {
466 parent->getch(ch, dummy); 466 parent->getch(ch, dummy);
467 if (ch == 'v') 467 if (ch == 'v')
468 { 468 {
469 parent->getch(ch, dummy); 469 parent->getch(ch, dummy);
470 break; 470 break;
471 } 471 }
472 } 472 }
473 } 473 }
474 } 474 }
475 break; 475 break;
476 case 's': 476 case 's':
477 case 'n': 477 case 'n':
478 currentstyle.setFontSize(0); 478 currentstyle.setFontSize(0);
479 parent->getch(ch,dummy); 479 parent->getch(ch,dummy);
480 break; 480 break;
481 case 'p': 481 case 'p':
482 currentstyle.unset(); 482 currentstyle.unset();
483 // parent->getch(ch,dummy); 483 // parent->getch(ch,dummy);
484 ch = 10; 484 ch = 10;
485 break; 485 break;
486 case 'l': 486 case 'l':
487 if (currentstyle.getFontSize() == 1) 487 if (currentstyle.getFontSize() == 1)
488 { 488 {
489 currentstyle.setFontSize(0); 489 currentstyle.setFontSize(0);
490 } 490 }
491 else 491 else
492 { 492 {
493 currentstyle.setFontSize(1); 493 currentstyle.setFontSize(1);
494 } 494 }
495 parent->getch(ch, dummy); 495 parent->getch(ch, dummy);
496 break; 496 break;
497 case 'x': 497 case 'x':
498 if (currentstyle.getFontSize() == 0) 498 if (currentstyle.getFontSize() == 0)
499 { 499 {
500 // currentstyle.unset(); 500 // currentstyle.unset();
501 // currentstyle.setBold(); 501 // currentstyle.setBold();
502 currentstyle.setFontSize(1); 502 currentstyle.setFontSize(1);
503 } 503 }
504 else 504 else
505 { 505 {
506 currentstyle.unset(); 506 currentstyle.unset();
507 } 507 }
508 // parent->getch(ch, dummy); 508 // parent->getch(ch, dummy);
509 ch = 10; 509 ch = 10;
510 break; 510 break;
511 case 'i': 511 case 'i':
512 if (currentstyle.isItalic()) 512 if (currentstyle.isItalic())
513 { 513 {
514 currentstyle.unsetItalic(); 514 currentstyle.unsetItalic();
515 } 515 }
516 else 516 else
517 { 517 {
518 currentstyle.setItalic(); 518 currentstyle.setItalic();
519 } 519 }
520 parent->getch(ch, dummy); 520 parent->getch(ch, dummy);
521 break; 521 break;
522 case 'b': 522 case 'b':
523 case 'B': 523 case 'B':
524 if (currentstyle.isBold()) 524 if (currentstyle.isBold())
525 { 525 {
526 currentstyle.unsetBold(); 526 currentstyle.unsetBold();
527 } 527 }
528 else 528 else
529 { 529 {
530 currentstyle.setBold(); 530 currentstyle.setBold();
531 } 531 }
532 parent->getch(ch, dummy); 532 parent->getch(ch, dummy);
533 break; 533 break;
534 case 'c': 534 case 'c':
535 if (currentstyle.getJustify() == m_AlignCentre) 535 if (currentstyle.getJustify() == m_AlignCentre)
536 { 536 {
537 currentstyle.setLeftJustify(); 537 currentstyle.setLeftJustify();
538 } 538 }
539 else 539 else
540 { 540 {
541 currentstyle.setCentreJustify(); 541 currentstyle.setCentreJustify();
542 } 542 }
543 parent->getch(ch, dummy); 543 parent->getch(ch, dummy);
544 break; 544 break;
545 case 'r': 545 case 'r':
546 if (currentstyle.getJustify() == m_AlignRight) 546 if (currentstyle.getJustify() == m_AlignRight)
547 { 547 {
548 currentstyle.setLeftJustify(); 548 currentstyle.setLeftJustify();
549 } 549 }
550 else 550 else
551 { 551 {
552 currentstyle.setRightJustify(); 552 currentstyle.setRightJustify();
553 } 553 }
554 parent->getch(ch, dummy); 554 parent->getch(ch, dummy);
555 break; 555 break;
556 default: 556 default:
557 currentstyle.setColour(255,0,0); 557 currentstyle.setColour(255,0,0);
558 } 558 }
559 } 559 }
560 sty = currentstyle; 560 sty = currentstyle;
561} 561}
562 562
563void OnePara::getch(tchar& ch, CStyle& sty) 563void OnePara::getch(tchar& ch, CStyle& sty)
564{ 564{
565 parent->getch(ch, sty); 565 parent->getch(ch, sty);
566 if (m_lastchar == 10) 566 if (m_lastchar == 10)
567 { 567 {
568 while (ch == 10) parent->getch(ch, sty); 568 while (ch == 10) parent->getch(ch, sty);
569 } 569 }
570 m_lastchar = ch; 570 m_lastchar = ch;
571} 571}
572 572
573#ifdef REPALM 573#ifdef REPALM
574void repalm::getch(tchar& ch, CStyle& sty) 574void repalm::getch(tchar& ch, CStyle& sty)
575{ 575{
576 parent->getch(ch, sty); 576 parent->getch(ch, sty);
577 switch (ch) 577 switch (ch)
578 { 578 {
579 case 0x80: 579 case 0x80:
580 ch = 0x20ac; 580 ch = 0x20ac;
581 break; 581 break;
582 case 0x82: 582 case 0x82:
583 ch = 0x201a; 583 ch = 0x201a;
584 break; 584 break;
585 case 0x83: 585 case 0x83:
586 ch = 0x0192; 586 ch = 0x0192;
587 break; 587 break;
588 case 0x84: 588 case 0x84:
589 ch = 0x201e; 589 ch = 0x201e;
590 break; 590 break;
591 case 0x85: 591 case 0x85:
592 ch = 0x2026; 592 ch = 0x2026;
593 break; 593 break;
594 case 0x86: 594 case 0x86:
595 ch = 0x2020; 595 ch = 0x2020;
596 break; 596 break;
597 case 0x87: 597 case 0x87:
598 ch = 0x2021; 598 ch = 0x2021;
599 break; 599 break;
600 case 0x88: 600 case 0x88:
601 ch = 0x02c6; 601 ch = 0x02c6;
602 break; 602 break;
603 case 0x89: 603 case 0x89:
604 ch = 0x2030; 604 ch = 0x2030;
605 break; 605 break;
606 case 0x8a: 606 case 0x8a:
607 ch = 0x0160; 607 ch = 0x0160;
608 break; 608 break;
609 case 0x8b: 609 case 0x8b:
610 ch = 0x2039; 610 ch = 0x2039;
611 break; 611 break;
612 case 0x8c: 612 case 0x8c:
613 ch = 0x0152; 613 ch = 0x0152;
614 break; 614 break;
615/* 615/*
616 case 0x8e: 616 case 0x8e:
617 ch = 0x017d; 617 ch = 0x017d;
618 break; 618 break;
619*/ 619*/
620 case 0x91: 620 case 0x91:
621 ch = 0x2018; 621 ch = 0x2018;
622 break; 622 break;
623 case 0x92: 623 case 0x92:
624 ch = 0x2019; 624 ch = 0x2019;
625 break; 625 break;
626 case 0x93: 626 case 0x93:
627 ch = 0x201c; 627 ch = 0x201c;
628 break; 628 break;
629 case 0x94: 629 case 0x94:
630 ch = 0x201d; 630 ch = 0x201d;
631 break; 631 break;
632 case 0x95: 632 case 0x95:
633 ch = 0x2022; 633 ch = 0x2022;
634 break; 634 break;
635 case 0x96: 635 case 0x96:
636 ch = 0x2013; 636 ch = 0x2013;
637 break; 637 break;
638 case 0x97: 638 case 0x97:
639 ch = 0x2014; 639 ch = 0x2014;
640 break; 640 break;
641 case 0x98: 641 case 0x98:
642 ch = 0x02dc; 642 ch = 0x02dc;
643 break; 643 break;
644 case 0x99: 644 case 0x99:
645 ch = 0x2122; 645 ch = 0x2122;
646 break; 646 break;
647 case 0x9a: 647 case 0x9a:
648 ch = 0x0161; 648 ch = 0x0161;
649 break; 649 break;
650 case 0x9b: 650 case 0x9b:
651 ch = 0x203a; 651 ch = 0x203a;
652 break; 652 break;
653 case 0x9c: 653 case 0x9c:
654 ch = 0x0153; 654 ch = 0x0153;
655 break; 655 break;
656 case 0x9e: 656 case 0x9e:
657 ch = 0x017e; 657 ch = 0x017e;
658 break; 658 break;
659 case 0x9f: 659 case 0x9f:
660 ch = 0x0178; 660 ch = 0x0178;
661 break; 661 break;
662 case 0x18: 662 case 0x18:
663 ch = 0x2026; 663 ch = 0x2026;
664 break; 664 break;
665 case 0x19: 665 case 0x19:
666 ch = 0x2007; 666 ch = 0x2007;
667 break; 667 break;
668 case 0x8d: 668 case 0x8d:
669 ch = 0x2662; 669 ch = 0x2662;
670 break; 670 break;
671 case 0x8e: 671 case 0x8e:
672 ch = 0x2663; 672 ch = 0x2663;
673 break; 673 break;
674 case 0x8f: 674 case 0x8f:
675 ch = 0x2661; 675 ch = 0x2661;
676 break; 676 break;
677 case 0x90: 677 case 0x90:
678 ch = 0x2660; 678 ch = 0x2660;
679 break; 679 break;
680 default: 680 default:
681 break; 681 break;
682 } 682 }
683} 683}
684#endif 684#endif
685
686//static tchar nextpart[] = { 'C','l','i','c','k',' ','h','e','r','e',' ','f','o','r',' ','t','h','e',' ','n','e','x','t',' ','p','a','r','t',0 };
687//static tchar prevpart[] = { 'C','l','i','c','k',' ','h','e','r','e',' ','f','o','r',' ','t','h','e',' ','p','r','e','v','i','o','u','s',' ','p','a','r','t',0 };
688
689void DePluck::getch(tchar& ch, CStyle& sty)
690{
691 if (m_buffed > 0)
692 {
693 sty = m_laststyle;
694 ch = nextpart[m_current++];
695 if (m_current == m_buffed)
696 {
697 m_current = m_buffed = 0;
698 }
699 }
700 else
701 {
702 if (m_buffer != 0)
703 {
704 ch = m_buffer;
705 m_buffer = 0;
706 return;
707 }
708 unsigned long lnk;
709 do
710 {
711 if (nextpart[m_buffed] == 0) break;
712 parent->getch(ch, sty);
713 m_laststyle = sty;
714 if (sty.getLink()) lnk = sty.getData();
715 } while (ch == nextpart[m_buffed] && sty.getLink() && ++m_buffed);
716 m_current = 0;
717 if (nextpart[m_buffed] == 0)
718 {
719 m_buffed = 0;
720 QString dmy;
721 parent->hyperlink(lnk, dmy);
722 do
723 {
724 parent->getch(ch, sty);
725 }
726 while (ch != 10);
727 parent->getch(ch, sty);
728 }
729 else if (m_buffed > 0)
730 {
731 m_buffer = ch;
732 ch = nextpart[0];
733 if (m_buffed == 1)
734 {
735 m_buffed = 0;
736 }
737 else m_current = 1;
738 }
739 }
740
741 return;
742}
diff --git a/noncore/apps/opie-reader/CFilter.h b/noncore/apps/opie-reader/CFilter.h
index 2d0c30f..0a03b3e 100644
--- a/noncore/apps/opie-reader/CFilter.h
+++ b/noncore/apps/opie-reader/CFilter.h
@@ -1,287 +1,328 @@
1#ifndef __CFILTER_H 1#ifndef __CFILTER_H
2#define __CFILTER_H 2#define __CFILTER_H
3 3
4#include "CExpander.h" 4#include "CExpander.h"
5#include "CEncoding.h" 5#include "CEncoding.h"
6 6
7class CFilter : public CCharacterSource 7class CFilter : public CCharacterSource
8{ 8{
9 friend class CFilterChain; 9 friend class CFilterChain;
10 protected: 10 protected:
11 CCharacterSource* parent; 11 CCharacterSource* parent;
12 linkType hyperlink(unsigned int n, QString& w)
13 {
14 return parent->hyperlink(n,w);
15 }
12 public: 16 public:
13 CFilter() : parent(NULL) {} 17 CFilter() : parent(NULL) {}
14 void setparent(CCharacterSource* p) { parent = p; } 18 void setparent(CCharacterSource* p) { parent = p; }
15 virtual ~CFilter() {}; 19 virtual ~CFilter() {};
16}; 20};
17 21
18class CFilterChain 22class CFilterChain
19{ 23{
20 CExpander* expander; 24 CExpander* expander;
21 CEncoding* encoder; 25 CEncoding* encoder;
22 CFilter* first; 26 CFilter* first;
23 CCharacterSource* front; 27 CCharacterSource* front;
24 public: 28 public:
25 CFilterChain(CEncoding* _e) : encoder(_e), first(NULL), front(_e) {}; 29 CFilterChain(CEncoding* _e) : encoder(_e), first(NULL), front(_e) {};
26 ~CFilterChain() 30 ~CFilterChain()
27 { 31 {
28 CCharacterSource* p = front; 32 CCharacterSource* p = front;
29 while (p != encoder) 33 while (p != encoder)
30 { 34 {
31 CFilter* pnext = (CFilter*)p; 35 CFilter* pnext = (CFilter*)p;
32 p = ((CFilter*)p)->parent; 36 p = ((CFilter*)p)->parent;
33 delete pnext; 37 delete pnext;
34 } 38 }
35 delete encoder; 39 delete encoder;
36 } 40 }
37 void getch(tchar& ch, CStyle& sty) 41 void getch(tchar& ch, CStyle& sty)
38 { 42 {
39 front->getch(ch, sty); 43 front->getch(ch, sty);
40 } 44 }
41 void addfilter(CFilter* p) 45 void addfilter(CFilter* p)
42 { 46 {
43 if (first == NULL) 47 if (first == NULL)
44 { 48 {
45 front = first = p; 49 front = first = p;
46 p->setparent(encoder); 50 p->setparent(encoder);
47 } 51 }
48 else 52 else
49 { 53 {
50 p->setparent(front); 54 p->setparent(front);
51 front = p; 55 front = p;
52 } 56 }
53 } 57 }
54 void setsource(CExpander* p) 58 void setsource(CExpander* p)
55 { 59 {
56 expander = p; 60 expander = p;
57 encoder->setparent(p); 61 encoder->setparent(p);
58 } 62 }
59 void setencoder(CEncoding* p) 63 void setencoder(CEncoding* p)
60 { 64 {
61 delete encoder; 65 delete encoder;
62 encoder = p; 66 encoder = p;
63 first->setparent(p); 67 first->setparent(p);
64 encoder->setparent(expander); 68 encoder->setparent(expander);
65 } 69 }
66}; 70};
67 71
68class stripcr : public CFilter 72class stripcr : public CFilter
69{ 73{
70 public: 74 public:
71 stripcr() {} 75 stripcr() {}
72 virtual ~stripcr() {} 76 ~stripcr() {}
73 virtual void getch(tchar& ch, CStyle& sty) 77 void getch(tchar& ch, CStyle& sty)
74 { 78 {
75 do 79 do
76 { 80 {
77 parent->getch(ch, sty); 81 parent->getch(ch, sty);
78 } 82 }
79 while (ch == 13); 83 while (ch == 13);
80 } 84 }
81}; 85};
82 86
83class dehyphen : public CFilter 87class dehyphen : public CFilter
84{ 88{
85 bool m_bCharWaiting; 89 bool m_bCharWaiting;
86 tchar m_nextChar; 90 tchar m_nextChar;
87 CStyle m_nextSty; 91 CStyle m_nextSty;
88 public: 92 public:
89 dehyphen() : m_bCharWaiting(false) {} 93 dehyphen() : m_bCharWaiting(false) {}
90 virtual ~dehyphen() {} 94 ~dehyphen() {}
91 virtual void getch(tchar& ch, CStyle& sty) 95 void getch(tchar& ch, CStyle& sty)
92 { 96 {
93 if (m_bCharWaiting) 97 if (m_bCharWaiting)
94 { 98 {
95 m_bCharWaiting = false; 99 m_bCharWaiting = false;
96 ch = m_nextChar; 100 ch = m_nextChar;
97 sty = m_nextSty; 101 sty = m_nextSty;
98 return; 102 return;
99 } 103 }
100 parent->getch(ch, sty); 104 parent->getch(ch, sty);
101 if (ch != '-') return; 105 if (ch != '-') return;
102 parent->getch(m_nextChar, m_nextSty); 106 parent->getch(m_nextChar, m_nextSty);
103 if (m_nextChar != 10) 107 if (m_nextChar != 10)
104 { 108 {
105 m_bCharWaiting = true; 109 m_bCharWaiting = true;
106 ch = '-'; 110 ch = '-';
107 return; 111 return;
108 } 112 }
109 parent->getch(ch, sty); 113 parent->getch(ch, sty);
110 } 114 }
111}; 115};
112 116
113class striphtml : public CFilter 117class striphtml : public CFilter
114{ 118{
115 CStyle currentstyle; 119 CStyle currentstyle;
116 unsigned short skip_ws(); 120 unsigned short skip_ws();
117 unsigned short skip_ws_end(); 121 unsigned short skip_ws_end();
118 unsigned short parse_m(); 122 unsigned short parse_m();
119 void mygetch(tchar& ch, CStyle& sty); 123 void mygetch(tchar& ch, CStyle& sty);
120 public: 124 public:
121 striphtml() {} 125 striphtml() {}
122 virtual ~striphtml() {} 126 ~striphtml() {}
123 virtual void getch(tchar& ch, CStyle& sty); 127 void getch(tchar& ch, CStyle& sty);
124}; 128};
125 129
126class unindent : public CFilter 130class unindent : public CFilter
127{ 131{
128 tchar lc; 132 tchar lc;
129 public: 133 public:
130 unindent() : lc(0) {} 134 unindent() : lc(0) {}
131 virtual ~unindent() {} 135 ~unindent() {}
132 virtual void getch(tchar& ch, CStyle& sty) 136 void getch(tchar& ch, CStyle& sty)
133 { 137 {
134 if (lc == 10) 138 if (lc == 10)
135 { 139 {
136 do 140 do
137 { 141 {
138 parent->getch(ch, sty); 142 parent->getch(ch, sty);
139 } 143 }
140 while (ch == ' '); 144 while (ch == ' ');
141 } 145 }
142 else parent->getch(ch, sty); 146 else parent->getch(ch, sty);
143 lc = ch; 147 lc = ch;
144 return; 148 return;
145 } 149 }
146}; 150};
147 151
148class repara : public CFilter 152class repara : public CFilter
149{ 153{
150 tchar tch; 154 tchar tch;
151 public: 155 public:
152 repara() : tch(0) {} 156 repara() : tch(0) {}
153 virtual ~repara() {} 157 ~repara() {}
154 virtual void getch(tchar& ch, CStyle& sty) 158 void getch(tchar& ch, CStyle& sty)
155 { 159 {
156 parent->getch(ch, sty); 160 parent->getch(ch, sty);
157 if (ch == 10) 161 if (ch == 10)
158 { 162 {
159 if (tch == 10) 163 if (tch == 10)
160 { 164 {
161 return; 165 return;
162 } 166 }
163 else 167 else
164 { 168 {
165 tch = ch; 169 tch = ch;
166 ch = ' '; 170 ch = ' ';
167 return; 171 return;
168 } 172 }
169 } 173 }
170 tch = ch; 174 tch = ch;
171 return; 175 return;
172 } 176 }
173}; 177};
174 178
175class indenter : public CFilter 179class indenter : public CFilter
176{ 180{
177 int amnt; 181 int amnt;
178 int indent; 182 int indent;
179 CStyle lsty; 183 CStyle lsty;
180 public: 184 public:
181 indenter(int _a=5) : amnt(_a), indent(0) {} 185 indenter(int _a=5) : amnt(_a), indent(0) {}
182 virtual ~indenter() {} 186 ~indenter() {}
183 virtual void getch(tchar& ch, CStyle& sty) 187 void getch(tchar& ch, CStyle& sty)
184 { 188 {
185 if (indent > 0) 189 if (indent > 0)
186 { 190 {
187 indent--; 191 indent--;
188 ch = ' '; 192 ch = ' ';
189 sty = lsty; 193 sty = lsty;
190 return; 194 return;
191 } 195 }
192 parent->getch(ch, sty); 196 parent->getch(ch, sty);
193 if (ch == 10) 197 if (ch == 10)
194 { 198 {
195 indent = amnt; 199 indent = amnt;
196 lsty = sty; 200 lsty = sty;
197 } 201 }
198 return; 202 return;
199 } 203 }
200}; 204};
201 205
202class dblspce : public CFilter 206class dblspce : public CFilter
203{ 207{
204 bool lastlf; 208 bool lastlf;
205 CStyle lsty; 209 CStyle lsty;
206 public: 210 public:
207 dblspce() : lastlf(false) {} 211 dblspce() : lastlf(false) {}
208 virtual ~dblspce() {} 212 ~dblspce() {}
209 virtual void getch(tchar& ch, CStyle& sty) 213 void getch(tchar& ch, CStyle& sty)
210 { 214 {
211 if (lastlf) 215 if (lastlf)
212 { 216 {
213 lastlf = false; 217 lastlf = false;
214 ch = 10; 218 ch = 10;
215 sty = lsty; 219 sty = lsty;
216 return; 220 return;
217 } 221 }
218 parent->getch(ch, sty); 222 parent->getch(ch, sty);
219 if (lastlf = (ch == 10)) 223 if (lastlf = (ch == 10))
220 { 224 {
221 lsty = sty; 225 lsty = sty;
222 } 226 }
223 return; 227 return;
224 } 228 }
225}; 229};
226 230
227class textfmt : public CFilter 231class textfmt : public CFilter
228{ 232{
229 CStyle currentstyle; 233 CStyle currentstyle;
230 tchar lastchar; 234 tchar lastchar;
231 bool uselast; 235 bool uselast;
232 void mygetch(tchar&, CStyle&); 236 void mygetch(tchar&, CStyle&);
233 public: 237 public:
234 textfmt() : lastchar(0), uselast(false) {} 238 textfmt() : lastchar(0), uselast(false) {}
235 virtual ~textfmt() {} 239 ~textfmt() {}
236 virtual void getch(tchar& ch, CStyle& sty); 240 void getch(tchar& ch, CStyle& sty);
237}; 241};
238 242
239class embolden : public CFilter 243class embolden : public CFilter
240{ 244{
241 public: 245 public:
242 embolden() {} 246 embolden() {}
243 virtual ~embolden() {} 247 ~embolden() {}
244 virtual void getch(tchar& ch, CStyle& sty) 248 void getch(tchar& ch, CStyle& sty)
245 { 249 {
246 parent->getch(ch, sty); 250 parent->getch(ch, sty);
247 sty.setBold(); 251 sty.setBold();
248 } 252 }
249}; 253};
250 254
251class remap : public CFilter 255class remap : public CFilter
252{ 256{
253 tchar q[3]; 257 tchar q[3];
254 int offset; 258 int offset;
255 CStyle currentstyle; 259 CStyle currentstyle;
256 public: 260 public:
257 remap() : offset(0) { q[0] = 0; } 261 remap() : offset(0) { q[0] = 0; }
258 virtual ~remap() {} 262 ~remap() {}
259 virtual void getch(tchar& ch, CStyle& sty); 263 void getch(tchar& ch, CStyle& sty);
260}; 264};
261 265
262class PeanutFormatter : public CFilter 266class PeanutFormatter : public CFilter
263{ 267{
264 CStyle currentstyle; 268 CStyle currentstyle;
265 public: 269 public:
266 virtual ~PeanutFormatter() {} 270 ~PeanutFormatter() {}
267 virtual void getch(tchar& ch, CStyle& sty); 271 void getch(tchar& ch, CStyle& sty);
268}; 272};
269 273
270class OnePara : public CFilter 274class OnePara : public CFilter
271{ 275{
272 tchar m_lastchar; 276 tchar m_lastchar;
273 public: 277 public:
274 OnePara() : m_lastchar(0) {} 278 OnePara() : m_lastchar(0) {}
275 virtual ~OnePara() {} 279 ~OnePara() {}
276 virtual void getch(tchar& ch, CStyle& sty); 280 void getch(tchar& ch, CStyle& sty);
281};
282
283class DePluck : public CFilter
284{
285 tchar* nextpart;
286 tchar m_buffer;
287 int m_buffed;
288 int m_current;
289 bool m_debuff;
290 CStyle m_laststyle;
291 public:
292 DePluck(tchar* t) : nextpart(t), m_buffer(0), m_buffed(0), m_current(0), m_debuff(false) {}
293 ~DePluck() {}
294 void getch(tchar& ch, CStyle& sty);
277}; 295};
278 296
279#ifdef REPALM 297#ifdef REPALM
280class repalm : public CFilter 298class repalm : public CFilter
281{ 299{
282 public: 300 public:
283 virtual ~repalm() {} 301 ~repalm() {}
284 virtual void getch(tchar& ch, CStyle& sty); 302 void getch(tchar& ch, CStyle& sty);
285}; 303};
286#endif 304#endif
305
306class FullJust : public CFilter
307{
308 public:
309 void getch(tchar& ch, CStyle& sty)
310 {
311 parent->getch(ch, sty);
312 if (sty.getJustify() == m_AlignLeft) sty.setFullJustify();
313 }
314};
315/*
316class AddSpace : public CFilter
317{
318 unsigned char m_espc;
319 public:
320 AddSpace(unsigned char s) : m_espc(s) {}
321 void getch(tchar& ch, CStyle& sty)
322 {
323 parent->getch(ch, sty);
324 sty.setExtraSpace(m_espc);
325 }
326};
327*/
287#endif 328#endif
diff --git a/noncore/apps/opie-reader/Filedata.h b/noncore/apps/opie-reader/Filedata.h
index f920238..096dd31 100644
--- a/noncore/apps/opie-reader/Filedata.h
+++ b/noncore/apps/opie-reader/Filedata.h
@@ -1,51 +1,51 @@
1#ifndef __FILEDATA_H 1#ifndef __FILEDATA_H
2#define __FILEDATA_H 2#define __FILEDATA_H
3 3
4#include <time.h> 4#include <time.h>
5 5
6class CFiledata 6class CFiledata
7{ 7{
8 unsigned char* data; 8 unsigned char* data;
9 bool m_own; 9 bool m_own;
10 public: 10 public:
11 CFiledata(tchar* d) 11 CFiledata(tchar* d)
12 { 12 {
13 data = (unsigned char*)d; 13 data = (unsigned char*)d;
14 m_own = false; 14 m_own = false;
15 } 15 }
16 CFiledata(time_t dt, tchar* nm) 16 CFiledata(time_t dt, tchar* nm)
17 { 17 {
18 int nlen = ustrlen(nm)+1; 18 int nlen = ustrlen(nm)+1;
19 data = new unsigned char[sizeof(time_t)+sizeof(tchar)*nlen]; 19 data = new unsigned char[sizeof(time_t)+sizeof(tchar)*nlen];
20 *((time_t *)data) = dt; 20 *((time_t *)data) = dt;
21 memcpy(data+sizeof(time_t), nm, sizeof(tchar)*nlen); 21 memcpy(data+sizeof(time_t), nm, sizeof(tchar)*nlen);
22 m_own = true; 22 m_own = true;
23 } 23 }
24 ~CFiledata() 24 ~CFiledata()
25 { 25 {
26 if (m_own && data != NULL) 26 if (m_own && data != NULL)
27 { 27 {
28 delete [] data; 28 delete [] data;
29 qDebug("~Filedata: deleting"); 29 // qDebug("~Filedata: deleting");
30 } 30 }
31 else 31 else
32 { 32 {
33 qDebug("~Filedata: not deleting"); 33 // qDebug("~Filedata: not deleting");
34 } 34 }
35 } 35 }
36 tchar* name() const { return (tchar*)(data+sizeof(time_t)); } 36 tchar* name() const { return (tchar*)(data+sizeof(time_t)); }
37 time_t date() { return *((time_t *)data); } 37 time_t date() { return *((time_t *)data); }
38 void setdate(time_t _t) { *((time_t *)data) = _t; } 38 void setdate(time_t _t) { *((time_t *)data) = _t; }
39 unsigned char* content() { return data; } 39 unsigned char* content() { return data; }
40 size_t length() const { return sizeof(time_t)+sizeof(tchar)*(ustrlen(name())+1); } 40 size_t length() const { return sizeof(time_t)+sizeof(tchar)*(ustrlen(name())+1); }
41 bool operator==(const CFiledata& rhs) 41 bool operator==(const CFiledata& rhs)
42 { 42 {
43 return ((length() == rhs.length()) && (memcmp(data, rhs.data, length()) == 0)); 43 return ((length() == rhs.length()) && (memcmp(data, rhs.data, length()) == 0));
44 } 44 }
45 bool samename(const CFiledata& rhs) 45 bool samename(const CFiledata& rhs)
46 { 46 {
47 return (ustrcmp((tchar *)(data+sizeof(time_t)),(tchar *)(rhs.data+sizeof(time_t))) == 0); 47 return (ustrcmp((tchar *)(data+sizeof(time_t)),(tchar *)(rhs.data+sizeof(time_t))) == 0);
48 } 48 }
49}; 49};
50 50
51#endif 51#endif
diff --git a/noncore/apps/opie-reader/FontControl.cpp b/noncore/apps/opie-reader/FontControl.cpp
index f0ed98b..e03bf64 100644
--- a/noncore/apps/opie-reader/FontControl.cpp
+++ b/noncore/apps/opie-reader/FontControl.cpp
@@ -1,37 +1,60 @@
1#include "opie.h" 1#include "opie.h"
2#include "useqpe.h"
2#include "FontControl.h" 3#include "FontControl.h"
3 4
5int FontControl::gzoom()
6{
7 int ret;
8 if (m_size == g_size)
9 {
10 ret = m_fontsizes[m_size]*m_basesize;
11 }
12 else if (g_size < 0)
13 {
14 int f = -g_size;
15 ret = (m_fontsizes[0]*m_basesize) >> (f/2);
16 if (f%2) ret = (2*ret/3);
17 }
18 else
19 {
20 int f = g_size - m_maxsize + 1;
21 ret = (m_fontsizes[m_maxsize-1]*m_basesize) << (f/2);
22 if (f%2) ret = (3*ret/2);
23 }
24 return ret;
25}
26
4bool FontControl::ChangeFont(QString& n, int tgt) 27bool FontControl::ChangeFont(QString& n, int tgt)
5{ 28{
6 QValueList<int>::Iterator it; 29 QValueList<int>::Iterator it;
7 QFontDatabase fdb; 30 QFontDatabase fdb;
8 QValueList<int> sizes = fdb.pointSizes(n); 31 QValueList<int> sizes = fdb.pointSizes(n);
9 if (sizes.count() == 0) 32 if (sizes.count() == 0)
10 { 33 {
11 return false; 34 return false;
12 } 35 }
13 else 36 else
14 { 37 {
15 m_fontname = n; 38 m_fontname = n;
16 m_maxsize = sizes.count(); 39 m_maxsize = sizes.count();
17 if (m_fontsizes != NULL) delete [] m_fontsizes; 40 if (m_fontsizes != NULL) delete [] m_fontsizes;
18 m_fontsizes = new int[m_maxsize]; 41 m_fontsizes = new int[m_maxsize];
19 uint i = 0; 42 uint i = 0;
20 uint best = 0; 43 uint best = 0;
21 for (it = sizes.begin(); it != sizes.end(); it++) 44 for (it = sizes.begin(); it != sizes.end(); it++)
22 { 45 {
23#ifdef OPIE 46#if defined(OPIE) || !defined(USEQPE)
24 m_fontsizes[i] = (*it); 47 m_fontsizes[i] = (*it);
25#else 48#else
26 m_fontsizes[i] = (*it)/10; 49 m_fontsizes[i] = (*it)/10;
27#endif 50#endif
28 if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best])) 51 if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best]))
29 { 52 {
30 best = i; 53 best = i;
31 } 54 }
32 i++; 55 i++;
33 } 56 }
34 m_size = best; 57 g_size = m_size = best;
35 } 58 }
36 return true; 59 return true;
37} 60}
diff --git a/noncore/apps/opie-reader/FontControl.h b/noncore/apps/opie-reader/FontControl.h
index 02049d0..5681496 100644
--- a/noncore/apps/opie-reader/FontControl.h
+++ b/noncore/apps/opie-reader/FontControl.h
@@ -1,104 +1,153 @@
1#ifndef __FONTCONTROL_H 1#ifndef __FONTCONTROL_H
2#define __FONTCONTROL_H 2#define __FONTCONTROL_H
3 3
4#include <qfontdatabase.h> 4#include <qfontdatabase.h>
5#include <qfontmetrics.h> 5#include <qfontmetrics.h>
6#include "StyleConsts.h" 6#include "StyleConsts.h"
7 7
8class FontControl 8class FontControl
9{ 9{
10 int * m_fontsizes; 10 int * m_fontsizes;
11 int m_size; 11 int m_size, g_size;
12 QString m_fontname; 12 QString m_fontname;
13 QString m_fixedfontname;
13 int m_maxsize; 14 int m_maxsize;
14 bool m_hasCourier; 15 bool m_hasCourier;
16 int m_leading, m_extraspace;
17 unsigned char m_basesize;
15 public: 18 public:
19 void setBaseSize(unsigned char _s) { m_basesize = _s; }
20 unsigned char getBaseSize() { return m_basesize; }
21 int gzoom();
16 FontControl(QString n = "helvetica", int size = 10) 22 FontControl(QString n = "helvetica", int size = 10)
17 : 23 :
18 m_fontsizes(NULL), m_hasCourier(false) 24 m_fontsizes(NULL), m_hasCourier(false), m_leading(0), m_extraspace(0)
19 { 25 {
20 ChangeFont(n, size); 26 ChangeFont(n, size);
21 } 27 }
22 ~FontControl() 28 ~FontControl()
23 { 29 {
24 if (m_fontsizes != NULL) delete [] m_fontsizes; 30 if (m_fontsizes != NULL) delete [] m_fontsizes;
25 } 31 }
26 void hasCourier(bool _b) { m_hasCourier = _b; } 32 void hasCourier(bool _b, const QString& _nm)
33 {
34 m_hasCourier = _b;
35 m_fixedfontname = _nm;
36 }
37 QString& fixedfontname() { return m_fixedfontname; }
27 bool hasCourier() { return m_hasCourier; } 38 bool hasCourier() { return m_hasCourier; }
28 QString name() { return m_fontname; } 39 QString name() { return m_fontname; }
29 int currentsize() { return m_fontsizes[m_size]; } 40 int currentsize() { return m_fontsizes[m_size]; }
30 int getsize(CStyle size) 41 int getsize(const CStyle& size)
31 { 42 {
32 int tgt = m_size+size.getFontSize(); 43 int tgt = m_size+size.getFontSize();
33 if (tgt < 0) 44 if (tgt < 0)
34 { 45 {
35 tgt = 0; 46 tgt = 0;
36 } 47 }
37 if (tgt >= m_maxsize) 48 if (tgt >= m_maxsize)
38 { 49 {
39 tgt = m_maxsize - 1; 50 tgt = m_maxsize - 1;
40 } 51 }
41 return m_fontsizes[tgt]; 52 return m_fontsizes[tgt];
42 } 53 }
43 int ascent() 54 int ascent()
44 { 55 {
45 QFont f(name(), currentsize()); 56 QFont f(name(), currentsize());
46 QFontMetrics fm(f); 57 QFontMetrics fm(f);
47 return fm.ascent(); 58 return fm.ascent();
48 } 59 }
49 int ascent(CStyle ch) 60 int ascent(const CStyle& ch)
50 { 61 {
51 QFont f(name(), getsize(ch)); 62 QFont f(name(), getsize(ch));
52 QFontMetrics fm(f); 63 QFontMetrics fm(f);
53 return fm.ascent(); 64 return fm.ascent();
54 } 65 }
55 int descent() 66 int descent()
56 { 67 {
57 QFont f(name(), currentsize()); 68 QFont f(name(), currentsize());
58 QFontMetrics fm(f); 69 QFontMetrics fm(f);
59 return fm.descent(); 70 return fm.descent();
60 } 71 }
61 int descent(CStyle ch) 72 int descent(const CStyle& ch)
62 { 73 {
63 QFont f(name(), getsize(ch)); 74 QFont f(name(), getsize(ch));
64 QFontMetrics fm(f); 75 QFontMetrics fm(f);
65 return fm.descent(); 76 return fm.descent();
66 } 77 }
67 int lineSpacing() 78 int lineSpacing()
68 { 79 {
69 QFont f(name(), currentsize()); 80 QFont f(name(), currentsize());
70 QFontMetrics fm(f); 81 QFontMetrics fm(f);
71 return fm.lineSpacing(); 82 return fm.lineSpacing();
72 } 83 }
73 int lineSpacing(CStyle ch) 84 int lineSpacing(const CStyle& ch)
74 { 85 {
75 QFont f(name(), getsize(ch)); 86 QFont f(name(), getsize(ch));
76 QFontMetrics fm(f); 87 QFontMetrics fm(f);
77 return fm.lineSpacing(); 88 return fm.lineSpacing();
78 } 89 }
79 bool decreasesize() 90 bool decreasesize()
80 { 91 {
92/*
81 if (--m_size < 0) 93 if (--m_size < 0)
82 { 94 {
83 m_size = 0; 95 m_size = 0;
84 return false; 96 return false;
85 } 97 }
86 else return true; 98 else return true;
99*/
100 if (g_size-- == m_size)
101 {
102 if (--m_size < 0)
103 {
104 m_size = 0;
105 }
106 }
107 // qDebug("Font:%d Graphics:%d", m_size, g_size);
108 return true;
87 } 109 }
88 bool increasesize() 110 bool increasesize()
89 { 111 {
112/*
90 if (++m_size >= m_maxsize) 113 if (++m_size >= m_maxsize)
91 { 114 {
92 m_size = m_maxsize - 1; 115 m_size = m_maxsize - 1;
93 return false; 116 return false;
94 } 117 }
95 else return true; 118 else return true;
119*/
120 if (g_size++ == m_size)
121 {
122 if (++m_size >= m_maxsize)
123 {
124 m_size = m_maxsize - 1;
125 }
126 }
127 // qDebug("Font:%d Graphics:%d", m_size, g_size);
128 return true;
96 } 129 }
97 bool ChangeFont(QString& n) 130 bool ChangeFont(QString& n)
98 { 131 {
99 return ChangeFont(n, currentsize()); 132 return ChangeFont(n, currentsize());
100 } 133 }
101 bool ChangeFont(QString& n, int tgt); 134 bool ChangeFont(QString& n, int tgt);
135 void setlead(int _lead)
136 {
137 m_leading = _lead;
138 }
139 int getlead()
140 {
141 return m_leading;
142 }
143 void setextraspace(int _lead)
144 {
145 m_extraspace = _lead;
146 }
147 int getextraspace()
148 {
149 return m_extraspace;
150 }
102}; 151};
103 152
104#endif 153#endif
diff --git a/noncore/apps/opie-reader/Navigation.cpp b/noncore/apps/opie-reader/Navigation.cpp
index 4f11887..36e33b4 100644
--- a/noncore/apps/opie-reader/Navigation.cpp
+++ b/noncore/apps/opie-reader/Navigation.cpp
@@ -1,100 +1,122 @@
1#include "Navigation.h" 1#ifdef _WINDOWS
2
3#include <string.h> 2#include <string.h>
3#endif
4#include "Navigation.h"
5//#include <stdio.h>
4 6
7/*
8 void saveposn(size_t posn)
9 save/push position to history buffer for future use of back() function
10*/
5void CNavigation::saveposn(size_t posn) 11void CNavigation::saveposn(size_t posn)
6{ 12{
7// qDebug("Saved:%u [%u,%u,%u]", posn, historystart, historycurrent, historyend); 13 //printf("saving position %u, depth %u\n",posn,historycurrent);
8 historycurrent = historyend = (historycurrent+1)%NAVIGATION_HISTORY_SIZE;
9 history[historycurrent] = posn; 14 history[historycurrent] = posn;
10 if (historystart == historyend) historystart = (historystart+1)%NAVIGATION_HISTORY_SIZE; 15 historycurrent=(historycurrent+1)%NAVIGATION_HISTORY_SIZE;
11// qDebug("Saved:%u [%u,%u,%u]", posn, historystart, historycurrent, historyend); 16 if (historycurrent==historystart)
17 // circular buffer full, forget oldest record
18 historystart=(historystart+1)%NAVIGATION_HISTORY_SIZE;
19 // no forward possible after saveposn
20 historyend = historycurrent;
12} 21}
13 22
14bool CNavigation::forward(size_t& loc) 23/*
24 void writeposn(size_t posn)
25 overwrite current (unused) position
26 useful for saving current position before using back button
27*/
28void CNavigation::writeposn(size_t posn)
15{ 29{
16 if (historycurrent != historyend) 30 //printf("witing position %u, depth %u\n",posn,historycurrent);
17 { 31 history[historycurrent] = posn;
18 historycurrent = (historycurrent + 1)%NAVIGATION_HISTORY_SIZE;
19 loc = history[historycurrent];
20 //qDebug("Forward:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend);
21 return true;
22 }
23 else
24 {
25 return false;
26 }
27} 32}
28 33
29bool CNavigation::back(size_t& loc) 34/*
35 bool back(size_t& posn)
36 go back in history
37 restore last position saved with saveposn() and return true
38 return false if there is nothing saved in history
39*/
40bool CNavigation::back(size_t& posn)
30{ 41{
31 if (historyend != historystart) 42 if (historycurrent!=historystart) {
32 { 43 // buffer is not empty
33 //qDebug("Back:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend); 44 if (historycurrent==0)
34 if (historycurrent == historyend && history[historycurrent] != loc) 45 historycurrent=NAVIGATION_HISTORY_SIZE-1;
35 { 46 else
36 historyend = (historyend+1) % NAVIGATION_HISTORY_SIZE; 47 historycurrent--;
37 history[historyend] = loc; 48 posn=history[historycurrent];
38 } 49 //printf("back(): going back to %u depth %u\n",posn,historycurrent);
39 else 50 return true;
40 { 51
41 size_t sv = historycurrent; 52 } else {
42 historycurrent = (historycurrent + NAVIGATION_HISTORY_SIZE - 1) % NAVIGATION_HISTORY_SIZE; 53 // circular buffer empty
43 if (historycurrent == historystart) 54 //printf("back(): empty history\n");
44 { 55 return false;
45 historycurrent = sv;
46 return false;
47 }
48 }
49 loc = history[historycurrent];
50 //qDebug("Back:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend);
51 return true;
52 }
53 else
54 {
55 return false;
56 } 56 }
57} 57}
58 58
59#include <stdio.h> 59/*
60 bool forward(size_t& posn)
61 go forward in history, if possible
62 undo calling of back()
63*/
64bool CNavigation::forward(size_t& posn)
65{
66 if (historycurrent!=historyend) {
67 // [historycurrent] = current position
68 // [historycurrent+1] = position we need
69 historycurrent=(historycurrent+1)%NAVIGATION_HISTORY_SIZE;
70 posn = history[historycurrent];
71 //printf("forward(): going to position %d\n",posn);
72 return true;
73 } else {
74 //printf("forward(): there is no future :)\n");
75 return false;
76 }
77}
60 78
61void CNavigation::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) 79void CNavigation::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
62{ 80{
63 len = srclen+sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE); 81 len = srclen+sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE);
64 data = new unsigned char[len]; 82 data = new unsigned char[len];
65 unsigned char* p = data; 83 unsigned char* p = data;
66 memcpy(p, src, srclen); 84 memcpy(p, src, srclen);
67 p += srclen; 85 p += srclen;
68 memcpy(p, &historystart, sizeof(size_t)); 86 memcpy(p, &historystart, sizeof(size_t));
69 p += sizeof(size_t); 87 p += sizeof(size_t);
70 memcpy(p, &historyend, sizeof(size_t)); 88 memcpy(p, &historyend, sizeof(size_t));
71 p += sizeof(size_t); 89 p += sizeof(size_t);
72 memcpy(p, &historycurrent, sizeof(size_t)); 90 memcpy(p, &historycurrent, sizeof(size_t));
73 p += sizeof(size_t); 91 p += sizeof(size_t);
74 memcpy(p, history, sizeof(size_t)*NAVIGATION_HISTORY_SIZE); 92 memcpy(p, history, sizeof(size_t)*NAVIGATION_HISTORY_SIZE);
93/*
75 printf("<%u,%u,%u>\n", historystart, historyend, historycurrent); 94 printf("<%u,%u,%u>\n", historystart, historyend, historycurrent);
76 for (int i = historystart; i <= historyend; i++) 95 for (int i = historystart; i <= historyend; i++)
77 printf("<%u> ", history[i]); 96 printf("<%u> ", history[i]);
78 printf("\n"); 97 printf("\n");
98*/
79} 99}
80 100
81void CNavigation::putSaveData(unsigned char*& src, unsigned short& srclen) 101void CNavigation::putSaveData(unsigned char*& src, unsigned short& srclen)
82{ 102{
83 if (srclen >= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE)) 103 if (srclen >= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE))
84 { 104 {
85 unsigned char* p = src; 105 unsigned char* p = src;
86 memcpy(&historystart, p, sizeof(size_t)); 106 memcpy(&historystart, p, sizeof(size_t));
87 p += sizeof(size_t); 107 p += sizeof(size_t);
88 memcpy(&historyend, p, sizeof(size_t)); 108 memcpy(&historyend, p, sizeof(size_t));
89 p += sizeof(size_t); 109 p += sizeof(size_t);
90 memcpy(&historycurrent, p, sizeof(size_t)); 110 memcpy(&historycurrent, p, sizeof(size_t));
91 p += sizeof(size_t); 111 p += sizeof(size_t);
92 memcpy(history, p, sizeof(size_t)*NAVIGATION_HISTORY_SIZE); 112 memcpy(history, p, sizeof(size_t)*NAVIGATION_HISTORY_SIZE);
93 src = p + sizeof(size_t)*NAVIGATION_HISTORY_SIZE; 113 src = p + sizeof(size_t)*NAVIGATION_HISTORY_SIZE;
94 srclen -= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE); 114 srclen -= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE);
95 } 115 }
116/*
96 printf("<%u,%u,%u>\n", historystart, historyend, historycurrent); 117 printf("<%u,%u,%u>\n", historystart, historyend, historycurrent);
97 for (int i = historystart; i <= historyend; i++) 118 for (int i = historystart; i <= historyend; i++)
98 printf("<%u> ", history[i]); 119 printf("<%u> ", history[i]);
99 printf("\n"); 120 printf("\n");
121*/
100} 122}
diff --git a/noncore/apps/opie-reader/Navigation.h b/noncore/apps/opie-reader/Navigation.h
index 57fb006..19d7f81 100644
--- a/noncore/apps/opie-reader/Navigation.h
+++ b/noncore/apps/opie-reader/Navigation.h
@@ -1,16 +1,18 @@
1#include <string.h>
1#include <stdlib.h> 2#include <stdlib.h>
2 3
3const size_t NAVIGATION_HISTORY_SIZE = 32; 4const size_t NAVIGATION_HISTORY_SIZE = 32;
4 5
5class CNavigation 6class CNavigation
6{ 7{
7 size_t history[NAVIGATION_HISTORY_SIZE]; 8 size_t history[NAVIGATION_HISTORY_SIZE];
8 size_t historystart, historyend, historycurrent; 9 size_t historystart, historyend, historycurrent;
9 public: 10 public:
10 CNavigation() : historystart(0),historyend(0),historycurrent(0) {} 11 CNavigation() : historystart(0),historyend(0),historycurrent(0) {}
11 void saveposn(size_t posn); 12 void saveposn(size_t posn);
13 void writeposn(size_t posn);
12 bool forward(size_t& loc); 14 bool forward(size_t& loc);
13 bool back(size_t& loc); 15 bool back(size_t& loc);
14 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen); 16 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen);
15 void putSaveData(unsigned char*& src, unsigned short& srclen); 17 void putSaveData(unsigned char*& src, unsigned short& srclen);
16}; 18};
diff --git a/noncore/apps/opie-reader/Palm2QImage.cpp b/noncore/apps/opie-reader/Palm2QImage.cpp
index 9603877..bf5ece3 100644
--- a/noncore/apps/opie-reader/Palm2QImage.cpp
+++ b/noncore/apps/opie-reader/Palm2QImage.cpp
@@ -1,308 +1,309 @@
1/* -*- mode: c; indent-tabs-mode: nil; -*- */ 1/* -*- mode: c; indent-tabs-mode: nil; -*- */
2#include "useqpe.h"
2#include <stdio.h> 3#include <stdio.h>
3#include <stdlib.h> 4#include <stdlib.h>
4#include <string.h> 5#include <string.h>
5#ifndef WINDOWS 6#ifndef _WINDOWS
6#include <unistd.h> /* for link */ 7#include <unistd.h> /* for link */
7#endif 8#endif
8#include <sys/types.h> 9#include <sys/types.h>
9#include <sys/stat.h> 10#include <sys/stat.h>
10#include <stdarg.h> 11#include <stdarg.h>
11 12
12#include <qimage.h> 13#include <qimage.h>
13 14
14/***********************************************************************/ 15/***********************************************************************/
15/***********************************************************************/ 16/***********************************************************************/
16/***** *****/ 17/***** *****/
17/***** Code to decode the Palm image format to JPEG *****/ 18/***** Code to decode the Palm image format to JPEG *****/
18/***** *****/ 19/***** *****/
19/***********************************************************************/ 20/***********************************************************************/
20/***********************************************************************/ 21/***********************************************************************/
21 22
22#define READ_BIGENDIAN_SHORT(p) (((p)[0] << 8)|((p)[1])) 23#define READ_BIGENDIAN_SHORT(p) (((p)[0] << 8)|((p)[1]))
23#define READ_BIGENDIAN_LONG(p) (((p)[0] << 24)|((p)[1] << 16)|((p)[2] << 8)|((p)[3])) 24#define READ_BIGENDIAN_LONG(p) (((p)[0] << 24)|((p)[1] << 16)|((p)[2] << 8)|((p)[3]))
24 25
25#define PALM_IS_COMPRESSED_FLAG 0x8000 26#define PALM_IS_COMPRESSED_FLAG 0x8000
26#define PALM_HAS_COLORMAP_FLAG 0x4000 27#define PALM_HAS_COLORMAP_FLAG 0x4000
27#define PALM_HAS_TRANSPARENCY_FLAG 0x2000 28#define PALM_HAS_TRANSPARENCY_FLAG 0x2000
28#define PALM_DIRECT_COLOR_FLAG 0x0400 29#define PALM_DIRECT_COLOR_FLAG 0x0400
29#define PALM_4_BYTE_FIELD_FLAG 0x0200 30#define PALM_4_BYTE_FIELD_FLAG 0x0200
30 31
31#define PALM_COMPRESSION_SCANLINE 0x00 32#define PALM_COMPRESSION_SCANLINE 0x00
32#define PALM_COMPRESSION_RLE 0x01 33#define PALM_COMPRESSION_RLE 0x01
33#define PALM_COMPRESSION_PACKBITS 0x02 34#define PALM_COMPRESSION_PACKBITS 0x02
34#define PALM_COMPRESSION_NONE 0xFF 35#define PALM_COMPRESSION_NONE 0xFF
35 36
36#define PALM_COLORMAP_SIZE 232 37#define PALM_COLORMAP_SIZE 232
37 38
38typedef struct { 39typedef struct {
39 unsigned char red; 40 unsigned char red;
40 unsigned char green; 41 unsigned char green;
41 unsigned char blue; 42 unsigned char blue;
42} ColorMapEntry; 43} ColorMapEntry;
43 44
44static ColorMapEntry Palm8BitColormap[] = { 45static ColorMapEntry Palm8BitColormap[] = {
45 { 255, 255, 255 }, { 255, 204, 255 }, { 255, 153, 255 }, { 255, 102, 255 }, 46 { 255, 255, 255 }, { 255, 204, 255 }, { 255, 153, 255 }, { 255, 102, 255 },
46 { 255, 51, 255 }, { 255, 0, 255 }, { 255, 255, 204 }, { 255, 204, 204 }, 47 { 255, 51, 255 }, { 255, 0, 255 }, { 255, 255, 204 }, { 255, 204, 204 },
47 { 255, 153, 204 }, { 255, 102, 204 }, { 255, 51, 204 }, { 255, 0, 204 }, 48 { 255, 153, 204 }, { 255, 102, 204 }, { 255, 51, 204 }, { 255, 0, 204 },
48 { 255, 255, 153 }, { 255, 204, 153 }, { 255, 153, 153 }, { 255, 102, 153 }, 49 { 255, 255, 153 }, { 255, 204, 153 }, { 255, 153, 153 }, { 255, 102, 153 },
49 { 255, 51, 153 }, { 255, 0, 153 }, { 204, 255, 255 }, { 204, 204, 255 }, 50 { 255, 51, 153 }, { 255, 0, 153 }, { 204, 255, 255 }, { 204, 204, 255 },
50 { 204, 153, 255 }, { 204, 102, 255 }, { 204, 51, 255 }, { 204, 0, 255 }, 51 { 204, 153, 255 }, { 204, 102, 255 }, { 204, 51, 255 }, { 204, 0, 255 },
51 { 204, 255, 204 }, { 204, 204, 204 }, { 204, 153, 204 }, { 204, 102, 204 }, 52 { 204, 255, 204 }, { 204, 204, 204 }, { 204, 153, 204 }, { 204, 102, 204 },
52 { 204, 51, 204 }, { 204, 0, 204 }, { 204, 255, 153 }, { 204, 204, 153 }, 53 { 204, 51, 204 }, { 204, 0, 204 }, { 204, 255, 153 }, { 204, 204, 153 },
53 { 204, 153, 153 }, { 204, 102, 153 }, { 204, 51, 153 }, { 204, 0, 153 }, 54 { 204, 153, 153 }, { 204, 102, 153 }, { 204, 51, 153 }, { 204, 0, 153 },
54 { 153, 255, 255 }, { 153, 204, 255 }, { 153, 153, 255 }, { 153, 102, 255 }, 55 { 153, 255, 255 }, { 153, 204, 255 }, { 153, 153, 255 }, { 153, 102, 255 },
55 { 153, 51, 255 }, { 153, 0, 255 }, { 153, 255, 204 }, { 153, 204, 204 }, 56 { 153, 51, 255 }, { 153, 0, 255 }, { 153, 255, 204 }, { 153, 204, 204 },
56 { 153, 153, 204 }, { 153, 102, 204 }, { 153, 51, 204 }, { 153, 0, 204 }, 57 { 153, 153, 204 }, { 153, 102, 204 }, { 153, 51, 204 }, { 153, 0, 204 },
57 { 153, 255, 153 }, { 153, 204, 153 }, { 153, 153, 153 }, { 153, 102, 153 }, 58 { 153, 255, 153 }, { 153, 204, 153 }, { 153, 153, 153 }, { 153, 102, 153 },
58 { 153, 51, 153 }, { 153, 0, 153 }, { 102, 255, 255 }, { 102, 204, 255 }, 59 { 153, 51, 153 }, { 153, 0, 153 }, { 102, 255, 255 }, { 102, 204, 255 },
59 { 102, 153, 255 }, { 102, 102, 255 }, { 102, 51, 255 }, { 102, 0, 255 }, 60 { 102, 153, 255 }, { 102, 102, 255 }, { 102, 51, 255 }, { 102, 0, 255 },
60 { 102, 255, 204 }, { 102, 204, 204 }, { 102, 153, 204 }, { 102, 102, 204 }, 61 { 102, 255, 204 }, { 102, 204, 204 }, { 102, 153, 204 }, { 102, 102, 204 },
61 { 102, 51, 204 }, { 102, 0, 204 }, { 102, 255, 153 }, { 102, 204, 153 }, 62 { 102, 51, 204 }, { 102, 0, 204 }, { 102, 255, 153 }, { 102, 204, 153 },
62 { 102, 153, 153 }, { 102, 102, 153 }, { 102, 51, 153 }, { 102, 0, 153 }, 63 { 102, 153, 153 }, { 102, 102, 153 }, { 102, 51, 153 }, { 102, 0, 153 },
63 { 51, 255, 255 }, { 51, 204, 255 }, { 51, 153, 255 }, { 51, 102, 255 }, 64 { 51, 255, 255 }, { 51, 204, 255 }, { 51, 153, 255 }, { 51, 102, 255 },
64 { 51, 51, 255 }, { 51, 0, 255 }, { 51, 255, 204 }, { 51, 204, 204 }, 65 { 51, 51, 255 }, { 51, 0, 255 }, { 51, 255, 204 }, { 51, 204, 204 },
65 { 51, 153, 204 }, { 51, 102, 204 }, { 51, 51, 204 }, { 51, 0, 204 }, 66 { 51, 153, 204 }, { 51, 102, 204 }, { 51, 51, 204 }, { 51, 0, 204 },
66 { 51, 255, 153 }, { 51, 204, 153 }, { 51, 153, 153 }, { 51, 102, 153 }, 67 { 51, 255, 153 }, { 51, 204, 153 }, { 51, 153, 153 }, { 51, 102, 153 },
67 { 51, 51, 153 }, { 51, 0, 153 }, { 0, 255, 255 }, { 0, 204, 255 }, 68 { 51, 51, 153 }, { 51, 0, 153 }, { 0, 255, 255 }, { 0, 204, 255 },
68 { 0, 153, 255 }, { 0, 102, 255 }, { 0, 51, 255 }, { 0, 0, 255 }, 69 { 0, 153, 255 }, { 0, 102, 255 }, { 0, 51, 255 }, { 0, 0, 255 },
69 { 0, 255, 204 }, { 0, 204, 204 }, { 0, 153, 204 }, { 0, 102, 204 }, 70 { 0, 255, 204 }, { 0, 204, 204 }, { 0, 153, 204 }, { 0, 102, 204 },
70 { 0, 51, 204 }, { 0, 0, 204 }, { 0, 255, 153 }, { 0, 204, 153 }, 71 { 0, 51, 204 }, { 0, 0, 204 }, { 0, 255, 153 }, { 0, 204, 153 },
71 { 0, 153, 153 }, { 0, 102, 153 }, { 0, 51, 153 }, { 0, 0, 153 }, 72 { 0, 153, 153 }, { 0, 102, 153 }, { 0, 51, 153 }, { 0, 0, 153 },
72 { 255, 255, 102 }, { 255, 204, 102 }, { 255, 153, 102 }, { 255, 102, 102 }, 73 { 255, 255, 102 }, { 255, 204, 102 }, { 255, 153, 102 }, { 255, 102, 102 },
73 { 255, 51, 102 }, { 255, 0, 102 }, { 255, 255, 51 }, { 255, 204, 51 }, 74 { 255, 51, 102 }, { 255, 0, 102 }, { 255, 255, 51 }, { 255, 204, 51 },
74 { 255, 153, 51 }, { 255, 102, 51 }, { 255, 51, 51 }, { 255, 0, 51 }, 75 { 255, 153, 51 }, { 255, 102, 51 }, { 255, 51, 51 }, { 255, 0, 51 },
75 { 255, 255, 0 }, { 255, 204, 0 }, { 255, 153, 0 }, { 255, 102, 0 }, 76 { 255, 255, 0 }, { 255, 204, 0 }, { 255, 153, 0 }, { 255, 102, 0 },
76 { 255, 51, 0 }, { 255, 0, 0 }, { 204, 255, 102 }, { 204, 204, 102 }, 77 { 255, 51, 0 }, { 255, 0, 0 }, { 204, 255, 102 }, { 204, 204, 102 },
77 { 204, 153, 102 }, { 204, 102, 102 }, { 204, 51, 102 }, { 204, 0, 102 }, 78 { 204, 153, 102 }, { 204, 102, 102 }, { 204, 51, 102 }, { 204, 0, 102 },
78 { 204, 255, 51 }, { 204, 204, 51 }, { 204, 153, 51 }, { 204, 102, 51 }, 79 { 204, 255, 51 }, { 204, 204, 51 }, { 204, 153, 51 }, { 204, 102, 51 },
79 { 204, 51, 51 }, { 204, 0, 51 }, { 204, 255, 0 }, { 204, 204, 0 }, 80 { 204, 51, 51 }, { 204, 0, 51 }, { 204, 255, 0 }, { 204, 204, 0 },
80 { 204, 153, 0 }, { 204, 102, 0 }, { 204, 51, 0 }, { 204, 0, 0 }, 81 { 204, 153, 0 }, { 204, 102, 0 }, { 204, 51, 0 }, { 204, 0, 0 },
81 { 153, 255, 102 }, { 153, 204, 102 }, { 153, 153, 102 }, { 153, 102, 102 }, 82 { 153, 255, 102 }, { 153, 204, 102 }, { 153, 153, 102 }, { 153, 102, 102 },
82 { 153, 51, 102 }, { 153, 0, 102 }, { 153, 255, 51 }, { 153, 204, 51 }, 83 { 153, 51, 102 }, { 153, 0, 102 }, { 153, 255, 51 }, { 153, 204, 51 },
83 { 153, 153, 51 }, { 153, 102, 51 }, { 153, 51, 51 }, { 153, 0, 51 }, 84 { 153, 153, 51 }, { 153, 102, 51 }, { 153, 51, 51 }, { 153, 0, 51 },
84 { 153, 255, 0 }, { 153, 204, 0 }, { 153, 153, 0 }, { 153, 102, 0 }, 85 { 153, 255, 0 }, { 153, 204, 0 }, { 153, 153, 0 }, { 153, 102, 0 },
85 { 153, 51, 0 }, { 153, 0, 0 }, { 102, 255, 102 }, { 102, 204, 102 }, 86 { 153, 51, 0 }, { 153, 0, 0 }, { 102, 255, 102 }, { 102, 204, 102 },
86 { 102, 153, 102 }, { 102, 102, 102 }, { 102, 51, 102 }, { 102, 0, 102 }, 87 { 102, 153, 102 }, { 102, 102, 102 }, { 102, 51, 102 }, { 102, 0, 102 },
87 { 102, 255, 51 }, { 102, 204, 51 }, { 102, 153, 51 }, { 102, 102, 51 }, 88 { 102, 255, 51 }, { 102, 204, 51 }, { 102, 153, 51 }, { 102, 102, 51 },
88 { 102, 51, 51 }, { 102, 0, 51 }, { 102, 255, 0 }, { 102, 204, 0 }, 89 { 102, 51, 51 }, { 102, 0, 51 }, { 102, 255, 0 }, { 102, 204, 0 },
89 { 102, 153, 0 }, { 102, 102, 0 }, { 102, 51, 0 }, { 102, 0, 0 }, 90 { 102, 153, 0 }, { 102, 102, 0 }, { 102, 51, 0 }, { 102, 0, 0 },
90 { 51, 255, 102 }, { 51, 204, 102 }, { 51, 153, 102 }, { 51, 102, 102 }, 91 { 51, 255, 102 }, { 51, 204, 102 }, { 51, 153, 102 }, { 51, 102, 102 },
91 { 51, 51, 102 }, { 51, 0, 102 }, { 51, 255, 51 }, { 51, 204, 51 }, 92 { 51, 51, 102 }, { 51, 0, 102 }, { 51, 255, 51 }, { 51, 204, 51 },
92 { 51, 153, 51 }, { 51, 102, 51 }, { 51, 51, 51 }, { 51, 0, 51 }, 93 { 51, 153, 51 }, { 51, 102, 51 }, { 51, 51, 51 }, { 51, 0, 51 },
93 { 51, 255, 0 }, { 51, 204, 0 }, { 51, 153, 0 }, { 51, 102, 0 }, 94 { 51, 255, 0 }, { 51, 204, 0 }, { 51, 153, 0 }, { 51, 102, 0 },
94 { 51, 51, 0 }, { 51, 0, 0 }, { 0, 255, 102 }, { 0, 204, 102 }, 95 { 51, 51, 0 }, { 51, 0, 0 }, { 0, 255, 102 }, { 0, 204, 102 },
95 { 0, 153, 102 }, { 0, 102, 102 }, { 0, 51, 102 }, { 0, 0, 102 }, 96 { 0, 153, 102 }, { 0, 102, 102 }, { 0, 51, 102 }, { 0, 0, 102 },
96 { 0, 255, 51 }, { 0, 204, 51 }, { 0, 153, 51 }, { 0, 102, 51 }, 97 { 0, 255, 51 }, { 0, 204, 51 }, { 0, 153, 51 }, { 0, 102, 51 },
97 { 0, 51, 51 }, { 0, 0, 51 }, { 0, 255, 0 }, { 0, 204, 0 }, 98 { 0, 51, 51 }, { 0, 0, 51 }, { 0, 255, 0 }, { 0, 204, 0 },
98 { 0, 153, 0 }, { 0, 102, 0 }, { 0, 51, 0 }, { 17, 17, 17 }, 99 { 0, 153, 0 }, { 0, 102, 0 }, { 0, 51, 0 }, { 17, 17, 17 },
99 { 34, 34, 34 }, { 68, 68, 68 }, { 85, 85, 85 }, { 119, 119, 119 }, 100 { 34, 34, 34 }, { 68, 68, 68 }, { 85, 85, 85 }, { 119, 119, 119 },
100 { 136, 136, 136 }, { 170, 170, 170 }, { 187, 187, 187 }, { 221, 221, 221 }, 101 { 136, 136, 136 }, { 170, 170, 170 }, { 187, 187, 187 }, { 221, 221, 221 },
101 { 238, 238, 238 }, { 192, 192, 192 }, { 128, 0, 0 }, { 128, 0, 128 }, 102 { 238, 238, 238 }, { 192, 192, 192 }, { 128, 0, 0 }, { 128, 0, 128 },
102 { 0, 128, 0 }, { 0, 128, 128 }, { 0, 0, 0 }, { 0, 0, 0 }, 103 { 0, 128, 0 }, { 0, 128, 128 }, { 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 },
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 },
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 },
106 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, 107 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
107 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, 108 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
108 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }}; 109 { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }};
109 110
110static ColorMapEntry Palm1BitColormap[] = {{ 255, 255, 255 }, { 0, 0, 0 }}; 111static ColorMapEntry Palm1BitColormap[] = {{ 255, 255, 255 }, { 0, 0, 0 }};
111 112
112static ColorMapEntry Palm2BitColormap[] = { 113static ColorMapEntry Palm2BitColormap[] = {
113 { 255, 255, 255 }, { 192, 192, 192 }, { 128, 128, 128 }, { 0, 0, 0 }}; 114 { 255, 255, 255 }, { 192, 192, 192 }, { 128, 128, 128 }, { 0, 0, 0 }};
114 115
115static ColorMapEntry Palm4BitColormap[] = { 116static ColorMapEntry Palm4BitColormap[] = {
116 { 255, 255, 255 }, { 238, 238, 238 }, { 221, 221, 221 }, { 204, 204, 204 }, 117 { 255, 255, 255 }, { 238, 238, 238 }, { 221, 221, 221 }, { 204, 204, 204 },
117 { 187, 187, 187 }, { 170, 170, 170 }, { 153, 153, 153 }, { 136, 136, 136 }, 118 { 187, 187, 187 }, { 170, 170, 170 }, { 153, 153, 153 }, { 136, 136, 136 },
118 { 119, 119, 119 }, { 102, 102, 102 }, { 85, 85, 85 }, { 68, 68, 68 }, 119 { 119, 119, 119 }, { 102, 102, 102 }, { 85, 85, 85 }, { 68, 68, 68 },
119 { 51, 51, 51 }, { 34, 34, 34 }, { 17, 17, 17 }, { 0, 0, 0 }}; 120 { 51, 51, 51 }, { 34, 34, 34 }, { 17, 17, 17 }, { 0, 0, 0 }};
120 121
121QImage* Palm2QImage 122QImage* Palm2QImage
122 (unsigned char *image_bytes_in, int byte_count_in) 123 (unsigned char *image_bytes_in, int byte_count_in)
123{ 124{
124 unsigned int width, height, bytes_per_row, flags, next_depth_offset; 125 unsigned int width, height, bytes_per_row, flags, next_depth_offset;
125 unsigned int bits_per_pixel, version, transparent_index, compression_type, i, j, inval, inbit, mask, incount; 126 unsigned int bits_per_pixel, version, transparent_index, compression_type, i, j, inval, inbit, mask, incount;
126 unsigned int palm_red_bits, palm_green_bits, palm_blue_bits; 127 unsigned int palm_red_bits, palm_green_bits, palm_blue_bits;
127 unsigned char *palm_ptr, *x_ptr, *imagedata, *inbyte, *rowbuf, *lastrow, 128 unsigned char *palm_ptr, *x_ptr, *imagedata, *inbyte, *rowbuf, *lastrow,
128 *imagedatastart, *palmimage; 129 *imagedatastart, *palmimage;
129 ColorMapEntry *colormap; 130 ColorMapEntry *colormap;
130 131
131 palmimage = image_bytes_in; 132 palmimage = image_bytes_in;
132 width = READ_BIGENDIAN_SHORT(palmimage + 0); 133 width = READ_BIGENDIAN_SHORT(palmimage + 0);
133 height = READ_BIGENDIAN_SHORT(palmimage + 2); 134 height = READ_BIGENDIAN_SHORT(palmimage + 2);
134 bytes_per_row = READ_BIGENDIAN_SHORT(palmimage + 4); 135 bytes_per_row = READ_BIGENDIAN_SHORT(palmimage + 4);
135 flags = READ_BIGENDIAN_SHORT(palmimage + 6); 136 flags = READ_BIGENDIAN_SHORT(palmimage + 6);
136 bits_per_pixel = palmimage[8]; 137 bits_per_pixel = palmimage[8];
137 version = palmimage[9]; 138 version = palmimage[9];
138 next_depth_offset = READ_BIGENDIAN_SHORT(palmimage + 10); 139 next_depth_offset = READ_BIGENDIAN_SHORT(palmimage + 10);
139 transparent_index = palmimage[12]; 140 transparent_index = palmimage[12];
140 compression_type = palmimage[13]; 141 compression_type = palmimage[13];
141 /* bytes 14 and 15 are reserved by Palm and always 0 */ 142 /* bytes 14 and 15 are reserved by Palm and always 0 */
142 143
143#if 0 144#if 0
144// qDebug ("Palm image is %dx%d, %d bpp, version %d, flags 0x%x, compression %d", width, height, bits_per_pixel, version, flags, compression_type); 145// qDebug ("Palm image is %dx%d, %d bpp, version %d, flags 0x%x, compression %d", width, height, bits_per_pixel, version, flags, compression_type);
145#endif 146#endif
146 147
147 if (compression_type == PALM_COMPRESSION_PACKBITS) { 148 if (compression_type == PALM_COMPRESSION_PACKBITS) {
148// qDebug ("Image uses packbits compression; not yet supported"); 149// qDebug ("Image uses packbits compression; not yet supported");
149 return NULL; 150 return NULL;
150 } else if ((compression_type != PALM_COMPRESSION_NONE) && 151 } else if ((compression_type != PALM_COMPRESSION_NONE) &&
151 (compression_type != PALM_COMPRESSION_RLE) && 152 (compression_type != PALM_COMPRESSION_RLE) &&
152 (compression_type != PALM_COMPRESSION_SCANLINE)) { 153 (compression_type != PALM_COMPRESSION_SCANLINE)) {
153// qDebug ("Image uses unknown compression, code 0x%x", compression_type); 154// qDebug ("Image uses unknown compression, code 0x%x", compression_type);
154 return NULL; 155 return NULL;
155 } 156 }
156 157
157 /* as of PalmOS 4.0, there are 6 different kinds of Palm pixmaps: 158 /* as of PalmOS 4.0, there are 6 different kinds of Palm pixmaps:
158 159
159 1, 2, or 4 bit grayscale 160 1, 2, or 4 bit grayscale
160 8-bit StaticColor using the Palm standard colormap 161 8-bit StaticColor using the Palm standard colormap
161 8-bit PseudoColor using a user-specified colormap 162 8-bit PseudoColor using a user-specified colormap
162 16-bit DirectColor using 5 bits for red, 6 for green, and 5 for blue 163 16-bit DirectColor using 5 bits for red, 6 for green, and 5 for blue
163 164
164 Each of these can be compressed with one of four compression schemes, 165 Each of these can be compressed with one of four compression schemes,
165 "RLE", "Scanline", "PackBits", or none. 166 "RLE", "Scanline", "PackBits", or none.
166 167
167 We begin by constructing the colormap. 168 We begin by constructing the colormap.
168 */ 169 */
169 170
170 if (flags & PALM_HAS_COLORMAP_FLAG) { 171 if (flags & PALM_HAS_COLORMAP_FLAG) {
171// qDebug("Palm images with custom colormaps are not currently supported.\n"); 172// qDebug("Palm images with custom colormaps are not currently supported.\n");
172 return NULL; 173 return NULL;
173 } else if (bits_per_pixel == 1) { 174 } else if (bits_per_pixel == 1) {
174 colormap = Palm1BitColormap; 175 colormap = Palm1BitColormap;
175 imagedatastart = palmimage + 16; 176 imagedatastart = palmimage + 16;
176 } else if (bits_per_pixel == 2) { 177 } else if (bits_per_pixel == 2) {
177 colormap = Palm2BitColormap; 178 colormap = Palm2BitColormap;
178 imagedatastart = palmimage + 16; 179 imagedatastart = palmimage + 16;
179 } else if (bits_per_pixel == 4) { 180 } else if (bits_per_pixel == 4) {
180 colormap = Palm4BitColormap; 181 colormap = Palm4BitColormap;
181 imagedatastart = palmimage + 16; 182 imagedatastart = palmimage + 16;
182 } else if (bits_per_pixel == 8) { 183 } else if (bits_per_pixel == 8) {
183 colormap = Palm8BitColormap; 184 colormap = Palm8BitColormap;
184 imagedatastart = palmimage + 16; 185 imagedatastart = palmimage + 16;
185 } else if (bits_per_pixel == 16 && (flags & PALM_DIRECT_COLOR_FLAG)) { 186 } else if (bits_per_pixel == 16 && (flags & PALM_DIRECT_COLOR_FLAG)) {
186 colormap = NULL; 187 colormap = NULL;
187 palm_red_bits = palmimage[16]; 188 palm_red_bits = palmimage[16];
188 palm_green_bits = palmimage[17]; 189 palm_green_bits = palmimage[17];
189 palm_blue_bits = palmimage[18]; 190 palm_blue_bits = palmimage[18];
190// qDebug("Bits:%d, %d, %d", palm_red_bits, palm_green_bits, palm_blue_bits); 191// qDebug("Bits:%d, %d, %d", palm_red_bits, palm_green_bits, palm_blue_bits);
191 if (palm_blue_bits > 8 || palm_green_bits > 8 || palm_red_bits > 8) { 192 if (palm_blue_bits > 8 || palm_green_bits > 8 || palm_red_bits > 8) {
192// qDebug("Can't handle this format DirectColor image -- too wide in some color (%d:%d:%d)\n", palm_red_bits, palm_green_bits, palm_blue_bits); 193// qDebug("Can't handle this format DirectColor image -- too wide in some color (%d:%d:%d)\n", palm_red_bits, palm_green_bits, palm_blue_bits);
193 return NULL; 194 return NULL;
194 } 195 }
195 if (bits_per_pixel > (8 * sizeof(unsigned long))) { 196 if (bits_per_pixel > (8 * sizeof(unsigned long))) {
196// qDebug ("Can't handle this format DirectColor image -- too many bits per pixel (%d)\n", bits_per_pixel); 197// qDebug ("Can't handle this format DirectColor image -- too many bits per pixel (%d)\n", bits_per_pixel);
197 return NULL; 198 return NULL;
198 } 199 }
199 imagedatastart = palmimage + 24; 200 imagedatastart = palmimage + 24;
200 } else { 201 } else {
201// qDebug("Unknown bits-per-pixel of %d encountered.\n", bits_per_pixel); 202// qDebug("Unknown bits-per-pixel of %d encountered.\n", bits_per_pixel);
202 return NULL; 203 return NULL;
203 } 204 }
204 205
205#ifdef WINDOWS 206#ifndef USEQPE
206 QImage* qimage = new QImage(width, height, 32); 207 QImage* qimage = new QImage(width, height, 32);
207#else 208#else
208 QImage* qimage = new QImage(width, height, 16); 209 QImage* qimage = new QImage(width, height, 16);
209#endif 210#endif
210 211
211 /* row by row, uncompress the Palm image and copy it to the JPEG buffer */ 212 /* row by row, uncompress the Palm image and copy it to the JPEG buffer */
212 rowbuf = new unsigned char[bytes_per_row * width]; 213 rowbuf = new unsigned char[bytes_per_row * width];
213 lastrow = new unsigned char[bytes_per_row * width]; 214 lastrow = new unsigned char[bytes_per_row * width];
214 215
215 for (i=0, palm_ptr = imagedatastart , x_ptr = imagedata; i < height; ++i) { 216 for (i=0, palm_ptr = imagedatastart , x_ptr = imagedata; i < height; ++i) {
216// qDebug("inval:%x palm_ptr:%x x_ptr:%x bpr:%x", inval, palm_ptr, x_ptr, bytes_per_row); 217// qDebug("inval:%x palm_ptr:%x x_ptr:%x bpr:%x", inval, palm_ptr, x_ptr, bytes_per_row);
217 218
218 /* first, uncompress the Palm image */ 219 /* first, uncompress the Palm image */
219 if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_RLE)) { 220 if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_RLE)) {
220 for (j = 0; j < bytes_per_row; ) { 221 for (j = 0; j < bytes_per_row; ) {
221 incount = *palm_ptr++; 222 incount = *palm_ptr++;
222 inval = *palm_ptr++; 223 inval = *palm_ptr++;
223 memset(rowbuf + j, inval, incount); 224 memset(rowbuf + j, inval, incount);
224 j += incount; 225 j += incount;
225 } 226 }
226 } else if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_SCANLINE)) { 227 } else if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_SCANLINE)) {
227 for (j = 0; j < bytes_per_row; j += 8) { 228 for (j = 0; j < bytes_per_row; j += 8) {
228 incount = *palm_ptr++; 229 incount = *palm_ptr++;
229 inval = ((bytes_per_row - j) < 8) ? (bytes_per_row - j) : 8; 230 inval = ((bytes_per_row - j) < 8) ? (bytes_per_row - j) : 8;
230 for (inbit = 0; inbit < inval; inbit += 1) { 231 for (inbit = 0; inbit < inval; inbit += 1) {
231 if (incount & (1 << (7 - inbit))) 232 if (incount & (1 << (7 - inbit)))
232 rowbuf[j + inbit] = *palm_ptr++; 233 rowbuf[j + inbit] = *palm_ptr++;
233 else 234 else
234 rowbuf[j + inbit] = lastrow[j + inbit]; 235 rowbuf[j + inbit] = lastrow[j + inbit];
235 } 236 }
236 } 237 }
237 memcpy (lastrow, rowbuf, bytes_per_row); 238 memcpy (lastrow, rowbuf, bytes_per_row);
238 } else if (((flags & PALM_IS_COMPRESSED_FLAG) && 239 } else if (((flags & PALM_IS_COMPRESSED_FLAG) &&
239 (compression_type == PALM_COMPRESSION_NONE)) || 240 (compression_type == PALM_COMPRESSION_NONE)) ||
240 ((flags & PALM_IS_COMPRESSED_FLAG) == 0)) 241 ((flags & PALM_IS_COMPRESSED_FLAG) == 0))
241 { 242 {
242 memcpy (rowbuf, palm_ptr, bytes_per_row); 243 memcpy (rowbuf, palm_ptr, bytes_per_row);
243 palm_ptr += bytes_per_row; 244 palm_ptr += bytes_per_row;
244 } 245 }
245 else { 246 else {
246 qDebug("Case 4"); 247 qDebug("Case 4");
247 qDebug("Is compressed:%s", ((flags & PALM_IS_COMPRESSED_FLAG) == 0) ? "false" : "true"); 248 qDebug("Is compressed:%s", ((flags & PALM_IS_COMPRESSED_FLAG) == 0) ? "false" : "true");
248 qDebug("Has colourmap:%s", ((flags & PALM_HAS_COLORMAP_FLAG) == 0) ? "false" : "true"); 249 qDebug("Has colourmap:%s", ((flags & PALM_HAS_COLORMAP_FLAG) == 0) ? "false" : "true");
249 qDebug("Has transparency:%s", ((flags & PALM_HAS_TRANSPARENCY_FLAG) == 0) ? "false" : "true"); 250 qDebug("Has transparency:%s", ((flags & PALM_HAS_TRANSPARENCY_FLAG) == 0) ? "false" : "true");
250 qDebug("Direct colour:%s", ((flags & PALM_DIRECT_COLOR_FLAG) == 0) ? "false" : "true"); 251 qDebug("Direct colour:%s", ((flags & PALM_DIRECT_COLOR_FLAG) == 0) ? "false" : "true");
251 qDebug("four byte field:%s", ((flags & PALM_4_BYTE_FIELD_FLAG) == 0) ? "false" : "true"); 252 qDebug("four byte field:%s", ((flags & PALM_4_BYTE_FIELD_FLAG) == 0) ? "false" : "true");
252 memcpy (rowbuf, palm_ptr, bytes_per_row); 253 memcpy (rowbuf, palm_ptr, bytes_per_row);
253 palm_ptr += bytes_per_row; 254 palm_ptr += bytes_per_row;
254 } 255 }
255 /* next, write it to the GDK bitmap */ 256 /* next, write it to the GDK bitmap */
256 if (colormap) { 257 if (colormap) {
257 mask = (1 << bits_per_pixel) - 1; 258 mask = (1 << bits_per_pixel) - 1;
258 for (inbit = 8 - bits_per_pixel, inbyte = rowbuf, j = 0; j < width; ++j) { 259 for (inbit = 8 - bits_per_pixel, inbyte = rowbuf, j = 0; j < width; ++j) {
259 inval = ((*inbyte) & (mask << inbit)) >> inbit; 260 inval = ((*inbyte) & (mask << inbit)) >> inbit;
260 /* correct for oddity of the 8-bit color Palm pixmap... */ 261 /* correct for oddity of the 8-bit color Palm pixmap... */
261 if ((bits_per_pixel == 8) && (inval == 0xFF)) inval = 231; 262 if ((bits_per_pixel == 8) && (inval == 0xFF)) inval = 231;
262 /* now lookup the correct color and set the pixel in the GTK bitmap */ 263 /* now lookup the correct color and set the pixel in the GTK bitmap */
263 QRgb colour = qRgb(colormap[inval].red, colormap[inval].green, colormap[inval].blue); 264 QRgb colour = qRgb(colormap[inval].red, colormap[inval].green, colormap[inval].blue);
264 qimage->setPixel(j, i, colour); 265 qimage->setPixel(j, i, colour);
265 if (!inbit) { 266 if (!inbit) {
266 ++inbyte; 267 ++inbyte;
267 inbit = 8 - bits_per_pixel; 268 inbit = 8 - bits_per_pixel;
268 } else { 269 } else {
269 inbit -= bits_per_pixel; 270 inbit -= bits_per_pixel;
270 } 271 }
271 } 272 }
272 } else if (!colormap && 273 } else if (!colormap &&
273 bits_per_pixel == 16) { 274 bits_per_pixel == 16) {
274 for (inbyte = rowbuf, j = 0; j < width; ++j) { 275 for (inbyte = rowbuf, j = 0; j < width; ++j) {
275 inval = ((unsigned short)inbyte[0] << (unsigned short)8) | inbyte[1]; 276 inval = ((unsigned short)inbyte[0] << (unsigned short)8) | inbyte[1];
276 277
277/* 278/*
278 qDebug ("pixel is %d,%d (%d:%d:%d)", 279 qDebug ("pixel is %d,%d (%d:%d:%d)",
279 j, i, 280 j, i,
280 ((inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1)) << (8-palm_red_bits), 281 ((inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1)) << (8-palm_red_bits),
281 ((inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1)) << (8-palm_green_bits), 282 ((inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1)) << (8-palm_green_bits),
282 ((inval >> 0) & ((1 << palm_blue_bits) - 1)) << (8-palm_blue_bits)); 283 ((inval >> 0) & ((1 << palm_blue_bits) - 1)) << (8-palm_blue_bits));
283*/ 284*/
284 QRgb colour = qRgb( 285 QRgb colour = qRgb(
285 ((inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1)) << (8-palm_red_bits), 286 ((inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1)) << (8-palm_red_bits),
286 ((inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1)) << (8-palm_green_bits), 287 ((inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1)) << (8-palm_green_bits),
287 ((inval >> 0) & ((1 << palm_blue_bits) - 1)) << (8-palm_blue_bits)); 288 ((inval >> 0) & ((1 << palm_blue_bits) - 1)) << (8-palm_blue_bits));
288 qimage->setPixel(j, i, colour); 289 qimage->setPixel(j, i, colour);
289 inbyte += 2; 290 inbyte += 2;
290 } 291 }
291 } 292 }
292 } 293 }
293 294
294 delete [] rowbuf; 295 delete [] rowbuf;
295 delete [] lastrow; 296 delete [] lastrow;
296 297
297 return qimage; 298 return qimage;
298} 299}
299 300
300QImage* hRule(int w, int h, unsigned char r, unsigned char g, unsigned char b) 301QImage* hRule(int w, int h, unsigned char r, unsigned char g, unsigned char b)
301{ 302{
302//// qDebug("hrule [%d, %d]", w, h); 303//// qDebug("hrule [%d, %d]", w, h);
303 QPixmap* qimage = new QPixmap(w, h); 304 QPixmap* qimage = new QPixmap(w, h);
304 qimage->fill(QColor(r,g,b)); 305 qimage->fill(QColor(r,g,b));
305 QImage* ret = new QImage(qimage->convertToImage()); 306 QImage* ret = new QImage(qimage->convertToImage());
306 delete qimage; 307 delete qimage;
307 return ret; 308 return ret;
308} 309}
diff --git a/noncore/apps/opie-reader/Palm2QImage.h b/noncore/apps/opie-reader/Palm2QImage.h
index 3ac2d19..5d327c5 100644
--- a/noncore/apps/opie-reader/Palm2QImage.h
+++ b/noncore/apps/opie-reader/Palm2QImage.h
@@ -1,7 +1,7 @@
1#include <qimage.h> 1#include <qimage.h>
2#include <qpixmap.h> 2#include <qpixmap.h>
3 3
4QImage* Palm2QImage 4QImage* Palm2QImage
5(unsigned char *image_bytes_in, int byte_count_in); 5(unsigned char *image_bytes_in, int byte_count_in);
6 6
7QPixmap* hRule(int w, int h, unsigned char r=0, unsigned char g=0, unsigned char b=0); 7QImage* hRule(int w, int h, unsigned char r=0, unsigned char g=0, unsigned char b=0);
diff --git a/noncore/apps/opie-reader/QFloatBar.h b/noncore/apps/opie-reader/QFloatBar.h
index bc70566..cc98233 100644
--- a/noncore/apps/opie-reader/QFloatBar.h
+++ b/noncore/apps/opie-reader/QFloatBar.h
@@ -1,19 +1,20 @@
1#ifndef __QFLOATBAR_H 1#ifndef __QFLOATBAR_H
2#define __QFLOATBAR_H 2#define __QFLOATBAR_H
3 3
4#include <qtoolbar.h> 4#include <qtoolbar.h>
5#include <qmainwindow.h>
5 6
6class QFloatBar : public QToolBar 7class QFloatBar : public QToolBar
7{ 8{
8 Q_OBJECT 9 Q_OBJECT
9 virtual void hideEvent(QHideEvent* e) 10 virtual void hideEvent(QHideEvent* e)
10 { 11 {
11 /*if (e->spontaneous())*/ emit OnHide(); 12 /*if (e->spontaneous())*/ emit OnHide();
12 } 13 }
13 public: 14 public:
14 QFloatBar(char* t, QMainWindow* mw, QMainWindow::ToolBarDock td, bool f) : QToolBar(t, mw, td, f) {} 15 QFloatBar(char* t, QMainWindow* mw, QMainWindow::ToolBarDock td, bool f) : QToolBar(t, mw, td, f) {}
15 signals: 16 signals:
16 void OnHide(); 17 void OnHide();
17}; 18};
18 19
19#endif 20#endif
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp
index f2ee027..03c8fbe 100644
--- a/noncore/apps/opie-reader/QTReader.cpp
+++ b/noncore/apps/opie-reader/QTReader.cpp
@@ -1,1327 +1,1563 @@
1/**************************************************************************** 1/****************************************************************************
2** $Id$ 2** $Id$
3** 3**
4** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. 4** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
5** 5**
6** This file is part of an example program for Qt. This example 6** This file is part of an example program for Qt. This example
7** program may be used, distributed and modified without limitation. 7** program may be used, distributed and modified without limitation.
8** 8**
9*****************************************************************************/ 9*****************************************************************************/
10 10
11#include "useqpe.h"
11#include <qpainter.h> 12#include <qpainter.h>
13#include <qimage.h>
14#include <qtimer.h>
12#include "config.h" 15#include "config.h"
13#include "QTReader.h" 16#include "QTReader.h"
14#include "QTReaderApp.h" 17#include "QTReaderApp.h"
15#include "CDrawBuffer.h" 18#include "CDrawBuffer.h"
19#ifdef USEQPE
16#include <qpe/qpeapplication.h> 20#include <qpe/qpeapplication.h>
21#endif
17#include <math.h> 22#include <math.h>
18#include <ctype.h> 23#include <ctype.h>
19#include <stdio.h> //for sprintf 24#include <stdio.h> //for sprintf
25#ifdef USEQPE
20#include <qpe/config.h> 26#include <qpe/config.h>
21#include <qpe/applnk.h> 27#include <qpe/applnk.h>
22#include <qfontdatabase.h>
23#include <qpe/global.h> 28#include <qpe/global.h>
24#include <qpe/qcopenvelope_qws.h> 29#include <qpe/qcopenvelope_qws.h>
25#include "StateData.h" 30#endif
31#include <qfontdatabase.h>
26 32
27#ifdef _UNICODE 33#ifdef _UNICODE
28const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; 34const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 };
29#else 35#else
30const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 }; 36const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 };
31#endif 37#endif
32//const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; 38//const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 };
33 39
34//const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 }; 40//const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 };
35//const int QTReader::fontsizes[] = {10,16,17,22,0}; 41//const int QTReader::fontsizes[] = {10,16,17,22,0};
36//const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 }; 42//const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 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}; 43//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};
38 44
45tchar QTReader::pluckernextpart[] = { 'C','l','i','c','k',' ','h','e','r','e',' ','f','o','r',' ','t','h','e',' ','n','e','x','t',' ','p','a','r','t',0 };
46tchar QTReader::jplucknextpart[] = { 'N','e','x','t',' ','P','a','r','t',' ','>','>',0 };
47//tchar QTReader::jplucknextpart[] = { 10,'#',10,'N','e','x','t',' ','P','a','r','t',' ','>','>',0 };
48
39QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : 49QTReader::QTReader( QWidget *parent, const char *name, WFlags f) :
40 QWidget(parent, name, f), 50 QWidget(parent, name, f),
41 m_delay(100), 51 m_delay(100),
42 m_scrolldy1(0), 52 m_scrolldy1(0),
43 m_scrolldy2(0), 53 m_scrolldy2(0),
44 m_autoScroll(false), 54 m_autoScroll(false),
45 //textarray(NULL), 55 //textarray(NULL),
46 //locnarray(NULL), 56 //locnarray(NULL),
47 numlines(0), 57 numlines(0),
48 m_fontname("unifont"), 58 m_fontname("unifont"),
49 m_fm(NULL), 59 m_fm(NULL),
50 mouseUpOn(true), 60 mouseUpOn(true),
51 m_twotouch(true), 61 m_twotouch(true),
52 m_touchone(true), 62 m_touchone(true),
53 bDoUpdates(false), 63 bDoUpdates(false),
54 m_navkeys(true) 64#ifdef _SCROLLPIPE
65 m_pipeout(NULL),
66#endif
67 m_border(2)
55{ 68{
56 m_overlap = 1; 69 m_overlap = 1;
70 setKeyCompression ( true );
57// init(); 71// init();
58} 72}
73
59/* 74/*
60QTReader::QTReader( const QString& filename, QWidget *parent, const tchar *name, WFlags f ) : 75QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0) :
61 QWidget(parent, name, f), 76 QWidget(parent, name, f),
62 m_textfont(0), 77 m_textfont(0),
63 m_textsize(1), 78 m_textsize(1),
64 textarray(NULL), 79 textarray(NULL),
65 numlines(0), 80 numlines(0),
66 bstripcr(true), 81 bstripcr(true),
67 bunindent(false), 82 bunindent(false),
68 brepara(false), 83 brepara(false),
69 bdblspce(false), 84 bdblspce(false),
70 btight(false), 85 btight(false),
71 bindenter(0), 86 bindenter(0),
72 m_fm(NULL) 87 m_fm(NULL)
73{ 88{
74 init(); 89 init();
75 // qDebug("Load_file(1)"); 90// // qDebug("Load_file(1)");
76 load_file((const tchar*)filename); 91 load_file((const tchar*)filename);
77} 92}
78*/ 93*/
79 94
95/*
96void QTReader::mouseMoveEvent(QMouseEvent* _e)
97{
98
99 mouseUpOn = !(_e->pos().x() == -1);
100
101 qDebug("MouseMove:[%d, %d]", _e->pos().x(), _e->pos().y());
102}
103*/
80long QTReader::real_delay() 104long QTReader::real_delay()
81{ 105{
82 return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing ); 106 return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing );
83} 107}
84 108
85void QTReader::mousePressEvent( QMouseEvent* _e ) 109void QTReader::mousePressEvent( QMouseEvent* _e )
86{ 110{
87 buffdoc.unsuspend(); 111 buffdoc.unsuspend();
88 if (_e->button() == RightButton) 112 if (_e->button() == RightButton)
89 { 113 {
114 //qDebug("MousePress");
90 mouseUpOn = false; 115 mouseUpOn = false;
91 if (buffdoc.hasnavigation()) 116 if (m_swapmouse)
92 { 117 {
93 if (_e->y() > (2*height())/3) 118 int lineno = 0;
94 { 119 int ht = textarray[0]->lineSpacing();
95 goDown(); 120 while ((ht < _e->y()) && (lineno < numlines))
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 {
121 buffdoc.saveposn(pagelocate()); 122 ht += textarray[++lineno]->lineSpacing();
122 locate(buffdoc.getHome());
123 } 123 }
124 } 124 size_t startpos, startoffset, tgt;
125 getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt);
126 processmousewordevent(startpos, startoffset, _e, lineno);
127 }
128 else
129 processmousepositionevent(_e);
130 }
131}
132
133void QTReader::processmousepositionevent( QMouseEvent* _e )
134{
135 if (buffdoc.hasnavigation())
136 {
137 if (_e->y() > (2*height())/3)
138 {
139 goDown();
140 }
141 else if (_e->y() < height()/3)
142 {
143 goUp();
125 } 144 }
126 else 145 else
127 { 146 {
128 if (_e->y() > height()/2) 147 if (_e->x() < width()/3)
129 { 148 {
130 goDown(); 149 goBack();
150 }
151 else if (_e->x() > (2*width())/3)
152 {
153 goForward();
131 } 154 }
132 else 155 else
133 { 156 {
134 goUp(); 157 goHome();
135 } 158 }
136 } 159 }
137 } 160 }
161 else
162 {
163 if (_e->y() > height()/2)
164 {
165 goDown();
166 }
167 else
168 {
169 goUp();
170 }
171 }
172}
173
174void QTReader::goHome()
175{
176 if (buffdoc.hasnavigation())
177 {
178 size_t current=pagelocate();
179 size_t home=buffdoc.getHome();
180 if (current!=home)
181 {
182 buffdoc.saveposn(current);
183 locate(home);
184 }
185 }
186}
187
188void QTReader::goBack()
189{
190 if (buffdoc.hasnavigation())
191 {
192 size_t target = pagelocate();
193 buffdoc.writeposn(target);
194 if (buffdoc.back(target))
195 {
196 locate(target);
197 }
198 }
199}
200
201void QTReader::goForward()
202{
203 if (buffdoc.hasnavigation())
204 {
205 size_t target = pagelocate();
206 if (buffdoc.forward(target))
207 {
208 locate(target);
209 }
210 }
138} 211}
139 212
140linkType QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt) 213linkType QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt)
141{ 214{
142 int lineno = 0; 215 int lineno = 0;
143 int ht = textarray[0]->lineSpacing(); 216 int ht = textarray[0]->lineSpacing();
144 while ((ht < y) && (lineno < numlines)) 217 while ((ht < y) && (lineno < numlines))
145 { 218 {
146 ht += textarray[++lineno]->lineSpacing(); 219 ht += textarray[++lineno]->lineSpacing();
147 } 220 }
148 start = locnarray[lineno]; 221 start = locnarray[lineno];
149 if (m_bMonoSpaced) 222 if (m_bMonoSpaced)
150 { 223 {
151 offset = x/m_charWidth; 224 offset = (x - textarray[lineno]->offset(width(), m_border))/m_charWidth;
152 } 225 }
153 else 226 else
154 { 227 {
155 int i; 228 int i;
156 CDrawBuffer* t = textarray[lineno]; 229 CDrawBuffer* t = textarray[lineno];
157 x = x - t->offset(width()); 230 x = x - t->offset(width(), m_border);
158 for (i = t->length(); i >= 0 && t->width(i) > x; i--); 231 for (i = t->length(); i >= 0 && t->width(i, true, width(), m_border) > x; i--);
159 offset = i; 232 offset = i;
160 } 233 }
161 return textarray[lineno]->getLinkType(offset, tgt); 234 return textarray[lineno]->getLinkType(offset, tgt);
162} 235}
163 236
237void QTReader::suspend()
238{
239#ifdef OPIE
240 if (memcmp("/mnt/", m_lastfile.latin1(), 5) == 0) buffdoc.suspend();
241#else
242 if (memcmp("/usr/mnt.rom/", m_lastfile.latin1(), 13) == 0) buffdoc.suspend();
243#endif
244}
245
164void QTReader::setTwoTouch(bool _b) 246void QTReader::setTwoTouch(bool _b)
165{ 247{
166 setBackgroundColor( white ); 248 setBackgroundColor( white );
167 m_twotouch = m_touchone = _b; 249 m_twotouch = m_touchone = _b;
168} 250}
169 251
170void QTReader::setContinuous(bool _b) 252void QTReader::setContinuous(bool _b)
171{ 253{
172 buffdoc.unsuspend(); 254 buffdoc.unsuspend();
173 buffdoc.setContinuous(m_continuousDocument = _b); 255 buffdoc.setContinuous(m_continuousDocument = _b);
174} 256}
175 257
258void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouseEvent* _e, int lineno)
259{
260 QString wrd;
261 if (m_twotouch)
262 {
263 if (m_touchone)
264 {
265 m_touchone = false;
266 m_startpos = startpos;
267 m_startoffset = startoffset;
268 setBackgroundColor( lightGray );
269 }
270 else
271 {
272 m_touchone = true;
273 setBackgroundColor( white );
274 size_t endpos, endoffset;
275 endpos = startpos;
276 endoffset = startoffset;
277 size_t currentpos = locate();
278 if (endpos >= m_startpos)
279 {
280 jumpto(m_startpos);
281 for (int i = 0; i < m_startoffset; i++)
282 {
283 getch();
284 }
285 if (m_startpos == endpos)
286 {
287 for (int i = m_startoffset; i <= endoffset; i++)
288 {
289 wrd += QChar(getch());
290 }
291 }
292 else
293 {
294 while (buffdoc.explocate() <= endpos)
295 {
296 wrd += QChar(getch());
297 }
298 for (int i = 0; i < endoffset; i++)
299 {
300 wrd += QChar(getch());
301 }
302 }
303 jumpto(currentpos);
304 }
305 }
306 }
307 else if (m_bMonoSpaced)
308 {
309 int chno = (_e->x()-textarray[lineno]->offset(width(), m_border))/m_charWidth;
310 if (chno < ustrlen(textarray[lineno]->data()))
311 {
312 wrd[0] = textarray[lineno]->data()[chno];
313 }
314 }
315 else
316 {
317 CDrawBuffer* t = textarray[lineno];
318 int first = 0;
319 int tgt = _e->x() - t->offset(width(), m_border);
320 while (1)
321 {
322 int i = first+1;
323 while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
324 if (t->width(i, true, width(), m_border) > tgt)
325 {
326 wrd = toQString(t->data()+first, i - first);
327 // qDebug("Got %s", (const char *)wrd);
328 break;
329 }
330 while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
331 if ((*t)[i] == 0) break;
332 first = i;
333 }
334 }
335 if (!wrd.isEmpty())
336 {
337 //qDebug("Selected:%s", (const char*)wrd);
338 emit OnWordSelected(wrd, locnarray[lineno], (m_twotouch) ? wrd : toQString(textarray[lineno]->data()));
339 }
340}
341
176void QTReader::mouseReleaseEvent( QMouseEvent* _e ) 342void QTReader::mouseReleaseEvent( QMouseEvent* _e )
177{ 343{
178 buffdoc.unsuspend(); 344 buffdoc.unsuspend();
179 if (_e->button() == LeftButton) 345 if (_e->button() == LeftButton)
180 { 346 {
181 if (mouseUpOn) 347 if (mouseUpOn)
182 { 348 {
349 // qDebug("MouseRelease");
350 if (_e->x() > width() - m_border)
351 {
352 locate(buffdoc.startSection()+((buffdoc.endSection()-buffdoc.startSection())*_e->y()+height()/2)/height());
353 return;
354 }
183 if (textarray[0] != NULL) 355 if (textarray[0] != NULL)
184 { 356 {
185 QString wrd, line; 357 QString line;
186 // int lineno = _e->y()/m_linespacing; 358 // int lineno = _e->y()/m_linespacing;
187 int lineno = 0; 359 int lineno = 0;
188 int ht = textarray[0]->lineSpacing(); 360 int ht = textarray[0]->lineSpacing();
189 while ((ht < _e->y()) && (lineno < numlines)) 361 while ((ht < _e->y()) && (lineno < numlines))
190 { 362 {
191 ht += textarray[++lineno]->lineSpacing(); 363 ht += textarray[++lineno]->lineSpacing();
192 } 364 }
193 size_t startpos, startoffset, tgt; 365 size_t startpos, startoffset, tgt;
194 switch (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt)) 366 switch (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt))
195 { 367 {
196 case eLink: 368 case eLink:
197 { 369 {
198 size_t saveposn = pagelocate(); 370 size_t saveposn = pagelocate();
199 if (buffdoc.hyperlink(tgt)) 371 QString href;
372 linkType lt = buffdoc.hyperlink(tgt, href);
373 if (lt == eLink)
200 { 374 {
201 buffdoc.saveposn(saveposn); 375 buffdoc.saveposn(saveposn);
202 fillbuffer(); 376 fillbuffer();
203 update(); 377 update();
204 } 378 }
205 else 379 else
206 { 380 {
381 if (lt == ePicture)
382 {
383 QImage* pm = buffdoc.getPicture(tgt);
384 if (pm != NULL)
385 {
386 emit OnShowPicture(*pm);
387 delete pm;
388 }
389 }
390 else
391 {
392 // QString anchortext = textarray[lineno]->getanchortext(startoffset);
393 if (!href.isEmpty())
394 {
395 emit OnURLSelected(href);
396 }
397 }
207 locate(pagelocate()); 398 locate(pagelocate());
208 } 399 }
209 return; 400 return;
210 } 401 }
211 case ePicture: 402 case ePicture:
212 { 403 {
213 qDebug("Picture:%x", tgt); 404 // qDebug("Picture:%x", tgt);
214 QPixmap* pm = buffdoc.getPicture(tgt); 405 QImage* pm = buffdoc.getPicture(tgt);
215 if (pm != NULL) 406 if (pm != NULL)
216 { 407 {
217 emit OnShowPicture(*pm); 408 emit OnShowPicture(*pm);
218 delete pm; 409 delete pm;
219 } 410 }
220 else 411 else
221 { 412 {
222 locate(pagelocate()); 413 locate(pagelocate());
223 } 414 }
224 return; 415 return;
225 } 416 }
226 case eNone: 417 case eNone:
227 break; 418 break;
228 default: 419 default:
229 qDebug("Unknown linktype"); 420 // qDebug("Unknown linktype");
230 return; 421 return;
231 } 422 }
232 if (m_twotouch) 423 if (m_swapmouse)
233 { 424 processmousepositionevent(_e);
234 if (m_touchone)
235 {
236 m_touchone = false;
237 m_startpos = startpos;
238 m_startoffset = startoffset;
239 setBackgroundColor( lightGray );
240 }
241 else
242 {
243 m_touchone = true;
244 setBackgroundColor( white );
245 size_t endpos, endoffset;
246 endpos = startpos;
247 endoffset = startoffset;
248 size_t currentpos = locate();
249 if (endpos >= m_startpos)
250 {
251 jumpto(m_startpos);
252 for (int i = 0; i < m_startoffset; i++)
253 {
254 getch();
255 }
256 if (m_startpos == endpos)
257 {
258 for (int i = m_startoffset; i <= endoffset; i++)
259 {
260 wrd += QChar(getch());
261 }
262 }
263 else
264 {
265 while (buffdoc.explocate() <= endpos)
266 {
267 wrd += QChar(getch());
268 }
269 for (int i = 0; i < endoffset; i++)
270 {
271 wrd += QChar(getch());
272 }
273 }
274 jumpto(currentpos);
275 }
276 }
277 }
278 else if (m_bMonoSpaced)
279 {
280 int chno = _e->x()/m_charWidth;
281 if (chno < ustrlen(textarray[lineno]->data()))
282 {
283 wrd[0] = textarray[lineno]->data()[chno];
284 }
285 }
286 else 425 else
287 { 426 processmousewordevent(startpos, startoffset, _e, lineno);
288 CDrawBuffer* t = textarray[lineno];
289 int first = 0;
290 int tgt = _e->x() - t->offset(width());
291 while (1)
292 {
293 int i = first+1;
294 while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
295 if (t->width(i) > tgt)
296 {
297 wrd = toQString(t->data()+first, i - first);
298 break;
299 }
300 while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
301 if ((*t)[i] == 0) break;
302 first = i;
303 }
304 }
305 if (!wrd.isEmpty())
306 {
307 emit OnWordSelected(wrd, locnarray[lineno], (m_twotouch) ? wrd : toQString(textarray[lineno]->data()));
308 }
309 } 427 }
310 } 428 }
311 else 429 else
312 { 430 {
313 mouseUpOn = true; 431 mouseUpOn = true;
314 } 432 }
315 } 433 }
316} 434}
317 435
318void QTReader::focusInEvent(QFocusEvent* e) 436void QTReader::focusInEvent(QFocusEvent* e)
319{ 437{
320 if (m_autoScroll) timer->start(real_delay(), false); 438 if (m_autoScroll) timer->start(real_delay(), false);
321 update(); 439 update();
322} 440}
323 441
324void QTReader::focusOutEvent(QFocusEvent* e) 442void QTReader::focusOutEvent(QFocusEvent* e)
325{ 443{
326 if (m_autoScroll) 444 if (m_autoScroll)
327 { 445 {
328 timer->stop(); 446 timer->stop();
329 m_scrolldy1 = m_scrolldy2 = 0; 447 //m_scrolldy1 = m_scrolldy2 = 0;
330 } 448 }
331} 449}
332 450
333#include <qapplication.h> 451#include <qapplication.h>
334#include <qdrawutil.h> 452#include <qdrawutil.h>
453#ifndef _WINDOWS
335#include <unistd.h> 454#include <unistd.h>
455#endif
336 456
337void QTReader::goDown() 457void QTReader::goDown()
338{ 458{
339 if (m_bpagemode) 459 if (m_bpagemode)
340 { 460 {
341 dopagedn(); 461 dopagedn();
342 } 462 }
343 else 463 else
344 { 464 {
345 lineDown(); 465 lineDown();
346 } 466 }
347} 467}
348 468
349void QTReader::goUp() 469void QTReader::goUp()
350{ 470{
351 if (m_bpagemode) 471 if (m_bpagemode)
352 { 472 {
353 dopageup(); 473 dopageup();
354 } 474 }
355 else 475 else
356 { 476 {
357 lineUp(); 477 lineUp();
358 } 478 }
359} 479}
360 480
361void QTReader::NavUp() 481void QTReader::NavUp()
362{ 482{
363 buffdoc.unsuspend(); 483 buffdoc.unsuspend();
364 if (buffdoc.hasnavigation()) 484 if (buffdoc.hasnavigation())
365 { 485 {
366/* 486/*
367 size_t target = pagelocate(); 487 size_t target = pagelocate();
368 if (buffdoc.back(target)) 488 if (buffdoc.back(target))
369 { 489 {
370 locate(target); 490 locate(target);
371 } 491 }
372*/ 492*/
373 locate(buffdoc.startSection()); 493 locate(buffdoc.startSection());
374 } 494 }
375 else 495 else
376 { 496 {
377 goUp(); 497 goUp();
378 } 498 }
379} 499}
380 500
381void QTReader::NavDown() 501void QTReader::NavDown()
382{ 502{
383 buffdoc.unsuspend(); 503 buffdoc.unsuspend();
384 if (buffdoc.hasnavigation()) 504 if (buffdoc.hasnavigation())
385 { 505 {
386/* 506/*
387 size_t target = pagelocate(); 507 size_t target = pagelocate();
388 if (buffdoc.forward(target)) 508 if (buffdoc.forward(target))
389 { 509 {
390 locate(target); 510 locate(target);
391 } 511 }
392*/ 512*/
393 dopageup(buffdoc.endSection()); 513 dopageup(buffdoc.endSection());
394 } 514 }
395 else 515 else
396 { 516 {
397 goDown(); 517 goDown();
398 } 518 }
399} 519}
400 520
401void QTReader::zoomin() 521void QTReader::zoomin()
402{ 522{
403 if (m_fontControl.increasesize()) 523 if (m_fontControl.increasesize())
404 { 524 {
405 bool sc = m_autoScroll; 525 bool sc = m_autoScroll;
406 setfont(); 526 setfont();
407 m_autoScroll = false; 527 m_autoScroll = false;
408 locate(pagelocate()); 528 locate(pagelocate());
409 update(); 529 update();
410 m_autoScroll = sc; 530 m_autoScroll = sc;
411 if (m_autoScroll) autoscroll(); 531 if (m_autoScroll) autoscroll();
412 } 532 }
413} 533}
414 534
415void QTReader::zoomout() 535void QTReader::zoomout()
416{ 536{
417 if (m_fontControl.decreasesize()) 537 if (m_fontControl.decreasesize())
418 { 538 {
419 bool sc = m_autoScroll; 539 bool sc = m_autoScroll;
420 m_autoScroll = false; 540 m_autoScroll = false;
421 setfont(); 541 setfont();
422 locate(pagelocate()); 542 locate(pagelocate());
423 update(); 543 update();
424 m_autoScroll = sc; 544 m_autoScroll = sc;
425 if (m_autoScroll) autoscroll(); 545 if (m_autoScroll) autoscroll();
426 } 546 }
427} 547}
428 548
549void QTReader::reduceScroll()
550{
551 if (m_delay < 59049)
552 {
553 m_delay = (3*m_delay)/2;
554 timer->changeInterval(real_delay());
555 }
556 else
557 {
558 m_delay = 59049;
559 }
560}
561
562void QTReader::increaseScroll()
563{
564 if (m_delay > 1024)
565 {
566 m_delay = (2*m_delay)/3;
567 timer->changeInterval(real_delay());
568 }
569 else
570 {
571 m_delay = 1024;
572 }
573}
574
429void QTReader::keyPressEvent(QKeyEvent* e) 575void QTReader::keyPressEvent(QKeyEvent* e)
430{ 576{
431 buffdoc.unsuspend(); 577 buffdoc.unsuspend();
578 ((QTReaderApp*)parent()->parent())->handlekey(e);
579// e->ignore();
580 return;
581#ifdef _SCROLLPIPE
582 if (m_isPaused)
583 {
584 m_isPaused = false;
585 if (e->key() != Key_Space)
586 {
587 m_autoScroll = false;
588 if (m_pipeout != NULL)
589 {
590 pclose(m_pipeout);
591 m_pipeout = NULL;
592 }
593 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
594 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
595 }
596 else
597 {
598 timer->start(real_delay(), false);
599 }
600 e->accept();
601 return;
602 }
603#endif
604/*
432 switch (e->key()) 605 switch (e->key())
433 { 606 {
434 case Key_Down: 607 case Key_Down:
435 { 608 {
436 e->accept(); 609 e->accept();
437 if (m_autoScroll) 610 if (m_autoScroll)
438 { 611 {
439 if (m_delay < 59049) 612 if (m_delay < 59049)
440 { 613 {
441 m_delay = (3*m_delay)/2; 614 m_delay = (3*m_delay)/2;
442 timer->changeInterval(real_delay()); 615 timer->changeInterval(real_delay());
443 } 616 }
444 else 617 else
445 { 618 {
446 m_delay = 59049; 619 m_delay = 59049;
447 } 620 }
448 } 621 }
449 else 622 else
450 { 623 {
451 goDown(); 624 goDown();
452 } 625 }
453 } 626 }
454 break; 627 break;
455 case Key_Up: 628 case Key_Up:
456 { 629 {
457 e->accept(); 630 e->accept();
458 if (m_autoScroll) 631 if (m_autoScroll)
459 { 632 {
460 if (m_delay > 1024) 633 if (m_delay > 1024)
461 { 634 {
462 m_delay = (2*m_delay)/3; 635 m_delay = (2*m_delay)/3;
463 timer->changeInterval(real_delay()); 636 timer->changeInterval(real_delay());
464 } 637 }
465 else 638 else
466 { 639 {
467 m_delay = 1024; 640 m_delay = 1024;
468 } 641 }
469 } 642 }
470 else 643 else
471 { 644 {
472 goUp(); 645 goUp();
473 } 646 }
474 } 647 }
475 break; 648 break;
476 /*
477 case Key_Left:
478 {
479 e->accept();
480 if (m_textfont > 0)
481 {
482 m_textfont--;
483 setfont(NULL);
484 locate(pagelocate());
485 update();
486 }
487 }
488 break;
489 case Key_Right:
490 {
491 e->accept();
492 if (fonts[++m_textfont] == 0)
493 {
494 m_textfont--;
495 }
496 else
497 {
498 setfont(NULL);
499 locate(pagelocate());
500 update();
501 }
502 }
503 break;
504 */
505 case Key_Right: 649 case Key_Right:
506 { 650 {
507 e->accept(); 651 e->accept();
508 if (m_navkeys && buffdoc.hasnavigation()) 652 if (m_navkeys && buffdoc.hasnavigation())
509 { 653 {
510 size_t target = pagelocate(); 654 size_t target = pagelocate();
511 if (buffdoc.forward(target)) 655 if (buffdoc.forward(target))
512 { 656 {
513 locate(target); 657 locate(target);
514 } 658 }
515 } 659 }
516 else zoomin(); 660 else zoomin();
517 } 661 }
518 break; 662 break;
519 case Key_Left: 663 case Key_Left:
520 { 664 {
521 e->accept(); 665 e->accept();
522 if (m_navkeys && buffdoc.hasnavigation()) 666 if (m_navkeys && buffdoc.hasnavigation())
523 { 667 {
524 size_t target = pagelocate(); 668 size_t target = pagelocate();
525 if (buffdoc.back(target)) 669 if (buffdoc.back(target))
526 { 670 {
527 locate(target); 671 locate(target);
528 } 672 }
529 } 673 }
530 else zoomout(); 674 else zoomout();
531 } 675 }
532 break; 676 break;
533 case Key_Space:
534 case Key_Return:
535 {
536 e->accept();
537 emit OnActionPressed();
538 }
539 break;
540 default: 677 default:
541 e->ignore(); 678 e->ignore();
542 } 679 }
680*/
543} 681}
544 682
545void QTReader::setautoscroll(bool _sc) 683void QTReader::setautoscroll(bool _sc)
546{ 684{
547 if (_sc == m_autoScroll) return; 685 if (_sc == m_autoScroll) return;
548 if (m_autoScroll) 686 if (m_autoScroll)
549 { 687 {
550 m_autoScroll = false; 688 m_autoScroll = false;
689#ifdef USEQPE
551 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; 690 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
691#endif
692#ifdef _SCROLLPIPE
693 if (m_pipeout != NULL)
694 {
695 pclose(m_pipeout);
696 m_pipeout = NULL;
697 }
698#endif
552 } 699 }
553 else 700 else
554 { 701 {
555 CDrawBuffer* reusebuffer = textarray[numlines]; 702 CDrawBuffer* reusebuffer = textarray[numlines];
556 if (reusebuffer == NULL || reusebuffer->eof()) return; 703 if (reusebuffer == NULL || reusebuffer->eof()) return;
557 m_autoScroll = true; 704 m_autoScroll = true;
705#ifdef _SCROLLPIPE
706 if (!m_pipetarget.isEmpty())
707 {
708 // qDebug("Opening pipe to %s", (const char*)m_pipetarget);
709 m_pipeout = popen((const char*)m_pipetarget, "w");
710 m_isPaused = false;
711 }
712#endif
558 autoscroll(); 713 autoscroll();
714#ifdef USEQPE
559 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed 715 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed
716#endif
560 } 717 }
561} 718}
562 719
563bool QTReader::getline(CDrawBuffer *buff) 720bool QTReader::getline(CDrawBuffer *buff)
564{ 721{
565 buffdoc.unsuspend(); 722 buffdoc.unsuspend();
566 if (m_bMonoSpaced) 723 if (m_bMonoSpaced)
567 { 724 {
568 return buffdoc.getline(buff ,width(), m_charWidth); 725 return buffdoc.getline(buff ,width(), m_charWidth, m_border);
569 } 726 }
570 else 727 else
571 { 728 {
572 return buffdoc.getline(buff, width()); 729 return buffdoc.getline(buff, width(), m_border);
573 } 730 }
574} 731}
575 732
576void QTReader::doscroll() 733void QTReader::doscroll()
577{ 734{
578 if (!m_autoScroll) 735 if (!m_autoScroll)
579 { 736 {
580 timer->stop(); 737 timer->stop();
581 return; 738 return;
582 } 739 }
583// timer->changeInterval(real_delay()); 740// timer->changeInterval(real_delay());
584 QPainter p( this ); 741 QPainter p( this );
585 QBrush b( white); 742 QBrush b( white);
586 bitBlt(this,0,0,this,0,1,width(),-1); 743 bitBlt(this,0,0,this,0,1,width(),-1);
587 qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b); 744 qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b);
588 745
589 if (++m_scrolldy1 == textarray[0]->lineSpacing()) 746 if (++m_scrolldy1 == textarray[0]->lineSpacing())
590 { 747 {
748#ifdef _SCROLLPIPE
749 if (m_pipeout != NULL)
750 {
751 QString outstr = toQString(textarray[0]->data());
752 if (!outstr.isEmpty())
753 {
754 fprintf(m_pipeout, "%s\n", (const char*)outstr);
755 fflush(m_pipeout);
756 }
757 else if (m_pauseAfterEachPara)
758 {
759 m_isPaused = true;
760 timer->stop();
761 }
762 // write(m_pipeout, (const char*)outstr, outstr.length());
763 // write(m_pipeout, "\n", 1);
764 // fputc(10, m_pipeout);
765 }
766#endif
591 CDrawBuffer* buff = textarray[0]; 767 CDrawBuffer* buff = textarray[0];
592 for (int i = 1; i <= numlines; i++) 768 for (int i = 1; i <= numlines; i++)
593 { 769 {
594 textarray[i-1] = textarray[i]; 770 textarray[i-1] = textarray[i];
595 locnarray[i-1] = locnarray[i]; 771 locnarray[i-1] = locnarray[i];
596 } 772 }
597 textarray[numlines] = buff; 773 textarray[numlines] = buff;
598 --numlines; 774 --numlines;
599 m_scrolldy1 = 0; 775 m_scrolldy1 = 0;
600 } 776 }
601 if (++m_scrolldy2 == textarray[numlines]->lineSpacing()) 777 if (++m_scrolldy2 == textarray[numlines]->lineSpacing())
602 { 778 {
603 m_scrolldy2 = 0; 779 m_scrolldy2 = 0;
604 numlines++; 780 numlines++;
605 781
606 if (textarray[numlines] == NULL) 782 if (textarray[numlines] == NULL)
607 { 783 {
608 textarray[numlines] = new CDrawBuffer(&m_fontControl); 784 textarray[numlines] = new CDrawBuffer(&m_fontControl);
609 } 785 }
610 locnarray[numlines] = locate(); 786 locnarray[numlines] = locate();
611 int ch = getline(textarray[numlines]); 787 int ch = getline(textarray[numlines]);
612 textarray[numlines-1]->render(&p, height() - textarray[numlines-1]->descent() - 2, m_bMonoSpaced, m_charWidth, width()); 788 textarray[numlines-1]->render(&p, height() - textarray[numlines-1]->descent() - 2, m_bMonoSpaced, m_charWidth, width(), m_border);
613 mylastpos = locate(); 789 mylastpos = locate();
614 if (!ch) 790 if (!ch)
615 { 791 {
616 m_autoScroll = false; 792 m_autoScroll = false;
793#ifdef _SCROLLPIPE
794 for (int i = 0; i < numlines; i++)
795 {
796 if (m_pipeout != NULL)
797 {
798 QString outstr = toQString(textarray[i]->data());
799 if (!outstr.isEmpty())
800 {
801 fprintf(m_pipeout, "%s\n", (const char*)outstr);
802 fflush(m_pipeout);
803 }
804 }
805 }
806#endif
617 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); 807 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
808#ifdef USEQPE
809 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
810#endif
618 } 811 }
619 emit OnRedraw(); 812 emit OnRedraw();
620 } 813 }
621} 814}
622 815
623void QTReader::autoscroll() 816void QTReader::autoscroll()
624{ 817{
625 timer->start(real_delay(), false); 818 timer->start(real_delay(), false);
626} 819}
627 820
628void QTReader::setfont() 821void QTReader::setfont()
629{ 822{
630// m_fontControl.Change 823// m_fontControl.Change
631 m_charWidth = (m_charpc*m_fontControl.currentsize())/100; 824 m_charWidth = (m_charpc*m_fontControl.currentsize())/100;
632 if (m_charWidth <= 0) m_charWidth = 1; 825 if (m_charWidth <= 0) m_charWidth = 1;
633 m_ascent = m_fontControl.ascent(); 826 m_ascent = m_fontControl.ascent();
634 m_descent = m_fontControl.descent(); 827 m_descent = m_fontControl.descent();
635 m_linespacing = m_fontControl.lineSpacing(); 828 m_linespacing = m_fontControl.lineSpacing();
636} 829}
637 830
638void QTReader::drawFonts( QPainter *p ) 831void QTReader::drawFonts( QPainter *p )
639{ 832{
640 if (bDoUpdates) 833 if (bDoUpdates)
641 { 834 {
642 qDebug("How refreshing..."); 835 //qDebug("How refreshing...");
643 if (buffdoc.empty()) return; 836 if (buffdoc.empty()) return;
644 setfont(); 837 setfont();
645 if (m_lastwidth != width()) 838 if (m_lastwidth != width())
646 { 839 {
647 qDebug("Not Optimised %d", m_lastwidth); 840 // qDebug("Not Optimised %d", m_lastwidth);
648 m_lastwidth = width(); 841 m_lastwidth = width();
649 m_lastheight = height(); 842 m_lastheight = height();
843 buffdoc.setwidth(m_lastwidth-2*m_border);
650 locate(pagelocate()); 844 locate(pagelocate());
651 qDebug("Not Optimised %d", m_lastwidth); 845 // qDebug("Not Optimised %d", m_lastwidth);
652 } 846 }
653 else 847 else
654 { 848 {
655 if (m_lastheight > height()) 849 int newht = height();
850 if (m_lastheight > newht)
656 { 851 {
657 qDebug("Optimised < %d", numlines); 852 // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht);
658 int ypos = 0; 853 int ypos = 0;
659 for (int i = 0; i < numlines; i++) 854 for (int i = 0; i < numlines; i++)
660 { 855 {
661 if ((ypos += textarray[i]->lineSpacing()) > height()) 856 if ((ypos += textarray[i]->lineSpacing()) > newht)
662 { 857 {
663 numlines = i; 858 numlines = i;
664 jumpto(locnarray[i+1]); 859 jumpto(mylastpos = locnarray[i+1]);
665 break; 860 break;
666 } 861 }
667 } 862 }
668 qDebug("Optimised < %d", numlines); 863 // qDebug("Optimised < %d", numlines);
669 m_lastheight = height(); 864 m_lastheight = newht;
670 } 865 }
671 else if (m_lastheight < height()) 866 else if (m_lastheight < newht)
672 { 867 {
673 qDebug("Optimised > %d", numlines); 868 // qDebug("Optimised > %d", numlines);
674 int ypos = 0; 869 int ypos = 0;
675 for (int i = 0; i <= numlines; i++) 870 for (int i = 0; i <= numlines; i++)
676 { 871 {
677 ypos += textarray[i]->lineSpacing(); 872 ypos += textarray[i]->lineSpacing();
678 } 873 }
679 fillbuffer(numlines+1, ypos); 874 fillbuffer(numlines+1, ypos, newht);
680 qDebug("Optimised > %d", numlines); 875 // qDebug("Optimised > %d", numlines);
681 m_lastheight = height();
682 } 876 }
683 if (numlines > 0) 877 if (numlines > 0)
684 { 878 {
685 int ypos = textarray[0]->ascent(); 879 int ypos = textarray[0]->ascent();
686 textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width()); 880 textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_border);
881 // int last = (m_showlast) ? numlines : numlines-1;
882 // for (int i = 1; i <= last; i++)
687 for (int i = 1; i < numlines; i++) 883 for (int i = 1; i < numlines; i++)
688 { 884 {
689 // ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2; 885 // ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2;
690 ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+ 886 ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+
691 (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2; 887 (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2;
692 textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width()); 888 textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_border);
693 } 889 }
694// mylastpos = locate(); 890// mylastpos = locate();
695 } 891 }
696 } 892 }
697 m_scrolldy1 = m_scrolldy2 = 0; 893
894 m_scrolldy1 = m_scrolldy2 = m_scrollpart;
895 if (m_border > 5 && !buffdoc.empty())
896 {
897 p->fillRect(width()-2, 0, 2, height(), cyan);
898 int sectionsize = (buffdoc.endSection()-buffdoc.startSection());
899 int mid = (height()*(locnarray[numlines]+locnarray[0]-2*buffdoc.startSection())+sectionsize)/(2*sectionsize);
900 p->fillRect(width()-2, mid-5, 2, 10, yellow);
901 p->fillRect(width()-2, (height()*(locnarray[0]-buffdoc.startSection())+sectionsize/2)/sectionsize, 2, ((locnarray[numlines]-locnarray[0])*height()+sectionsize/2)/sectionsize, magenta);
902 }
903
698 emit OnRedraw(); 904 emit OnRedraw();
699 } 905 }
906/*
700 else 907 else
701 { 908 {
702 qDebug("Not so refreshing..."); 909 qDebug("Not so refreshing...");
703 } 910 }
911*/
704} 912}
705 913
706QString QTReader::firstword() 914QString QTReader::firstword()
707{ 915{
708 if (m_bMonoSpaced) 916 if (m_bMonoSpaced)
709 { 917 {
710 return toQString(textarray[0]->data()); 918 return toQString(textarray[0]->data());
711 } 919 }
712 else 920 else
713 { 921 {
714 int start, end, len, j; 922 int start, end, len, j;
715 for (j = 0; j < numlines; j++) 923 for (j = 0; j < numlines; j++)
716 { 924 {
717 len = textarray[j]->length(); 925 len = textarray[j]->length();
718 for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++); 926 for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++);
719 if (start < len) break; 927 if (start < len) break;
720 } 928 }
721 if (j < numlines) 929 if (j < numlines)
722 { 930 {
723 QString ret = ""; 931 QString ret = "";
724 for (end = start; end < len && isalpha((*textarray[j])[end]); end++) 932 for (end = start; end < len && isalpha((*textarray[j])[end]); end++)
725 ret += (*textarray[j])[end]; 933 ret += (*textarray[j])[end];
726 if (ret.isEmpty()) ret = "Current position"; 934 if (ret.isEmpty()) ret = "Current position";
727 return ret; 935 return ret;
728 } 936 }
729 else 937 else
730 return "Current position"; 938 return "Current position";
731 } 939 }
732} 940}
733 941
734// 942//
735// Construct the QTReader with buttons. 943// Construct the QTReader with buttons.
736// 944//
737 945
738bool QTReader::ChangeFont(int tgt) 946bool QTReader::ChangeFont(int tgt)
739{ 947{
740 return m_fontControl.ChangeFont(m_fontname, tgt); 948 return m_fontControl.ChangeFont(m_fontname, tgt);
741} 949}
742 950
743void QTReader::init() 951void QTReader::init()
744{ 952{
953// m_showlast = true;
745 // setCaption( "Qt Draw Demo Application" ); 954 // setCaption( "Qt Draw Demo Application" );
746 955
747 buffdoc.unsuspend(); 956 buffdoc.unsuspend();
748 setBackgroundColor( white ); 957 setBackgroundColor( white );
749// QPainter p(this); 958// QPainter p(this);
750// p.setBackgroundMode( Qt::OpaqueMode ); 959// p.setBackgroundMode( Qt::OpaqueMode );
751 buffdoc.setfilter(getfilter()); 960 buffdoc.setfilter(getfilter());
752 ChangeFont(m_textsize); 961 ChangeFont(m_textsize);
753 setFocusPolicy(QWidget::StrongFocus); 962 setFocusPolicy(QWidget::StrongFocus);
754 // resize( 240, 320 ); 963 // resize( 240, 320 );
755 //setFocus(); 964 //setFocus();
756 timer = new QTimer(this); 965 timer = new QTimer(this);
757 connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); 966 connect(timer, SIGNAL(timeout()), this, SLOT(doscroll()));
758// QMessageBox::information(this, "init", m_lastfile, 1); 967// QMessageBox::information(this, "init", m_lastfile, 1);
759 setfont(); 968 setfont();
760/* 969/*
761 if (!m_lastfile.isEmpty()) 970 if (!m_lastfile.isEmpty())
762 { 971 {
763 m_string = DocLnk(m_lastfile).name(); 972 m_string = DocLnk(m_lastfile).name();
764 load_file(m_lastfile); 973 load_file(m_lastfile);
765 } 974 }
766*/ 975*/
767} 976}
768 977
769// 978//
770// Clean up 979// Clean up
771// 980//
772QTReader::~QTReader() 981QTReader::~QTReader()
773{ 982{
983#ifdef USEQPE
984 if (m_autoScroll)
985 {
986 QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
987 }
988#endif
989#ifdef _SCROLLPIPE
990 if (m_pipeout != NULL)
991 {
992 fclose(m_pipeout);
993 }
994#endif
774} 995}
775 996
776// 997//
777// Calls the drawing function as specified by the radio buttons. 998// Calls the drawing function as specified by the radio buttons.
778// 999//
779 1000
780void QTReader::drawIt( QPainter *p ) 1001void QTReader::drawIt( QPainter *p )
781{ 1002{
782 drawFonts(p); 1003 drawFonts(p);
783} 1004}
784 1005
785// 1006//
786// Called when the print button is clicked. 1007// Called when the print button is clicked.
787// 1008//
788/* 1009/*
789void QTReader::printIt() 1010void QTReader::printIt()
790{ 1011{
791#ifndef QT_NO_PRINTER 1012#ifndef QT_NO_PRINTER
792 if ( printer->setup( this ) ) { 1013 if ( printer->setup( this ) ) {
793 QPainter paint; 1014 QPainter paint;
794 if ( !paint.begin( printer ) ) 1015 if ( !paint.begin( printer ) )
795 return; 1016 return;
796 drawIt( &paint ); 1017 drawIt( &paint );
797 } 1018 }
798#endif 1019#endif
799} 1020}
800*/ 1021*/
801// 1022//
802// Called when the widget needs to be updated. 1023// Called when the widget needs to be updated.
803// 1024//
804 1025
805void QTReader::paintEvent( QPaintEvent * ) 1026void QTReader::paintEvent( QPaintEvent * )
806{ 1027{
807 QPainter paint( this ); 1028 QPainter paint( this );
808 drawIt( &paint ); 1029 drawIt( &paint );
809} 1030}
810 1031
811// 1032//
812// Called when the widget has been resized. 1033// Called when the widget has been resized.
813// Moves the button group to the upper right corner 1034// Moves the button group to the upper right corner
814// of the widget. 1035// of the widget.
815 1036
816/* 1037/*
817void QTReader::resizeEvent( QResizeEvent * ) 1038void QTReader::resizeEvent( QResizeEvent * )
818{ 1039{
819 // qDebug("resize:(%u,%u)", width(), height()); 1040// // qDebug("resize:(%u,%u)", width(), height());
820 // bgroup->move( width()-bgroup->width(), 0 ); 1041 // bgroup->move( width()-bgroup->width(), 0 );
821} 1042}
822*/ 1043*/
823 1044
824// 1045//
825// Create and display our widget. 1046// Create and display our widget.
826// 1047//
827/* 1048/*
828int main( int argc, tchar **argv ) 1049int main( int argc, tchar **argv )
829{ 1050{
830 QApplication app( argc, argv ); 1051 QApplication app( argc, argv );
831 QTReader draw; 1052 QTReader draw;
832 app.setMainWidget( &draw ); 1053 app.setMainWidget( &draw );
833 draw.setCaption("Qt Example - Drawdemo"); 1054 draw.setCaption("Qt Example - Drawdemo");
834 draw.show(); 1055 draw.show();
835 return app.exec(); 1056 return app.exec();
836} 1057}
837*/ 1058*/
838 1059
839 1060
840bool QTReader::locate(unsigned long n) { 1061bool QTReader::locate(unsigned long n) {
841 //printf("Locate\n"); 1062 //printf("Locate\n");
842 buffdoc.unsuspend(); 1063 buffdoc.unsuspend();
843 buffdoc.locate(n); 1064 buffdoc.locate(n);
844 // qDebug("&buffdoc.located"); 1065// // qDebug("&buffdoc.located");
845 fillbuffer(); 1066 fillbuffer();
846 // qDebug("&Buffer filled"); 1067// // qDebug("&Buffer filled");
847 update(); 1068 update();
848 // qDebug("&Located"); 1069// // qDebug("&Located");
849 return true; 1070 return true;
850} 1071}
851 1072
852unsigned int QTReader::screenlines() 1073unsigned int QTReader::screenlines()
853{ 1074{
854 // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; 1075 // int linespacing = (tight) ? m_ascent : m_ascent+m_descent;
855 // return (height()-m_descent)/(m_linespacing); 1076 // return (height()-m_descent)/(m_linespacing);
856 return (height()-2)/(m_linespacing); 1077 return (height()-2)/(m_linespacing);
857}; 1078};
858 1079
859bool QTReader::fillbuffer(int reuse, int ht) 1080bool QTReader::fillbuffer(int reuse, int ht, int newht)
860{ 1081{
861 buffdoc.unsuspend(); 1082 buffdoc.unsuspend();
862 if (buffdoc.empty()) return false; 1083 if (buffdoc.empty()) return false;
863 m_scrolldy1 = m_scrolldy2 = 0; 1084 if (newht < 0)
1085 m_lastheight = height();
1086 else
1087 m_lastheight = newht;
864 int ch; 1088 int ch;
865 bool ret = false; 1089 bool ret = false;
866 unsigned int oldpagepos = locnarray[reuse]; 1090 unsigned int oldpagepos = locnarray[reuse];
867 int ypos = ht; 1091 int lastypos = ht, ypos = ht;
868 numlines = reuse; 1092 numlines = reuse;
869 while (ypos < height() || numlines < 2) 1093 while (ypos < m_lastheight || numlines < 2)
870 { 1094 {
1095 lastypos = ypos;
871 if (textarray[numlines] == NULL) 1096 if (textarray[numlines] == NULL)
872 { 1097 {
873 textarray[numlines] = new CDrawBuffer(&m_fontControl); 1098 textarray[numlines] = new CDrawBuffer(&m_fontControl);
874 } 1099 }
875 locnarray[numlines] = locate(); 1100 locnarray[numlines] = locate();
876 int ch = getline(textarray[numlines]); 1101 int ch = getline(textarray[numlines]);
877 ypos += textarray[numlines]->lineSpacing(); 1102 ypos += textarray[numlines]->lineSpacing();
878 numlines++; 1103 numlines++;
879 if (!ch) 1104 if (!ch)
880 { 1105 {
881 if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/) 1106 if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/)
882 { 1107 {
883 locate(oldpagepos); 1108 locate(oldpagepos);
884 return false; 1109 return false;
885 } 1110 }
886 else 1111 else
887 { 1112 {
888 --numlines; 1113 --numlines;
889 mylastpos = locate(); 1114 mylastpos = locate();
890 return true; 1115 return true;
891 } 1116 }
892 } 1117 }
893 } 1118 }
894 1119
895 --numlines; 1120 --numlines;
896 mylastpos = locate(); 1121 mylastpos = locate();
1122 m_scrolldy1 = m_scrolldy2 = m_scrollpart = m_lastheight - lastypos;
897 1123
898 return true; 1124 return true;
899} 1125}
900 1126
901
902void QTReader::dopagedn() 1127void QTReader::dopagedn()
903{ 1128{
1129// qDebug("HEIGHT(2):%d", m_lastheight);
904 buffdoc.unsuspend(); 1130 buffdoc.unsuspend();
905 int skip = 0, ypos = 0; 1131 int skip = 0, ypos = 0;
906 if (locate() != mylastpos) 1132 if (locate() != mylastpos)
907 { 1133 {
908 //qDebug("Jumping to %u", mylastpos); 1134 ////qDebug("Jumping to %u", mylastpos);
909 jumpto(mylastpos); 1135 jumpto(mylastpos);
910 } 1136 }
911 CDrawBuffer* reusebuffer = textarray[numlines]; 1137 CDrawBuffer* reusebuffer = textarray[numlines];
912 if (reusebuffer != NULL && reusebuffer->eof()) return; 1138 if (reusebuffer != NULL && reusebuffer->eof()) return;
913 if (reusebuffer != NULL) 1139 if (reusebuffer != NULL)
914 { 1140 {
915 for (int i = 0; i <= m_overlap; i++) 1141 for (int i = 0; i <= m_overlap; i++)
916 { 1142 {
917 int offset = numlines - m_overlap + i; 1143 int offset = numlines - m_overlap + i;
918 reusebuffer = textarray[offset]; 1144 reusebuffer = textarray[offset];
919 size_t reuselocn = locnarray[offset]; 1145 size_t reuselocn = locnarray[offset];
920 textarray[offset] = textarray[i]; 1146 textarray[offset] = textarray[i];
921 textarray[i] = reusebuffer; 1147 textarray[i] = reusebuffer;
922 // reusebuffer->empty(); 1148 // reusebuffer->empty();
923 locnarray[offset] = locnarray[i]; 1149 locnarray[offset] = locnarray[i];
924 locnarray[i] = reuselocn; 1150 locnarray[i] = reuselocn;
925 ypos += textarray[i]->lineSpacing(); 1151 ypos += textarray[i]->lineSpacing();
926 skip++; 1152 skip++;
927 } 1153 }
928 } 1154 }
929 if (fillbuffer(skip, ypos)) 1155 if (fillbuffer(skip, ypos))
930 { 1156 {
931 update(); 1157 update();
932 } 1158 }
933} 1159}
934 1160
935void QTReader::dopageup() 1161void QTReader::dopageup()
936{ 1162{
937 buffdoc.unsuspend(); 1163 buffdoc.unsuspend();
938 dopageup(locnarray[(m_overlap < numlines) ? m_overlap : numlines/2]); 1164 dopageup(locnarray[(m_overlap < numlines) ? m_overlap : numlines/2]);
939} 1165}
940 1166
1167bool QTReader::synch(size_t start, size_t end)
1168{
1169 jumpto(start);
1170 while (start++ < end)
1171 {
1172 tchar ch = getch();
1173 if (ch == 10) return true;
1174 if (ch == UEOF) return false;
1175 }
1176 return false;
1177}
1178
941void QTReader::dopageup(unsigned int target) 1179void QTReader::dopageup(unsigned int target)
942{ 1180{
943 buffdoc.unsuspend(); 1181 buffdoc.unsuspend();
944 CBufferFace<CDrawBuffer*> buff; 1182 CBufferFace<CDrawBuffer*> buff;
945 CBufferFace<size_t> loc; 1183 CBufferFace<size_t> loc;
946 1184
947 size_t delta, guess = 2048; 1185 size_t delta, guess = 2*(locate()-pagelocate()), lastdelta = 0;
948 bool ch = true; 1186 bool ch = true;
949 int nbfl, ypos = 0; 1187 int nbfl, ypos = 0;
950 1188 if (guess < 128) guess = 128;
951 while (1) 1189 while (1)
952 { 1190 {
953 ch = true; 1191 ch = true;
954 nbfl = 0;
955 if (target < guess) 1192 if (target < guess)
956 { 1193 {
957 delta = 0; // 0 is a flag to say don't guess any more 1194 delta = 0; // 0 is a flag to say don't guess any more
958 jumpto( (m_continuousDocument) ? 0 : buffdoc.startSection() ); 1195 jumpto( (m_continuousDocument) ? 0 : buffdoc.startSection() );
959 } 1196 }
960 else if (!m_continuousDocument && (target - guess < buffdoc.startSection())) 1197 else if (!m_continuousDocument && (target - guess < buffdoc.startSection()))
961 { 1198 {
962 delta = 0; // 0 is a flag to say don't guess any more 1199 delta = 0; // 0 is a flag to say don't guess any more
963 jumpto(buffdoc.startSection()); 1200 jumpto(buffdoc.startSection());
964 } 1201 }
965 else 1202 else
966 { 1203 {
967 delta = guess; 1204 delta = guess;
968 1205 if (!synch(target-delta, target-lastdelta))
969 jumpto(target - delta);
970
971 buff[0] = new CDrawBuffer(&m_fontControl);
972
973 do
974 { 1206 {
975 1207 lastdelta = delta;
976 if (!getline(buff[0])) break; 1208 if (guess < 4000)
977 1209 {
978 if (locate() > target) break; 1210 guess <<= 1;
1211 continue;
1212 }
1213 else
1214 {
1215 jumpto(target-delta);
1216 }
979 } 1217 }
980 while (!buffdoc.iseol());
981 } 1218 }
982 1219
1220 nbfl = 0;
983 ypos = 0; 1221 ypos = 0;
1222
984 while (locate() < target) 1223 while (locate() < target)
985 { 1224 {
986 if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); 1225 if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl);
987 loc[nbfl] = locate(); 1226 loc[nbfl] = locate();
988 ch = getline(buff[nbfl]); 1227 ch = getline(buff[nbfl]);
989 ypos += buff[nbfl]->lineSpacing(); 1228 ypos += buff[nbfl]->lineSpacing();
990 nbfl++; 1229 nbfl++;
991 if (!ch) break; 1230 if (!ch) break;
992 } 1231 }
993 if (ypos < height() && (delta != 0)) 1232 if (guess < 4000 && ypos < height() && (delta != 0))
994 { 1233 {
995 for (int i = 0; i < nbfl; i++) 1234 for (int i = 0; i < nbfl; i++)
996 { 1235 {
997 delete buff[i]; 1236 delete buff[i];
998 buff[i] = NULL; 1237 buff[i] = NULL;
999 } 1238 }
1000 guess <<= 1; 1239 guess <<= 1;
1001 continue; 1240 continue;
1002 } 1241 }
1003 break; 1242 break;
1004 } 1243 }
1005 if (ch) 1244 if (ch)
1006 { 1245 {
1007 if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); 1246 if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl);
1008 loc[nbfl] = locate(); 1247 loc[nbfl] = locate();
1009 int ch = getline(buff[nbfl]); 1248 int ch = getline(buff[nbfl]);
1010 nbfl++; 1249 nbfl++;
1011 } 1250 }
1251/*
1012 ypos = 0; 1252 ypos = 0;
1013 numlines = 0; 1253 numlines = 0;
1014 while (ypos < height() && numlines <= nbfl-1) 1254 while (ypos < height() && numlines <= nbfl-1)
1015 { 1255 {
1016 ypos += buff[nbfl - numlines - 1]->lineSpacing(); 1256 ypos += buff[nbfl - numlines - 1]->lineSpacing();
1017 numlines++; 1257 numlines++;
1018 } 1258 }
1019 --numlines; 1259 --numlines;
1260*/
1261
1262 ypos = 0;
1263 numlines = 0;
1264 while (ypos < height() && numlines+2 <= nbfl)
1265 {
1266 ypos += buff[nbfl - numlines - 2]->lineSpacing();
1267 numlines++;
1268 }
1269 if (numlines > 0) --numlines;
1270 if (numlines == 0 && nbfl > 1) numlines = 1;
1271
1020 int offset = nbfl-1; 1272 int offset = nbfl-1;
1021 offset -= numlines; 1273 offset -= numlines;
1022 ypos = 0; 1274 ypos = 0;
1023 for (int i = 0; i <= numlines; i++) 1275 for (int i = 0; i <= numlines; i++)
1024 { 1276 {
1025 delete textarray[i]; 1277 delete textarray[i];
1026 textarray[i] = buff[offset+i]; 1278 textarray[i] = buff[offset+i];
1027 locnarray[i] = loc[offset + i]; 1279 locnarray[i] = loc[offset + i];
1028 ypos += textarray[i]->lineSpacing(); 1280 ypos += textarray[i]->lineSpacing();
1029 } 1281 }
1282#ifdef _WINDOWS
1283 for (i = 0; i < nbfl - numlines - 1; i++)
1284#else
1030 for (int i = 0; i < nbfl - numlines - 1; i++) 1285 for (int i = 0; i < nbfl - numlines - 1; i++)
1286#endif
1031 { 1287 {
1032 delete buff[i]; 1288 delete buff[i];
1033 } 1289 }
1034 1290
1035 while (ypos < height()) 1291 while (ypos < height())
1036 { 1292 {
1037 numlines++; 1293 numlines++;
1038 locnarray[numlines] = locate(); 1294 locnarray[numlines] = locate();
1039 if (textarray[numlines] == NULL) textarray[numlines] = new CDrawBuffer(&m_fontControl); 1295 if (textarray[numlines] == NULL) textarray[numlines] = new CDrawBuffer(&m_fontControl);
1040 if (!getline(textarray[numlines])) break; 1296 if (!getline(textarray[numlines])) break;
1041 ypos += textarray[numlines]->lineSpacing(); 1297 ypos += textarray[numlines]->lineSpacing();
1042 } 1298 }
1043 1299
1044 mylastpos = locate(); 1300 mylastpos = locate();
1045 1301
1046 update(); 1302 update();
1047} 1303}
1048 1304
1049bool QTReader::load_file(const char *newfile, unsigned int _lcn) 1305bool QTReader::load_file(const char *newfile, unsigned int _lcn)
1050{ 1306{
1051// QMessageBox::information(this, "Name", name, 1); 1307// QMessageBox::information(this, "Name", name, 1);
1052// QMessageBox::information(this, "load_file", newfile, 1); 1308// QMessageBox::information(this, "load_file", newfile, 1);
1053 1309
1054 bool bRC = false; 1310 bool bRC = false;
1055 unsigned int lcn = _lcn; 1311 unsigned int lcn = _lcn;
1056 if (m_lastfile == newfile) 1312 if (m_lastfile == newfile)
1057 { 1313 {
1058 lcn = m_lastposn; 1314 lcn = m_lastposn;
1059 } 1315 }
1060 m_lastfile = newfile;
1061 // QMessageBox::information(0, "Opening...", newfile); 1316 // QMessageBox::information(0, "Opening...", newfile);
1062 m_lastwidth = width(); 1317 m_lastwidth = width();
1063 m_lastheight = height(); 1318 m_lastheight = height();
1064 if (buffdoc.openfile(this,newfile) == 0) 1319 if (buffdoc.openfile(this,newfile) == 0)
1065 { 1320 {
1321 m_lastfile = newfile;
1322 buffdoc.setwidth(m_lastwidth-2*m_border);
1066 bRC = true; 1323 bRC = true;
1067 buffdoc.setContinuous(m_continuousDocument); 1324 buffdoc.setContinuous(m_continuousDocument);
1068 // qDebug("buffdoc.openfile done"); 1325// // qDebug("buffdoc.openfile done");
1069 locate(lcn); 1326 locate(lcn);
1070 // qDebug("buffdoc.locate done"); 1327// // qDebug("buffdoc.locate done");
1071 } 1328 }
1072 setfilter(getfilter()); 1329 setfilter(getfilter());
1073 update(); 1330 update();
1074 // qDebug("Updated"); 1331// // qDebug("Updated");
1075 return bRC; 1332 return bRC;
1076} 1333}
1077 1334
1078void QTReader::lineDown() 1335void QTReader::lineDown()
1079{ 1336{
1080 int ypos = 0; 1337 int ypos = 0;
1081 int offset = numlines; 1338 int offset = numlines;
1082 1339
1083 for (int i = 0; i <= numlines; i++) 1340 for (int i = 0; i <= numlines; i++)
1084 { 1341 {
1085 if ((ypos += textarray[numlines-i]->lineSpacing()) > height()) 1342 if ((ypos += textarray[numlines-i]->lineSpacing()) > height())
1086 { 1343 {
1087 offset = i-1; 1344 offset = i-1;
1088 break; 1345 break;
1089 } 1346 }
1090 } 1347 }
1091 offset = numlines - offset; 1348 offset = numlines - offset;
1349#ifdef _WINDOWS
1350 for (i = offset; i <= numlines; i++)
1351#else
1092 for (int i = offset; i <= numlines; i++) 1352 for (int i = offset; i <= numlines; i++)
1353#endif
1093 { 1354 {
1094 CDrawBuffer* buff = textarray[i-offset]; 1355 CDrawBuffer* buff = textarray[i-offset];
1095 textarray[i-offset] = textarray[i]; 1356 textarray[i-offset] = textarray[i];
1096 locnarray[i-offset] = locnarray[i]; 1357 locnarray[i-offset] = locnarray[i];
1097 textarray[i] = buff; 1358 textarray[i] = buff;
1098 } 1359 }
1099 numlines = numlines - offset + 1; 1360 numlines = numlines - offset + 1;
1100 locnarray[numlines] = locate(); 1361 locnarray[numlines] = locate();
1101 if (textarray[numlines] == NULL) 1362 if (textarray[numlines] == NULL)
1102 { 1363 {
1103 textarray[numlines] = new CDrawBuffer(&m_fontControl); 1364 textarray[numlines] = new CDrawBuffer(&m_fontControl);
1104 } 1365 }
1105 getline(textarray[numlines]); 1366 getline(textarray[numlines]);
1106 mylastpos = locate(); 1367 mylastpos = locate();
1107 update(); 1368 update();
1108} 1369}
1109/* 1370/*
1110void QTReader::lineUp() 1371void QTReader::lineUp()
1111{ 1372{
1112 CBuffer** buff = textarray; 1373 CBuffer** buff = textarray;
1113 unsigned int *loc = new unsigned int[numlines]; 1374 unsigned int *loc = new unsigned int[numlines];
1114 int cbptr = 0; 1375 int cbptr = 0;
1115 if (locate() != mylastpos) jumpto(mylastpos); 1376 if (locate() != mylastpos) jumpto(mylastpos);
1116 unsigned int target = locnarray[numlines-1]; 1377 unsigned int target = locnarray[numlines-1];
1117 if (buffdoc.hasrandomaccess()) 1378 if (buffdoc.hasrandomaccess())
1118 { 1379 {
1119 unsigned int delta = locate()-pagelocate(); 1380 unsigned int delta = locate()-pagelocate();
1120 if (delta < 64) delta = 64; 1381 if (delta < 64) delta = 64;
1121 do 1382 do
1122 { 1383 {
1123 delta <<= 1; 1384 delta <<= 1;
1124 if (delta >= target) 1385 if (delta >= target)
1125 { 1386 {
1126 delta = target; 1387 delta = target;
1127 jumpto(0); 1388 jumpto(0);
1128 for (int i = 0; i < numlines; i++) 1389 for (int i = 0; i < numlines; i++)
1129 { 1390 {
1130 loc[i] = locate(); 1391 loc[i] = locate();
1131 getline(buff[i]); 1392 getline(buff[i]);
1132 } 1393 }
1133 break; 1394 break;
1134 } 1395 }
1135 jumpto(target-delta); 1396 jumpto(target-delta);
1136 do 1397 do
1137 { 1398 {
1138 buffdoc.getline(buff[0],width()); 1399 buffdoc.getline(buff[0],width());
1139#ifdef WS 1400#ifdef WS
1140 //printf("Trying:%s\n",buff[0]); 1401 //printf("Trying:%s\n",buff[0]);
1141#endif 1402#endif
1142 if (locate() > target) continue; 1403 if (locate() > target) continue;
1143 } 1404 }
1144 while (!buffdoc.iseol()); 1405 while (!buffdoc.iseol());
1145 for (int i = 0; i < numlines; i++) 1406 for (int i = 0; i < numlines; i++)
1146 { 1407 {
1147 loc[i] = locate(); 1408 loc[i] = locate();
1148 buffdoc.getline(buff[i],width()); 1409 buffdoc.getline(buff[i],width());
1149#ifdef WS 1410#ifdef WS
1150 //printf("Filling:%s\n",buff[i]); 1411 //printf("Filling:%s\n",buff[i]);
1151#endif 1412#endif
1152 } 1413 }
1153 } 1414 }
1154 while (locate() >= target && delta < 4096); 1415 while (locate() >= target && delta < 4096);
1155#ifdef WS 1416#ifdef WS
1156 //printf("Delta:%u\n",delta); 1417 //printf("Delta:%u\n",delta);
1157#endif 1418#endif
1158 } 1419 }
1159 else 1420 else
1160 { 1421 {
1161 jumpto(0); 1422 jumpto(0);
1162 for (int i = 0; i < numlines; i++) 1423 for (int i = 0; i < numlines; i++)
1163 { 1424 {
1164 loc[i] = locate(); 1425 loc[i] = locate();
1165 buffdoc.getline(buff[i],width()); 1426 buffdoc.getline(buff[i],width());
1166 } 1427 }
1167 } 1428 }
1168 cbptr = 0; 1429 cbptr = 0;
1169 while (locate() < target) 1430 while (locate() < target)
1170 { 1431 {
1171 loc[cbptr] = locate(); 1432 loc[cbptr] = locate();
1172 buffdoc.getline(buff[cbptr], width()); 1433 buffdoc.getline(buff[cbptr], width());
1173#ifdef WS 1434#ifdef WS
1174 //printf("Adding:%s\n",buff[cbptr]->data()); 1435 //printf("Adding:%s\n",buff[cbptr]->data());
1175#endif 1436#endif
1176 cbptr = (cbptr+1) % numlines; 1437 cbptr = (cbptr+1) % numlines;
1177 } 1438 }
1178 pagepos = loc[cbptr]; 1439 pagepos = loc[cbptr];
1179 textarray = new CBuffer*[numlines]; 1440 textarray = new CBuffer*[numlines];
1180 for (int i = 0; i < numlines; i++) 1441 for (int i = 0; i < numlines; i++)
1181 { 1442 {
1182 int j = (cbptr+i)%numlines; 1443 int j = (cbptr+i)%numlines;
1183 textarray[i] = buff[j]; 1444 textarray[i] = buff[j];
1184 locnarray[i] = loc[j]; 1445 locnarray[i] = loc[j];
1185 } 1446 }
1186 delete [] buff; 1447 delete [] buff;
1187 delete [] loc; 1448 delete [] loc;
1188 mylastpos = locate(); 1449 mylastpos = locate();
1189 update(); 1450 update();
1190} 1451}
1191*/ 1452*/
1192void QTReader::lineUp() 1453void QTReader::lineUp()
1193{ 1454{
1194 buffdoc.unsuspend(); 1455 buffdoc.unsuspend();
1195 CDrawBuffer* buff = textarray[numlines]; 1456 CDrawBuffer* buff = textarray[numlines];
1196 unsigned int loc; 1457 unsigned int loc;
1197 unsigned int end = locnarray[numlines]; 1458 unsigned int end = locnarray[numlines];
1198 int cbptr = 0; 1459 int cbptr = 0;
1199 if (locate() != mylastpos) jumpto(mylastpos); 1460 if (locate() != mylastpos) jumpto(mylastpos);
1200 unsigned int target = locnarray[0]; 1461 unsigned int target = locnarray[0];
1201 if (target == 0) return; 1462 if (target == 0) return;
1202 if (!m_continuousDocument && (target == buffdoc.startSection())) return; 1463 if (!m_continuousDocument && (target == buffdoc.startSection())) return;
1203 if (buffdoc.hasrandomaccess()) 1464 if (buffdoc.hasrandomaccess())
1204 { 1465 {
1205 unsigned int delta = locate()-pagelocate(); 1466 unsigned int delta = locate()-pagelocate();
1206 if (delta < 64) delta = 64; 1467 if (delta < 64) delta = 64;
1207 do 1468 do
1208 { 1469 {
1209 delta <<= 1; 1470 delta <<= 1;
1210 if (delta >= target) 1471 if (delta >= target)
1211 { 1472 {
1212 delta = target; 1473 delta = target;
1213 jumpto(0); 1474 jumpto(0);
1214 loc = locate(); 1475 loc = locate();
1215 getline(buff); 1476 getline(buff);
1216 break; 1477 break;
1217 } 1478 }
1218 else if (!m_continuousDocument && (target - delta < buffdoc.startSection())) 1479 else if (!m_continuousDocument && (target - delta < buffdoc.startSection()))
1219 { 1480 {
1220 delta = target-buffdoc.startSection(); 1481 delta = target-buffdoc.startSection();
1221 jumpto(buffdoc.startSection()); 1482 jumpto(buffdoc.startSection());
1222 loc = locate(); 1483 loc = locate();
1223 getline(buff); 1484 getline(buff);
1224 break; 1485 break;
1225 } 1486 }
1226 jumpto(target-delta); 1487 jumpto(target-delta);
1227 do 1488 do
1228 { 1489 {
1229 getline(buff); 1490 getline(buff);
1230#ifdef WS 1491#ifdef WS
1231 //printf("Trying:%s\n",buff[0]); 1492 //printf("Trying:%s\n",buff[0]);
1232#endif 1493#endif
1233 if (locate() > target) continue; 1494 if (locate() > target) continue;
1234 } 1495 }
1235 while (!buffdoc.iseol()); 1496 while (!buffdoc.iseol());
1236 loc = locate(); 1497 loc = locate();
1237 getline(buff); 1498 getline(buff);
1238 } 1499 }
1239 while (locate() >= target && delta < 4096); 1500 while (locate() >= target && delta < 4096);
1240 } 1501 }
1241 else 1502 else
1242 { 1503 {
1243 jumpto(0); 1504 jumpto(0);
1244 loc = locate(); 1505 loc = locate();
1245 getline(buff); 1506 getline(buff);
1246 } 1507 }
1247 cbptr = 0; 1508 cbptr = 0;
1248 while (locate() < target) 1509 while (locate() < target)
1249 { 1510 {
1250 loc = locate(); 1511 loc = locate();
1251 getline(buff); 1512 getline(buff);
1252 } 1513 }
1253 for (int i = numlines; i > 0; i--) 1514 for (int i = numlines; i > 0; i--)
1254 { 1515 {
1255 textarray[i] = textarray[i-1]; 1516 textarray[i] = textarray[i-1];
1256 locnarray[i] = locnarray[i-1]; 1517 locnarray[i] = locnarray[i-1];
1257 } 1518 }
1258 textarray[0] = buff; 1519 textarray[0] = buff;
1259 locnarray[0] = loc; 1520 locnarray[0] = loc;
1260 int start = numlines; 1521 int start = numlines;
1261 int ypos = 0; 1522 int ypos = 0;
1262 for (int i = 0; i <= numlines; i++) 1523#ifdef _WINDOWS
1524 for (i = 0; i <= numlines; i++)
1525#else
1526 for (int i = 0; i <= numlines; i++)
1527#endif
1263 { 1528 {
1264 ypos += textarray[i]->lineSpacing(); 1529 ypos += textarray[i]->lineSpacing();
1265 if (ypos > height()) 1530 if (ypos > height())
1266 { 1531 {
1267 start = i; 1532 start = i;
1268 ypos -= textarray[i]->lineSpacing(); 1533 ypos -= textarray[i]->lineSpacing();
1269 break; 1534 break;
1270 } 1535 }
1271 } 1536 }
1272 jumpto(locnarray[start]); 1537 jumpto(locnarray[start]);
1273 fillbuffer(start, ypos); 1538 fillbuffer(start, ypos);
1274 update(); 1539 update();
1275} 1540}
1276 1541
1277bool QTReader::empty() 1542bool QTReader::empty()
1278{ 1543{
1279 return buffdoc.empty(); 1544 return buffdoc.empty();
1280} 1545}
1281 1546
1282MarkupType QTReader::PreferredMarkup() 1547MarkupType QTReader::PreferredMarkup()
1283{ 1548{
1284 MarkupType m = buffdoc.PreferredMarkup(); 1549 MarkupType m = buffdoc.PreferredMarkup();
1285 if (m == cTEXT) 1550 if (m == cTEXT)
1286 { 1551 {
1287 int ext = m_lastfile.findRev('.'); 1552 int ext = m_lastfile.findRev('.');
1288 if (ext >= 0) 1553 if (ext >= 0)
1289 { 1554 {
1290 QString ft = m_lastfile.right(m_lastfile.length()-ext-1).upper(); 1555 QString ft = m_lastfile.right(m_lastfile.length()-ext-1).upper();
1291 if (ft.left(3) == "HTM") 1556 if (ft.left(3) == "HTM")
1292 { 1557 {
1293 m = cHTML; 1558 m = cHTML;
1294 } 1559 }
1295 } 1560 }
1296 } 1561 }
1297 return m; 1562 return m;
1298} 1563}
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 3d5f57d..dfbdfb9 100644
--- a/noncore/apps/opie-reader/QTReader.h
+++ b/noncore/apps/opie-reader/QTReader.h
@@ -1,312 +1,272 @@
1#ifndef __QTREADER_H 1#ifndef __QTREADER_H
2#define __QTREADER_H 2#define __QTREADER_H
3 3
4//#define _SCROLLPIPE
5
4#include <qwidget.h> 6#include <qwidget.h>
5//#include <qpainter.h> 7//#include <qpainter.h>
6#include "my_list.h" 8#include "my_list.h"
7#include "BuffDoc.h" 9#include "BuffDoc.h"
8#include "FontControl.h" 10#include "FontControl.h"
9 11
10//#include <qtimer.h> 12//#include <qtimer.h>
11 13
12class CDrawBuffer; 14class CDrawBuffer;
13//class CBuffer; 15//class CBuffer;
14class QPainter; 16class QPainter;
15class QTimer; 17class QTimer;
16class QPixmap; 18class QPixmap;
17class statedata;
18 19
19class QTReader : public QWidget 20class QTReader : public QWidget
20{ 21{
21 Q_OBJECT 22 Q_OBJECT
22 23
24 static tchar pluckernextpart[];
25 static tchar jplucknextpart[];
23 friend class QTReaderApp; 26 friend class QTReaderApp;
24 void suspend() { buffdoc.suspend(); } 27 void suspend();
28 void increaseScroll();
29 void reduceScroll();
25 void drawText(QPainter& p, int x, int y, tchar* text); 30 void drawText(QPainter& p, int x, int y, tchar* text);
26 int m_delay; 31 int m_delay;
27 unsigned int m_overlap; 32 unsigned int m_overlap;
28 bool m_autoScroll; 33 bool m_autoScroll, m_swapmouse;
29 void autoscroll(); 34 void autoscroll();
30 QTimer* timer; 35 QTimer* timer;
31 int m_scrolldy1, m_scrolldy2, m_encd; 36 int m_scrolldy1, m_scrolldy2, m_encd, m_scrollpart;
32 void focusInEvent(QFocusEvent*); 37 void focusInEvent(QFocusEvent*);
33 void focusOutEvent(QFocusEvent*); 38 void focusOutEvent(QFocusEvent*);
39 void processmousepositionevent( QMouseEvent* _e );
40 void processmousewordevent(size_t startpos, size_t startoffset, QMouseEvent* _e, int lineno);
34 bool ChangeFont(int); 41 bool ChangeFont(int);
35 bool getline(CDrawBuffer*); 42 bool getline(CDrawBuffer*);
36 int m_charWidth; 43 int m_charWidth;
37 int m_charpc; 44 int m_charpc;
45 unsigned char m_border;
38 FontControl m_fontControl; 46 FontControl m_fontControl;
47 void setBaseSize(unsigned char _s) { m_fontControl.setBaseSize(_s); }
48 unsigned char getBaseSize() { return m_fontControl.getBaseSize(); }
49#ifdef _SCROLLPIPE
50 FILE* m_pipeout;
51 QString m_pipetarget;
52 bool m_isPaused;
53 bool m_pauseAfterEachPara;
54#endif
39public: 55public:
40 QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0); 56 QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0);
41 // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0); 57 // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0);
42 ~QTReader(); 58 ~QTReader();
43 void zoomin(); 59 void zoomin();
44 void zoomout(); 60 void zoomout();
45 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) 61 void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
46 { 62 {
47 buffdoc.setSaveData(data, len, src, srclen); 63 buffdoc.setSaveData(data, len, src, srclen);
48 } 64 }
49 void putSaveData(unsigned char*& src, unsigned short& srclen) 65 void putSaveData(unsigned char*& src, unsigned short& srclen)
50 { 66 {
51 buffdoc.putSaveData(src, srclen); 67 buffdoc.putSaveData(src, srclen);
52 } 68 }
53 bool empty(); 69 bool empty();
54 void setContinuous(bool _b); 70 void setContinuous(bool _b);
55 void toggle_autoscroll(); 71 void toggle_autoscroll();
56 void setautoscroll(bool); 72 void setautoscroll(bool);
57 void disableAutoscroll() { m_autoScroll = false; } 73 void disableAutoscroll() { m_autoScroll = false; }
58 void copy() 74 void copy()
59 { 75 {
60/* 76/*
61 size_t nd = locate(); 77 size_t nd = locate();
62 jumpto(m_mark); 78 jumpto(m_mark);
63 QString text; 79 QString text;
64 while (m_mark < nd) 80 while (m_mark < nd)
65 { 81 {
66 text += buffdoc.getch(); 82 text += buffdoc.getch();
67 m_mark++; 83 m_mark++;
68 } 84 }
69 QApplication::clipboard()->setText(text); 85 QApplication::clipboard()->setText(text);
70 jumpto(nd); 86 jumpto(nd);
71*/ 87*/
72 }; 88 };
73 void clear() {}; 89 void clear() {};
74 void setText(const QString& n, const QString& s) { m_string = n; load_file((const char*)s); }; 90 void setText(const QString& n, const QString& s) { m_string = n; load_file((const char*)s); };
75 /* 91 /*
76 void setText(bool oldfile) 92 void setText(bool oldfile)
77 { 93 {
78 if (oldfile) 94 if (oldfile)
79 { 95 {
80 m_string = m_lastfile; 96 m_string = m_lastfile;
81 load_file((const tchar*)m_string); 97 load_file((const tchar*)m_string);
82 } 98 }
83 else 99 else
84 { 100 {
85 m_string = QString::null; 101 m_string = QString::null;
86 } 102 }
87 }; 103 };
88 */ 104 */
89 void setpeanut(bool _b) 105 void setlead(int _lead)
90 {
91 bpeanut = _b;
92 setfilter(getfilter());
93 }
94 void setremap(bool _b)
95 {
96 bremap = _b;
97 setfilter(getfilter());
98 }
99 void setmakebold(bool _b)
100 {
101 bmakebold = _b;
102 setfilter(getfilter());
103 }
104 void setautofmt(bool _b)
105 {
106 bautofmt = _b;
107 if (bautofmt)
108 { 106 {
109 btextfmt = false; 107 m_fontControl.setlead(_lead);
110 bstriphtml = false;; 108 }
111 bpeanut = false; 109 int getlead()
110 {
111 return m_fontControl.getlead();
112 }
113 void setextraspace(int _lead)
114 {
115 m_fontControl.setextraspace(_lead);
116 }
117 int getextraspace()
118 {
119 return m_fontControl.getextraspace();
112 } 120 }
113 setfilter(getfilter());
114 }
115 void settextfmt(bool _b)
116 {
117 btextfmt = _b;
118 setfilter(getfilter());
119 }
120 void setstripcr(bool _b)
121 {
122 bstripcr = _b;
123 setfilter(getfilter());
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
137 void setstriphtml(bool _b)
138 {
139 bstriphtml = _b;
140 setfilter(getfilter());
141 }
142 void setdehyphen(bool _b)
143 {
144 bdehyphen = _b;
145 setfilter(getfilter());
146 }
147 void setunindent(bool _b)
148 {
149 bunindent = _b;
150 setfilter(getfilter());
151 }
152 void setrepara(bool _b)
153 {
154 brepara = _b;
155 setfilter(getfilter());
156 }
157 void setdblspce(bool _b)
158 {
159 bdblspce = _b;
160 setfilter(getfilter());
161 }
162 void indentplus()
163 {
164 if (bindenter < 15) bindenter += 2;
165 setfilter(getfilter());
166 }
167 void indentminus()
168 {
169 if (bindenter > 1) bindenter -= 2;
170 setfilter(getfilter());
171 }
172 void setpagemode(bool _b) 121 void setpagemode(bool _b)
173 { 122 {
174 m_bpagemode = _b; 123 m_bpagemode = _b;
175 } 124 }
176 void setmono(bool _b) 125 void setmono(bool _b)
177 { 126 {
178 m_bMonoSpaced = _b; 127 m_bMonoSpaced = _b;
179 ChangeFont(m_fontControl.currentsize()); 128 ChangeFont(m_fontControl.currentsize());
180 locate(pagelocate()); 129 locate(pagelocate());
181 } 130 }
182 void setencoding(int _f) 131 void setencoding(int _f)
183 { 132 {
184 m_encd = _f; 133 m_encd = _f;
185 setfilter(getfilter()); 134 setfilter(getfilter());
186 } 135 }
187 MarkupType PreferredMarkup(); 136 MarkupType PreferredMarkup();
188 CEncoding* getencoding() 137 CEncoding* getencoding()
189 { 138 {
139 // qDebug("m_encd:%d", m_encd);
190 switch (m_encd) 140 switch (m_encd)
191 { 141 {
192 case 5:
193 return new Ccp1252;
194 case 4: 142 case 4:
143 // qDebug("palm");
195 return new CPalm; 144 return new CPalm;
196 case 1: 145 case 1:
146 // qDebug("utf8");
197 return new CUtf8; 147 return new CUtf8;
198 case 2: 148 case 2:
149 // qDebug("ucs16be");
199 return new CUcs16be; 150 return new CUcs16be;
200 case 3: 151 case 3:
152 // qDebug("ucs16le");
201 return new CUcs16le; 153 return new CUcs16le;
202 case 0: 154 case 0:
203 default: 155 // qDebug("ascii");
204 return new CAscii; 156 return new CAscii;
157 default:
158 return new CGeneral8Bit(m_encd-MAX_ENCODING+1);
205 } 159 }
206 } 160 }
207 CFilterChain* getfilter() 161 CFilterChain* getfilter()
208 { 162 {
209 CFilterChain * filt = new CFilterChain(getencoding()); 163 CFilterChain * filt = new CFilterChain(getencoding());
210 if (bstripcr) filt->addfilter(new stripcr); 164 if (bstripcr) filt->addfilter(new stripcr);
211 165
212 if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt); 166 if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt);
213 if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter); 167 if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter);
214 if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml); 168 if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml);
215 169
216 if (bdehyphen) filt->addfilter(new dehyphen); 170 if (bdehyphen) filt->addfilter(new dehyphen);
217 if (bunindent) filt->addfilter(new unindent); 171 if (bunindent) filt->addfilter(new unindent);
218 if (brepara) filt->addfilter(new repara); 172 if (brepara) filt->addfilter(new repara);
219 if (bonespace) filt->addfilter(new OnePara); 173 if (bonespace) filt->addfilter(new OnePara);
220 if (bindenter) filt->addfilter(new indenter(bindenter)); 174 if (bindenter) filt->addfilter(new indenter(bindenter));
221 if (bdblspce) filt->addfilter(new dblspce); 175 if (bdblspce) filt->addfilter(new dblspce);
222#ifdef REPALM 176#ifdef REPALM
223 if (brepalm) filt->addfilter(new repalm); 177 if (brepalm) filt->addfilter(new repalm);
224#endif 178#endif
225 if (bremap) filt->addfilter(new remap); 179 if (bremap) filt->addfilter(new remap);
180 if (bdepluck) filt->addfilter(new DePluck(pluckernextpart));
181 if (bdejpluck) filt->addfilter(new DePluck(jplucknextpart));
226 if (bmakebold) filt->addfilter(new embolden); 182 if (bmakebold) filt->addfilter(new embolden);
183 if (bfulljust) filt->addfilter(new FullJust);
227 return filt; 184 return filt;
228 } 185 }
229 186
230 187
231private slots: 188private slots:
189 void goHome();
190 void goBack();
191 void goForward();
232 void doscroll(); 192 void doscroll();
233 void drawIt( QPainter * ); 193 void drawIt( QPainter * );
234 void paintEvent( QPaintEvent * ); 194 void paintEvent( QPaintEvent * );
235// void resizeEvent( QResizeEvent * p ) { update(); } 195// void resizeEvent( QResizeEvent * p ) { update(); }
236 void keyPressEvent(QKeyEvent*); 196 void keyPressEvent(QKeyEvent*);
237 void drawFonts(QPainter*); 197 void drawFonts(QPainter*);
238 private: 198 private:
239 void setTwoTouch(bool _b); 199 void setTwoTouch(bool _b);
240 void init(); 200 void init();
241 void mousePressEvent( QMouseEvent* ); 201 void mousePressEvent( QMouseEvent* );
242 void mouseReleaseEvent( QMouseEvent* ); 202 void mouseReleaseEvent( QMouseEvent* );
243// void mouseDoubleClickEvent( QMouseEvent* ); 203// void mouseDoubleClickEvent( QMouseEvent* );
244 QString m_string, m_fontname; 204 QString m_string, m_fontname;
245 void setfont(); 205 void setfont();
246 //myoutput stuff 206 //myoutput stuff
247 private: 207 private:
248 bool mouseUpOn; 208 bool mouseUpOn;
249 linkType getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt); 209 linkType getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt);
250 bool m_twotouch, m_touchone; 210 bool m_twotouch, m_touchone;
251 size_t m_startpos, m_startoffset; 211 size_t m_startpos, m_startoffset;
252 void dopageup(unsigned int); 212 void dopageup(unsigned int);
253 void dopageup(); 213 void dopageup();
254 void lineDown(); 214 void lineDown();
255 void lineUp(); 215 void lineUp();
256 void dopagedn(); 216 void dopagedn();
257 long real_delay(); 217 long real_delay();
258 int m_textsize; 218 int m_textsize;
259 int m_lastwidth, m_lastheight; 219 int m_lastwidth, m_lastheight;
260 CBufferFace<CDrawBuffer*> textarray; 220 CBufferFace<CDrawBuffer*> textarray;
261 CBufferFace<size_t> locnarray; 221 CBufferFace<size_t> locnarray;
262 unsigned int numlines; 222 unsigned int numlines;
263 bool bstripcr, btextfmt, bstriphtml, bdehyphen, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt, bonespace; 223// bool m_showlast;
224 bool bstripcr, btextfmt, bstriphtml, bdehyphen, bdepluck, bdejpluck, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt, bonespace, bfulljust;
264#ifdef REPALM 225#ifdef REPALM
265 bool brepalm; 226 bool brepalm;
266#endif 227#endif
267 bool m_bpagemode, m_bMonoSpaced, m_continuousDocument; 228 bool m_bpagemode, m_bMonoSpaced, m_continuousDocument;
268 unsigned char bindenter; 229 unsigned char bindenter;
269 QString m_lastfile; 230 QString m_lastfile;
270 size_t m_lastposn; 231 size_t m_lastposn;
271 public: 232 public:
272 bool bDoUpdates; 233 bool bDoUpdates;
273 bool m_navkeys;
274 void NavUp(); 234 void NavUp();
275 void NavDown(); 235 void NavDown();
276 int getch() { return buffdoc.getch(); } 236 tchar getch() { return buffdoc.getch(); }
237 bool synch(size_t, size_t);
277 bool tight; 238 bool tight;
278 bool load_file(const char *newfile, unsigned int lcn=0); 239 bool load_file(const char *newfile, unsigned int lcn=0);
279 BuffDoc buffdoc; 240 BuffDoc buffdoc;
280 CList<Bkmk>* getbkmklist() { return buffdoc.getbkmklist(); } 241 CList<Bkmk>* getbkmklist() { return buffdoc.getbkmklist(); }
281 bool locate(unsigned long n); 242 bool locate(unsigned long n);
282 void jumpto(unsigned long n) { buffdoc.unsuspend(); buffdoc.locate(n); } 243 void jumpto(unsigned long n) { buffdoc.unsuspend(); buffdoc.locate(n); }
283 unsigned long locate() { buffdoc.unsuspend(); return buffdoc.locate(); } 244 unsigned long locate() { buffdoc.unsuspend(); return buffdoc.locate(); }
284 unsigned long explocate() { buffdoc.unsuspend(); return buffdoc.explocate(); } 245 unsigned long explocate() { buffdoc.unsuspend(); return buffdoc.explocate(); }
285 unsigned long pagelocate() { return locnarray[0]; } 246 unsigned long pagelocate() { return locnarray[0]; }
286 unsigned long mylastpos; 247 unsigned long mylastpos;
287 void setfilter(CFilterChain *f) { buffdoc.unsuspend(); buffdoc.setfilter(f); locate(pagelocate()); } 248 void setfilter(CFilterChain *f) { buffdoc.unsuspend(); buffdoc.setfilter(f); locate(pagelocate()); }
288 void restore() { jumpto(mylastpos); } 249 void restore() { jumpto(mylastpos); }
289 void goUp(); 250 void goUp();
290 void refresh() { locate(pagelocate()); } 251 void refresh() { locate(pagelocate()); }
291 void goDown(); 252 void goDown();
292 // bool bold; 253 // bool bold;
293 int textsize() { return m_textsize; } 254 int textsize() { return m_textsize; }
294 void textsize(int ts) { m_textsize = ts; } 255 void textsize(int ts) { m_textsize = ts; }
295 bool fillbuffer(int ru = 0, int ht = 0); 256 bool fillbuffer(int ru = 0, int ht = 0, int newht = -1);
296 unsigned int screenlines(); 257 unsigned int screenlines();
297 void sizes(unsigned long& fs, unsigned long& ts) { buffdoc.unsuspend(); buffdoc.sizes(fs,ts); } 258 void sizes(unsigned long& fs, unsigned long& ts) { buffdoc.unsuspend(); buffdoc.sizes(fs,ts); }
298 static const char *fonts[]; 259 static const char *fonts[];
299// unsigned int *fontsizes; 260// unsigned int *fontsizes;
300 int m_ascent, m_descent, m_linespacing; 261 int m_ascent, m_descent, m_linespacing;
301 QFontMetrics* m_fm; 262 QFontMetrics* m_fm;
302 QString firstword(); 263 QString firstword();
303 void setstate(const statedata& sd);
304 264
305 signals: 265 signals:
306 void OnRedraw(); 266 void OnRedraw();
307 void OnWordSelected(const QString&, size_t, const QString&); 267 void OnWordSelected(const QString&, size_t, const QString&);
308 void OnActionPressed(); 268 void OnShowPicture(QImage&);
309 void OnShowPicture(QPixmap&); 269 void OnURLSelected(const QString&);
310}; 270};
311 271
312#endif 272#endif
diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp
index 7333a28..af1da27 100644
--- a/noncore/apps/opie-reader/QTReaderApp.cpp
+++ b/noncore/apps/opie-reader/QTReaderApp.cpp
@@ -1,2606 +1,4222 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. Allrights 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**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20#include "useqpe.h"
21#include <qregexp.h>
21#include <qclipboard.h> 22#include <qclipboard.h>
22#include <qwidgetstack.h> 23#include <qwidgetstack.h>
24#ifdef USEQPE
23#include <qpe/qpemenubar.h> 25#include <qpe/qpemenubar.h>
24//#include <qpe/qpetoolbar.h> 26#include <qpe/qpetoolbar.h>
27#endif
25#include <qmenubar.h> 28#include <qmenubar.h>
26#include <qtoolbar.h> 29#include <qtoolbar.h>
30#ifdef USEQPE
27#include <qpe/menubutton.h> 31#include <qpe/menubutton.h>
28#include <qpe/fontdatabase.h> 32#include <qpe/fontdatabase.h>
33#endif
29#include <qcombobox.h> 34#include <qcombobox.h>
30#include <qpopupmenu.h> 35#include <qpopupmenu.h>
31#include <qaction.h> 36#include <qaction.h>
32#include <qapplication.h> 37#include <qapplication.h>
33#include <qlineedit.h> 38#include <qlineedit.h>
34#include <qtoolbutton.h> 39#include <qtoolbutton.h>
35#include <qspinbox.h> 40#include <qspinbox.h>
36#include <qobjectlist.h> 41#include <qobjectlist.h>
42#ifdef USEQPE
37#include <qpe/global.h> 43#include <qpe/global.h>
38#include <qpe/applnk.h> 44#include <qpe/applnk.h>
45#endif
39#include <qfileinfo.h> 46#include <qfileinfo.h>
40#include <stdlib.h> //getenv 47#include <stdlib.h> //getenv
41#include <qprogressbar.h> 48#include <qprogressbar.h>
49#ifdef USEQPE
42#include <qpe/config.h> 50#include <qpe/config.h>
51#endif
43#include <qbuttongroup.h> 52#include <qbuttongroup.h>
44#include <qradiobutton.h> 53#include <qradiobutton.h>
54#ifdef USEQPE
45#include <qpe/qcopenvelope_qws.h> 55#include <qpe/qcopenvelope_qws.h>
46 56#endif
47#include "QTReader.h" 57#include "QTReader.h"
48#include "GraphicWin.h" 58#include "GraphicWin.h"
49#include "Bkmks.h" 59#include "Bkmks.h"
50#include "cbkmkselector.h" 60#include "cbkmkselector.h"
51#include "infowin.h" 61#include "infowin.h"
62#include "ToolbarPrefs.h"
63#include "Prefs.h"
52#include "CAnnoEdit.h" 64#include "CAnnoEdit.h"
53#include "QFloatBar.h" 65#include "QFloatBar.h"
66#include "FixedFont.h"
67#include "URLDialog.h"
54//#include <qpe/fontdatabase.h> 68//#include <qpe/fontdatabase.h>
55 69
70#ifdef USEQPE
56#include <qpe/resource.h> 71#include <qpe/resource.h>
57#include <qpe/qpeapplication.h> 72#include <qpe/qpeapplication.h>
73#include "fileBrowser.h"
74#else
75#include "qfiledialog.h"
76#endif
58 77
59#include "QTReaderApp.h" 78#include "QTReaderApp.h"
60#include "fileBrowser.h"
61#include "CDrawBuffer.h" 79#include "CDrawBuffer.h"
62#include "Filedata.h" 80#include "Filedata.h"
63#include "opie.h" 81#include "opie.h"
64#include "name.h" 82#include "useqpe.h"
65#include "StateData.h" 83#include "names.h"
84#include "CEncoding_tables.h"
85#include "CloseDialog.h"
66 86
67#ifdef OPIE 87bool CheckVersion(int&, int&, char&);
88
89#ifdef _WINDOWS
90#define PICDIR "c:\\uqtreader\\pics\\"
91#else
92#ifdef USEQPE
68#define PICDIR "opie-reader/" 93#define PICDIR "opie-reader/"
69#else 94#else
70#define PICDIR 95#define PICDIR "/home/tim/uqtreader/pics/"
96#endif
71#endif 97#endif
72
73 98
74unsigned long QTReaderApp::m_uid = 0; 99unsigned long QTReaderApp::m_uid = 0;
75 100
76void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); } 101void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); }
77 102
103#ifdef USEQPE
104#define geticon(iconname) Resource::loadPixmap( iconname )
105#define getmyicon(iconname) Resource::loadPixmap( PICDIR iconname )
106#else
107#define geticon(iconname) QPixmap(PICDIR iconname ".png")
108#define getmyicon(iconname) geticon(iconname)
109//#define geticon(iconname) QIconSet( QPixmap(PICDIR iconname) )
110#endif
111
112#ifndef _WINDOWS
78#include <unistd.h> 113#include <unistd.h>
114#endif
79#include <stddef.h> 115#include <stddef.h>
116#ifndef _WINDOWS
80#include <dirent.h> 117#include <dirent.h>
118#endif
81 119
82void QTReaderApp::listBkmkFiles() 120void QTReaderApp::listBkmkFiles()
83{ 121{
84 bkmkselector->clear(); 122 bkmkselector->clear();
85 bkmkselector->setText("Cancel"); 123 bkmkselector->setText("Cancel");
124#ifndef USEQPE
125 int cnt = 0;
126
127 QDir d = QDir::home(); // "/"
128 if ( !d.cd(APPDIR) ) { // "/tmp"
129 qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
130 d = QDir::home();
131 d.mkdir(APPDIR);
132 d.cd(APPDIR);
133 }
134
135
136
137
138 d.setFilter( QDir::Files | QDir::NoSymLinks );
139// d.setSorting( QDir::Size | QDir::Reversed );
140
141 const QFileInfoList *list = d.entryInfoList();
142 QFileInfoListIterator it( *list ); // create list iterator
143 QFileInfo *fi; // pointer for traversing
144
145 while ( (fi=it.current()) ) { // for each file...
146
147 bkmkselector->insertItem(fi->fileName());
148 cnt++;
149
150 //qDebug( "%10li %s", fi->size(), fi->fileName().data() );
151 ++it; // goto next list element
152 }
153
154#else /* USEQPE */
86 int cnt = 0; 155 int cnt = 0;
87 DIR *d; 156 DIR *d;
88 d = opendir((const char *)Global::applicationFileName(APPDIR,"")); 157 d = opendir((const char *)Global::applicationFileName(APPDIR,""));
89 158
90 while(1) 159 while(1)
91 { 160 {
92 struct dirent* de; 161 struct dirent* de;
93 struct stat buf; 162 struct stat buf;
94 de = readdir(d); 163 de = readdir(d);
95 if (de == NULL) break; 164 if (de == NULL) break;
96 165
97 if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) 166 if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode))
98 { 167 {
99 bkmkselector->insertItem(de->d_name); 168 bkmkselector->insertItem(de->d_name);
100 cnt++; 169 cnt++;
101 } 170 }
102 } 171 }
103 172
104 closedir(d); 173 closedir(d);
105 174#endif
106 if (cnt > 0) 175 if (cnt > 0)
107 { 176 {
108//tjw menu->hide(); 177//tjw menu->hide();
109 editBar->hide();
110 if (m_fontVisible) m_fontBar->hide();
111 if (regVisible)
112 {
113 Global::hideInputMethod();
114 regBar->hide();
115 }
116 if (searchVisible)
117 {
118 Global::hideInputMethod();
119 searchBar->hide();
120 }
121 m_nRegAction = cRmBkmkFile;
122 editorStack->raiseWidget( bkmkselector ); 178 editorStack->raiseWidget( bkmkselector );
179 hidetoolbars();
180 m_nBkmkAction = cRmBkmkFile;
123 } 181 }
124 else 182 else
125 QMessageBox::information(this, PROGNAME, "No bookmark files"); 183 QMessageBox::information(this, PROGNAME, "No bookmark files");
126} 184}
127 185
128QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) 186void QTReaderApp::hidetoolbars()
129 : QMainWindow( parent, name, f ), bFromDocView( FALSE ), m_dontSave(false)
130{ 187{
131// qDebug("Application directory = %s", (const tchar *)QPEApplication::documentDir()); 188 menubar->hide();
132// qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml")); 189 if (fileBar != NULL) fileBar->hide();
190 if (viewBar != NULL) viewBar->hide();
191 if (navBar != NULL) navBar->hide();
192 if (markBar != NULL) markBar->hide();
193 if (m_fontVisible) m_fontBar->hide();
194 if (regVisible)
195 {
196#ifdef USEQPE
197 Global::hideInputMethod();
198#endif
199 regBar->hide();
200 }
201 if (searchVisible)
202 {
203#ifdef USEQPE
204 Global::hideInputMethod();
205#endif
206 searchBar->hide();
207 }
208}
133 209
210QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
211 : QMainWindow( parent, name, f ), bFromDocView( FALSE ), m_dontSave(false),
212 fileBar(NULL), navBar(NULL), viewBar(NULL), markBar(NULL)
213{
214 m_url_clipboard = false;
215 m_url_localfile = false;
216 m_url_globalfile = false;
217 ftime(&m_lastkeytime);
218//// qDebug("Application directory = %s", (const tchar *)QPEApplication::documentDir());
219//// qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml"));
220
221 m_bcloseDisabled = true;
222 m_disableesckey = false;
134 pBkmklist = NULL; 223 pBkmklist = NULL;
135 pOpenlist = NULL; 224 pOpenlist = NULL;
136// doc = 0; 225// doc = 0;
137 226
138 m_fBkmksChanged = false; 227 m_fBkmksChanged = false;
139 228
140 QString lang = getenv( "LANG" ); 229 QString lang = getenv( "LANG" );
230 QString rot = getenv( "QWS_DISPLAY" );
141 231
142 m_autogenstr = "^ *[A-Z].*[a-z] *$"; 232/*
143 setToolBarsMovable( FALSE ); 233 int m_rot = 0;
234 if (rot.contains("Rot90"))
235 {
236 m_rot = 90;
237 }
238 else if (rot.contains("Rot180"))
239 {
240 m_rot = 180;
241 }
242 else if (rot.contains("Rot270"))
243 {
244 m_rot = 270;
245 }
246
247// qDebug("Initial Rotation(%d):%s", m_rot, (const char*)rot);
248*/
249 m_autogenstr = "^ *[A-Z].*[a-z] *$";
144 250
145 setIcon( Resource::loadPixmap( "uqtreader" ) ); 251#ifdef USEQPE
252 setIcon( Resource::loadPixmap( PICDIR "uqtreader") );
253#else
254 setIcon( QPixmap (PICDIR "uqtreader.png") );
255#endif /* USEQPE */
146 256
147// QPEToolBar *bar = new QPEToolBar( this ); 257// QPEToolBar *bar = new QPEToolBar( this );
148 QToolBar *bar = new QToolBar( this ); 258// menubar = new QPEToolBar( this );
149 bar->setHorizontalStretchable( TRUE ); 259#ifdef USEQPE
150 addToolBar(bar, "tool",QMainWindow::Top, true); 260 Config config( APPDIR );
151//tjw menu = bar; 261#else
152 262 QDir d = QDir::home(); // "/"
153 QPEMenuBar *mb = new QPEMenuBar( bar ); 263 if ( !d.cd(APPDIR) ) { // "/tmp"
154// QMenuBar *mb = new QMenuBar( bar ); 264 qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
155 QPopupMenu *file = new QPopupMenu( this ); 265 d = QDir::home();
156 QPopupMenu *format = new QPopupMenu( this ); 266 d.mkdir(APPDIR);
157 // QPopupMenu *edit = new QPopupMenu( this ); 267 d.cd(APPDIR);
268 }
269 QFileInfo fi(d, INIFILE);
270// qDebug("Path:%s", (const char*)fi.absFilePath());
271 Config config(fi.absFilePath());
272#endif
273 config.setGroup("Toolbar");
274 m_tbmovesave = m_tbmove = config.readBoolEntry("Movable", false);
275 m_tbpolsave = m_tbpol = (ToolbarPolicy)config.readNumEntry("Policy", 1);
276 m_tbposition = (ToolBarDock)config.readNumEntry("Position", 2);
277 menubar = new QToolBar("Menus", this, m_tbposition);
278
279// fileBar = new QToolBar("File", this);
280// QToolBar* viewBar = new QToolBar("File", this);
281// QToolBar* navBar = new QToolBar("File", this);
282// QToolBar* markBar = new QToolBar("File", this);
283
284#ifdef USEQPE
285 mb = new QPEMenuBar( menubar );
286#else
287 mb = new QMenuBar( menubar );
288#endif
158 289
159// bar = new QToolBar( this ); 290//#ifdef USEQPE
160 editBar = bar; 291 QPopupMenu* tmp = new QPopupMenu(mb);
292 mb->insertItem( geticon( "AppsIcon" ), tmp );
293//#else
294// QMenuBar* tmp = mb;
295//#endif
296
297 QPopupMenu *file = new QPopupMenu( mb );
298 tmp->insertItem( tr( "File" ), file );
299
300 QPopupMenu *navigation = new QPopupMenu(mb);
301 tmp->insertItem( tr( "Navigation" ), navigation );
302
303 QPopupMenu *view = new QPopupMenu( mb );
304 tmp->insertItem( tr( "View" ), view );
305
306 QPopupMenu *marks = new QPopupMenu( this );
307 tmp->insertItem( tr( "Marks" ), marks );
308
309 QPopupMenu *settings = new QPopupMenu( this );
310 tmp->insertItem( tr( "Settings" ), settings );
311
312// addToolBar(menubar, "Menus",QMainWindow::Top);
313// addToolBar(fileBar, "Toolbar",QMainWindow::Top);
314
315 // QPopupMenu *edit = new QPopupMenu( this );
161 316
162 /* 317 /*
163 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); 318 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
164 connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); 319 connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
165 a->addTo( bar ); 320 a->addTo( bar );
166 a->addTo( file ); 321 a->addTo( file );
167 */ 322 */
168 323
169 editorStack = new QWidgetStack( this ); 324 editorStack = new QWidgetStack( this );
170 setCentralWidget( editorStack ); 325 setCentralWidget( editorStack );
171 326
172 searchVisible = FALSE; 327 searchVisible = FALSE;
173 regVisible = FALSE; 328 regVisible = FALSE;
174 m_fontVisible = false; 329 m_fontVisible = false;
175 330
176 pbar = new QProgressBar(this);
177 pbar->hide();
178
179 m_annoWin = new CAnnoEdit(editorStack); 331 m_annoWin = new CAnnoEdit(editorStack);
180 editorStack->addWidget(m_annoWin, get_unique_id()); 332 editorStack->addWidget(m_annoWin, get_unique_id());
181 connect( m_annoWin, SIGNAL( finished(const QString&, const QString&) ), this, SLOT( addAnno(const QString&, const QString&) ) ); 333 connect( m_annoWin, SIGNAL( finished(const QString&, const QString&) ), this, SLOT( addAnno(const QString&, const QString&) ) );
182 connect( m_annoWin, SIGNAL( cancelled() ), this, SLOT( infoClose() ) ); 334 connect( m_annoWin, SIGNAL( cancelled() ), this, SLOT( infoClose() ) );
183 335
184 m_infoWin = new infowin(editorStack); 336 m_infoWin = new infowin(editorStack);
185 editorStack->addWidget(m_infoWin, get_unique_id()); 337 editorStack->addWidget(m_infoWin, get_unique_id());
186 connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) ); 338 connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) );
187 339
188 m_graphicwin = new GraphicWin(editorStack); 340 m_graphicwin = new GraphicWin(editorStack);
189 editorStack->addWidget(m_graphicwin, get_unique_id()); 341 editorStack->addWidget(m_graphicwin, get_unique_id());
190 connect( m_graphicwin, SIGNAL( Closed() ), this, SLOT( infoClose() ) ); 342 connect( m_graphicwin, SIGNAL( Closed() ), this, SLOT( infoClose() ) );
191 343
192// bkmkselector = new QListBox(editorStack, "Bookmarks"); 344// bkmkselector = new QListBox(editorStack, "Bookmarks");
193 bkmkselector = new CBkmkSelector(editorStack, "Bookmarks"); 345 bkmkselector = new CBkmkSelector(editorStack, "Bookmarks");
194 // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) ); 346 // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) );
195 connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) ); 347 connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) );
196 connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) ); 348 connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) );
197 editorStack->addWidget( bkmkselector, get_unique_id() ); 349 editorStack->addWidget( bkmkselector, get_unique_id() );
198 350
199/* 351/*
200 importSelector = new FileSelector( "*", editorStack, "importselector", false ); 352 importSelector = new FileSelector( "*", editorStack, "importselector", false );
201 connect( importSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( importFile( const DocLnk & ) ) ); 353 connect( importSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( importFile( const DocLnk & ) ) );
202 354
203 editorStack->addWidget( importSelector, get_unique_id() ); 355 editorStack->addWidget( importSelector, get_unique_id() );
204 356
205 // don't need the close visible, it is redundant... 357 // don't need the close visible, it is redundant...
206 importSelector->setCloseVisible( FALSE ); 358 importSelector->setCloseVisible( FALSE );
207*/ 359*/
208 qDebug("Reading file list"); 360// qDebug("Reading file list");
209 readfilelist(); 361 readfilelist();
210 362
211 reader = new QTReader( editorStack ); 363 reader = new QTReader( editorStack );
212 364
213 reader->bDoUpdates = false; 365 reader->bDoUpdates = false;
214 366
367#ifdef USEQPE
215 ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold); 368 ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold);
369#endif
216 370
217 qDebug("Reading config"); 371// qDebug("Reading config");
218 Config config( APPDIR ); 372// Config config( APPDIR );
219 config.setGroup( "View" ); 373 config.setGroup( "View" );
220 374 m_debounce = config.readNumEntry("Debounce", 0);
375#ifdef USEQPE
376 m_bFloatingDialog = config.readBoolEntry("FloatDialogs", false);
377#else
378 m_bFloatingDialog = config.readBoolEntry("FloatDialogs", true);
379#endif
221 reader->bstripcr = config.readBoolEntry( "StripCr", true ); 380 reader->bstripcr = config.readBoolEntry( "StripCr", true );
381 reader->bfulljust = config.readBoolEntry( "FullJust", false );
382 reader->setextraspace(config.readNumEntry( "ExtraSpace", 0 ));
383 reader->setlead(config.readNumEntry( "ExtraLead", 0 ));
222 reader->btextfmt = config.readBoolEntry( "TextFmt", false ); 384 reader->btextfmt = config.readBoolEntry( "TextFmt", false );
223 reader->bautofmt = config.readBoolEntry( "AutoFmt", true ); 385 reader->bautofmt = config.readBoolEntry( "AutoFmt", true );
224 reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); 386 reader->bstriphtml = config.readBoolEntry( "StripHtml", false );
225 reader->bpeanut = config.readBoolEntry( "Peanut", false ); 387 reader->bpeanut = config.readBoolEntry( "Peanut", false );
226 reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); 388 reader->bdehyphen = config.readBoolEntry( "Dehyphen", false );
389 reader->bdepluck = config.readBoolEntry( "Depluck", false );
390 reader->bdejpluck = config.readBoolEntry( "Dejpluck", false );
227 reader->bonespace = config.readBoolEntry( "OneSpace", false ); 391 reader->bonespace = config.readBoolEntry( "OneSpace", false );
228 reader->bunindent = config.readBoolEntry( "Unindent", false ); 392 reader->bunindent = config.readBoolEntry( "Unindent", false );
229 reader->brepara = config.readBoolEntry( "Repara", false ); 393 reader->brepara = config.readBoolEntry( "Repara", false );
230 reader->bdblspce = config.readBoolEntry( "DoubleSpace", false ); 394 reader->bdblspce = config.readBoolEntry( "DoubleSpace", false );
231 reader->bindenter = config.readNumEntry( "Indent", 0 ); 395 reader->bindenter = config.readNumEntry( "Indent", 0 );
232 reader->m_textsize = config.readNumEntry( "FontSize", 12 ); 396 reader->m_textsize = config.readNumEntry( "FontSize", 12 );
233 reader->m_delay = config.readNumEntry( "ScrollDelay", 5184); 397 reader->m_delay = config.readNumEntry( "ScrollDelay", 5184);
234 reader->m_lastfile = config.readEntry( "LastFile", QString::null ); 398 reader->m_lastfile = config.readEntry( "LastFile", QString::null );
235 reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); 399 reader->m_lastposn = config.readNumEntry( "LastPosn", 0 );
236 reader->m_bpagemode = config.readBoolEntry( "PageMode", true ); 400 reader->m_bpagemode = config.readBoolEntry( "PageMode", true );
237 reader->m_navkeys = config.readBoolEntry( "CursorNavigation", false );
238 reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false); 401 reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false);
402 reader->m_swapmouse = config.readBoolEntry( "SwapMouse", false);
239 reader->m_fontname = config.readEntry( "Fontname", "helvetica" ); 403 reader->m_fontname = config.readEntry( "Fontname", "helvetica" );
240 reader->m_encd = config.readNumEntry( "Encoding", 0 ); 404 reader->m_encd = config.readNumEntry( "Encoding", 0 );
241 reader->m_charpc = config.readNumEntry( "CharSpacing", 100 ); 405 reader->m_charpc = config.readNumEntry( "CharSpacing", 100 );
242 reader->m_overlap = config.readNumEntry( "Overlap", 0 ); 406 reader->m_overlap = config.readNumEntry( "Overlap", 0 );
407 reader->m_border = config.readNumEntry( "Margin", 6 );
243#ifdef REPALM 408#ifdef REPALM
244 reader->brepalm = config.readBoolEntry( "Repalm", true ); 409 reader->brepalm = config.readBoolEntry( "Repalm", true );
245#endif 410#endif
246 reader->bremap = config.readBoolEntry( "Remap", true ); 411 reader->bremap = config.readBoolEntry( "Remap", true );
247 reader->bmakebold = config.readBoolEntry( "MakeBold", false ); 412 reader->bmakebold = config.readBoolEntry( "MakeBold", false );
248 reader->setContinuous(config.readBoolEntry( "Continuous", true )); 413 reader->setContinuous(config.readBoolEntry( "Continuous", true ));
249 m_targetapp = config.readEntry( "TargetApp", QString::null ); 414 m_targetapp = config.readEntry( "TargetApp", QString::null );
250 m_targetmsg = config.readEntry( "TargetMsg", QString::null ); 415 m_targetmsg = config.readEntry( "TargetMsg", QString::null );
416#ifdef _SCROLLPIPE
417 reader->m_pipetarget = config.readEntry( "PipeTarget", QString::null );
418 reader->m_pauseAfterEachPara = config.readBoolEntry( "PauseAfterPara", true );
419#endif
251 m_twoTouch = config.readBoolEntry( "TwoTouch", false); 420 m_twoTouch = config.readBoolEntry( "TwoTouch", false);
252 m_doAnnotation = config.readBoolEntry( "Annotation", false); 421 m_doAnnotation = config.readBoolEntry( "Annotation", false);
253 m_doDictionary = config.readBoolEntry( "Dictionary", false); 422 m_doDictionary = config.readBoolEntry( "Dictionary", false);
254 m_doClipboard = config.readBoolEntry( "Clipboard", false); 423 m_doClipboard = config.readBoolEntry( "Clipboard", false);
255 m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll); 424 m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll);
256 setTwoTouch(m_twoTouch); 425 m_escapeTarget = (ActionTypes)config.readNumEntry("EscapeTarget", cesNone);
426 m_returnTarget = (ActionTypes)config.readNumEntry("ReturnTarget", cesFullScreen);
427 m_leftTarget = (ActionTypes)config.readNumEntry("LeftTarget", cesZoomOut);
428 m_rightTarget = (ActionTypes)config.readNumEntry("RightTarget", cesZoomIn);
429 m_upTarget = (ActionTypes)config.readNumEntry("UpTarget", cesPageUp);
430 m_downTarget = (ActionTypes)config.readNumEntry("DownTarget", cesPageDown);
431
432 m_leftScroll = config.readBoolEntry("LeftScroll", false);
433 m_rightScroll = config.readBoolEntry("RightScroll", false);
434 m_upScroll = config.readBoolEntry("UpScroll", true);
435 m_downScroll = config.readBoolEntry("DownScroll", true);
436
437 m_propogatefontchange = config.readBoolEntry( "RequestorFontChange", false);
438 reader->setBaseSize(config.readNumEntry( "Basesize", 10 ));
439
440#ifndef USEQPE
441 config.setGroup( "Geometry" );
442 setGeometry(0,0,
443 config.readNumEntry( "width", QApplication::desktop()->width()/2 ),
444 config.readNumEntry( "height", QApplication::desktop()->height()/2 ));
445 move(
446 config.readNumEntry( "x", 20 ),
447 config.readNumEntry( "y", 20 ));
448#endif
257 449
258 450
259 connect( reader, SIGNAL( OnShowPicture(QPixmap&) ), this, SLOT( showgraphic(QPixmap&) ) ); 451
452 setTwoTouch(m_twoTouch);
453
454 connect( reader, SIGNAL( OnShowPicture(QImage&) ), this, SLOT( showgraphic(QImage&) ) );
260 455
261 connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) ); 456 connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) );
262 connect( reader, SIGNAL( OnActionPressed() ), this, SLOT( OnActionPressed() ) );
263 connect( reader, SIGNAL( OnWordSelected(const QString&, size_t, const QString&) ), this, SLOT( OnWordSelected(const QString&, size_t, const QString&) ) ); 457 connect( reader, SIGNAL( OnWordSelected(const QString&, size_t, const QString&) ), this, SLOT( OnWordSelected(const QString&, size_t, const QString&) ) );
458 connect( reader, SIGNAL( OnURLSelected(const QString&) ), this, SLOT( OnURLSelected(const QString&) ) );
264 editorStack->addWidget( reader, get_unique_id() ); 459 editorStack->addWidget( reader, get_unique_id() );
265 460
266 QAction *a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); 461 m_preferences_action = new QAction( tr( "Configuration" ), geticon( "SettingsIcon" ), QString::null, 0, this, NULL);
267 connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); 462 connect( m_preferences_action, SIGNAL( activated() ), this, SLOT( showprefs() ) );
268 a->addTo( bar ); 463 m_preferences_action->addTo( settings );
269 a->addTo( file );
270 464
271 a = new QAction( tr( "Close" ), Resource::loadPixmap( "fileclose" ), QString::null, 0, this, 0 ); 465 m_saveconfig_action = new QAction( tr( "Save Config" ), QString::null, 0, this, NULL);
272 connect( a, SIGNAL( activated() ), this, SLOT( fileClose() ) ); 466 connect( m_saveconfig_action, SIGNAL( activated() ), this, SLOT( SaveConfig() ) );
273// a->addTo( bar ); 467 m_saveconfig_action->addTo( settings );
274 a->addTo( file ); 468
469 m_loadconfig_action = new QAction( tr( "Load Config" ), QString::null, 0, this, NULL);
470 connect( m_loadconfig_action, SIGNAL( activated() ), this, SLOT( LoadConfig() ) );
471 m_loadconfig_action->addTo( settings );
472
473 m_tidyconfig_action = new QAction( tr( "Delete Config" ), QString::null, 0, this, NULL);
474 connect( m_tidyconfig_action, SIGNAL( activated() ), this, SLOT( TidyConfig() ) );
475 m_tidyconfig_action->addTo( settings );
476
477 settings->insertSeparator();
478 m_toolbarprefs_action = new QAction( tr( "Toolbars" ), QString::null, 0, this, NULL);
479 connect( m_toolbarprefs_action, SIGNAL( activated() ), this, SLOT( showtoolbarprefs() ) );
480 m_toolbarprefs_action->addTo( settings );
481
482 m_open_action = new QAction( tr( "Open" ), geticon( "fileopen" ), QString::null, 0, this, 0 );
483 connect( m_open_action, SIGNAL( activated() ), this, SLOT( fileOpen() ) );
484 m_open_action->addTo( file );
485
486 m_close_action = new QAction( tr( "Close" ), geticon( "close" ), QString::null, 0, this, 0 );
487 connect( m_close_action, SIGNAL( activated() ), this, SLOT( fileClose() ) );
488 m_close_action->addTo( file );
275 489
490#ifdef _SCRIPT
491 a = new QAction( tr( "Run Script" ), QString::null, 0, this, NULL);
492 connect( a, SIGNAL( activated() ), this, SLOT( RunScript() ) );
493 a->addTo( file );
494#endif
276 /* 495 /*
277 a = new QAction( tr( "Revert" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); 496 a = new QAction( tr( "Revert" ), geticon( "close" ), QString::null, 0, this, 0 );
278 connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) ); 497 connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) );
279 a->addTo( file ); 498 a->addTo( file );
280 499
281 a = new QAction( tr( "Cut" ), Resource::loadPixmap( "cut" ), QString::null, 0, this, 0 ); 500 a = new QAction( tr( "Cut" ), geticon( "cut" ), QString::null, 0, this, 0 );
282 connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); 501 connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) );
283 a->addTo( editBar ); 502 a->addTo( filebar() );
284 a->addTo( edit ); 503 a->addTo( edit );
285 */ 504 */
286 505
287 a = new QAction( tr( "Info" ), QString::null, 0, this, NULL); 506 m_info_action = new QAction( tr( "Info" ), geticon( "UtilsIcon" ), QString::null, 0, this, NULL);
288 connect( a, SIGNAL( activated() ), this, SLOT( showinfo() ) ); 507 connect( m_info_action, SIGNAL( activated() ), this, SLOT( showinfo() ) );
289 a->addTo( file ); 508 m_info_action->addTo( file );
290
291 QActionGroup* ag = new QActionGroup(this);
292 QPopupMenu *spacemenu = new QPopupMenu(this);
293 file->insertItem( tr( "On Action..." ), spacemenu );
294
295 m_buttonAction[0] = new QAction( tr( "Open File" ), QString::null, 0, ag, NULL, true );
296
297 m_buttonAction[1] = new QAction( tr( "Autoscroll" ), QString::null, 0, ag, NULL, true );
298
299 m_buttonAction[2] = new QAction( tr( "Mark" ), QString::null, 0, ag, NULL, true );
300 509
301 m_buttonAction[3] = new QAction( tr( "Fullscreen" ), QString::null, 0, ag, NULL, true ); 510 m_touch_action = new QAction( tr( "Two/One Touch" ), geticon( "1to1" ), QString::null, 0, this, NULL, true );
511 connect( m_touch_action, SIGNAL( toggled(bool) ), this, SLOT( setTwoTouch(bool) ) );
512 m_touch_action->setOn(m_twoTouch);
513 m_touch_action->addTo( file );
302 514
303 ag->addTo(spacemenu); 515 m_find_action = new QAction( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, NULL);
516 connect( m_find_action, SIGNAL( activated() ), this, SLOT( editFind() ) );
517 file->insertSeparator();
518// a->addTo( bar );
519 m_find_action->addTo( file );
304 520
305 connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( buttonActionSelected(QAction*) ) ); 521 m_exportlinks_action = new QAction( tr( "Export Links" ), QString::null, 0, this, NULL);
522 connect( m_exportlinks_action, SIGNAL( activated() ), this, SLOT( ExportLinks() ) );
523 m_exportlinks_action->addTo( file );
306 524
307 file->insertSeparator(); 525 m_scrollButton = new QAction( tr( "Scroll" ), getmyicon( "panel-arrow-down" ), QString::null, 0, this, 0, true );
526 connect( m_scrollButton, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) );
527 m_scrollButton->addTo(navigation);
528 m_scrollButton->setOn(false);
308 529
309 ag = new QActionGroup(this); 530 m_start_action = new QAction( tr( "Goto Start" ), geticon( "start" ), QString::null, 0, this, NULL);
310 ag->setExclusive(false); 531 connect( m_start_action, SIGNAL( activated() ), this, SLOT( gotoStart() ) );
311 QPopupMenu *encoding = new QPopupMenu(this); 532 m_start_action->addTo(navigation);
312 file->insertItem( tr( "Navigation" ), encoding );
313 533
314 a = m_scrollButton = new QAction( tr( "Scroll" ), Resource::loadPixmap( PICDIR "panel-arrow-down" ), QString::null, 0, ag, 0, true ); 534 m_end_action = new QAction( tr( "Goto End" ), geticon( "finish" ), QString::null, 0, this, NULL);
535 connect( m_end_action, SIGNAL( activated() ), this, SLOT( gotoEnd() ) );
536 m_end_action->addTo(navigation);
315 537
316 a->setOn(false); 538 m_jump_action = new QAction( tr( "Jump" ), geticon( "rotate" ), QString::null, 0, this, NULL);
317 connect( a, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) ); 539 connect( m_jump_action, SIGNAL( activated() ), this, SLOT( jump() ) );
318 a->addTo( bar ); 540 m_jump_action->addTo(navigation);
319 541
320 a = new QAction( tr( "Jump" ), QString::null, 0, ag, NULL); 542 m_pageline_action = new QAction( tr( "Page/Line Scroll" ), geticon( "pass" ), QString::null, 0, this, NULL, true );
321 connect( a, SIGNAL( activated() ), this, SLOT( jump() ) ); 543 connect( m_pageline_action, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) );
544 m_pageline_action->addTo(navigation);
545 m_pageline_action->setOn(reader->m_bpagemode);
322 546
323 a = new QAction( tr( "Page/Line Scroll" ), QString::null, 0, ag, NULL, true ); 547 m_pageup_action = new QAction( tr( "Up" ), geticon( "up" ), QString::null, 0, this, 0 );
324 connect( a, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) ); 548 connect( m_pageup_action, SIGNAL( activated() ), this, SLOT( pageup() ) );
325 a->setOn(reader->m_bpagemode); 549 m_pageup_action->addTo( navigation );
550
551 m_pagedn_action = new QAction( tr( "Down" ), geticon( "down" ), QString::null, 0, this, 0 );
552 connect( m_pagedn_action, SIGNAL( activated() ), this, SLOT( pagedn() ) );
553 m_pagedn_action->addTo( navigation );
326 554
327 a = new QAction( tr( "Set Overlap" ), QString::null, 0, ag, NULL); 555 m_back_action = new QAction( tr( "Back" ), geticon( "back" ), QString::null, 0, this, 0 );
328 connect( a, SIGNAL( activated() ), this, SLOT( setoverlap() ) ); 556 connect( m_back_action, SIGNAL( activated() ), reader, SLOT( goBack() ) );
557 m_back_action->addTo( navigation );
329 558
330 a = new QAction( tr( "Use Cursor" ), QString::null, 0, ag, NULL, true ); 559 m_home_action = new QAction( tr( "Home" ), geticon( "home" ), QString::null, 0, this, 0 );
331 connect( a, SIGNAL( toggled(bool) ), this, SLOT( navkeys(bool) ) ); 560 connect( m_home_action, SIGNAL( activated() ), reader, SLOT( goHome() ) );
332 a->setOn(reader->m_navkeys); 561 m_home_action->addTo( navigation );
333 562
334 ag->addTo(encoding); 563 m_forward_action = new QAction( tr( "Forward" ), geticon( "forward" ), QString::null, 0, this, 0 );
564 connect( m_forward_action, SIGNAL( activated() ), reader, SLOT( goForward() ) );
565 m_forward_action->addTo( navigation );
335 566
336 /* 567 /*
337 a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true ); 568 a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true );
338 // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); 569 // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
339 a->addTo( file ); 570 a->addTo( file );
340 571
341 a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true ); 572 a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true );
342 // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); 573 // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
343 a->addTo( file ); 574 a->addTo( file );
344 */ 575 */
345 576
346 file->insertSeparator(); 577// file->insertSeparator();
347 578
348 a = new QAction( tr( "Set Dictionary" ), QString::null, 0, this, NULL); 579#ifdef _SCROLLPIPE
349 connect( a, SIGNAL( activated() ), this, SLOT( settarget() ) );
350 a->addTo( file );
351 580
352 a = new QAction( tr( "Two/One Touch" ), QString::null, 0, this, NULL, true ); 581 QActionGroup* ag = new QActionGroup(this);
353 connect( a, SIGNAL( toggled(bool) ), this, SLOT( setTwoTouch(bool) ) );
354 a->setOn(m_twoTouch);
355 a->addTo( file );
356
357 ag = new QActionGroup(this);
358 ag->setExclusive(false); 582 ag->setExclusive(false);
359 encoding = new QPopupMenu(this); 583 spacemenu = new QPopupMenu(this);
360 file->insertItem( tr( "Target" ), encoding ); 584 file->insertItem( tr( "Scrolling" ), spacemenu );
361 585
362 a = new QAction( tr( "Annotation" ), QString::null, 0, ag, NULL, true ); 586 a = new QAction( tr( "Set Target" ), QString::null, 0, ag, NULL);
363 connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnAnnotation(bool) ) ); 587 connect( a, SIGNAL( activated() ), this, SLOT( setpipetarget() ) );
364 a->setOn(m_doAnnotation);
365 588
366 a = new QAction( tr( "Dictionary" ), QString::null, 0, ag, NULL, true ); 589 a = new QAction( tr( "Pause Paras" ), QString::null, 0, ag, NULL, true );
367 connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnDictionary(bool) ) ); 590 connect( a, SIGNAL( toggled(bool) ), this, SLOT( setpause(bool) ) );
368 a->setOn(m_doDictionary); 591 a->setOn(reader->m_pauseAfterEachPara);
369 592
370 a = new QAction( tr( "Clipboard" ), QString::null, 0, ag, NULL, true ); 593 ag->addTo(spacemenu);
371 connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnClipboard(bool) ) ); 594// file->insertSeparator();
372 a->setOn(m_doClipboard);
373
374 ag->addTo(encoding);
375 595
596#endif
376 597
377/* 598/*
378 a = new QAction( tr( "Import" ), QString::null, 0, this, NULL ); 599 a = new QAction( tr( "Import" ), QString::null, 0, this, NULL );
379 connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) ); 600 connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) );
380 a->addTo( file ); 601 a->addTo( file );
381*/ 602*/
382
383 a = new QAction( tr( "Up" ), Resource::loadPixmap( "up" ), QString::null, 0, this, 0 );
384 connect( a, SIGNAL( activated() ), this, SLOT( pageup() ) );
385 a->addTo( editBar );
386
387 a = new QAction( tr( "Down" ), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 );
388 connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
389 a->addTo( editBar );
390 603
391 /* 604 /*
392 a = new QAction( tr( "Paste" ), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 ); 605 a = new QAction( tr( "Paste" ), geticon( "paste" ), QString::null, 0, this, 0 );
393 connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); 606 connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) );
394 a->addTo( editBar ); 607 a->addTo( fileBar );
395 a->addTo( edit ); 608 a->addTo( edit );
396 */ 609 */
397 610
398// a = new QAction( tr( "Find..." ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); 611// a = new QAction( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, 0 );
399 a = new QAction( tr( "Find..." ), QString::null, 0, this, NULL);
400 connect( a, SIGNAL( activated() ), this, SLOT( editFind() ) );
401 file->insertSeparator();
402// a->addTo( bar );
403 a->addTo( file );
404
405 612
406 m_fullscreen = false; 613 m_fullscreen = false;
407 a = m_actFullscreen = new QAction( tr( "Fullscreen" ), QString::null, 0, this, NULL, true ); 614 m_actFullscreen = new QAction( tr( "Fullscreen" ), geticon( "fullscreen" ), QString::null, 0, this, NULL, true );
408 connect( a, SIGNAL( toggled(bool) ), this, SLOT( setfullscreen(bool) ) ); 615 connect( m_actFullscreen, SIGNAL( toggled(bool) ), this, SLOT( setfullscreen(bool) ) );
409 a->setOn(m_fullscreen); 616 m_actFullscreen->setOn(m_fullscreen);
410 a->addTo( file ); 617 m_actFullscreen->addTo( view );
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
417 a = m_bkmkAvail = new QAction( tr( "Annotation" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 );
418 connect( a, SIGNAL( activated() ), this, SLOT( showAnnotation() ) );
419 a->addTo( bar );
420
421 m_bkmkAvail->setEnabled(false);
422 618
619 view->insertSeparator();
423 620
424 ag = new QActionGroup(this); 621 m_zoomin_action = new QAction( tr( "Zoom In" ), geticon( "zoom" ), QString::null, 0, this);
425// ag->setExclusive(false); 622 connect( m_zoomin_action, SIGNAL( activated() ), this, SLOT( zoomin() ) );
426 encoding = new QPopupMenu(this); 623 m_zoomin_action->addTo( view );
427 format->insertItem( tr( "Markup" ), encoding );
428 624
429 a = new QAction( tr( "Auto" ), QString::null, 0, ag, NULL, true ); 625 m_zoomout_action = new QAction( tr( "Zoom Out" ), geticon( "mag" ), QString::null, 0, this);
430 a->setOn(reader->bautofmt); 626 connect( m_zoomout_action, SIGNAL( activated() ), this, SLOT( zoomout() ) );
431 connect( a, SIGNAL( toggled(bool) ), this, SLOT( autofmt(bool) ) ); 627 m_zoomout_action->addTo( view );
432 628
433 a = new QAction( tr( "None" ), QString::null, 0, ag, NULL, true ); 629 view->insertSeparator();
434 a->setOn(!reader->bautofmt && !(reader->btextfmt || reader->bstriphtml || reader->bpeanut)); 630 m_setfont_action = new QAction( tr( "Set Font" ), getmyicon( "font" ), QString::null, 0, this);
435// connect( a, SIGNAL( toggled(bool) ), this, SLOT( textfmt(bool) ) ); 631 connect( m_setfont_action, SIGNAL( activated() ), this, SLOT( setfont() ) );
632 m_setfont_action->addTo( view );
436 633
437 a = new QAction( tr( "Text" ), QString::null, 0, ag, NULL, true ); 634 view->insertSeparator();
438 a->setOn(reader->btextfmt); 635 m_setenc_action = new QAction( tr( "Set Encoding" ), getmyicon( "charset" ), QString::null, 0, this);
439 connect( a, SIGNAL( toggled(bool) ), this, SLOT( textfmt(bool) ) ); 636 connect( m_setenc_action, SIGNAL( activated() ), this, SLOT( chooseencoding() ) );
637 m_setenc_action->addTo( view );
440 638
441 a = new QAction( tr( "HTML" ), QString::null, 0, ag, NULL, true ); 639 m_setmono_action = new QAction( tr( "Ideogram" ), getmyicon( "ideogram" ), QString::null, 0, this, NULL, true);
442 a->setOn(reader->bstriphtml); 640 connect( m_setmono_action, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) );
443 connect( a, SIGNAL( toggled(bool) ), this, SLOT( striphtml(bool) ) ); 641 m_setmono_action->addTo( view );
642 m_setmono_action->setOn(reader->m_bMonoSpaced);
444 643
445 a = new QAction( tr( "Peanut/PML" ), QString::null, 0, ag, NULL, true );
446 a->setOn(reader->bpeanut);
447 connect( a, SIGNAL( toggled(bool) ), this, SLOT( peanut(bool) ) );
448 644
449 ag->addTo(encoding); 645 // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true );
450 646 // a = new QAction( tr( "Zoom" ), geticon( "mag" ), QString::null, 0, this, 0 );
451
452
453 ag = new QActionGroup(this);
454 ag->setExclusive(false);
455 encoding = new QPopupMenu(this);
456 format->insertItem( tr( "Layout" ), encoding );
457
458 a = new QAction( tr( "Strip CR" ), QString::null, 0, ag, NULL, true );
459 a->setOn(reader->bstripcr);
460 connect( a, SIGNAL( toggled(bool) ), this, SLOT( stripcr(bool) ) );
461
462 a = new QAction( tr( "Dehyphen" ), QString::null, 0, ag, NULL, true );
463 a->setOn(reader->bdehyphen);
464 connect( a, SIGNAL( toggled(bool) ), this, SLOT( dehyphen(bool) ) );
465// a->addTo( format );
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
471 a = new QAction( tr( "Unindent" ), QString::null, 0, ag, NULL, true );
472 connect( a, SIGNAL( toggled(bool) ), this, SLOT( unindent(bool) ) );
473 a->setOn(reader->bunindent);
474// a->addTo( format );
475
476 a = new QAction( tr( "Re-paragraph" ), QString::null, 0, ag, NULL, true );
477 connect( a, SIGNAL( toggled(bool) ), this, SLOT( repara(bool) ) );
478 a->setOn(reader->brepara);
479// a->addTo( format );
480
481 a = new QAction( tr( "Double Space" ), QString::null, 0, ag, NULL, true );
482 connect( a, SIGNAL( toggled(bool) ), this, SLOT( dblspce(bool) ) );
483 a->setOn(reader->bdblspce);
484// a->addTo( format );
485
486 a = new QAction( tr( "Indent+" ), QString::null, 0, ag, NULL );
487 connect( a, SIGNAL( activated() ), this, SLOT( indentplus() ) );
488// a->addTo( format );
489
490 a = new QAction( tr( "Indent-" ), QString::null, 0, ag, NULL );
491 connect( a, SIGNAL( activated() ), this, SLOT( indentminus() ) );
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
497 a = new QAction( tr( "Remap" ), QString::null, 0, ag, NULL, true );
498 connect( a, SIGNAL( toggled(bool) ), this, SLOT( remap(bool) ) );
499 a->setOn(reader->bremap);
500
501 a = new QAction( tr( "Embolden" ), QString::null, 0, ag, NULL, true );
502 connect( a, SIGNAL( toggled(bool) ), this, SLOT( embolden(bool) ) );
503 a->setOn(reader->bmakebold);
504 647
505 ag->addTo(encoding);
506 648
507 // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true );
508 // a = new QAction( tr( "Zoom" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 );
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() ) );
515 a->addTo( format );
516 // a->addTo( editBar );
517 format->insertSeparator();
518 649
650 // a->addTo( filebar() );
651// view->insertSeparator();
519 652
653/*
520 a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true ); 654 a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true );
521 connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) ); 655 connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) );
522 a->setOn(reader->m_bMonoSpaced); 656 a->setOn(reader->m_bMonoSpaced);
523 a->addTo( format ); 657 a->addTo( view );
524 658*/
525 a = new QAction( tr( "Set width" ), QString::null, 0, this, NULL); 659/*
660 a = new QAction( tr( "Set Width" ), QString::null, 0, this, NULL);
526 connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) ); 661 connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) );
527 a->addTo( format ); 662 a->addTo( view );
528 663*/
529 encoding = new QPopupMenu(this);
530// format->insertSeparator();
531 format->insertItem( tr( "Encoding" ), encoding );
532
533 ag = new QActionGroup(this);
534
535 m_EncodingAction[0] = new QAction( tr( "Ascii" ), QString::null, 0, ag, NULL, true );
536
537 m_EncodingAction[1] = new QAction( tr( "UTF-8" ), QString::null, 0, ag, NULL, true );
538
539 m_EncodingAction[2] = new QAction( tr( "UCS-2(BE)" ), QString::null, 0, ag, NULL, true );
540
541 m_EncodingAction[3] = new QAction( tr( "USC-2(LE)" ), QString::null, 0, ag, NULL, true );
542
543 m_EncodingAction[4] = new QAction( tr( "Palm" ), QString::null, 0, ag, NULL, true );
544
545 m_EncodingAction[5] = new QAction( tr( "Windows(1252)" ), QString::null, 0, ag, NULL, true );
546
547 ag->addTo(encoding);
548
549 connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( encodingSelected(QAction*) ) );
550
551 a = new QAction( tr( "Set Font" ), QString::null, 0, this);
552 connect( a, SIGNAL( activated() ), this, SLOT( setfont() ) );
553 format->insertSeparator();
554 a->addTo( format );
555
556 QPopupMenu *marks = new QPopupMenu( this );
557 664
558 a = new QAction( tr( "Mark" ), QString::null, 0, this, NULL); 665 m_mark_action = new QAction( tr( "Bookmark" ), getmyicon( "bookmark" ), QString::null, 0, this, NULL);
559 connect( a, SIGNAL( activated() ), this, SLOT( addbkmk() ) ); 666 connect( m_mark_action, SIGNAL( activated() ), this, SLOT( addbkmk() ) );
560 a->addTo( marks ); 667 m_mark_action->addTo( marks );
561 668
562 a = new QAction( tr( "Annotate" ), QString::null, 0, this, NULL); 669 m_annotate_action = new QAction( tr( "Annotate" ), getmyicon( "annotate" ), QString::null, 0, this, NULL);
563 connect( a, SIGNAL( activated() ), this, SLOT( addanno() ) ); 670 connect( m_annotate_action, SIGNAL( activated() ), this, SLOT( addanno() ) );
564 a->addTo( marks ); 671 m_annotate_action->addTo( marks );
565 672
566 a = new QAction( tr( "Goto" ), QString::null, 0, this, NULL, false ); 673 m_goto_action = new QAction( tr( "Goto" ), getmyicon( "bookmark_goto" ), QString::null, 0, this, NULL, false );
567 connect( a, SIGNAL( activated() ), this, SLOT( do_gotomark() ) ); 674 connect( m_goto_action, SIGNAL( activated() ), this, SLOT( do_gotomark() ) );
568 a->addTo( marks ); 675 m_goto_action->addTo( marks );
569 676
570 a = new QAction( tr( "Delete" ), QString::null, 0, this, NULL); 677 m_delete_action = new QAction( tr( "Delete" ), getmyicon( "bookmark_delete" ), QString::null, 0, this, NULL);
571 connect( a, SIGNAL( activated() ), this, SLOT( do_delmark() ) ); 678 connect( m_delete_action, SIGNAL( activated() ), this, SLOT( do_delmark() ) );
572 a->addTo( marks ); 679 m_delete_action->addTo( marks );
573 680
574 a = new QAction( tr( "Autogen" ), QString::null, 0, this, NULL, false ); 681 m_autogen_action = new QAction( tr( "Autogen" ), geticon( "exec" ), QString::null, 0, this, NULL, false );
575 connect( a, SIGNAL( activated() ), this, SLOT( do_autogen() ) ); 682 connect( m_autogen_action, SIGNAL( activated() ), this, SLOT( do_autogen() ) );
576 marks->insertSeparator(); 683 marks->insertSeparator();
577 a->addTo( marks ); 684 m_autogen_action->addTo( marks );
578 685
579 a = new QAction( tr( "Clear" ), QString::null, 0, this, NULL); 686 m_clear_action = new QAction( tr( "Clear" ), getmyicon( "bookmark_clear" ), QString::null, 0, this, NULL);
580 connect( a, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) ); 687 connect( m_clear_action, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) );
581 a->addTo( marks ); 688 m_clear_action->addTo( marks );
582 689
583 a = new QAction( tr( "Save" ), QString::null, 0, this, NULL ); 690 m_save_action = new QAction( tr( "Save" ), getmyicon( "bookmark_save" ), QString::null, 0, this, NULL );
584 connect( a, SIGNAL( activated() ), this, SLOT( savebkmks() ) ); 691 connect( m_save_action, SIGNAL( activated() ), this, SLOT( savebkmks() ) );
585 a->addTo( marks ); 692 m_save_action->addTo( marks );
586 693
587 a = new QAction( tr( "Tidy" ), QString::null, 0, this, NULL); 694 m_tidy_action = new QAction( tr( "Tidy" ), getmyicon( "bookmark_tidy" ), QString::null, 0, this, NULL);
588 connect( a, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) ); 695 connect( m_tidy_action, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) );
589 marks->insertSeparator(); 696 marks->insertSeparator();
590 a->addTo( marks ); 697 m_tidy_action->addTo( marks );
591 698
592 a = new QAction( tr( "Start Block" ), QString::null, 0, this, NULL); 699 m_startBlock_action = new QAction( tr( "Start Block" ), geticon( "new" ), QString::null, 0, this, NULL);
593 connect( a, SIGNAL( activated() ), this, SLOT( editMark() ) ); 700 connect( m_startBlock_action, SIGNAL( activated() ), this, SLOT( editMark() ) );
594 marks->insertSeparator(); 701 marks->insertSeparator();
595 a->addTo( marks ); 702 m_startBlock_action->addTo( marks );
703
704 m_endBlock_action = new QAction( tr( "Copy Block" ), geticon( "copy" ), QString::null, 0, this, NULL);
705 connect( m_endBlock_action, SIGNAL( activated() ), this, SLOT( editCopy() ) );
706 m_endBlock_action->addTo( marks );
596 707
597 a = new QAction( tr( "Copy Block" ), QString::null, 0, this, NULL); 708 m_bkmkAvail = NULL;
598 connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) );
599 a->addTo( marks );
600 709
601 710
602 mb->insertItem( tr( "File" ), file ); 711 setToolBarsMovable(m_tbmove);
603 // mb->insertItem( tr( "Edit" ), edit ); 712 addtoolbars(&config);
604 mb->insertItem( tr( "Format" ), format ); 713
605 mb->insertItem( tr( "Marks" ), marks ); 714 pbar = new QProgressBar(this);
715 pbar->hide();
606 716
607 searchBar = new QFloatBar( "Search", this, QMainWindow::Top, TRUE ); 717 searchBar = new QFloatBar( "Search", this, QMainWindow::Top, TRUE );
608 718
609 searchBar->setHorizontalStretchable( TRUE ); 719 searchBar->setHorizontalStretchable( TRUE );
610 720
611 connect(searchBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); 721 connect(searchBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() ));
612 722
613 searchEdit = new QLineEdit( searchBar, "searchEdit" ); 723 searchEdit = new QLineEdit( searchBar, "searchEdit" );
614// QFont f("unifont", 16 /*, QFont::Bold*/); 724// QFont f("unifont", 16 /*, QFont::Bold*/);
615// searchEdit->setFont( f ); 725// searchEdit->setFont( f );
616 searchBar->setStretchableWidget( searchEdit ); 726 searchBar->setStretchableWidget( searchEdit );
617 727
728
618#ifdef __ISEARCH 729#ifdef __ISEARCH
619 connect( searchEdit, SIGNAL( textChanged( const QString & ) ), 730 connect( searchEdit, SIGNAL( textChanged( const QString & ) ),
620 this, SLOT( search( const QString& ) ) ); 731 this, SLOT( search( const QString& ) ) );
621#else 732#else
622 connect( searchEdit, SIGNAL( returnPressed( ) ), 733 connect( searchEdit, SIGNAL( returnPressed( ) ),
623 this, SLOT( search( ) ) ); 734 this, SLOT( search( ) ) );
624#endif 735#endif
625 a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 ); 736 QAction*a = new QAction( tr( "Find Next" ), geticon( "next" ), QString::null, 0, this, 0 );
626 connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) ); 737 connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) );
627 a->addTo( searchBar ); 738 a->addTo( searchBar );
628 739
629 a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); 740 a = new QAction( tr( "Close Find" ), geticon( "close" ), QString::null, 0, this, 0 );
630 connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) ); 741 connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) );
631 a->addTo( searchBar ); 742 a->addTo( searchBar );
632 743
633 searchBar->hide(); 744 searchBar->hide();
634 745
635 regBar = new QFloatBar( "Autogen", this, QMainWindow::Top, TRUE ); 746 regBar = new QFloatBar( "Autogen", this, QMainWindow::Top, TRUE );
636 connect(regBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); 747 connect(regBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() ));
637 748
638 regBar->setHorizontalStretchable( TRUE ); 749 regBar->setHorizontalStretchable( TRUE );
639 750
640 regEdit = new QLineEdit( regBar, "regEdit" ); 751 regEdit = new QLineEdit( regBar, "regEdit" );
641// regEdit->setFont( f ); 752// regEdit->setFont( f );
642 753
643 regBar->setStretchableWidget( regEdit ); 754 regBar->setStretchableWidget( regEdit );
644 755
645 connect( regEdit, SIGNAL( returnPressed( ) ), 756 connect( regEdit, SIGNAL( returnPressed( ) ),
646 this, SLOT( do_regaction() ) ); 757 this, SLOT( do_regaction() ) );
647 758
648 a = new QAction( tr( "Do Reg" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); 759 a = new QAction( tr( "Do Reg" ), geticon( "enter" ), QString::null, 0, this, 0 );
649 connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) ); 760 connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) );
650 a->addTo( regBar ); 761 a->addTo( regBar );
651 762
652 a = new QAction( tr( "Close Edit" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); 763 a = new QAction( tr( "Close Edit" ), geticon( "close" ), QString::null, 0, this, 0 );
653 connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) ); 764 connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) );
654 a->addTo( regBar ); 765 a->addTo( regBar );
655 766
656 regBar->hide(); 767 regBar->hide();
657 768
658 m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE ); 769 m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE );
659 770
660 m_fontBar->setHorizontalStretchable( TRUE ); 771 m_fontBar->setHorizontalStretchable( TRUE );
661 772
662 qDebug("Font selector"); 773// qDebug("Font selector");
663 m_fontSelector = new QComboBox(false, m_fontBar); 774 m_fontSelector = new QComboBox(false, m_fontBar);
664 m_fontBar->setStretchableWidget( m_fontSelector ); 775 m_fontBar->setStretchableWidget( m_fontSelector );
665 { 776 {
777#ifndef USEQPE
778 QFontDatabase f;
779#else
666 FontDatabase f; 780 FontDatabase f;
781#endif
667 QStringList flist = f.families(); 782 QStringList flist = f.families();
668 m_fontSelector->insertStringList(flist);
669
670 bool realfont = false; 783 bool realfont = false;
671 for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++) 784 for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++)
672 { 785 {
673 if (reader->m_fontname == *nm) 786 if (reader->m_fontname == *nm)
674 { 787 {
675 realfont = true; 788 realfont = true;
676 } 789 }
677 if (*nm == "courier") reader->m_fontControl.hasCourier(true); 790 if ((*nm).contains(FIXEDFONT,false)) reader->m_fontControl.hasCourier(true, *nm);
678 } 791 }
679 if (!realfont) reader->m_fontname = flist[0]; 792 if (!realfont) reader->m_fontname = flist[0];
680 } // delete the FontDatabase!!! 793 } // delete the FontDatabase!!!
681
682 connect( m_fontSelector, SIGNAL( activated(const QString& ) ), 794 connect( m_fontSelector, SIGNAL( activated(const QString& ) ),
683 this, SLOT( do_setfont(const QString&) ) ); 795 this, SLOT( do_setfont(const QString&) ) );
796 connect( m_fontSelector, SIGNAL( activated(int ) ),
797 this, SLOT( do_setencoding(int) ) );
684 798
685 m_fontBar->hide(); 799 m_fontBar->hide();
686 m_fontVisible = false; 800 m_fontVisible = false;
687 801#ifdef USEMSGS
688 connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ), 802 connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ),
689 this, SLOT( msgHandler(const QCString&, const QByteArray&) ) ); 803 this, SLOT( msgHandler(const QCString&, const QByteArray&) ) );
690 804#endif
691 qDebug("Initing"); 805// qDebug("Initing");
692 reader->init(); 806 reader->init();
693 qDebug("Inited"); 807// qDebug("Inited");
694 m_EncodingAction[reader->m_encd]->setOn(true); 808// m_buttonAction[m_spaceTarget]->setOn(true);
695 m_buttonAction[m_spaceTarget]->setOn(true); 809// qDebug("fonting");
696 qDebug("fonting");
697 do_setfont(reader->m_fontname); 810 do_setfont(reader->m_fontname);
698 if (!reader->m_lastfile.isEmpty()) 811 if (!reader->m_lastfile.isEmpty())
699 { 812 {
700 qDebug("doclnk"); 813 //qDebug("doclnk");
701 //doc = new DocLnk(reader->m_lastfile); 814 //doc = new DocLnk(reader->m_lastfile);
702 qDebug("doclnk done"); 815 //qDebug("doclnk done");
703 if (pOpenlist != NULL) 816 if (pOpenlist != NULL)
704 { 817 {
705 818
706/* 819/*
707 int ind = 0; 820 int ind = 0;
708 Bkmk* p = (*pOpenlist)[ind]; 821 Bkmk* p = (*pOpenlist)[ind];
709 while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile) 822 while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile)
710 { 823 {
711 p = (*pOpenlist)[++ind]; 824 p = (*pOpenlist)[++ind];
712 } 825 }
713*/ 826*/
714 Bkmk* p = NULL; 827 Bkmk* p = NULL;
715 for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++) 828 for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++)
716 { 829 {
717 p = iter.pContent(); 830 p = iter.pContent();
718 if (toQString(CFiledata(p->anno()).name()) == reader->m_lastfile) 831 if (toQString(CFiledata(p->anno()).name()) == reader->m_lastfile)
719 { 832 {
720 break; 833 break;
721 } 834 }
722 qDebug("Item:%s", (const char*)toQString(CFiledata(p->anno()).name())); 835 // qDebug("Item:%s", (const char*)toQString(CFiledata(p->anno()).name()));
723 p = NULL; 836 p = NULL;
724 } 837 }
725 if (p != NULL) 838 if (p != NULL)
726 { 839 {
727 qDebug("openfrombkmk"); 840 //qDebug("openfrombkmk");
728 openfrombkmk(p); 841 if (!openfrombkmk(p))
842 showEditTools();
729 } 843 }
730 else 844 else
731 { 845 {
732 qDebug("openfile"); 846 //qDebug("openfile");
733 openFile( reader->m_lastfile ); 847 openFile( reader->m_lastfile );
734 } 848 }
735 } 849 }
736 else 850 else
737 { 851 {
738 qDebug("Openfile 2"); 852 // qDebug("Openfile 2");
739 if (!reader->m_lastfile.isNull()) 853 if (!reader->m_lastfile.isEmpty())
740 openFile( reader->m_lastfile ); 854 openFile( reader->m_lastfile );
741 } 855 }
742 } 856 }
743 qApp->processEvents(); 857 else
858 {
859 showEditTools();
860 }
861// qApp->processEvents();
744 reader->bDoUpdates = true; 862 reader->bDoUpdates = true;
745 reader->update(); 863 reader->update();
746 qDebug("finished update"); 864 config.setGroup("Version");
865 int major = config.readNumEntry("Major", 0);
866 int bkmktype = config.readNumEntry("BkmkType", 0);
867 char minor = config.readNumEntry("Minor", 0);
868 if (CheckVersion(major, bkmktype, minor))
869 {
870 config.writeEntry("Major", major);
871 config.writeEntry("BkmkType", bkmktype);
872 config.writeEntry("Minor", (int)minor);
873 }
874// qDebug("finished update");
875}
876
877void QTReaderApp::addtoolbars(Config* config)
878{
879 config->setGroup("Toolbar");
880
881 if (fileBar != NULL)
882 {
883 if (fileBar != menubar)
884 {
885 fileBar->clear();
886 }
887 else
888 {
889 m_preferences_action->removeFrom( filebar() );
890 m_open_action->removeFrom( filebar() );
891 m_close_action->removeFrom( filebar() );
892 m_info_action->removeFrom( filebar() );
893 m_touch_action->removeFrom( filebar() );
894 m_find_action->removeFrom( filebar() );
895 }
896 }
897
898 m_preferences_action->addTo( filebar() );
899 addfilebar(config, "Open", m_open_action);
900 addfilebar(config, "Close", m_close_action);
901 addfilebar(config, "Info", m_info_action);
902 addfilebar(config, "Two/One Touch", m_touch_action);
903 addfilebar(config, "Find", m_find_action);
904
905 if (navBar != NULL)
906 {
907 if ((navBar == fileBar) && (fileBar == menubar))
908 {
909 m_scrollButton->removeFrom( navbar() );
910 m_start_action->removeFrom( navbar() );
911 m_end_action->removeFrom( navbar() );
912 m_jump_action->removeFrom( navbar() );
913 m_pageline_action->removeFrom( navbar() );
914 m_pageup_action->removeFrom( navbar() );
915 m_pagedn_action->removeFrom( navbar() );
916 m_back_action->removeFrom( navbar() );
917 m_home_action->removeFrom( navbar() );
918 m_forward_action->removeFrom( navbar() );
919 }
920 else if (navBar != fileBar)
921 {
922 navBar->clear();
923 }
924 }
925
926 addnavbar(config, "Scroll", m_scrollButton);
927 addnavbar(config, "Goto Start", m_start_action);
928 addnavbar(config, "Goto End", m_end_action);
929
930 addnavbar(config, "Jump", m_jump_action);
931 addnavbar(config, "Page/Line Scroll", m_pageline_action);
932
933 addnavbar(config, "Page Up", m_pageup_action);
934 addnavbar(config, "Page Down", m_pagedn_action);
935
936 addnavbar(config, "Back", m_back_action);
937 addnavbar(config, "Home", m_home_action);
938 addnavbar(config, "Forward", m_forward_action);
939
940 if (viewBar != NULL)
941 {
942 if ((viewBar == fileBar) && (fileBar == menubar))
943 {
944 m_actFullscreen->removeFrom( filebar() );
945 m_zoomin_action->removeFrom( viewbar() );
946 m_zoomout_action->removeFrom( viewbar() );
947 m_setfont_action->removeFrom( viewbar() );
948 m_setenc_action->removeFrom( viewbar() );
949 m_setmono_action->removeFrom( viewbar() );
950 }
951 else if (viewBar != fileBar)
952 {
953 viewBar->clear();
954 }
955 }
956
957 addviewbar(config, "Fullscreen", m_actFullscreen);
958 addviewbar(config, "Zoom In", m_zoomin_action);
959 addviewbar(config, "Zoom Out", m_zoomout_action);
960 addviewbar(config, "Set Font", m_setfont_action);
961 addviewbar(config, "Encoding Select", m_setenc_action);
962 addviewbar(config, "Ideogram Mode", m_setmono_action);
963
964 if (markBar != NULL)
965 {
966 if ((markBar == fileBar) && (fileBar == menubar))
967 {
968 m_mark_action->removeFrom( markbar() );
969 m_annotate_action->removeFrom( markbar());
970 m_goto_action->removeFrom( markbar() );
971 m_delete_action->removeFrom( markbar() );
972 m_autogen_action->removeFrom( markbar() );
973 m_clear_action->removeFrom( markbar() );
974 m_save_action->removeFrom( markbar() );
975 m_tidy_action->removeFrom( markbar() );
976 m_startBlock_action->removeFrom( markbar() );
977 m_endBlock_action->removeFrom( markbar() );
978 }
979 else if (markBar != fileBar)
980 {
981 markBar->clear();
982 }
983 }
984 addmarkbar(config, "Mark", m_mark_action);
985 addmarkbar(config, "Annotate", m_annotate_action);
986 addmarkbar(config, "Goto", m_goto_action);
987 addmarkbar(config, "Delete", m_delete_action);
988 addmarkbar(config, "Autogen", m_autogen_action);
989 addmarkbar(config, "Clear", m_clear_action);
990 addmarkbar(config, "Save", m_save_action);
991 addmarkbar(config, "Tidy", m_tidy_action);
992 addmarkbar(config, "Start Block", m_startBlock_action);
993 addmarkbar(config, "Copy Block", m_endBlock_action);
994 if (checkbar(config, "Annotation indicator"))
995 {
996 if (m_bkmkAvail == NULL)
997 {
998 m_bkmkAvail = new QAction( tr( "Annotation" ), geticon( "find" ), QString::null, 0, this, 0 );
999 connect( m_bkmkAvail, SIGNAL( activated() ), this, SLOT( showAnnotation() ) );
1000
1001 m_bkmkAvail->setEnabled(false);
1002 }
1003 QLabel *spacer = new QLabel(markBar, "");
1004 markbar()->setStretchableWidget(spacer);
1005 m_bkmkAvail->removeFrom( markbar() );
1006 m_bkmkAvail->addTo( markbar() );
1007 }
1008 else
1009 {
1010 if (m_bkmkAvail != NULL)
1011 {
1012 m_bkmkAvail->removeFrom( markbar() );
1013 delete m_bkmkAvail;
1014 m_bkmkAvail = NULL;
1015 }
1016 }
1017}
1018
1019bool QTReaderApp::checkbar(Config* _config, const QString& key)
1020{
1021 return _config->readBoolEntry(key, false);
1022}
1023
1024
1025QToolBar* QTReaderApp::filebar()
1026{
1027 if (fileBar == NULL)
1028 {
1029 switch (m_tbpol)
1030 {
1031 case cesSingle:
1032 // qDebug("Setting filebar to menubar");
1033 fileBar = menubar;
1034 break;
1035 default:
1036 qDebug("Incorrect toolbar policy set");
1037 case cesMenuTool:
1038 case cesMultiple:
1039 // qDebug("Creating new file bar");
1040 fileBar = new QToolBar("File", this, m_tbposition);
1041 break;
1042 }
1043 //fileBar->setHorizontalStretchable( true );
1044 }
1045 return fileBar;
1046}
1047QToolBar* QTReaderApp::viewbar()
1048{
1049 if (viewBar == NULL)
1050 {
1051 switch (m_tbpol)
1052 {
1053 case cesMultiple:
1054 viewBar = new QToolBar("View", this, m_tbposition);
1055 break;
1056 default:
1057 qDebug("Incorrect toolbar policy set");
1058 case cesSingle:
1059 case cesMenuTool:
1060 viewBar = fileBar;
1061 break;
1062 }
1063 }
1064 return viewBar;
1065}
1066QToolBar* QTReaderApp::navbar()
1067{
1068 if (navBar == NULL)
1069 {
1070 switch (m_tbpol)
1071 {
1072 case cesMultiple:
1073 // qDebug("Creating new nav bar");
1074 navBar = new QToolBar("Navigation", this, m_tbposition);
1075 break;
1076 default:
1077 qDebug("Incorrect toolbar policy set");
1078 case cesSingle:
1079 case cesMenuTool:
1080 navBar = fileBar;
1081 // qDebug("Setting navbar to filebar");
1082 break;
1083 }
1084 }
1085 return navBar;
1086}
1087QToolBar* QTReaderApp::markbar()
1088{
1089 if (markBar == NULL)
1090 {
1091 switch (m_tbpol)
1092 {
1093 case cesMultiple:
1094 markBar = new QToolBar("Marks", this, m_tbposition);
1095 break;
1096 default:
1097 qDebug("Incorrect toolbar policy set");
1098 case cesSingle:
1099 case cesMenuTool:
1100 markBar = fileBar;
1101 break;
1102 }
1103 }
1104 return markBar;
1105}
1106
1107void QTReaderApp::addfilebar(Config* _config, const QString& key, QAction* a)
1108{
1109 if (_config->readBoolEntry(key, false)) a->addTo( filebar() );
1110}
1111void QTReaderApp::addnavbar(Config* _config, const QString& key, QAction* a)
1112{
1113 if (_config->readBoolEntry(key, false)) a->addTo( navbar() );
1114}
1115void QTReaderApp::addmarkbar(Config* _config, const QString& key, QAction* a)
1116{
1117 if (_config->readBoolEntry(key, false)) a->addTo( markbar() );
1118}
1119void QTReaderApp::addviewbar(Config* _config, const QString& key, QAction* a)
1120{
1121 if (_config->readBoolEntry(key, false)) a->addTo( viewbar() );
747} 1122}
748 1123
749void QTReaderApp::suspend() { reader->suspend(); } 1124void QTReaderApp::suspend() { reader->suspend(); }
750 1125
1126#ifdef USEMSGS
751void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data) 1127void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data)
752{ 1128{
753 QString msg = QString::fromUtf8(_msg); 1129 QString msg = QString::fromUtf8(_msg);
754 1130
755// qDebug("Received:%s", (const char*)msg); 1131//// qDebug("Received:%s", (const char*)msg);
756 1132
757 QDataStream stream( _data, IO_ReadOnly ); 1133 QDataStream stream( _data, IO_ReadOnly );
758 if ( msg == "info(QString)" ) 1134 if ( msg == "info(QString)" )
759 { 1135 {
760 QString info; 1136 QString info;
761 stream >> info; 1137 stream >> info;
762 QMessageBox::information(this, PROGNAME, info); 1138 QMessageBox::information(this, PROGNAME, info);
763 } 1139 }
1140 else if ( msg == "Update(int)" )
1141 {
1142 int info;
1143 stream >> info;
1144 if (info)
1145 {
1146 reader->bDoUpdates = true;
1147 reader->refresh();
1148 }
1149 else
1150 {
1151 reader->bDoUpdates = false;
1152 }
1153 }
764 else if ( msg == "warn(QString)" ) 1154 else if ( msg == "warn(QString)" )
765 { 1155 {
766 QString info; 1156 QString info;
767 stream >> info; 1157 stream >> info;
768 QMessageBox::warning(this, PROGNAME, info); 1158 QMessageBox::warning(this, PROGNAME, info);
769 } 1159 }
770
771
772 else if ( msg == "exit()" ) 1160 else if ( msg == "exit()" )
773 { 1161 {
774 m_dontSave = true; 1162 m_dontSave = true;
775 close(); 1163 close();
776 } 1164 }
777 else if ( msg == "pageDown()" ) 1165 else if ( msg == "pageDown()" )
778 { 1166 {
779 reader->dopagedn(); 1167 reader->dopagedn();
780 } 1168 }
781 else if ( msg == "pageUp()" ) 1169 else if ( msg == "pageUp()" )
782 { 1170 {
783 reader->dopageup(); 1171 reader->dopageup();
784 } 1172 }
785 else if ( msg == "lineDown()" ) 1173 else if ( msg == "lineDown()" )
786 { 1174 {
787 reader->lineDown(); 1175 reader->lineDown();
788 } 1176 }
789 else if ( msg == "lineUp()" ) 1177 else if ( msg == "lineUp()" )
790 { 1178 {
791 reader->lineUp(); 1179 reader->lineUp();
792 } 1180 }
793 else if ( msg == "showText()" ) 1181 else if ( msg == "showText()" )
794 { 1182 {
795 showEditTools(); 1183 showEditTools();
796 } 1184 }
1185 else if ( msg == "home()" )
1186 {
1187 reader->goHome();
1188 }
1189 else if ( msg == "back()" )
1190 {
1191 reader->goBack();
1192 }
1193 else if ( msg == "forward()" )
1194 {
1195 reader->goForward();
1196 }
797 else if ( msg == "File/Open(QString)" ) 1197 else if ( msg == "File/Open(QString)" )
798 { 1198 {
799 QString info; 1199 QString info;
800 stream >> info; 1200 stream >> info;
801 openFile( info ); 1201 openFile( info );
802 } 1202 }
803 else if ( msg == "File/Info()" ) 1203 else if ( msg == "File/Info()" )
804 { 1204 {
805 showinfo(); 1205 showinfo();
806 } 1206 }
807 else if ( msg == "File/Start Block()" ) 1207 else if ( msg == "File/Action(QString)" )
808 {
809 editMark();
810 }
811 else if ( msg == "File/Copy Block()" )
812 { 1208 {
813 editCopy(); 1209 QString info;
1210 stream >> info;
1211 m_spaceTarget = ActNameToInt(info);
814 } 1212 }
815 else if ( msg == "File/Scroll(int)" ) 1213 else if ( msg == "Navigation/Scroll(int)" )
816 { 1214 {
817 int info; 1215 int info;
818 stream >> info; 1216 stream >> info;
819 autoScroll(info); 1217 autoScroll(info);
820 } 1218 }
821 else if ( msg == "File/Jump(int)" ) 1219
1220 else if ( msg == "Navigation/GotoStart()" )
1221 {
1222 gotoStart();
1223 }
1224 else if ( msg == "Navigation/GotoEnd()" )
1225 {
1226 gotoEnd();
1227 }
1228 else if ( msg == "Navigation/Jump(int)" )
822 { 1229 {
823 int info; 1230 int info;
824 stream >> info; 1231 stream >> info;
825 reader->locate(info); 1232 reader->locate(info);
826 } 1233 }
827 else if ( msg == "File/Page/Line Scroll(int)" ) 1234 else if ( msg == "Navigation/Page/LineScroll(int)" )
828 { 1235 {
829 int info; 1236 int info;
830 stream >> info; 1237 stream >> info;
831 pagemode(info); 1238 pagemode(info);
832 } 1239 }
833 else if ( msg == "File/Set Overlap(int)" ) 1240 else if ( msg == "Navigation/SetOverlap(int)" )
834 { 1241 {
835 int info; 1242 int info;
836 stream >> info; 1243 stream >> info;
837 reader->m_overlap = info; 1244 reader->m_overlap = info;
838 } 1245 }
839 else if ( msg == "File/Set Dictionary(QString)" ) 1246 else if ( msg == "Navigation/SetMargin(int)" )
1247 {
1248 int info;
1249 stream >> info;
1250 do_margin(info);
1251 }
1252 else if ( msg == "File/SetDictionary(QString)" )
840 { 1253 {
841 QString info; 1254 QString info;
842 stream >> info; 1255 stream >> info;
843 do_settarget(info); 1256 do_settarget(info);
844 } 1257 }
845 else if ( msg == "File/Two/One Touch(int)" ) 1258#ifdef _SCROLLPIPE
1259 else if ( msg == "File/SetScrollTarget(QString)" )
1260 {
1261 QString info;
1262 stream >> info;
1263 reader->m_pipetarget = info;
1264 }
1265#endif
1266 else if ( msg == "File/Two/OneTouch(int)" )
846 { 1267 {
847 int info; 1268 int info;
848 stream >> info; 1269 stream >> info;
849 setTwoTouch(info); 1270 setTwoTouch(info);
850 } 1271 }
851 else if ( msg == "Target/Annotation(int)" ) 1272 else if ( msg == "Target/Annotation(int)" )
852 { 1273 {
853 int info; 1274 int info;
854 stream >> info; 1275 stream >> info;
855 OnAnnotation(info); 1276 OnAnnotation(info);
856 } 1277 }
857 else if ( msg == "Target/Dictionary(int)" ) 1278 else if ( msg == "Target/Dictionary(int)" )
858 { 1279 {
859 int info; 1280 int info;
860 stream >> info; 1281 stream >> info;
861 OnDictionary(info); 1282 OnDictionary(info);
862 } 1283 }
863 else if ( msg == "Target/Clipboard(int)" ) 1284 else if ( msg == "Target/Clipboard(int)" )
864 { 1285 {
865 int info; 1286 int info;
866 stream >> info; 1287 stream >> info;
867 OnClipboard(info); 1288 OnClipboard(info);
868 } 1289 }
869 else if ( msg == "File/Find(QString)" ) 1290 else if ( msg == "File/Find(QString)" )
870 { 1291 {
871 QString info; 1292 QString info;
872 stream >> info; 1293 stream >> info;
873 QRegExp arg(info); 1294 QRegExp arg(info);
874 size_t pos = reader->pagelocate(); 1295 size_t pos = reader->pagelocate();
875 size_t start = pos; 1296 size_t start = pos;
876 CDrawBuffer test(&(reader->m_fontControl)); 1297 CDrawBuffer test(&(reader->m_fontControl));
877 reader->buffdoc.getline(&test,reader->width()); 1298 reader->getline(&test);
878 while (arg.match(toQString(test.data())) == -1) 1299 while (arg.match(toQString(test.data())) == -1)
879 { 1300 {
880 pos = reader->locate(); 1301 pos = reader->locate();
881 if (!reader->buffdoc.getline(&test,reader->width())) 1302 if (!reader->getline(&test))
882 { 1303 {
883 QMessageBox::information(this, PROGNAME, QString("Can't find\n")+info); 1304 QMessageBox::information(this, PROGNAME, QString("Can't find\n")+info);
884 pos = start; 1305 pos = start;
885 break; 1306 break;
886 } 1307 }
887 } 1308 }
888 reader->locate(pos); 1309 reader->locate(pos);
889 } 1310 }
890 else if ( msg == "Layout/Strip CR(int)" ) 1311 else if ( msg == "File/Fullscreen(int)" )
891 { 1312 {
892 int info; 1313 int info;
893 stream >> info; 1314 stream >> info;
894 stripcr(info); 1315 setfullscreen(info);
895 } 1316 }
896 else if ( msg == "Layout/Single Space" ) 1317 else if ( msg == "File/Continuous(int)" )
897 { 1318 {
898 int info; 1319 int info;
899 stream >> info; 1320 stream >> info;
900 onespace(info); 1321 setcontinuous(info);
901 } 1322 }
902#ifdef REPALM 1323 else if ( msg == "Markup(QString)" )
903 else if ( msg == "Layout/Repalm(int)" ) 1324 {
1325 QString info;
1326 stream >> info;
1327 if (info == "Auto")
1328 {
1329 autofmt(true);
1330 }
1331 if (info == "None")
1332 {
1333 autofmt(false);
1334 textfmt(false);
1335 striphtml(false);
1336 peanut(false);
1337 }
1338 if (info == "Text")
1339 {
1340 textfmt(true);
1341 }
1342 if (info == "HTML")
1343 {
1344 striphtml(true);
1345 }
1346 if (info == "Peanut/PML")
1347 {
1348 peanut(true);
1349 }
1350 }
1351 else if ( msg == "Layout/StripCR(int)" )
904 { 1352 {
905 int info; 1353 int info;
906 stream >> info; 1354 stream >> info;
907 repalm(info); 1355 stripcr(info);
908 } 1356 }
909#endif 1357 else if ( msg == "Layout/Dehyphen(int)" )
910 else if ( msg == "Markup/Auto(int)" )
911 { 1358 {
912 int info; 1359 int info;
913 stream >> info; 1360 stream >> info;
914 autofmt(info); 1361 dehyphen(info);
915 } 1362 }
916 else if ( msg == "Markup/Text(int)" ) 1363 else if ( msg == "Layout/Depluck(int)" )
917 { 1364 {
918 int info; 1365 int info;
919 stream >> info; 1366 stream >> info;
920 textfmt(info); 1367 depluck(info);
921 } 1368 }
922 else if ( msg == "Markup/HTML(int)" ) 1369 else if ( msg == "Layout/Dejpluck(int)" )
923 { 1370 {
924 int info; 1371 int info;
925 stream >> info; 1372 stream >> info;
926 striphtml(info); 1373 dejpluck(info);
927 } 1374 }
928 else if ( msg == "Markup/Peanut(int)" ) 1375 else if ( msg == "Layout/SingleSpace(int)" )
929 { 1376 {
930 int info; 1377 int info;
931 stream >> info; 1378 stream >> info;
932 peanut(info); 1379 onespace(info);
933 } 1380 }
934 else if ( msg == "Layout/Dehyphen(int)" ) 1381#ifdef REPALM
1382 else if ( msg == "Layout/Repalm(int)" )
935 { 1383 {
936 int info; 1384 int info;
937 stream >> info; 1385 stream >> info;
938 dehyphen(info); 1386 repalm(info);
939 } 1387 }
1388#endif
940 else if ( msg == "Layout/Unindent(int)" ) 1389 else if ( msg == "Layout/Unindent(int)" )
941 { 1390 {
942 int info; 1391 int info;
943 stream >> info; 1392 stream >> info;
944 unindent(info); 1393 unindent(info);
945 } 1394 }
946 else if ( msg == "Layout/Re-paragraph(int)" ) 1395 else if ( msg == "Layout/Re-paragraph(int)" )
947 { 1396 {
948 int info; 1397 int info;
949 stream >> info; 1398 stream >> info;
950 repara(info); 1399 repara(info);
951 } 1400 }
952 else if ( msg == "Layout/Double Space(int)" ) 1401 else if ( msg == "Layout/DoubleSpace(int)" )
953 { 1402 {
954 int info; 1403 int info;
955 stream >> info; 1404 stream >> info;
956 dblspce(info); 1405 dblspce(info);
957 } 1406 }
958 else if ( msg == "Layout/Indent(int)" ) 1407 else if ( msg == "Layout/Indent(int)" )
959 { 1408 {
960 int info; 1409 int info;
961 stream >> info; 1410 stream >> info;
962 reader->bindenter = info; 1411 reader->bindenter = info;
963 reader->setfilter(reader->getfilter()); 1412 reader->setfilter(reader->getfilter());
964 } 1413 }
965 else if ( msg == "Layout/Remap(int)" ) 1414 else if ( msg == "Layout/Remap(int)" )
966 { 1415 {
967 int info; 1416 int info;
968 stream >> info; 1417 stream >> info;
969 remap(info); 1418 remap(info);
970 } 1419 }
971 else if ( msg == "Layout/Embolden(int)" ) 1420 else if ( msg == "Layout/Embolden(int)" )
972 { 1421 {
973 int info; 1422 int info;
974 stream >> info; 1423 stream >> info;
975 embolden(info); 1424 embolden(info);
976 } 1425 }
977 else if ( msg == "Format/Ideogram/Word(int)" ) 1426 else if ( msg == "Format/Ideogram/Word(int)" )
978 { 1427 {
979 int info; 1428 int info;
980 stream >> info; 1429 stream >> info;
981 monospace(info); 1430 monospace(info);
982 } 1431 }
983 else if ( msg == "Format/Set width(int)" ) 1432 else if ( msg == "Format/SetWidth(int)" )
984 { 1433 {
985 int info; 1434 int info;
986 stream >> info; 1435 stream >> info;
987 reader->m_charpc = info; 1436 reader->m_charpc = info;
988 reader->setfont(); 1437 reader->setfont();
989 reader->refresh(); 1438 reader->refresh();
990 } 1439 }
991 else if ( msg == "Format/Encoding(QString)" ) 1440 else if ( msg == "Format/SetFont(QString,int)" )
992 {
993 QString info;
994 stream >> info;
995 reader->setencoding(EncNameToInt(info));
996 }
997 else if ( msg == "Format/Set Font(QString,int)" )
998 { 1441 {
999 QString fontname; 1442 QString fontname;
1000 int size; 1443 int size;
1001 stream >> fontname; 1444 stream >> fontname;
1002 stream >> size; 1445 stream >> size;
1003 setfontHelper(fontname, size); 1446 setfontHelper(fontname, size);
1004 } 1447 }
1005 else if ( msg == "Marks/Autogen(QString)" ) 1448 else if ( msg == "Marks/Autogen(QString)" )
1006 { 1449 {
1007 QString info; 1450 QString info;
1008 stream >> info; 1451 stream >> info;
1009 do_autogen(info); 1452 do_autogen(info);
1010 } 1453 }
1454 else if ( msg == "File/StartBlock()" )
1455 {
1456 editMark();
1457 }
1458 else if ( msg == "File/CopyBlock()" )
1459 {
1460 editCopy();
1461 }
1011} 1462}
1012 1463#endif
1013ActionTypes QTReaderApp::ActNameToInt(const QString& _enc) 1464ActionTypes QTReaderApp::ActNameToInt(const QString& _enc)
1014{ 1465{
1015 for (int i = 0; i < MAX_ACTIONS; i++) 1466 for (int i = 0; i < MAX_ACTIONS; i++)
1016 { 1467 {
1017 if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i; 1468 if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i;
1018 } 1469 }
1019 return cesAutoScroll; 1470 return cesAutoScroll;
1020} 1471}
1021 1472
1022void QTReaderApp::setfullscreen(bool sfs) 1473void QTReaderApp::setfullscreen(bool sfs)
1023{ 1474{
1024 reader->bDoUpdates = false; 1475 reader->bDoUpdates = false;
1025 m_fullscreen = sfs; 1476 m_fullscreen = sfs;
1026 showEditTools(); 1477 showEditTools();
1027 qApp->processEvents(); 1478// qApp->processEvents();
1028 reader->bDoUpdates = true; 1479 reader->bDoUpdates = true;
1029 reader->update(); 1480 reader->update();
1030} 1481}
1031 1482
1032void QTReaderApp::setcontinuous(bool sfs)
1033{
1034 reader->setContinuous(sfs);
1035 reader->refresh();
1036}
1037
1038int QTReaderApp::EncNameToInt(const QString& _enc)
1039{
1040 for (int i = 0; i < MAX_ENCODING; i++)
1041 {
1042 if (m_EncodingAction[i]->text() == _enc) return i;
1043 }
1044 return 0;
1045/*
1046 if (_enc == "Ascii") return 0;
1047 if (_enc == "UTF-8") return 1;
1048 if (_enc == "UCS-2(BE)") return 2;
1049 if (_enc == "USC-2(LE)") return 3;
1050*/
1051}
1052
1053void QTReaderApp::encodingSelected(QAction* _a)
1054{
1055// qDebug("es:%x : %s", _a, (const char *)(_a->text()));
1056 reader->setencoding(EncNameToInt(_a->text()));
1057}
1058
1059void QTReaderApp::buttonActionSelected(QAction* _a) 1483void QTReaderApp::buttonActionSelected(QAction* _a)
1060{ 1484{
1061// qDebug("es:%x : %s (%u)", _a, (const char *)(_a->text()), ActNameToInt(_a->text())); 1485//// qDebug("es:%x : %s (%u)", _a, (const char *)(_a->text()), ActNameToInt(_a->text()));
1062 m_spaceTarget = ActNameToInt(_a->text()); 1486 m_spaceTarget = ActNameToInt(_a->text());
1063} 1487}
1064 1488
1065QTReaderApp::~QTReaderApp() 1489QTReaderApp::~QTReaderApp()
1066{ 1490{
1067} 1491}
1068 1492
1069void QTReaderApp::autoScroll(bool _b) 1493void QTReaderApp::autoScroll(bool _b)
1070{ 1494{
1071 reader->setautoscroll(_b); 1495 reader->setautoscroll(_b);
1072 setScrollState(reader->m_autoScroll); 1496 setScrollState(reader->m_autoScroll);
1073} 1497}
1074 1498
1075void QTReaderApp::zoomin() 1499void QTReaderApp::zoomin()
1076{ 1500{
1077 reader->zoomin(); 1501 reader->zoomin();
1078} 1502}
1079 1503
1080void QTReaderApp::zoomout() 1504void QTReaderApp::zoomout()
1081{ 1505{
1082 reader->zoomout(); 1506 reader->zoomout();
1083} 1507}
1084 1508
1085void QTReaderApp::clearBkmkList() 1509void QTReaderApp::clearBkmkList()
1086{ 1510{
1087 delete pBkmklist; 1511 delete pBkmklist;
1088 pBkmklist = NULL; 1512 pBkmklist = NULL;
1089 m_fBkmksChanged = false; 1513 m_fBkmksChanged = false;
1090} 1514}
1091 1515
1092void QTReaderApp::fileClose() 1516void QTReaderApp::fileClose()
1093{ 1517{
1094 if (pOpenlist != NULL) 1518 CCloseDialog* cd = new CCloseDialog(reader->m_string, false, this);
1519 if (cd->exec())
1095 { 1520 {
1096 int ind = 0; 1521 if (pOpenlist != NULL)
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 { 1522 {
1105 case 0: 1523 int ind = 0;
1106 default: 1524 Bkmk* p = (*pOpenlist)[ind];
1107 break; 1525 while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile)
1108 case 2: 1526 {
1527 p = (*pOpenlist)[++ind];
1528 }
1529 if (p != NULL) pOpenlist->erase(ind);
1530 if (cd->delFile())
1531 {
1109 unlink((const char*)reader->m_lastfile); 1532 unlink((const char*)reader->m_lastfile);
1110 case 1: 1533 }
1111 unlink((const char *)Global::applicationFileName(APPDIR, reader->m_string)); 1534 if (cd->delMarks())
1535 {
1536#ifndef USEQPE
1537 QDir d = QDir::home(); // "/"
1538 d.cd(APPDIR);
1539 d.remove(reader->m_string);
1540#else /* USEQPE */
1541 unlink((const char *)Global::applicationFileName(APPDIR,reader->m_string));
1542#endif /* USEQPE */
1543 }
1544 if (cd->delConfig())
1545 {
1546#ifndef USEQPE
1547 QDir d = QDir::home(); // "/"
1548 d.cd(APPDIR "/configs");
1549 d.remove(reader->m_string);
1550#else /* USEQPE */
1551 unlink((const char *)Global::applicationFileName(APPDIR "/configs",reader->m_string));
1552#endif /* USEQPE */
1553 }
1112 } 1554 }
1113 }
1114 1555
1115 fileOpen2(); 1556 fileOpen2();
1557 }
1558 delete cd;
1116} 1559}
1117 1560
1118void QTReaderApp::updatefileinfo() 1561void QTReaderApp::updatefileinfo()
1119{ 1562{
1120 if (reader->m_string.isNull()) return; 1563 if (reader->m_string.isEmpty()) return;
1121 if (reader->m_lastfile.isNull()) return; 1564 if (reader->m_lastfile.isEmpty()) return;
1122 tchar* nm = fromQString(reader->m_string); 1565 tchar* nm = fromQString(reader->m_string);
1123 tchar* fl = fromQString(reader->m_lastfile); 1566 tchar* fl = fromQString(reader->m_lastfile);
1124 qDebug("Lastfile:%x", fl); 1567// qDebug("Lastfile:%x", fl);
1125 bool notadded = true; 1568 bool notadded = true;
1126 if (pOpenlist == NULL) pOpenlist = new CList<Bkmk>; 1569 if (pOpenlist == NULL) pOpenlist = new CList<Bkmk>;
1127 else 1570 else
1128 { 1571 {
1129 for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++) 1572 for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++)
1130 { 1573 {
1131 if (ustrcmp(CFiledata(iter->anno()).name(), fl) == 0) 1574 if (ustrcmp(CFiledata(iter->anno()).name(), fl) == 0)
1132 { 1575 {
1133 iter->value(reader->pagelocate()); 1576 iter->value(reader->pagelocate());
1134 unsigned short dlen; 1577 unsigned short dlen;
1135 unsigned char* data; 1578 unsigned char* data;
1136 CFiledata fd(iter->anno()); 1579 CFiledata fd(iter->anno());
1137 reader->setSaveData(data, dlen, fd.content(), fd.length()); 1580 reader->setSaveData(data, dlen, fd.content(), fd.length());
1138 qDebug("Filedata(1):%u, %u", fd.length(), dlen); 1581 // qDebug("Filedata(1):%u, %u", fd.length(), dlen);
1139 // getstate(data, dlen); 1582 // getstate(data, dlen);
1140 iter->setAnno(data, dlen); 1583 iter->setAnno(data, dlen);
1141 notadded = false; 1584 notadded = false;
1142 delete [] data; 1585 delete [] data;
1143 break; 1586 break;
1144 } 1587 }
1145 } 1588 }
1146 } 1589 }
1147 qDebug("Added?:%x", notadded); 1590// qDebug("Added?:%x", notadded);
1148 if (notadded) 1591 if (notadded)
1149 { 1592 {
1150 struct stat fnstat; 1593 struct stat fnstat;
1151 stat((const char *)reader->m_lastfile, &fnstat); 1594 stat((const char *)reader->m_lastfile, &fnstat);
1152 CFiledata fd(fnstat.st_mtime, fl); 1595 CFiledata fd(fnstat.st_mtime, fl);
1153 unsigned short dlen; 1596 unsigned short dlen;
1154 unsigned char* data; 1597 unsigned char* data;
1155 reader->setSaveData(data, dlen, fd.content(), fd.length()); 1598 reader->setSaveData(data, dlen, fd.content(), fd.length());
1156 pOpenlist->push_front(Bkmk(nm, data, dlen, reader->pagelocate())); 1599 pOpenlist->push_front(Bkmk(nm, data, dlen, reader->pagelocate()));
1157 qDebug("Filedata(2):%u, %u", fd.length(), dlen); 1600 //qDebug("Filedata(2):%u, %u", fd.length(), dlen);
1158 delete [] data; 1601 delete [] data;
1159 } 1602 }
1160 delete [] nm; 1603 delete [] nm;
1161 delete [] fl; 1604 delete [] fl;
1162} 1605}
1163 1606
1164void QTReaderApp::fileOpen() 1607void QTReaderApp::fileOpen()
1165{ 1608{
1166/* 1609/*
1167 menu->hide(); 1610 menu->hide();
1168 editBar->hide(); 1611 fileBar->hide();
1169 if (regVisible) regBar->hide(); 1612 if (regVisible) regBar->hide();
1170 if (searchVisible) searchBar->hide(); 1613 if (searchVisible) searchBar->hide();
1171*/ 1614*/
1172 qDebug("fileOpen"); 1615// qDebug("fileOpen");
1173// if (!reader->m_lastfile.isEmpty()) 1616// if (!reader->m_lastfile.isEmpty())
1174 updatefileinfo(); 1617 updatefileinfo();
1175 fileOpen2(); 1618 fileOpen2();
1176} 1619}
1177 1620
1178void QTReaderApp::fileOpen2() 1621void QTReaderApp::fileOpen2()
1179{ 1622{
1180 if (pBkmklist != NULL) 1623 if (pBkmklist != NULL)
1181 { 1624 {
1182 if (m_fBkmksChanged) 1625 if (m_fBkmksChanged)
1183 { 1626 {
1184 if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0) 1627 if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0)
1185 savebkmks(); 1628 savebkmks();
1186 } 1629 }
1187 delete pBkmklist; 1630 delete pBkmklist;
1188 pBkmklist = NULL; 1631 pBkmklist = NULL;
1189 m_fBkmksChanged = false; 1632 m_fBkmksChanged = false;
1190 } 1633 }
1191 reader->disableAutoscroll(); 1634 reader->disableAutoscroll();
1192/* 1635/*
1193 editorStack->raiseWidget( fileSelector ); 1636 editorStack->raiseWidget( fileSelector );
1194 fileSelector->reread(); 1637 fileSelector->reread();
1195*/ 1638*/
1639 bool usebrowser = true;
1196 if (pOpenlist != NULL) 1640 if (pOpenlist != NULL)
1197 { 1641 {
1198 m_nRegAction = cOpenFile; 1642 m_nBkmkAction = cOpenFile;
1199 listbkmk(pOpenlist, "Browse"); 1643 if (listbkmk(pOpenlist, "Browse")) usebrowser = false;
1200 } 1644 }
1201 else 1645 if (usebrowser)
1202 { 1646 {
1203 QString fn = usefilebrowser(); 1647 QString fn = usefilebrowser();
1648 //qApp->processEvents();
1204 if (!fn.isEmpty() && QFileInfo(fn).isFile()) 1649 if (!fn.isEmpty() && QFileInfo(fn).isFile())
1205 { 1650 {
1206 openFile(fn); 1651 openFile(fn);
1207 } 1652 }
1208 reader->setFocus(); 1653 reader->setFocus();
1209 } 1654 }
1655// reader->refresh();
1656// qDebug("HEIGHT:%d", reader->m_lastheight);
1210} 1657}
1211 1658
1212QString QTReaderApp::usefilebrowser() 1659QString QTReaderApp::usefilebrowser()
1213{ 1660{
1214 fileBrowser* fb = new fileBrowser(this,"QTReader",TRUE, 1661#ifndef USEQPE
1662 QString s( QFileDialog::getOpenFileName( reader->m_lastfile, QString::null, this ) );
1663 return s;
1664#else
1665 fileBrowser* fb = new fileBrowser(false, this,"OpieReader",!m_bFloatingDialog,
1215 0, 1666 0,
1216 // WStyle_Customize | WStyle_NoBorderEx, 1667 // WStyle_Customize | WStyle_NoBorderEx,
1217 "*", QFileInfo(reader->m_lastfile).dirPath(true)); 1668 "*", QFileInfo(reader->m_lastfile).dirPath(true));
1218 1669
1219 1670
1220 QString fn; 1671 QString fn;
1221 if (fb->exec()) 1672 if (fb->exec())
1222 { 1673 {
1223 fn = fb->fileList[0]; 1674 fn = fb->getCurrentFile();
1224 } 1675 }
1225 qDebug("Selected %s", (const char*)fn); 1676// qDebug("Selected %s", (const char*)fn);
1226 delete fb; 1677 delete fb;
1678 showEditTools();
1227 return fn; 1679 return fn;
1680#endif
1228} 1681}
1229 1682
1230void QTReaderApp::showgraphic(QPixmap& pm) 1683void QTReaderApp::showgraphic(QImage& pm)
1231{ 1684{
1232 m_graphicwin->setPixmap(pm); 1685 QPixmap pc;
1686 pc.convertFromImage(pm);
1687 m_graphicwin->setPixmap(pc);
1233 editorStack->raiseWidget( m_graphicwin ); 1688 editorStack->raiseWidget( m_graphicwin );
1234 m_graphicwin->setFocus(); 1689 m_graphicwin->setFocus();
1235} 1690}
1236 1691
1692
1693void QTReaderApp::showprefs()
1694{
1695 CPrefs* prefwin = new CPrefs(!m_bFloatingDialog, this);
1696
1697 prefwin->twotouch(m_twoTouch);
1698 prefwin->propfontchange(m_propogatefontchange);
1699 prefwin->StripCR(reader->bstripcr);
1700 prefwin->Dehyphen(reader->bdehyphen);
1701 prefwin->SingleSpace(reader->bonespace);
1702 prefwin->Unindent(reader->bunindent);
1703 prefwin->Reparagraph(reader->brepara);
1704 prefwin->DoubleSpace(reader->bdblspce);
1705 prefwin->Remap(reader->bremap);
1706 prefwin->Embolden(reader->bmakebold);
1707 prefwin->FullJustify(reader->bfulljust);
1708 prefwin->ParaLead(reader->getextraspace());
1709 prefwin->LineLead(reader->getlead());
1710 prefwin->Margin(reader->m_border);
1711 prefwin->Indent(reader->bindenter);
1712 if (reader->bautofmt)
1713 {
1714 prefwin->Markup(0);
1715 }
1716 else if (reader->btextfmt)
1717 {
1718 prefwin->Markup(2);
1719 }
1720 else if (reader->bstriphtml)
1721 {
1722 prefwin->Markup(3);
1723 }
1724 else if (reader->bpeanut)
1725 {
1726 prefwin->Markup(4);
1727 }
1728 else
1729 {
1730 prefwin->Markup(1);
1731 }
1732 prefwin->Depluck(reader->bdepluck);
1733 prefwin->Dejpluck(reader->bdejpluck);
1734 prefwin->Continuous(reader->m_continuousDocument);
1735
1736 prefwin->dictApplication(m_targetapp);
1737 prefwin->dictMessage(m_targetmsg);
1738
1739 prefwin->spaceAction(m_spaceTarget);
1740 prefwin->escapeAction(m_escapeTarget);
1741 prefwin->returnAction(m_returnTarget);
1742 prefwin->leftAction(m_leftTarget);
1743 prefwin->rightAction(m_rightTarget);
1744 prefwin->upAction(m_upTarget);
1745 prefwin->downAction(m_downTarget);
1746
1747 prefwin->leftScroll(m_leftScroll);
1748 prefwin->rightScroll(m_rightScroll);
1749 prefwin->upScroll(m_upScroll);
1750 prefwin->downScroll(m_downScroll);
1751
1752 prefwin->miscannotation(m_doAnnotation);
1753 prefwin->miscdictionary(m_doDictionary);
1754 prefwin->miscclipboard(m_doClipboard);
1755
1756 prefwin->SwapMouse(reader->m_swapmouse);
1757
1758 prefwin->Font(reader->m_fontname);
1759
1760 prefwin->gfxsize(reader->getBaseSize());
1761
1762 prefwin->pageoverlap(reader->m_overlap);
1763
1764 prefwin->ideogram(reader->m_bMonoSpaced);
1765
1766 prefwin->encoding(reader->m_encd);
1767
1768 prefwin->ideogramwidth(reader->m_charpc);
1769
1770 if (prefwin->exec())
1771 {
1772 m_twoTouch = prefwin->twotouch();
1773 reader->setTwoTouch(m_twoTouch);
1774 m_touch_action->setOn(m_twoTouch);
1775
1776 reader->bstripcr = prefwin->StripCR();
1777 reader->bdehyphen = prefwin->Dehyphen();
1778 reader->bonespace = prefwin->SingleSpace();
1779 reader->bunindent = prefwin->Unindent();
1780 reader->brepara = prefwin->Reparagraph();
1781 reader->bdblspce = prefwin->DoubleSpace();
1782 reader->bremap = prefwin->Remap();
1783 reader->bmakebold = prefwin->Embolden();
1784 reader->bfulljust = prefwin->FullJustify();
1785 reader->setextraspace(prefwin->ParaLead());
1786 reader->setlead(prefwin->LineLead());
1787 reader->m_border = prefwin->Margin();
1788 reader->bindenter = prefwin->Indent();
1789 reader->bautofmt = reader->btextfmt = reader->bstriphtml = reader->bpeanut = false;
1790 switch (prefwin->Markup())
1791 {
1792 case 0:
1793 reader->bautofmt = true;
1794 break;
1795 case 1:
1796 break;
1797 case 2:
1798 reader->btextfmt = true;
1799 break;
1800 case 3:
1801 reader->bstriphtml = true;
1802 break;
1803 case 4:
1804 reader->bpeanut = true;
1805 break;
1806 default:
1807 qDebug("Format out of range");
1808 }
1809 reader->bdepluck = prefwin->Depluck();
1810 reader->bdejpluck = prefwin->Dejpluck();
1811 reader->setContinuous(prefwin->Continuous());
1812
1813 m_spaceTarget = (ActionTypes)prefwin->spaceAction();
1814 m_escapeTarget = (ActionTypes)prefwin->escapeAction();
1815 m_returnTarget = (ActionTypes)prefwin->returnAction();
1816 m_leftTarget = (ActionTypes)prefwin->leftAction();
1817 m_rightTarget = (ActionTypes)prefwin->rightAction();
1818 m_upTarget = (ActionTypes)prefwin->upAction();
1819 m_downTarget = (ActionTypes)prefwin->downAction();
1820 m_leftScroll = prefwin->leftScroll();
1821 m_rightScroll = prefwin->rightScroll();
1822 m_upScroll = prefwin->upScroll();
1823 m_downScroll = prefwin->downScroll();
1824
1825 m_targetapp = prefwin->dictApplication();
1826 m_targetmsg = prefwin->dictMessage();
1827
1828 m_doAnnotation = prefwin->miscannotation();
1829 m_doDictionary = prefwin->miscdictionary();
1830 m_doClipboard = prefwin->miscclipboard();
1831 reader->m_swapmouse = prefwin->SwapMouse();
1832 reader->setBaseSize(prefwin->gfxsize());
1833 reader->m_overlap = prefwin->pageoverlap();
1834 reader->m_bMonoSpaced = prefwin->ideogram();
1835 m_setmono_action->setOn(reader->m_bMonoSpaced);
1836 reader->m_encd = prefwin->encoding();
1837 reader->m_charpc = prefwin->ideogramwidth();
1838
1839 if (
1840 reader->m_fontname != prefwin->Font()
1841 ||
1842 m_propogatefontchange != prefwin->propfontchange())
1843 {
1844 m_propogatefontchange = prefwin->propfontchange();
1845 setfontHelper(prefwin->Font());
1846 }
1847 delete prefwin;
1848 reader->setfilter(reader->getfilter());
1849 reader->refresh();
1850
1851 }
1852 else
1853 {
1854 delete prefwin;
1855 }
1856}
1857
1858void QTReaderApp::showtoolbarprefs()
1859{
1860#ifdef USEQPE
1861 CBarPrefs* prefwin = new CBarPrefs(APPDIR, !m_bFloatingDialog, this);
1862#else
1863 QFileInfo fi;
1864 QDir d = QDir::home(); // "/"
1865 if ( !d.cd(APPDIR) )
1866 { // "/tmp"
1867 qWarning( "Cannot find the \"~/%s\" directory", APPDIR );
1868 d = QDir::home();
1869 d.mkdir(APPDIR);
1870 d.cd(APPDIR);
1871 }
1872 fi.setFile(d, INIFILE);
1873 CBarPrefs* prefwin = new CBarPrefs(fi.absFilePath(), !m_bFloatingDialog, this);
1874#endif
1875 prefwin->tbpolicy(m_tbpolsave);
1876 prefwin->tbposition(m_tbposition-2);
1877 prefwin->tbmovable(m_tbmovesave);
1878 prefwin->floating(m_bFloatingDialog);
1879 if (prefwin->exec())
1880 {
1881 m_bFloatingDialog = prefwin->floating();
1882 if (
1883 m_tbpolsave != (ToolbarPolicy)prefwin->tbpolicy()
1884 ||
1885 m_tbposition != (ToolBarDock)(prefwin->tbposition()+2)
1886 ||
1887 m_tbmovesave != prefwin->tbmovable()
1888 )
1889 {
1890 QMessageBox::warning(this, PROGNAME, "Some changes won't take effect\nuntil the next time the\napplication is started");
1891 }
1892 m_tbpolsave = (ToolbarPolicy)prefwin->tbpolicy();
1893 m_tbposition = (ToolBarDock)(prefwin->tbposition()+2);
1894 m_tbmovesave = prefwin->tbmovable();
1895 bool isChanged = prefwin->isChanged();
1896 delete prefwin;
1897#ifdef USEQPE
1898 Config config( APPDIR );
1899#else
1900 QFileInfo fi;
1901 QDir d = QDir::home(); // "/"
1902 if ( !d.cd(APPDIR) )
1903 { // "/tmp"
1904 qWarning( "Cannot find the \"~/%s\" directory", APPDIR );
1905 d = QDir::home();
1906 d.mkdir(APPDIR);
1907 d.cd(APPDIR);
1908 }
1909 fi.setFile(d, INIFILE);
1910 Config config( fi.absFilePath() );
1911#endif
1912 if (isChanged) addtoolbars(&config);
1913 }
1914 else
1915 {
1916 delete prefwin;
1917 }
1918}
1919
1237void QTReaderApp::showinfo() 1920void QTReaderApp::showinfo()
1238{ 1921{
1239 unsigned long fs, ts, pl; 1922 unsigned long fs, ts, pl;
1240 if (reader->empty()) 1923 if (reader->empty())
1241 { 1924 {
1242 QMessageBox::information(this, PROGNAME, "No file loaded", 1); 1925 QMessageBox::information(this, PROGNAME, "No file loaded", 1);
1243 } 1926 }
1244 else 1927 else
1245 { 1928 {
1246 reader->sizes(fs,ts); 1929 reader->sizes(fs,ts);
1247 pl = reader->pagelocate(); 1930 pl = reader->pagelocate();
1248 m_infoWin->setFileSize(fs); 1931 m_infoWin->setFileSize(fs);
1249 m_infoWin->setTextSize(ts); 1932 m_infoWin->setTextSize(ts);
1250 m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts); 1933 m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts);
1251 m_infoWin->setLocation(pl); 1934 m_infoWin->setLocation(pl);
1252 m_infoWin->setRead((100*pl + (ts >> 1))/ts); 1935 m_infoWin->setRead((100*pl + (ts >> 1))/ts);
1253 editorStack->raiseWidget( m_infoWin ); 1936 editorStack->raiseWidget( m_infoWin );
1254 m_infoWin->setFocus(); 1937 m_infoWin->setFocus();
1255 } 1938 }
1256} 1939}
1257 1940
1258void QTReaderApp::addAnno(const QString& name, const QString& text, size_t posn) 1941void QTReaderApp::addAnno(const QString& name, const QString& text, size_t posn)
1259{ 1942{
1260 if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; 1943 if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>;
1261#ifdef _UNICODE 1944#ifdef _UNICODE
1262 CBuffer buff(name.length()+1); 1945 CBuffer buff(name.length()+1);
1263 int i; 1946 int i;
1264 for (i = 0; i < name.length(); i++) 1947 for (i = 0; i < name.length(); i++)
1265 { 1948 {
1266 buff[i] = name[i].unicode(); 1949 buff[i] = name[i].unicode();
1267 } 1950 }
1268 buff[i] = 0; 1951 buff[i] = 0;
1269 CBuffer buff2(text.length()+1); 1952 CBuffer buff2(text.length()+1);
1270 for (i = 0; i < text.length(); i++) 1953 for (i = 0; i < text.length(); i++)
1271 { 1954 {
1272 buff2[i] = text[i].unicode(); 1955 buff2[i] = text[i].unicode();
1273 } 1956 }
1274 buff2[i] = 0; 1957 buff2[i] = 0;
1275 pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn)); 1958 pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn));
1276#else 1959#else
1277 pBkmklist->push_front(Bkmk((const tchar*)text,posn)); 1960 pBkmklist->push_front(Bkmk((const tchar*)text,posn));
1278#endif 1961#endif
1279 m_fBkmksChanged = true; 1962 m_fBkmksChanged = true;
1280 pBkmklist->sort(); 1963 pBkmklist->sort();
1281} 1964}
1282 1965
1283void QTReaderApp::addAnno(const QString& name, const QString& text) 1966void QTReaderApp::addAnno(const QString& name, const QString& text)
1284{ 1967{
1285 if (m_annoIsEditing) 1968 if (m_annoIsEditing)
1286 { 1969 {
1287 if (name.isEmpty()) 1970 if (name.isEmpty())
1288 { 1971 {
1289 QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nPlease try again", 1); 1972 QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nPlease try again", 1);
1290 } 1973 }
1291 else 1974 else
1292 { 1975 {
1293 addAnno(name, text, m_annoWin->getPosn()); 1976 addAnno(name, text, m_annoWin->getPosn());
1294 } 1977 }
1295 showEditTools(); 1978 showEditTools();
1296 } 1979 }
1297 else 1980 else
1298 { 1981 {
1299 if (m_annoWin->edited()) 1982 if (m_annoWin->edited())
1300 { 1983 {
1301 CBuffer buff(text.length()+1); 1984 CBuffer buff(text.length()+1);
1302 int i; 1985 int i;
1303 for (i = 0; i < text.length(); i++) 1986 for (i = 0; i < text.length(); i++)
1304 { 1987 {
1305 buff[i] = text[i].unicode(); 1988 buff[i] = text[i].unicode();
1306 } 1989 }
1307 buff[i] = 0; 1990 buff[i] = 0;
1308 m_fBkmksChanged = true; 1991 m_fBkmksChanged = true;
1309 m_anno->setAnno(buff.data()); 1992 m_anno->setAnno(buff.data());
1310 } 1993 }
1311 bool found = findNextBookmark(m_anno->value()+1); 1994 bool found = findNextBookmark(m_anno->value()+1);
1312 if (found) 1995 if (found)
1313 { 1996 {
1314 m_annoWin->setName(toQString(m_anno->name())); 1997 m_annoWin->setName(toQString(m_anno->name()));
1315 m_annoWin->setAnno(toQString(m_anno->anno())); 1998 m_annoWin->setAnno(toQString(m_anno->anno()));
1316 } 1999 }
1317 else 2000 else
1318 { 2001 {
1319 showEditTools(); 2002 showEditTools();
1320 } 2003 }
1321 } 2004 }
1322} 2005}
1323 2006
1324bool QTReaderApp::findNextBookmark(size_t start) 2007bool QTReaderApp::findNextBookmark(size_t start)
1325{ 2008{
1326 bool found = false; 2009 bool found = false;
1327 for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++) 2010 for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++)
1328 { 2011 {
1329 if (iter->value() >= start) 2012 if (iter->value() >= start)
1330 { 2013 {
1331 if (iter->value() < reader->locate()) 2014 if (iter->value() < reader->locate())
1332 { 2015 {
1333 found = true; 2016 found = true;
1334 m_anno = iter.pContent(); 2017 m_anno = iter.pContent();
1335 } 2018 }
1336 break; 2019 break;
1337 } 2020 }
1338 } 2021 }
1339 return found; 2022 return found;
1340} 2023}
1341 2024
1342void QTReaderApp::addanno() 2025void QTReaderApp::addanno()
1343{ 2026{
1344 if (reader->empty()) 2027 if (reader->empty())
1345 { 2028 {
1346 QMessageBox::information(this, PROGNAME, "No file loaded", 1); 2029 QMessageBox::information(this, PROGNAME, "No file loaded", 1);
1347 } 2030 }
1348 else 2031 else
1349 { 2032 {
1350 m_annoWin->setName(""); 2033 m_annoWin->setName("");
1351 m_annoWin->setAnno(""); 2034 m_annoWin->setAnno("");
1352 m_annoWin->setPosn(reader->pagelocate()); 2035 m_annoWin->setPosn(reader->pagelocate());
1353 m_annoIsEditing = true; 2036 m_annoIsEditing = true;
1354 editorStack->raiseWidget( m_annoWin ); 2037 editorStack->raiseWidget( m_annoWin );
2038#ifdef USEQPE
1355 Global::showInputMethod(); 2039 Global::showInputMethod();
2040#endif
1356 m_annoWin->setFocus(); 2041 m_annoWin->setFocus();
1357 } 2042 }
1358} 2043}
1359 2044
1360void QTReaderApp::infoClose() 2045void QTReaderApp::infoClose()
1361{ 2046{
1362 showEditTools(); 2047 showEditTools();
1363} 2048}
1364 2049
1365/* 2050/*
1366void QTReaderApp::fileRevert() 2051void QTReaderApp::fileRevert()
1367{ 2052{
1368 clear(); 2053 clear();
1369 fileOpen(); 2054 fileOpen();
1370} 2055}
1371 2056
1372void QTReaderApp::editCut() 2057void QTReaderApp::editCut()
1373{ 2058{
1374#ifndef QT_NO_CLIPBOARD 2059#ifndef QT_NO_CLIPBOARD
1375 editor->cut(); 2060 editor->cut();
1376#endif 2061#endif
1377} 2062}
1378*/ 2063*/
1379void QTReaderApp::editMark() 2064void QTReaderApp::editMark()
1380{ 2065{
1381 m_savedpos = reader->pagelocate(); 2066 m_savedpos = reader->pagelocate();
1382} 2067}
1383 2068
1384void QTReaderApp::editCopy() 2069void QTReaderApp::editCopy()
1385{ 2070{
1386 QClipboard* cb = QApplication::clipboard(); 2071 QClipboard* cb = QApplication::clipboard();
1387 QString text; 2072 QString text;
1388 int ch; 2073 int ch;
1389 unsigned long currentpos = reader->pagelocate(); 2074 unsigned long currentpos = reader->pagelocate();
1390 unsigned long endpos = reader->locate(); 2075 unsigned long endpos = reader->locate();
2076 if (m_savedpos == 0xffffffff)
2077 {
2078 m_savedpos = currentpos;
2079 }
1391 reader->jumpto(m_savedpos); 2080 reader->jumpto(m_savedpos);
1392 while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF) 2081 while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF)
1393 { 2082 {
1394 text += ch; 2083 text += ch;
1395 } 2084 }
1396 cb->setText(text); 2085 cb->setText(text);
1397 reader->locate(currentpos); 2086 reader->locate(currentpos);
2087 m_savedpos = 0xffffffff;
1398} 2088}
1399 2089
1400void QTReaderApp::pageup() 2090void QTReaderApp::gotoStart()
1401{ 2091{
1402 reader->NavUp(); 2092 reader->locate(reader->buffdoc.startSection());
1403} 2093}
1404 2094
1405void QTReaderApp::pagedn() 2095void QTReaderApp::gotoEnd()
1406{ 2096{
1407 reader->NavDown(); 2097 reader->dopageup(reader->buffdoc.endSection());
1408} 2098}
1409 2099
1410void QTReaderApp::stripcr(bool _b) 2100void QTReaderApp::pageup()
1411{
1412 reader->setstripcr(_b);
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
1424void QTReaderApp::remap(bool _b)
1425{
1426 reader->setremap(_b);
1427}
1428void QTReaderApp::peanut(bool _b)
1429{
1430 reader->setpeanut(_b);
1431}
1432void QTReaderApp::embolden(bool _b)
1433{
1434 reader->setmakebold(_b);
1435}
1436void QTReaderApp::autofmt(bool _b)
1437{
1438 reader->setautofmt(_b);
1439}
1440void QTReaderApp::textfmt(bool _b)
1441{
1442 reader->settextfmt(_b);
1443}
1444void QTReaderApp::striphtml(bool _b)
1445{
1446 reader->setstriphtml(_b);
1447}
1448void QTReaderApp::dehyphen(bool _b)
1449{
1450 reader->setdehyphen(_b);
1451}
1452void QTReaderApp::unindent(bool _b)
1453{
1454 reader->setunindent(_b);
1455}
1456void QTReaderApp::repara(bool _b)
1457{ 2101{
1458 reader->setrepara(_b); 2102 reader->NavUp();
1459} 2103}
1460void QTReaderApp::dblspce(bool _b) 2104
2105void QTReaderApp::pagedn()
1461{ 2106{
1462 reader->setdblspce(_b); 2107 reader->NavDown();
1463} 2108}
2109
1464void QTReaderApp::pagemode(bool _b) 2110void QTReaderApp::pagemode(bool _b)
1465{ 2111{
1466 reader->setpagemode(_b); 2112 reader->setpagemode(_b);
1467} 2113}
1468void QTReaderApp::navkeys(bool _b)
1469{
1470 reader->m_navkeys = _b;
1471}
1472void QTReaderApp::monospace(bool _b)
1473{
1474 reader->setmono(_b);
1475}
1476 2114
2115/*
1477void QTReaderApp::setspacing() 2116void QTReaderApp::setspacing()
1478{ 2117{
1479 m_nRegAction = cMonoSpace; 2118 m_nRegAction = cMonoSpace;
1480 char lcn[20]; 2119 char lcn[20];
1481 sprintf(lcn, "%lu", reader->m_charpc); 2120 sprintf(lcn, "%lu", reader->m_charpc);
1482 regEdit->setText(lcn); 2121 regEdit->setText(lcn);
1483 do_regedit(); 2122 do_regedit();
1484} 2123}
1485 2124*/
1486void QTReaderApp::setoverlap()
1487{
1488 m_nRegAction = cOverlap;
1489 char lcn[20];
1490 sprintf(lcn, "%lu", reader->m_overlap);
1491 regEdit->setText(lcn);
1492 do_regedit();
1493}
1494
1495void QTReaderApp::settarget() 2125void QTReaderApp::settarget()
1496{ 2126{
1497 m_nRegAction = cSetTarget; 2127 m_nRegAction = cSetTarget;
1498 QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp) 2128 QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp)
1499 + "/" 2129 + "/"
1500 + ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg); 2130 + ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg);
1501 regEdit->setText(text); 2131 regEdit->setText(text);
1502 do_regedit(); 2132 do_regedit();
1503} 2133}
1504 2134
1505void QTReaderApp::do_overlap(const QString& lcn) 2135/*
1506{
1507 bool ok;
1508 unsigned long ulcn = lcn.toULong(&ok);
1509 if (ok)
1510 {
1511 reader->m_overlap = ulcn;
1512 }
1513 else
1514 QMessageBox::information(this, PROGNAME, "Must be a number");
1515}
1516
1517void QTReaderApp::do_mono(const QString& lcn) 2136void QTReaderApp::do_mono(const QString& lcn)
1518{ 2137{
1519 bool ok; 2138 bool ok;
1520 unsigned long ulcn = lcn.toULong(&ok); 2139 unsigned long ulcn = lcn.toULong(&ok);
1521 if (ok) 2140 if (ok)
1522 { 2141 {
1523 reader->m_charpc = ulcn; 2142 reader->m_charpc = ulcn;
1524 reader->setfont(); 2143 reader->setfont();
1525 reader->refresh(); 2144 reader->refresh();
1526 //reader->setmono(true); 2145 //reader->setmono(true);
1527 } 2146 }
1528 else 2147 else
1529 QMessageBox::information(this, PROGNAME, "Must be a number"); 2148 QMessageBox::information(this, PROGNAME, "Must be a number");
1530} 2149}
1531 2150*/
1532/* 2151/*
1533void QTReaderApp::editPaste() 2152void QTReaderApp::editPaste()
1534{ 2153{
1535#ifndef QT_NO_CLIPBOARD 2154#ifndef QT_NO_CLIPBOARD
1536 editor->paste(); 2155 editor->paste();
1537#endif 2156#endif
1538} 2157}
1539*/ 2158*/
1540 2159
1541void QTReaderApp::editFind() 2160void QTReaderApp::editFind()
1542{ 2161{
1543 searchStart = reader->pagelocate(); 2162 searchStart = reader->pagelocate();
1544#ifdef __ISEARCH 2163#ifdef __ISEARCH
1545 searchStack = new QStack<searchrecord>; 2164 searchStack = new QStack<searchrecord>;
1546#endif 2165#endif
2166#ifdef USEQPE
1547 Global::showInputMethod(); 2167 Global::showInputMethod();
2168#endif
1548 searchBar->show(); 2169 searchBar->show();
1549 searchVisible = TRUE; 2170 searchVisible = TRUE;
1550 searchEdit->setFocus(); 2171 searchEdit->setFocus();
1551#ifdef __ISEARCH 2172#ifdef __ISEARCH
1552 searchStack->push(new searchrecord("",reader->pagelocate())); 2173 searchStack->push(new searchrecord("",reader->pagelocate()));
1553#endif 2174#endif
1554} 2175}
1555 2176
1556void QTReaderApp::findNext() 2177void QTReaderApp::findNext()
1557{ 2178{
1558 // qDebug("findNext called\n"); 2179// // qDebug("findNext called\n");
1559#ifdef __ISEARCH 2180#ifdef __ISEARCH
1560 QString arg = searchEdit->text(); 2181 QString arg = searchEdit->text();
1561#else 2182#else
1562 QRegExp arg = searchEdit->text(); 2183 QRegExp arg = searchEdit->text();
1563#endif 2184#endif
1564 CDrawBuffer test(&(reader->m_fontControl)); 2185 CDrawBuffer test(&(reader->m_fontControl));
1565 size_t start = reader->pagelocate(); 2186 size_t start = reader->pagelocate();
1566 reader->jumpto(start); 2187 reader->jumpto(start);
1567 reader->buffdoc.getline(&test,reader->width()); 2188 reader->getline(&test);
1568 dosearch(start, test, arg); 2189 dosearch(start, test, arg);
1569} 2190}
1570 2191
1571void QTReaderApp::findClose() 2192void QTReaderApp::findClose()
1572{ 2193{
1573 searchVisible = FALSE; 2194 searchVisible = FALSE;
1574 searchEdit->setText(""); 2195 searchEdit->setText("");
2196#ifdef USEQPE
1575 Global::hideInputMethod(); 2197 Global::hideInputMethod();
2198#endif
1576 searchBar->hide(); 2199 searchBar->hide();
1577#ifdef __ISEARCH 2200#ifdef __ISEARCH
1578// searchStack = new QStack<searchrecord>; 2201// searchStack = new QStack<searchrecord>;
1579 while (!searchStack->isEmpty()) 2202 while (!searchStack->isEmpty())
1580 { 2203 {
1581 delete searchStack->pop(); 2204 delete searchStack->pop();
1582 } 2205 }
1583 delete searchStack; 2206 delete searchStack;
1584#endif 2207#endif
1585 reader->setFocus(); 2208 reader->setFocus();
1586} 2209}
1587 2210
1588void QTReaderApp::regClose() 2211void QTReaderApp::regClose()
1589{ 2212{
1590 regVisible = FALSE; 2213 regVisible = FALSE;
1591 regEdit->setText(""); 2214 regEdit->setText("");
1592 regBar->hide(); 2215 regBar->hide();
2216#ifdef USEQPE
1593 Global::hideInputMethod(); 2217 Global::hideInputMethod();
2218#endif
1594 reader->setFocus(); 2219 reader->setFocus();
1595} 2220}
1596 2221
1597#ifdef __ISEARCH 2222#ifdef __ISEARCH
1598bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QString& arg) 2223bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QString& arg)
1599#else 2224#else
1600bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg) 2225bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg)
1601#endif 2226#endif
1602{ 2227{
1603 bool ret = true; 2228 bool ret = true;
1604 unsigned long fs, ts; 2229 unsigned long fs, ts;
1605 reader->sizes(fs,ts); 2230 reader->sizes(fs,ts);
1606 size_t pos = reader->locate(); 2231 size_t pos = reader->locate();
1607 reader->buffdoc.getline(&test,reader->width()); 2232 pbar->setGeometry(searchBar->x(),searchBar->y(),searchBar->width(), searchBar->height());
1608 pbar->show(); 2233 pbar->show();
1609 pbar->resize(width(), editBar->height()); 2234 pbar->raise();
1610 pbar->reset(); 2235 pbar->reset();
2236 int offset;
1611 int lastpc = (100*pos)/ts; 2237 int lastpc = (100*pos)/ts;
1612 pbar->setProgress(lastpc); 2238 pbar->setProgress(lastpc);
1613 qApp->processEvents(); 2239// qApp->processEvents();
1614 reader->setFocus(); 2240 if (reader->buffdoc.getpara(test) >= 0)
2241 {
2242 reader->setFocus();
1615#ifdef __ISEARCH 2243#ifdef __ISEARCH
1616 while (strstr(test.data(),(const tchar*)arg) == NULL) 2244 while (strstr(test.data(),(const tchar*)arg) == NULL)
1617#else 2245#else
1618#ifdef _UNICODE 2246#ifdef _UNICODE
1619 while (arg.match(toQString(test.data())) == -1) 2247 while ((offset = arg.match(toQString(test.data()))) == -1)
1620#else 2248#else
1621 while (arg.match(test.data()) == -1) 2249 while (arg.match(test.data()) == -1)
1622#endif 2250#endif
1623#endif 2251#endif
1624 {
1625 pos = reader->locate();
1626 unsigned int lcn = reader->locate();
1627 int pc = (100*pos)/ts;
1628 if (pc != lastpc)
1629 { 2252 {
1630 pbar->setProgress(pc); 2253 pos = reader->locate();
1631 qApp->processEvents(); 2254 int pc = (100*pos)/ts;
1632 reader->setFocus(); 2255 if (pc != lastpc)
1633 lastpc = pc; 2256 {
2257 pbar->setProgress(pc);
2258 qApp->processEvents();
2259 reader->setFocus();
2260 lastpc = pc;
2261 }
2262
2263 if (reader->buffdoc.getpara(test) < 0)
2264 {
2265 if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2)
2266 pos = searchStart;
2267 else
2268 pos = start;
2269 findClose();
2270 pbar->hide();
2271 reader->locate(pos);
2272 return false;
2273 }
1634 } 2274 }
1635 2275// qDebug("Found it at %u:%u", pos, offset);
1636 if (!reader->buffdoc.getline(&test,reader->width())) 2276 pbar->hide();
1637 { 2277// qDebug("Hid");
1638 if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2) 2278 reader->locate(pos+offset);
1639 pos = searchStart; 2279// qDebug("Loacted");
1640 else 2280// qDebug("page up");
1641 pos = start; 2281 ret = true;
1642 ret = false; 2282 }
1643 findClose(); 2283 else
1644 break; 2284 {
1645 } 2285 if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2)
1646 } 2286 pos = searchStart;
1647 pbar->hide(); 2287 else
1648 reader->locate(pos); 2288 pos = start;
2289 ret = false;
2290 findClose();
2291 }
1649 return ret; 2292 return ret;
1650} 2293}
1651 2294
1652#ifdef __ISEARCH 2295#ifdef __ISEARCH
1653void QTReaderApp::search(const QString & arg) 2296void QTReaderApp::search(const QString & arg)
1654{ 2297{
1655 searchrecord* ss = searchStack->top(); 2298 searchrecord* ss = searchStack->top();
1656 CBuffer test; 2299 CBuffer test;
1657 size_t start = reader->pagelocate(); 2300 size_t start = reader->pagelocate();
1658 bool haspopped = false; 2301 bool haspopped = false;
1659 while (arg.left(ss->s.length()) != ss->s) 2302 while (arg.left(ss->s.length()) != ss->s)
1660 { 2303 {
1661 haspopped = true; 2304 haspopped = true;
1662 start = ss->pos; 2305 start = ss->pos;
1663// reader->locate(start); 2306// reader->locate(start);
1664 searchStack->pop(); 2307 searchStack->pop();
1665 delete ss; 2308 delete ss;
1666 } 2309 }
1667 if (haspopped) reader->locate(start); 2310 if (haspopped) reader->locate(start);
1668/* 2311/*
1669 if (arg.length() < ss->len) 2312 if (arg.length() < ss->len)
1670 { 2313 {
1671 start = ss->pos; 2314 start = ss->pos;
1672 reader->locate(start); 2315 reader->locate(start);
1673 searchStack->pop(); 2316 searchStack->pop();
1674 delete ss; 2317 delete ss;
1675 } 2318 }
1676*/ 2319*/
1677 else 2320 else
1678 { 2321 {
1679 start = reader->pagelocate(); 2322 start = reader->pagelocate();
1680 reader->jumpto(start); 2323 reader->jumpto(start);
1681 searchStack->push(new searchrecord(arg,start)); 2324 searchStack->push(new searchrecord(arg,start));
1682 } 2325 }
1683 dosearch(start, test, arg); 2326 dosearch(start, test, arg);
1684} 2327}
1685#else 2328#else
1686void QTReaderApp::search() 2329void QTReaderApp::search()
1687{ 2330{
1688 findNext(); 2331 findNext();
1689} 2332}
1690#endif 2333#endif
1691 2334
1692void QTReaderApp::openFile( const QString &f ) 2335void QTReaderApp::openFile( const QString &f )
1693{ 2336{
1694 qDebug("File:%s", (const char*)f); 2337// qDebug("File:%s", (const char*)f);
1695// openFile(DocLnk(f)); 2338// openFile(DocLnk(f));
1696//} 2339//}
1697// 2340//
1698//void QTReaderApp::openFile( const DocLnk &f ) 2341//void QTReaderApp::openFile( const DocLnk &f )
1699//{ 2342//{
1700 clear(); 2343 clear();
1701 QFileInfo fm(f); 2344 QFileInfo fm(f);
1702 if ( fm.exists() ) 2345 if ( fm.exists() )
1703 { 2346 {
1704// QMessageBox::information(0, "Progress", "Calling fileNew()"); 2347// QMessageBox::information(0, "Progress", "Calling fileNew()");
1705 2348#ifdef USEQPE
1706 if (fm.extension( FALSE ) == "desktop") 2349 if (fm.extension( FALSE ) == "desktop")
1707 { 2350 {
1708 DocLnk d(f); 2351 DocLnk d(f);
1709 QFileInfo fnew(d.file()); 2352 QFileInfo fnew(d.file());
1710 fm = fnew; 2353 fm = fnew;
1711 if (!fm.exists()) return; 2354 if (!fm.exists()) return;
1712 } 2355 }
1713 2356#endif
1714 clear(); 2357 clear();
1715 2358
1716 reader->setText(fm.baseName(), fm.absFilePath()); 2359 reader->setText(fm.baseName(), fm.absFilePath());
2360 m_loadedconfig = readconfig(reader->m_string, false);
1717 showEditTools(); 2361 showEditTools();
1718 readbkmks(); 2362 readbkmks();
2363 m_savedpos = 0xffffffff;
1719 } 2364 }
1720 else 2365 else
1721 { 2366 {
1722 QMessageBox::information(this, PROGNAME, "File does not exist"); 2367 QMessageBox::information(this, PROGNAME, "File does not exist");
2368 reader->m_lastfile = QString::null;
1723 } 2369 }
1724 2370
1725} 2371}
1726/* 2372/*
1727void QTReaderApp::resizeEvent(QResizeEvent* e) 2373void QTReaderApp::resizeEvent(QResizeEvent* e)
1728{ 2374{
1729 if (m_fullscreen) 2375 if (m_fullscreen)
1730 { 2376 {
1731 showNormal(); 2377 showNormal();
1732 showFullScreen(); 2378 showFullScreen();
1733 } 2379 }
1734} 2380}
1735*/ 2381*/
1736void QTReaderApp::keyPressEvent(QKeyEvent* e) 2382void QTReaderApp::handlekey(QKeyEvent* e)
1737{ 2383{
1738 if (m_fullscreen) 2384// qDebug("Keypress event");
2385 timeb now;
2386 ftime(&now);
2387 unsigned long etime = (1000*(now.time - m_lastkeytime.time) + now.millitm)-m_lastkeytime.millitm;
2388 if (etime < m_debounce)
1739 { 2389 {
1740 switch(e->key()) 2390 return;
1741 { 2391 }
1742 case Key_Escape: 2392 m_lastkeytime = now;
1743 m_actFullscreen->setOn(false); 2393 switch(e->key())
2394 {
2395 case Key_Escape:
2396 // qDebug("escape event");
2397 if (m_disableesckey)
2398 {
2399 m_disableesckey = false;
2400 }
2401 else
2402 {
2403 m_bcloseDisabled = true;
1744 if (m_fullscreen) 2404 if (m_fullscreen)
1745 { 2405 {
1746 qDebug("Fullscreen already set - remove this!"); 2406 m_actFullscreen->setOn(false);
2407 e->accept();
1747 } 2408 }
1748 else 2409 else
1749 { 2410 {
1750 m_fullscreen = false; 2411 // qDebug("escape action");
1751 reader->bDoUpdates = false; 2412 doAction(m_escapeTarget, e);
1752 showEditTools();
1753 qApp->processEvents();
1754 reader->bDoUpdates = true;
1755 reader->update();
1756 } 2413 }
1757 e->accept(); 2414 }
1758 break; 2415 break;
1759 default: 2416 case Key_Space:
1760 e->ignore(); 2417 {
2418 doAction(m_spaceTarget, e);
1761 } 2419 }
1762 } 2420 break;
1763 else 2421 case Key_Return:
1764 { 2422 {
1765 e->ignore(); 2423 doAction(m_returnTarget, e);
2424 }
2425 break;
2426 case Key_Left:
2427 {
2428 if (reader->m_autoScroll && m_leftScroll)
2429 {
2430 reader->reduceScroll();
2431 }
2432 else
2433 {
2434 doAction(m_leftTarget, e);
2435 }
2436 }
2437 break;
2438 case Key_Right:
2439 {
2440 if (reader->m_autoScroll && m_rightScroll)
2441 {
2442 reader->increaseScroll();
2443 }
2444 else
2445 {
2446 doAction(m_rightTarget, e);
2447 }
2448 }
2449 break;
2450 case Key_Up:
2451 {
2452 if (reader->m_autoScroll && m_upScroll)
2453 {
2454 reader->increaseScroll();
2455 }
2456 else
2457 {
2458 doAction(m_upTarget, e);
2459 }
2460 }
2461 break;
2462 case Key_Down:
2463 {
2464 if (reader->m_autoScroll && m_downScroll)
2465 {
2466 reader->reduceScroll();
2467 }
2468 else
2469 {
2470 doAction(m_downTarget, e);
2471 }
2472 }
2473 break;
2474 default:
2475 {
2476 e->ignore();
2477 }
2478
2479/*
2480 QString msg("Key press was:");
2481 QString key;
2482 msg += key.setNum(e->key());
2483 QMessageBox::information(this, PROGNAME, msg);
2484*/
1766 } 2485 }
1767} 2486}
1768 2487
1769void QTReaderApp::showEditTools() 2488void QTReaderApp::showEditTools()
1770{ 2489{
1771// if ( !doc ) 2490// if ( !doc )
1772 //close(); 2491 //close();
1773 if (m_fullscreen) 2492 if (m_fullscreen)
1774 { 2493 {
1775 editBar->hide(); 2494 if (menubar != NULL) menubar->hide();
2495 if (fileBar != NULL) fileBar->hide();
2496 if (viewBar != NULL) viewBar->hide();
2497 if (navBar != NULL) navBar->hide();
2498 if (markBar != NULL) markBar->hide();
1776 searchBar->hide(); 2499 searchBar->hide();
1777 regBar->hide(); 2500 regBar->hide();
2501#ifdef USEQPE
1778 Global::hideInputMethod(); 2502 Global::hideInputMethod();
2503#endif
1779 m_fontBar->hide(); 2504 m_fontBar->hide();
1780 //showNormal(); 2505 //showNormal();
1781 showFullScreen(); 2506 showFullScreen();
1782 } 2507 }
1783 else 2508 else
1784 { 2509 {
1785 qDebug("him"); 2510 //qDebug("him");
2511#ifdef USEQPE
1786 Global::hideInputMethod(); 2512 Global::hideInputMethod();
1787 qDebug("eb"); 2513#endif
1788 editBar->show(); 2514 //qDebug("eb");
2515 menubar->show();
2516 if (fileBar != NULL) fileBar->show();
2517 if (viewBar != NULL) viewBar->show();
2518 if (navBar != NULL) navBar->show();
2519 if (markBar != NULL) markBar->show();
2520 mb->show();
1789 if ( searchVisible ) 2521 if ( searchVisible )
1790 { 2522 {
2523#ifdef USEQPE
1791 Global::showInputMethod(); 2524 Global::showInputMethod();
1792 searchBar->show(); 2525#endif
2526 searchBar->show();
1793 } 2527 }
1794 if ( regVisible ) 2528 if ( regVisible )
1795 { 2529 {
2530#ifdef USEQPE
1796 Global::showInputMethod(); 2531 Global::showInputMethod();
1797 regBar->show(); 2532#endif
2533 regBar->show();
1798 } 2534 }
1799 if (m_fontVisible) m_fontBar->show(); 2535 if (m_fontVisible) m_fontBar->show();
1800 qDebug("sn"); 2536 //qDebug("sn");
1801 showNormal(); 2537 showNormal();
1802 qDebug("sm"); 2538 //qDebug("sm");
2539#ifdef USEQPE
1803 showMaximized(); 2540 showMaximized();
2541#endif
1804 //setCentralWidget(reader); 2542 //setCentralWidget(reader);
1805 } 2543 }
1806 2544
1807 qDebug("uc"); 2545// qDebug("uc");
1808 updateCaption(); 2546 updateCaption();
1809 qDebug("rw"); 2547// qDebug("rw");
1810 editorStack->raiseWidget( reader ); 2548 editorStack->raiseWidget( reader );
1811 qDebug("sf"); 2549// qDebug("sf");
1812 reader->setFocus(); 2550 reader->setFocus();
2551 reader->refresh();
1813} 2552}
1814/* 2553/*
1815void QTReaderApp::save() 2554void QTReaderApp::save()
1816{ 2555{
1817 if ( !doc ) 2556 if ( !doc )
1818 return; 2557 return;
1819 if ( !editor->edited() ) 2558 if ( !editor->edited() )
1820 return; 2559 return;
1821 2560
1822 QString rt = editor->text(); 2561 QString rt = editor->text();
1823 QString pt = rt; 2562 QString pt = rt;
1824 2563
1825 if ( doc->name().isEmpty() ) { 2564 if ( doc->name().isEmpty() ) {
1826 unsigned ispace = pt.find( ' ' ); 2565 unsigned ispace = pt.find( ' ' );
1827 unsigned ienter = pt.find( '\n' ); 2566 unsigned ienter = pt.find( '\n' );
1828 int i = (ispace < ienter) ? ispace : ienter; 2567 int i = (ispace < ienter) ? ispace : ienter;
1829 QString docname; 2568 QString docname;
1830 if ( i == -1 ) { 2569 if ( i == -1 ) {
1831 if ( pt.isEmpty() ) 2570 if ( pt.isEmpty() )
1832 docname = "Empty Text"; 2571 docname = "Empty Text";
1833 else 2572 else
1834 docname = pt; 2573 docname = pt;
1835 } else { 2574 } else {
1836 docname = pt.left( i ); 2575 docname = pt.left( i );
1837 } 2576 }
1838 doc->setName(docname); 2577 doc->setName(docname);
1839 } 2578 }
1840 FileManager fm; 2579 FileManager fm;
1841 fm.saveFile( *doc, rt ); 2580 fm.saveFile( *doc, rt );
1842} 2581}
1843*/ 2582*/
1844 2583
1845void QTReaderApp::clear() 2584void QTReaderApp::clear()
1846{ 2585{
1847// if (doc != 0) 2586// if (doc != 0)
1848// { 2587// {
1849// QMessageBox::information(this, PROGNAME, "Deleting doc", 1); 2588// QMessageBox::information(this, PROGNAME, "Deleting doc", 1);
1850 //delete doc; 2589 //delete doc;
1851// QMessageBox::information(this, PROGNAME, "Deleted doc", 1); 2590// QMessageBox::information(this, PROGNAME, "Deleted doc", 1);
1852 //doc = 0; 2591 //doc = 0;
1853 // } 2592 // }
1854 reader->clear(); 2593 reader->clear();
1855} 2594}
1856 2595
1857void QTReaderApp::updateCaption() 2596void QTReaderApp::updateCaption()
1858{ 2597{
1859// if ( !doc ) 2598// if ( !doc )
1860 //setCaption( tr("QTReader") ); 2599 //setCaption( tr("QTReader") );
1861// else { 2600// else {
1862 //QString s = doc->name(); 2601 //QString s = doc->name();
1863 //if ( s.isEmpty() ) 2602 //if ( s.isEmpty() )
1864 // s = tr( "Unnamed" ); 2603 // s = tr( "Unnamed" );
1865 setCaption( reader->m_string + " - " + tr(SHORTPROGNAME) ); 2604 setCaption( reader->m_string + " - " + tr(SHORTPROGNAME) );
1866// } 2605// }
1867} 2606}
1868 2607
1869void QTReaderApp::setDocument(const QString& fileref) 2608void QTReaderApp::setDocument(const QString& fileref)
1870{ 2609{
1871 bFromDocView = TRUE; 2610 bFromDocView = TRUE;
1872//QMessageBox::information(0, "setDocument", fileref); 2611//QMessageBox::information(0, "setDocument", fileref);
1873 openFile(fileref); 2612 openFile(fileref);
1874// showEditTools(); 2613// showEditTools();
1875} 2614}
1876 2615
1877void QTReaderApp::closeEvent( QCloseEvent *e ) 2616void QTReaderApp::closeEvent( QCloseEvent *e )
1878{ 2617{
2618// qDebug("Close event");
1879 if (m_fullscreen) 2619 if (m_fullscreen)
1880 { 2620 {
1881 m_fullscreen = false; 2621 m_fullscreen = false;
1882 showEditTools(); 2622 showEditTools();
1883 e->accept(); 2623 e->accept();
1884 } 2624 }
1885 else if (m_dontSave) 2625 else if (m_dontSave)
1886 { 2626 {
1887 e->accept(); 2627 e->accept();
1888 } 2628 }
1889 else 2629 else
1890 { 2630 {
1891 if (editorStack->visibleWidget() == reader) 2631 if (editorStack->visibleWidget() == reader)
1892 { 2632 {
1893 if (m_fontVisible) 2633 if ((m_escapeTarget != cesNone) && m_bcloseDisabled)
1894 {
1895 m_fontBar->hide();
1896 m_fontVisible = false;
1897 }
1898 if (regVisible)
1899 {
1900 regBar->hide();
1901 Global::hideInputMethod();
1902 regVisible = false;
1903 return;
1904 }
1905 if (searchVisible)
1906 { 2634 {
1907 searchBar->hide(); 2635 //qDebug("Close disabled");
1908 Global::hideInputMethod(); 2636 m_bcloseDisabled = false;
1909 searchVisible = false; 2637 e->ignore();
1910 return;
1911 } 2638 }
1912 if (m_fBkmksChanged && pBkmklist != NULL) 2639 else
1913 { 2640 {
1914 if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0) 2641 if (m_fontVisible)
1915 savebkmks(); 2642 {
1916 delete pBkmklist; 2643 m_fontBar->hide();
1917 pBkmklist = NULL; 2644 m_fontVisible = false;
1918 m_fBkmksChanged = false; 2645 }
2646 if (regVisible)
2647 {
2648 regBar->hide();
2649#ifdef USEQPE
2650 Global::hideInputMethod();
2651#endif
2652 regVisible = false;
2653 return;
2654 }
2655 if (searchVisible)
2656 {
2657 searchBar->hide();
2658#ifdef USEQPE
2659 Global::hideInputMethod();
2660#endif
2661 searchVisible = false;
2662 return;
2663 }
2664 if (m_fBkmksChanged && pBkmklist != NULL)
2665 {
2666 if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0)
2667 savebkmks();
2668 delete pBkmklist;
2669 pBkmklist = NULL;
2670 m_fBkmksChanged = false;
2671 }
2672 bFromDocView = FALSE;
2673 updatefileinfo();
2674 saveprefs();
2675 e->accept();
1919 } 2676 }
1920 bFromDocView = FALSE;
1921 updatefileinfo();
1922 saveprefs();
1923 e->accept();
1924 } 2677 }
1925 else 2678 else
1926 { 2679 {
1927 showEditTools(); 2680 showEditTools();
2681 m_disableesckey = true;
1928 } 2682 }
1929 } 2683 }
1930} 2684}
1931 2685
1932void QTReaderApp::do_gotomark() 2686void QTReaderApp::do_gotomark()
1933{ 2687{
1934 m_nRegAction = cGotoBkmk; 2688 m_nBkmkAction = cGotoBkmk;
1935 listbkmk(pBkmklist); 2689 if (!listbkmk(pBkmklist))
2690 QMessageBox::information(this, PROGNAME, "No bookmarks in memory");
1936} 2691}
1937 2692
1938void QTReaderApp::do_delmark() 2693void QTReaderApp::do_delmark()
1939{ 2694{
1940 m_nRegAction = cDelBkmk; 2695 m_nBkmkAction = cDelBkmk;
1941 listbkmk(pBkmklist); 2696 if (!listbkmk(pBkmklist))
2697 QMessageBox::information(this, PROGNAME, "No bookmarks in memory");
1942} 2698}
1943 2699
1944void QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab) 2700bool QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab)
1945{ 2701{
1946 bkmkselector->clear(); 2702 bkmkselector->clear();
1947 if (_lab.isNull()) 2703 if (_lab.isEmpty())
1948 bkmkselector->setText("Cancel"); 2704 bkmkselector->setText("Cancel");
1949 else 2705 else
1950 bkmkselector->setText(_lab); 2706 bkmkselector->setText(_lab);
1951 int cnt = 0; 2707 int cnt = 0;
1952 if (plist != NULL) 2708 if (plist != NULL)
1953 { 2709 {
1954 for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++) 2710 for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++)
1955 { 2711 {
1956#ifdef _UNICODE 2712#ifdef _UNICODE
1957 qDebug("Item:%s", (const char*)toQString(i->name())); 2713 // qDebug("Item:%s", (const char*)toQString(i->name()));
1958 bkmkselector->insertItem(toQString(i->name())); 2714 bkmkselector->insertItem(toQString(i->name()));
1959#else 2715#else
1960 bkmkselector->insertItem(i->name()); 2716 bkmkselector->insertItem(i->name());
1961#endif 2717#endif
1962 cnt++; 2718 cnt++;
1963 } 2719 }
1964 } 2720 }
1965 if (cnt > 0) 2721 if (cnt > 0)
1966 { 2722 {
1967//tjw menu->hide(); 2723 hidetoolbars();
1968 editBar->hide();
1969 if (m_fontVisible) m_fontBar->hide();
1970 if (regVisible)
1971 {
1972 Global::hideInputMethod();
1973 regBar->hide();
1974 }
1975 if (searchVisible)
1976 {
1977 Global::hideInputMethod();
1978 searchBar->hide();
1979 }
1980 editorStack->raiseWidget( bkmkselector ); 2724 editorStack->raiseWidget( bkmkselector );
2725 return true;
1981 } 2726 }
1982 else 2727 else
1983 QMessageBox::information(this, PROGNAME, "No bookmarks in memory"); 2728 return false;
1984} 2729}
1985 2730
1986void QTReaderApp::do_autogen() 2731void QTReaderApp::do_autogen()
1987{ 2732{
1988 m_nRegAction = cAutoGen; 2733 m_nRegAction = cAutoGen;
1989 regEdit->setText(m_autogenstr); 2734 regEdit->setText(m_autogenstr);
1990 do_regedit(); 2735 do_regedit();
1991} 2736}
1992 2737
1993void QTReaderApp::do_regedit() 2738void QTReaderApp::do_regedit()
1994{ 2739{
1995// editBar->hide(); 2740// fileBar->hide();
1996 reader->bDoUpdates = false; 2741 reader->bDoUpdates = false;
1997 qDebug("Showing regbar"); 2742// qDebug("Showing regbar");
1998 regBar->show(); 2743 regBar->show();
1999 qDebug("Showing kbd"); 2744// qDebug("Showing kbd");
2745#ifdef USEQPE
2000 Global::showInputMethod(); 2746 Global::showInputMethod();
2747#endif
2001 regVisible = true; 2748 regVisible = true;
2002 regEdit->setFocus(); 2749 regEdit->setFocus();
2003 qApp->processEvents(); 2750// qApp->processEvents();
2004 reader->bDoUpdates = true; 2751 reader->bDoUpdates = true;
2005 reader->update(); 2752 reader->update();
2006} 2753}
2007 2754
2008bool QTReaderApp::openfrombkmk(Bkmk* bk) 2755bool QTReaderApp::openfrombkmk(Bkmk* bk)
2009{ 2756{
2010 QString fn = toQString( 2757 QString fn = toQString(
2011 CFiledata(bk->anno()).name() 2758 CFiledata(bk->anno()).name()
2012 ); 2759 );
2013 qDebug("fileinfo"); 2760 //qDebug("fileinfo");
2014 if (!fn.isEmpty() && QFileInfo(fn).isFile()) 2761 if (!fn.isEmpty() && QFileInfo(fn).isFile())
2015 { 2762 {
2016 qDebug("Opening"); 2763 //qDebug("Opening");
2017 openFile(fn); 2764 openFile(fn);
2018 struct stat fnstat; 2765 struct stat fnstat;
2019 stat((const char *)reader->m_lastfile, &fnstat); 2766 stat((const char *)reader->m_lastfile, &fnstat);
2020 2767
2021 if (CFiledata(bk->anno()).date() 2768 if (CFiledata(bk->anno()).date()
2022 != fnstat.st_mtime) 2769 != fnstat.st_mtime)
2023 { 2770 {
2024 CFiledata fd(bk->anno()); 2771 CFiledata fd(bk->anno());
2025 fd.setdate(fnstat.st_mtime); 2772 fd.setdate(fnstat.st_mtime);
2026 bk->value(0); 2773 bk->value(0);
2027 } 2774 }
2028 else 2775 else
2029 { 2776 {
2030 unsigned short svlen = bk->filedatalen(); 2777 unsigned short svlen = bk->filedatalen();
2031 unsigned char* svdata = bk->filedata(); 2778 unsigned char* svdata = bk->filedata();
2032 reader->putSaveData(svdata, svlen); 2779 reader->putSaveData(svdata, svlen);
2033 // setstate(svdata, svlen); 2780 // setstate(svdata, svlen);
2034 if (svlen != 0) 2781 if (svlen != 0)
2035 { 2782 {
2036 QMessageBox::warning(this, PROGNAME, "Not all file data used\nNew version?"); 2783 QMessageBox::warning(this, PROGNAME, "Not all file data used\nNew version?");
2037 } 2784 }
2038 qDebug("updating"); 2785 // qDebug("updating");
2786 // showEditTools();
2039 reader->locate(bk->value()); 2787 reader->locate(bk->value());
2040 } 2788 }
2041 return true; 2789 return true;
2042 } 2790 }
2043 else 2791 else
2044 { 2792 {
2045 return false; 2793 return false;
2046 } 2794 }
2047} 2795}
2048 2796
2049void QTReaderApp::gotobkmk(int ind) 2797void QTReaderApp::gotobkmk(int ind)
2050{ 2798{
2051 switch (m_nRegAction) 2799 showEditTools();
2800 switch (m_nBkmkAction)
2052 { 2801 {
2053 case cOpenFile: 2802 case cOpenFile:
2054 { 2803 {
2804 // qApp->processEvents();
2055 if (!openfrombkmk((*pOpenlist)[ind])) 2805 if (!openfrombkmk((*pOpenlist)[ind]))
2056 { 2806 {
2057 pOpenlist->erase(ind); 2807 pOpenlist->erase(ind);
2058 QMessageBox::information(this, PROGNAME, "Can't find file"); 2808 QMessageBox::information(this, PROGNAME, "Can't find file");
2059 } 2809 }
2060 } 2810 }
2061 break; 2811 break;
2062 case cGotoBkmk: 2812 case cGotoBkmk:
2063 reader->locate((*pBkmklist)[ind]->value()); 2813 reader->locate((*pBkmklist)[ind]->value());
2064 break; 2814 break;
2065 case cDelBkmk: 2815 case cDelBkmk:
2066 // qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name()); 2816 //// qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name());
2067 pBkmklist->erase(ind); 2817 pBkmklist->erase(ind);
2068 m_fBkmksChanged = true; 2818 m_fBkmksChanged = true;
2069 // pBkmklist->sort(); 2819 // pBkmklist->sort();
2070 break; 2820 break;
2071 case cRmBkmkFile: 2821 case cRmBkmkFile:
2072 unlink((const char *)Global::applicationFileName(APPDIR,bkmkselector->text(ind))); 2822 {
2823#ifndef USEQPE
2824 QDir d = QDir::home(); // "/"
2825 d.cd(APPDIR);
2826 d.remove(bkmkselector->text(ind));
2827#else /* USEQPE */
2828 unlink((const char *)Global::applicationFileName(APPDIR,bkmkselector->text(ind)));
2829#endif /* USEQPE */
2830 }
2831 break;
2832 case cLdConfig:
2833 readconfig(bkmkselector->text(ind), false);
2834 break;
2835 case cRmConfig:
2836 {
2837#ifndef USEQPE
2838 QDir d = QDir::home(); // "/"
2839 d.cd(APPDIR "/configs");
2840 d.remove(bkmkselector->text(ind));
2841#else /* USEQPE */
2842 unlink((const char *)Global::applicationFileName(APPDIR "/configs",bkmkselector->text(ind)));
2843#endif /* USEQPE */
2844 }
2073 break; 2845 break;
2846 case cExportLinks:
2847 {
2848#ifndef USEQPE
2849 QDir d = QDir::home(); // "/"
2850 d.cd(APPDIR "/urls");
2851 QFileInfo fi(d, bkmkselector->text(ind));
2852 if (fi.exists())
2853 {
2854 QString outfile( QFileDialog::getSaveFileName( QString::null, QString::null, this ) );
2855 if (!outfile.isEmpty())
2856 {
2857 FILE* fout = fopen((const char *)outfile, "w");
2858 if (fout != NULL)
2859 {
2860 FILE* fin = fopen((const char *)fi.absFilePath(), "r");
2861 if (fin != NULL)
2862 {
2863 fprintf(fout, "<html><body>\n");
2864 int ch = 0;
2865 while ((ch = fgetc(fin)) != EOF)
2866 {
2867 fputc(ch, fout);
2868 }
2869 fclose(fin);
2870 fprintf(fout, "</html></body>\n");
2871 d.remove(bkmkselector->text(ind));
2872 }
2873 fclose(fout);
2874 }
2875 else
2876 QMessageBox::information(this, PROGNAME, "Couldn't open output");
2877 }
2878 }
2879#else /* USEQPE */
2880 FILE* fin = fopen((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind)), "r");
2881 if (fin != NULL)
2882 {
2883 bool allok = false;
2884 fileBrowser* fb = new fileBrowser(true, this,"OpieReader",!m_bFloatingDialog, 0, "*", QString::null);
2885 if (fb->exec())
2886 {
2887 QString outfile = fb->getCurrentFile();
2888 FILE* fout = fopen((const char *)outfile, "w");
2889 if (fout != NULL)
2890 {
2891 fprintf(fout, "<html><body>\n");
2892 int ch = 0;
2893 while ((ch = fgetc(fin)) != EOF)
2894 {
2895 fputc(ch, fout);
2896 }
2897 fprintf(fout, "</html></body>\n");
2898 fclose(fout);
2899 allok = true;
2900 }
2901 else
2902 QMessageBox::information(this, PROGNAME, "Couldn't open output");
2903 }
2904 delete fb;
2905 fclose(fin);
2906 if (allok) unlink((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind)));
2907 }
2908 else
2909 {
2910 QMessageBox::information(this, PROGNAME, "Couldn't open input");
2911 }
2912
2913/*
2914 CFileSelector *f = new CFileSelector("text/html", this, NULL, !m_bFloatingDialog, TRUE, TRUE );
2915 int ret = f->exec();
2916 qDebug("Return:%d", ret);
2917 DocLnk* doc = f->getDoc();
2918 if (doc != NULL)
2919 {
2920 FILE* fin = fopen((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind)), "r");
2921 QString rt;
2922 rt = "<html><body>\n";
2923 int ch = 0;
2924 while ((ch = fgetc(fin)) != EOF)
2925 {
2926 rt += (char)ch;
2927 }
2928 fclose(fin);
2929 rt += "</html></body>\n";
2930 if ( doc->name().isEmpty() )
2931 {
2932 doc->setName(bkmkselector->text(ind));
2933 }
2934 FileManager fm;
2935 fm.saveFile( *doc, rt );
2936 qDebug("YES");
2937 }
2938 else
2939 {
2940 qDebug("NO");
2941 }
2942 delete f;
2943*/
2944
2945#endif /* USEQPE */
2946 }
2947 break;
2074 } 2948 }
2075 showEditTools();
2076} 2949}
2077 2950
2078void QTReaderApp::cancelbkmk() 2951void QTReaderApp::cancelbkmk()
2079{ 2952{
2080 if (m_nRegAction == cOpenFile) 2953 if (m_nBkmkAction == cOpenFile)
2081 { 2954 {
2082 QString fn = usefilebrowser(); 2955 QString fn = usefilebrowser();
2083 if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn); 2956 if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn);
2084 } 2957 }
2085 showEditTools(); 2958 showEditTools();
2086} 2959}
2087 2960
2088void QTReaderApp::jump() 2961void QTReaderApp::jump()
2089{ 2962{
2090 m_nRegAction = cJump; 2963 m_nRegAction = cJump;
2091 char lcn[20]; 2964 char lcn[20];
2092 sprintf(lcn, "%lu", reader->pagelocate()); 2965 sprintf(lcn, "%lu", reader->pagelocate());
2093 regEdit->setText(lcn); 2966 regEdit->setText(lcn);
2094 do_regedit(); 2967 do_regedit();
2095} 2968}
2096 2969
2097void QTReaderApp::do_jump(const QString& lcn) 2970void QTReaderApp::do_jump(const QString& lcn)
2098{ 2971{
2099 bool ok; 2972 bool ok;
2100 unsigned long ulcn = lcn.toULong(&ok); 2973 unsigned long ulcn = lcn.toULong(&ok);
2101 if (ok) 2974 if (ok)
2102 reader->locate(ulcn); 2975 reader->locate(ulcn);
2103 else 2976 else
2104 QMessageBox::information(this, PROGNAME, "Must be a number"); 2977 QMessageBox::information(this, PROGNAME, "Must be a number");
2105} 2978}
2106 2979
2107void QTReaderApp::do_regaction() 2980void QTReaderApp::do_regaction()
2108{ 2981{
2109 reader->bDoUpdates = false; 2982 reader->bDoUpdates = false;
2110 regBar->hide(); 2983 regBar->hide();
2984#ifdef USEQPE
2111 Global::hideInputMethod(); 2985 Global::hideInputMethod();
2986#endif
2112 regVisible = false; 2987 regVisible = false;
2113 switch(m_nRegAction) 2988 switch(m_nRegAction)
2114 { 2989 {
2115 case cAutoGen: 2990 case cAutoGen:
2116 do_autogen(regEdit->text()); 2991 do_autogen(regEdit->text());
2117 break; 2992 break;
2118 case cAddBkmk: 2993 case cAddBkmk:
2119 do_addbkmk(regEdit->text()); 2994 do_addbkmk(regEdit->text());
2120 break; 2995 break;
2121 case cJump: 2996 case cJump:
2122 do_jump(regEdit->text()); 2997 do_jump(regEdit->text());
2123 break; 2998 break;
2999/*
2124 case cMonoSpace: 3000 case cMonoSpace:
2125 do_mono(regEdit->text()); 3001 do_mono(regEdit->text());
2126 break; 3002 break;
2127 case cOverlap: 3003*/
2128 do_overlap(regEdit->text());
2129 break;
2130 case cSetTarget: 3004 case cSetTarget:
2131 do_settarget(regEdit->text()); 3005 do_settarget(regEdit->text());
2132 break; 3006 break;
3007#ifdef _SCROLLPIPE
3008 case cSetPipeTarget:
3009 do_setpipetarget(regEdit->text());
3010 break;
3011#endif
3012 case cSetConfigName:
3013 // qDebug("Saving config");
3014 do_saveconfig(regEdit->text(), false);
3015 break;
2133 } 3016 }
2134 reader->restore(); 3017// reader->restore();
2135// editBar->show(); 3018// fileBar->show();
2136 reader->setFocus(); 3019 reader->setFocus();
2137 qApp->processEvents(); 3020// qApp->processEvents();
2138 reader->bDoUpdates = true; 3021 reader->bDoUpdates = true;
2139 reader->update(); 3022 reader->update();
2140} 3023}
2141 3024
2142void QTReaderApp::do_settarget(const QString& _txt) 3025void QTReaderApp::do_settarget(const QString& _txt)
2143{ 3026{
2144 int ind = _txt.find('/'); 3027 int ind = _txt.find('/');
2145 if (ind == -1) 3028 if (ind == -1)
2146 { 3029 {
2147 m_targetapp = ""; 3030 m_targetapp = "";
2148 m_targetmsg = ""; 3031 m_targetmsg = "";
2149 QMessageBox::information(this, PROGNAME, "Format is\nappname/messagename"); 3032 QMessageBox::information(this, PROGNAME, "Format is\nappname/messagename");
2150 } 3033 }
2151 else 3034 else
2152 { 3035 {
2153 m_targetapp = _txt.left(ind); 3036 m_targetapp = _txt.left(ind);
2154 m_targetmsg = _txt.right(_txt.length()-ind-1); 3037 m_targetmsg = _txt.right(_txt.length()-ind-1);
2155 } 3038 }
2156} 3039}
2157 3040
3041void QTReaderApp::chooseencoding()
3042{
3043 m_fontSelector->clear();
3044 m_fontSelector->insertItem("Ascii");
3045 m_fontSelector->insertItem("UTF-8");
3046 m_fontSelector->insertItem("UCS-2(BE)");
3047 m_fontSelector->insertItem("USC-2(LE)");
3048 m_fontSelector->insertItem("Palm");
3049 for (unicodetable::iterator iter = unicodetable::begin(); iter != unicodetable::end(); iter++)
3050 {
3051 m_fontSelector->insertItem(iter->mime);
3052 } // delete the FontDatabase!!!
3053 m_fontSelector->setCurrentItem (reader->m_encd);
3054 m_fontAction = cChooseEncoding;
3055 m_fontBar->show();
3056 m_fontVisible = true;
3057}
3058
2158void QTReaderApp::setfont() 3059void QTReaderApp::setfont()
2159{ 3060{
3061 m_fontSelector->clear();
3062 {
3063#ifdef USEQPE
3064 FontDatabase f;
3065#else
3066 QFontDatabase f;
3067#endif
3068 QStringList flist = f.families();
3069 m_fontSelector->insertStringList(flist);
3070 } // delete the FontDatabase!!!
3071
2160 for (int i = 1; i <= m_fontSelector->count(); i++) 3072 for (int i = 1; i <= m_fontSelector->count(); i++)
2161 { 3073 {
2162 if (m_fontSelector->text(i) == reader->m_fontname) 3074 if (m_fontSelector->text(i) == reader->m_fontname)
2163 { 3075 {
2164 m_fontSelector->setCurrentItem(i); 3076 m_fontSelector->setCurrentItem(i);
2165 break; 3077 break;
2166 } 3078 }
2167 } 3079 }
3080 m_fontAction = cChooseFont;
2168 m_fontBar->show(); 3081 m_fontBar->show();
2169 m_fontVisible = true; 3082 m_fontVisible = true;
2170} 3083}
2171 3084
2172void QTReaderApp::setfontHelper(const QString& lcn, int size) 3085void QTReaderApp::setfontHelper(const QString& lcn, int size)
2173{ 3086{
2174 if (size == 0) size = reader->m_fontControl.currentsize(); 3087 if (size == 0) size = reader->m_fontControl.currentsize();
2175 QFont f(lcn, 10 /*, QFont::Bold*/); 3088 if (m_propogatefontchange)
2176 qDebug("bs"); 3089 {
2177 bkmkselector->setFont( f ); 3090 QFont f(lcn, 10);
2178 qDebug("re"); 3091 bkmkselector->setFont( f );
2179 regEdit->setFont( f ); 3092 regEdit->setFont( f );
2180 qDebug("se"); 3093 searchEdit->setFont( f );
2181 searchEdit->setFont( f ); 3094 m_annoWin->setFont( f );
2182 qDebug("aw"); 3095 }
2183 m_annoWin->setFont( f );
2184 reader->m_fontname = lcn; 3096 reader->m_fontname = lcn;
2185 qDebug("cf1");
2186 if (!reader->ChangeFont(size)) 3097 if (!reader->ChangeFont(size))
2187 { 3098 {
2188 qDebug("cf2");
2189 reader->ChangeFont(size); 3099 reader->ChangeFont(size);
2190 } 3100 }
2191 qDebug("ref"); 3101}
3102
3103void QTReaderApp::do_setencoding(int i)
3104{
3105// qDebug("setencoding:%d", i);
3106 if (m_fontAction == cChooseEncoding)
3107 {
3108 reader->setencoding(i);
3109 }
2192 reader->refresh(); 3110 reader->refresh();
2193 m_fontBar->hide(); 3111 m_fontBar->hide();
2194 m_fontVisible = false; 3112 m_fontVisible = false;
2195 qDebug("showedit"); 3113// qDebug("showedit");
2196 if (reader->isVisible()) showEditTools(); 3114 if (reader->isVisible()) showEditTools();
2197 qDebug("showeditdone"); 3115// qDebug("showeditdone");
2198} 3116}
2199 3117
2200void QTReaderApp::do_setfont(const QString& lcn) 3118void QTReaderApp::do_setfont(const QString& lcn)
2201{ 3119{
2202 setfontHelper(lcn); 3120 if (m_fontAction == cChooseFont)
3121 {
3122 setfontHelper(lcn);
3123 }
3124 reader->refresh();
3125 m_fontBar->hide();
3126 m_fontVisible = false;
3127// qDebug("showedit");
3128 //if (reader->isVisible())
3129 showEditTools();
3130// qDebug("showeditdone");
2203} 3131}
2204 3132
2205void QTReaderApp::do_autogen(const QString& regText) 3133void QTReaderApp::do_autogen(const QString& regText)
2206{ 3134{
2207 unsigned long fs, ts; 3135 unsigned long fs, ts;
2208 reader->sizes(fs,ts); 3136 reader->sizes(fs,ts);
2209 // qDebug("Reg:%s\n", (const tchar*)(regEdit->text())); 3137// // qDebug("Reg:%s\n", (const tchar*)(regEdit->text()));
2210 m_autogenstr = regText; 3138 m_autogenstr = regText;
2211 QRegExp re(regText); 3139 QRegExp re(regText);
2212 CBuffer buff; 3140 CBuffer buff;
2213 if (pBkmklist != NULL) delete pBkmklist; 3141 if (pBkmklist != NULL) delete pBkmklist;
2214 pBkmklist = new CList<Bkmk>; 3142 pBkmklist = new CList<Bkmk>;
2215 m_fBkmksChanged = true; 3143 m_fBkmksChanged = true;
3144
3145 pbar->setGeometry(regBar->x(),regBar->y(),regBar->width(), regBar->height());
2216 pbar->show(); 3146 pbar->show();
2217pbar->resize(width(), editBar->height()); 3147 pbar->raise();
2218 pbar->reset(); 3148 pbar->reset();
3149 reader->update();
2219 qApp->processEvents(); 3150 qApp->processEvents();
2220 reader->setFocus(); 3151 reader->setFocus();
2221 reader->jumpto(0); 3152 reader->jumpto(0);
2222 int lastpc = 0; 3153 int lastpc = 0;
2223 int i = 0; 3154 int i = 0;
2224 while (i >= 0) 3155 while (i >= 0)
2225 { 3156 {
2226 unsigned int lcn = reader->locate(); 3157 unsigned int lcn = reader->locate();
2227 int pc = (100*lcn)/ts; 3158 int pc = (100*lcn)/ts;
2228 if (pc != lastpc) 3159 if (pc != lastpc)
2229 { 3160 {
2230 pbar->setProgress(pc); 3161 pbar->setProgress(pc);
2231 qApp->processEvents(); 3162 qApp->processEvents();
2232 if (reader->locate() != lcn) reader->jumpto(lcn); 3163 if (reader->locate() != lcn) reader->jumpto(lcn);
2233 reader->setFocus(); 3164 reader->setFocus();
2234 lastpc = pc; 3165 lastpc = pc;
2235 } 3166 }
2236 i = reader->buffdoc.getpara(buff); 3167 i = reader->buffdoc.getpara(buff);
2237#ifdef _UNICODE 3168#ifdef _UNICODE
2238 if (re.match(toQString(buff.data())) != -1) 3169 if (re.match(toQString(buff.data())) != -1)
2239#else 3170#else
2240 if (re.match(buff.data()) != -1) 3171 if (re.match(buff.data()) != -1)
2241#endif 3172#endif
2242 pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn)); 3173 pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn));
2243 } 3174 }
2244 pBkmklist->sort(); 3175 pBkmklist->sort();
2245 pbar->setProgress(100); 3176 pbar->setProgress(100);
2246 qApp->processEvents(); 3177 qApp->processEvents();
2247 pbar->hide(); 3178 pbar->hide();
3179 reader->refresh();
2248} 3180}
2249 3181
2250void QTReaderApp::saveprefs() 3182void QTReaderApp::saveprefs()
2251{ 3183{
3184// qDebug("saveprefs");
2252// reader->saveprefs("uqtreader"); 3185// reader->saveprefs("uqtreader");
3186// if (!m_loadedconfig)
3187 do_saveconfig( APPDIR, true );
3188
3189/*
2253 Config config( APPDIR ); 3190 Config config( APPDIR );
2254 config.setGroup( "View" ); 3191 config.setGroup( "View" );
2255 3192
2256 reader->m_lastposn = reader->pagelocate(); 3193 reader->m_lastposn = reader->pagelocate();
2257 3194
3195 config.writeEntry("FloatDialogs", m_bFloatingDialog);
2258 config.writeEntry( "StripCr", reader->bstripcr ); 3196 config.writeEntry( "StripCr", reader->bstripcr );
2259 config.writeEntry( "AutoFmt", reader->bautofmt ); 3197 config.writeEntry( "AutoFmt", reader->bautofmt );
2260 config.writeEntry( "TextFmt", reader->btextfmt ); 3198 config.writeEntry( "TextFmt", reader->btextfmt );
2261 config.writeEntry( "StripHtml", reader->bstriphtml ); 3199 config.writeEntry( "StripHtml", reader->bstriphtml );
2262 config.writeEntry( "Dehyphen", reader->bdehyphen ); 3200 config.writeEntry( "Dehyphen", reader->bdehyphen );
3201 config.writeEntry( "Depluck", reader->bdepluck );
3202 config.writeEntry( "Dejpluck", reader->bdejpluck );
2263 config.writeEntry( "OneSpace", reader->bonespace ); 3203 config.writeEntry( "OneSpace", reader->bonespace );
2264 config.writeEntry( "Unindent", reader->bunindent ); 3204 config.writeEntry( "Unindent", reader->bunindent );
2265 config.writeEntry( "Repara", reader->brepara ); 3205 config.writeEntry( "Repara", reader->brepara );
2266 config.writeEntry( "DoubleSpace", reader->bdblspce ); 3206 config.writeEntry( "DoubleSpace", reader->bdblspce );
2267 config.writeEntry( "Indent", reader->bindenter ); 3207 config.writeEntry( "Indent", reader->bindenter );
2268 config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) ); 3208 config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) );
2269 config.writeEntry( "ScrollDelay", reader->m_delay); 3209 config.writeEntry( "ScrollDelay", reader->m_delay);
2270 config.writeEntry( "LastFile", reader->m_lastfile ); 3210 config.writeEntry( "LastFile", reader->m_lastfile );
2271 config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); 3211 config.writeEntry( "LastPosn", (int)(reader->pagelocate()) );
2272 config.writeEntry( "PageMode", reader->m_bpagemode ); 3212 config.writeEntry( "PageMode", reader->m_bpagemode );
2273 config.writeEntry( "CursorNavigation", reader->m_navkeys );
2274 config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); 3213 config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced );
3214 config.writeEntry( "SwapMouse", reader->m_swapmouse);
2275 config.writeEntry( "Fontname", reader->m_fontname ); 3215 config.writeEntry( "Fontname", reader->m_fontname );
2276 config.writeEntry( "Encoding", reader->m_encd ); 3216 config.writeEntry( "Encoding", reader->m_encd );
2277 config.writeEntry( "CharSpacing", reader->m_charpc ); 3217 config.writeEntry( "CharSpacing", reader->m_charpc );
2278 config.writeEntry( "Overlap", (int)(reader->m_overlap) ); 3218 config.writeEntry( "Overlap", (int)(reader->m_overlap) );
3219 config.writeEntry( "Margin", (int)reader->m_border );
2279 config.writeEntry( "TargetApp", m_targetapp ); 3220 config.writeEntry( "TargetApp", m_targetapp );
2280 config.writeEntry( "TargetMsg", m_targetmsg ); 3221 config.writeEntry( "TargetMsg", m_targetmsg );
3222#ifdef _SCROLLPIPE
3223 config.writeEntry( "PipeTarget", reader->m_pipetarget );
3224 config.writeEntry( "PauseAfterPara", reader->m_pauseAfterEachPara );
3225#endif
2281 config.writeEntry( "TwoTouch", m_twoTouch ); 3226 config.writeEntry( "TwoTouch", m_twoTouch );
2282 config.writeEntry( "Annotation", m_doAnnotation); 3227 config.writeEntry( "Annotation", m_doAnnotation);
2283 config.writeEntry( "Dictionary", m_doDictionary); 3228 config.writeEntry( "Dictionary", m_doDictionary);
2284 config.writeEntry( "Clipboard", m_doClipboard); 3229 config.writeEntry( "Clipboard", m_doClipboard);
2285 config.writeEntry( "SpaceTarget", m_spaceTarget); 3230 config.writeEntry( "SpaceTarget", m_spaceTarget);
3231 config.writeEntry( "EscapeTarget", m_escapeTarget);
3232 config.writeEntry( "ReturnTarget", m_returnTarget);
3233 config.writeEntry( "LeftTarget", m_leftTarget);
3234 config.writeEntry( "RightTarget", m_rightTarget);
3235 config.writeEntry( "UpTarget", m_upTarget);
3236 config.writeEntry( "DownTarget", m_downTarget);
3237 config.writeEntry("LeftScroll", m_leftScroll);
3238 config.writeEntry("RightScroll", m_rightScroll);
3239 config.writeEntry("UpScroll", m_upScroll);
3240 config.writeEntry("DownScroll", m_downScroll);
2286#ifdef REPALM 3241#ifdef REPALM
2287 config.writeEntry( "Repalm", reader->brepalm ); 3242 config.writeEntry( "Repalm", reader->brepalm );
2288#endif 3243#endif
2289 config.writeEntry( "Remap", reader->bremap ); 3244 config.writeEntry( "Remap", reader->bremap );
2290 config.writeEntry( "Peanut", reader->bpeanut ); 3245 config.writeEntry( "Peanut", reader->bpeanut );
2291 config.writeEntry( "MakeBold", reader->bmakebold ); 3246 config.writeEntry( "MakeBold", reader->bmakebold );
2292 config.writeEntry( "Continuous", reader->m_continuousDocument ); 3247 config.writeEntry( "Continuous", reader->m_continuousDocument );
2293 3248 config.writeEntry( "FullJust", reader->bfulljust );
3249 config.writeEntry( "ExtraSpace", reader->getextraspace() );
3250 config.writeEntry( "ExtraLead", reader->getlead() );
3251 config.writeEntry( "Basesize", (int)reader->getBaseSize());
3252 config.writeEntry( "RequestorFontChange", m_propogatefontchange);
3253
3254 config.setGroup( "Toolbar" );
3255 config.writeEntry("Movable", m_tbmovesave);
3256 config.writeEntry("Policy", m_tbpolsave);
3257 config.writeEntry("Position", m_tbposition);
3258*/
2294 savefilelist(); 3259 savefilelist();
2295} 3260}
2296 3261
2297void QTReaderApp::indentplus()
2298{
2299 reader->indentplus();
2300}
2301
2302void QTReaderApp::indentminus()
2303{
2304 reader->indentminus();
2305}
2306
2307/* 3262/*
2308void QTReaderApp::oldFile() 3263void QTReaderApp::oldFile()
2309{ 3264{
2310 qDebug("oldFile called"); 3265// qDebug("oldFile called");
2311 reader->setText(true); 3266 reader->setText(true);
2312 qDebug("settext called"); 3267// qDebug("settext called");
2313 showEditTools(); 3268 showEditTools();
2314 qDebug("showedit called"); 3269// qDebug("showedit called");
2315} 3270}
2316*/ 3271*/
2317 3272
2318/* 3273/*
2319void info_cb(Fl_Widget* o, void* _data) 3274void info_cb(Fl_Widget* o, void* _data)
2320{ 3275{
2321 3276
2322 if (infowin == NULL) 3277 if (infowin == NULL)
2323 { 3278 {
2324 3279
2325 infowin = new Fl_Window(160,240); 3280 infowin = new Fl_Window(160,240);
2326 filename = new Fl_Output(45,5,110,14,"Filename"); 3281 filename = new Fl_Output(45,5,110,14,"Filename");
2327 filesize = new Fl_Output(45,25,110,14,"Filesize"); 3282 filesize = new Fl_Output(45,25,110,14,"Filesize");
2328 textsize = new Fl_Output(45,45,110,14,"Textsize"); 3283 textsize = new Fl_Output(45,45,110,14,"Textsize");
2329 comprat = new CBar(45,65,110,14,"Ratio %"); 3284 comprat = new CBar(45,65,110,14,"Ratio %");
2330 posn = new Fl_Output(45,85,110,14,"Location"); 3285 posn = new Fl_Output(45,85,110,14,"Location");
2331 frcn = new CBar(45,105,110,14,"% Read"); 3286 frcn = new CBar(45,105,110,14,"% Read");
2332 about = new Fl_Multiline_Output(5,125,150,90); 3287 about = new Fl_Multiline_Output(5,125,150,90);
2333 about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files"); 3288 about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files");
2334 Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay"); 3289 Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay");
2335 infowin->set_modal(); 3290 infowin->set_modal();
2336 } 3291 }
2337 if (((reader_ui *)_data)->g_filename[0] != '\0') 3292 if (((reader_ui *)_data)->g_filename[0] != '\0')
2338 { 3293 {
2339 unsigned long fs,ts; 3294 unsigned long fs,ts;
2340 tchar sz[20]; 3295 tchar sz[20];
2341 ((reader_ui *)_data)->input->sizes(fs,ts); 3296 ((reader_ui *)_data)->input->sizes(fs,ts);
2342 unsigned long pl = ((reader_ui *)_data)->input->locate(); 3297 unsigned long pl = ((reader_ui *)_data)->input->locate();
2343 3298
2344 filename->value(((reader_ui *)_data)->g_filename); 3299 filename->value(((reader_ui *)_data)->g_filename);
2345 3300
2346 sprintf(sz,"%u",fs); 3301 sprintf(sz,"%u",fs);
2347 filesize->value(sz); 3302 filesize->value(sz);
2348 3303
2349 sprintf(sz,"%u",ts); 3304 sprintf(sz,"%u",ts);
2350 textsize->value(sz); 3305 textsize->value(sz);
2351 3306
2352 comprat->value(100-(100*fs + (ts >> 1))/ts); 3307 comprat->value(100-(100*fs + (ts >> 1))/ts);
2353 3308
2354 sprintf(sz,"%u",pl); 3309 sprintf(sz,"%u",pl);
2355 posn->value(sz); 3310 posn->value(sz);
2356 3311
2357 frcn->value((100*pl + (ts >> 1))/ts); 3312 frcn->value((100*pl + (ts >> 1))/ts);
2358 } 3313 }
2359 infowin->show(); 3314 infowin->show();
2360} 3315}
2361*/ 3316*/
2362 3317
2363void QTReaderApp::savebkmks() 3318void QTReaderApp::savebkmks()
2364{ 3319{
2365 if (pBkmklist != NULL) 3320 if (pBkmklist != NULL)
2366 { 3321 {
2367 BkmkFile bf((const char *)Global::applicationFileName(APPDIR, reader->m_string), true); 3322#ifndef USEQPE
3323 QDir d = QDir::home(); // "/"
3324 d.cd(APPDIR);
3325 QFileInfo fi(d, reader->m_string);
3326 BkmkFile bf((const char *)fi.absFilePath(), true);
3327#else /* USEQPE */
3328 BkmkFile bf((const char *)Global::applicationFileName(APPDIR,reader->m_string), true);
3329#endif /* USEQPE */
2368 bf.write(*pBkmklist); 3330 bf.write(*pBkmklist);
2369 } 3331 }
2370 m_fBkmksChanged = false; 3332 m_fBkmksChanged = false;
2371} 3333}
2372 3334
2373void QTReaderApp::readfilelist() 3335void QTReaderApp::readfilelist()
2374{ 3336{
2375 BkmkFile bf((const char *)Global::applicationFileName(APPDIR, ".openfiles")); 3337#ifndef USEQPE
2376 qDebug("Reading open files"); 3338 QDir d = QDir::home(); // "/"
3339 d.cd(APPDIR);
3340 QFileInfo fi(d, ".openfiles");
3341 BkmkFile bf((const char *)fi.absFilePath());
3342#else /* USEQPE */
3343 BkmkFile bf((const char *)Global::applicationFileName(APPDIR,".openfiles"));
3344#endif /* USEQPE */
3345// qDebug("Reading open files");
2377 pOpenlist = bf.readall(); 3346 pOpenlist = bf.readall();
2378 if (pOpenlist != NULL) qDebug("...with success"); 3347// if (pOpenlist != NULL) qDebug("...with success");
2379 else qDebug("...without success!"); 3348// else qDebug("...without success!");
2380} 3349}
2381 3350
2382void QTReaderApp::savefilelist() 3351void QTReaderApp::savefilelist()
2383{ 3352{
2384 if (pOpenlist != NULL) 3353 if (pOpenlist != NULL)
2385 { 3354 {
2386 BkmkFile bf((const char *)Global::applicationFileName(APPDIR, ".openfiles"), true); 3355#ifndef USEQPE
2387 qDebug("Writing open files"); 3356 QDir d = QDir::home(); // "/"
3357 d.cd(APPDIR);
3358 QFileInfo fi(d, ".openfiles");
3359 BkmkFile bf((const char *)fi.absFilePath(), true);
3360#else /* USEQPE */
3361 BkmkFile bf((const char *)Global::applicationFileName(APPDIR,".openfiles"), true);
3362#endif /* USEQPE */
3363 //qDebug("Writing open files");
2388 bf.write(*pOpenlist); 3364 bf.write(*pOpenlist);
2389 } 3365 }
2390} 3366}
2391 3367
2392void QTReaderApp::readbkmks() 3368void QTReaderApp::readbkmks()
2393{ 3369{
2394 if (pBkmklist != NULL) 3370 if (pBkmklist != NULL)
2395 { 3371 {
2396 delete pBkmklist; 3372 delete pBkmklist;
2397 } 3373 }
2398 struct stat fnstat; 3374 struct stat fnstat;
2399 struct stat bkstat; 3375 struct stat bkstat;
3376#ifndef USEQPE
3377 QDir d = QDir::home(); // "/"
3378 d.cd(APPDIR);
3379 QFileInfo fi(d, reader->m_string);
3380#endif /* ! USEQPE */
2400 if ( 3381 if (
2401 stat((const char *)reader->m_lastfile, &fnstat) == 0 3382 stat((const char *)reader->m_lastfile, &fnstat) == 0
2402 && 3383 &&
2403 stat((const char *)Global::applicationFileName(APPDIR, reader->m_string), &bkstat) == 0 3384#ifndef USEQPE
3385 stat((const char *)fi.absFilePath(), &bkstat) == 0
3386#else /* USEQPE */
3387 stat((const char *)Global::applicationFileName(APPDIR,reader->m_string), &bkstat) == 0
3388#endif /* USEQPE */
2404 ) 3389 )
2405 { 3390 {
2406 if (bkstat.st_mtime < fnstat.st_mtime) 3391 if (bkstat.st_mtime < fnstat.st_mtime)
2407 { 3392 {
2408 unlink((const char *)Global::applicationFileName(APPDIR, reader->m_string)); 3393#ifndef USEQPE
3394 unlink((const char *)fi.absFilePath());
3395#else /* USEQPE */
3396 unlink((const char *)Global::applicationFileName(APPDIR,reader->m_string));
3397#endif /* USEQPE */
2409 } 3398 }
2410 } 3399 }
2411 3400
2412 BkmkFile bf((const char *)Global::applicationFileName(APPDIR, reader->m_string)); 3401#ifndef USEQPE
3402 BkmkFile bf((const char *)fi.absFilePath());
3403#else /* USEQPE */
3404 BkmkFile bf((const char *)Global::applicationFileName(APPDIR,reader->m_string));
3405#endif /* USEQPE */
2413 3406
2414 pBkmklist = bf.readall(); 3407 pBkmklist = bf.readall();
2415 m_fBkmksChanged = bf.upgraded(); 3408 m_fBkmksChanged = bf.upgraded();
2416 if (pBkmklist == NULL) 3409 if (pBkmklist == NULL)
2417 { 3410 {
2418 pBkmklist = reader->getbkmklist(); 3411 pBkmklist = reader->getbkmklist();
2419 } 3412 }
2420 if (pBkmklist != NULL) 3413 if (pBkmklist != NULL)
2421 pBkmklist->sort(); 3414 pBkmklist->sort();
2422} 3415}
2423 3416
2424void QTReaderApp::addbkmk() 3417void QTReaderApp::addbkmk()
2425{ 3418{
2426 m_nRegAction = cAddBkmk; 3419 m_nRegAction = cAddBkmk;
2427 regEdit->setText(reader->firstword()); 3420 regEdit->setText(reader->firstword());
2428 do_regedit(); 3421 do_regedit();
2429} 3422}
2430 3423
2431void QTReaderApp::do_addbkmk(const QString& text) 3424void QTReaderApp::do_addbkmk(const QString& text)
2432{ 3425{
2433 if (text.isEmpty()) 3426 if (text.isEmpty())
2434 { 3427 {
2435 QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nSelect add again", 1); 3428 QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nSelect add again", 1);
2436 } 3429 }
2437 else 3430 else
2438 { 3431 {
2439 if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; 3432 if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>;
2440#ifdef _UNICODE 3433#ifdef _UNICODE
2441 CBuffer buff; 3434 CBuffer buff;
2442 int i = 0; 3435 int i = 0;
2443 for (i = 0; i < text.length(); i++) 3436 for (i = 0; i < text.length(); i++)
2444 { 3437 {
2445 buff[i] = text[i].unicode(); 3438 buff[i] = text[i].unicode();
2446 } 3439 }
2447 buff[i] = 0; 3440 buff[i] = 0;
2448 pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate())); 3441 pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate()));
2449#else 3442#else
2450 pBkmklist->push_front(Bkmk((const tchar*)text, reader->pagelocate())); 3443 pBkmklist->push_front(Bkmk((const tchar*)text, reader->pagelocate()));
2451#endif 3444#endif
2452 m_fBkmksChanged = true; 3445 m_fBkmksChanged = true;
2453 pBkmklist->sort(); 3446 pBkmklist->sort();
2454 } 3447 }
2455} 3448}
2456 3449
2457void QTReaderApp::OnRedraw() 3450void QTReaderApp::OnRedraw()
2458{ 3451{
2459 if (pBkmklist != NULL) 3452 if ((pBkmklist != NULL) && (m_bkmkAvail != NULL))
2460 { 3453 {
2461 bool found = findNextBookmark(reader->pagelocate()); 3454 bool found = findNextBookmark(reader->pagelocate());
2462 m_bkmkAvail->setEnabled(found); 3455 m_bkmkAvail->setEnabled(found);
2463 } 3456 }
2464} 3457}
2465 3458
2466void QTReaderApp::showAnnotation() 3459void QTReaderApp::showAnnotation()
2467{ 3460{
2468 m_annoWin->setName(toQString(m_anno->name())); 3461 m_annoWin->setName(toQString(m_anno->name()));
2469 m_annoWin->setAnno(toQString(m_anno->anno())); 3462 m_annoWin->setAnno(toQString(m_anno->anno()));
2470 m_annoIsEditing = false; 3463 m_annoIsEditing = false;
3464#ifdef USEQPE
2471 Global::showInputMethod(); 3465 Global::showInputMethod();
3466#endif
2472 editorStack->raiseWidget( m_annoWin ); 3467 editorStack->raiseWidget( m_annoWin );
2473 m_annoWin->setFocus(); 3468 m_annoWin->setFocus();
2474} 3469}
2475 3470
2476void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, const QString& line) 3471void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, const QString& line)
2477{ 3472{
2478// qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd); 3473//// qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd);
2479 3474
2480 if (m_doClipboard) 3475 if (m_doClipboard)
2481 { 3476 {
2482 QClipboard* cb = QApplication::clipboard(); 3477 QClipboard* cb = QApplication::clipboard();
2483 cb->setText(wrd); 3478 cb->setText(wrd);
3479#ifdef USEQPE
2484 if (wrd.length() > 10) 3480 if (wrd.length() > 10)
2485 { 3481 {
2486 Global::statusMessage(wrd.left(8) + ".."); 3482 Global::statusMessage(wrd.left(8) + "..");
2487 } 3483 }
2488 else 3484 else
2489 { 3485 {
2490 Global::statusMessage(wrd); 3486 Global::statusMessage(wrd);
2491 } 3487 }
3488#endif
2492 } 3489 }
2493 if (m_doAnnotation) 3490 if (m_doAnnotation)
2494 { 3491 {
2495 //addAnno(wrd, "Need to be able to edit this", posn); 3492 //addAnno(wrd, "Need to be able to edit this", posn);
2496 m_annoWin->setName(line); 3493 m_annoWin->setName(line);
2497 m_annoWin->setAnno(""); 3494 m_annoWin->setAnno("");
2498 m_annoWin->setPosn(posn); 3495 m_annoWin->setPosn(posn);
2499 m_annoIsEditing = true; 3496 m_annoIsEditing = true;
3497#ifdef USEQPE
2500 Global::showInputMethod(); 3498 Global::showInputMethod();
3499#endif
2501 editorStack->raiseWidget( m_annoWin ); 3500 editorStack->raiseWidget( m_annoWin );
2502 } 3501 }
3502#ifdef USEQPE
2503 if (m_doDictionary) 3503 if (m_doDictionary)
2504 { 3504 {
2505 if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty()) 3505 if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty())
2506 { 3506 {
2507 QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8()); 3507 QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8());
2508 e << wrd; 3508 e << wrd;
2509 } 3509 }
2510 } 3510 }
3511#endif
2511} 3512}
2512 3513
2513void QTReaderApp::OnActionPressed() 3514void QTReaderApp::doAction(ActionTypes a, QKeyEvent* e)
2514{ 3515{
2515 switch (m_spaceTarget) 3516 if (a == 0)
2516 { 3517 {
2517 case cesOpenFile: 3518 e->ignore();
2518 { 3519 }
2519 fileOpen(); 3520 else
2520 } 3521 {
2521 break; 3522 e->accept();
2522 case cesAutoScroll: 3523 //qDebug("Accepted");
2523 { 3524 switch (a)
2524 reader->setautoscroll(!reader->m_autoScroll);
2525 setScrollState(reader->m_autoScroll);
2526 }
2527 break;
2528 case cesActionMark:
2529 { 3525 {
2530 addbkmk(); 3526 case cesOpenFile:
3527 {
3528 fileOpen();
3529 }
3530 break;
3531 case cesAutoScroll:
3532 {
3533 reader->setautoscroll(!reader->m_autoScroll);
3534 setScrollState(reader->m_autoScroll);
3535 }
3536 break;
3537 case cesActionMark:
3538 {
3539 addbkmk();
3540 }
3541 break;
3542 case cesFullScreen:
3543 {
3544 m_actFullscreen->setOn(!m_fullscreen);
3545 }
3546 break;
3547 case cesActionAnno:
3548 {
3549 addanno();
3550 }
3551 break;
3552 case cesZoomIn:
3553 zoomin();
3554 break;
3555 case cesZoomOut:
3556 zoomout();
3557 break;
3558 case cesBack:
3559 reader->goBack();
3560 break;
3561 case cesForward:
3562 reader->goForward();
3563 break;
3564 case cesHome:
3565 reader->goHome();
3566 break;
3567 case cesPageUp:
3568 reader->dopageup();
3569 break;
3570 case cesPageDown:
3571 reader->dopagedn();
3572 break;
3573 case cesLineUp:
3574 reader->lineUp();
3575 break;
3576 case cesLineDown:
3577 reader->lineDown();
3578 break;
3579 case cesStartDoc:
3580 gotoStart();
3581 break;
3582 case cesEndDoc:
3583 gotoEnd();
3584 break;
3585 default:
3586 qDebug("Unknown ActionType:%u", a);
3587 break;
2531 } 3588 }
2532 break; 3589 }
2533 case cesFullScreen: 3590}
3591
3592void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); }
3593void QTReaderApp::restoreFocus() { reader->setFocus(); }
3594
3595void QTReaderApp::SaveConfig()
3596{
3597 m_nRegAction = cSetConfigName;
3598 regEdit->setText(reader->m_string);
3599 do_regedit();
3600}
3601
3602void QTReaderApp::do_saveconfig(const QString& _txt, bool full)
3603{
3604// qDebug("do_saveconfig:%s", (const char*)_txt);
3605#ifdef USEQPE
3606 QString configname;
3607 Config::Domain dom;
3608
3609 if (full)
3610 {
3611 configname = _txt;
3612 dom = Config::User;
3613 }
3614 else
3615 {
3616 configname = Global::applicationFileName(APPDIR "/configs", _txt);
3617 dom = Config::File;
3618 }
3619
3620 Config config(configname, dom);
3621 config.setGroup( "View" );
3622
3623#else
3624 QFileInfo fi;
3625 if (full)
2534 { 3626 {
2535 m_actFullscreen->setOn(true); 3627 // qDebug("full:%s", (const char*)_txt);
3628 QDir d = QDir::home(); // "/"
3629 if ( !d.cd(_txt) )
3630 { // "/tmp"
3631 qWarning( "Cannot find the \"~/%s\" directory", (const char*)_txt );
3632 d = QDir::home();
3633 d.mkdir(_txt);
3634 d.cd(_txt);
3635 }
3636 fi.setFile(d, INIFILE);
2536 } 3637 }
2537 break; 3638 else
2538 default:
2539 { 3639 {
2540 qDebug("Unknown ActionType:%u", m_spaceTarget); 3640 QDir d = QDir::home(); // "/"
3641 if ( !d.cd(APPDIR) )
3642 { // "/tmp"
3643 qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
3644 d = QDir::home();
3645 d.mkdir(APPDIR);
3646 d.cd(APPDIR);
3647 }
3648 if ( !d.cd("configs") )
3649 { // "/tmp"
3650 qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" );
3651 d = QDir::home();
3652 d.cd(APPDIR);
3653 d.mkdir("configs");
3654 d.cd("configs");
3655 }
3656 fi.setFile(d, _txt);
2541 } 3657 }
2542 break; 3658 //qDebug("Path:%s", (const char*)fi.absFilePath());
3659 Config config(fi.absFilePath());
3660#endif
3661
3662
3663 config.writeEntry( "StripCr", reader->bstripcr );
3664 config.writeEntry( "AutoFmt", reader->bautofmt );
3665 config.writeEntry( "TextFmt", reader->btextfmt );
3666 config.writeEntry( "StripHtml", reader->bstriphtml );
3667 config.writeEntry( "Dehyphen", reader->bdehyphen );
3668 config.writeEntry( "Depluck", reader->bdepluck );
3669 config.writeEntry( "Dejpluck", reader->bdejpluck );
3670 config.writeEntry( "OneSpace", reader->bonespace );
3671 config.writeEntry( "Unindent", reader->bunindent );
3672 config.writeEntry( "Repara", reader->brepara );
3673 config.writeEntry( "DoubleSpace", reader->bdblspce );
3674 config.writeEntry( "Indent", reader->bindenter );
3675 config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) );
3676 config.writeEntry( "ScrollDelay", reader->m_delay);
3677 if (full)
3678 {
3679 config.writeEntry("Debounce", m_debounce);
3680 config.writeEntry("FloatDialogs", m_bFloatingDialog);
3681 reader->m_lastposn = reader->pagelocate();
3682 config.writeEntry( "LastFile", reader->m_lastfile );
3683 config.writeEntry( "LastPosn", (int)(reader->pagelocate()) );
3684 }
3685 config.writeEntry( "PageMode", reader->m_bpagemode );
3686 config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced );
3687 config.writeEntry( "SwapMouse", reader->m_swapmouse);
3688 config.writeEntry( "Fontname", reader->m_fontname );
3689 config.writeEntry( "Encoding", reader->m_encd );
3690 config.writeEntry( "CharSpacing", reader->m_charpc );
3691 config.writeEntry( "Overlap", (int)(reader->m_overlap) );
3692 config.writeEntry( "Margin", (int)reader->m_border );
3693 config.writeEntry( "TargetApp", m_targetapp );
3694 config.writeEntry( "TargetMsg", m_targetmsg );
3695#ifdef _SCROLLPIPE
3696 config.writeEntry( "PipeTarget", reader->m_pipetarget );
3697 config.writeEntry( "PauseAfterPara", reader->m_pauseAfterEachPara );
3698#endif
3699 config.writeEntry( "TwoTouch", m_twoTouch );
3700 config.writeEntry( "Annotation", m_doAnnotation);
3701 config.writeEntry( "Dictionary", m_doDictionary);
3702 config.writeEntry( "Clipboard", m_doClipboard);
3703 config.writeEntry( "SpaceTarget", m_spaceTarget);
3704 config.writeEntry( "EscapeTarget", m_escapeTarget);
3705 config.writeEntry( "ReturnTarget", m_returnTarget);
3706 config.writeEntry( "LeftTarget", m_leftTarget);
3707 config.writeEntry( "RightTarget", m_rightTarget);
3708 config.writeEntry( "UpTarget", m_upTarget);
3709 config.writeEntry( "DownTarget", m_downTarget);
3710 config.writeEntry("LeftScroll", m_leftScroll);
3711 config.writeEntry("RightScroll", m_rightScroll);
3712 config.writeEntry("UpScroll", m_upScroll);
3713 config.writeEntry("DownScroll", m_downScroll);
3714#ifdef REPALM
3715 config.writeEntry( "Repalm", reader->brepalm );
3716#endif
3717 config.writeEntry( "Remap", reader->bremap );
3718 config.writeEntry( "Peanut", reader->bpeanut );
3719 config.writeEntry( "MakeBold", reader->bmakebold );
3720 config.writeEntry( "Continuous", reader->m_continuousDocument );
3721 config.writeEntry( "FullJust", reader->bfulljust );
3722 config.writeEntry( "ExtraSpace", reader->getextraspace() );
3723 config.writeEntry( "ExtraLead", reader->getlead() );
3724 config.writeEntry( "Basesize", (int)reader->getBaseSize());
3725 config.writeEntry( "RequestorFontChange", m_propogatefontchange);
3726 if (full)
3727 {
3728 config.setGroup( "Toolbar" );
3729 config.writeEntry("Movable", m_tbmovesave);
3730 config.writeEntry("Policy", m_tbpolsave);
3731 config.writeEntry("Position", m_tbposition);
3732#ifndef USEQPE
3733 config.setGroup( "Geometry" );
3734 config.writeEntry( "x", x() );
3735 config.writeEntry( "y", y() );
3736 config.writeEntry( "width", width() );
3737 config.writeEntry( "height", height() );
3738#endif
2543 } 3739 }
2544} 3740}
2545 3741
2546void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); }
2547void QTReaderApp::restoreFocus() { reader->setFocus(); }
2548
2549/* 3742/*
2550void QTReaderApp::setstate(unsigned char* _sd, unsigned short _sdlen) 3743void QTReaderApp::setstate(unsigned char* _sd, unsigned short _sdlen)
2551{ 3744{
2552 unsigned short sdlen; 3745 unsigned short sdlen;
2553 memcpy(&sdlen, _sd, sizeof(sdlen)); 3746 memcpy(&sdlen, _sd, sizeof(sdlen));
2554 sdlen -= sizeof(sdlen); 3747 sdlen -= sizeof(sdlen);
2555 _sd += sizeof(sdlen); 3748 _sd += sizeof(sdlen);
2556 statedata* sd; 3749 statedata* sd;
2557 char* data; 3750 char* data;
2558 if (sdlen < sizeof(statedata)+1) 3751 if (sdlen < sizeof(statedata)+1)
2559 { 3752 {
2560 sdlen = sizeof(statedata)+1; 3753 sdlen = sizeof(statedata)+1;
2561 } 3754 }
2562 data = new char[sdlen]; 3755 data = new char[sdlen];
2563 sd = (statedata*)data; 3756 sd = (statedata*)data;
2564 memcpy(sd, _sd, sdlen); 3757 memcpy(sd, _sd, sdlen);
2565 data[sdlen] = 0; 3758 data[sdlen] = 0;
2566 reader->setstate(*sd); 3759 reader->setstate(*sd);
2567 delete [] data; 3760 delete [] data;
2568} 3761}
2569 3762
2570void QTReaderApp::getstate(unsigned char*& data, unsigned short& len) 3763void QTReaderApp::getstate(unsigned char*& data, unsigned short& len)
2571{ 3764{
2572 unsigned char* olddata = data; 3765 unsigned char* olddata = data;
2573 unsigned short oldlen = len; 3766 unsigned short oldlen = len;
2574 len = oldlen+sizeof(unsigned short)+sizeof(statedata)+reader->m_fontname.length(); 3767 len = oldlen+sizeof(unsigned short)+sizeof(statedata)+reader->m_fontname.length();
2575 data = new unsigned char[len]; 3768 data = new unsigned char[len];
2576 memcpy(data, olddata, oldlen); 3769 memcpy(data, olddata, oldlen);
2577 delete [] olddata; 3770 delete [] olddata;
2578 memcpy(data+oldlen, &len, sizeof(len)); 3771 memcpy(data+oldlen, &len, sizeof(len));
2579 statedata* sd = (statedata*)(data+oldlen+sizeof(unsigned short)); 3772 statedata* sd = (statedata*)(data+oldlen+sizeof(unsigned short));
2580 3773
2581 sd->bstripcr = reader->bstripcr; 3774 sd->bstripcr = reader->bstripcr;
2582 sd->btextfmt = reader->btextfmt; 3775 sd->btextfmt = reader->btextfmt;
2583 sd->bautofmt = reader->bautofmt; 3776 sd->bautofmt = reader->bautofmt;
2584 sd->bstriphtml = reader->bstriphtml; 3777 sd->bstriphtml = reader->bstriphtml;
2585 sd->bpeanut = reader->bpeanut; 3778 sd->bpeanut = reader->bpeanut;
2586 sd->bdehyphen = reader->bdehyphen; 3779 sd->bdehyphen = reader->bdehyphen;
3780 sd->bdepluck = reader->bdepluck;
3781 sd->bdejpluck = reader->bdejpluck;
2587 sd->bonespace = reader->bonespace; 3782 sd->bonespace = reader->bonespace;
2588 sd->bunindent = reader->bunindent; 3783 sd->bunindent = reader->bunindent;
2589 sd->brepara = reader->brepara; 3784 sd->brepara = reader->brepara;
2590 sd->bdblspce = reader->bdblspce; 3785 sd->bdblspce = reader->bdblspce;
2591 sd->m_bpagemode = reader->m_bpagemode; 3786 sd->m_bpagemode = reader->m_bpagemode;
2592 sd->m_navkeys = reader->m_navkeys;
2593 sd->m_bMonoSpaced = reader->m_bMonoSpaced; 3787 sd->m_bMonoSpaced = reader->m_bMonoSpaced;
2594 sd->bremap = reader->bremap; 3788 sd->bremap = reader->bremap;
2595 sd->bmakebold = reader->bmakebold; 3789 sd->bmakebold = reader->bmakebold;
2596 sd->Continuous = reader->m_continuousDocument; 3790 sd->Continuous = reader->m_continuousDocument;
2597#ifdef REPALM 3791#ifdef REPALM
2598 sd->brepalm = reader->brepalm; 3792 sd->brepalm = reader->brepalm;
2599#endif 3793#endif
2600 sd->bindenter = reader->bindenter; 3794 sd->bindenter = reader->bindenter;
2601 sd->m_textsize = reader->m_textsize; //reader->m_fontControl.currentsize() 3795 sd->m_textsize = reader->m_textsize; //reader->m_fontControl.currentsize()
2602 sd->m_encd = reader->m_encd; 3796 sd->m_encd = reader->m_encd;
2603 sd->m_charpc = reader->m_charpc; 3797 sd->m_charpc = reader->m_charpc;
2604 strcpy(sd->m_fontname, reader->m_fontname.latin1()); 3798 strcpy(sd->m_fontname, reader->m_fontname.latin1());
2605} 3799}
2606*/ 3800*/
3801#ifdef _SCRIPT
3802void QTReaderApp::RunScript()
3803{
3804 fileBrowser* fb = new fileBrowser(this,"OpieReader",!m_bFloatingDialog,
3805 0,
3806 // WStyle_Customize | WStyle_NoBorderEx,
3807 "*", Global::applicationFileName(APPDIR "/scripts", ""));
3808
3809 QString fn;
3810 if (fb->exec())
3811 {
3812 fn = fb->fileList[0];
3813 }
3814 delete fb;
3815 if ( !fn.isEmpty() && fork() == 0 )
3816 {
3817 execlp((const char *)fn,(const char *)fn,NULL);
3818 }
3819}
3820
3821void QTReaderApp::SaveScript(const char* sname)
3822{
3823 FILE* f = fopen(sname,"w");
3824 if (f != NULL)
3825 {
3826#ifdef OPIE
3827 fprintf(f, "#!/bin/sh\nmsg() {\n\tqcop QPE/Application/reader \"$1\" \"$2\" \"$3\"\n}\n");
3828#else
3829 fprintf(f, "#!/bin/bash\nmsg() {\n\tqcop QPE/Application/uqtreader \"$1\" \"$2\" \"$3\"\n}\n");
3830#endif
3831 fprintf(f, "msg \"Update(int)\" 0\n");
3832 fprintf(f, "msg \"Layout/StripCR(int)\" %d\n", (reader->bstripcr) ? 1:0);
3833 if (reader->btextfmt) fprintf(f, "msg \"Markup(QString)\" \"Text\"\n");
3834 else if (reader->bautofmt) fprintf(f, "msg \"Markup(QString)\" \"Auto\"\n");
3835 else if (reader->bstriphtml) fprintf(f, "msg \"Markup(QString)\" \"HTML\"\n");
3836 else if (reader->bpeanut) fprintf(f, "msg \"Markup(QString)\" \"Peanut/PML\"\n");
3837 else fprintf(f, "msg \"Markup(QString)\" \"None\"\n");
3838 fprintf(f, "msg \"Layout/Dehyphen(int)\" %d\n", (reader->bdehyphen) ? 1:0);
3839 fprintf(f, "msg \"Layout/Depluck(int)\" %d\n", (reader->bdepluck) ? 1:0);
3840 fprintf(f, "msg \"Layout/Dejpluck(int)\" %d\n", (reader->bdejpluck) ? 1:0);
3841 fprintf(f, "msg \"Layout/SingleSpace(int)\" %d\n", (reader->bonespace) ? 1:0);
3842 fprintf(f, "msg \"Layout/Unindent(int)\" %d\n", (reader->bunindent) ? 1:0);
3843 fprintf(f, "msg \"Layout/Re-paragraph(int)\" %d\n", (reader->brepara) ? 1:0);
3844 fprintf(f, "msg \"Layout/DoubleSpace(int)\" %d\n", (reader->bdblspce) ? 1:0);
3845 fprintf(f, "msg \"Layout/Indent(int)\" %d\n", reader->bindenter);
3846 fprintf(f, "msg \"Format/SetFont(QString,int)\" \"%s\" %d\n", (const char*)reader->m_fontname, reader->m_textsize);
3847 fprintf(f, "msg \"Navigation/Page/LineScroll(int)\" %d\n", (reader->m_bpagemode) ? 1:0);
3848 fprintf(f, "msg \"Format/Ideogram/Word(int)\" %d\n", (reader->m_bMonoSpaced) ? 1:0);
3849 fprintf(f, "msg \"Format/Encoding(QString)\" \"%s\"\n", (const char*)m_EncodingAction[reader->m_encd]->text());
3850 fprintf(f, "msg \"Format/SetWidth(int)\" %d\n", reader->m_charpc);
3851 fprintf(f, "msg \"Navigation/SetOverlap(int)\" %d\n", reader->m_overlap);
3852 fprintf(f, "msg \"Layout/Remap(int)\" %d\n", (reader->bremap) ? 1:0);
3853 fprintf(f, "msg \"Layout/Embolden(int)\" %d\n", (reader->bmakebold) ? 1:0);
3854 fprintf(f, "msg \"File/Continuous(int)\" %d\n", (reader->m_continuousDocument) ? 1:0);
3855 fprintf(f, "msg \"File/SetDictionary(QString)\" \"%s/%s\"\n", (const char *)m_targetapp, (const char *)m_targetmsg);
3856#ifdef _SCROLLPIPE
3857 fprintf(f, "msg \"File/SetScrollTarget(QString)\" \"%s\"\n", (const char *)reader->m_pipetarget);
3858#endif
3859 fprintf(f, "msg \"File/Two/OneTouch(int)\" %d\n", (m_twoTouch) ? 1:0);
3860 fprintf(f, "msg \"Target/Annotation(int)\" %d\n", (m_doAnnotation) ? 1:0);
3861 fprintf(f, "msg \"Target/Dictionary(int)\" %d\n", (m_doDictionary) ? 1:0);
3862 fprintf(f, "msg \"Target/Clipboard(int)\" %d\n", (m_doClipboard) ? 1:0);
3863 fprintf(f, "msg \"File/Action(QString)\" \"%s\"\n", (const char *)m_buttonAction[m_spaceTarget]->text());
3864 fprintf(f, "msg \"Update(int)\" 1\n");
3865 fprintf(f, "msg \"info(QString)\" \"All Done\"\n");
3866 fclose(f);
3867 chmod(sname, S_IXUSR | S_IXGRP | S_IXOTH);
3868 }
3869}
3870
3871void QTReaderApp::SaveConfig()
3872{
3873 m_nRegAction = cSetConfigName;
3874 regEdit->setText("");
3875 do_regedit();
3876}
3877
3878void QTReaderApp::do_saveconfig(const QString& _txt)
3879{
3880 SaveScript(Global::applicationFileName(APPDIR "/scripts", _txt));
3881}
3882#endif
3883
3884#ifdef _SCROLLPIPE
3885void QTReaderApp::setpipetarget()
3886{
3887 m_nRegAction = cSetPipeTarget;
3888 QString text = (reader->m_pipetarget.isEmpty()) ? QString("") : reader->m_pipetarget;
3889 regEdit->setText(text);
3890 do_regedit();
3891}
3892
3893void QTReaderApp::do_setpipetarget(const QString& _txt)
3894{
3895 reader->m_pipetarget = _txt;
3896}
3897
3898void QTReaderApp::setpause(bool sfs)
3899{
3900 reader->m_pauseAfterEachPara = sfs;
3901}
3902#endif
3903
3904void QTReaderApp::monospace(bool _b)
3905{
3906 reader->setmono(_b);
3907}
3908
3909bool QTReaderApp::readconfig(const QString& _txt, bool full=false)
3910{
3911#ifdef USEQPE
3912 QString configname;
3913 Config::Domain dom;
3914
3915 if (full)
3916 {
3917 configname = _txt;
3918 dom = Config::User;
3919 }
3920 else
3921 {
3922 configname = Global::applicationFileName(APPDIR "/configs", _txt);
3923 QFileInfo fm(configname);
3924 if ( !fm.exists() ) return false;
3925 dom = Config::File;
3926 }
3927
3928 Config config(configname, dom);
3929 config.setGroup( "View" );
3930
3931#else
3932 QFileInfo fi;
3933 if (full)
3934 {
3935 QDir d = QDir::home(); // "/"
3936 if ( !d.cd(_txt) )
3937 { // "/tmp"
3938 qWarning( "Cannot find the \"~/%s\" directory", (const char*)_txt );
3939 d = QDir::home();
3940 d.mkdir(_txt);
3941 d.cd(_txt);
3942 }
3943 fi.setFile(d, INIFILE);
3944 }
3945 else
3946 {
3947 QDir d = QDir::home(); // "/"
3948 if ( !d.cd(APPDIR) )
3949 { // "/tmp"
3950 qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
3951 d = QDir::home();
3952 d.mkdir(APPDIR);
3953 d.cd(APPDIR);
3954 }
3955 if ( !d.cd("configs") )
3956 { // "/tmp"
3957 qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" );
3958 d = QDir::home();
3959 d.mkdir("configs");
3960 d.cd("configs");
3961 }
3962 fi.setFile(d, _txt);
3963 }
3964#ifdef _WINDOWS
3965 struct stat fnstat;
3966 if (stat((const char *)reader->m_lastfile, &fnstat) == 0) return false; // get round fileinfo bug on windows
3967#else
3968 if (!fi.exists()) return false;
3969#endif
3970 Config config(fi.absFilePath());
3971#endif
3972 if (full)
3973 {
3974 config.setGroup("Toolbar");
3975 m_tbmovesave = m_tbmove = config.readBoolEntry("Movable", false);
3976 m_tbpolsave = m_tbpol = (ToolbarPolicy)config.readNumEntry("Policy", 1);
3977 m_tbposition = (ToolBarDock)config.readNumEntry("Position", 2);
3978 }
3979 config.setGroup( "View" );
3980 m_bFloatingDialog = config.readBoolEntry("FloatDialogs", false);
3981 reader->bstripcr = config.readBoolEntry( "StripCr", true );
3982 reader->bfulljust = config.readBoolEntry( "FullJust", false );
3983 reader->setextraspace(config.readNumEntry( "ExtraSpace", 0 ));
3984 reader->setlead(config.readNumEntry( "ExtraLead", 0 ));
3985 reader->btextfmt = config.readBoolEntry( "TextFmt", false );
3986 reader->bautofmt = config.readBoolEntry( "AutoFmt", true );
3987 reader->bstriphtml = config.readBoolEntry( "StripHtml", false );
3988 reader->bpeanut = config.readBoolEntry( "Peanut", false );
3989 reader->bdehyphen = config.readBoolEntry( "Dehyphen", false );
3990 reader->bdepluck = config.readBoolEntry( "Depluck", false );
3991 reader->bdejpluck = config.readBoolEntry( "Dejpluck", false );
3992 reader->bonespace = config.readBoolEntry( "OneSpace", false );
3993 reader->bunindent = config.readBoolEntry( "Unindent", false );
3994 reader->brepara = config.readBoolEntry( "Repara", false );
3995 reader->bdblspce = config.readBoolEntry( "DoubleSpace", false );
3996 reader->bindenter = config.readNumEntry( "Indent", 0 );
3997 reader->m_textsize = config.readNumEntry( "FontSize", 12 );
3998 reader->m_delay = config.readNumEntry( "ScrollDelay", 5184);
3999 if (full)
4000 {
4001 reader->m_lastfile = config.readEntry( "LastFile", QString::null );
4002 reader->m_lastposn = config.readNumEntry( "LastPosn", 0 );
4003 }
4004 reader->m_bpagemode = config.readBoolEntry( "PageMode", true );
4005 reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false);
4006 reader->m_swapmouse = config.readBoolEntry( "SwapMouse", false);
4007 reader->m_fontname = config.readEntry( "Fontname", "helvetica" );
4008 reader->m_encd = config.readNumEntry( "Encoding", 0 );
4009 reader->m_charpc = config.readNumEntry( "CharSpacing", 100 );
4010 reader->m_overlap = config.readNumEntry( "Overlap", 0 );
4011 reader->m_border = config.readNumEntry( "Margin", 6 );
4012#ifdef REPALM
4013 reader->brepalm = config.readBoolEntry( "Repalm", true );
4014#endif
4015 reader->bremap = config.readBoolEntry( "Remap", true );
4016 reader->bmakebold = config.readBoolEntry( "MakeBold", false );
4017 reader->setContinuous(config.readBoolEntry( "Continuous", true ));
4018 m_targetapp = config.readEntry( "TargetApp", QString::null );
4019 m_targetmsg = config.readEntry( "TargetMsg", QString::null );
4020#ifdef _SCROLLPIPE
4021 reader->m_pipetarget = config.readEntry( "PipeTarget", QString::null );
4022 reader->m_pauseAfterEachPara = config.readBoolEntry( "PauseAfterPara", true );
4023#endif
4024 m_twoTouch = config.readBoolEntry( "TwoTouch", false);
4025 m_doAnnotation = config.readBoolEntry( "Annotation", false);
4026 m_doDictionary = config.readBoolEntry( "Dictionary", false);
4027 m_doClipboard = config.readBoolEntry( "Clipboard", false);
4028 m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll);
4029 m_escapeTarget = (ActionTypes)config.readNumEntry("EscapeTarget", cesNone);
4030 m_returnTarget = (ActionTypes)config.readNumEntry("ReturnTarget", cesFullScreen);
4031 m_leftTarget = (ActionTypes)config.readNumEntry("LeftTarget", cesZoomOut);
4032 m_rightTarget = (ActionTypes)config.readNumEntry("RightTarget", cesZoomIn);
4033 m_upTarget = (ActionTypes)config.readNumEntry("UpTarget", cesPageUp);
4034 m_downTarget = (ActionTypes)config.readNumEntry("DownTarget", cesPageDown);
4035
4036 m_leftScroll = config.readBoolEntry("LeftScroll", false);
4037 m_rightScroll = config.readBoolEntry("RightScroll", false);
4038 m_upScroll = config.readBoolEntry("UpScroll", true);
4039 m_downScroll = config.readBoolEntry("DownScroll", true);
4040 m_propogatefontchange = config.readBoolEntry( "RequestorFontChange", false);
4041 reader->setBaseSize(config.readNumEntry( "Basesize", 10 ));
4042 reader->setTwoTouch(m_twoTouch);
4043
4044 m_touch_action->setOn(m_twoTouch);
4045 m_setmono_action->setOn(reader->m_bMonoSpaced);
4046 setfontHelper(reader->m_fontname);
4047 if (full)
4048 {
4049 addtoolbars(&config);
4050 }
4051 reader->setfilter(reader->getfilter());
4052 reader->refresh();
4053 return true;
4054}
4055
4056bool QTReaderApp::PopulateConfig(const char* tgtdir)
4057{
4058 bkmkselector->clear();
4059 bkmkselector->setText("Cancel");
4060#ifndef USEQPE
4061 int cnt = 0;
4062
4063 QDir d = QDir::home(); // "/"
4064 if ( !d.cd(APPDIR) ) { // "/tmp"
4065 qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
4066 d = QDir::home();
4067 d.mkdir(APPDIR);
4068 d.cd(APPDIR);
4069 }
4070 if ( !d.cd(tgtdir) ) { // "/tmp"
4071 qWarning( "Cannot find the \"~/" APPDIR "/%s\" directory", tgtdir );
4072 d = QDir::home();
4073 d.mkdir(tgtdir);
4074 d.cd(tgtdir);
4075 }
4076 d.setFilter( QDir::Files | QDir::NoSymLinks );
4077// d.setSorting( QDir::Size | QDir::Reversed );
4078
4079 const QFileInfoList *list = d.entryInfoList();
4080 QFileInfoListIterator it( *list ); // create list iterator
4081 QFileInfo *fi; // pointer for traversing
4082
4083 while ( (fi=it.current()) ) { // for each file...
4084
4085 bkmkselector->insertItem(fi->fileName());
4086 cnt++;
4087
4088 //qDebug( "%10li %s", fi->size(), fi->fileName().data() );
4089 ++it; // goto next list element
4090 }
4091
4092#else /* USEQPE */
4093 int cnt = 0;
4094 DIR *d;
4095 char* finaldir;
4096 finaldir = new char[strlen(APPDIR)+1+strlen(tgtdir)+1];
4097 strcpy(finaldir, APPDIR);
4098 strcat(finaldir, "/");
4099 strcat(finaldir, tgtdir);
4100 d = opendir((const char *)Global::applicationFileName(finaldir,""));
4101
4102 while(1)
4103 {
4104 struct dirent* de;
4105 struct stat buf;
4106 de = readdir(d);
4107 if (de == NULL) break;
4108
4109 if (lstat((const char *)Global::applicationFileName(finaldir,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode))
4110 {
4111 bkmkselector->insertItem(de->d_name);
4112 cnt++;
4113 }
4114 }
4115 delete [] finaldir;
4116 closedir(d);
4117#endif
4118 return (cnt > 0);
4119}
4120
4121void QTReaderApp::LoadConfig()
4122{
4123 if (PopulateConfig("configs"))
4124 {
4125 editorStack->raiseWidget( bkmkselector );
4126 hidetoolbars();
4127 m_nBkmkAction = cLdConfig;
4128 }
4129 else
4130 QMessageBox::information(this, PROGNAME, "No config files");
4131}
4132
4133void QTReaderApp::TidyConfig()
4134{
4135 if (PopulateConfig("configs"))
4136 {
4137 editorStack->raiseWidget( bkmkselector );
4138 hidetoolbars();
4139 m_nBkmkAction = cRmConfig;
4140 }
4141 else
4142 QMessageBox::information(this, PROGNAME, "No config files");
4143}
4144
4145void QTReaderApp::ExportLinks()
4146{
4147 if (PopulateConfig("urls"))
4148 {
4149 editorStack->raiseWidget( bkmkselector );
4150 hidetoolbars();
4151 m_nBkmkAction = cExportLinks;
4152 }
4153 else
4154 QMessageBox::information(this, PROGNAME, "No url files");
4155}
4156
4157void QTReaderApp::OnURLSelected(const QString& href)
4158{
4159 CURLDialog* urld = new CURLDialog(href, false, this);
4160 urld->clipboard(m_url_clipboard);
4161 urld->localfile(m_url_localfile);
4162 urld->globalfile(m_url_globalfile);
4163 if (urld->exec())
4164 {
4165 m_url_clipboard = urld->clipboard();
4166 m_url_localfile = urld->localfile();
4167 m_url_globalfile = urld->globalfile();
4168 if (m_url_clipboard)
4169 {
4170 QClipboard* cb = QApplication::clipboard();
4171 cb->setText(href);
4172 qDebug("<a href=\"%s\">%s</a>", (const char*)href, (const char*)href);
4173 }
4174 if (m_url_localfile)
4175 {
4176 writeUrl(reader->m_string, href);
4177 }
4178 if (m_url_globalfile)
4179 {
4180 writeUrl("GlobalURLFile", href);
4181 }
4182 }
4183 delete urld;
4184}
4185
4186void QTReaderApp::writeUrl(const QString& file, const QString& href)
4187{
4188 QString filename;
4189#ifdef USEQPE
4190 filename = Global::applicationFileName(APPDIR "/urls", file);
4191#else
4192 QFileInfo fi;
4193 QDir d = QDir::home(); // "/"
4194 if ( !d.cd(APPDIR) )
4195 { // "/tmp"
4196 qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
4197 d = QDir::home();
4198 d.mkdir(APPDIR);
4199 d.cd(APPDIR);
4200 }
4201 if ( !d.cd("urls") )
4202 { // "/tmp"
4203 qWarning( "Cannot find the \"~/" APPDIR "/urls\" directory" );
4204 d = QDir::home();
4205 d.cd(APPDIR);
4206 d.mkdir("urls");
4207 d.cd("urls");
4208 }
4209 fi.setFile(d, file);
4210 filename = fi.absFilePath();
4211#endif
4212 FILE* fout = fopen(filename, "a");
4213 if (fout != NULL)
4214 {
4215 fprintf(fout, "<p><a href=\"%s\">%s</a>\n", (const char*)href, (const char*)href);
4216 fclose(fout);
4217 }
4218 else
4219 {
4220 QMessageBox::warning(this, PROGNAME, "Problem with writing URL");
4221 }
4222}
diff --git a/noncore/apps/opie-reader/QTReaderApp.h b/noncore/apps/opie-reader/QTReaderApp.h
index cb33e4a..2765d47 100644
--- a/noncore/apps/opie-reader/QTReaderApp.h
+++ b/noncore/apps/opie-reader/QTReaderApp.h
@@ -1,291 +1,442 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved. 2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of Qt Palmtop Environment. 4** This file is part of Qt Palmtop Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20#ifndef __QTREADERAPP_H 20#ifndef __QTREADERAPP_H
21#define __QTREADERAPP_H 21#define __QTREADERAPP_H
22 22
23//#define _SCROLLPIPE
23//#define __ISEARCH 24//#define __ISEARCH
24 25
25#define MAX_ENCODING 6 26//#define MAX_ENCODING 6
26#define MAX_ACTIONS 4 27#define MAX_ACTIONS 5
27 28
29#include "useqpe.h"
30#include <sys/timeb.h>
28#include <qmainwindow.h> 31#include <qmainwindow.h>
29#include "CExpander.h" 32#include "CExpander.h"
33#include "CEncoding.h"
30#include <qlist.h> 34#include <qlist.h>
31#include <qpe/filemanager.h> 35//#include <qpe/filemanager.h>
32#include <qmap.h> 36#include <qmap.h>
33#include <qlineedit.h> 37#include <qlineedit.h>
34#include <qstack.h> 38#include <qstack.h>
35#include <qlistbox.h> 39#include <qlistbox.h>
36//#include "Queue.h" 40//#include "Queue.h"
37 41
38class QWidgetStack; 42class QWidgetStack;
39class QToolButton; 43class QToolButton;
40class QPopupMenu; 44class QPopupMenu;
41class QToolBar; 45class QToolBar;
42//class QPEToolBar; 46#ifdef USEQPE
47class QPEToolBar;
48class QPEMenuBar;
49#endif
43class CBkmkSelector; 50class CBkmkSelector;
44class QProgressBar; 51class QProgressBar;
45class QAction; 52class QAction;
46class CAnnoEdit; 53class CAnnoEdit;
47class QFloatBar; 54class QFloatBar;
48class CDrawBuffer; 55class CDrawBuffer;
49class QTReader; 56class QTReader;
50class QPixmap; 57class QImage;
58class Config;
51 59
52enum ActionTypes 60enum ActionTypes
53{ 61{
54 cesOpenFile = 0, 62 cesNone = 0,
63 cesOpenFile,
55 cesAutoScroll, 64 cesAutoScroll,
56 cesActionMark, 65 cesActionMark,
57 cesFullScreen 66 cesActionAnno,
67 cesFullScreen,
68 cesZoomIn,
69 cesZoomOut,
70 cesBack,
71 cesForward,
72 cesHome,
73 cesPageUp,
74 cesPageDown,
75 cesLineUp,
76 cesLineDown,
77 cesStartDoc,
78 cesEndDoc
79};
80/*
81*m_preferences_action, *m_close_action *m_info_action, *m_touch_action,
82*m_find_action, *m_jump_action, *m_setfont_action *m_goto_action,
83*m_delete_action; *m_autogen_action, *m_clear_action, *m_save_action;
84*m_tidy_action, *m_startBlock_action, *m_endBlock_action;
85*m_setenc_action, *m_setmono_action;
86*/
87enum ToolbarPolicy
88{
89 cesSingle = 0,
90 cesMenuTool,
91 cesMultiple
92};
93
94enum regedit_type
95{
96 cAutoGen,
97 cAddBkmk,
98 cJump,
99 cMonoSpace,
100 cSetTarget,
101#ifdef _SCROLLPIPE
102 cSetPipeTarget,
103#endif
104 cSetConfigName,
105 cMargin,
106 cExtraSpace,
107 cExtraLead
108};
109
110enum bkmk_action
111{
112 cOpenFile,
113 cGotoBkmk,
114 cDelBkmk,
115 cRmBkmkFile,
116 cLdConfig,
117 cRmConfig,
118 cExportLinks
119};
120
121enum fontselector_action
122{
123 cChooseFont,
124 cChooseEncoding
58}; 125};
59 126
60#ifdef __ISEARCH 127#ifdef __ISEARCH
61struct searchrecord 128struct searchrecord
62{ 129{
63 QString s; 130 QString s;
64 size_t pos; 131 size_t pos;
65 searchrecord(const QString& _s, size_t _pos) : s(_s), pos(_pos) {} 132 searchrecord(const QString& _s, size_t _pos) : s(_s), pos(_pos) {}
66}; 133};
67#endif 134#endif
68 135
69class infowin; 136class infowin;
70class GraphicWin; 137class GraphicWin;
71 138
72class QTReaderApp : public QMainWindow 139class QTReaderApp : public QMainWindow
73{ 140{
74 Q_OBJECT 141 Q_OBJECT
75 142
76 unsigned long m_savedpos; 143 unsigned long m_savedpos;
144 int m_debounce;
145 timeb m_lastkeytime;
77 bool m_annoIsEditing; 146 bool m_annoIsEditing;
147 bool m_propogatefontchange, m_bFloatingDialog;
148 bool m_url_clipboard, m_url_localfile, m_url_globalfile;
149 fontselector_action m_fontAction;
150 void doAction(ActionTypes a, QKeyEvent* e);
78 151
79 public: 152 public:
80 QTReaderApp( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); 153 QTReaderApp( QWidget *parent = 0, const char *name = 0, WFlags f = 0 );
81 ~QTReaderApp(); 154 ~QTReaderApp();
155
156 void handlekey(QKeyEvent* e);
157 void hideEvent(QHideEvent*)
158 {
159 suspend();
160 }
161
82 void suspend(); 162 void suspend();
83 void openFile( const QString & ); 163 void openFile( const QString & );
84 164
85 void setScrollState(bool _b); 165 void setScrollState(bool _b);
86 166
87 protected: 167 protected:
88 void setfontHelper(const QString& lcn, int size = 0); 168 void setfontHelper(const QString& lcn, int size = 0);
89 QAction* m_bkmkAvail, *m_actFullscreen; 169 QAction* m_bkmkAvail, *m_actFullscreen;
90 CAnnoEdit* m_annoWin; 170 CAnnoEdit* m_annoWin;
91 Bkmk* m_anno; 171 Bkmk* m_anno;
92// void resizeEvent(QResizeEvent* e); 172// void resizeEvent(QResizeEvent* e);
93 void keyPressEvent(QKeyEvent* e);
94 void closeEvent( QCloseEvent *e ); 173 void closeEvent( QCloseEvent *e );
95 void readbkmks(); 174 void readbkmks();
96 void do_mono(const QString&); 175 void do_mono(const QString&);
97 void do_jump(const QString&); 176 void do_jump(const QString&);
98 void do_overlap(const QString&);
99 void do_settarget(const QString&); 177 void do_settarget(const QString&);
100 int EncNameToInt(const QString&); 178#ifdef _SCROLLPIPE
179 //void do_setpipetarget(const QString&);
180#endif
181 void do_saveconfig(const QString&, bool);
182 bool readconfig(const QString&, bool);
183 bool PopulateConfig(const char*);
101 ActionTypes ActNameToInt(const QString&); 184 ActionTypes ActNameToInt(const QString&);
102 bool m_doAnnotation; 185 bool m_doAnnotation;
103 bool m_doDictionary; 186 bool m_doDictionary;
104 bool m_doClipboard; 187 bool m_doClipboard;
105 bool m_fullscreen; 188 bool m_fullscreen;
106 189 bool m_loadedconfig;
107 public: 190 public:
108 void saveprefs(); 191 void saveprefs();
192public slots:
193 void setDocument(const QString&);
109private slots: 194private slots:
195#ifdef _SCRIPT
196// void RunScript();
197#endif
198 void SaveConfig();
199 void LoadConfig();
200 void TidyConfig();
201 void ExportLinks();
110 void zoomin(); 202 void zoomin();
111 void zoomout(); 203 void zoomout();
204 void chooseencoding();
112 void setfullscreen(bool sfs); 205 void setfullscreen(bool sfs);
113 void setcontinuous(bool sfs); 206// void setcontinuous(bool sfs);
114 void setTwoTouch(bool _b); 207 void setTwoTouch(bool _b);
115 void restoreFocus(); 208 void restoreFocus();
116 void OnAnnotation(bool _b) 209 void OnAnnotation(bool _b)
117 { 210 {
118 m_doAnnotation = _b; 211 m_doAnnotation = _b;
119 } 212 }
120 void OnDictionary(bool _b) 213 void OnDictionary(bool _b)
121 { 214 {
122 m_doDictionary = _b; 215 m_doDictionary = _b;
123 } 216 }
124 void OnClipboard(bool _b) 217 void OnClipboard(bool _b)
125 { 218 {
126 m_doClipboard = _b; 219 m_doClipboard = _b;
127 } 220 }
128 void OnWordSelected(const QString&, size_t, const QString&); 221 void OnWordSelected(const QString&, size_t, const QString&);
129 void showgraphic(QPixmap&); 222 void OnURLSelected(const QString& href);
223 void showgraphic(QImage&);
130 void addAnno(const QString&, const QString&, size_t); 224 void addAnno(const QString&, const QString&, size_t);
131 void addAnno(const QString&, const QString&); 225 void addAnno(const QString&, const QString&);
132 void addanno(); 226 void addanno();
133 void showAnnotation(); 227 void showAnnotation();
228 void do_setencoding(int i);
134 void do_setfont(const QString&); 229 void do_setfont(const QString&);
135 void encodingSelected(QAction*);
136 void buttonActionSelected(QAction*); 230 void buttonActionSelected(QAction*);
137 void msgHandler(const QCString&, const QByteArray&); 231 //void msgHandler(const QCString&, const QByteArray&);
138 void monospace(bool); 232 void monospace(bool);
139 void jump(); 233 void jump();
140 void setoverlap();
141 void settarget(); 234 void settarget();
142 void setspacing(); 235#ifdef _SCROLLPIPE
236 //void setpipetarget();
237 //void setpause(bool);
238#endif
239 //void setspacing();
143 void setfont(); 240 void setfont();
144 void clearBkmkList(); 241 void clearBkmkList();
145 void listBkmkFiles(); 242 void listBkmkFiles();
146 void editMark(); 243 void editMark();
147 void autoScroll(bool); 244 void autoScroll(bool);
148 void addbkmk(); 245 void addbkmk();
149 void savebkmks(); 246 void savebkmks();
150 //void importFiles(); 247 //void importFiles();
248 void showprefs();
249 void showtoolbarprefs();
151 void infoClose(); 250 void infoClose();
152 // void oldFile(); 251 // void oldFile();
153 void showinfo(); 252 void showinfo();
154 void setDocument(const QString&);
155 253
156 void indentplus(); 254// void indentplus();
157 void indentminus(); 255// void indentminus();
158 256
159 void fileOpen(); 257 void fileOpen();
160 void fileClose(); 258 void fileClose();
161 259
162 void editCopy(); 260 void editCopy();
163 void editFind(); 261 void editFind();
164 262
263 void gotoStart();
264 void gotoEnd();
265
165 void pageup(); 266 void pageup();
166 void pagedn(); 267 void pagedn();
167 268
168 void findNext(); 269 void findNext();
169 void findClose(); 270 void findClose();
170 271
171 void regClose(); 272 void regClose();
172 273
173#ifdef __ISEARCH 274#ifdef __ISEARCH
174// void search( const QString& ); 275// void search( const QString& );
175#else 276#else
176 void search(); 277 void search();
177#endif 278#endif
178 279
179 void showEditTools(); 280 void showEditTools();
180 281
181 void stripcr(bool); 282// void stripcr(bool);
182 void onespace(bool); 283// void setfulljust(bool);
284// void onespace(bool);
183#ifdef REPALM 285#ifdef REPALM
184// void repalm(bool); 286// void repalm(bool);
185#endif 287#endif
186 void peanut(bool _b); 288// void peanut(bool _b);
187 void remap(bool); 289// void remap(bool);
188 void embolden(bool); 290// void embolden(bool);
189 void autofmt(bool); 291// void autofmt(bool);
190 void textfmt(bool); 292// void textfmt(bool);
191 void striphtml(bool); 293// void striphtml(bool);
192 void dehyphen(bool); 294// void dehyphen(bool);
193 void unindent(bool); 295// void depluck(bool);
194 void repara(bool); 296// void dejpluck(bool);
195 void dblspce(bool); 297// void unindent(bool);
298// void repara(bool);
299// void dblspce(bool);
196 void pagemode(bool); 300 void pagemode(bool);
197 void navkeys(bool);
198 // void gotobkmk(const QString& bm); 301 // void gotobkmk(const QString& bm);
199 void gotobkmk(int); 302 void gotobkmk(int);
200 void cancelbkmk(); 303 void cancelbkmk();
201 void do_gotomark(); 304 void do_gotomark();
202 void do_delmark(); 305 void do_delmark();
203 void do_autogen(); 306 void do_autogen();
204 void do_regaction(); 307 void do_regaction();
205 void OnRedraw(); 308 void OnRedraw();
206 void OnActionPressed();
207 309
208 private: 310 private:
311 void writeUrl(const QString& file, const QString& href);
312 QAction *m_preferences_action, *m_open_action, *m_close_action;
313 QAction *m_info_action, *m_touch_action, *m_find_action, *m_start_action;
314 QAction *m_end_action, *m_jump_action, *m_pageline_action;
315 QAction *m_pageup_action, *m_pagedn_action, *m_back_action;
316 QAction *m_home_action, *m_forward_action, *m_zoomin_action;
317 QAction *m_zoomout_action, *m_setfont_action, *m_mark_action;
318 QAction *m_annotate_action, *m_goto_action, *m_delete_action;
319 QAction *m_autogen_action, *m_clear_action, *m_save_action;
320 QAction *m_tidy_action, *m_startBlock_action, *m_endBlock_action;
321 QAction *m_setenc_action, *m_setmono_action, *m_saveconfig_action;
322 QAction *m_loadconfig_action, *m_toolbarprefs_action, *m_tidyconfig_action;
323 QAction *m_exportlinks_action;
324 void addtoolbars(Config* config);
325 ToolbarPolicy m_tbpol, m_tbpolsave;
326 ToolBarDock m_tbposition;
327 bool m_tbmove, m_tbmovesave;
328 QToolBar* filebar();
329 QToolBar* viewbar();
330 QToolBar* navbar();
331 QToolBar* markbar();
332 void hidetoolbars();
333 void addfilebar(Config* _config, const QString& key, QAction* a);
334 void addviewbar(Config* _config, const QString& key, QAction* a);
335 void addnavbar(Config* _config, const QString& key, QAction* a);
336 void addmarkbar(Config* _config, const QString& key, QAction* a);
337 bool checkbar(Config* _config, const QString& key);
338#ifdef _SCRIPT
339 void SaveScript(const char* sname);
340#endif
209/* 341/*
210 void setstate(unsigned char* _sd, unsigned short _sdlen); 342 void setstate(unsigned char* _sd, unsigned short _sdlen);
211 void getstate(unsigned char*& data, unsigned short& len); 343 void getstate(unsigned char*& data, unsigned short& len);
212*/ 344*/
213 void fileOpen2(); 345 void fileOpen2();
214 void readfilelist(); 346 void readfilelist();
215 void savefilelist(); 347 void savefilelist();
216 void updatefileinfo(); 348 void updatefileinfo();
217 bool openfrombkmk(Bkmk*); 349 bool openfrombkmk(Bkmk*);
218 QString m_targetapp, m_targetmsg; 350 QString m_targetapp, m_targetmsg;
219 void listbkmk(CList<Bkmk>*, const QString& _lab = QString::null); 351 bool listbkmk(CList<Bkmk>*, const QString& _lab = QString::null);
220 QString usefilebrowser(); 352 QString usefilebrowser();
221 void do_regedit(); 353 void do_regedit();
222 void colorChanged( const QColor &c ); 354 void colorChanged( const QColor &c );
223 void clear(); 355 void clear();
224 void updateCaption(); 356 void updateCaption();
225 void do_autogen(const QString&); 357 void do_autogen(const QString&);
226 void do_addbkmk(const QString&); 358 void do_addbkmk(const QString&);
227 bool findNextBookmark(size_t start); 359 bool findNextBookmark(size_t start);
228 360
229 private: 361 private:
230 362
231 QAction* m_scrollButton; 363 QAction* m_scrollButton;
232 364
233 QAction* m_EncodingAction[MAX_ENCODING];
234
235 QAction* m_buttonAction[MAX_ACTIONS]; 365 QAction* m_buttonAction[MAX_ACTIONS];
236 366
237 CBkmkSelector* bkmkselector; 367 CBkmkSelector* bkmkselector;
238 368
239 ActionTypes m_spaceTarget; 369 ActionTypes m_spaceTarget, m_escapeTarget, m_returnTarget, m_leftTarget, m_rightTarget,
370 m_upTarget, m_downTarget;
371 bool m_leftScroll, m_rightScroll, m_upScroll, m_downScroll;
372 bool m_bcloseDisabled, m_disableesckey;
240 size_t searchStart; 373 size_t searchStart;
241#ifdef __ISEARCH 374#ifdef __ISEARCH
242 QStack<searchrecord>* searchStack; 375 QStack<searchrecord>* searchStack;
243 bool dosearch(size_t start, CDrawBuffer& test, const QString& arg); 376 bool dosearch(size_t start, CDrawBuffer& test, const QString& arg);
244#else 377#else
245 bool dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg); 378 bool dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg);
246#endif 379#endif
247 QWidgetStack *editorStack; 380 QWidgetStack *editorStack;
248 QTReader* reader; 381 QTReader* reader;
249 QComboBox* m_fontSelector; 382 QComboBox* m_fontSelector;
250// QPEToolBar /* *menu,*/ *editBar; 383// QPEToolBar /* *menu,*/ *fileBar;
251 QToolBar /* *menu,*/ *editBar; 384 QToolBar *menubar, *fileBar, *navBar, *viewBar, *markBar;
385#ifdef USEQPE
386 QPEMenuBar *mb;
387#else
388 QMenuBar *mb;
389#endif
252 QFloatBar *searchBar, *regBar/*, *m_fontBar*/; 390 QFloatBar *searchBar, *regBar/*, *m_fontBar*/;
253 QToolBar /* *searchBar, *regBar,*/ *m_fontBar; 391 QToolBar /* *searchBar, *regBar,*/ *m_fontBar;
254 QLineEdit *searchEdit, *regEdit; 392 QLineEdit *searchEdit, *regEdit;
255 bool searchVisible; 393 bool searchVisible;
256 bool regVisible; 394 bool regVisible;
257 bool m_fontVisible, m_twoTouch; 395 bool m_fontVisible, m_twoTouch;
258 bool bFromDocView; 396 bool bFromDocView;
259 static unsigned long m_uid; 397 static unsigned long m_uid;
260 long unsigned get_unique_id() { return m_uid++; } 398 long unsigned get_unique_id() { return m_uid++; }
261 /* 399 /*
262 void resizeEvent( QResizeEvent * r) 400 void resizeEvent( QResizeEvent * r)
263 { 401 {
264 qDebug("resize:(%u,%u)", r->oldSize().width(), r->oldSize().height()); 402// qDebug("resize:(%u,%u)", r->oldSize().width(), r->oldSize().height());
265 qDebug("resize:(%u,%u)", r->size().width(), r->size().height()); 403// qDebug("resize:(%u,%u)", r->size().width(), r->size().height());
266 // bgroup->move( width()-bgroup->width(), 0 ); 404 // bgroup->move( width()-bgroup->width(), 0 );
267 } 405 }
268 */ 406 */
269 CList<Bkmk>* pBkmklist; 407 CList<Bkmk>* pBkmklist;
270 CList<Bkmk>* pOpenlist; 408 CList<Bkmk>* pOpenlist;
271 infowin* m_infoWin; 409 infowin* m_infoWin;
272 GraphicWin* m_graphicwin; 410 GraphicWin* m_graphicwin;
273 QProgressBar* pbar; 411 QProgressBar* pbar;
274 bool m_fBkmksChanged; 412 bool m_fBkmksChanged;
275 int m_nRegAction; 413// int m_nRegAction;
414 regedit_type m_nRegAction;
415 bkmk_action m_nBkmkAction;
276 QString m_autogenstr; 416 QString m_autogenstr;
277 bool m_dontSave; 417 bool m_dontSave;
278}; 418};
279 419
280const int cAutoGen = 0; 420//const int cAutoGen = 0;
281const int cAddBkmk = 1; 421//const int cAddBkmk = 1;
282const int cDelBkmk = 2; 422//const int cDelBkmk = 2;
283const int cGotoBkmk = 3; 423//const int cGotoBkmk = 3;
284const int cRmBkmkFile = 4; 424//const int cRmBkmkFile = 4;
285const int cJump = 5; 425//const int cJump = 5;
286const int cMonoSpace = 6; 426//const int cMonoSpace = 6;
287const int cOverlap = 7; 427//const int cOverlap = 7;
288const int cSetTarget = 8; 428//const int cSetTarget = 8;
289const int cOpenFile = 9; 429//const int cOpenFile = 9;
430//const int cSetPipeTarget = 10;
431//const int cSetConfigName = 11;
432//const int cMargin = 12;
433//const int cExtraSpace = 14;
434//const int cExtraLead = 15;
435//const int cGfxSize = 16;
436//const int cChooseFont = 2;
437//const int cChooseEncoding = 1;
290 438
291#endif 439#endif
440
441
442
diff --git a/noncore/apps/opie-reader/StateData.h b/noncore/apps/opie-reader/StateData.h
index 0cb0f07..e3be778 100644
--- a/noncore/apps/opie-reader/StateData.h
+++ b/noncore/apps/opie-reader/StateData.h
@@ -1,32 +1,33 @@
1#ifndef __STATEDATA_H 1#ifndef __STATEDATA_H
2#define __STATEDATA_H 2#define __STATEDATA_H
3 3
4struct statedata 4struct statedata
5{ 5{
6 bool bstripcr/*:1*/; 6 bool bstripcr/*:1*/;
7 bool btextfmt/*:1*/; 7 bool btextfmt/*:1*/;
8 bool bautofmt/*:1*/; 8 bool bautofmt/*:1*/;
9 bool bstriphtml/*:1*/; 9 bool bstriphtml/*:1*/;
10 bool bpeanut/*:1*/; 10 bool bpeanut/*:1*/;
11 bool bdehyphen/*:1*/; 11 bool bdehyphen/*:1*/;
12 bool bdepluck/*:1*/;
12 bool bonespace/*:1*/; 13 bool bonespace/*:1*/;
13 bool bunindent/*:1*/; 14 bool bunindent/*:1*/;
14 bool brepara/*:1*/; 15 bool brepara/*:1*/;
15 bool bdblspce/*:1*/; 16 bool bdblspce/*:1*/;
16 bool m_bpagemode/*:1*/; 17 bool m_bpagemode/*:1*/;
17 bool m_navkeys/*:1*/; 18 bool m_navkeys/*:1*/;
18 bool m_bMonoSpaced/*:1*/; 19 bool m_bMonoSpaced/*:1*/;
19 bool bremap/*:1*/; 20 bool bremap/*:1*/;
20 bool bmakebold/*:1*/; 21 bool bmakebold/*:1*/;
21 bool Continuous/*:1*/; 22 bool Continuous/*:1*/;
22#ifdef REPALM 23#ifdef REPALM
23 bool brepalm/*:1*/; 24 bool brepalm/*:1*/;
24#endif 25#endif
25 int bindenter; 26 int bindenter;
26 int m_textsize; 27 int m_textsize;
27 int m_encd; 28 int m_encd;
28 int m_charpc; 29 int m_charpc;
29 char m_fontname[1]; 30 char m_fontname[1];
30}; 31};
31 32
32#endif 33#endif
diff --git a/noncore/apps/opie-reader/StyleConsts.cpp b/noncore/apps/opie-reader/StyleConsts.cpp
index e111dbd..9fb56b7 100644
--- a/noncore/apps/opie-reader/StyleConsts.cpp
+++ b/noncore/apps/opie-reader/StyleConsts.cpp
@@ -1,99 +1,94 @@
1 1
2#include <qpixmap.h> 2#include <qimage.h>
3#include "StyleConsts.h" 3#include "StyleConsts.h"
4 4
5GraphicLink::~GraphicLink() { delete graphic; } 5GraphicLink::~GraphicLink() { delete graphic; }
6 6
7pmstore::~pmstore() 7pmstore::~pmstore()
8{ 8{
9// qDebug("Deleting image"); 9//// qDebug("Deleting image");
10 delete graphic; 10 delete graphic;
11} 11}
12 12
13CStyle::~CStyle() 13CStyle::~CStyle()
14{ 14{
15 if (graphic != NULL) 15 if (graphic != NULL)
16 { 16 {
17 if (--(graphic->count) == 0) 17 if (--(graphic->count) == 0)
18 { 18 {
19 delete graphic; 19 delete graphic;
20 } 20 }
21 } 21 }
22} 22}
23 23
24CStyle::CStyle(CStyle& rhs) : graphic(NULL)
25{
26 *this = rhs;
27}
28
29CStyle::CStyle(const CStyle& rhs) : graphic(NULL) 24CStyle::CStyle(const CStyle& rhs) : graphic(NULL)
30{ 25{
31 *this = rhs; 26 *this = rhs;
32} 27}
33 28
34CStyle& CStyle::operator=(const CStyle& rhs) 29CStyle& CStyle::operator=(const CStyle& rhs)
35{ 30{
36 if (rhs.graphic != NULL) 31 if (rhs.graphic != NULL)
37 { 32 {
38 (rhs.graphic->count)++; 33 (rhs.graphic->count)++;
39 if (graphic != NULL) 34 if (graphic != NULL)
40 { 35 {
41 if (--(graphic->count) == 0) 36 if (--(graphic->count) == 0)
42 { 37 {
43 delete graphic; 38 delete graphic;
44 } 39 }
45 } 40 }
46 graphic = rhs.graphic; 41 graphic = rhs.graphic;
47 } 42 }
48 else 43 else
49 { 44 {
50 if (graphic != NULL) 45 if (graphic != NULL)
51 { 46 {
52 if (--(graphic->count) == 0) 47 if (--(graphic->count) == 0)
53 { 48 {
54 delete graphic; 49 delete graphic;
55 } 50 }
56 graphic = NULL; 51 graphic = NULL;
57 } 52 }
58 } 53 }
59 sty = rhs.sty; 54 sty = rhs.sty;
60 return *this; 55 return *this;
61} 56}
62 57
63void CStyle::clearPicture() 58void CStyle::clearPicture()
64{ 59{
65 if (graphic != NULL) 60 if (graphic != NULL)
66 { 61 {
67 if (--(graphic->count) == 0) 62 if (--(graphic->count) == 0)
68 { 63 {
69 delete graphic; 64 delete graphic;
70 } 65 }
71 graphic = NULL; 66 graphic = NULL;
72 } 67 }
73} 68}
74 69
75void CStyle::unset() 70void CStyle::unset()
76{ 71{
77 sty.unset(); 72 sty.unset();
78 if (graphic != NULL) 73 if (graphic != NULL)
79 { 74 {
80 if (--(graphic->count) == 0) 75 if (--(graphic->count) == 0)
81 { 76 {
82 delete graphic; 77 delete graphic;
83 } 78 }
84 graphic = NULL; 79 graphic = NULL;
85 } 80 }
86} 81}
87 82
88void CStyle::setPicture(QPixmap* _g, bool il, unsigned long tgt) 83void CStyle::setPicture(bool canScale, QImage* _g, bool il, unsigned long tgt)
89{ 84{
90 if (graphic != NULL) 85 if (graphic != NULL)
91 { 86 {
92 if (--(graphic->count) == 0) 87 if (--(graphic->count) == 0)
93 { 88 {
94 delete graphic; 89 delete graphic;
95 } 90 }
96 graphic = NULL; 91 graphic = NULL;
97 } 92 }
98 if (_g != NULL) graphic = new pmstore(_g, il, tgt); 93 if (_g != NULL) graphic = new pmstore(canScale, _g, il, tgt);
99} 94}
diff --git a/noncore/apps/opie-reader/StyleConsts.h b/noncore/apps/opie-reader/StyleConsts.h
index 9701d19..29d7501 100644
--- a/noncore/apps/opie-reader/StyleConsts.h
+++ b/noncore/apps/opie-reader/StyleConsts.h
@@ -1,178 +1,190 @@
1#ifndef __STYLECONSTS_H 1#ifndef __STYLECONSTS_H
2#define __STYLECONSTS_H 2#define __STYLECONSTS_H
3 3
4typedef unsigned short StyleType; 4typedef unsigned short StyleType;
5 5
6#include <stdlib.h> 6#ifdef _WINDOWS
7#include <string.h> 7#include <string.h>
8#endif
9#include <stdlib.h>
8#include <qglobal.h> 10#include <qglobal.h>
9class QPixmap; 11class QImage;
10 12
11struct GraphicLink 13struct GraphicLink
12{ 14{
13 QPixmap* graphic; 15 QImage* graphic;
14 bool isLink; 16 bool isLink;
15 unsigned long link; 17 unsigned long link;
16 GraphicLink(QPixmap* p, bool isLnk, unsigned long tgt) : 18 GraphicLink(QImage* p, bool isLnk, unsigned long tgt) :
17 graphic(p), isLink(isLnk), link(tgt) {} 19 graphic(p), isLink(isLnk), link(tgt) {}
18 ~GraphicLink(); 20 ~GraphicLink();
19}; 21};
20 22
21struct pmstore 23struct pmstore
22{ 24{
23 unsigned int count; 25 unsigned int count;
26 bool m_isScaleable;
24 GraphicLink* graphic; 27 GraphicLink* graphic;
25 pmstore(QPixmap* p, bool isLnk, unsigned long tgt) : count(1) 28 pmstore(bool _canScale, QImage* p, bool isLnk, unsigned long tgt) : count(1), m_isScaleable(_canScale)
26 { 29 {
27 graphic = new GraphicLink(p, isLnk, tgt); 30 graphic = new GraphicLink(p, isLnk, tgt);
28 } 31 }
29 ~pmstore(); 32 ~pmstore();
30}; 33};
31 34
32enum EalignmentType 35enum EalignmentType
33{ 36{
34 m_AlignLeft, 37 m_AlignLeft,
35 m_AlignRight, 38 m_AlignRight,
36 m_AlignCentre, 39 m_AlignCentre,
37 m_AlignJustify 40 m_AlignJustify
38}; 41};
39 42
40class CBasicStyle 43class CBasicStyle
41{ 44{
42 friend class CStyle; 45 friend class CStyle;
43 bool m_bold, 46 bool m_bold,
44 m_italic; 47 m_italic;
45 int m_fontsize; 48 int m_fontsize;
46 EalignmentType m_align; 49 EalignmentType m_align;
47 unsigned char red, green, blue; 50 unsigned char red, green, blue;
48 unsigned long data; 51 unsigned long data;
49 bool isLink; 52 bool isLink;
50 bool m_underline; 53 bool m_underline;
51 bool m_strikethru; 54 bool m_strikethru;
52 bool m_monospaced; 55 bool m_monospaced;
53 unsigned char m_leftmargin, m_rightmargin; 56 unsigned char m_leftmargin, m_rightmargin;
57 signed char m_extraspace;
58 signed char m_voffset;
54 CBasicStyle() 59 CBasicStyle()
55 { 60 {
56 unset(); 61 unset();
57 } 62 }
58 bool operator!=(const CBasicStyle& rhs) 63 bool operator!=(const CBasicStyle& rhs)
59 { 64 {
60 return (memcmp(this, &rhs, sizeof(CBasicStyle)) != 0); 65 return (memcmp(this, &rhs, sizeof(CBasicStyle)) != 0);
61 } 66 }
62 void unset() 67 void unset()
63 { 68 {
64 m_bold = false; 69 m_bold = false;
65 m_italic = false; 70 m_italic = false;
66 m_fontsize = 0; 71 m_fontsize = 0;
67 m_align = m_AlignLeft; 72 m_align = m_AlignLeft;
68 red = green = blue = 0; 73 red = green = blue = 0;
69 data = 0; 74 data = 0;
70 isLink = false; 75 isLink = false;
71 m_underline = false; 76 m_underline = false;
72 m_strikethru = false; 77 m_strikethru = false;
73 m_leftmargin = 0; 78 m_leftmargin = 0;
74 m_rightmargin = 0; 79 m_rightmargin = 0;
75 m_monospaced = false; 80 m_monospaced = false;
81 m_extraspace = 0;
82 m_voffset = 0;
76 } 83 }
77}; 84};
78 85
79class CStyle 86class CStyle
80{ 87{
81 CBasicStyle sty; 88 CBasicStyle sty;
82 pmstore* graphic; 89 pmstore* graphic;
83 public: 90 public:
91 signed char getVOffset() { return sty.m_voffset; }
92 void setVOffset(signed char sp) { sty.m_voffset = sp; }
93 signed char getExtraSpace() { return sty.m_extraspace; }
94 void setExtraSpace(signed char sp) { sty.m_extraspace = sp; }
84 bool getPictureLink() 95 bool getPictureLink()
85 { 96 {
86 return (graphic != NULL && graphic->graphic->isLink); 97 return (graphic != NULL && graphic->graphic->isLink);
87 } 98 }
88 unsigned long getPictureLinkData() 99 unsigned long getPictureLinkData()
89 { 100 {
90 return graphic->graphic->link; 101 return graphic->graphic->link;
91 } 102 }
92 void setLeftMargin(unsigned char m) { sty.m_leftmargin = m; } 103 void setLeftMargin(unsigned char m) { sty.m_leftmargin = m; }
93 unsigned char getLeftMargin() { return sty.m_leftmargin; } 104 unsigned char getLeftMargin() { return sty.m_leftmargin; }
94 void setRightMargin(unsigned char m) { sty.m_rightmargin = m; } 105 void setRightMargin(unsigned char m) { sty.m_rightmargin = m; }
95 unsigned char getRightMargin() { return sty.m_rightmargin; } 106 unsigned char getRightMargin() { return sty.m_rightmargin; }
96 unsigned char Red() { return sty.red; } 107 unsigned char Red() { return sty.red; }
97 unsigned char Green() { return sty.green; } 108 unsigned char Green() { return sty.green; }
98 unsigned char Blue() { return sty.blue; } 109 unsigned char Blue() { return sty.blue; }
99 void setColour(unsigned char r, unsigned char g, unsigned char b) 110 void setColour(unsigned char r, unsigned char g, unsigned char b)
100 { 111 {
101 sty.red = r; 112 sty.red = r;
102 sty.green = g; 113 sty.green = g;
103 sty.blue = b; 114 sty.blue = b;
104 } 115 }
105 CStyle() : graphic(NULL) {} 116 CStyle() : graphic(NULL) {}
106 ~CStyle(); 117 ~CStyle();
107 CStyle(CStyle&); 118// CStyle(CStyle&);
108 CStyle(const CStyle&); 119 CStyle(const CStyle&);
109 CStyle& operator=(const CStyle&); 120 CStyle& operator=(const CStyle&);
110 void unset(); 121 void unset();
111 bool isPicture() { return (graphic != NULL); } 122 bool isPicture() { return (graphic != NULL); }
123 bool canScale() { return graphic->m_isScaleable; }
112 void clearPicture(); 124 void clearPicture();
113 void setPicture(QPixmap* _g, bool il=false, unsigned long tgt=0); 125 void setPicture(bool canScale, QImage* _g, bool il=false, unsigned long tgt=0);
114 QPixmap* getPicture() 126 QImage* getPicture()
115 { 127 {
116 QPixmap* pm = ((graphic != NULL) ? graphic->graphic->graphic : NULL); 128 QImage* pm = ((graphic != NULL) ? graphic->graphic->graphic : NULL);
117 return pm; 129 return pm;
118 } 130 }
119 void setUnderline() { sty.m_underline = true; } 131 void setUnderline() { sty.m_underline = true; }
120 void unsetUnderline() { sty.m_underline = false; } 132 void unsetUnderline() { sty.m_underline = false; }
121 bool isUnderline() { return sty.m_underline; } 133 bool isUnderline() { return sty.m_underline; }
122 void setStrikethru() { sty.m_strikethru = true; } 134 void setStrikethru() { sty.m_strikethru = true; }
123 void unsetStrikethru() { sty.m_strikethru = false; } 135 void unsetStrikethru() { sty.m_strikethru = false; }
124 bool isStrikethru() { return sty.m_strikethru; } 136 bool isStrikethru() { return sty.m_strikethru; }
125 void setBold() { sty.m_bold = true; } 137 void setBold() { sty.m_bold = true; }
126 void unsetBold() { sty.m_bold = false; } 138 void unsetBold() { sty.m_bold = false; }
127 bool isBold() { return sty.m_bold; } 139 bool isBold() { return sty.m_bold; }
128 void setItalic() { sty.m_italic = true; } 140 void setItalic() { sty.m_italic = true; }
129 void unsetItalic() { sty.m_italic = false; } 141 void unsetItalic() { sty.m_italic = false; }
130 bool isItalic() { return sty.m_italic; } 142 bool isItalic() { return sty.m_italic; }
131 void setMono() { sty.m_monospaced = true; } 143 void setMono() { sty.m_monospaced = true; }
132 void unsetMono() { sty.m_monospaced = false; } 144 void unsetMono() { sty.m_monospaced = false; }
133 bool isMono() { return sty.m_monospaced; } 145 bool isMono() { return sty.m_monospaced; }
134 146
135 void setLeftJustify() 147 void setLeftJustify()
136 { 148 {
137 sty.m_align = m_AlignLeft; 149 sty.m_align = m_AlignLeft;
138 } 150 }
139 void setRightJustify() 151 void setRightJustify()
140 { 152 {
141 sty.m_align = m_AlignRight; 153 sty.m_align = m_AlignRight;
142 } 154 }
143 void setCentreJustify() 155 void setCentreJustify()
144 { 156 {
145 sty.m_align = m_AlignCentre; 157 sty.m_align = m_AlignCentre;
146 } 158 }
147 void setFullJustify() 159 void setFullJustify()
148 { 160 {
149 sty.m_align = m_AlignJustify; 161 sty.m_align = m_AlignJustify;
150 } 162 }
151 StyleType getJustify() 163 StyleType getJustify()
152 { 164 {
153 return sty.m_align; 165 return sty.m_align;
154 } 166 }
155 167
156 void setFontSize(int _fs) 168 void setFontSize(int _fs)
157 { 169 {
158 sty.m_fontsize = _fs; 170 sty.m_fontsize = _fs;
159 } 171 }
160 int getFontSize() 172 int getFontSize() const
161 { 173 {
162 return sty.m_fontsize; 174 return sty.m_fontsize;
163 } 175 }
164 bool operator!=(const CStyle& rhs) 176 bool operator!=(const CStyle& rhs)
165 { 177 {
166 return 178 return
167 ( 179 (
168 (sty != rhs.sty) || 180 (sty != rhs.sty) ||
169 (graphic != rhs.graphic) 181 (graphic != rhs.graphic)
170 ); 182 );
171 } 183 }
172 void setLink(bool _l) { sty.isLink = _l; } 184 void setLink(bool _l) { sty.isLink = _l; }
173 bool getLink() { return sty.isLink; } 185 bool getLink() { return sty.isLink; }
174 void setData(unsigned long _d) { sty.data = _d; } 186 void setData(unsigned long _d) { sty.data = _d; }
175 unsigned long getData() { return sty.data; } 187 unsigned long getData() { return sty.data; }
176}; 188};
177 189
178#endif 190#endif
diff --git a/noncore/apps/opie-reader/ZText.h b/noncore/apps/opie-reader/ZText.h
index 22d3733..ab81a5e 100644
--- a/noncore/apps/opie-reader/ZText.h
+++ b/noncore/apps/opie-reader/ZText.h
@@ -1,68 +1,85 @@
1#ifndef __Text_h 1#ifndef __Text_h
2#define __Text_h 2#define __Text_h
3#include <stdio.h> 3#include <stdio.h>
4#include "zlib/zlib.h" 4#include <zlib.h>
5#include <sys/stat.h> 5#include <sys/stat.h>
6 6#include "useqpe.h"
7#include "CExpander.h" 7#include "CExpander.h"
8 8
9class Text: public CExpander { 9class Text: public CExpander {
10 gzFile file; 10 gzFile file;
11 unsigned long fsize; 11 unsigned long fsize;
12public: 12public:
13 virtual void suspend() 13 void suspend()
14 { 14 {
15#ifdef USEQPE
15 bSuspended = true; 16 bSuspended = true;
16 suspos = gztell(file); 17 suspos = gztell(file);
17 gzclose(file); 18 gzclose(file);
18 file = NULL; 19 file = NULL;
19 sustime = time(NULL); 20 sustime = time(NULL);
21#endif
20 } 22 }
21 virtual void unsuspend() 23 void unsuspend()
22 { 24 {
25#ifdef USEQPE
23 if (bSuspended) 26 if (bSuspended)
24 { 27 {
25 bSuspended = false; 28 bSuspended = false;
26 int delay = time(NULL) - sustime; 29 int delay = time(NULL) - sustime;
27 if (delay < 10) sleep(10-delay); 30 if (delay < 10) sleep(10-delay);
28 file = gzopen(fname, "rb"); 31 file = gzopen(fname, "rb");
29 for (int i = 0; file == NULL && i < 5; i++) 32 for (int i = 0; file == NULL && i < 5; i++)
30 { 33 {
31 sleep(5); 34 sleep(5);
32 file = gzopen(fname, "rb"); 35 file = gzopen(fname, "rb");
33 } 36 }
34 if (file == NULL) 37 if (file == NULL)
35 { 38 {
36 QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file"); 39 QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file");
37 exit(0); 40 exit(0);
38 } 41 }
39 suspos = gzseek(file, suspos, SEEK_SET); 42 suspos = gzseek(file, suspos, SEEK_SET);
40 } 43 }
44#endif
41 } 45 }
42 Text() : file(NULL) {}; 46 Text() : file(NULL) {};
43 virtual ~Text() 47 virtual ~Text()
44 { 48 {
45 if (file != NULL) gzclose(file); 49 if (file != NULL) gzclose(file);
46 } 50 }
47 virtual int OpenFile(const char *src) 51 int OpenFile(const char *src)
48 { 52 {
49 if (file != NULL) gzclose(file); 53 if (file != NULL) gzclose(file);
50 struct stat _stat; 54 struct stat _stat;
51 stat(src,&_stat); 55 stat(src,&_stat);
52 fsize = _stat.st_size; 56 fsize = _stat.st_size;
53 return ((file = gzopen(src,"rb")) == NULL); 57 return ((file = gzopen(src,"rb")) == NULL);
54 } 58 }
55 virtual int getch() { return gzgetc(file); } 59 int getch() { return gzgetc(file); }
56 virtual unsigned int locate() { return gztell(file); } 60 unsigned int locate() { return gztell(file); }
57 virtual void locate(unsigned int n) { gzseek(file,n,SEEK_SET); } 61 void locate(unsigned int n) { gzseek(file,n,SEEK_SET); }
58 virtual bool hasrandomaccess() { return true; } 62 bool hasrandomaccess() { return true; }
59 virtual void sizes(unsigned long& _file, unsigned long& _text) 63 void sizes(unsigned long& _file, unsigned long& _text)
60 { 64 {
61 _text = _file = fsize; 65 _text = _file = fsize;
66 FILE* f = fopen(fname, "rb");
67 if (f != NULL)
68 {
69 unsigned char mn[2];
70 fread(mn, 1, 2, f);
71 if ((mn[0] == 31) && (mn[1] == 139))
72 {
73 int tmp = sizeof(_text);
74 fseek(f,-tmp,SEEK_END);
75 fread(&_text, sizeof(_text), 1, f);
76 }
77 fclose(f);
78 }
62 } 79 }
63 virtual MarkupType PreferredMarkup() 80 MarkupType PreferredMarkup()
64 { 81 {
65 return cTEXT; 82 return cTEXT;
66 } 83 }
67}; 84};
68#endif 85#endif
diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp
index 21c970b..9cd371d 100644
--- a/noncore/apps/opie-reader/fileBrowser.cpp
+++ b/noncore/apps/opie-reader/fileBrowser.cpp
@@ -1,207 +1,266 @@
1/**************************************************************************** 1/****************************************************************************
2 2
3Derived from a file browser which was 3Derived from a file browser which was
4 4
5** copyright 2001 ljp ljp@llornkcor.com 5** copyright 2001 ljp ljp@llornkcor.com
6 6
7Extensive modification by Tim Wentford to allow it to work in rotated mode 7Extensive modification by Tim Wentford to allow it to work in rotated mode
8 8
9****************************************************************************/ 9****************************************************************************/
10#include "fileBrowser.h" 10#include "fileBrowser.h"
11 11
12#include "QtrListView.h" 12#include "QtrListView.h"
13#include <qlineedit.h>
13#include <qpushbutton.h> 14#include <qpushbutton.h>
14#include <qfile.h> 15#include <qfile.h>
15#include <qmessagebox.h> 16#include <qmessagebox.h>
17#ifndef _WINDOWS
16#include <unistd.h> 18#include <unistd.h>
19#endif
17#include <qlayout.h> 20#include <qlayout.h>
21#ifdef _WINDOWS
22#include <direct.h>
23#endif
18 24
19fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath ) 25#include "opie.h"
20 : QDialog( parent, name, modal, fl ), filterspec(QDir::All) 26
27fileBrowser::fileBrowser( bool allownew, QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath )
28 : QDialog( parent, name, true,
29 fl/* | WStyle_Customize | WStyle_Tool*/),
30 filterspec(QDir::All)
21{ 31{
22// showMaximized(); 32// showMaximized();
23 if ( !name ) 33 if ( !name )
24 setName( "fileBrowser" ); 34 setName( "fileBrowser" );
25 if (parent != NULL) resize( parent->width(), parent->height() ); 35/*
36 if (parent != NULL)
37 {
38#ifdef OPIE
39 move(0,0);
40 resize( parent->width(), parent->height() );
41#else
42 setGeometry(parent->x(), parent->y(), parent->width(), parent->height() );
43#endif
44 }
45*/
46// showFullScreen();
26 setCaption(tr( "Browse for file" ) ); 47 setCaption(tr( "Browse for file" ) );
27 filterStr=filter; 48 filterStr=filter;
28 49
29 buttonOk = new QPushButton( this, "buttonOk" ); 50 buttonOk = new QPushButton( this, "buttonOk" );
30 buttonOk->setFixedSize( 25, 25 ); 51 buttonOk->setFixedSize( 25, 25 );
31 buttonOk->setAutoDefault( false ); 52 buttonOk->setAutoDefault( false );
32 buttonOk->setText( tr( "/" ) ); 53 buttonOk->setText( tr( "/" ) );
33 54
34 buttonShowHidden = new QPushButton( this, "buttonShowHidden" ); 55 buttonShowHidden = new QPushButton( this, "buttonShowHidden" );
35// buttonShowHidden->setFixedSize( 50, 25 ); 56// buttonShowHidden->setFixedSize( 50, 25 );
36 buttonShowHidden->setText( tr( "Hidden" ) ); 57 buttonShowHidden->setText( tr( "Hidden" ) );
37 buttonShowHidden->setAutoDefault( false ); 58 buttonShowHidden->setAutoDefault( false );
38 buttonShowHidden->setToggleButton( true ); 59 buttonShowHidden->setToggleButton( true );
39 buttonShowHidden->setOn( false ); 60 buttonShowHidden->setOn( false );
40 61
41 dirLabel = new QLabel(this, "DirLabel"); 62 dirLabel = new QLabel(this, "DirLabel");
42 dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak); 63 dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak);
43 dirLabel->setText(currentDir.canonicalPath()); 64 dirLabel->setText(currentDir.canonicalPath());
44 65
45 ListView = new QtrListView( this, "ListView" ); 66 ListView = new QtrListView( this, "ListView" );
46 ListView->addColumn( tr( "Name" ) ); 67 ListView->addColumn( tr( "Name" ) );
47 ListView->setSorting( 2, FALSE); 68 ListView->setSorting( 2, FALSE);
48 ListView->addColumn( tr( "Size" ) ); 69 ListView->addColumn( tr( "Size" ) );
49 ListView->setSelectionMode(QListView::Single); 70 ListView->setSelectionMode(QListView::Single);
50 ListView->setAllColumnsShowFocus( TRUE ); 71 ListView->setAllColumnsShowFocus( TRUE );
51 ListView->setColumnWidthMode(0, QListView::Manual); 72 ListView->setColumnWidthMode(0, QListView::Manual);
52 ListView->setColumnWidthMode(1, QListView::Manual); 73 ListView->setColumnWidthMode(1, QListView::Manual);
53 74
54 // signals and slots connections 75 // signals and slots connections
55 connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) ); 76 connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) );
56 connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) ); 77 connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) );
57 connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) ); 78 connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) );
58 connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); 79 connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
59 connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); 80 connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
60 connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); 81 connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) );
61 connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) ); 82 connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) );
62 83
63 QVBoxLayout* grid = new QVBoxLayout(this); 84 QVBoxLayout* grid = new QVBoxLayout(this);
64 QHBoxLayout* hgrid = new QHBoxLayout(grid); 85 QHBoxLayout* hgrid = new QHBoxLayout(grid);
65 hgrid->addWidget(dirLabel,1); 86 hgrid->addWidget(dirLabel,1);
66 hgrid->addWidget(buttonShowHidden); 87 hgrid->addWidget(buttonShowHidden);
67 hgrid->addWidget(buttonOk); 88 hgrid->addWidget(buttonOk);
68 grid->addWidget(ListView,1); 89 grid->addWidget(ListView,1);
90 if (allownew)
91 {
92 m_filename = new QLineEdit(this);
93 grid->addWidget(m_filename);
94 connect( m_filename, SIGNAL( returnPressed() ), this, SLOT( onReturn() ));
95 }
96 else
97 {
98 m_filename = NULL;
99 }
69 100
70 if (QFileInfo(iPath).exists()) 101 if (QFileInfo(iPath).exists())
71 { 102 {
72 currentDir.setPath(iPath); 103 currentDir.setPath(iPath);
104#ifdef _WINDOWS
105 _chdir(iPath.latin1());
106#else
73 chdir(iPath.latin1()); 107 chdir(iPath.latin1());
108#endif
74 } 109 }
75 else 110 else
76 { 111 {
77 currentDir.setPath(QDir::currentDirPath()); 112 currentDir.setPath(QDir::currentDirPath());
78 chdir(QDir::currentDirPath().latin1()); 113 chdir(QDir::currentDirPath().latin1());
79 } 114 }
80 115
81 populateList(); 116 populateList();
117
118 if (modal) showMaximized();
82} 119}
83 120
84void fileBrowser::resizeEvent(QResizeEvent* e) 121void fileBrowser::resizeEvent(QResizeEvent* e)
85{ 122{
86 ListView->setColumnWidth(1,(ListView->width())/4); 123 ListView->setColumnWidth(1,(ListView->width())/4);
87 ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1)); 124 ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1));
88} 125}
89 126
90fileBrowser::~fileBrowser() 127fileBrowser::~fileBrowser()
91{ 128{
92} 129}
93 130
94 131
95void fileBrowser::populateList() 132void fileBrowser::populateList()
96{ 133{
97 ListView->clear(); 134 ListView->clear();
98//qDebug(currentDir.canonicalPath()); 135////qDebug(currentDir.canonicalPath());
99// currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks ); 136// currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks );
100 currentDir.setFilter( filterspec ); 137 currentDir.setFilter( filterspec );
101 currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); 138 currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst);
102 currentDir.setMatchAllDirs(TRUE); 139 currentDir.setMatchAllDirs(TRUE);
103 140
104 currentDir.setNameFilter(filterStr); 141 currentDir.setNameFilter(filterStr);
105// currentDir.setNameFilter("*.txt;*.etx"); 142// currentDir.setNameFilter("*.txt;*.etx");
106 QString fileL, fileS; 143 QString fileL, fileS;
107 const QFileInfoList *list = currentDir.entryInfoList(); 144 const QFileInfoList *list = currentDir.entryInfoList();
108 QFileInfoListIterator it(*list); 145 QFileInfoListIterator it(*list);
109 QFileInfo *fi; 146 QFileInfo *fi;
110 while ( (fi=it.current()) ) 147 while ( (fi=it.current()) )
111 { 148 {
112 if (fi->fileName() != ".") 149 if (fi->fileName() != ".")
113 { 150 {
114 fileS.sprintf( "%10li", fi->size() ); 151 fileS.sprintf( "%10li", fi->size() );
115 fileL.sprintf( "%s",fi->fileName().data() ); 152 fileL.sprintf( "%s",fi->fileName().data() );
116 if( fi->isDir() ) 153 if( fi->isDir() )
117 { 154 {
118 fileL+="/"; 155 fileL+="/";
119 } 156 }
120 else 157 else
121 { 158 {
122// qDebug("Not a dir: "+currentDir.canonicalPath()+fileL); 159//// qDebug("Not a dir: "+currentDir.canonicalPath()+fileL);
123 } 160 }
124 new QListViewItem( ListView,fileL,fileS ); 161 new QListViewItem( ListView,fileL,fileS );
125 } 162 }
126 ++it; 163 ++it;
127 } 164 }
128 ListView->setSorting( 2, FALSE); 165 ListView->setSorting( 2, FALSE);
129 dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath()); 166 dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath());
130 ListView->setFocus(); 167 ListView->setFocus();
131} 168}
132 169
133void fileBrowser::upDir() 170void fileBrowser::upDir()
134{ 171{
135// qDebug(currentDir.canonicalPath()); 172//// qDebug(currentDir.canonicalPath());
136} 173}
137 174
138void fileBrowser::listClicked(QListViewItem *selectedItem) 175void fileBrowser::listClicked(QListViewItem *selectedItem)
139{ 176{
140 if (selectedItem == NULL) return; 177 if (selectedItem == NULL) return;
141 QString strItem=selectedItem->text(0); 178 QString strItem=selectedItem->text(0);
142 179
143// qDebug("%s", (const char*)strItem); 180//// qDebug("%s", (const char*)strItem);
144 181
145 182
146 QString strSize=selectedItem->text(1); 183 QString strSize=selectedItem->text(1);
147 184
148 strSize.stripWhiteSpace(); 185 strSize.stripWhiteSpace();
149 186
150 bool ok; 187 bool ok;
151 188
152 QFileInfo fi(strItem); 189 QFileInfo fi(strItem);
153 while (fi.isSymLink()) fi.setFile(fi.readLink()); 190 while (fi.isSymLink()) fi.setFile(fi.readLink());
154 if (fi.isDir()) 191 if (fi.isDir())
155 { 192 {
156 strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem); 193 strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem);
157 194
158 if(QDir(strItem).exists()) 195 if(QDir(strItem).exists())
159 { 196 {
160 currentDir.cd(strItem, TRUE); 197 currentDir.cd(strItem, TRUE);
161 populateList(); 198 populateList();
162 } 199 }
163 } else 200 } else
201 {
202 QListViewItem *selectedItem = ListView->selectedItem();
203 if (selectedItem == NULL)
204 {
205 filename = "";
206 }
207 else
208 {
209 filename = QDir::cleanDirPath(currentDir.canonicalPath()+"/"+selectedItem->text(0));
210 }
164 OnOK(); 211 OnOK();
212 }
165 chdir(strItem.latin1()); 213 chdir(strItem.latin1());
166// 214//
167 215
168} 216}
169 217
170// you may want to switch these 2 functions. I like single clicks 218// you may want to switch these 2 functions. I like single clicks
171void fileBrowser::listDoubleClicked(QListViewItem *selectedItem) 219void fileBrowser::listDoubleClicked(QListViewItem *selectedItem)
172{ 220{
173} 221}
174 222
175void fileBrowser::OnOK() { 223QString fileBrowser::getCurrentFile()
224{
225 return filename;
226}
176 227
177 QListViewItemIterator it1( ListView); 228void fileBrowser::OnOK()
178 for ( ; it1.current(); ++it1 ) { 229{
179 if ( it1.current()->isSelected() ) {
180 selectedFileName=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+it1.current()->text(0));
181 // qDebug("selected filename is "+selectedFileName);
182 fileList.append( selectedFileName );
183 }
184 }
185 accept(); 230 accept();
186} 231}
187 232
188void fileBrowser::OnRoot() 233void fileBrowser::OnRoot()
189{ 234{
190 currentDir.cd("/", TRUE); 235 currentDir.cd("/", TRUE);
191 populateList(); 236 populateList();
192 chdir("/"); 237 chdir("/");
193} 238}
194 239
195void fileBrowser::OnCancel() 240void fileBrowser::OnCancel()
196{ 241{
197 reject(); 242 reject();
198} 243}
199 244
200void fileBrowser::setHidden(bool _hidden) 245void fileBrowser::setHidden(bool _hidden)
201{ 246{
202 if (_hidden) 247 if (_hidden)
203 filterspec = QDir::All | QDir::Hidden; 248 filterspec = QDir::All | QDir::Hidden;
204 else 249 else
205 filterspec = QDir::All; 250 filterspec = QDir::All;
206 populateList(); 251 populateList();
207} 252}
253
254void fileBrowser::onReturn()
255{
256 QListViewItem *selectedItem = ListView->selectedItem();
257 if (selectedItem == NULL)
258 {
259 filename = m_filename->text();
260 }
261 else
262 {
263 filename = QDir::cleanDirPath(currentDir.canonicalPath()+"/"+m_filename->text());
264 }
265 OnOK();
266}
diff --git a/noncore/apps/opie-reader/fileBrowser.h b/noncore/apps/opie-reader/fileBrowser.h
index 5521383..a5274f8 100644
--- a/noncore/apps/opie-reader/fileBrowser.h
+++ b/noncore/apps/opie-reader/fileBrowser.h
@@ -1,74 +1,77 @@
1/* 1/*
2Derived from the file browser published by ljp@llornkcor.com but extensively 2Derived from the file browser published by ljp@llornkcor.com but extensively
3modified to work in rotated views on the Zaurus 3modified to work in rotated views on the Zaurus
4*/ 4*/
5 5
6/**************************************************************************** 6/****************************************************************************
7** Form interface generated from reading ui file 'fileBrowzer.ui' 7** Form interface generated from reading ui file 'fileBrowzer.ui'
8** 8**
9** Created: Fri Dec 14 08:16:02 2001 9** Created: Fri Dec 14 08:16:02 2001
10** by: The User Interface Compiler (uic) 10** by: The User Interface Compiler (uic)
11** 11**
12** WARNING! All changes made in this file will be lost! 12** WARNING! All changes made in this file will be lost!
13blah,blah,blah 13blah,blah,blah
14****************************************************************************/ 14****************************************************************************/
15#ifndef FILEBROWSER_H 15#ifndef FILEBROWSER_H
16#define FILEBROWSER_H 16#define FILEBROWSER_H
17 17
18//#include <qvariant.h> 18//#include <qvariant.h>
19#include <qdialog.h> 19#include <qdialog.h>
20#include <qfile.h> 20#include <qfile.h>
21#include <qdir.h> 21#include <qdir.h>
22#include <qstringlist.h> 22#include <qstringlist.h>
23#include <qlabel.h> 23#include <qlabel.h>
24#include <qstring.h> 24#include <qstring.h>
25 25
26class QVBoxLayout; 26class QVBoxLayout;
27class QHBoxLayout; 27class QHBoxLayout;
28class QGridLayout; 28class QGridLayout;
29class QtrListView; 29class QtrListView;
30class QListViewItem; 30class QListViewItem;
31class QPushButton; 31class QPushButton;
32class QLineEdit;
32 33
33class fileBrowser : public QDialog 34class fileBrowser : public QDialog
34{ 35{
35 Q_OBJECT 36 Q_OBJECT
36 37
37public: 38public:
38 void populateList(); 39 void populateList();
39 fileBrowser( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ,const QString filter=0, const QString iPath=0); 40 fileBrowser( bool allownew, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ,const QString filter=0, const QString iPath=0);
40 ~fileBrowser(); 41 ~fileBrowser();
41 42
42 QPushButton* buttonOk; 43 QPushButton* buttonOk;
43 QPushButton* buttonShowHidden; 44 QPushButton* buttonShowHidden;
44 QtrListView* ListView; 45 QtrListView* ListView;
45 QPushButton* buttonCancel; 46 QPushButton* buttonCancel;
46 QLabel *dirLabel; 47 QLabel *dirLabel;
47 QString selectedFileName, filterStr; 48 QString selectedFileName, filterStr;
48 QDir currentDir; 49 QDir currentDir;
49 QFile file; 50 QFile file;
50 QStringList fileList; 51 QString getCurrentFile();
52 QLineEdit* m_filename;
51 int filterspec; 53 int filterspec;
52// QDir::FilterSpec filterspec; 54// QDir::FilterSpec filterspec;
53 55
54//QListViewItem * item; 56//QListViewItem * item;
55public slots: 57public slots:
56 58
57private: 59private:
58 60 QString filename;
59private slots: 61private slots:
60 void upDir(); 62 void upDir();
61 void listDoubleClicked(QListViewItem *); 63 void listDoubleClicked(QListViewItem *);
62 void listClicked(QListViewItem *); 64 void listClicked(QListViewItem *);
63 void OnRoot(); 65 void OnRoot();
64 void OnCancel(); 66 void OnCancel();
65 void setHidden(bool); 67 void setHidden(bool);
68 void onReturn();
66 69
67protected slots: 70protected slots:
68 71
69protected: 72protected:
70 void OnOK(); 73 void OnOK();
71 virtual void resizeEvent(QResizeEvent* e); 74 virtual void resizeEvent(QResizeEvent* e);
72}; 75};
73 76
74#endif // FILEBROWSER_H 77#endif // FILEBROWSER_H
diff --git a/noncore/apps/opie-reader/infowin.cpp b/noncore/apps/opie-reader/infowin.cpp
index 459b648..c52a1f0 100644
--- a/noncore/apps/opie-reader/infowin.cpp
+++ b/noncore/apps/opie-reader/infowin.cpp
@@ -1,43 +1,43 @@
1#include "name.h"
2#include "infowin.h" 1#include "infowin.h"
3#include "version.h" 2#include "version.h"
4#include <stdio.h> 3#include <stdio.h>
4#include "names.h"
5 5
6infowin::infowin( QWidget *parent, const char *name, WFlags f ) : 6infowin::infowin( QWidget *parent, const char *name, WFlags f) :
7 QWidget(parent, name, f) 7 QWidget(parent, name, f)
8{ 8{
9 grid = new QGridLayout(this, 6, 2); 9 grid = new QGridLayout(this, 6, 2);
10 QLabel* l; 10 QLabel* l;
11 l = new QLabel("Compressed file size", this); 11 l = new QLabel("Compressed file size", this);
12 grid->addWidget(l, 0, 0); 12 grid->addWidget(l, 0, 0);
13 fileSize = new QLabel("0", this); 13 fileSize = new QLabel("0", this);
14 fileSize->setAlignment( AlignVCenter | AlignRight ); 14 fileSize->setAlignment( AlignVCenter | AlignRight );
15 grid->addWidget(fileSize, 0, 1); 15 grid->addWidget(fileSize, 0, 1);
16 l = new QLabel("Original text size", this); 16 l = new QLabel("Original text size", this);
17 grid->addWidget(l, 1, 0); 17 grid->addWidget(l, 1, 0);
18 textSize = new QLabel("0", this); 18 textSize = new QLabel("0", this);
19 textSize->setAlignment( AlignVCenter | AlignRight ); 19 textSize->setAlignment( AlignVCenter | AlignRight );
20 grid->addWidget(textSize, 1, 1); 20 grid->addWidget(textSize, 1, 1);
21 l = new QLabel("Compression Ratio", this); 21 l = new QLabel("Compression Ratio", this);
22 grid->addWidget(l, 2, 0); 22 grid->addWidget(l, 2, 0);
23 ratio = new QLabel("0", this); 23 ratio = new QLabel("0", this);
24 grid->addWidget(ratio, 2, 1); 24 grid->addWidget(ratio, 2, 1);
25 ratio->setAlignment( AlignVCenter | AlignRight ); 25 ratio->setAlignment( AlignVCenter | AlignRight );
26 l = new QLabel("Current location", this); 26 l = new QLabel("Current location", this);
27 grid->addWidget(l, 3, 0); 27 grid->addWidget(l, 3, 0);
28 location = new QLabel("0", this); 28 location = new QLabel("0", this);
29 location->setAlignment( AlignVCenter | AlignRight ); 29 location->setAlignment( AlignVCenter | AlignRight );
30 grid->addWidget(location, 3, 1); 30 grid->addWidget(location, 3, 1);
31 l = new QLabel("Per centage read", this); 31 l = new QLabel("Per centage read", this);
32 grid->addWidget(l, 4, 0); 32 grid->addWidget(l, 4, 0);
33 read = new QLabel("0", this); 33 read = new QLabel("0", this);
34 read->setAlignment( AlignVCenter | AlignRight ); 34 read->setAlignment( AlignVCenter | AlignRight );
35 grid->addWidget(read, 4, 1); 35 grid->addWidget(read, 4, 1);
36 char vstr[128]; 36 char vstr[128];
37 sprintf(vstr, PROGNAME " 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);
38 l = new QLabel(vstr, this); 38 l = new QLabel(vstr, this);
39 grid->addWidget(l, 5, 0); 39 grid->addWidget(l, 5, 0);
40 QPushButton* exitbutton = new QPushButton("Cancel", this); 40 QPushButton* exitbutton = new QPushButton("Cancel", this);
41 connect( exitbutton, SIGNAL( released() ), this, SLOT( infoClose() ) ); 41 connect( exitbutton, SIGNAL( released() ), this, SLOT( infoClose() ) );
42 grid->addWidget(exitbutton, 5, 1); 42 grid->addWidget(exitbutton, 5, 1);
43} 43}
diff --git a/noncore/apps/opie-reader/main.cpp b/noncore/apps/opie-reader/main.cpp
index 2440037..3e1f5e7 100644
--- a/noncore/apps/opie-reader/main.cpp
+++ b/noncore/apps/opie-reader/main.cpp
@@ -1,34 +1,50 @@
1#include "useqpe.h"
2#ifdef USEQPE
1#include <qpe/qpeapplication.h> 3#include <qpe/qpeapplication.h>
4#else
5#include <qapplication.h>
6#endif
2#include "QTReaderApp.h" 7#include "QTReaderApp.h"
3 8
4#include "signal.h" 9#include "signal.h"
5#include "stdio.h" 10#include "stdio.h"
6#include "time.h" 11#include "time.h"
7 12
13
14#ifdef USEQPE
8QTReaderApp* app = NULL; 15QTReaderApp* app = NULL;
9 16
10void handler(int signum) 17void handler(int signum)
11{ 18{
12 if (app != NULL) 19 if (app != NULL)
13 { 20 {
14 app->suspend(); 21 app->suspend();
15 app->saveprefs(); 22 app->saveprefs();
16 } 23 }
17 signal(signum, handler); 24 signal(signum, handler);
18} 25}
26#endif
19 27
20int main( int argc, char ** argv ) 28int main( int argc, char ** argv )
21{ 29{
22 signal(SIGCONT, handler);
23 30
31#ifdef USEQPE
32 signal(SIGCONT, handler);
24 QPEApplication a( argc, argv ); 33 QPEApplication a( argc, argv );
25
26 QTReaderApp m; 34 QTReaderApp m;
27
28 a.showMainDocumentWidget( &m ); 35 a.showMainDocumentWidget( &m );
29
30 app = &m; 36 app = &m;
37#else
38 QApplication a( argc, argv );
39 QTReaderApp m;
40 a.setMainWidget( &m );
41 if (argc > 1)
42 {
43 m.setDocument(argv[1]);
44 }
45#endif
46
31 47
32 return a.exec(); 48 return a.exec();
33} 49}
34 50
diff --git a/noncore/apps/opie-reader/opie-reader.pro b/noncore/apps/opie-reader/opie-reader.pro
index b8915b3..871fa45 100644
--- a/noncore/apps/opie-reader/opie-reader.pro
+++ b/noncore/apps/opie-reader/opie-reader.pro
@@ -1,94 +1,112 @@
1 TEMPLATE= app 1 TEMPLATE= app
2 CONFIG = qt warn_on release 2 CONFIG = qt warn_on release
3 HEADERS = Aportis.h \ 3 HEADERS = Aportis.h \
4 Bkmks.h \ 4 Bkmks.h \
5 BuffDoc.h \ 5 BuffDoc.h \
6 CAnnoEdit.h \ 6 CAnnoEdit.h \
7 CBuffer.h \ 7 CBuffer.h \
8 CDrawBuffer.h \ 8 CDrawBuffer.h \
9 CEncoding.h \ 9 CEncoding.h \
10 CEncoding_tables.h \
10 CExpander.h \ 11 CExpander.h \
11 CFilter.h \ 12 CFilter.h \
13 CloseDialog.h \
12 Filedata.h \ 14 Filedata.h \
15 FixedFont.h \
13 FontControl.h \ 16 FontControl.h \
14 GraphicWin.h \ 17 GraphicWin.h \
15 Markups.h \ 18 Markups.h \
16 Navigation.h \ 19 Navigation.h \
17 Palm2QImage.h \ 20 Palm2QImage.h \
21 Prefs.h \
18 QFloatBar.h \ 22 QFloatBar.h \
19 QTReader.h \ 23 QTReader.h \
20 QTReaderApp.h \ 24 QTReaderApp.h \
21 QtrListView.h \ 25 QtrListView.h \
22 Queue.h \ 26 Queue.h \
23 StateData.h \ 27 StateData.h \
24 StyleConsts.h \ 28 StyleConsts.h \
29 ToolbarPrefs.h \
30 URLDialog.h \
25 ZText.h \ 31 ZText.h \
26 arith.h \ 32 arith.h \
27 cbkmkselector.h \ 33 cbkmkselector.h \
28 config.h \ 34 config.h \
29 fileBrowser.h \ 35 fileBrowser.h \
30 infowin.h \ 36 infowin.h \
37 linktype.h \
31 my_list.h \ 38 my_list.h \
32 name.h \ 39 name.h \
40 names.h \
33 opie.h \ 41 opie.h \
34 pdb.h \ 42 pdb.h \
35 plucker.h \ 43 plucker.h \
44 plucker_base.h \
36 ppm.h \ 45 ppm.h \
37 ppm_expander.h \ 46 ppm_expander.h \
38 ustring.h \ 47 ustring.h \
48 usenef.h \
49 useqpe.h \
39 utypes.h \ 50 utypes.h \
40 version.h \ 51 version.h \
41 ztxt.h 52 ztxt.h
42 53
43 SOURCES = Aportis.cpp \ 54 SOURCES = Aportis.cpp \
44 Bkmks.cpp \ 55 Bkmks.cpp \
45 BuffDoc.cpp \ 56 BuffDoc.cpp \
46 CBuffer.cpp \ 57 CBuffer.cpp \
47 CDrawBuffer.cpp \ 58 CDrawBuffer.cpp \
48 CEncoding.cpp \ 59 CEncoding.cpp \
60 CEncoding_tables.cpp \
49 CFilter.cpp \ 61 CFilter.cpp \
62 CloseDialog.cpp \
50 FontControl.cpp \ 63 FontControl.cpp \
51 Navigation.cpp \ 64 Navigation.cpp \
52 Palm2QImage.cpp \ 65 Palm2QImage.cpp \
66 Prefs.cpp \
53 QTReader.cpp \ 67 QTReader.cpp \
54 QTReaderApp.cpp \ 68 QTReaderApp.cpp \
55 QtrListView.cpp \ 69 QtrListView.cpp \
56 StyleConsts.cpp \ 70 StyleConsts.cpp \
71 ToolbarPrefs.cpp \
72 URLDialog.cpp \
57 arith_d.cpp \ 73 arith_d.cpp \
58 fileBrowser.cpp \ 74 fileBrowser.cpp \
59 infowin.cpp \ 75 infowin.cpp \
60 main.cpp \ 76 main.cpp \
61 pdb.cpp \ 77 pdb.cpp \
62 plucker.cpp \ 78 plucker.cpp \
79 plucker_base.cpp \
63 ppm.cpp \ 80 ppm.cpp \
64 ppm_expander.cpp \ 81 ppm_expander.cpp \
82 version.cpp \
65 ztxt.cpp 83 ztxt.cpp
66 84
67 INTERFACES= 85 INTERFACES=
68 DESTDIR = $(OPIEDIR)/bin 86 DESTDIR = $(OPIEDIR)/bin
69 INCLUDEPATH+= $(OPIEDIR)/include 87 INCLUDEPATH+= $(OPIEDIR)/include
70 DEPENDPATH+= $(OPIEDIR)/include 88 DEPENDPATH+= $(OPIEDIR)/include
71 TARGET = reader 89 TARGET = reader
72 LIBS += -lqpe 90 LIBS += -lqpe
73 91
74 92
75TRANSLATIONS = ../../../i18n/de/reader.ts \ 93TRANSLATIONS = ../../../i18n/de/reader.ts \
76 ../../../i18n/nl/reader.ts \ 94 ../../../i18n/nl/reader.ts \
77 ../../../i18n/da/reader.ts \ 95 ../../../i18n/da/reader.ts \
78 ../../../i18n/xx/reader.ts \ 96 ../../../i18n/xx/reader.ts \
79 ../../../i18n/en/reader.ts \ 97 ../../../i18n/en/reader.ts \
80 ../../../i18n/es/reader.ts \ 98 ../../../i18n/es/reader.ts \
81 ../../../i18n/fr/reader.ts \ 99 ../../../i18n/fr/reader.ts \
82 ../../../i18n/hu/reader.ts \ 100 ../../../i18n/hu/reader.ts \
83 ../../../i18n/ja/reader.ts \ 101 ../../../i18n/ja/reader.ts \
84 ../../../i18n/ko/reader.ts \ 102 ../../../i18n/ko/reader.ts \
85 ../../../i18n/no/reader.ts \ 103 ../../../i18n/no/reader.ts \
86 ../../../i18n/pl/reader.ts \ 104 ../../../i18n/pl/reader.ts \
87 ../../../i18n/pt/reader.ts \ 105 ../../../i18n/pt/reader.ts \
88 ../../../i18n/pt_BR/reader.ts \ 106 ../../../i18n/pt_BR/reader.ts \
89 ../../../i18n/sl/reader.ts \ 107 ../../../i18n/sl/reader.ts \
90 ../../../i18n/zh_CN/reader.ts \ 108 ../../../i18n/zh_CN/reader.ts \
91 ../../../i18n/zh_TW/reader.ts 109 ../../../i18n/zh_TW/reader.ts
92 110
93 111
94include ( $(OPIEDIR)/include.pro ) 112include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/apps/opie-reader/pdb.cpp b/noncore/apps/opie-reader/pdb.cpp
index 3054424..dca67ff 100644
--- a/noncore/apps/opie-reader/pdb.cpp
+++ b/noncore/apps/opie-reader/pdb.cpp
@@ -1,63 +1,60 @@
1#include "pdb.h" 1#include "pdb.h"
2#include <sys/types.h> 2#ifdef _WINDOWS
3#include <sys/stat.h> 3#include <winsock2.h>
4#include <unistd.h> 4#endif
5 5
6size_t Cpdb::recordpos(int n) 6size_t Cpdb::recordpos(int n)
7{ 7{
8 UInt16 mxn = ntohs(head.recordList.numRecords); 8 UInt16 mxn = ntohs(head.recordList.numRecords);
9 if (n >= mxn) 9 if (n >= mxn)
10 { 10 {
11 return file_length; 11 return file_length;
12 } 12 }
13 else 13 else
14 { 14 {
15 size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16); 15 size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16);
16 dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n; 16 dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n;
17 fseek(fin, dataoffset, SEEK_SET); 17 fseek(fin, dataoffset, SEEK_SET);
18 RecordListType hdr; 18 RecordListType hdr;
19 fread(&hdr, 1, sizeof(hdr), fin); 19 fread(&hdr, 1, sizeof(hdr), fin);
20 return ntohl(hdr.nextRecordListID); 20 return ntohl(hdr.nextRecordListID);
21 } 21 }
22 22
23} 23}
24 24
25size_t Cpdb::recordlength(int n) 25size_t Cpdb::recordlength(int n)
26{ 26{
27 return recordpos(n+1)-recordpos(n); 27 return recordpos(n+1)-recordpos(n);
28} 28}
29 29
30void Cpdb::gotorecordnumber(int n) 30void Cpdb::gotorecordnumber(int n)
31{ 31{
32 fseek(fin, recordpos(n), SEEK_SET); 32 fseek(fin, recordpos(n), SEEK_SET);
33} 33}
34 34
35bool Cpdb::openfile(const char *src) 35bool Cpdb::openfile(const char *src)
36{ 36{
37 37
38 // printf("In openfile\n"); 38 // printf("In openfile\n");
39 int ret = 0; 39 int ret = 0;
40 // printf("closing fin:%x\n",fin); 40 // printf("closing fin:%x\n",fin);
41 if (fin != NULL) fclose(fin); 41 if (fin != NULL) fclose(fin);
42 // printf("opening fin\n"); 42 // printf("opening fin\n");
43 fin = fopen(src,"rb"); 43 fin = fopen(src,"rb");
44 44
45 if (fin==0) 45 if (fin==0)
46 { 46 {
47 return false; 47 return false;
48 } 48 }
49 49
50 // just holds the first few chars of the file 50 // just holds the first few chars of the file
51 //char buf[0x100]; 51 //char buf[0x100];
52 struct stat buf; 52 fseek(fin,0,SEEK_END);
53 stat(src, &buf); 53 file_length = ftell(fin);
54 file_length = buf.st_size;
55// fseek(fin,0,SEEK_END);
56// file_length = ftell(fin);
57 54
58// fseek(fin,0,SEEK_SET); 55 fseek(fin,0,SEEK_SET);
59 56
60 fread(&head, 1, sizeof(head), fin); 57 fread(&head, 1, sizeof(head), fin);
61 58
62 return true; 59 return true;
63} 60}
diff --git a/noncore/apps/opie-reader/pdb.h b/noncore/apps/opie-reader/pdb.h
index 41649bd..eac3ae6 100644
--- a/noncore/apps/opie-reader/pdb.h
+++ b/noncore/apps/opie-reader/pdb.h
@@ -1,91 +1,93 @@
1 1
2/* 2/*
3 * This header file defines some structures and types normally found in the 3 * This header file defines some structures and types normally found in the
4 * Palm SDK. However, I don't want to require the presense of the SDK for a 4 * Palm SDK. However, I don't want to require the presense of the SDK for a
5 * small utility since most Palm owners won't have it. 5 * small utility since most Palm owners won't have it.
6 * 6 *
7 * $Id$ 7 * $Id$
8 * 8 *
9 */ 9 */
10 10
11#ifndef __PDB_H__ 11#ifndef __PDB_H__
12#define __PDB_H__ 12#define __PDB_H__
13 13
14#ifndef _WINDOWS
14#include <netinet/in.h> 15#include <netinet/in.h>
16#endif
15#include <stdio.h> 17#include <stdio.h>
16 18
17/* Normal Palm typedefs */ 19/* Normal Palm typedefs */
18typedef unsigned char UInt8; 20typedef unsigned char UInt8;
19typedef unsigned short UInt16; 21typedef unsigned short UInt16;
20typedef signed short Int16; 22typedef signed short Int16;
21typedef unsigned long UInt32; 23typedef unsigned long UInt32;
22typedef UInt32 LocalID; 24typedef UInt32 LocalID;
23 25
24/* Max length of DB name */ 26/* Max length of DB name */
25#define dmDBNameLength 0x20 27#define dmDBNameLength 0x20
26 28
27 29
28/************************************************************ 30/************************************************************
29 * Structure of a Record entry 31 * Structure of a Record entry
30 *************************************************************/ 32 *************************************************************/
31typedef struct { 33typedef struct {
32 LocalID localChunkID; // local chunkID of a record 34 LocalID localChunkID; // local chunkID of a record
33 UInt8 attributes; // record attributes; 35 UInt8 attributes; // record attributes;
34 UInt8 uniqueID[3]; // unique ID of record; should 36 UInt8 uniqueID[3]; // unique ID of record; should
35 // not be 0 for a legal record. 37 // not be 0 for a legal record.
36} RecordEntryType; 38} RecordEntryType;
37 39
38 40
39/************************************************************ 41/************************************************************
40 * Structure of a record list extension. This is used if all 42 * Structure of a record list extension. This is used if all
41 * the database record/resource entries of a database can't fit into 43 * the database record/resource entries of a database can't fit into
42 * the database header. 44 * the database header.
43 *************************************************************/ 45 *************************************************************/
44typedef struct { 46typedef struct {
45 LocalID nextRecordListID; // local chunkID of next list 47 LocalID nextRecordListID; // local chunkID of next list
46 UInt16 numRecords; // number of records in this list 48 UInt16 numRecords; // number of records in this list
47 UInt16 firstEntry; // array of Record/Rsrc entries 49 UInt16 firstEntry; // array of Record/Rsrc entries
48 // starts here 50 // starts here
49} RecordListType; 51} RecordListType;
50 52
51 53
52/************************************************************ 54/************************************************************
53 * Structure of a Database Header 55 * Structure of a Database Header
54 *************************************************************/ 56 *************************************************************/
55typedef struct { 57typedef struct {
56 UInt8 name[dmDBNameLength]; // name of database 58 UInt8 name[dmDBNameLength]; // name of database
57 UInt16 attributes; // database attributes 59 UInt16 attributes; // database attributes
58 UInt16 version; // version of database 60 UInt16 version; // version of database
59 UInt32 creationDate; // creation date of database 61 UInt32 creationDate; // creation date of database
60 UInt32 modificationDate; // latest modification date 62 UInt32 modificationDate; // latest modification date
61 UInt32 lastBackupDate; // latest backup date 63 UInt32 lastBackupDate; // latest backup date
62 UInt32 modificationNumber; // modification number of database 64 UInt32 modificationNumber; // modification number of database
63 LocalID appInfoID; // application specific info 65 LocalID appInfoID; // application specific info
64 LocalID sortInfoID; // app specific sorting info 66 LocalID sortInfoID; // app specific sorting info
65 UInt32 type; // database type 67 UInt32 type; // database type
66 UInt32 creator; // database creator 68 UInt32 creator; // database creator
67 UInt32 uniqueIDSeed; // used to generate unique IDs. 69 UInt32 uniqueIDSeed; // used to generate unique IDs.
68 // Note that only the low order 70 // Note that only the low order
69 // 3 bytes of this is used (in 71 // 3 bytes of this is used (in
70 // RecordEntryType.uniqueID). 72 // RecordEntryType.uniqueID).
71 // We are keeping 4 bytes for 73 // We are keeping 4 bytes for
72 // alignment purposes. 74 // alignment purposes.
73 RecordListType recordList; // first record list 75 RecordListType recordList; // first record list
74} DatabaseHdrType; 76} DatabaseHdrType;
75 77
76 78
77class Cpdb 79class Cpdb
78{ 80{
79 protected: 81 protected:
80 size_t file_length; 82 size_t file_length;
81 FILE* fin; 83 FILE* fin;
82 size_t recordpos(int); 84 size_t recordpos(int);
83 size_t recordlength(int); 85 size_t recordlength(int);
84 void gotorecordnumber(int); 86 void gotorecordnumber(int);
85 DatabaseHdrType head; 87 DatabaseHdrType head;
86 bool openfile(const char* src); 88 bool openfile(const char* src);
87 Cpdb() : fin(NULL) {} 89 Cpdb() : fin(NULL) {}
88 ~Cpdb() { if (fin != NULL) fclose(fin); } 90 ~Cpdb() { if (fin != NULL) fclose(fin); }
89}; 91};
90#endif 92#endif
91 93
diff --git a/noncore/apps/opie-reader/plucker.cpp b/noncore/apps/opie-reader/plucker.cpp
index eb039de..e49e35f 100644
--- a/noncore/apps/opie-reader/plucker.cpp
+++ b/noncore/apps/opie-reader/plucker.cpp
@@ -1,1241 +1,156 @@
1#include "useqpe.h"
1#include <stdio.h> 2#include <stdio.h>
2#include <string.h> 3#include <string.h>
3#include <qmessagebox.h> 4#include <qmessagebox.h>
4#include <qpixmap.h> 5#include <qpixmap.h>
6#ifdef USEQPE
5#include <qpe/qcopenvelope_qws.h> 7#include <qpe/qcopenvelope_qws.h>
8#endif
6#ifdef LOCALPICTURES 9#ifdef LOCALPICTURES
7#include <qscrollview.h> 10#include <qscrollview.h>
8#endif 11#endif
12#ifdef USEQPE
9#include <qpe/global.h> 13#include <qpe/global.h>
10#include <qclipboard.h>
11#include <qpe/qpeapplication.h> 14#include <qpe/qpeapplication.h>
15#else
16#include <qapplication.h>
17#endif
18#include <qclipboard.h>
12 19
13#include "plucker.h" 20#include "plucker.h"
14#include "Aportis.h" 21#include "Aportis.h"
15#include "Palm2QImage.h" 22#include "Palm2QImage.h"
16#include "name.h"
17 23
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);*/ }
27 24
28 25struct CPlucker_dataRecord
29void CPlucker::Expand(UInt16 reclen, UInt8 type, UInt8* buffer, UInt16 buffersize)
30{ 26{
31 if (type%2 == 0) 27 UInt16 uid;
32 { 28 UInt16 nParagraphs;
33 fread(buffer, reclen, sizeof(char), fin); 29 UInt16 size;
34 } 30 UInt8 type;
35 else 31 UInt8 reserved;
36 { 32};
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}
49 33
50int CPlucker::OpenFile(const char *src) 34int CPlucker::HeaderSize()
51{ 35{
52 m_lastBreak = 0; 36 return sizeof(CPlucker_dataRecord);
53 if (!Cpdb::openfile(src))
54 {
55 return -1;
56 }
57
58//printf("Okay %u\n", 4);
59
60 if (memcmp(&head.type, "DataPlkr", 8) != 0) return -1;
61
62// qDebug("Cool - this IS plucker");
63
64 EOPPhase = 0;
65 gotorecordnumber(0);
66 fread(&hdr0, 1, sizeof(hdr0), fin);
67//printf("Okay %u\n", 5);
68 buffersize = 32*1024;
69 compressedtextbuffer = new UInt8[buffersize];
70 expandedtextbuffer = new UInt8[buffersize];
71
72 qDebug("Total number of records:%u", ntohs(head.recordList.numRecords));
73
74 unsigned int nrecs = ntohs(hdr0.nRecords);
75 qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs);
76 UInt16 homerecid = 1;
77 UInt16 urlid = 0;
78 bool urlsfound = false;
79 for (unsigned int i = 0; i < nrecs; i++)
80 {
81 UInt16 id, name;
82 fread(&name, 1, sizeof(name), fin);
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);
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*/
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
165 return 0;
166
167} 37}
168 38
169void CPlucker::sizes(unsigned long& _file, unsigned long& _text) 39void CPlucker::GetHeader(UInt16& uid, UInt16& nParagraphs, UInt32& size, UInt8& type, UInt8& reserved)
170{ 40{
171 qDebug("Sizes called:%u",textlength); 41 CPlucker_dataRecord thishdr;
172 _file = file_length; 42 fread(&thishdr, 1, HeaderSize(), fin);
173 if (textlength == 0) 43 uid = ntohs(thishdr.uid);
174 { 44 nParagraphs = ntohs(thishdr.nParagraphs);
175 for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) 45 size = ntohs(thishdr.size);
176 { 46 type = thishdr.type;
177 CPlucker_dataRecord thisHdr; 47 reserved = thishdr.reserved;
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} 48}
186 49
50CPlucker::CPlucker()
51 { /*printf("constructing:%x\n",fin);*/ }
187 52
188char* CPlucker::geturl(UInt16 i) 53bool CPlucker::CorrectDecoder()
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{ 54{
204 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; 55 return (memcmp(&head.type, "DataPlkr", 8) == 0);
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
210} 56}
211 57
212int CPlucker::bgetch() 58int CPlucker::bgetch()
213{ 59{
214 int ch = EOF; 60 int ch = EOF;
215 if (bufferpos >= buffercontent) 61 if (bufferpos >= buffercontent)
216 { 62 {
217 if (!m_continuous) return EOF; 63 if (!m_continuous) return EOF;
218 if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF; 64 if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF;
219 //qDebug("Passing through %u", currentpos); 65 ////qDebug("Passing through %u", currentpos);
220 if (!expand(bufferrec+1)) return EOF; 66 if (!expand(bufferrec+1)) return EOF;
221 mystyle.unset(); 67 mystyle.unset();
68 if (m_ParaOffsets[m_nextParaIndex] == 0)
69 {
70 while (m_ParaOffsets[m_nextParaIndex+1] == 0)
71 {
72 // qDebug("Skipping extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7);
73 m_nextParaIndex++;
74 }
75 }
76 mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2);
77 //qDebug("Using extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7);
222 ch = 10; 78 ch = 10;
223 EOPPhase = 4; 79 EOPPhase = 4;
224 } 80 }
225 else if (bufferpos == m_nextPara) 81 else if (bufferpos == m_nextPara)
226 { 82 {
227 while (bufferpos == m_nextPara) 83 while (bufferpos == m_nextPara)
228 { 84 {
229 UInt16 attr = m_ParaAttrs[m_nextParaIndex]; 85 UInt16 attr = m_ParaAttrs[m_nextParaIndex];
230 m_nextParaIndex++; 86 m_nextParaIndex++;
87 // qDebug("Skipping extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7);
231 if (m_nextParaIndex == m_nParas) 88 if (m_nextParaIndex == m_nParas)
232 { 89 {
233 m_nextPara = -1; 90 m_nextPara = -1;
234 } 91 }
235 else 92 else
236 { 93 {
237 m_nextPara += m_ParaOffsets[m_nextParaIndex]; 94 m_nextPara += m_ParaOffsets[m_nextParaIndex];
238 } 95 }
239 } 96 }
240 mystyle.unset(); 97 mystyle.unset();
98 mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2);
99 //qDebug("Using extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7);
241 if (m_lastBreak == locate()) 100 if (m_lastBreak == locate())
242 { 101 {
243 currentpos++; 102 currentpos++;
244 ch = expandedtextbuffer[bufferpos++]; 103 ch = expandedtextbuffer[bufferpos++];
245 } 104 }
246 else 105 else
247 { 106 {
248 ch = 10; 107 ch = 10;
249 } 108 }
250 } 109 }
251 else 110 else
252 { 111 {
253 currentpos++; 112 currentpos++;
254 ch = expandedtextbuffer[bufferpos++]; 113 ch = expandedtextbuffer[bufferpos++];
255 } 114 }
256 return ch; 115 return ch;
257} 116}
258 117
259int CPlucker::getch() 118tchar CPlucker::getch(bool fast)
260{ 119{
261 mystyle.clearPicture(); 120 mystyle.clearPicture();
262 121
263
264 if (EOPPhase > 0) 122 if (EOPPhase > 0)
265 { 123 {
266 int ch = 10; 124 int ch = 10;
267 switch (EOPPhase) 125 switch (EOPPhase)
268 { 126 {
269 case 4: 127 case 4:
270 mystyle.setPicture(hRule(100,5)); 128 if (!fast) mystyle.setPicture(false, hRule(100,5));
271 mystyle.setCentreJustify(); 129 mystyle.setCentreJustify();
272 ch = '#'; 130 ch = '#';
273 break; 131 break;
274 case 3: 132 case 3:
275 mystyle.setFontSize(3); 133 mystyle.setFontSize(3);
276 ch = 10; 134 ch = 10;
277 break; 135 break;
278 case 2: 136 case 2:
279 ch = 10; 137 ch = 10;
280 break; 138 break;
281 case 1: 139 case 1:
282 mystyle.unset(); 140 mystyle.unset();
283 default: 141 default:
284 ch = 10; 142 ch = 10;
285 } 143 }
286 EOPPhase--; 144 EOPPhase--;
287 return ch; 145 return ch;
288 } 146 }
289 147
290 148 return getch_base(fast);
291 int ch = bgetch();
292 while (ch == 0)
293 {
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 }
554 }
555
556 if (m_lastIsBreak && !mystyle.isMono())
557 {
558 while (ch == ' ')
559 {
560 ch = getch();
561 }
562 }
563
564 m_lastIsBreak = (ch == 10);
565
566 return ch;
567}
568
569void CPlucker::getch(int& ch, CStyle& sty)
570{
571 ch = getch();
572 sty = mystyle;
573}
574
575unsigned int CPlucker::locate()
576{
577 return currentpos;
578/*
579 UInt16 thisrec = 1;
580 unsigned long locpos = 0;
581 gotorecordnumber(thisrec);
582 CPlucker_dataRecord thisHdr;
583 while (thisrec < bufferrec)
584 {
585 fread(&thisHdr, 1, sizeof(thisHdr), fin);
586 if (thisHdr.type < 2) locpos += ntohs(thisHdr.size);
587 thisrec++;
588 gotorecordnumber(thisrec);
589 }
590 return locpos+bufferpos;
591*/
592}
593
594void CPlucker::locate(unsigned int n)
595{
596 UInt16 thisrec = 0;
597 unsigned long locpos = 0;
598 unsigned long bs = 0;
599 CPlucker_dataRecord thisHdr;
600 do
601 {
602 thisrec++;
603 locpos += bs;
604 gotorecordnumber(thisrec);
605 fread(&thisHdr, 1, sizeof(thisHdr), fin);
606 if (thisHdr.type < 2)
607 {
608 bs = ntohs(thisHdr.size);
609 }
610 else
611 {
612 bs = 0;
613 }
614 } while (locpos + bs <= n);
615 currentpos = locpos;
616 expand(thisrec);
617#ifdef _FAST
618 while (currentpos < n && bufferpos < buffercontent) bgetch();
619#else
620 while (currentpos < n && bufferpos < buffercontent) getch();
621#endif
622} 149}
623 150
624bool CPlucker::hyperlink(unsigned int n) 151QImage* CPlucker::imagefromdata(UInt8* imgbuffer, UInt32 imgsize)
625{ 152{
626 visited.push_front(n);
627 UInt16 tuid = (n >> 16);
628 n &= 0xffff;
629// qDebug("Hyper:<%u,%u>", tuid, n);
630 UInt16 thisrec = 1;
631 currentpos = 0;
632 gotorecordnumber(thisrec);
633 CPlucker_dataRecord thisHdr;
634 while (1)
635 {
636 fread(&thisHdr, 1, sizeof(thisHdr), fin);
637 if (tuid == ntohs(thisHdr.uid)) break;
638 if (thisHdr.type < 2) currentpos += ntohs(thisHdr.size);
639 //qDebug("hyper-cp:%u", currentpos);
640 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);
674 }
675 if (thisHdr.type > 1)
676 {
677 if (thisHdr.type == 4)
678 {
679 QMessageBox::information(NULL,
680 PROGNAME,
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
708 }
709*/
710 else
711 {
712 expand(thisrec);
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();
737 }
738 return true;
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);
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*/
851bool CPlucker::expand(int thisrec)
852{
853 mystyle.unset();
854 size_t reclen = recordlength(thisrec);
855 gotorecordnumber(thisrec);
856 CPlucker_dataRecord thisHdr;
857 while (1)
858 {
859 fread(&thisHdr, 1, sizeof(thisHdr), fin);
860 //qDebug("This (%d) type is %d, uid is %u", thisrec, thisHdr.type, ntohs(thisHdr.uid));
861 if (thisHdr.type < 2) break;
862 qDebug("Skipping paragraph of type %d", thisHdr.type);
863 if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false;
864 reclen = recordlength(thisrec);
865 gotorecordnumber(thisrec);
866 }
867 m_nParas = ntohs(thisHdr.nParagraphs);
868 //qDebug("It has %u paragraphs and is %u bytes", ntohs(thisHdr.nParagraphs), ntohs(thisHdr.size));
869 uid = ntohs(thisHdr.uid);
870 for (int i = 0; i < m_nParas; i++)
871 {
872 UInt16 ubytes, attrs;
873 fread(&ubytes, 1, sizeof(ubytes), fin);
874 fread(&attrs, 1, sizeof(attrs), fin);
875 m_ParaOffsets[i] = ntohs(ubytes);
876 m_ParaAttrs[i] = ntohs(attrs);
877 //qDebug("Bytes %u, Attr %x", ntohs(ubytes), attrs);
878 }
879 if (m_nParas > 0)
880 {
881 m_nextPara = m_ParaOffsets[0];
882 //qDebug("First offset = %u", m_nextPara);
883 m_nextParaIndex = 0;
884 }
885 else
886 {
887 m_nextPara = -1;
888 }
889
890 reclen -= sizeof(thisHdr)+4*m_nParas;
891
892 buffercontent = ntohs(thisHdr.size);
893
894 Expand(reclen, thisHdr.type, expandedtextbuffer, buffercontent);
895 bufferpos = 0;
896 bufferrec = thisrec;
897// qDebug("BC:%u, HS:%u", buffercontent, ntohs(thisHdr.size));
898 return true;
899}
900
901void CPlucker::UnZip(size_t reclen, UInt8* tgtbuffer, UInt16 bsize)
902{
903 z_stream zstream;
904 memset(&zstream,sizeof(zstream),0);
905 zstream.next_in = compressedtextbuffer;
906 zstream.next_out = tgtbuffer;
907 zstream.avail_out = bsize;
908 zstream.avail_in = reclen;
909
910 int keylen = 0;
911
912 zstream.zalloc = Z_NULL;
913 zstream.zfree = Z_NULL;
914 zstream.opaque = Z_NULL;
915
916// printf("Initialising\n");
917
918 inflateInit(&zstream);
919 int err = 0;
920 do {
921 if ( zstream.avail_in == 0 && 0 < keylen ) {
922 zstream.next_in = compressedtextbuffer + keylen;
923 zstream.avail_in = reclen - keylen;
924 keylen = 0;
925 }
926 zstream.next_out = tgtbuffer;
927 zstream.avail_out = bsize;
928
929 err = inflate( &zstream, Z_SYNC_FLUSH );
930
931 //qDebug("err:%d - %u", err, zstream.avail_in);
932
933 } while ( err == Z_OK );
934
935 inflateEnd(&zstream);
936}
937
938void CPlucker::UnDoc(size_t reclen, UInt8* tgtbuffer, UInt16 bsize)
939{
940// UInt16 headerSize;
941 UInt16 docSize;
942 UInt16 i;
943 UInt16 j;
944 UInt16 k;
945
946 UInt8 *inBuf = compressedtextbuffer;
947 UInt8 *outBuf = tgtbuffer;
948
949// headerSize = sizeof( Header ) + record->paragraphs * sizeof( Paragraph );
950 docSize = reclen;
951
952 j = 0;
953 k = 0;
954 while ( j < docSize ) {
955 i = 0;
956 while ( i < bsize && j < docSize ) {
957 UInt16 c;
958
959 c = (UInt16) inBuf[ j++ ];
960 if ( 0 < c && c < 9 ) {
961 while ( 0 < c-- )
962 outBuf[ i++ ] = inBuf[ j++ ];
963 }
964 else if ( c < 0x80 )
965 outBuf[ i++ ] = c;
966 else if ( 0xc0 <= c ) {
967 outBuf[ i++ ] = ' ';
968 outBuf[ i++ ] = c ^ 0x80;
969 }
970 else {
971 Int16 m;
972 Int16 n;
973
974 c <<= 8;
975 c += inBuf[ j++ ];
976
977 m = ( c & 0x3fff ) >> COUNT_BITS;
978 n = c & ( ( 1 << COUNT_BITS ) - 1 );
979 n += 2;
980
981 do {
982 outBuf[ i ] = outBuf[ i - m ];
983 i++;
984 } while ( 0 < n-- );
985 }
986 }
987 k += bsize;
988 }
989}
990
991void CPlucker::home()
992{
993 currentpos = 0;
994 expand(1);
995}
996
997CList<Bkmk>* CPlucker::getbkmklist()
998{
999/*
1000 CPlucker_dataRecord thisHdr;
1001
1002 for (int i = 1; i < ntohs(head.recordList.numRecords); i++)
1003 {
1004 gotorecordnumber(i);
1005 fread(&thisHdr, 1, sizeof(thisHdr), fin);
1006 if (thisHdr.type == 8)
1007 {
1008 UInt16 n;
1009 fread(&n, 1, sizeof(n), fin);
1010 n = ntohs(n);
1011 qDebug("Found %u bookmarks", n);
1012 }
1013 qDebug("Found:%d, %u", i , thisHdr.type);
1014 }
1015*/
1016 return NULL;
1017}
1018
1019QImage* CPlucker::getimg(UInt16 tgt)
1020{
1021// static int imageno;
1022// char* file = "tmp1";
1023// sprintf(file, "image%04u.tbmp", imageno++);
1024// qDebug("Image:%u", tgt);
1025 CPlucker_dataRecord thisHdr;
1026 size_t reclen;
1027 UInt16 thisrec = finduid(tgt);
1028 reclen = recordlength(thisrec);
1029 gotorecordnumber(thisrec);
1030 fread(&thisHdr, 1, sizeof(thisHdr), fin);
1031/*
1032 UInt16 thisrec = 0;
1033 do
1034 {
1035 hthisrec++;
1036 reclen = recordlength(thisrec);
1037 gotorecordnumber(thisrec);
1038 //qDebug("thisrec:%u.%u", ftell(fin),thisrec);
1039 fread(&thisHdr, 1, sizeof(thisHdr), fin);
1040 }
1041 while (ntohs(thisHdr.uid) != tgt);
1042*/
1043 reclen -= sizeof(thisHdr);
1044
1045 UInt16 imgsize = ntohs(thisHdr.size);
1046 UInt8* imgbuffer = new UInt8[imgsize];
1047
1048// qDebug("type:%u", thisHdr.type);
1049 Expand(reclen, thisHdr.type, imgbuffer, imgsize);
1050
1051 QImage* qimage = Palm2QImage(imgbuffer, imgsize); 153 QImage* qimage = Palm2QImage(imgbuffer, imgsize);
1052
1053 delete [] imgbuffer; 154 delete [] imgbuffer;
1054
1055 return qimage; 155 return qimage;
1056} 156}
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)
1070 {
1071 ret = new QPixmap(image->width()+4, image->height()+4);
1072 ret->fill(Qt::red);
1073 bitBlt(ret, 2, 2, image, 0, 0, -1, -1);//, Qt::RasterOp::CopyROP);
1074 delete image;
1075 }
1076 else
1077 {
1078 ret = image;
1079 }
1080 return ret;
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())
1093 {
1094 pix[tgt] = *expandimg(tgt);
1095 return &pix[tgt];
1096 }
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!
1241}
diff --git a/noncore/apps/opie-reader/plucker.h b/noncore/apps/opie-reader/plucker.h
index 083eac6..6d62195 100644
--- a/noncore/apps/opie-reader/plucker.h
+++ b/noncore/apps/opie-reader/plucker.h
@@ -1,123 +1,36 @@
1#ifndef __plucker_h 1#ifndef __plucker_h
2#define __plucker_h 2#define __plucker_h
3 3
4#include "CExpander.h" 4#include "plucker_base.h"
5#include "zlib/zlib.h"
6#include "ztxt.h"
7#include "pdb.h"
8#include "CBuffer.h"
9#include "Navigation.h"
10#include "my_list.h"
11 5
12#ifdef LOCALPICTURES 6#ifdef LOCALPICTURES
13class QScrollView; 7class QScrollView;
14class QWidget; 8class QWidget;
15#endif 9#endif
16 10
17struct CPlucker_dataRecord 11class CPlucker : public CPlucker_base
18{ 12{
19 UInt16 uid; 13 void start2endSection()
20 UInt16 nParagraphs; 14 {
21 UInt16 size; 15 m_currentstart = currentpos-bufferpos;
22 UInt8 type; 16 m_currentend = m_currentstart+buffercontent;
23 UInt8 reserved; 17 }
24}; 18 void setbuffersize()
25 19 {
26struct CPlucker_record0 20 compressedbuffersize = buffersize = 32*1024;
27{ 21 }
28 UInt16 uid; 22 int HeaderSize();
29 UInt16 version; 23 void GetHeader(UInt16& uid, UInt16& nParagraphs, UInt32& size, UInt8& type, UInt8& reserved);
30 UInt16 nRecords; 24 int bgetch();
31}; 25 tchar getch(bool fast);
26 UInt8 EOPPhase;
32 27
33struct CPluckerbkmk
34{
35 UInt32 offset;
36 tchar title[MAX_BMRK_LENGTH];
37};
38 28
39const UInt32 CPLUCKER_ID = 0x5458547a;
40 29
41class CPlucker : public CExpander, Cpdb 30 bool CorrectDecoder(); // Virtual
42{ 31 void setlink(QString&, const QString&); // Virtual
43 unsigned short finduid(unsigned short); 32 QImage* imagefromdata(UInt8*, UInt32); // virtual
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;
53 UInt16 uid;
54 UInt8 EOPPhase;
55 int m_nextPara, m_nextParaIndex;
56 CBufferFace<UInt16> m_ParaOffsets;
57 CBufferFace<UInt16> m_ParaAttrs;
58 UInt16 m_nParas;
59 CStyle mystyle;
60// bool bInit;
61 UInt32 buffersize;
62 UInt32 buffercontent;
63 UInt8* expandedtextbuffer;
64 UInt8* compressedtextbuffer;
65 char* urls;
66 size_t urlsize;
67 size_t bufferpos;
68 UInt16 bufferrec;
69 CPlucker_record0 hdr0;
70 size_t currentpos;
71 bool expand(int);
72 void UnZip(size_t, UInt8*, UInt16);
73 void UnDoc(size_t, UInt8*, UInt16);
74#ifdef LOCALPICTURES
75 void showimg(UInt16 tgt);
76#endif
77 QImage* getimg(UInt16 tgt);
78 QPixmap* expandimg(UInt16 tgt, bool border=false);
79 void home();
80 int bgetch();
81 CNavigation m_nav;
82 public: 33 public:
83 virtual void suspend()
84 {
85 CExpander::suspend(fin);
86 }
87 virtual void unsuspend()
88 {
89 CExpander::unsuspend(fin);
90 }
91 virtual QPixmap* getPicture(unsigned long tgt);
92 virtual void sizes(unsigned long& _file, unsigned long& _text);
93 virtual bool hasrandomaccess() { return true; }
94 virtual ~CPlucker();
95 CPlucker(); 34 CPlucker();
96 virtual int OpenFile(const char *src);
97 virtual int getch();
98 virtual void getch(int&, CStyle&);
99 virtual unsigned int locate();
100 virtual void locate(unsigned int n);
101 virtual CList<Bkmk>* getbkmklist();
102 virtual bool hyperlink(unsigned int n);
103 virtual MarkupType PreferredMarkup()
104 {
105 return cNONE;
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);
121}; 35};
122
123#endif 36#endif
diff --git a/noncore/apps/opie-reader/ppm_expander.h b/noncore/apps/opie-reader/ppm_expander.h
index 4278c82..002de86 100644
--- a/noncore/apps/opie-reader/ppm_expander.h
+++ b/noncore/apps/opie-reader/ppm_expander.h
@@ -1,58 +1,61 @@
1#ifndef __ppm_expander_h 1#ifndef __ppm_expander_h
2#define __ppm_expander_h 2#define __ppm_expander_h
3 3
4#include "useqpe.h"
4#include "CExpander.h" 5#include "CExpander.h"
5#include <sys/stat.h> 6#include <sys/stat.h>
6 7
7 8
8#include "utypes.h" 9#include "utypes.h"
9#include "ppm.h" 10#include "ppm.h"
10#include "arith.h" 11#include "arith.h"
11 12
12 13
13#define SYM_EOF 256 14#define SYM_EOF 256
14 15
15class ppm_expander : public CExpander { 16class ppm_expander : public CExpander {
16 UCHAR *buf_in,*buf_out; 17 UCHAR *buf_in,*buf_out;
17 unsigned int bufsize; 18 unsigned int bufsize;
18 unsigned int outbytes; 19 unsigned int outbytes;
19 unsigned long blocksize; 20 unsigned long blocksize;
20 unsigned short numblocks; 21 unsigned short numblocks;
21 unsigned short curblock; 22 unsigned short curblock;
22 unsigned short maxnode; 23 unsigned short maxnode;
23 bool needppmend; 24 bool needppmend;
24 int home(); 25 int home();
25 FILE* my_file_in; 26 FILE* my_file_in;
26 PPM_ReadBuf* my_read_buf; 27 PPM_ReadBuf* my_read_buf;
27 ppm_worker ppm; 28 ppm_worker ppm;
28public: 29public:
29 virtual void suspend() 30#ifdef USEQPE
31 void suspend()
30 { 32 {
31 CExpander::suspend(my_file_in); 33 CExpander::suspend(my_file_in);
32 } 34 }
33 virtual void unsuspend() 35 void unsuspend()
34 { 36 {
35 CExpander::unsuspend(my_file_in); 37 CExpander::unsuspend(my_file_in);
36 } 38 }
39#endif
37 ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL) 40 ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL)
38 { 41 {
39 bufsize = 1024; 42 bufsize = 1024;
40 buf_in = new UCHAR[bufsize]; 43 buf_in = new UCHAR[bufsize];
41 buf_out = new UCHAR[bufsize]; 44 buf_out = new UCHAR[bufsize];
42 outbytes = 0; 45 outbytes = 0;
43 } 46 }
44 virtual int OpenFile(const char* infile); 47 int OpenFile(const char* infile);
45 virtual int getch(); 48 int getch();
46 int locate(unsigned short block, unsigned int n); 49 int locate(unsigned short block, unsigned int n);
47 virtual ~ppm_expander(); 50 virtual ~ppm_expander();
48 virtual unsigned int locate() { return outbytes; } 51 unsigned int locate() { return outbytes; }
49 virtual void locate(unsigned int n); 52 void locate(unsigned int n);
50 virtual bool hasrandomaccess() { return (numblocks > 1); } 53 bool hasrandomaccess() { return (numblocks > 1); }
51 virtual void sizes(unsigned long& file, unsigned long& text); 54 void sizes(unsigned long& file, unsigned long& text);
52 virtual MarkupType PreferredMarkup() 55 MarkupType PreferredMarkup()
53 { 56 {
54 return cTEXT; 57 return cTEXT;
55 } 58 }
56}; 59};
57 60
58#endif 61#endif
diff --git a/noncore/apps/opie-reader/ustring.h b/noncore/apps/opie-reader/ustring.h
index a3ef8df..95da26b 100644
--- a/noncore/apps/opie-reader/ustring.h
+++ b/noncore/apps/opie-reader/ustring.h
@@ -1,83 +1,93 @@
1#include <qstring.h> 1#include <qstring.h>
2 2
3#ifdef _UNICODE 3#ifdef _UNICODE
4inline size_t ustrlen(const tchar* _p) 4inline size_t ustrlen(const tchar* _p)
5{ 5{
6 if (_p == NULL) return 0; 6 if (_p == NULL) return 0;
7 const tchar *p = _p; 7 const tchar *p = _p;
8 while (*p != 0) 8 while (*p != 0)
9 { 9 {
10 p++; 10 p++;
11/* 11/*
12 if (p - _p == 20) 12 if (p - _p == 20)
13 { 13 {
14 printf("ustrlen::String too long:"); 14 printf("ustrlen::String too long:");
15 for (int i = 0; i < 20; i++) printf("%c",_p[i]); 15 for (int i = 0; i < 20; i++) printf("%c",_p[i]);
16 printf("\n"); 16 printf("\n");
17 } 17 }
18*/ 18*/
19 } 19 }
20 return p - _p; 20 return p - _p;
21} 21}
22 22
23inline int ustrcmp(const tchar* _p1, const tchar* _p2) 23inline int ustrcmp(const tchar* _p1, const tchar* _p2)
24{ 24{
25 if (_p1 == 0) return 1; 25 if (_p1 == 0) return 1;
26 if (_p2 == 0) return -1; 26 if (_p2 == 0) return -1;
27 const tchar* p1 = _p1, *p2 = _p2; 27 const tchar* p1 = _p1, *p2 = _p2;
28 while (*p1 != 0) 28 while (*p1 != 0)
29 { 29 {
30/* 30/*
31 if (p1 - _p1 == 20) 31 if (p1 - _p1 == 20)
32 { 32 {
33 printf("ustrcmp::String too long:"); 33 printf("ustrcmp::String too long:");
34 for (int i = 0; i < 20; i++) printf("%c",_p1[i]); 34 for (int i = 0; i < 20; i++) printf("%c",_p1[i]);
35 printf("\n"); 35 printf("\n");
36 } 36 }
37*/ 37*/
38 if (*p1 < *p2) return -1; 38 if (*p1 < *p2) return -1;
39 if (*p1 > *p2) return 1; 39 if (*p1 > *p2) return 1;
40 if (*p2 == 0) return 1; 40 if (*p2 == 0) return 1;
41 p1++, p2++; 41 p1++, p2++;
42 } 42 }
43 if (*p2 != 0) return -1; 43 if (*p2 != 0) return -1;
44 return 0; 44 return 0;
45} 45}
46 46
47inline QString toQString(tchar *_p) 47inline QString toQString(tchar *_p)
48{ 48{
49 if (_p == NULL) return 0; 49 if (_p == NULL) return 0;
50 int i = 0; 50 int i = 0;
51 tchar *p = _p; 51 tchar *p = _p;
52 QString ret; 52 QString ret;
53 while (*p != 0) ret[i++] = *(p++); 53 while (*p != 0) ret[i++] = *(p++);
54 return ret; 54 return ret;
55} 55}
56 56
57inline QString toQString(tchar *_p, unsigned int len) 57inline QString toQString(tchar *_p, unsigned int len)
58{ 58{
59 if (_p == NULL) return 0; 59 if (_p == NULL) return 0;
60 unsigned int i = 0; 60 unsigned int i = 0;
61 tchar *p = _p; 61 tchar *p = _p;
62 QString ret; 62 QString ret;
63#ifdef _WINDOWS
64 //ret.fill(' ', len);
65 for (i = 0; i < len; i++)
66 {
67 if (p[i] == 0) break;
68 ret.at((uint)i) = p[i];
69 }
70// while (*p != 0 && i < len) ret.at((uint)i++) = (tchar)(*(p++));
71#else
63 while (*p != 0 && i < len) ret[i++] = *(p++); 72 while (*p != 0 && i < len) ret[i++] = *(p++);
73#endif
64 return ret; 74 return ret;
65} 75}
66 76
67inline tchar* fromQString(const QString& qs) 77inline tchar* fromQString(const QString& qs)
68{ 78{
69 int len = qs.length(); 79 int len = qs.length();
70 tchar* ret = new tchar[len+1]; 80 tchar* ret = new tchar[len+1];
71 for (int i = 0; i < len; i++) 81 for (int i = 0; i < len; i++)
72 { 82 {
73 ret[i] = qs[i].unicode(); 83 ret[i] = qs[i].unicode();
74 } 84 }
75 ret[len] = 0; 85 ret[len] = 0;
76 return ret; 86 return ret;
77} 87}
78#else 88#else
79 89
80inline size_t ustrlen(const tchar* _p) { return strlen(_p); } 90inline size_t ustrlen(const tchar* _p) { return strlen(_p); }
81inline int ustrcmp(const tchar* _p1, const tchar* _p2) { return strcmp(_p1, _p2); } 91inline int ustrcmp(const tchar* _p1, const tchar* _p2) { return strcmp(_p1, _p2); }
82 92
83#endif 93#endif
diff --git a/noncore/apps/opie-reader/version.h b/noncore/apps/opie-reader/version.h
index 003e9db..85d35a4 100644
--- a/noncore/apps/opie-reader/version.h
+++ b/noncore/apps/opie-reader/version.h
@@ -1,5 +1,9 @@
1#ifndef __VERSION_H
2#define __VERSION_H
1 3
2#define MAJOR 0 4#define MAJOR 0
3#define BKMKTYPE 6 5#define BKMKTYPE 6
4#define MINOR 'a' 6#define MINOR 'j'
5#define RELEASE_TYPE "beta" 7#define RELEASE_TYPE "beta"
8
9#endif
diff --git a/noncore/apps/opie-reader/ztxt.h b/noncore/apps/opie-reader/ztxt.h
index d7cb96a..709a055 100644
--- a/noncore/apps/opie-reader/ztxt.h
+++ b/noncore/apps/opie-reader/ztxt.h
@@ -1,113 +1,120 @@
1#ifndef __ztxt_h 1#ifndef __ztxt_h
2#define __ztxt_h 2#define __ztxt_h
3 3
4#include "useqpe.h"
4#include "CExpander.h" 5#include "CExpander.h"
5#include "zlib/zlib.h" 6#include <zlib.h>
6#include "pdb.h" 7#include "pdb.h"
8#ifdef _WINDOWS
9#include <winsock.h>
10#endif
11
7/* 12/*
8 * Stuff common to both Weasel Reader and makeztxt 13 * Stuff common to both Weasel Reader and makeztxt
9 * 14 *
10 * $Id$ 15 * $Id$
11 * 16 *
12 */ 17 */
13 18
14#ifndef _WEASEL_COMMON_H_ 19#ifndef _WEASEL_COMMON_H_
15#define _WEASEL_COMMON_H_ 1 20#define _WEASEL_COMMON_H_ 1
16 21
17 22
18/* Padding is no good */ 23/* Padding is no good */
19#if defined(__GNUC__) && defined(__UNIX__) 24#if defined(__GNUC__) && defined(__UNIX__)
20# pragma pack(2) 25# pragma pack(2)
21#endif 26#endif
22 27
23/* The default creator is Weasel Reader 'GPlm' */ 28/* The default creator is Weasel Reader 'GPlm' */
24#define GPLM_CREATOR_ID "GPlm" 29#define GPLM_CREATOR_ID "GPlm"
25/* Databases of type 'zTXT' */ 30/* Databases of type 'zTXT' */
26#define ZTXT_TYPE_ID "zTXT" 31#define ZTXT_TYPE_ID "zTXT"
27/* Size of one database record */ 32/* Size of one database record */
28#define RECORD_SIZE 8192 33#define RECORD_SIZE 8192
29/* Allow largest WBIT size for data. Lower with command line options 34/* Allow largest WBIT size for data. Lower with command line options
30 in makeztxt */ 35 in makeztxt */
31#define MAXWBITS 15 36#define MAXWBITS 15
32/* Max length for a bookmark/annotation title */ 37/* Max length for a bookmark/annotation title */
33#define MAX_BMRK_LENGTH 20 38#define MAX_BMRK_LENGTH 20
34 39
35 40
36/***************************************************** 41/*****************************************************
37 * This is the zTXT document header (record #0) * 42 * This is the zTXT document header (record #0) *
38 * ----zTXT version 1.42---- * 43 * ----zTXT version 1.42---- *
39 *****************************************************/ 44 *****************************************************/
40typedef struct zTXT_record0Type { 45typedef struct zTXT_record0Type {
41 UInt16 version; /* zTXT format version */ 46 UInt16 version; /* zTXT format version */
42 UInt16 numRecords; /* Number of data (TEXT) records */ 47 UInt16 numRecords; /* Number of data (TEXT) records */
43 UInt32 size; /* Size in bytes of uncomp. data */ 48 UInt32 size; /* Size in bytes of uncomp. data */
44 UInt16 recordSize; /* Size of a single data record */ 49 UInt16 recordSize; /* Size of a single data record */
45 UInt16 numBookmarks; /* Number of bookmarks in DB */ 50 UInt16 numBookmarks; /* Number of bookmarks in DB */
46 UInt16 bookmarkRecord; /* Record containing bookmarks */ 51 UInt16 bookmarkRecord; /* Record containing bookmarks */
47 UInt16 numAnnotations; /* Number of annotation records */ 52 UInt16 numAnnotations; /* Number of annotation records */
48 UInt16 annotationRecord; /* Record # of annotation index */ 53 UInt16 annotationRecord; /* Record # of annotation index */
49 UInt8 randomAccess; /* 1 if compressed w/Z_FULL_FLUSH */ 54 UInt8 randomAccess; /* 1 if compressed w/Z_FULL_FLUSH */
50 UInt8 padding[0x20 - 19]; /* Pad to a size of 0x20 bytes */ 55 UInt8 padding[0x20 - 19]; /* Pad to a size of 0x20 bytes */
51} zTXT_record0; 56} zTXT_record0;
52 57
53struct zTXTbkmk 58struct zTXTbkmk
54{ 59{
55 UInt32 offset; 60 UInt32 offset;
56 tchar title[MAX_BMRK_LENGTH]; 61 tchar title[MAX_BMRK_LENGTH];
57}; 62};
58 63
59#endif 64#endif
60 65
61 66
62const UInt32 ZTXT_ID = 0x5458547a; 67const UInt32 ZTXT_ID = 0x5458547a;
63 68
64class ztxt : public CExpander, Cpdb 69class ztxt : public CExpander, Cpdb
65{ 70{
66 bool bInit; 71 bool bInit;
67 UInt32 buffersize; 72 UInt32 buffersize;
68 UInt32 buffercontent; 73 UInt32 buffercontent;
69 UInt8* expandedtextbuffer; 74 UInt8* expandedtextbuffer;
70 UInt8* compressedtextbuffer; 75 UInt8* compressedtextbuffer;
71 z_stream zstream; 76 z_stream zstream;
72 size_t bufferpos; 77 size_t bufferpos;
73 UInt16 bufferrec; 78 UInt16 bufferrec;
74 zTXT_record0 hdr0; 79 zTXT_record0 hdr0;
75 size_t currentpos; 80 size_t currentpos;
76 void home(); 81 void home();
77public: 82public:
78 virtual void suspend() 83#ifdef USEQPE
84 void suspend()
79 { 85 {
80 CExpander::suspend(fin); 86 CExpander::suspend(fin);
81 } 87 }
82 virtual void unsuspend() 88 void unsuspend()
83 { 89 {
84 CExpander::unsuspend(fin); 90 CExpander::unsuspend(fin);
85 } 91 }
86 virtual void sizes(unsigned long& _file, unsigned long& _text) 92#endif
93 void sizes(unsigned long& _file, unsigned long& _text)
87 { 94 {
88 _file = file_length; 95 _file = file_length;
89 _text = ntohl(hdr0.size); 96 _text = ntohl(hdr0.size);
90 } 97 }
91 virtual bool hasrandomaccess() { return (hdr0.randomAccess != 0); } 98 bool hasrandomaccess() { return (hdr0.randomAccess != 0); }
92 virtual ~ztxt() 99 virtual ~ztxt()
93 { 100 {
94 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; 101 if (expandedtextbuffer != NULL) delete [] expandedtextbuffer;
95 if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; 102 if (compressedtextbuffer != NULL) delete [] compressedtextbuffer;
96 if (bInit) 103 if (bInit)
97 { 104 {
98 inflateEnd(&zstream); 105 inflateEnd(&zstream);
99 } 106 }
100 } 107 }
101 ztxt(); 108 ztxt();
102 virtual int OpenFile(const char *src); 109 int OpenFile(const char *src);
103 virtual int getch(); 110 int getch();
104 virtual unsigned int locate(); 111 unsigned int locate();
105 virtual void locate(unsigned int n); 112 void locate(unsigned int n);
106 virtual CList<Bkmk>* getbkmklist(); 113 CList<Bkmk>* getbkmklist();
107 virtual MarkupType PreferredMarkup() 114 MarkupType PreferredMarkup()
108 { 115 {
109 return cTEXT; 116 return cTEXT;
110 } 117 }
111}; 118};
112 119
113#endif 120#endif