46 files changed, 4580 insertions, 1522 deletions
diff --git a/noncore/apps/opie-reader/Aportis.cpp b/noncore/apps/opie-reader/Aportis.cpp index 1327ff8..b4988da 100644 --- a/noncore/apps/opie-reader/Aportis.cpp +++ b/noncore/apps/opie-reader/Aportis.cpp | |||
@@ -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 | ||
7 | Aportis::Aportis() : peanutfile(false) { /*printf("constructing:%x\n",fin);*/ } | 7 | Aportis::Aportis() : peanutfile(false) { /*printf("constructing:%x\n",fin);*/ } |
8 | 8 | ||
9 | void Aportis::dePeanut(int& ch) | 9 | void 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 | ||
19 | CList<Bkmk>* Aportis::getbkmklist() | 19 | CList<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 | ||
93 | int Aportis::openfile(const char *src) | 93 | int 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 | ||
189 | int Aportis::getch() | 189 | int 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 | ||
266 | unsigned int Aportis::GetBS(unsigned int bn) | 266 | unsigned 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 | ||
289 | unsigned int Aportis::locate() | 289 | unsigned 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 | ||
308 | void Aportis::locate(unsigned int n) | 308 | void 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 | ||
342 | bool Aportis::refreshbuffer() | 342 | bool 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 1ca5e73..af1fd3b 100644 --- a/noncore/apps/opie-reader/Aportis.h +++ b/noncore/apps/opie-reader/Aportis.h | |||
@@ -1,100 +1,108 @@ | |||
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 | ||
8 | #include "CExpander.h" | 8 | #include "CExpander.h" |
9 | #include "pdb.h" | 9 | #include "pdb.h" |
10 | 10 | ||
11 | typedef UInt32 DWORD; | 11 | typedef UInt32 DWORD; |
12 | typedef UInt16 WORD; | 12 | typedef 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 |
18 | struct tDocHeader { | 18 | struct 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 | */ |
34 | struct tDocRecord0 { | 34 | struct 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 | ||
43 | struct PeanutHeader | 43 | struct 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 | ||
53 | inline WORD SwapWord(WORD r) | 53 | inline WORD SwapWord(WORD r) |
54 | { | 54 | { |
55 | return (r>>8) + (r<<8); | 55 | return (r>>8) + (r<<8); |
56 | } | 56 | } |
57 | 57 | ||
58 | inline DWORD SwapLong(DWORD r) | 58 | inline 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 | ||
63 | class Aportis : public CExpander, Cpdb { | 63 | class 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; |
77 | public: | 77 | public: |
78 | virtual void suspend() | ||
79 | { | ||
80 | CExpander::suspend(fin); | ||
81 | } | ||
82 | virtual void unsuspend() | ||
83 | { | ||
84 | CExpander::unsuspend(fin); | ||
85 | } | ||
78 | virtual void sizes(unsigned long& _file, unsigned long& _text) | 86 | virtual void sizes(unsigned long& _file, unsigned long& _text) |
79 | { | 87 | { |
80 | _file = dwLen; | 88 | _file = dwLen; |
81 | _text = dwTLen; | 89 | _text = dwTLen; |
82 | } | 90 | } |
83 | virtual bool hasrandomaccess() { return true; } | 91 | virtual bool hasrandomaccess() { return true; } |
84 | virtual ~Aportis() {} | 92 | virtual ~Aportis() {} |
85 | Aportis(); | 93 | Aportis(); |
86 | virtual int openfile(const char *src); | 94 | virtual int OpenFile(const char *src); |
87 | virtual int getch(); | 95 | virtual int getch(); |
88 | virtual unsigned int locate(); | 96 | virtual unsigned int locate(); |
89 | virtual void locate(unsigned int n); | 97 | virtual void locate(unsigned int n); |
90 | virtual CList<Bkmk>* getbkmklist(); | 98 | virtual CList<Bkmk>* getbkmklist(); |
91 | virtual MarkupType PreferredMarkup() | 99 | virtual MarkupType PreferredMarkup() |
92 | { | 100 | { |
93 | return (peanutfile) ? cPML : cTEXT; | 101 | return (peanutfile) ? cPML : cTEXT; |
94 | } | 102 | } |
95 | private: | 103 | private: |
96 | bool refreshbuffer(); | 104 | bool refreshbuffer(); |
97 | unsigned int GetBS(unsigned int bn); | 105 | unsigned int GetBS(unsigned int bn); |
98 | }; | 106 | }; |
99 | 107 | ||
100 | #endif | 108 | #endif |
diff --git a/noncore/apps/opie-reader/Bkmks.cpp b/noncore/apps/opie-reader/Bkmks.cpp index 30d2881..998601a 100644 --- a/noncore/apps/opie-reader/Bkmks.cpp +++ b/noncore/apps/opie-reader/Bkmks.cpp | |||
@@ -1,240 +1,322 @@ | |||
1 | #include "name.h" | ||
1 | #include <qmessagebox.h> | 2 | #include <qmessagebox.h> |
2 | 3 | ||
3 | #include "Bkmks.h" | 4 | #include "Bkmks.h" |
4 | 5 | ||
5 | #include "StyleConsts.h" | 6 | #include "StyleConsts.h" |
6 | #include "Markups.h" | 7 | #include "Markups.h" |
7 | #include "my_list.h" | 8 | #include "my_list.h" |
8 | #include "version.h" | 9 | #include "version.h" |
9 | 10 | ||
10 | const unsigned long BkmkFile::magic = ((unsigned long)'q' << 24) | ((unsigned long)'t' << 16) | ((unsigned long)'r' << 8) | ((unsigned long)BKMKTYPE); | 11 | const unsigned long BkmkFile::magic = ((unsigned long)'q' << 24) | ((unsigned long)'t' << 16) | ((unsigned long)'r' << 8) | ((unsigned long)BKMKTYPE); |
11 | 12 | ||
13 | Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p) | ||
14 | { | ||
15 | init(_nm, _nmlen, _anno, _annolen, _p); | ||
16 | } | ||
17 | |||
18 | Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p) | ||
19 | { | ||
20 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p); | ||
21 | } | ||
12 | 22 | ||
13 | Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_p) | 23 | Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_p) |
14 | { | 24 | { |
15 | int len = ustrlen(_nm)+1; | ||
16 | m_name = new tchar[len]; | ||
17 | for (int i = 0; i < len; i++) m_name[i] = _nm[i]; | ||
18 | 25 | ||
19 | if (_anno == NULL) | 26 | if (_anno == NULL) |
20 | { | 27 | { |
21 | m_anno = new tchar[1]; | 28 | tchar t = 0; |
22 | m_anno[0] = 0; | 29 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p); |
23 | } | 30 | } |
24 | else | 31 | else |
25 | { | 32 | { |
26 | len = ustrlen(_anno)+1; | 33 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p); |
27 | m_anno = new tchar[len]; | ||
28 | for (int i = 0; i < len; i++) m_anno[i] = _anno[i]; | ||
29 | } | 34 | } |
30 | } | 35 | } |
31 | 36 | ||
37 | void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p) | ||
38 | { | ||
39 | m_namelen = _nmlen; | ||
40 | if (m_namelen > 0) | ||
41 | { | ||
42 | m_name = new unsigned char[m_namelen]; | ||
43 | memcpy(m_name, _nm, m_namelen); | ||
44 | } | ||
45 | else | ||
46 | { | ||
47 | m_name = NULL; | ||
48 | } | ||
49 | |||
50 | m_annolen = _annolen; | ||
51 | if (m_annolen > 0) | ||
52 | { | ||
53 | m_anno = new unsigned char[m_annolen]; | ||
54 | memcpy(m_anno, _anno, m_annolen); | ||
55 | } | ||
56 | else | ||
57 | { | ||
58 | m_anno = NULL; | ||
59 | } | ||
60 | m_position = _p; | ||
61 | } | ||
62 | |||
32 | Bkmk::~Bkmk() | 63 | Bkmk::~Bkmk() |
33 | { | 64 | { |
34 | if (m_name != NULL) delete [] m_name; | 65 | if (m_name != NULL) delete [] m_name; |
35 | m_name = NULL; | 66 | m_name = NULL; |
36 | if (m_anno != NULL) delete [] m_anno; | 67 | if (m_anno != NULL) delete [] m_anno; |
37 | m_anno = NULL; | 68 | m_anno = NULL; |
38 | } | 69 | } |
39 | 70 | ||
40 | Bkmk& Bkmk::operator=(const Bkmk& rhs) | 71 | Bkmk& Bkmk::operator=(const Bkmk& rhs) |
41 | { | 72 | { |
42 | if (m_name != NULL) | 73 | if (m_name != NULL) |
43 | { | 74 | { |
44 | delete [] m_name; | 75 | delete [] m_name; |
45 | m_name = NULL; | 76 | m_name = NULL; |
46 | } | 77 | } |
47 | if (m_anno != NULL) | 78 | if (m_anno != NULL) |
48 | { | 79 | { |
49 | delete [] m_anno; | 80 | delete [] m_anno; |
50 | m_anno = NULL; | 81 | m_anno = NULL; |
51 | } | 82 | } |
52 | if (rhs.m_name != NULL) | 83 | if (rhs.m_name != NULL) |
53 | { | 84 | { |
54 | int len = ustrlen(rhs.m_name)+1; | 85 | m_namelen = rhs.m_namelen; |
55 | m_name = new tchar[len]; | 86 | m_name = new unsigned char[m_namelen]; |
56 | for (int i = 0; i < len; i++) m_name[i] = rhs.m_name[i]; | 87 | memcpy(m_name, rhs.m_name, m_namelen); |
57 | } | 88 | } |
58 | else | 89 | else |
59 | m_name = NULL; | 90 | m_name = NULL; |
60 | if (rhs.m_anno != NULL) | 91 | if (rhs.m_anno != NULL) |
61 | { | 92 | { |
62 | int len = ustrlen(rhs.m_anno)+1; | 93 | m_annolen = rhs.m_annolen; |
63 | m_anno = new tchar[len]; | 94 | m_anno = new unsigned char[m_annolen]; |
64 | for (int i = 0; i < len; i++) m_anno[i] = rhs.m_anno[i]; | 95 | memcpy(m_anno, rhs.m_anno, m_annolen); |
65 | } | 96 | } |
66 | else | 97 | else |
67 | m_anno = NULL; | 98 | m_anno = NULL; |
68 | m_position = rhs.m_position; | 99 | m_position = rhs.m_position; |
69 | return *this; | 100 | return *this; |
70 | } | 101 | } |
71 | 102 | ||
72 | bool Bkmk::operator==(const Bkmk& rhs) | 103 | bool Bkmk::operator==(const Bkmk& rhs) |
73 | { | 104 | { |
74 | return (m_position == rhs.m_position && ustrcmp(m_name,rhs.m_name) == 0); | 105 | return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0); |
106 | } | ||
107 | |||
108 | void Bkmk::setAnno(unsigned char* t, unsigned short len) | ||
109 | { | ||
110 | if (m_anno != NULL) | ||
111 | { | ||
112 | delete [] m_anno; | ||
113 | m_anno = NULL; | ||
114 | } | ||
115 | if (t != NULL) | ||
116 | { | ||
117 | m_annolen = len; | ||
118 | m_anno = new unsigned char[m_annolen]; | ||
119 | memcpy(m_anno, t, m_annolen); | ||
120 | } | ||
121 | else | ||
122 | { | ||
123 | m_annolen = sizeof(tchar); | ||
124 | m_anno = new unsigned char[m_annolen]; | ||
125 | *((tchar*)m_anno) = 0; | ||
126 | } | ||
75 | } | 127 | } |
76 | 128 | ||
77 | void Bkmk::setAnno(tchar* t) | 129 | void Bkmk::setAnno(tchar* t) |
78 | { | 130 | { |
79 | if (m_anno != NULL) | 131 | if (m_anno != NULL) |
80 | { | 132 | { |
81 | delete [] m_anno; | 133 | delete [] m_anno; |
82 | m_anno = NULL; | 134 | m_anno = NULL; |
83 | } | 135 | } |
84 | if (t != NULL) | 136 | if (t != NULL) |
85 | { | 137 | { |
86 | int len = ustrlen(t)+1; | 138 | unsigned short len = ustrlen(t)+1; |
87 | m_anno = new tchar[len]; | 139 | m_annolen = sizeof(tchar)*len; |
88 | for (int i = 0; i < len; i++) m_anno[i] = t[i]; | 140 | m_anno = new unsigned char[m_annolen]; |
141 | memcpy(m_anno, t, m_annolen); | ||
89 | } | 142 | } |
90 | else | 143 | else |
91 | m_anno = NULL; | 144 | { |
145 | m_annolen = sizeof(tchar); | ||
146 | m_anno = new unsigned char[m_annolen]; | ||
147 | *((tchar*)m_anno) = 0; | ||
148 | } | ||
92 | } | 149 | } |
93 | 150 | ||
94 | BkmkFile::BkmkFile(const char *fnm, bool w ) | 151 | BkmkFile::BkmkFile(const char *fnm, bool w = false) |
95 | : | 152 | : |
96 | wt(w), isUpgraded(false) | 153 | wt(w), isUpgraded(false) |
97 | { | 154 | { |
98 | if (w) | 155 | if (w) |
99 | { | 156 | { |
100 | f = fopen(fnm, "wb"); | 157 | f = fopen(fnm, "wb"); |
101 | } | 158 | } |
102 | else | 159 | else |
103 | { | 160 | { |
104 | f = fopen(fnm, "rb"); | 161 | f = fopen(fnm, "rb"); |
105 | } | 162 | } |
106 | } | 163 | } |
107 | 164 | ||
108 | BkmkFile::~BkmkFile() | 165 | BkmkFile::~BkmkFile() |
109 | { | 166 | { |
110 | if (f != NULL) fclose(f); | 167 | if (f != NULL) fclose(f); |
111 | } | 168 | } |
112 | 169 | ||
113 | void BkmkFile::write(tchar* nm, tchar* an, const unsigned int& pos) | 170 | void BkmkFile::write(const Bkmk& b) |
114 | { | 171 | { |
115 | if (f != NULL) | 172 | if (f != NULL) |
116 | { | 173 | { |
117 | unsigned short ln = ustrlen(nm); | 174 | fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f); |
118 | fwrite(&ln,sizeof(ln),1,f); | 175 | fwrite(b.m_name,1,b.m_namelen,f); |
119 | fwrite(nm,sizeof(tchar),ln,f); | 176 | fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f); |
120 | ln = ustrlen(an); | 177 | fwrite(b.m_anno,1,b.m_annolen,f); |
121 | fwrite(&ln,sizeof(ln),1,f); | 178 | fwrite(&b.m_position,sizeof(b.m_position),1,f); |
122 | if (ln > 0) fwrite(an,sizeof(tchar),ln,f); | ||
123 | fwrite(&pos,sizeof(pos),1,f); | ||
124 | } | 179 | } |
125 | } | 180 | } |
126 | 181 | ||
127 | void BkmkFile::write(const Bkmk& b) { write(b.name(), b.anno(), b.value()); } | ||
128 | |||
129 | void BkmkFile::write(CList<Bkmk>& bl) | 182 | void BkmkFile::write(CList<Bkmk>& bl) |
130 | { | 183 | { |
131 | if (f != NULL) | 184 | if (f != NULL) |
132 | { | 185 | { |
133 | fwrite(&magic, sizeof(magic), 1, f); | 186 | fwrite(&magic, sizeof(magic), 1, f); |
134 | for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++) | 187 | for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++) |
135 | { | 188 | { |
136 | write(*i); | 189 | write(*i); |
137 | } | 190 | } |
138 | } | ||
139 | } | ||
140 | |||
141 | Bkmk* BkmkFile::read() | ||
142 | { | ||
143 | Bkmk* b = NULL; | ||
144 | if (f != NULL) | ||
145 | { | ||
146 | unsigned short ln; | ||
147 | if (fread(&ln,sizeof(ln),1,f) == 1) | ||
148 | { | ||
149 | b = new Bkmk; | ||
150 | b->m_name = new tchar[ln+1]; | ||
151 | fread(b->m_name,sizeof(tchar),ln,f); | ||
152 | b->m_name[ln] = 0; | ||
153 | |||
154 | fread(&ln,sizeof(ln),1,f); | ||
155 | b->m_anno = new tchar[ln+1]; | ||
156 | if (ln > 0) fread(b->m_anno,sizeof(tchar),ln,f); | ||
157 | b->m_anno[ln] = 0; | ||
158 | fread(&b->m_position,sizeof(b->m_position),1,f); | ||
159 | } | ||
160 | } | 191 | } |
161 | return b; | ||
162 | } | 192 | } |
163 | 193 | ||
164 | CList<Bkmk>* BkmkFile::readall() | 194 | CList<Bkmk>* BkmkFile::readall() |
165 | { | 195 | { |
166 | CList<Bkmk>* bl = NULL; | 196 | CList<Bkmk>* bl = NULL; |
167 | if (f != NULL) | 197 | if (f != NULL) |
168 | { | 198 | { |
169 | unsigned long newmagic; | 199 | unsigned long newmagic; |
170 | fread(&newmagic, sizeof(newmagic), 1, f); | 200 | fread(&newmagic, sizeof(newmagic), 1, f); |
171 | if (newmagic != magic) | 201 | if ((newmagic & 0xffffff00) != (magic & 0xffffff00)) |
172 | { | 202 | { |
173 | if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of OpieReader\ndid you upgrade from?", "0_4*", "Any other version") == 0) | 203 | if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of " PROGNAME "\ndid you upgrade from?", "0_4*", "Any other version") == 0) |
174 | { | 204 | { |
175 | fseek(f,0,SEEK_SET); | 205 | fseek(f,0,SEEK_SET); |
176 | bl = readall04(); | 206 | bl = readall00(&read05); |
177 | } | 207 | } |
178 | else | 208 | else |
179 | { | 209 | { |
180 | fseek(f,0,SEEK_SET); | 210 | fseek(f,0,SEEK_SET); |
181 | bl = readall03(); | 211 | bl = readall00(&read03); |
182 | } | 212 | } |
183 | isUpgraded = true; | 213 | isUpgraded = true; |
184 | } | 214 | } |
185 | else | 215 | else |
186 | { | 216 | { |
187 | bl = readall04(); | 217 | switch(newmagic & 0xff) |
188 | } | 218 | { |
219 | case 6: | ||
220 | isUpgraded = false; | ||
221 | bl = readall00(read06); | ||
222 | qDebug("Correct version!"); | ||
223 | break; | ||
224 | case 5: | ||
225 | isUpgraded = true; | ||
226 | bl = readall00(read05); | ||
227 | qDebug("Known version!"); | ||
228 | break; | ||
229 | default: | ||
230 | qDebug("Unknown version!"); | ||
231 | isUpgraded = true; | ||
232 | bl = readall00(read05); | ||
233 | } | ||
234 | } | ||
189 | } | 235 | } |
190 | return bl; | 236 | return bl; |
191 | } | 237 | } |
192 | 238 | ||
193 | CList<Bkmk>* BkmkFile::readall04() | 239 | CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*)) |
194 | { | 240 | { |
195 | CList<Bkmk>* bl = new CList<Bkmk>; | 241 | CList<Bkmk>* bl = new CList<Bkmk>; |
196 | while (1) | 242 | while (1) |
197 | { | 243 | { |
198 | Bkmk* b = read(); | 244 | Bkmk* b = (*readfn)(f); |
199 | if (b == NULL) break; | 245 | if (b == NULL) break; |
200 | bl->push_back(*b); | 246 | bl->push_back(*b); |
201 | delete b; | 247 | delete b; |
202 | } | 248 | } |
203 | return bl; | 249 | return bl; |
204 | } | 250 | } |
205 | 251 | ||
206 | CList<Bkmk>* BkmkFile::readall03() | 252 | Bkmk* BkmkFile::read03(FILE* f) |
207 | { | 253 | { |
208 | CList<Bkmk>* bl = new CList<Bkmk>; | 254 | Bkmk* b = NULL; |
209 | while (1) | 255 | if (f != NULL) |
210 | { | 256 | { |
211 | Bkmk* b = read03(); | 257 | unsigned short ln; |
212 | if (b == NULL) break; | 258 | if (fread(&ln,sizeof(ln),1,f) == 1) |
213 | bl->push_back(*b); | 259 | { |
214 | delete b; | 260 | tchar* name = new tchar[ln+1]; |
261 | fread(name,sizeof(tchar),ln,f); | ||
262 | name[ln] = 0; | ||
263 | |||
264 | ln = 0; | ||
265 | tchar* anno = new tchar[ln+1]; | ||
266 | anno[ln] = 0; | ||
267 | |||
268 | unsigned int pos; | ||
269 | fread(&pos,sizeof(pos),1,f); | ||
270 | b = new Bkmk(name,anno,pos); | ||
271 | } | ||
215 | } | 272 | } |
216 | return bl; | 273 | return b; |
217 | } | 274 | } |
218 | 275 | ||
219 | Bkmk* BkmkFile::read03() | 276 | Bkmk* BkmkFile::read05(FILE* f) |
220 | { | 277 | { |
221 | Bkmk* b = NULL; | 278 | Bkmk* b = NULL; |
222 | if (f != NULL) | 279 | if (f != NULL) |
223 | { | 280 | { |
224 | unsigned short ln; | 281 | unsigned short ln; |
225 | if (fread(&ln,sizeof(ln),1,f) == 1) | 282 | if (fread(&ln,sizeof(ln),1,f) == 1) |
226 | { | 283 | { |
227 | b = new Bkmk; | 284 | tchar* nm = new tchar[ln+1]; |
228 | b->m_name = new tchar[ln+1]; | 285 | fread(nm,sizeof(tchar),ln,f); |
229 | fread(b->m_name,sizeof(tchar),ln,f); | 286 | nm[ln] = 0; |
230 | b->m_name[ln] = 0; | 287 | fread(&ln,sizeof(ln),1,f); |
288 | tchar* anno = new tchar[ln+1]; | ||
289 | if (ln > 0) fread(anno,sizeof(tchar),ln,f); | ||
290 | anno[ln] = 0; | ||
291 | unsigned int pos; | ||
292 | fread(&pos,sizeof(pos),1,f); | ||
293 | b = new Bkmk(nm,anno,pos); | ||
294 | } | ||
295 | } | ||
296 | return b; | ||
297 | } | ||
231 | 298 | ||
232 | ln = 0; | 299 | Bkmk* BkmkFile::read06(FILE* f) |
233 | b->m_anno = new tchar[ln+1]; | 300 | { |
234 | b->m_anno[ln] = 0; | 301 | Bkmk* b = NULL; |
302 | if (f != NULL) | ||
303 | { | ||
304 | unsigned short ln; | ||
305 | if (fread(&ln,sizeof(ln),1,f) == 1) | ||
306 | { | ||
307 | b = new Bkmk; | ||
308 | b->m_namelen = ln; | ||
309 | b->m_name = new unsigned char[b->m_namelen]; | ||
310 | fread(b->m_name,1,b->m_namelen,f); | ||
235 | 311 | ||
236 | fread(&b->m_position,sizeof(b->m_position),1,f); | 312 | fread(&(b->m_annolen),sizeof(b->m_annolen),1,f); |
237 | } | 313 | if (b->m_annolen > 0) |
314 | { | ||
315 | b->m_anno = new unsigned char[b->m_annolen]; | ||
316 | fread(b->m_anno,1,b->m_annolen,f); | ||
317 | } | ||
318 | fread(&(b->m_position),sizeof(b->m_position),1,f); | ||
319 | } | ||
238 | } | 320 | } |
239 | return b; | 321 | return b; |
240 | } | 322 | } |
diff --git a/noncore/apps/opie-reader/Bkmks.h b/noncore/apps/opie-reader/Bkmks.h index b38184a..ee528e4 100644 --- a/noncore/apps/opie-reader/Bkmks.h +++ b/noncore/apps/opie-reader/Bkmks.h | |||
@@ -1,53 +1,70 @@ | |||
1 | #ifndef __Bkmks_h | 1 | #ifndef __Bkmks_h |
2 | #define __Bkmks_h | 2 | #define __Bkmks_h |
3 | 3 | ||
4 | #include "config.h" | 4 | #include "config.h" |
5 | #include "Filedata.h" | ||
5 | #include <stdio.h> | 6 | #include <stdio.h> |
6 | 7 | ||
7 | template<class T> | 8 | template<class T> |
8 | class CList; | 9 | class CList; |
9 | 10 | ||
10 | class Bkmk | 11 | class Bkmk |
11 | { | 12 | { |
12 | friend class BkmkFile; | 13 | friend class BkmkFile; |
13 | tchar* m_name; | 14 | unsigned char* m_name; |
14 | tchar* m_anno; | 15 | unsigned short m_namelen; |
16 | unsigned char* m_anno; | ||
17 | unsigned short m_annolen; | ||
15 | unsigned int m_position; | 18 | unsigned int m_position; |
19 | void init(const void*, unsigned short, const void*, unsigned short, unsigned int); | ||
16 | public: | 20 | public: |
17 | Bkmk() : m_name(NULL), m_anno(NULL), m_position(0) {}; | 21 | Bkmk() : m_name(NULL), m_namelen(0), m_anno(NULL), m_annolen(0), m_position(0) {}; |
22 | Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p); | ||
23 | Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short _annolen, unsigned int _p); | ||
18 | Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p); | 24 | Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p); |
19 | Bkmk(const Bkmk& rhs) : m_name(NULL), m_anno(NULL) | 25 | Bkmk(const Bkmk& rhs) : m_name(NULL), m_anno(NULL) |
20 | { | 26 | { |
21 | *this = rhs; | 27 | *this = rhs; |
22 | } | 28 | } |
23 | ~Bkmk(); | 29 | ~Bkmk(); |
24 | unsigned int value() const { return m_position; } | 30 | unsigned int value() const { return m_position; } |
25 | tchar *name() const { return m_name; } | 31 | void value(unsigned int _v) { m_position = _v; } |
26 | tchar *anno() const { return m_anno; } | 32 | tchar *name() const { return (tchar*)m_name; } |
33 | tchar *anno() const { return (tchar*)m_anno; } | ||
27 | bool operator<(const Bkmk& rhs) { return (m_position < rhs.m_position); } | 34 | bool operator<(const Bkmk& rhs) { return (m_position < rhs.m_position); } |
28 | Bkmk& operator=(const Bkmk& rhs); | 35 | Bkmk& operator=(const Bkmk& rhs); |
29 | bool operator==(const Bkmk& rhs); | 36 | bool operator==(const Bkmk& rhs); |
30 | void setAnno(tchar* t); | 37 | void setAnno(tchar* t); |
38 | void setAnno(unsigned char* t, unsigned short len); | ||
39 | unsigned char* filedata() | ||
40 | { | ||
41 | CFiledata fd(anno()); | ||
42 | return m_anno+fd.length(); | ||
43 | } | ||
44 | unsigned short filedatalen() | ||
45 | { | ||
46 | CFiledata fd(anno()); | ||
47 | return m_annolen - fd.length(); | ||
48 | } | ||
31 | }; | 49 | }; |
32 | 50 | ||
33 | class BkmkFile | 51 | class BkmkFile |
34 | { | 52 | { |
35 | FILE* f; | 53 | FILE* f; |
36 | bool wt; | 54 | bool wt; |
37 | bool isUpgraded; | 55 | bool isUpgraded; |
38 | static const unsigned long magic; | 56 | static const unsigned long magic; |
39 | private: | 57 | private: |
40 | Bkmk* read(); | 58 | static Bkmk* read06(FILE*); |
41 | Bkmk* read03(); | 59 | static Bkmk* read05(FILE*); |
42 | CList<Bkmk>* readall03(); | 60 | static Bkmk* read03(FILE*); |
43 | CList<Bkmk>* readall04(); | 61 | CList<Bkmk>* readall00(Bkmk*(*fn)(FILE*)); |
44 | void write(tchar* nm, tchar* an, const unsigned int& pos); | ||
45 | void write(const Bkmk& b); | 62 | void write(const Bkmk& b); |
46 | public: | 63 | public: |
47 | bool upgraded() { return isUpgraded; } | 64 | bool upgraded() { return isUpgraded; } |
48 | BkmkFile(const char *fnm, bool w = false); | 65 | BkmkFile(const char *fnm, bool w = false); |
49 | ~BkmkFile(); | 66 | ~BkmkFile(); |
50 | void write(CList<Bkmk>& bl); | 67 | void write(CList<Bkmk>& bl); |
51 | CList<Bkmk>* readall(); | 68 | CList<Bkmk>* readall(); |
52 | }; | 69 | }; |
53 | #endif | 70 | #endif |
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp index d4541ea..1123960 100644 --- a/noncore/apps/opie-reader/BuffDoc.cpp +++ b/noncore/apps/opie-reader/BuffDoc.cpp | |||
@@ -1,224 +1,356 @@ | |||
1 | #include "name.h" | ||
2 | |||
1 | #include "BuffDoc.h" | 3 | #include "BuffDoc.h" |
2 | //#include <FL/fl_draw.h> | 4 | //#include <FL/fl_draw.h> |
3 | #include "config.h" | 5 | #include "config.h" |
4 | #include "CDrawBuffer.h" | 6 | #include "CDrawBuffer.h" |
5 | #include "plucker.h" | 7 | #include "plucker.h" |
6 | 8 | ||
7 | 9 | ||
8 | bool BuffDoc::hyperlink(unsigned int n) | 10 | bool BuffDoc::hyperlink(unsigned int n) |
9 | { | 11 | { |
10 | bool bRet = false; | 12 | bool bRet = false; |
11 | lastword.empty(); | 13 | lastword.empty(); |
12 | lastsizes[0] = laststartline = n; | 14 | lastsizes[0] = laststartline = n; |
13 | lastispara = false; | 15 | lastispara = false; |
14 | if (exp != NULL) | 16 | if (exp != NULL) |
15 | { | 17 | { |
16 | bRet = exp->hyperlink(n); | 18 | bRet = exp->hyperlink(n); |
17 | lastsizes[0] = laststartline = exp->locate(); | 19 | lastsizes[0] = laststartline = exp->locate(); |
18 | } | 20 | } |
19 | return bRet; | 21 | return bRet; |
20 | } | 22 | } |
21 | 23 | ||
22 | void BuffDoc::locate(unsigned int n) | 24 | void BuffDoc::locate(unsigned int n) |
23 | { | 25 | { |
24 | // qDebug("BuffDoc:locating:%u",n); | 26 | // qDebug("BuffDoc:locating:%u",n); |
25 | lastword.empty(); | 27 | lastword.empty(); |
26 | lastsizes[0] = laststartline = n; | 28 | lastsizes[0] = laststartline = n; |
27 | lastispara = false; | 29 | lastispara = false; |
28 | // tchar linebuf[1024]; | 30 | // tchar linebuf[1024]; |
29 | if (exp != NULL) exp->locate(n); | 31 | if (exp != NULL) exp->locate(n); |
30 | // qDebug("BuffDoc:Located"); | 32 | // qDebug("BuffDoc:Located"); |
31 | } | 33 | } |
32 | 34 | ||
33 | bool BuffDoc::getline(CDrawBuffer* buff, int w) | 35 | #define NEWLINEBREAK |
36 | #ifdef NEWLINEBREAK | ||
37 | bool BuffDoc::getline(CDrawBuffer* buff, int wth) | ||
34 | { | 38 | { |
39 | bool moreleft = true; | ||
40 | bool margindone = false; | ||
41 | int w = wth-2*BORDER; | ||
35 | tchar ch = 32; | 42 | tchar ch = 32; |
36 | CStyle cs; | 43 | CStyle cs; |
37 | buff->empty(); | 44 | buff->empty(); |
38 | if (exp == NULL) | 45 | if (exp == NULL) |
39 | { | 46 | { |
40 | // (*buff)[0] = '\0'; | 47 | buff->empty(); |
41 | buff->empty(); | 48 | buff->setEof(); |
42 | return false; | 49 | return false; |
50 | } | ||
51 | int len = 0; | ||
52 | if (lastword.length() > 0) | ||
53 | { | ||
54 | *buff = lastword; | ||
55 | cs = lastword.laststyle(); | ||
56 | w -= buff->leftMargin() + buff->rightMargin(); | ||
57 | margindone = true; | ||
58 | len = lastword.length(); | ||
59 | } | ||
60 | else buff->empty(); | ||
61 | lastword.empty(); | ||
62 | unsigned int slen = buff->width(len); | ||
63 | lastispara = false; | ||
64 | while (1) | ||
65 | { | ||
66 | lastsizes[len] = exp->locate(); | ||
67 | getch(ch, cs); | ||
68 | if (ch == UEOF) | ||
69 | { | ||
70 | lastword.empty(); | ||
71 | if (len == 0) | ||
72 | { | ||
73 | buff->setEof(); | ||
74 | moreleft = false; | ||
75 | } | ||
76 | laststartline = exp->locate(); | ||
77 | break; | ||
78 | } | ||
79 | if (ch == 10) | ||
80 | { | ||
81 | lastword.empty(); | ||
82 | lastispara = true; | ||
83 | laststartline = exp->locate(); | ||
84 | break; | ||
85 | } | ||
86 | buff->addch(ch, cs); | ||
87 | len++; | ||
88 | if (!margindone) | ||
89 | { | ||
90 | w -= buff->leftMargin() + buff->rightMargin(); | ||
91 | margindone = true; | ||
92 | } | ||
93 | if ((slen = buff->width(len)) > w) | ||
94 | { | ||
95 | if (ch == ' ' || len == 1) | ||
96 | { | ||
97 | lastword.empty(); | ||
98 | laststartline = exp->locate(); | ||
99 | break; | ||
100 | } | ||
101 | else // should do a backward search for spaces, first. | ||
102 | { | ||
103 | for (int i = len-1; i > 0; i--) | ||
104 | { | ||
105 | if ((*buff)[i] == ' ') | ||
106 | { | ||
107 | (*buff)[len] = 0; | ||
108 | lastword.setright(*buff, i+1); | ||
109 | buff->truncate(i); | ||
110 | (*buff)[i] = '\0'; | ||
111 | laststartline = lastsizes[i+1]; | ||
112 | buff->resize(); | ||
113 | for (int j = 0; j < lastword.length(); j++) | ||
114 | { | ||
115 | lastsizes[j] = lastsizes[j+i+1]; | ||
116 | } | ||
117 | return true; | ||
118 | } | ||
119 | } | ||
120 | laststartline = lastsizes[len-1]; | ||
121 | lastword.setright(*buff, len - 1); | ||
122 | buff->truncate(len-1); | ||
123 | buff->addch('-', cs); | ||
124 | for (int j = 0; j < lastword.length(); j++) | ||
125 | { | ||
126 | lastsizes[j] = lastsizes[j+len]; | ||
127 | } | ||
128 | break; | ||
129 | } | ||
130 | } | ||
131 | } | ||
132 | (*buff)[len] = '\0'; | ||
133 | buff->resize(); | ||
134 | return moreleft; | ||
135 | } | ||
136 | #else | ||
137 | bool BuffDoc::getline(CDrawBuffer* buff, int wth) | ||
138 | { | ||
139 | bool margindone = false; | ||
140 | int w = wth-2*BORDER; | ||
141 | tchar ch = 32; | ||
142 | CStyle cs; | ||
143 | buff->empty(); | ||
144 | if (exp == NULL) | ||
145 | { | ||
146 | //(*buff)[0] = '\0'; | ||
147 | buff->empty(); | ||
148 | return false; | ||
43 | } | 149 | } |
44 | int len = 0, lastcheck = 0; | 150 | int len = 0, lastcheck = 0; |
45 | if (lastword.length() > 0) | 151 | if (lastword.length() > 0) |
46 | { | 152 | { |
47 | *buff = lastword; | 153 | *buff = lastword; |
48 | cs = lastword.laststyle(); | 154 | cs = lastword.laststyle(); |
155 | w -= buff->leftMargin() + buff->rightMargin(); | ||
156 | margindone = true; | ||
49 | } | 157 | } |
50 | else buff->empty(); | 158 | else buff->empty(); |
51 | // qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data())); | 159 | // qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data())); |
52 | lastcheck = len = buff->length(); | 160 | lastcheck = len = buff->length(); |
53 | unsigned int slen = buff->width(len); | 161 | unsigned int slen = buff->width(len); |
54 | if (slen > w) | 162 | if (slen > w) |
55 | { | 163 | { |
56 | for ( ; len > 0; len--) | 164 | for ( ; len > 1; len--) |
57 | { | 165 | { |
58 | if (buff->width(len) < w) break; | 166 | if (buff->width(len) < w) break; |
59 | } | 167 | } |
60 | // lastword = buff->data() + len - 1; | 168 | // lastword = buff->data() + len - 1; |
61 | laststartline = lastsizes[len-1]; | 169 | laststartline = lastsizes[len-1]; |
62 | lastword.setright(*buff, len - 1); | ||
63 | for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1]; | 170 | for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1]; |
64 | // (*buff)[len-1] = '-'; | 171 | // (*buff)[len-1] = '-'; |
65 | buff->truncate(len-1); | 172 | if (len > 2) |
66 | buff->addch('-', cs); | 173 | { |
67 | (*buff)[len] = '\0'; | 174 | lastword.setright(*buff, len - 1); |
175 | buff->truncate(len-1); | ||
176 | buff->addch('-', cs); | ||
177 | (*buff)[len] = '\0'; | ||
178 | } | ||
179 | |||
180 | else | ||
181 | { | ||
182 | lastword.empty(); | ||
183 | (*buff)[len] = '\0'; | ||
184 | } | ||
185 | buff->resize(); | ||
68 | return true; | 186 | return true; |
69 | } | 187 | } |
70 | if (lastispara) | 188 | if (lastispara) |
71 | { | 189 | { |
72 | lastispara = false; | 190 | lastispara = false; |
73 | // lastword[0] = '\0'; | 191 | // lastword[0] = '\0'; |
74 | lastword.empty(); | 192 | lastword.empty(); |
75 | len = buff->length(); | 193 | len = buff->length(); |
76 | while (buff->width(len) > w) len--; | 194 | while (buff->width(len) > w) len--; |
77 | // (*buff)[len] = '\0'; | 195 | // (*buff)[len] = '\0'; |
78 | buff->truncate(len); | 196 | buff->truncate(len); |
79 | laststartline = exp->locate(); | 197 | laststartline = exp->locate(); |
198 | buff->resize(); | ||
80 | return true; | 199 | return true; |
81 | } | 200 | } |
82 | lastispara = false; | 201 | lastispara = false; |
83 | for (int i = 0; i < len; i++) allsizes[i] = lastsizes[i]; | 202 | for (int i = 0; i < len; i++) allsizes[i] = lastsizes[i]; |
84 | while (slen < w) | 203 | while (slen < w) |
85 | { | 204 | { |
86 | lastcheck = len; | 205 | lastcheck = len; |
87 | allsizes[len] = exp->locate(); | 206 | allsizes[len] = exp->locate(); |
88 | getch(ch, cs); | 207 | getch(ch, cs); |
89 | while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128) | 208 | while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128) |
90 | { | 209 | { |
91 | len++; | 210 | len++; |
92 | buff->addch(ch,cs); | 211 | buff->addch(ch,cs); |
93 | allsizes[len] = exp->locate(); | 212 | allsizes[len] = exp->locate(); |
94 | getch(ch, cs); | 213 | getch(ch, cs); |
95 | } | 214 | } |
96 | (*buff)[len] = 0; | 215 | (*buff)[len] = 0; |
97 | slen = buff->width(len); | 216 | slen = buff->width(len); |
98 | len++; | 217 | len++; |
99 | buff->addch(' ', cs); | 218 | buff->addch(' ', cs); |
219 | if (!margindone) | ||
220 | { | ||
221 | w -= buff->leftMargin() + buff->rightMargin(); | ||
222 | margindone = true; | ||
223 | } | ||
100 | allsizes[len] = exp->locate(); | 224 | allsizes[len] = exp->locate(); |
101 | if (slen < w && ch != ' ') | 225 | if (slen < w && ch != ' ') |
102 | { | 226 | { |
103 | lastcheck = len; | 227 | lastcheck = len; |
104 | break; | 228 | break; |
105 | } | 229 | } |
106 | lastispara = (ch == '\012'); | 230 | lastispara = (ch == '\012'); |
107 | } | 231 | } |
108 | (*buff)[len] = '\0'; | 232 | (*buff)[len] = '\0'; |
109 | // lastword = buff->data()+lastcheck; | 233 | // lastword = buff->data()+lastcheck; |
110 | lastword.setright(*buff, lastcheck); | 234 | #ifdef WINDOWS |
235 | lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1); | ||
236 | { | ||
237 | int i; | ||
238 | for (i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; | ||
239 | } | ||
240 | #else | ||
241 | lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1); | ||
111 | for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; | 242 | for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; |
243 | #endif | ||
112 | if (lastcheck > 0) | 244 | if (lastcheck > 0) |
113 | { | 245 | { |
114 | laststartline = allsizes[lastcheck]; | 246 | laststartline = allsizes[lastcheck]; |
115 | // (*buff)[lastcheck-1] = '\0'; | 247 | // (*buff)[lastcheck-1] = '\0'; |
116 | buff->truncate(lastcheck-1); | 248 | buff->truncate(lastcheck-1); |
117 | } | 249 | } |
118 | else | 250 | else |
119 | { | 251 | { |
120 | laststartline = (lastcheck == len) ? exp->locate() : allsizes[lastcheck+1]; | 252 | laststartline = (lastcheck == len) ? exp->locate() : allsizes[lastcheck+1]; |
121 | // (*buff)[lastcheck] = '\0'; | 253 | // (*buff)[lastcheck] = '\0'; |
122 | buff->truncate(lastcheck); | 254 | buff->truncate(lastcheck); |
123 | } | 255 | } |
124 | // buff->frig(); | 256 | // buff->frig(); |
125 | return (ch != UEOF); | 257 | buff->resize(); |
258 | if (ch == UEOF && buff->length() == 0) | ||
259 | { | ||
260 | buff->setEof(); | ||
261 | return false; | ||
262 | } | ||
263 | return true; | ||
126 | } | 264 | } |
265 | #endif | ||
127 | 266 | ||
128 | bool BuffDoc::getline(CDrawBuffer* buff, int w, int cw) | 267 | bool BuffDoc::getline(CDrawBuffer* buff, int wth, int cw) |
129 | { | 268 | { |
269 | int w = wth-2*BORDER; | ||
130 | buff->empty(); | 270 | buff->empty(); |
131 | if (exp == NULL) | 271 | if (exp == NULL) |
132 | { | 272 | { |
133 | return false; | 273 | return false; |
134 | } | 274 | } |
135 | tchar ch; | 275 | tchar ch; |
136 | CStyle cs; | 276 | CStyle cs; |
137 | int i = 0; | 277 | int i = 0; |
138 | while (i*cw < w) | 278 | while (i*cw < w) |
139 | { | 279 | { |
140 | getch(ch, cs); | 280 | getch(ch, cs); |
141 | if (ch == '\12' || ch == UEOF) break; | 281 | if (ch == '\12' || ch == UEOF) break; |
142 | buff->addch(ch,cs); | 282 | buff->addch(ch,cs); |
143 | i++; | 283 | i++; |
144 | } | 284 | } |
145 | buff->truncate(i); | 285 | buff->truncate(i); |
146 | laststartline = exp->locate(); | 286 | laststartline = exp->locate(); |
287 | buff->resize(); | ||
147 | return (ch != UEOF); | 288 | return (ch != UEOF); |
148 | } | 289 | } |
149 | 290 | ||
150 | int BuffDoc::openfile(QWidget* _parent, const char *src) | 291 | int BuffDoc::openfile(QWidget* _parent, const char *src) |
151 | { | 292 | { |
152 | // qDebug("BuffDoc:Openfile:%s", src); | 293 | // qDebug("BuffDoc:Openfile:%s", src); |
153 | // qDebug("Trying aportis %x",exp); | 294 | // qDebug("Trying aportis %x",exp); |
154 | if (exp != NULL) delete exp; | 295 | if (exp != NULL) delete exp; |
155 | lastword.empty(); | 296 | lastword.empty(); |
156 | lastsizes[0] = laststartline = 0; | 297 | lastsizes[0] = laststartline = 0; |
157 | lastispara = false; | 298 | lastispara = false; |
158 | /* | 299 | /* |
159 | exp = new Text; | 300 | exp = new Text; |
160 | int ret = exp->openfile(src); | 301 | int ret = exp->openfile(src); |
161 | */ | 302 | */ |
162 | 303 | ||
163 | exp = new Aportis; | 304 | exp = new Aportis; |
164 | int ret = exp->openfile(src); | 305 | int ret = exp->openfile(src); |
165 | if (ret == -1) | 306 | if (ret == -1) |
166 | { | 307 | { |
167 | delete exp; | 308 | delete exp; |
168 | exp = NULL; | 309 | exp = NULL; |
169 | return ret; | 310 | return ret; |
170 | } | 311 | } |
171 | if (ret == -2) | 312 | if (ret == -2) |
172 | { | 313 | { |
173 | 314 | ||
174 | delete exp; | 315 | delete exp; |
175 | exp = new ztxt; | 316 | exp = new ztxt; |
176 | ret = exp->openfile(src); | 317 | ret = exp->openfile(src); |
177 | } | 318 | } |
178 | if (ret != 0) | 319 | if (ret != 0) |
179 | { | 320 | { |
180 | 321 | ||
181 | delete exp; | 322 | delete exp; |
182 | exp = new CPlucker; | 323 | exp = new CPlucker; |
183 | ret = exp->openfile(src); | 324 | ret = exp->openfile(src); |
184 | } | 325 | } |
185 | #ifndef SMALL | ||
186 | if (ret != 0) | 326 | if (ret != 0) |
187 | { | 327 | { |
188 | delete exp; | 328 | delete exp; |
189 | qDebug("Trying ppms"); | 329 | qDebug("Trying ppms"); |
190 | exp = new ppm_expander; | 330 | exp = new ppm_expander; |
191 | ret = exp->openfile(src); | 331 | ret = exp->openfile(src); |
192 | } | 332 | } |
193 | |||
194 | if (ret != 0) | 333 | if (ret != 0) |
195 | { | 334 | { |
196 | delete exp; | 335 | delete exp; |
197 | exp = new Text; | 336 | exp = new Text; |
198 | // qDebug("Trying text"); | 337 | // qDebug("Trying text"); |
199 | ret = exp->openfile(src); | 338 | ret = exp->openfile(src); |
200 | } | 339 | } |
201 | #else | 340 | |
202 | if (ret != 0) | ||
203 | { | ||
204 | delete exp; | ||
205 | exp = new Text; | ||
206 | ret = exp->openfile(src); | ||
207 | } | ||
208 | #endif | ||
209 | if (ret != 0) | 341 | if (ret != 0) |
210 | { | 342 | { |
211 | delete exp; | 343 | delete exp; |
212 | QMessageBox::information(_parent, "OpieReader", "Unknown file compression type","Try another file"); | 344 | QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file"); |
213 | return ret; | 345 | return ret; |
214 | } | 346 | } |
215 | // qDebug("Doing final open:%x:%x",exp,filt); | 347 | // qDebug("Doing final open:%x:%x",exp,filt); |
216 | 348 | ||
217 | lastword.empty(); | 349 | lastword.empty(); |
218 | lastsizes[0] = laststartline = 0; | 350 | lastsizes[0] = laststartline = 0; |
219 | lastispara = false; | 351 | lastispara = false; |
220 | exp->locate(0); | 352 | exp->locate(0); |
221 | filt->setsource(exp); | 353 | filt->setsource(exp); |
222 | // qDebug("BuffDoc:file opened"); | 354 | // qDebug("BuffDoc:file opened"); |
223 | return 0; | 355 | return 0; |
224 | } | 356 | } |
diff --git a/noncore/apps/opie-reader/BuffDoc.h b/noncore/apps/opie-reader/BuffDoc.h index 1aac817..78d8457 100644 --- a/noncore/apps/opie-reader/BuffDoc.h +++ b/noncore/apps/opie-reader/BuffDoc.h | |||
@@ -1,84 +1,114 @@ | |||
1 | #ifndef __BuffDoc_h | 1 | #ifndef __BuffDoc_h |
2 | #define __BuffDoc_h | 2 | #define __BuffDoc_h |
3 | 3 | ||
4 | #include "ZText.h" | 4 | #include "ZText.h" |
5 | #include "Aportis.h" | 5 | #include "Aportis.h" |
6 | #include "ztxt.h" | 6 | #include "ztxt.h" |
7 | #include "ppm_expander.h" | 7 | #include "ppm_expander.h" |
8 | #include "CDrawBuffer.h" | 8 | #include "CDrawBuffer.h" |
9 | #include "CFilter.h" | 9 | #include "CFilter.h" |
10 | #include <qfontmetrics.h> | 10 | #include <qfontmetrics.h> |
11 | #include <qmessagebox.h> | 11 | #include <qmessagebox.h> |
12 | 12 | ||
13 | class BuffDoc | 13 | class BuffDoc |
14 | { | 14 | { |
15 | CDrawBuffer lastword; | 15 | CDrawBuffer lastword; |
16 | CSizeBuffer lastsizes, allsizes; | 16 | CSizeBuffer lastsizes, allsizes; |
17 | size_t laststartline; | 17 | size_t laststartline; |
18 | bool lastispara; | 18 | bool lastispara; |
19 | CExpander* exp; | 19 | CExpander* exp; |
20 | CFilterChain* filt; | 20 | CFilterChain* filt; |
21 | public: | 21 | public: |
22 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) | ||
23 | { | ||
24 | if (exp == NULL) | ||
25 | { | ||
26 | data = NULL; | ||
27 | len = 0; | ||
28 | } | ||
29 | else | ||
30 | { | ||
31 | exp->setSaveData(data, len, src, srclen); | ||
32 | } | ||
33 | } | ||
34 | void putSaveData(unsigned char*& src, unsigned short& srclen) | ||
35 | { | ||
36 | if (exp != NULL) | ||
37 | { | ||
38 | exp->putSaveData(src, srclen); | ||
39 | } | ||
40 | } | ||
41 | void suspend() { if (exp != NULL) exp->suspend(); } | ||
42 | void unsuspend() { if (exp != NULL) exp->unsuspend(); } | ||
22 | ~BuffDoc() | 43 | ~BuffDoc() |
23 | { | 44 | { |
24 | delete filt; | 45 | delete filt; |
25 | delete exp; | 46 | delete exp; |
26 | } | 47 | } |
27 | BuffDoc() | 48 | BuffDoc() |
28 | { | 49 | { |
29 | exp = NULL; | 50 | exp = NULL; |
30 | filt = NULL; | 51 | filt = NULL; |
31 | lastword.empty(); | 52 | lastword.empty(); |
32 | // qDebug("Buffdoc created"); | 53 | // qDebug("Buffdoc created"); |
33 | } | 54 | } |
34 | bool empty() { return (exp == NULL); } | 55 | bool empty() { return (exp == NULL); } |
35 | void setfilter(CFilterChain* _f) | 56 | void setfilter(CFilterChain* _f) |
36 | { | 57 | { |
37 | if (filt != NULL) delete filt; | 58 | if (filt != NULL) delete filt; |
38 | filt = _f; | 59 | filt = _f; |
39 | filt->setsource(exp); | 60 | filt->setsource(exp); |
40 | } | 61 | } |
41 | CList<Bkmk>* getbkmklist() { return exp->getbkmklist(); } | 62 | CList<Bkmk>* getbkmklist() { return exp->getbkmklist(); } |
42 | bool hasrandomaccess() { return (exp == NULL) ? false : exp->hasrandomaccess(); } | 63 | bool hasrandomaccess() { return (exp == NULL) ? false : exp->hasrandomaccess(); } |
43 | bool iseol() { return (lastword[0] == '\0'); } | 64 | bool iseol() { return (lastword[0] == '\0'); } |
44 | int openfile(QWidget* _parent, const char *src); | 65 | int openfile(QWidget* _parent, const char *src); |
45 | tchar getch() | 66 | tchar getch() |
46 | { | 67 | { |
47 | tchar ch = UEOF; | 68 | tchar ch = UEOF; |
48 | CStyle sty; | 69 | CStyle sty; |
49 | if (exp != NULL) | 70 | if (exp != NULL) |
50 | { | 71 | { |
51 | filt->getch(ch, sty); | 72 | filt->getch(ch, sty); |
52 | } | 73 | } |
53 | return ch; | 74 | return ch; |
54 | } | 75 | } |
55 | void getch(tchar& ch, CStyle& sty) | 76 | void getch(tchar& ch, CStyle& sty) |
56 | { | 77 | { |
57 | if (exp != NULL) | 78 | if (exp != NULL) |
58 | { | 79 | { |
59 | filt->getch(ch, sty); | 80 | filt->getch(ch, sty); |
60 | } | 81 | } |
61 | else | 82 | else |
62 | ch = UEOF; | 83 | ch = UEOF; |
63 | } | 84 | } |
85 | QPixmap* getPicture(unsigned long tgt) { return (exp == NULL) ? NULL : exp->getPicture(tgt); } | ||
86 | unsigned int startSection() { return (exp == NULL) ? 0 : exp->startSection(); } | ||
87 | unsigned int endSection() { return (exp == NULL) ? 0 : exp->endSection(); } | ||
64 | unsigned int locate() { return (exp == NULL) ? 0 : laststartline; } | 88 | unsigned int locate() { return (exp == NULL) ? 0 : laststartline; } |
65 | unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); } | 89 | unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); } |
90 | void setContinuous(bool _b) { if (exp != NULL) exp->setContinuous(_b); } | ||
66 | MarkupType PreferredMarkup() { return (exp == NULL) ? cTEXT : exp->PreferredMarkup(); } | 91 | MarkupType PreferredMarkup() { return (exp == NULL) ? cTEXT : exp->PreferredMarkup(); } |
67 | bool hyperlink(unsigned int n); | 92 | bool hyperlink(unsigned int n); |
93 | size_t getHome() { return ((exp != NULL) ? exp->getHome() : 0); } | ||
68 | void locate(unsigned int n); | 94 | void locate(unsigned int n); |
69 | bool getline(CDrawBuffer* buff, int w); | 95 | bool getline(CDrawBuffer* buff, int w); |
70 | bool getline(CDrawBuffer* buff, int w, int cw); | 96 | bool getline(CDrawBuffer* buff, int w, int cw); |
71 | void sizes(unsigned long& fs, unsigned long& ts) { exp->sizes(fs,ts); } | 97 | void sizes(unsigned long& fs, unsigned long& ts) { exp->sizes(fs,ts); } |
72 | int getpara(CBuffer& buff) | 98 | int getpara(CBuffer& buff) |
73 | { | 99 | { |
74 | tchar ch; | 100 | tchar ch; |
75 | int i = 0; | 101 | int i = 0; |
76 | while ((ch = getch()) != 10 && ch != UEOF) buff[i++] = ch; | 102 | while ((ch = getch()) != 10 && ch != UEOF) buff[i++] = ch; |
77 | buff[i] = '\0'; | 103 | buff[i] = '\0'; |
78 | if (i == 0 && ch == UEOF) i = -1; | 104 | if (i == 0 && ch == UEOF) i = -1; |
79 | laststartline = exp->locate(); | 105 | laststartline = exp->locate(); |
80 | return i; | 106 | return i; |
81 | } | 107 | } |
108 | void saveposn(size_t posn) { exp->saveposn(posn); } | ||
109 | bool forward(size_t& loc) { return exp->forward(loc); } | ||
110 | bool back(size_t& loc) { return exp->back(loc); } | ||
111 | bool hasnavigation() { return exp->hasnavigation(); } | ||
82 | }; | 112 | }; |
83 | 113 | ||
84 | #endif | 114 | #endif |
diff --git a/noncore/apps/opie-reader/CBuffer.cpp b/noncore/apps/opie-reader/CBuffer.cpp index 0780a88..526b25f 100644 --- a/noncore/apps/opie-reader/CBuffer.cpp +++ b/noncore/apps/opie-reader/CBuffer.cpp | |||
@@ -1,46 +1,46 @@ | |||
1 | #include "CBuffer.h" | 1 | #include "CBuffer.h" |
2 | 2 | ||
3 | CBufferBase& CBufferBase::assign(const void* sztmp, size_t ms) | 3 | CBufferBase& 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, ms*membersize); |
11 | return *this; | 11 | return *this; |
12 | } | 12 | } |
13 | 13 | ||
14 | CBufferBase::CBufferBase(size_t ms, size_t n) : len(n), membersize(ms) | 14 | CBufferBase::CBufferBase(size_t ms, size_t n = 16) : len(n), membersize(ms) |
15 | { | 15 | { |
16 | buffer = new unsigned char[len*membersize]; | 16 | buffer = new unsigned char[len*membersize]; |
17 | memset(buffer, 0, len*membersize); | 17 | memset(buffer, 0, len*membersize); |
18 | } | 18 | } |
19 | 19 | ||
20 | void* CBufferBase::operator[](int i) | 20 | void* 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 | ||
34 | size_t CBufferBase::bstrlen(unsigned char* _buffer) | 34 | size_t CBufferBase::bstrlen(unsigned char* _buffer = NULL) |
35 | { | 35 | { |
36 | if (_buffer == NULL) _buffer = buffer; | 36 | if (_buffer == NULL) _buffer = buffer; |
37 | unsigned char* zero = new unsigned char[membersize]; | 37 | unsigned char* zero = new unsigned char[membersize]; |
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 892456f..ca220e6 100644 --- a/noncore/apps/opie-reader/CDrawBuffer.cpp +++ b/noncore/apps/opie-reader/CDrawBuffer.cpp | |||
@@ -1,211 +1,379 @@ | |||
1 | |||
2 | #include "CDrawBuffer.h" | 1 | #include "CDrawBuffer.h" |
3 | #include "FontControl.h" | 2 | #include "FontControl.h" |
4 | #include <qfontmetrics.h> | 3 | #include <qfontmetrics.h> |
5 | #include <qpainter.h> | 4 | #include <qpainter.h> |
5 | #include <qpixmap.h> | ||
6 | #include "opie.h" | ||
7 | |||
8 | CDrawBuffer::~CDrawBuffer() | ||
9 | { | ||
10 | while (!segs.isEmpty()) segs.erase(0); | ||
11 | } | ||
6 | 12 | ||
7 | void CDrawBuffer::setright(CDrawBuffer& rhs, int f) | 13 | void CDrawBuffer::setright(CDrawBuffer& rhs, int f) |
8 | { | 14 | { |
9 | int i; | 15 | int i; |
10 | // qDebug("Trying 1:%d:%s", f, (const char*)toQString(rhs.data())); | ||
11 | len = rhs.len; | 16 | len = rhs.len; |
12 | m_maxstyle = rhs.m_maxstyle; | 17 | fc = rhs.fc; |
13 | m_ascent = rhs.m_ascent; | 18 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; |
14 | m_descent = rhs.m_descent; | 19 | while (!segs.isEmpty()) |
15 | m_lineSpacing = rhs.m_lineSpacing; | 20 | { |
16 | while (!segs.isEmpty()) segs.erase(0); | 21 | segs.erase(0); |
22 | } | ||
17 | for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); ) | 23 | for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); ) |
18 | { | 24 | { |
19 | CList<textsegment>::iterator next = iter; | 25 | CList<textsegment>::iterator next = iter; |
20 | iter++; | 26 | iter++; |
21 | if (iter == rhs.segs.end() || iter->start > f) | 27 | if (iter == rhs.segs.end() || iter->start > f) |
22 | { | 28 | { |
23 | int st = next->start-f; | 29 | int st = next->start-f; |
24 | if (st < 0) st = 0; | 30 | if (st < 0) st = 0; |
31 | |||
32 | CStyle _style = next->style; | ||
33 | |||
25 | segs.push_back(textsegment(st,next->style)); | 34 | segs.push_back(textsegment(st,next->style)); |
26 | } | 35 | } |
27 | } | 36 | } |
28 | for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i]; | 37 | for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i]; |
29 | (*this)[i-f] = '\0'; | 38 | (*this)[i-f] = '\0'; |
30 | len = i; | 39 | len = i; |
31 | // qDebug("Tried 1"); | ||
32 | } | 40 | } |
33 | 41 | ||
34 | CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs) | 42 | CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs) |
35 | { | 43 | { |
36 | int i; | 44 | int i; |
37 | // qDebug("Trying 2"); | 45 | // qDebug("Trying 2"); |
38 | len = rhs.len; | 46 | len = rhs.len; |
39 | m_maxstyle = rhs.m_maxstyle; | 47 | m_maxstyle = rhs.m_maxstyle; |
40 | m_ascent = rhs.m_ascent; | 48 | m_ascent = rhs.m_ascent; |
41 | m_descent = rhs.m_descent; | 49 | m_descent = rhs.m_descent; |
42 | m_lineSpacing = rhs.m_lineSpacing; | 50 | m_lineSpacing = rhs.m_lineSpacing; |
43 | while (!segs.isEmpty()) segs.erase(0); | 51 | m_lineExtraSpacing = rhs.m_lineExtraSpacing; |
52 | while (!segs.isEmpty()) | ||
53 | { | ||
54 | segs.erase(0); | ||
55 | } | ||
44 | for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++) | 56 | for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++) |
45 | { | 57 | { |
46 | segs.push_back(*iter); | 58 | segs.push_back(*iter); |
47 | } | 59 | } |
48 | for (i = 0; rhs[i] != '\0'; i++) (*this)[i] = rhs[i]; | 60 | for (i = 0; rhs[i] != '\0'; i++) (*this)[i] = rhs[i]; |
49 | (*this)[i] = '\0'; | 61 | (*this)[i] = '\0'; |
50 | len = i; | 62 | len = i; |
51 | // qDebug("Tried 2"); | 63 | // qDebug("Tried 2"); |
52 | return *this; | 64 | return *this; |
53 | } | 65 | } |
54 | 66 | ||
55 | CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp) | 67 | CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp) |
56 | { | 68 | { |
57 | int i; | 69 | int i; |
58 | while (!segs.isEmpty()) segs.erase(0); | 70 | while (!segs.isEmpty()) |
71 | { | ||
72 | segs.erase(0); | ||
73 | } | ||
59 | segs.push_back(textsegment(0, CStyle())); | 74 | segs.push_back(textsegment(0, CStyle())); |
60 | for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i]; | 75 | for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i]; |
61 | (*this)[i] = '\0'; | 76 | (*this)[i] = '\0'; |
62 | len = i; | 77 | len = i; |
63 | return *this; | 78 | return *this; |
64 | } | 79 | } |
65 | 80 | ||
66 | void CDrawBuffer::empty() | 81 | void CDrawBuffer::empty() |
67 | { | 82 | { |
68 | len = 0; | 83 | len = 0; |
69 | (*this)[0] = 0; | 84 | (*this)[0] = 0; |
70 | while (!segs.isEmpty()) segs.erase(0); | 85 | while (!segs.isEmpty()) |
86 | { | ||
87 | segs.erase(0); | ||
88 | } | ||
71 | segs.push_back(textsegment(0,CStyle())); | 89 | segs.push_back(textsegment(0,CStyle())); |
72 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = 0; | 90 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; |
91 | m_bEof = false; | ||
73 | } | 92 | } |
74 | 93 | ||
75 | void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/) | 94 | void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/) |
76 | { | 95 | { |
77 | if (len == 0) | 96 | if (len == 0) |
78 | { | 97 | { |
79 | int thissize = fc->getsize(_style); | ||
80 | m_maxstyle = thissize; | ||
81 | m_ascent = fc->ascent(_style); | ||
82 | m_descent = fc->descent(_style); | ||
83 | m_lineSpacing = fc->lineSpacing(_style); | ||
84 | segs.first().start = 0; | 98 | segs.first().start = 0; |
85 | segs.first().style = _style; | 99 | segs.first().style = _style; |
86 | } | 100 | } |
87 | else if (_style != segs.last().style) | 101 | else if (_style != segs.last().style) |
88 | { | 102 | { |
89 | int thissize = fc->getsize(_style); | ||
90 | if (thissize > m_maxstyle) | ||
91 | { | ||
92 | m_maxstyle = thissize; | ||
93 | m_ascent = fc->ascent(_style); | ||
94 | m_descent = fc->descent(_style); | ||
95 | m_lineSpacing = fc->lineSpacing(_style); | ||
96 | } | ||
97 | segs.push_back(textsegment(len, _style)); | 103 | segs.push_back(textsegment(len, _style)); |
98 | } | 104 | } |
99 | (*this)[len++] = ch; | 105 | (*this)[len++] = ch; |
100 | } | 106 | } |
101 | 107 | ||
102 | void CDrawBuffer::truncate(int n) | 108 | void CDrawBuffer::truncate(int n) |
103 | { | 109 | { |
104 | len = n; | 110 | len = n; |
105 | (*this)[n] = 0; | 111 | (*this)[n] = 0; |
106 | } | 112 | } |
107 | 113 | ||
108 | int CDrawBuffer::width(int numchars) | 114 | int CDrawBuffer::width(int numchars) |
109 | { | 115 | { |
110 | int currentx = 0, end = 0; | 116 | int currentx = 0, end = 0; |
111 | QString text = toQString(data()); | 117 | QString text = toQString(data()); |
112 | CList<textsegment>::iterator textstart = segs.begin(); | 118 | CList<textsegment>::iterator textstart = segs.begin(); |
113 | CList<textsegment>::iterator textend = textstart; | 119 | CList<textsegment>::iterator textend = textstart; |
114 | do | 120 | do |
115 | { | 121 | { |
116 | textend++; | 122 | textend++; |
117 | end = (textend != segs.end()) ? textend->start : length(); | 123 | end = (textend != segs.end()) ? textend->start : length(); |
118 | if (numchars >= 0 && end > numchars) | 124 | if (numchars >= 0 && end > numchars) |
119 | { | 125 | { |
120 | end = numchars; | 126 | end = numchars; |
121 | } | 127 | } |
122 | CStyle currentstyle = textstart->style; | 128 | CStyle currentstyle = textstart->style; |
123 | QFont f(fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); | 129 | if (currentstyle.isPicture()) |
124 | QString str = text.mid(textstart->start, end-textstart->start); | 130 | { |
125 | QFontMetrics fm(f); | 131 | currentx += currentstyle.getPicture()->width(); |
126 | currentx += fm.width(str); | 132 | } |
133 | else | ||
134 | { | ||
135 | if (currentstyle.isMono() && !fc->hasCourier()) | ||
136 | { | ||
137 | int cw = (7*fc->getsize(currentstyle))/10; | ||
138 | currentx += cw*(end-textstart->start); | ||
139 | } | ||
140 | else | ||
141 | { | ||
142 | QFont f(currentstyle.isMono() ? QString("courier") : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); | ||
143 | // f.setUnderline(currentstyle.isUnderline()); | ||
144 | QString str = text.mid(textstart->start, end-textstart->start); | ||
145 | QFontMetrics fm(f); | ||
146 | currentx += fm.width(str); | ||
147 | } | ||
148 | } | ||
127 | textstart = textend; | 149 | textstart = textend; |
128 | } | 150 | } |
129 | while (textend != segs.end() && end != numchars); | 151 | while (textend != segs.end() && end != numchars); |
130 | return currentx; | 152 | return currentx; |
131 | } | 153 | } |
132 | 154 | ||
155 | int CDrawBuffer::leftMargin() | ||
156 | { | ||
157 | return (segs.begin()->style.getLeftMargin()*fc->getsize(segs.begin()->style))/6; | ||
158 | } | ||
159 | |||
160 | int CDrawBuffer::rightMargin() | ||
161 | { | ||
162 | return (segs.begin()->style.getRightMargin()*fc->getsize(segs.begin()->style))/6; | ||
163 | } | ||
164 | |||
165 | int CDrawBuffer::offset(int scwidth) | ||
166 | { | ||
167 | int currentx = BORDER; | ||
168 | switch(segs.begin()->style.getJustify()) | ||
169 | { | ||
170 | case m_AlignRight: | ||
171 | { | ||
172 | currentx = scwidth - BORDER - rightMargin() - width(); | ||
173 | } | ||
174 | break; | ||
175 | case m_AlignCentre: | ||
176 | { | ||
177 | currentx = ( | ||
178 | scwidth + | ||
179 | leftMargin() - rightMargin() | ||
180 | - width())/2; | ||
181 | } | ||
182 | break; | ||
183 | case m_AlignJustify: | ||
184 | case m_AlignLeft: | ||
185 | currentx = BORDER + leftMargin(); | ||
186 | break; | ||
187 | } | ||
188 | return currentx; | ||
189 | } | ||
190 | |||
133 | void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth) | 191 | void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth) |
134 | { | 192 | { |
135 | int currentx = 0; | 193 | int currentx = offset(scwidth); |
136 | QString text = toQString(data()); | 194 | QString text = toQString(data()); |
137 | CList<textsegment>::iterator textstart = segs.begin(); | 195 | CList<textsegment>::iterator textstart = segs.begin(); |
196 | /* | ||
138 | StyleType align = textstart->style.getJustify(); | 197 | StyleType align = textstart->style.getJustify(); |
139 | switch (align) | 198 | switch (align) |
140 | { | 199 | { |
141 | case CStyle::m_AlignRight: | 200 | case CStyle::m_AlignRight: |
142 | { | 201 | { |
143 | // int linelength = width(); | 202 | currentx = scwidth - width() - 2*BORDER; |
144 | currentx = scwidth - width(); | ||
145 | } | 203 | } |
146 | break; | 204 | break; |
147 | case CStyle::m_AlignCentre: | 205 | case CStyle::m_AlignCentre: |
148 | { | 206 | { |
149 | // int linelength = width(); | 207 | currentx = (scwidth - width())/2 - BORDER; |
150 | currentx = (scwidth - width())/2; | ||
151 | } | 208 | } |
152 | break; | 209 | break; |
153 | case CStyle::m_AlignJustify: | 210 | case CStyle::m_AlignJustify: |
154 | case CStyle::m_AlignLeft: | 211 | case CStyle::m_AlignLeft: |
155 | break; | 212 | break; |
156 | } | 213 | } |
214 | */ | ||
157 | CList<textsegment>::iterator textend = textstart; | 215 | CList<textsegment>::iterator textend = textstart; |
158 | do | 216 | do |
159 | { | 217 | { |
160 | textend++; | 218 | textend++; |
161 | int end = (textend != segs.end()) ? textend->start : length(); | 219 | int end = (textend != segs.end()) ? textend->start : length(); |
162 | CStyle currentstyle = textstart->style; | 220 | CStyle currentstyle = textstart->style; |
163 | QFont f(fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); | 221 | QFont f((currentstyle.isMono() && fc->hasCourier()) ? QString("courier") : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); |
222 | //f.setUnderline(currentstyle.isUnderline()); | ||
223 | //if (currentstyle.isUnderline()) qDebug("UNDERLINE"); | ||
164 | _p->setFont(f); | 224 | _p->setFont(f); |
165 | QString str = text.mid(textstart->start, end-textstart->start); | 225 | QString str = text.mid(textstart->start, end-textstart->start); |
166 | _p->setPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue())); | 226 | #ifdef OPIE |
227 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100)); | ||
228 | #else | ||
229 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10)); | ||
230 | #endif | ||
167 | if (_bMono) | 231 | if (_bMono) |
168 | { | 232 | { |
233 | if (currentstyle.isUnderline()) | ||
234 | { | ||
235 | _p->drawLine( currentx, _y, currentx + str.length()*_charWidth, _y); | ||
236 | } | ||
237 | if (currentstyle.isStrikethru()) | ||
238 | { | ||
239 | int ascent = fc->ascent(currentstyle)/3; | ||
240 | _p->drawLine( currentx, _y-ascent, currentx + str.length()*_charWidth, _y-ascent); | ||
241 | } | ||
169 | for (int i = 0; i < str.length(); i++) | 242 | for (int i = 0; i < str.length(); i++) |
170 | { | 243 | { |
171 | _p->drawText( currentx + i*_charWidth, _y, QString(str[i])); | 244 | _p->drawText( currentx + i*_charWidth, _y, QString(str[i])); |
172 | } | 245 | } |
173 | currentx += str.length()*_charWidth; | 246 | currentx += str.length()*_charWidth; |
174 | } | 247 | } |
175 | else | 248 | else |
176 | { | 249 | { |
177 | _p->drawText( currentx, _y, str); | 250 | if (currentstyle.isPicture()) |
178 | QFontMetrics fm(f); | 251 | { |
179 | currentx += fm.width(str); | 252 | int ascent = fc->ascent(currentstyle)/2; |
253 | int yoffset = currentstyle.getPicture()->height()/2 + ascent; | ||
254 | _p->drawPixmap( currentx, _y-yoffset, *(currentstyle.getPicture())); | ||
255 | currentx += currentstyle.getPicture()->width(); | ||
256 | } | ||
257 | else | ||
258 | { | ||
259 | if (currentstyle.isMono() && !fc->hasCourier()) | ||
260 | { | ||
261 | int cw = (7*fc->getsize(currentstyle))/10; | ||
262 | int w = cw*(end-textstart->start); | ||
263 | if (currentstyle.isUnderline()) | ||
264 | { | ||
265 | _p->drawLine( currentx, _y, currentx + w, _y); | ||
266 | } | ||
267 | if (currentstyle.isStrikethru()) | ||
268 | { | ||
269 | int ascent = fc->ascent(currentstyle)/3; | ||
270 | _p->drawLine( currentx, _y-ascent, currentx + w, _y-ascent); | ||
271 | } | ||
272 | QString str = text.mid(textstart->start, end-textstart->start); | ||
273 | |||
274 | for (int i = 0; i < str.length(); i++) | ||
275 | { | ||
276 | _p->drawText( currentx, _y, QString(str[i])); | ||
277 | currentx += cw; | ||
278 | } | ||
279 | } | ||
280 | else | ||
281 | { | ||
282 | QFontMetrics fm(f); | ||
283 | int w = fm.width(str); | ||
284 | if (currentstyle.isUnderline()) | ||
285 | { | ||
286 | _p->drawLine( currentx, _y, currentx + w, _y); | ||
287 | } | ||
288 | if (currentstyle.isStrikethru()) | ||
289 | { | ||
290 | int ascent = fc->ascent(currentstyle)/3; | ||
291 | _p->drawLine( currentx, _y-ascent, currentx + w, _y-ascent); | ||
292 | } | ||
293 | _p->drawText( currentx, _y, str); | ||
294 | currentx += w; | ||
295 | } | ||
296 | } | ||
180 | } | 297 | } |
181 | textstart = textend; | 298 | textstart = textend; |
182 | } | 299 | } |
183 | while (textend != segs.end()); | 300 | while (textend != segs.end() && textstart->start < length()-1); |
184 | } | 301 | } |
185 | 302 | ||
186 | CStyle CDrawBuffer::laststyle() | 303 | CStyle CDrawBuffer::laststyle() |
187 | { | 304 | { |
188 | return segs.last().style; | 305 | return segs.last().style; |
189 | } | 306 | } |
190 | 307 | ||
191 | bool CDrawBuffer::isLink(int numchars, size_t& tgt) | 308 | linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt) |
192 | { | 309 | { |
193 | int end = 0; | 310 | int end = 0; |
194 | CStyle currentstyle; | 311 | CStyle currentstyle; |
195 | CList<textsegment>::iterator textstart = segs.begin(); | 312 | CList<textsegment>::iterator textstart = segs.begin(); |
196 | CList<textsegment>::iterator textend = textstart; | 313 | CList<textsegment>::iterator textend = textstart; |
197 | do | 314 | do |
198 | { | 315 | { |
199 | textend++; | 316 | textend++; |
200 | end = (textend != segs.end()) ? textend->start : length(); | 317 | end = (textend != segs.end()) ? textend->start : length(); |
201 | if (numchars >= 0 && end > numchars) | ||
202 | { | ||
203 | end = numchars; | ||
204 | } | ||
205 | currentstyle = textstart->style; | 318 | currentstyle = textstart->style; |
319 | /* | ||
320 | if (currentstyle.isPicture()) qDebug("Passed thru picture"); | ||
321 | if (currentstyle.getLink()) qDebug("Passed thru link"); | ||
322 | qDebug("islink:%d - %d", numchars, end); | ||
323 | */ | ||
206 | textstart = textend; | 324 | textstart = textend; |
207 | } | 325 | } |
208 | while (textend != segs.end() && end != numchars); | 326 | while (textend != segs.end() && end <= numchars); |
209 | tgt = currentstyle.getData(); | 327 | // if (currentstyle.isPicture()) qDebug("Clicked on picture"); |
210 | return currentstyle.getLink(); | 328 | if (currentstyle.getPictureLink()) |
329 | { | ||
330 | tgt = currentstyle.getPictureLinkData(); | ||
331 | return ePicture; | ||
332 | } | ||
333 | if (currentstyle.getLink()) | ||
334 | { | ||
335 | tgt = currentstyle.getData(); | ||
336 | return eLink; | ||
337 | } | ||
338 | return eNone; | ||
339 | } | ||
340 | |||
341 | void CDrawBuffer::resize() | ||
342 | { | ||
343 | int i; | ||
344 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; | ||
345 | for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= length(); ) | ||
346 | { | ||
347 | CList<textsegment>::iterator next = iter; | ||
348 | iter++; | ||
349 | int st = next->start; | ||
350 | if (st < 0) st = 0; | ||
351 | |||
352 | CStyle _style = next->style; | ||
353 | |||
354 | int linespacing, ascent, descent, extra; | ||
355 | |||
356 | ascent = fc->ascent(_style); | ||
357 | descent = fc->descent(_style); | ||
358 | linespacing = fc->lineSpacing(_style); | ||
359 | extra = linespacing - ascent - descent; | ||
360 | if (_style.isPicture()) | ||
361 | { | ||
362 | descent = (_style.getPicture()->height()-ascent)/2; | ||
363 | ascent = (_style.getPicture()->height()+ascent)/2; | ||
364 | } | ||
365 | /* | ||
366 | else if (fc != NULL) | ||
367 | { | ||
368 | ascent = fc->ascent(_style); | ||
369 | descent = fc->descent(_style); | ||
370 | linespacing = fc->lineSpacing(_style); | ||
371 | extra = linespacing - ascent - descent; | ||
372 | } | ||
373 | */ | ||
374 | if (ascent > m_ascent) m_ascent = ascent; | ||
375 | if (descent > m_descent) m_descent = descent; | ||
376 | if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra; | ||
377 | m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing; | ||
378 | } | ||
211 | } | 379 | } |
diff --git a/noncore/apps/opie-reader/CDrawBuffer.h b/noncore/apps/opie-reader/CDrawBuffer.h index 4d3696e..0d8968c 100644 --- a/noncore/apps/opie-reader/CDrawBuffer.h +++ b/noncore/apps/opie-reader/CDrawBuffer.h | |||
@@ -1,59 +1,76 @@ | |||
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 | 7 | ||
8 | class QPainter; | 8 | class QPainter; |
9 | 9 | ||
10 | enum linkType | ||
11 | { | ||
12 | eNone, | ||
13 | eLink, | ||
14 | ePicture | ||
15 | }; | ||
16 | |||
10 | struct textsegment | 17 | struct textsegment |
11 | { | 18 | { |
12 | int start; | 19 | int start; |
13 | CStyle style; | 20 | CStyle style; |
14 | textsegment(int _start, CStyle _style) | 21 | textsegment(int _start, const CStyle& _style) |
15 | : | 22 | : |
16 | start(_start), style(_style) | 23 | start(_start), style(_style) |
17 | {} | 24 | {} |
18 | }; | 25 | }; |
19 | 26 | ||
20 | class FontControl; | 27 | class FontControl; |
21 | 28 | ||
22 | class CDrawBuffer : public CBuffer | 29 | class CDrawBuffer : public CBuffer |
23 | { | 30 | { |
24 | CList<textsegment> segs; | 31 | CList<textsegment> segs; |
25 | int len; | 32 | int len; |
26 | FontControl* fc; | 33 | FontControl* fc; |
27 | int m_maxstyle, m_ascent, m_descent, m_lineSpacing; | 34 | int m_maxstyle, m_ascent, m_descent, m_lineSpacing, m_lineExtraSpacing; |
35 | bool m_bEof; | ||
36 | CDrawBuffer(const CDrawBuffer&); | ||
37 | CDrawBuffer& operator=(const tchar*sztmp); | ||
28 | public: | 38 | public: |
39 | int leftMargin(); | ||
40 | int rightMargin(); | ||
41 | void setEof() { m_bEof = true; } | ||
42 | bool eof() { return m_bEof; } | ||
43 | CDrawBuffer& operator=(CDrawBuffer&); | ||
29 | CDrawBuffer(FontControl* _fs = NULL) | 44 | CDrawBuffer(FontControl* _fs = NULL) |
30 | : | 45 | : |
31 | fc(_fs) | 46 | fc(_fs) |
32 | { | 47 | { |
33 | empty(); | 48 | empty(); |
34 | } | 49 | } |
50 | ~CDrawBuffer(); | ||
35 | /* | 51 | /* |
36 | CDrawBuffer() | 52 | CDrawBuffer() |
37 | : | 53 | : |
38 | size(0) | 54 | size(0) |
39 | { | 55 | { |
40 | empty(); | 56 | empty(); |
41 | } | 57 | } |
42 | */ | 58 | */ |
43 | int width(int numchars = -1); | 59 | int width(int numchars = -1); |
60 | int offset(int); | ||
44 | void render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scw); | 61 | void render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scw); |
45 | CDrawBuffer& operator=(const tchar*sztmp); | ||
46 | CDrawBuffer& operator=(CDrawBuffer&); | ||
47 | void empty(); | 62 | void empty(); |
48 | void addch(tchar ch, CStyle _style); | 63 | void addch(tchar ch, CStyle _style); |
49 | void truncate(int); | 64 | void truncate(int); |
50 | void setright(CDrawBuffer&, int); | 65 | void setright(CDrawBuffer&, int); |
51 | CStyle laststyle(); | 66 | CStyle laststyle(); |
52 | int ascent() { return m_ascent; } | 67 | int ascent() { return m_ascent; } |
53 | int descent() { return m_descent; } | 68 | int descent() { return m_descent; } |
54 | int lineSpacing() { return m_lineSpacing; } | 69 | int lineSpacing() { return m_lineSpacing; } |
70 | int lineExtraSpacing() { return m_lineExtraSpacing; } | ||
55 | 71 | ||
56 | // void frig(); | 72 | // void frig(); |
57 | bool isLink(int numchars, size_t& tgt); | 73 | linkType getLinkType(int numchars, size_t& tgt); |
74 | void resize(); | ||
58 | }; | 75 | }; |
59 | #endif | 76 | #endif |
diff --git a/noncore/apps/opie-reader/CExpander.h b/noncore/apps/opie-reader/CExpander.h index b1147a6..c281398 100644 --- a/noncore/apps/opie-reader/CExpander.h +++ b/noncore/apps/opie-reader/CExpander.h | |||
@@ -1,43 +1,124 @@ | |||
1 | #ifndef __CExpander_h | 1 | #ifndef __CExpander_h |
2 | #define __CExpander_h | 2 | #define __CExpander_h |
3 | 3 | ||
4 | #include <unistd.h> | ||
5 | #include <stdio.h> | ||
6 | #include <time.h> | ||
7 | #include <qmessagebox.h> | ||
4 | #include "config.h" | 8 | #include "config.h" |
5 | #include "StyleConsts.h" | 9 | #include "StyleConsts.h" |
6 | #include "Markups.h" | 10 | #include "Markups.h" |
11 | #include "name.h" | ||
7 | 12 | ||
13 | class QPixmap; | ||
8 | class Bkmk; | 14 | class Bkmk; |
9 | 15 | ||
10 | template<class T> | 16 | template<class T> |
11 | class CList; | 17 | class CList; |
12 | 18 | ||
13 | class CCharacterSource | 19 | class CCharacterSource |
14 | { | 20 | { |
15 | public: | 21 | public: |
16 | virtual void getch(tchar&, CStyle&) = 0; | 22 | virtual void getch(tchar&, CStyle&) = 0; |
17 | }; | 23 | }; |
18 | 24 | ||
19 | class CExpander | 25 | class CExpander |
20 | { | 26 | { |
27 | protected: | ||
28 | size_t m_homepos; | ||
29 | bool m_continuous; | ||
30 | char* fname; | ||
31 | bool bSuspended; | ||
32 | size_t suspos; | ||
33 | time_t sustime; | ||
21 | public: | 34 | public: |
22 | CExpander() {}; | 35 | virtual void suspend() = 0; |
23 | virtual ~CExpander() {}; | 36 | virtual void unsuspend() = 0; |
24 | virtual int openfile(const char *src) = 0; | 37 | size_t getHome() { return m_homepos; } |
38 | CExpander() : m_homepos(0), fname(NULL) {}; | ||
39 | virtual ~CExpander() { if (fname != NULL) delete [] fname; }; | ||
40 | int openfile(const char *src) | ||
41 | { | ||
42 | bSuspended = false; | ||
43 | fname = strdup(src); | ||
44 | return OpenFile(src); | ||
45 | } | ||
46 | virtual int OpenFile(const char *src) = 0; | ||
25 | virtual unsigned int locate() = 0; | 47 | virtual unsigned int locate() = 0; |
26 | virtual void locate(unsigned int n) = 0; | 48 | virtual void locate(unsigned int n) = 0; |
27 | virtual bool hasrandomaccess() = 0; | 49 | virtual bool hasrandomaccess() = 0; |
28 | virtual void sizes(unsigned long& file, unsigned long& text) = 0; | 50 | virtual void sizes(unsigned long& file, unsigned long& text) = 0; |
29 | virtual CList<Bkmk>* getbkmklist() { return NULL; } | 51 | virtual CList<Bkmk>* getbkmklist() { return NULL; } |
30 | virtual void getch(int& ch, CStyle& sty) | 52 | virtual void getch(int& ch, CStyle& sty) |
31 | { | 53 | { |
32 | ch = getch(); | 54 | ch = getch(); |
33 | sty.unset(); | 55 | sty.unset(); |
34 | } | 56 | } |
35 | virtual int getch() = 0; | 57 | virtual int getch() = 0; |
36 | virtual bool hyperlink(unsigned int n) | 58 | virtual bool hyperlink(unsigned int n) |
37 | { | 59 | { |
38 | locate(n); | 60 | locate(n); |
39 | return true; | 61 | return true; |
40 | } | 62 | } |
41 | virtual MarkupType PreferredMarkup() = 0; | 63 | virtual MarkupType PreferredMarkup() = 0; |
64 | virtual void saveposn(size_t posn) {} | ||
65 | virtual bool forward(size_t& loc) {} | ||
66 | virtual bool back(size_t& loc) {} | ||
67 | virtual bool hasnavigation() { return false; } | ||
68 | virtual unsigned long startSection() | ||
69 | { | ||
70 | return 0; | ||
71 | } | ||
72 | virtual unsigned long endSection() | ||
73 | { | ||
74 | unsigned long file, text; | ||
75 | sizes(file, text); | ||
76 | return text; | ||
77 | } | ||
78 | virtual QPixmap* getPicture(unsigned long tgt) { return NULL; } | ||
79 | void setContinuous(bool _b) { m_continuous = _b; } | ||
80 | |||
81 | virtual void suspend(FILE*& fin) | ||
82 | { | ||
83 | bSuspended = true; | ||
84 | suspos = ftell(fin); | ||
85 | fclose(fin); | ||
86 | fin = NULL; | ||
87 | sustime = time(NULL); | ||
88 | } | ||
89 | virtual void unsuspend(FILE*& fin) | ||
90 | { | ||
91 | if (bSuspended) | ||
92 | { | ||
93 | bSuspended = false; | ||
94 | int delay = time(NULL) - sustime; | ||
95 | if (delay < 10) sleep(10-delay); | ||
96 | fin = fopen(fname, "rb"); | ||
97 | for (int i = 0; fin == NULL && i < 5; i++) | ||
98 | { | ||
99 | sleep(5); | ||
100 | fin = fopen(fname, "rb"); | ||
101 | } | ||
102 | if (fin == NULL) | ||
103 | { | ||
104 | QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file"); | ||
105 | exit(0); | ||
106 | } | ||
107 | suspos = fseek(fin, suspos, SEEK_SET); | ||
108 | } | ||
109 | } | ||
110 | virtual void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) | ||
111 | { | ||
112 | len = srclen; | ||
113 | data = new unsigned char[len]; | ||
114 | memcpy(data, src, len); | ||
115 | } | ||
116 | virtual void putSaveData(unsigned char*& src, unsigned short& srclen) | ||
117 | { | ||
118 | if (srclen != 0) | ||
119 | { | ||
120 | qDebug("Don't know what to do with non-zero save data"); | ||
121 | } | ||
122 | } | ||
42 | }; | 123 | }; |
43 | #endif | 124 | #endif |
diff --git a/noncore/apps/opie-reader/CFilter.cpp b/noncore/apps/opie-reader/CFilter.cpp index c17cf61..d5e3116 100644 --- a/noncore/apps/opie-reader/CFilter.cpp +++ b/noncore/apps/opie-reader/CFilter.cpp | |||
@@ -1,561 +1,684 @@ | |||
1 | #include "CDrawBuffer.h" | 1 | #include "CDrawBuffer.h" |
2 | #include "CFilter.h" | 2 | #include "CFilter.h" |
3 | 3 | ||
4 | unsigned short striphtml::skip_ws() | 4 | unsigned 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 | ||
16 | unsigned short striphtml::skip_ws_end() | 16 | unsigned 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 | ||
32 | unsigned short striphtml::parse_m() | 32 | unsigned 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 | ||
48 | void striphtml::mygetch(tchar& ch, CStyle& sty) | 48 | void 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 | ||
54 | void striphtml::getch(tchar& ch, CStyle& sty) | 54 | void 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 | ||
229 | void textfmt::mygetch(tchar& ch, CStyle& sty) | 229 | void 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 | ||
242 | void textfmt::getch(tchar& ch, CStyle& sty) | 242 | void 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 | ||
346 | void remap::getch(tchar& ch, CStyle& sty) | 346 | void 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 | ||
437 | void PeanutFormatter::getch(tchar& ch, CStyle& sty) | 437 | void 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() == CStyle::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() == CStyle::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 | |||
563 | void OnePara::getch(tchar& ch, CStyle& sty) | ||
564 | { | ||
565 | parent->getch(ch, sty); | ||
566 | if (m_lastchar == 10) | ||
567 | { | ||
568 | while (ch == 10) parent->getch(ch, sty); | ||
569 | } | ||
570 | m_lastchar = ch; | ||
571 | } | ||
572 | |||
573 | #ifdef REPALM | ||
574 | void repalm::getch(tchar& ch, CStyle& sty) | ||
575 | { | ||
576 | parent->getch(ch, sty); | ||
577 | switch (ch) | ||
578 | { | ||
579 | case 0x80: | ||
580 | ch = 0x20ac; | ||
581 | break; | ||
582 | case 0x82: | ||
583 | ch = 0x201a; | ||
584 | break; | ||
585 | case 0x83: | ||
586 | ch = 0x0192; | ||
587 | break; | ||
588 | case 0x84: | ||
589 | ch = 0x201e; | ||
590 | break; | ||
591 | case 0x85: | ||
592 | ch = 0x2026; | ||
593 | break; | ||
594 | case 0x86: | ||
595 | ch = 0x2020; | ||
596 | break; | ||
597 | case 0x87: | ||
598 | ch = 0x2021; | ||
599 | break; | ||
600 | case 0x88: | ||
601 | ch = 0x02c6; | ||
602 | break; | ||
603 | case 0x89: | ||
604 | ch = 0x2030; | ||
605 | break; | ||
606 | case 0x8a: | ||
607 | ch = 0x0160; | ||
608 | break; | ||
609 | case 0x8b: | ||
610 | ch = 0x2039; | ||
611 | break; | ||
612 | case 0x8c: | ||
613 | ch = 0x0152; | ||
614 | break; | ||
615 | /* | ||
616 | case 0x8e: | ||
617 | ch = 0x017d; | ||
618 | break; | ||
619 | */ | ||
620 | case 0x91: | ||
621 | ch = 0x2018; | ||
622 | break; | ||
623 | case 0x92: | ||
624 | ch = 0x2019; | ||
625 | break; | ||
626 | case 0x93: | ||
627 | ch = 0x201c; | ||
628 | break; | ||
629 | case 0x94: | ||
630 | ch = 0x201d; | ||
631 | break; | ||
632 | case 0x95: | ||
633 | ch = 0x2022; | ||
634 | break; | ||
635 | case 0x96: | ||
636 | ch = 0x2013; | ||
637 | break; | ||
638 | case 0x97: | ||
639 | ch = 0x2014; | ||
640 | break; | ||
641 | case 0x98: | ||
642 | ch = 0x02dc; | ||
643 | break; | ||
644 | case 0x99: | ||
645 | ch = 0x2122; | ||
646 | break; | ||
647 | case 0x9a: | ||
648 | ch = 0x0161; | ||
649 | break; | ||
650 | case 0x9b: | ||
651 | ch = 0x203a; | ||
652 | break; | ||
653 | case 0x9c: | ||
654 | ch = 0x0153; | ||
655 | break; | ||
656 | case 0x9e: | ||
657 | ch = 0x017e; | ||
658 | break; | ||
659 | case 0x9f: | ||
660 | ch = 0x0178; | ||
661 | break; | ||
662 | case 0x18: | ||
663 | ch = 0x2026; | ||
664 | break; | ||
665 | case 0x19: | ||
666 | ch = 0x2007; | ||
667 | break; | ||
668 | case 0x8d: | ||
669 | ch = 0x2662; | ||
670 | break; | ||
671 | case 0x8e: | ||
672 | ch = 0x2663; | ||
673 | break; | ||
674 | case 0x8f: | ||
675 | ch = 0x2661; | ||
676 | break; | ||
677 | case 0x90: | ||
678 | ch = 0x2660; | ||
679 | break; | ||
680 | default: | ||
681 | break; | ||
682 | } | ||
683 | } | ||
684 | #endif | ||
diff --git a/noncore/apps/opie-reader/CFilter.h b/noncore/apps/opie-reader/CFilter.h index 8cfd7eb..2d0c30f 100644 --- a/noncore/apps/opie-reader/CFilter.h +++ b/noncore/apps/opie-reader/CFilter.h | |||
@@ -1,269 +1,287 @@ | |||
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 | ||
7 | class CFilter : public CCharacterSource | 7 | class CFilter : public CCharacterSource |
8 | { | 8 | { |
9 | friend class CFilterChain; | 9 | friend class CFilterChain; |
10 | protected: | 10 | protected: |
11 | CCharacterSource* parent; | 11 | CCharacterSource* parent; |
12 | public: | 12 | public: |
13 | CFilter() : parent(NULL) {} | 13 | CFilter() : parent(NULL) {} |
14 | void setparent(CCharacterSource* p) { parent = p; } | 14 | void setparent(CCharacterSource* p) { parent = p; } |
15 | virtual ~CFilter() {}; | 15 | virtual ~CFilter() {}; |
16 | }; | 16 | }; |
17 | 17 | ||
18 | class CFilterChain | 18 | class CFilterChain |
19 | { | 19 | { |
20 | CExpander* expander; | 20 | CExpander* expander; |
21 | CEncoding* encoder; | 21 | CEncoding* encoder; |
22 | CFilter* first; | 22 | CFilter* first; |
23 | CCharacterSource* front; | 23 | CCharacterSource* front; |
24 | public: | 24 | public: |
25 | CFilterChain(CEncoding* _e) : encoder(_e), first(NULL), front(_e) {}; | 25 | CFilterChain(CEncoding* _e) : encoder(_e), first(NULL), front(_e) {}; |
26 | ~CFilterChain() | 26 | ~CFilterChain() |
27 | { | 27 | { |
28 | CCharacterSource* p = front; | 28 | CCharacterSource* p = front; |
29 | while (p != encoder) | 29 | while (p != encoder) |
30 | { | 30 | { |
31 | CFilter* pnext = (CFilter*)p; | 31 | CFilter* pnext = (CFilter*)p; |
32 | p = ((CFilter*)p)->parent; | 32 | p = ((CFilter*)p)->parent; |
33 | delete pnext; | 33 | delete pnext; |
34 | } | 34 | } |
35 | delete encoder; | 35 | delete encoder; |
36 | } | 36 | } |
37 | void getch(tchar& ch, CStyle& sty) | 37 | void getch(tchar& ch, CStyle& sty) |
38 | { | 38 | { |
39 | front->getch(ch, sty); | 39 | front->getch(ch, sty); |
40 | } | 40 | } |
41 | void addfilter(CFilter* p) | 41 | void addfilter(CFilter* p) |
42 | { | 42 | { |
43 | if (first == NULL) | 43 | if (first == NULL) |
44 | { | 44 | { |
45 | front = first = p; | 45 | front = first = p; |
46 | p->setparent(encoder); | 46 | p->setparent(encoder); |
47 | } | 47 | } |
48 | else | 48 | else |
49 | { | 49 | { |
50 | p->setparent(front); | 50 | p->setparent(front); |
51 | front = p; | 51 | front = p; |
52 | } | 52 | } |
53 | } | 53 | } |
54 | void setsource(CExpander* p) | 54 | void setsource(CExpander* p) |
55 | { | 55 | { |
56 | expander = p; | 56 | expander = p; |
57 | encoder->setparent(p); | 57 | encoder->setparent(p); |
58 | } | 58 | } |
59 | void setencoder(CEncoding* p) | 59 | void setencoder(CEncoding* p) |
60 | { | 60 | { |
61 | delete encoder; | 61 | delete encoder; |
62 | encoder = p; | 62 | encoder = p; |
63 | first->setparent(p); | 63 | first->setparent(p); |
64 | encoder->setparent(expander); | 64 | encoder->setparent(expander); |
65 | } | 65 | } |
66 | }; | 66 | }; |
67 | 67 | ||
68 | class stripcr : public CFilter | 68 | class stripcr : public CFilter |
69 | { | 69 | { |
70 | public: | 70 | public: |
71 | stripcr() {} | 71 | stripcr() {} |
72 | virtual ~stripcr() {} | 72 | virtual ~stripcr() {} |
73 | virtual void getch(tchar& ch, CStyle& sty) | 73 | virtual void getch(tchar& ch, CStyle& sty) |
74 | { | 74 | { |
75 | do | 75 | do |
76 | { | 76 | { |
77 | parent->getch(ch, sty); | 77 | parent->getch(ch, sty); |
78 | } | 78 | } |
79 | while (ch == 13); | 79 | while (ch == 13); |
80 | } | 80 | } |
81 | }; | 81 | }; |
82 | 82 | ||
83 | class dehyphen : public CFilter | 83 | class dehyphen : public CFilter |
84 | { | 84 | { |
85 | bool m_bCharWaiting; | 85 | bool m_bCharWaiting; |
86 | tchar m_nextChar; | 86 | tchar m_nextChar; |
87 | CStyle m_nextSty; | 87 | CStyle m_nextSty; |
88 | public: | 88 | public: |
89 | dehyphen() : m_bCharWaiting(false) {} | 89 | dehyphen() : m_bCharWaiting(false) {} |
90 | virtual ~dehyphen() {} | 90 | virtual ~dehyphen() {} |
91 | virtual void getch(tchar& ch, CStyle& sty) | 91 | virtual void getch(tchar& ch, CStyle& sty) |
92 | { | 92 | { |
93 | if (m_bCharWaiting) | 93 | if (m_bCharWaiting) |
94 | { | 94 | { |
95 | m_bCharWaiting = false; | 95 | m_bCharWaiting = false; |
96 | ch = m_nextChar; | 96 | ch = m_nextChar; |
97 | sty = m_nextSty; | 97 | sty = m_nextSty; |
98 | return; | 98 | return; |
99 | } | 99 | } |
100 | parent->getch(ch, sty); | 100 | parent->getch(ch, sty); |
101 | if (ch != '-') return; | 101 | if (ch != '-') return; |
102 | parent->getch(m_nextChar, m_nextSty); | 102 | parent->getch(m_nextChar, m_nextSty); |
103 | if (m_nextChar != 10) | 103 | if (m_nextChar != 10) |
104 | { | 104 | { |
105 | m_bCharWaiting = true; | 105 | m_bCharWaiting = true; |
106 | ch = '-'; | 106 | ch = '-'; |
107 | return; | 107 | return; |
108 | } | 108 | } |
109 | parent->getch(ch, sty); | 109 | parent->getch(ch, sty); |
110 | } | 110 | } |
111 | }; | 111 | }; |
112 | 112 | ||
113 | class striphtml : public CFilter | 113 | class striphtml : public CFilter |
114 | { | 114 | { |
115 | CStyle currentstyle; | 115 | CStyle currentstyle; |
116 | unsigned short skip_ws(); | 116 | unsigned short skip_ws(); |
117 | unsigned short skip_ws_end(); | 117 | unsigned short skip_ws_end(); |
118 | unsigned short parse_m(); | 118 | unsigned short parse_m(); |
119 | void mygetch(tchar& ch, CStyle& sty); | 119 | void mygetch(tchar& ch, CStyle& sty); |
120 | public: | 120 | public: |
121 | striphtml() {} | 121 | striphtml() {} |
122 | virtual ~striphtml() {} | 122 | virtual ~striphtml() {} |
123 | virtual void getch(tchar& ch, CStyle& sty); | 123 | virtual void getch(tchar& ch, CStyle& sty); |
124 | }; | 124 | }; |
125 | 125 | ||
126 | class unindent : public CFilter | 126 | class unindent : public CFilter |
127 | { | 127 | { |
128 | tchar lc; | 128 | tchar lc; |
129 | public: | 129 | public: |
130 | unindent() : lc(0) {} | 130 | unindent() : lc(0) {} |
131 | virtual ~unindent() {} | 131 | virtual ~unindent() {} |
132 | virtual void getch(tchar& ch, CStyle& sty) | 132 | virtual void getch(tchar& ch, CStyle& sty) |
133 | { | 133 | { |
134 | if (lc == 10) | 134 | if (lc == 10) |
135 | { | 135 | { |
136 | do | 136 | do |
137 | { | 137 | { |
138 | parent->getch(ch, sty); | 138 | parent->getch(ch, sty); |
139 | } | 139 | } |
140 | while (ch == ' '); | 140 | while (ch == ' '); |
141 | } | 141 | } |
142 | else parent->getch(ch, sty); | 142 | else parent->getch(ch, sty); |
143 | lc = ch; | 143 | lc = ch; |
144 | return; | 144 | return; |
145 | } | 145 | } |
146 | }; | 146 | }; |
147 | 147 | ||
148 | class repara : public CFilter | 148 | class repara : public CFilter |
149 | { | 149 | { |
150 | tchar tch; | 150 | tchar tch; |
151 | public: | 151 | public: |
152 | repara() : tch(0) {} | 152 | repara() : tch(0) {} |
153 | virtual ~repara() {} | 153 | virtual ~repara() {} |
154 | virtual void getch(tchar& ch, CStyle& sty) | 154 | virtual void getch(tchar& ch, CStyle& sty) |
155 | { | 155 | { |
156 | parent->getch(ch, sty); | 156 | parent->getch(ch, sty); |
157 | if (ch == 10) | 157 | if (ch == 10) |
158 | { | 158 | { |
159 | if (tch == 10) | 159 | if (tch == 10) |
160 | { | 160 | { |
161 | return; | 161 | return; |
162 | } | 162 | } |
163 | else | 163 | else |
164 | { | 164 | { |
165 | tch = ch; | 165 | tch = ch; |
166 | ch = ' '; | 166 | ch = ' '; |
167 | return; | 167 | return; |
168 | } | 168 | } |
169 | } | 169 | } |
170 | tch = ch; | 170 | tch = ch; |
171 | return; | 171 | return; |
172 | } | 172 | } |
173 | }; | 173 | }; |
174 | 174 | ||
175 | class indenter : public CFilter | 175 | class indenter : public CFilter |
176 | { | 176 | { |
177 | int amnt; | 177 | int amnt; |
178 | int indent; | 178 | int indent; |
179 | CStyle lsty; | 179 | CStyle lsty; |
180 | public: | 180 | public: |
181 | indenter(int _a=5) : amnt(_a), indent(0) {} | 181 | indenter(int _a=5) : amnt(_a), indent(0) {} |
182 | virtual ~indenter() {} | 182 | virtual ~indenter() {} |
183 | virtual void getch(tchar& ch, CStyle& sty) | 183 | virtual void getch(tchar& ch, CStyle& sty) |
184 | { | 184 | { |
185 | if (indent > 0) | 185 | if (indent > 0) |
186 | { | 186 | { |
187 | indent--; | 187 | indent--; |
188 | ch = ' '; | 188 | ch = ' '; |
189 | sty = lsty; | 189 | sty = lsty; |
190 | return; | 190 | return; |
191 | } | 191 | } |
192 | parent->getch(ch, sty); | 192 | parent->getch(ch, sty); |
193 | if (ch == 10) | 193 | if (ch == 10) |
194 | { | 194 | { |
195 | indent = amnt; | 195 | indent = amnt; |
196 | lsty = sty; | 196 | lsty = sty; |
197 | } | 197 | } |
198 | return; | 198 | return; |
199 | } | 199 | } |
200 | }; | 200 | }; |
201 | 201 | ||
202 | class dblspce : public CFilter | 202 | class dblspce : public CFilter |
203 | { | 203 | { |
204 | bool lastlf; | 204 | bool lastlf; |
205 | CStyle lsty; | 205 | CStyle lsty; |
206 | public: | 206 | public: |
207 | dblspce() : lastlf(false) {} | 207 | dblspce() : lastlf(false) {} |
208 | virtual ~dblspce() {} | 208 | virtual ~dblspce() {} |
209 | virtual void getch(tchar& ch, CStyle& sty) | 209 | virtual void getch(tchar& ch, CStyle& sty) |
210 | { | 210 | { |
211 | if (lastlf) | 211 | if (lastlf) |
212 | { | 212 | { |
213 | lastlf = false; | 213 | lastlf = false; |
214 | ch = 10; | 214 | ch = 10; |
215 | sty = lsty; | 215 | sty = lsty; |
216 | return; | 216 | return; |
217 | } | 217 | } |
218 | parent->getch(ch, sty); | 218 | parent->getch(ch, sty); |
219 | if (lastlf = (ch == 10)) | 219 | if (lastlf = (ch == 10)) |
220 | { | 220 | { |
221 | lsty = sty; | 221 | lsty = sty; |
222 | } | 222 | } |
223 | return; | 223 | return; |
224 | } | 224 | } |
225 | }; | 225 | }; |
226 | 226 | ||
227 | class textfmt : public CFilter | 227 | class textfmt : public CFilter |
228 | { | 228 | { |
229 | CStyle currentstyle; | 229 | CStyle currentstyle; |
230 | tchar lastchar; | 230 | tchar lastchar; |
231 | bool uselast; | 231 | bool uselast; |
232 | void mygetch(tchar&, CStyle&); | 232 | void mygetch(tchar&, CStyle&); |
233 | public: | 233 | public: |
234 | textfmt() : lastchar(0), uselast(false) {} | 234 | textfmt() : lastchar(0), uselast(false) {} |
235 | virtual ~textfmt() {} | 235 | virtual ~textfmt() {} |
236 | virtual void getch(tchar& ch, CStyle& sty); | 236 | virtual void getch(tchar& ch, CStyle& sty); |
237 | }; | 237 | }; |
238 | 238 | ||
239 | class embolden : public CFilter | 239 | class embolden : public CFilter |
240 | { | 240 | { |
241 | public: | 241 | public: |
242 | embolden() {} | 242 | embolden() {} |
243 | virtual ~embolden() {} | 243 | virtual ~embolden() {} |
244 | virtual void getch(tchar& ch, CStyle& sty) | 244 | virtual void getch(tchar& ch, CStyle& sty) |
245 | { | 245 | { |
246 | parent->getch(ch, sty); | 246 | parent->getch(ch, sty); |
247 | sty.setBold(); | 247 | sty.setBold(); |
248 | } | 248 | } |
249 | }; | 249 | }; |
250 | 250 | ||
251 | class remap : public CFilter | 251 | class remap : public CFilter |
252 | { | 252 | { |
253 | tchar q[3]; | 253 | tchar q[3]; |
254 | int offset; | 254 | int offset; |
255 | CStyle currentstyle; | 255 | CStyle currentstyle; |
256 | public: | 256 | public: |
257 | remap() : offset(0) { q[0] = 0; } | 257 | remap() : offset(0) { q[0] = 0; } |
258 | virtual ~remap() {} | 258 | virtual ~remap() {} |
259 | virtual void getch(tchar& ch, CStyle& sty); | 259 | virtual void getch(tchar& ch, CStyle& sty); |
260 | }; | 260 | }; |
261 | 261 | ||
262 | class PeanutFormatter : public CFilter | 262 | class PeanutFormatter : public CFilter |
263 | { | 263 | { |
264 | CStyle currentstyle; | 264 | CStyle currentstyle; |
265 | public: | 265 | public: |
266 | virtual ~PeanutFormatter() {} | 266 | virtual ~PeanutFormatter() {} |
267 | virtual void getch(tchar& ch, CStyle& sty); | 267 | virtual void getch(tchar& ch, CStyle& sty); |
268 | }; | 268 | }; |
269 | |||
270 | class OnePara : public CFilter | ||
271 | { | ||
272 | tchar m_lastchar; | ||
273 | public: | ||
274 | OnePara() : m_lastchar(0) {} | ||
275 | virtual ~OnePara() {} | ||
276 | virtual void getch(tchar& ch, CStyle& sty); | ||
277 | }; | ||
278 | |||
279 | #ifdef REPALM | ||
280 | class repalm : public CFilter | ||
281 | { | ||
282 | public: | ||
283 | virtual ~repalm() {} | ||
284 | virtual void getch(tchar& ch, CStyle& sty); | ||
285 | }; | ||
286 | #endif | ||
269 | #endif | 287 | #endif |
diff --git a/noncore/apps/opie-reader/Filedata.h b/noncore/apps/opie-reader/Filedata.h new file mode 100644 index 0000000..f920238 --- a/dev/null +++ b/noncore/apps/opie-reader/Filedata.h | |||
@@ -0,0 +1,51 @@ | |||
1 | #ifndef __FILEDATA_H | ||
2 | #define __FILEDATA_H | ||
3 | |||
4 | #include <time.h> | ||
5 | |||
6 | class CFiledata | ||
7 | { | ||
8 | unsigned char* data; | ||
9 | bool m_own; | ||
10 | public: | ||
11 | CFiledata(tchar* d) | ||
12 | { | ||
13 | data = (unsigned char*)d; | ||
14 | m_own = false; | ||
15 | } | ||
16 | CFiledata(time_t dt, tchar* nm) | ||
17 | { | ||
18 | int nlen = ustrlen(nm)+1; | ||
19 | data = new unsigned char[sizeof(time_t)+sizeof(tchar)*nlen]; | ||
20 | *((time_t *)data) = dt; | ||
21 | memcpy(data+sizeof(time_t), nm, sizeof(tchar)*nlen); | ||
22 | m_own = true; | ||
23 | } | ||
24 | ~CFiledata() | ||
25 | { | ||
26 | if (m_own && data != NULL) | ||
27 | { | ||
28 | delete [] data; | ||
29 | qDebug("~Filedata: deleting"); | ||
30 | } | ||
31 | else | ||
32 | { | ||
33 | qDebug("~Filedata: not deleting"); | ||
34 | } | ||
35 | } | ||
36 | tchar* name() const { return (tchar*)(data+sizeof(time_t)); } | ||
37 | time_t date() { return *((time_t *)data); } | ||
38 | void setdate(time_t _t) { *((time_t *)data) = _t; } | ||
39 | unsigned char* content() { return data; } | ||
40 | size_t length() const { return sizeof(time_t)+sizeof(tchar)*(ustrlen(name())+1); } | ||
41 | bool operator==(const CFiledata& rhs) | ||
42 | { | ||
43 | return ((length() == rhs.length()) && (memcmp(data, rhs.data, length()) == 0)); | ||
44 | } | ||
45 | bool samename(const CFiledata& rhs) | ||
46 | { | ||
47 | return (ustrcmp((tchar *)(data+sizeof(time_t)),(tchar *)(rhs.data+sizeof(time_t))) == 0); | ||
48 | } | ||
49 | }; | ||
50 | |||
51 | #endif | ||
diff --git a/noncore/apps/opie-reader/FontControl.cpp b/noncore/apps/opie-reader/FontControl.cpp new file mode 100644 index 0000000..f0ed98b --- a/dev/null +++ b/noncore/apps/opie-reader/FontControl.cpp | |||
@@ -0,0 +1,37 @@ | |||
1 | #include "opie.h" | ||
2 | #include "FontControl.h" | ||
3 | |||
4 | bool FontControl::ChangeFont(QString& n, int tgt) | ||
5 | { | ||
6 | QValueList<int>::Iterator it; | ||
7 | QFontDatabase fdb; | ||
8 | QValueList<int> sizes = fdb.pointSizes(n); | ||
9 | if (sizes.count() == 0) | ||
10 | { | ||
11 | return false; | ||
12 | } | ||
13 | else | ||
14 | { | ||
15 | m_fontname = n; | ||
16 | m_maxsize = sizes.count(); | ||
17 | if (m_fontsizes != NULL) delete [] m_fontsizes; | ||
18 | m_fontsizes = new int[m_maxsize]; | ||
19 | uint i = 0; | ||
20 | uint best = 0; | ||
21 | for (it = sizes.begin(); it != sizes.end(); it++) | ||
22 | { | ||
23 | #ifdef OPIE | ||
24 | m_fontsizes[i] = (*it); | ||
25 | #else | ||
26 | m_fontsizes[i] = (*it)/10; | ||
27 | #endif | ||
28 | if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best])) | ||
29 | { | ||
30 | best = i; | ||
31 | } | ||
32 | i++; | ||
33 | } | ||
34 | m_size = best; | ||
35 | } | ||
36 | return true; | ||
37 | } | ||
diff --git a/noncore/apps/opie-reader/FontControl.h b/noncore/apps/opie-reader/FontControl.h index d427680..02049d0 100644 --- a/noncore/apps/opie-reader/FontControl.h +++ b/noncore/apps/opie-reader/FontControl.h | |||
@@ -1,121 +1,104 @@ | |||
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 | ||
8 | class FontControl | 8 | class FontControl |
9 | { | 9 | { |
10 | int * m_fontsizes; | 10 | int * m_fontsizes; |
11 | int m_size; | 11 | int m_size; |
12 | QString m_fontname; | 12 | QString m_fontname; |
13 | int m_maxsize; | 13 | int m_maxsize; |
14 | bool m_hasCourier; | ||
14 | public: | 15 | public: |
15 | FontControl(QString n = "helvetica", int size = 10) | 16 | FontControl(QString n = "helvetica", int size = 10) |
16 | : | 17 | : |
17 | m_fontsizes(NULL) | 18 | m_fontsizes(NULL), m_hasCourier(false) |
18 | { | 19 | { |
19 | ChangeFont(n, size); | 20 | ChangeFont(n, size); |
20 | } | 21 | } |
21 | ~FontControl() | 22 | ~FontControl() |
22 | { | 23 | { |
23 | if (m_fontsizes != NULL) delete [] m_fontsizes; | 24 | if (m_fontsizes != NULL) delete [] m_fontsizes; |
24 | } | 25 | } |
26 | void hasCourier(bool _b) { m_hasCourier = _b; } | ||
27 | bool hasCourier() { return m_hasCourier; } | ||
25 | QString name() { return m_fontname; } | 28 | QString name() { return m_fontname; } |
26 | int currentsize() { return m_fontsizes[m_size]; } | 29 | int currentsize() { return m_fontsizes[m_size]; } |
27 | int getsize(CStyle size) | 30 | int getsize(CStyle size) |
28 | { | 31 | { |
29 | return m_fontsizes[m_size+size.getFontSize()]; | 32 | int tgt = m_size+size.getFontSize(); |
33 | if (tgt < 0) | ||
34 | { | ||
35 | tgt = 0; | ||
36 | } | ||
37 | if (tgt >= m_maxsize) | ||
38 | { | ||
39 | tgt = m_maxsize - 1; | ||
40 | } | ||
41 | return m_fontsizes[tgt]; | ||
30 | } | 42 | } |
31 | int ascent() | 43 | int ascent() |
32 | { | 44 | { |
33 | QFont f(name(), currentsize()); | 45 | QFont f(name(), currentsize()); |
34 | QFontMetrics fm(f); | 46 | QFontMetrics fm(f); |
35 | return fm.ascent(); | 47 | return fm.ascent(); |
36 | } | 48 | } |
37 | int ascent(CStyle ch) | 49 | int ascent(CStyle ch) |
38 | { | 50 | { |
39 | QFont f(name(), getsize(ch)); | 51 | QFont f(name(), getsize(ch)); |
40 | QFontMetrics fm(f); | 52 | QFontMetrics fm(f); |
41 | return fm.ascent(); | 53 | return fm.ascent(); |
42 | } | 54 | } |
43 | int descent() | 55 | int descent() |
44 | { | 56 | { |
45 | QFont f(name(), currentsize()); | 57 | QFont f(name(), currentsize()); |
46 | QFontMetrics fm(f); | 58 | QFontMetrics fm(f); |
47 | return fm.descent(); | 59 | return fm.descent(); |
48 | } | 60 | } |
49 | int descent(CStyle ch) | 61 | int descent(CStyle ch) |
50 | { | 62 | { |
51 | QFont f(name(), getsize(ch)); | 63 | QFont f(name(), getsize(ch)); |
52 | QFontMetrics fm(f); | 64 | QFontMetrics fm(f); |
53 | return fm.descent(); | 65 | return fm.descent(); |
54 | } | 66 | } |
55 | int lineSpacing() | 67 | int lineSpacing() |
56 | { | 68 | { |
57 | QFont f(name(), currentsize()); | 69 | QFont f(name(), currentsize()); |
58 | QFontMetrics fm(f); | 70 | QFontMetrics fm(f); |
59 | return fm.lineSpacing(); | 71 | return fm.lineSpacing(); |
60 | } | 72 | } |
61 | int lineSpacing(CStyle ch) | 73 | int lineSpacing(CStyle ch) |
62 | { | 74 | { |
63 | QFont f(name(), getsize(ch)); | 75 | QFont f(name(), getsize(ch)); |
64 | QFontMetrics fm(f); | 76 | QFontMetrics fm(f); |
65 | return fm.lineSpacing(); | 77 | return fm.lineSpacing(); |
66 | } | 78 | } |
67 | bool decreasesize() | 79 | bool decreasesize() |
68 | { | 80 | { |
69 | if (--m_size < 0) | 81 | if (--m_size < 0) |
70 | { | 82 | { |
71 | m_size = 0; | 83 | m_size = 0; |
72 | return false; | 84 | return false; |
73 | } | 85 | } |
74 | else return true; | 86 | else return true; |
75 | } | 87 | } |
76 | bool increasesize() | 88 | bool increasesize() |
77 | { | 89 | { |
78 | if (++m_size >= m_maxsize) | 90 | if (++m_size >= m_maxsize) |
79 | { | 91 | { |
80 | m_size = m_maxsize - 1; | 92 | m_size = m_maxsize - 1; |
81 | return false; | 93 | return false; |
82 | } | 94 | } |
83 | else return true; | 95 | else return true; |
84 | } | 96 | } |
85 | bool ChangeFont(QString& n) | 97 | bool ChangeFont(QString& n) |
86 | { | 98 | { |
87 | return ChangeFont(n, currentsize()); | 99 | return ChangeFont(n, currentsize()); |
88 | } | 100 | } |
89 | bool ChangeFont(QString& n, int tgt) | 101 | bool ChangeFont(QString& n, int tgt); |
90 | { | ||
91 | QValueList<int>::Iterator it; | ||
92 | QFontDatabase fdb; | ||
93 | QValueList<int> sizes = fdb.pointSizes(n); | ||
94 | if (sizes.count() == 0) | ||
95 | { | ||
96 | return false; | ||
97 | } | ||
98 | else | ||
99 | { | ||
100 | m_fontname = n; | ||
101 | m_maxsize = sizes.count(); | ||
102 | if (m_fontsizes != NULL) delete [] m_fontsizes; | ||
103 | m_fontsizes = new int[m_maxsize]; | ||
104 | uint i = 0; | ||
105 | uint best = 0; | ||
106 | for (it = sizes.begin(); it != sizes.end(); it++) | ||
107 | { | ||
108 | m_fontsizes[i] = (*it); | ||
109 | if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best])) | ||
110 | { | ||
111 | best = i; | ||
112 | } | ||
113 | i++; | ||
114 | } | ||
115 | m_size = best; | ||
116 | } | ||
117 | return true; | ||
118 | } | ||
119 | }; | 102 | }; |
120 | 103 | ||
121 | #endif | 104 | #endif |
diff --git a/noncore/apps/opie-reader/GraphicWin.h b/noncore/apps/opie-reader/GraphicWin.h new file mode 100644 index 0000000..31811d2 --- a/dev/null +++ b/noncore/apps/opie-reader/GraphicWin.h | |||
@@ -0,0 +1,65 @@ | |||
1 | #ifndef __GRAPHICWIN_H | ||
2 | #define __GRAPHICWIN_H | ||
3 | |||
4 | #include <qscrollview.h> | ||
5 | #include <qpixmap.h> | ||
6 | #include <qpushbutton.h> | ||
7 | #include <qlayout.h> | ||
8 | |||
9 | class GraphicScroll : public QScrollView | ||
10 | { | ||
11 | Q_OBJECT | ||
12 | QWidget* m_picture; | ||
13 | protected: | ||
14 | void hideEvent( QHideEvent * p) | ||
15 | { | ||
16 | m_picture->setFixedSize(1,1); | ||
17 | } | ||
18 | public: | ||
19 | GraphicScroll( QWidget *parent=0, const char *name=0, WFlags f = 0) | ||
20 | : QScrollView(parent, name, f) | ||
21 | { | ||
22 | m_picture = new QWidget(viewport()); | ||
23 | addChild(m_picture); | ||
24 | } | ||
25 | void setPixmap(QPixmap& pm) | ||
26 | { | ||
27 | m_picture->setFixedSize(pm.size()); | ||
28 | m_picture->setBackgroundPixmap(pm); | ||
29 | } | ||
30 | /* | ||
31 | private slots: | ||
32 | void graphicClose() { emit Close(); } | ||
33 | signals: | ||
34 | void Close(); | ||
35 | */ | ||
36 | |||
37 | }; | ||
38 | |||
39 | |||
40 | class GraphicWin : public QWidget | ||
41 | { | ||
42 | Q_OBJECT | ||
43 | |||
44 | GraphicScroll* m_scroll; | ||
45 | signals: | ||
46 | void Closed(); | ||
47 | private slots: | ||
48 | void slotClosed() { emit Closed(); } | ||
49 | |||
50 | public: | ||
51 | |||
52 | void setPixmap(QPixmap& pm) { m_scroll->setPixmap(pm); } | ||
53 | GraphicWin( QWidget *parent=0, const char *name=0, WFlags f = 0) | ||
54 | : QWidget(parent, name, f) | ||
55 | { | ||
56 | QVBoxLayout* grid = new QVBoxLayout(this); | ||
57 | m_scroll = new GraphicScroll(this); | ||
58 | QPushButton* exitButton = new QPushButton("Close", this); | ||
59 | connect(exitButton, SIGNAL( released() ), this, SLOT( slotClosed() ) ); | ||
60 | grid->addWidget(m_scroll,1); | ||
61 | grid->addWidget(exitButton); | ||
62 | } | ||
63 | }; | ||
64 | |||
65 | #endif | ||
diff --git a/noncore/apps/opie-reader/Navigation.cpp b/noncore/apps/opie-reader/Navigation.cpp new file mode 100644 index 0000000..7b392ba --- a/dev/null +++ b/noncore/apps/opie-reader/Navigation.cpp | |||
@@ -0,0 +1,98 @@ | |||
1 | #include "Navigation.h" | ||
2 | |||
3 | void CNavigation::saveposn(size_t posn) | ||
4 | { | ||
5 | // qDebug("Saved:%u [%u,%u,%u]", posn, historystart, historycurrent, historyend); | ||
6 | historycurrent = historyend = (historycurrent+1)%NAVIGATION_HISTORY_SIZE; | ||
7 | history[historycurrent] = posn; | ||
8 | if (historystart == historyend) historystart = (historystart+1)%NAVIGATION_HISTORY_SIZE; | ||
9 | // qDebug("Saved:%u [%u,%u,%u]", posn, historystart, historycurrent, historyend); | ||
10 | } | ||
11 | |||
12 | bool CNavigation::forward(size_t& loc) | ||
13 | { | ||
14 | if (historycurrent != historyend) | ||
15 | { | ||
16 | historycurrent = (historycurrent + 1)%NAVIGATION_HISTORY_SIZE; | ||
17 | loc = history[historycurrent]; | ||
18 | //qDebug("Forward:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend); | ||
19 | return true; | ||
20 | } | ||
21 | else | ||
22 | { | ||
23 | return false; | ||
24 | } | ||
25 | } | ||
26 | |||
27 | bool CNavigation::back(size_t& loc) | ||
28 | { | ||
29 | if (historyend != historystart) | ||
30 | { | ||
31 | //qDebug("Back:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend); | ||
32 | if (historycurrent == historyend && history[historycurrent] != loc) | ||
33 | { | ||
34 | historyend = (historyend+1) % NAVIGATION_HISTORY_SIZE; | ||
35 | history[historyend] = loc; | ||
36 | } | ||
37 | else | ||
38 | { | ||
39 | size_t sv = historycurrent; | ||
40 | historycurrent = (historycurrent + NAVIGATION_HISTORY_SIZE - 1) % NAVIGATION_HISTORY_SIZE; | ||
41 | if (historycurrent == historystart) | ||
42 | { | ||
43 | historycurrent = sv; | ||
44 | return false; | ||
45 | } | ||
46 | } | ||
47 | loc = history[historycurrent]; | ||
48 | //qDebug("Back:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend); | ||
49 | return true; | ||
50 | } | ||
51 | else | ||
52 | { | ||
53 | return false; | ||
54 | } | ||
55 | } | ||
56 | |||
57 | #include <stdio.h> | ||
58 | |||
59 | void CNavigation::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) | ||
60 | { | ||
61 | len = srclen+sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE); | ||
62 | data = new unsigned char[len]; | ||
63 | unsigned char* p = data; | ||
64 | memcpy(p, src, srclen); | ||
65 | p += srclen; | ||
66 | memcpy(p, &historystart, sizeof(size_t)); | ||
67 | p += sizeof(size_t); | ||
68 | memcpy(p, &historyend, sizeof(size_t)); | ||
69 | p += sizeof(size_t); | ||
70 | memcpy(p, &historycurrent, sizeof(size_t)); | ||
71 | p += sizeof(size_t); | ||
72 | memcpy(p, history, sizeof(size_t)*NAVIGATION_HISTORY_SIZE); | ||
73 | printf("<%u,%u,%u>\n", historystart, historyend, historycurrent); | ||
74 | for (int i = historystart; i <= historyend; i++) | ||
75 | printf("<%u> ", history[i]); | ||
76 | printf("\n"); | ||
77 | } | ||
78 | |||
79 | void CNavigation::putSaveData(unsigned char*& src, unsigned short& srclen) | ||
80 | { | ||
81 | if (srclen >= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE)) | ||
82 | { | ||
83 | unsigned char* p = src; | ||
84 | memcpy(&historystart, p, sizeof(size_t)); | ||
85 | p += sizeof(size_t); | ||
86 | memcpy(&historyend, p, sizeof(size_t)); | ||
87 | p += sizeof(size_t); | ||
88 | memcpy(&historycurrent, p, sizeof(size_t)); | ||
89 | p += sizeof(size_t); | ||
90 | memcpy(history, p, sizeof(size_t)*NAVIGATION_HISTORY_SIZE); | ||
91 | src = p + sizeof(size_t)*NAVIGATION_HISTORY_SIZE; | ||
92 | srclen -= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE); | ||
93 | } | ||
94 | printf("<%u,%u,%u>\n", historystart, historyend, historycurrent); | ||
95 | for (int i = historystart; i <= historyend; i++) | ||
96 | printf("<%u> ", history[i]); | ||
97 | printf("\n"); | ||
98 | } | ||
diff --git a/noncore/apps/opie-reader/Navigation.h b/noncore/apps/opie-reader/Navigation.h new file mode 100644 index 0000000..57fb006 --- a/dev/null +++ b/noncore/apps/opie-reader/Navigation.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #include <stdlib.h> | ||
2 | |||
3 | const size_t NAVIGATION_HISTORY_SIZE = 32; | ||
4 | |||
5 | class CNavigation | ||
6 | { | ||
7 | size_t history[NAVIGATION_HISTORY_SIZE]; | ||
8 | size_t historystart, historyend, historycurrent; | ||
9 | public: | ||
10 | CNavigation() : historystart(0),historyend(0),historycurrent(0) {} | ||
11 | void saveposn(size_t posn); | ||
12 | bool forward(size_t& loc); | ||
13 | bool back(size_t& loc); | ||
14 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen); | ||
15 | void putSaveData(unsigned char*& src, unsigned short& srclen); | ||
16 | }; | ||
diff --git a/noncore/apps/opie-reader/Palm2QImage.cpp b/noncore/apps/opie-reader/Palm2QImage.cpp new file mode 100644 index 0000000..ef88cc5 --- a/dev/null +++ b/noncore/apps/opie-reader/Palm2QImage.cpp | |||
@@ -0,0 +1,290 @@ | |||
1 | /* -*- mode: c; indent-tabs-mode: nil; -*- */ | ||
2 | #include <stdio.h> | ||
3 | #include <stdlib.h> | ||
4 | #include <string.h> | ||
5 | #include <unistd.h> /* for link */ | ||
6 | #include <sys/types.h> | ||
7 | #include <sys/stat.h> | ||
8 | #include <stdarg.h> | ||
9 | |||
10 | #include <qimage.h> | ||
11 | |||
12 | /***********************************************************************/ | ||
13 | /***********************************************************************/ | ||
14 | /***** *****/ | ||
15 | /***** Code to decode the Palm image format to JPEG *****/ | ||
16 | /***** *****/ | ||
17 | /***********************************************************************/ | ||
18 | /***********************************************************************/ | ||
19 | |||
20 | #define READ_BIGENDIAN_SHORT(p) (((p)[0] << 8)|((p)[1])) | ||
21 | #define READ_BIGENDIAN_LONG(p) (((p)[0] << 24)|((p)[1] << 16)|((p)[2] << 8)|((p)[3])) | ||
22 | |||
23 | #define PALM_IS_COMPRESSED_FLAG 0x8000 | ||
24 | #define PALM_HAS_COLORMAP_FLAG 0x4000 | ||
25 | #define PALM_HAS_TRANSPARENCY_FLAG 0x2000 | ||
26 | #define PALM_DIRECT_COLOR_FLAG 0x0400 | ||
27 | #define PALM_4_BYTE_FIELD_FLAG 0x0200 | ||
28 | |||
29 | #define PALM_COMPRESSION_SCANLINE 0x00 | ||
30 | #define PALM_COMPRESSION_RLE 0x01 | ||
31 | #define PALM_COMPRESSION_PACKBITS 0x02 | ||
32 | #define PALM_COMPRESSION_NONE 0xFF | ||
33 | |||
34 | #define PALM_COLORMAP_SIZE 232 | ||
35 | |||
36 | typedef struct { | ||
37 | unsigned char red; | ||
38 | unsigned char green; | ||
39 | unsigned char blue; | ||
40 | } ColorMapEntry; | ||
41 | |||
42 | static ColorMapEntry Palm8BitColormap[] = { | ||
43 | { 255, 255, 255 }, { 255, 204, 255 }, { 255, 153, 255 }, { 255, 102, 255 }, | ||
44 | { 255, 51, 255 }, { 255, 0, 255 }, { 255, 255, 204 }, { 255, 204, 204 }, | ||
45 | { 255, 153, 204 }, { 255, 102, 204 }, { 255, 51, 204 }, { 255, 0, 204 }, | ||
46 | { 255, 255, 153 }, { 255, 204, 153 }, { 255, 153, 153 }, { 255, 102, 153 }, | ||
47 | { 255, 51, 153 }, { 255, 0, 153 }, { 204, 255, 255 }, { 204, 204, 255 }, | ||
48 | { 204, 153, 255 }, { 204, 102, 255 }, { 204, 51, 255 }, { 204, 0, 255 }, | ||
49 | { 204, 255, 204 }, { 204, 204, 204 }, { 204, 153, 204 }, { 204, 102, 204 }, | ||
50 | { 204, 51, 204 }, { 204, 0, 204 }, { 204, 255, 153 }, { 204, 204, 153 }, | ||
51 | { 204, 153, 153 }, { 204, 102, 153 }, { 204, 51, 153 }, { 204, 0, 153 }, | ||
52 | { 153, 255, 255 }, { 153, 204, 255 }, { 153, 153, 255 }, { 153, 102, 255 }, | ||
53 | { 153, 51, 255 }, { 153, 0, 255 }, { 153, 255, 204 }, { 153, 204, 204 }, | ||
54 | { 153, 153, 204 }, { 153, 102, 204 }, { 153, 51, 204 }, { 153, 0, 204 }, | ||
55 | { 153, 255, 153 }, { 153, 204, 153 }, { 153, 153, 153 }, { 153, 102, 153 }, | ||
56 | { 153, 51, 153 }, { 153, 0, 153 }, { 102, 255, 255 }, { 102, 204, 255 }, | ||
57 | { 102, 153, 255 }, { 102, 102, 255 }, { 102, 51, 255 }, { 102, 0, 255 }, | ||
58 | { 102, 255, 204 }, { 102, 204, 204 }, { 102, 153, 204 }, { 102, 102, 204 }, | ||
59 | { 102, 51, 204 }, { 102, 0, 204 }, { 102, 255, 153 }, { 102, 204, 153 }, | ||
60 | { 102, 153, 153 }, { 102, 102, 153 }, { 102, 51, 153 }, { 102, 0, 153 }, | ||
61 | { 51, 255, 255 }, { 51, 204, 255 }, { 51, 153, 255 }, { 51, 102, 255 }, | ||
62 | { 51, 51, 255 }, { 51, 0, 255 }, { 51, 255, 204 }, { 51, 204, 204 }, | ||
63 | { 51, 153, 204 }, { 51, 102, 204 }, { 51, 51, 204 }, { 51, 0, 204 }, | ||
64 | { 51, 255, 153 }, { 51, 204, 153 }, { 51, 153, 153 }, { 51, 102, 153 }, | ||
65 | { 51, 51, 153 }, { 51, 0, 153 }, { 0, 255, 255 }, { 0, 204, 255 }, | ||
66 | { 0, 153, 255 }, { 0, 102, 255 }, { 0, 51, 255 }, { 0, 0, 255 }, | ||
67 | { 0, 255, 204 }, { 0, 204, 204 }, { 0, 153, 204 }, { 0, 102, 204 }, | ||
68 | { 0, 51, 204 }, { 0, 0, 204 }, { 0, 255, 153 }, { 0, 204, 153 }, | ||
69 | { 0, 153, 153 }, { 0, 102, 153 }, { 0, 51, 153 }, { 0, 0, 153 }, | ||
70 | { 255, 255, 102 }, { 255, 204, 102 }, { 255, 153, 102 }, { 255, 102, 102 }, | ||
71 | { 255, 51, 102 }, { 255, 0, 102 }, { 255, 255, 51 }, { 255, 204, 51 }, | ||
72 | { 255, 153, 51 }, { 255, 102, 51 }, { 255, 51, 51 }, { 255, 0, 51 }, | ||
73 | { 255, 255, 0 }, { 255, 204, 0 }, { 255, 153, 0 }, { 255, 102, 0 }, | ||
74 | { 255, 51, 0 }, { 255, 0, 0 }, { 204, 255, 102 }, { 204, 204, 102 }, | ||
75 | { 204, 153, 102 }, { 204, 102, 102 }, { 204, 51, 102 }, { 204, 0, 102 }, | ||
76 | { 204, 255, 51 }, { 204, 204, 51 }, { 204, 153, 51 }, { 204, 102, 51 }, | ||
77 | { 204, 51, 51 }, { 204, 0, 51 }, { 204, 255, 0 }, { 204, 204, 0 }, | ||
78 | { 204, 153, 0 }, { 204, 102, 0 }, { 204, 51, 0 }, { 204, 0, 0 }, | ||
79 | { 153, 255, 102 }, { 153, 204, 102 }, { 153, 153, 102 }, { 153, 102, 102 }, | ||
80 | { 153, 51, 102 }, { 153, 0, 102 }, { 153, 255, 51 }, { 153, 204, 51 }, | ||
81 | { 153, 153, 51 }, { 153, 102, 51 }, { 153, 51, 51 }, { 153, 0, 51 }, | ||
82 | { 153, 255, 0 }, { 153, 204, 0 }, { 153, 153, 0 }, { 153, 102, 0 }, | ||
83 | { 153, 51, 0 }, { 153, 0, 0 }, { 102, 255, 102 }, { 102, 204, 102 }, | ||
84 | { 102, 153, 102 }, { 102, 102, 102 }, { 102, 51, 102 }, { 102, 0, 102 }, | ||
85 | { 102, 255, 51 }, { 102, 204, 51 }, { 102, 153, 51 }, { 102, 102, 51 }, | ||
86 | { 102, 51, 51 }, { 102, 0, 51 }, { 102, 255, 0 }, { 102, 204, 0 }, | ||
87 | { 102, 153, 0 }, { 102, 102, 0 }, { 102, 51, 0 }, { 102, 0, 0 }, | ||
88 | { 51, 255, 102 }, { 51, 204, 102 }, { 51, 153, 102 }, { 51, 102, 102 }, | ||
89 | { 51, 51, 102 }, { 51, 0, 102 }, { 51, 255, 51 }, { 51, 204, 51 }, | ||
90 | { 51, 153, 51 }, { 51, 102, 51 }, { 51, 51, 51 }, { 51, 0, 51 }, | ||
91 | { 51, 255, 0 }, { 51, 204, 0 }, { 51, 153, 0 }, { 51, 102, 0 }, | ||
92 | { 51, 51, 0 }, { 51, 0, 0 }, { 0, 255, 102 }, { 0, 204, 102 }, | ||
93 | { 0, 153, 102 }, { 0, 102, 102 }, { 0, 51, 102 }, { 0, 0, 102 }, | ||
94 | { 0, 255, 51 }, { 0, 204, 51 }, { 0, 153, 51 }, { 0, 102, 51 }, | ||
95 | { 0, 51, 51 }, { 0, 0, 51 }, { 0, 255, 0 }, { 0, 204, 0 }, | ||
96 | { 0, 153, 0 }, { 0, 102, 0 }, { 0, 51, 0 }, { 17, 17, 17 }, | ||
97 | { 34, 34, 34 }, { 68, 68, 68 }, { 85, 85, 85 }, { 119, 119, 119 }, | ||
98 | { 136, 136, 136 }, { 170, 170, 170 }, { 187, 187, 187 }, { 221, 221, 221 }, | ||
99 | { 238, 238, 238 }, { 192, 192, 192 }, { 128, 0, 0 }, { 128, 0, 128 }, | ||
100 | { 0, 128, 0 }, { 0, 128, 128 }, { 0, 0, 0 }, { 0, 0, 0 }, | ||
101 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | ||
102 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | ||
103 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | ||
104 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | ||
105 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | ||
106 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }}; | ||
107 | |||
108 | static ColorMapEntry Palm1BitColormap[] = {{ 255, 255, 255 }, { 0, 0, 0 }}; | ||
109 | |||
110 | static ColorMapEntry Palm2BitColormap[] = { | ||
111 | { 255, 255, 255 }, { 192, 192, 192 }, { 128, 128, 128 }, { 0, 0, 0 }}; | ||
112 | |||
113 | static ColorMapEntry Palm4BitColormap[] = { | ||
114 | { 255, 255, 255 }, { 238, 238, 238 }, { 221, 221, 221 }, { 204, 204, 204 }, | ||
115 | { 187, 187, 187 }, { 170, 170, 170 }, { 153, 153, 153 }, { 136, 136, 136 }, | ||
116 | { 119, 119, 119 }, { 102, 102, 102 }, { 85, 85, 85 }, { 68, 68, 68 }, | ||
117 | { 51, 51, 51 }, { 34, 34, 34 }, { 17, 17, 17 }, { 0, 0, 0 }}; | ||
118 | |||
119 | QImage* Palm2QImage | ||
120 | (unsigned char *image_bytes_in, int byte_count_in) | ||
121 | { | ||
122 | unsigned int width, height, bytes_per_row, flags, next_depth_offset; | ||
123 | unsigned int bits_per_pixel, version, transparent_index, compression_type, i, j, inval, inbit, mask, incount; | ||
124 | unsigned int palm_red_bits, palm_green_bits, palm_blue_bits; | ||
125 | unsigned char *palm_ptr, *x_ptr, *imagedata, *inbyte, *rowbuf, *lastrow, | ||
126 | *imagedatastart, *palmimage; | ||
127 | ColorMapEntry *colormap; | ||
128 | |||
129 | palmimage = image_bytes_in; | ||
130 | width = READ_BIGENDIAN_SHORT(palmimage + 0); | ||
131 | height = READ_BIGENDIAN_SHORT(palmimage + 2); | ||
132 | bytes_per_row = READ_BIGENDIAN_SHORT(palmimage + 4); | ||
133 | flags = READ_BIGENDIAN_SHORT(palmimage + 6); | ||
134 | bits_per_pixel = palmimage[8]; | ||
135 | version = palmimage[9]; | ||
136 | next_depth_offset = READ_BIGENDIAN_SHORT(palmimage + 10); | ||
137 | transparent_index = palmimage[12]; | ||
138 | compression_type = palmimage[13]; | ||
139 | /* bytes 14 and 15 are reserved by Palm and always 0 */ | ||
140 | |||
141 | #if 0 | ||
142 | qDebug ("Palm image is %dx%d, %d bpp, version %d, flags 0x%x, compression %d", | ||
143 | width, height, bits_per_pixel, version, flags, compression_type); | ||
144 | #endif | ||
145 | |||
146 | if (compression_type == PALM_COMPRESSION_PACKBITS) { | ||
147 | qDebug ("Image uses packbits compression; not yet supported"); | ||
148 | return NULL; | ||
149 | } else if ((compression_type != PALM_COMPRESSION_NONE) && | ||
150 | (compression_type != PALM_COMPRESSION_RLE) && | ||
151 | (compression_type != PALM_COMPRESSION_SCANLINE)) { | ||
152 | qDebug ("Image uses unknown compression, code 0x%x", compression_type); | ||
153 | return NULL; | ||
154 | } | ||
155 | |||
156 | /* as of PalmOS 4.0, there are 6 different kinds of Palm pixmaps: | ||
157 | |||
158 | 1, 2, or 4 bit grayscale | ||
159 | 8-bit StaticColor using the Palm standard colormap | ||
160 | 8-bit PseudoColor using a user-specified colormap | ||
161 | 16-bit DirectColor using 5 bits for red, 6 for green, and 5 for blue | ||
162 | |||
163 | Each of these can be compressed with one of four compression schemes, | ||
164 | "RLE", "Scanline", "PackBits", or none. | ||
165 | |||
166 | We begin by constructing the colormap. | ||
167 | */ | ||
168 | |||
169 | if (flags & PALM_HAS_COLORMAP_FLAG) { | ||
170 | qDebug("Palm images with custom colormaps are not currently supported.\n"); | ||
171 | return NULL; | ||
172 | } else if (bits_per_pixel == 1) { | ||
173 | colormap = Palm1BitColormap; | ||
174 | imagedatastart = palmimage + 16; | ||
175 | } else if (bits_per_pixel == 2) { | ||
176 | colormap = Palm2BitColormap; | ||
177 | imagedatastart = palmimage + 16; | ||
178 | } else if (bits_per_pixel == 4) { | ||
179 | colormap = Palm4BitColormap; | ||
180 | imagedatastart = palmimage + 16; | ||
181 | } else if (bits_per_pixel == 8) { | ||
182 | colormap = Palm8BitColormap; | ||
183 | imagedatastart = palmimage + 16; | ||
184 | } else if (bits_per_pixel == 16 && (flags & PALM_DIRECT_COLOR_FLAG)) { | ||
185 | colormap = NULL; | ||
186 | palm_red_bits = palmimage[16]; | ||
187 | palm_green_bits = palmimage[17]; | ||
188 | palm_blue_bits = palmimage[18]; | ||
189 | if (palm_blue_bits > 8 || palm_green_bits > 8 || palm_red_bits > 8) { | ||
190 | qDebug("Can't handle this format DirectColor image -- too wide in some color (%d:%d:%d)\n", | ||
191 | palm_red_bits, palm_green_bits, palm_blue_bits); | ||
192 | return NULL; | ||
193 | } | ||
194 | if (bits_per_pixel > (8 * sizeof(unsigned long))) { | ||
195 | qDebug ("Can't handle this format DirectColor image -- too many bits per pixel (%d)\n", | ||
196 | bits_per_pixel); | ||
197 | return NULL; | ||
198 | } | ||
199 | imagedatastart = palmimage + 24; | ||
200 | } else { | ||
201 | qDebug("Unknown bits-per-pixel of %d encountered.\n", bits_per_pixel); | ||
202 | return NULL; | ||
203 | } | ||
204 | |||
205 | QImage* qimage = new QImage(width, height, 16); | ||
206 | |||
207 | /* row by row, uncompress the Palm image and copy it to the JPEG buffer */ | ||
208 | rowbuf = new unsigned char[bytes_per_row * width]; | ||
209 | lastrow = new unsigned char[bytes_per_row * width]; | ||
210 | |||
211 | for (i=0, palm_ptr = imagedatastart , x_ptr = imagedata; i < height; ++i) { | ||
212 | |||
213 | /* first, uncompress the Palm image */ | ||
214 | if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_RLE)) { | ||
215 | for (j = 0; j < bytes_per_row; ) { | ||
216 | incount = *palm_ptr++; | ||
217 | inval = *palm_ptr++; | ||
218 | memset(rowbuf + j, inval, incount); | ||
219 | j += incount; | ||
220 | } | ||
221 | } else if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_SCANLINE)) { | ||
222 | for (j = 0; j < bytes_per_row; j += 8) { | ||
223 | incount = *palm_ptr++; | ||
224 | inval = ((bytes_per_row - j) < 8) ? (bytes_per_row - j) : 8; | ||
225 | for (inbit = 0; inbit < inval; inbit += 1) { | ||
226 | if (incount & (1 << (7 - inbit))) | ||
227 | rowbuf[j + inbit] = *palm_ptr++; | ||
228 | else | ||
229 | rowbuf[j + inbit] = lastrow[j + inbit]; | ||
230 | } | ||
231 | } | ||
232 | memcpy (lastrow, rowbuf, bytes_per_row); | ||
233 | } else if (((flags & PALM_IS_COMPRESSED_FLAG) && | ||
234 | (compression_type == PALM_COMPRESSION_NONE)) || | ||
235 | (flags && PALM_IS_COMPRESSED_FLAG) == 0) { | ||
236 | memcpy (rowbuf, palm_ptr, bytes_per_row); | ||
237 | palm_ptr += bytes_per_row; | ||
238 | } | ||
239 | |||
240 | /* next, write it to the GDK bitmap */ | ||
241 | if (colormap) { | ||
242 | mask = (1 << bits_per_pixel) - 1; | ||
243 | for (inbit = 8 - bits_per_pixel, inbyte = rowbuf, j = 0; j < width; ++j) { | ||
244 | inval = ((*inbyte) & (mask << inbit)) >> inbit; | ||
245 | /* correct for oddity of the 8-bit color Palm pixmap... */ | ||
246 | if ((bits_per_pixel == 8) && (inval == 0xFF)) inval = 231; | ||
247 | /* now lookup the correct color and set the pixel in the GTK bitmap */ | ||
248 | QRgb colour = qRgb(colormap[inval].red, colormap[inval].green, colormap[inval].blue); | ||
249 | qimage->setPixel(j, i, colour); | ||
250 | if (!inbit) { | ||
251 | ++inbyte; | ||
252 | inbit = 8 - bits_per_pixel; | ||
253 | } else { | ||
254 | inbit -= bits_per_pixel; | ||
255 | } | ||
256 | } | ||
257 | } else if (!colormap && | ||
258 | bits_per_pixel == 16) { | ||
259 | for (inbyte = rowbuf, j = 0; j < width; ++j) { | ||
260 | inval = (inbyte[0] << 8) | inbyte[1]; | ||
261 | #if 0 | ||
262 | qDebug ("pixel is %d,%d (%02x:%02x:%02x)", | ||
263 | j, i, | ||
264 | (inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1), | ||
265 | (inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1), | ||
266 | (inval >> 0) & ((1 << palm_blue_bits) - 1)); | ||
267 | #endif | ||
268 | QRgb colour = qRgb( | ||
269 | (inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1), | ||
270 | (inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1), | ||
271 | (inval >> 0) & ((1 << palm_blue_bits) - 1)); | ||
272 | qimage->setPixel(j, i, colour); | ||
273 | inbyte += 2; | ||
274 | } | ||
275 | } | ||
276 | } | ||
277 | |||
278 | delete [] rowbuf; | ||
279 | delete [] lastrow; | ||
280 | |||
281 | return qimage; | ||
282 | } | ||
283 | |||
284 | QPixmap* hRule(int w, int h, unsigned char r, unsigned char g, unsigned char b) | ||
285 | { | ||
286 | // qDebug("hrule [%d, %d]", w, h); | ||
287 | QPixmap* qimage = new QPixmap(w, h); | ||
288 | qimage->fill(QColor(r,g,b)); | ||
289 | return qimage; | ||
290 | } | ||
diff --git a/noncore/apps/opie-reader/Palm2QImage.h b/noncore/apps/opie-reader/Palm2QImage.h new file mode 100644 index 0000000..3ac2d19 --- a/dev/null +++ b/noncore/apps/opie-reader/Palm2QImage.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #include <qimage.h> | ||
2 | #include <qpixmap.h> | ||
3 | |||
4 | QImage* Palm2QImage | ||
5 | (unsigned char *image_bytes_in, int byte_count_in); | ||
6 | |||
7 | QPixmap* hRule(int w, int h, unsigned char r=0, unsigned char g=0, unsigned char b=0); | ||
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp index 7cf08e5..3995ee7 100644 --- a/noncore/apps/opie-reader/QTReader.cpp +++ b/noncore/apps/opie-reader/QTReader.cpp | |||
@@ -1,1109 +1,1327 @@ | |||
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 <qpainter.h> | 11 | #include <qpainter.h> |
12 | #include "config.h" | 12 | #include "config.h" |
13 | #include "QTReader.h" | 13 | #include "QTReader.h" |
14 | #include "QTReaderApp.h" | 14 | #include "QTReaderApp.h" |
15 | #include "CDrawBuffer.h" | 15 | #include "CDrawBuffer.h" |
16 | #include <qpe/qpeapplication.h> | 16 | #include <qpe/qpeapplication.h> |
17 | #include <math.h> | 17 | #include <math.h> |
18 | #include <ctype.h> | 18 | #include <ctype.h> |
19 | #include <stdio.h> //for sprintf | 19 | #include <stdio.h> //for sprintf |
20 | #include <qpe/config.h> | 20 | #include <qpe/config.h> |
21 | #include <qpe/applnk.h> | 21 | #include <qpe/applnk.h> |
22 | #include <qfontdatabase.h> | 22 | #include <qfontdatabase.h> |
23 | #include <qpe/global.h> | 23 | #include <qpe/global.h> |
24 | #include <qpe/qcopenvelope_qws.h> | 24 | #include <qpe/qcopenvelope_qws.h> |
25 | #include "StateData.h" | ||
25 | 26 | ||
26 | #ifdef _UNICODE | 27 | #ifdef _UNICODE |
27 | const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; | 28 | const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; |
28 | #else | 29 | #else |
29 | const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 }; | 30 | const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 }; |
30 | #endif | 31 | #endif |
31 | //const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; | 32 | //const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; |
32 | 33 | ||
33 | //const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 }; | 34 | //const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 }; |
34 | //const int QTReader::fontsizes[] = {10,16,17,22,0}; | 35 | //const int QTReader::fontsizes[] = {10,16,17,22,0}; |
35 | //const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 }; | 36 | //const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 }; |
36 | //const int QTReader::fontsizes[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,0}; | 37 | //const int QTReader::fontsizes[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,0}; |
37 | 38 | ||
38 | QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : | 39 | QTReader::QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0) : |
39 | QWidget(parent, name, f), | 40 | QWidget(parent, name, f), |
40 | m_delay(100), | 41 | m_delay(100), |
41 | m_scrolldy1(0), | 42 | m_scrolldy1(0), |
42 | m_scrolldy2(0), | 43 | m_scrolldy2(0), |
43 | m_autoScroll(false), | 44 | m_autoScroll(false), |
44 | //textarray(NULL), | 45 | //textarray(NULL), |
45 | //locnarray(NULL), | 46 | //locnarray(NULL), |
46 | numlines(0), | 47 | numlines(0), |
47 | m_fontname("unifont"), | 48 | m_fontname("unifont"), |
48 | m_fm(NULL), | 49 | m_fm(NULL), |
49 | mouseUpOn(true), | 50 | mouseUpOn(true), |
50 | m_twotouch(true), | 51 | m_twotouch(true), |
51 | m_touchone(true) | 52 | m_touchone(true), |
53 | bDoUpdates(false), | ||
54 | m_navkeys(true) | ||
52 | { | 55 | { |
53 | m_overlap = 1; | 56 | m_overlap = 1; |
54 | // init(); | 57 | // init(); |
55 | } | 58 | } |
56 | /* | 59 | /* |
57 | QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0) : | 60 | QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0) : |
58 | QWidget(parent, name, f), | 61 | QWidget(parent, name, f), |
59 | m_textfont(0), | 62 | m_textfont(0), |
60 | m_textsize(1), | 63 | m_textsize(1), |
61 | textarray(NULL), | 64 | textarray(NULL), |
62 | numlines(0), | 65 | numlines(0), |
63 | bstripcr(true), | 66 | bstripcr(true), |
64 | bunindent(false), | 67 | bunindent(false), |
65 | brepara(false), | 68 | brepara(false), |
66 | bdblspce(false), | 69 | bdblspce(false), |
67 | btight(false), | 70 | btight(false), |
68 | bindenter(0), | 71 | bindenter(0), |
69 | m_fm(NULL) | 72 | m_fm(NULL) |
70 | { | 73 | { |
71 | init(); | 74 | init(); |
72 | // qDebug("Load_file(1)"); | 75 | // qDebug("Load_file(1)"); |
73 | load_file((const tchar*)filename); | 76 | load_file((const tchar*)filename); |
74 | } | 77 | } |
75 | */ | 78 | */ |
76 | 79 | ||
77 | long QTReader::real_delay() | 80 | long QTReader::real_delay() |
78 | { | 81 | { |
79 | return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing ); | 82 | return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing ); |
80 | } | 83 | } |
81 | 84 | ||
82 | void QTReader::mousePressEvent( QMouseEvent* _e ) | 85 | void QTReader::mousePressEvent( QMouseEvent* _e ) |
83 | { | 86 | { |
87 | buffdoc.unsuspend(); | ||
84 | if (_e->button() == RightButton) | 88 | if (_e->button() == RightButton) |
85 | { | 89 | { |
86 | mouseUpOn = false; | 90 | mouseUpOn = false; |
87 | if (_e->y() > height()/2) | 91 | if (buffdoc.hasnavigation()) |
88 | { | 92 | { |
89 | goDown(); | 93 | if (_e->y() > (2*height())/3) |
94 | { | ||
95 | goDown(); | ||
96 | } | ||
97 | else if (_e->y() < height()/3) | ||
98 | { | ||
99 | goUp(); | ||
100 | } | ||
101 | else | ||
102 | { | ||
103 | if (_e->x() < width()/3) | ||
104 | { | ||
105 | size_t target = pagelocate(); | ||
106 | if (buffdoc.back(target)) | ||
107 | { | ||
108 | locate(target); | ||
109 | } | ||
110 | } | ||
111 | else if (_e->x() > (2*width())/3) | ||
112 | { | ||
113 | size_t target = pagelocate(); | ||
114 | if (buffdoc.forward(target)) | ||
115 | { | ||
116 | locate(target); | ||
117 | } | ||
118 | } | ||
119 | else | ||
120 | { | ||
121 | buffdoc.saveposn(pagelocate()); | ||
122 | locate(buffdoc.getHome()); | ||
123 | } | ||
124 | } | ||
90 | } | 125 | } |
91 | else | 126 | else |
92 | { | 127 | { |
93 | goUp(); | 128 | if (_e->y() > height()/2) |
129 | { | ||
130 | goDown(); | ||
131 | } | ||
132 | else | ||
133 | { | ||
134 | goUp(); | ||
135 | } | ||
94 | } | 136 | } |
95 | } | 137 | } |
96 | } | 138 | } |
97 | 139 | ||
98 | bool QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt) | 140 | linkType QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt) |
99 | { | 141 | { |
100 | int lineno = 0; | 142 | int lineno = 0; |
101 | int ht = textarray[0]->lineSpacing(); | 143 | int ht = textarray[0]->lineSpacing(); |
102 | while ((ht < y) && (lineno < numlines)) | 144 | while ((ht < y) && (lineno < numlines)) |
103 | { | 145 | { |
104 | ht += textarray[++lineno]->lineSpacing(); | 146 | ht += textarray[++lineno]->lineSpacing(); |
105 | } | 147 | } |
106 | start = locnarray[lineno]; | 148 | start = locnarray[lineno]; |
107 | if (m_bMonoSpaced) | 149 | if (m_bMonoSpaced) |
108 | { | 150 | { |
109 | offset = x/m_charWidth; | 151 | offset = x/m_charWidth; |
110 | } | 152 | } |
111 | else | 153 | else |
112 | { | 154 | { |
113 | int i; | 155 | int i; |
114 | CDrawBuffer* t = textarray[lineno]; | 156 | CDrawBuffer* t = textarray[lineno]; |
115 | for (i = t->length(); t->width(i) > x; i--); | 157 | x = x - t->offset(width()); |
158 | for (i = t->length(); i >= 0 && t->width(i) > x; i--); | ||
116 | offset = i; | 159 | offset = i; |
117 | } | 160 | } |
118 | return textarray[lineno]->isLink(offset, tgt); | 161 | return textarray[lineno]->getLinkType(offset, tgt); |
119 | } | 162 | } |
120 | 163 | ||
121 | void QTReader::setTwoTouch(bool _b) | 164 | void QTReader::setTwoTouch(bool _b) |
122 | { | 165 | { |
123 | setBackgroundColor( white ); | 166 | setBackgroundColor( white ); |
124 | m_twotouch = m_touchone = _b; | 167 | m_twotouch = m_touchone = _b; |
125 | } | 168 | } |
126 | 169 | ||
170 | void QTReader::setContinuous(bool _b) | ||
171 | { | ||
172 | buffdoc.unsuspend(); | ||
173 | buffdoc.setContinuous(m_continuousDocument = _b); | ||
174 | } | ||
175 | |||
127 | void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | 176 | void QTReader::mouseReleaseEvent( QMouseEvent* _e ) |
128 | { | 177 | { |
178 | buffdoc.unsuspend(); | ||
129 | if (_e->button() == LeftButton) | 179 | if (_e->button() == LeftButton) |
130 | { | 180 | { |
131 | if (mouseUpOn) | 181 | if (mouseUpOn) |
132 | { | 182 | { |
133 | if (textarray[0] != NULL) | 183 | if (textarray[0] != NULL) |
134 | { | 184 | { |
135 | QString wrd, line; | 185 | QString wrd, line; |
136 | // int lineno = _e->y()/m_linespacing; | 186 | // int lineno = _e->y()/m_linespacing; |
137 | int lineno = 0; | 187 | int lineno = 0; |
138 | int ht = textarray[0]->lineSpacing(); | 188 | int ht = textarray[0]->lineSpacing(); |
139 | while ((ht < _e->y()) && (lineno < numlines)) | 189 | while ((ht < _e->y()) && (lineno < numlines)) |
140 | { | 190 | { |
141 | ht += textarray[++lineno]->lineSpacing(); | 191 | ht += textarray[++lineno]->lineSpacing(); |
142 | } | 192 | } |
143 | size_t startpos, startoffset, tgt; | 193 | size_t startpos, startoffset, tgt; |
144 | if (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt)) | 194 | switch (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt)) |
145 | { | 195 | { |
146 | if (buffdoc.hyperlink(tgt)) | 196 | case eLink: |
147 | { | 197 | { |
148 | fillbuffer(); | 198 | size_t saveposn = pagelocate(); |
149 | update(); | 199 | if (buffdoc.hyperlink(tgt)) |
200 | { | ||
201 | buffdoc.saveposn(saveposn); | ||
202 | fillbuffer(); | ||
203 | update(); | ||
204 | } | ||
205 | else | ||
206 | { | ||
207 | locate(pagelocate()); | ||
208 | } | ||
209 | return; | ||
150 | } | 210 | } |
151 | else | 211 | case ePicture: |
152 | { | 212 | { |
153 | locate(pagelocate()); | 213 | qDebug("Picture:%x", tgt); |
214 | QPixmap* pm = buffdoc.getPicture(tgt); | ||
215 | if (pm != NULL) | ||
216 | { | ||
217 | emit OnShowPicture(*pm); | ||
218 | delete pm; | ||
219 | } | ||
220 | else | ||
221 | { | ||
222 | locate(pagelocate()); | ||
223 | } | ||
224 | return; | ||
154 | } | 225 | } |
155 | return; | 226 | case eNone: |
227 | break; | ||
228 | default: | ||
229 | qDebug("Unknown linktype"); | ||
230 | return; | ||
156 | } | 231 | } |
157 | if (m_twotouch) | 232 | if (m_twotouch) |
158 | { | 233 | { |
159 | if (m_touchone) | 234 | if (m_touchone) |
160 | { | 235 | { |
161 | m_touchone = false; | 236 | m_touchone = false; |
162 | m_startpos = startpos; | 237 | m_startpos = startpos; |
163 | m_startoffset = startoffset; | 238 | m_startoffset = startoffset; |
164 | setBackgroundColor( lightGray ); | 239 | setBackgroundColor( lightGray ); |
165 | } | 240 | } |
166 | else | 241 | else |
167 | { | 242 | { |
168 | m_touchone = true; | 243 | m_touchone = true; |
169 | setBackgroundColor( white ); | 244 | setBackgroundColor( white ); |
170 | size_t endpos, endoffset; | 245 | size_t endpos, endoffset; |
171 | endpos = startpos; | 246 | endpos = startpos; |
172 | endoffset = startoffset; | 247 | endoffset = startoffset; |
173 | size_t currentpos = locate(); | 248 | size_t currentpos = locate(); |
174 | if (endpos >= m_startpos) | 249 | if (endpos >= m_startpos) |
175 | { | 250 | { |
176 | jumpto(m_startpos); | 251 | jumpto(m_startpos); |
177 | for (int i = 0; i < m_startoffset; i++) | 252 | for (int i = 0; i < m_startoffset; i++) |
178 | { | 253 | { |
179 | getch(); | 254 | getch(); |
180 | } | 255 | } |
181 | if (m_startpos == endpos) | 256 | if (m_startpos == endpos) |
182 | { | 257 | { |
183 | for (int i = m_startoffset; i <= endoffset; i++) | 258 | for (int i = m_startoffset; i <= endoffset; i++) |
184 | { | 259 | { |
185 | wrd += QChar(getch()); | 260 | wrd += QChar(getch()); |
186 | } | 261 | } |
187 | } | 262 | } |
188 | else | 263 | else |
189 | { | 264 | { |
190 | while (buffdoc.explocate() <= endpos) | 265 | while (buffdoc.explocate() <= endpos) |
191 | { | 266 | { |
192 | wrd += QChar(getch()); | 267 | wrd += QChar(getch()); |
193 | } | 268 | } |
194 | for (int i = 0; i < endoffset; i++) | 269 | for (int i = 0; i < endoffset; i++) |
195 | { | 270 | { |
196 | wrd += QChar(getch()); | 271 | wrd += QChar(getch()); |
197 | } | 272 | } |
198 | } | 273 | } |
199 | jumpto(currentpos); | 274 | jumpto(currentpos); |
200 | } | 275 | } |
201 | } | 276 | } |
202 | } | 277 | } |
203 | else if (m_bMonoSpaced) | 278 | else if (m_bMonoSpaced) |
204 | { | 279 | { |
205 | int chno = _e->x()/m_charWidth; | 280 | int chno = _e->x()/m_charWidth; |
206 | if (chno < ustrlen(textarray[lineno]->data())) | 281 | if (chno < ustrlen(textarray[lineno]->data())) |
207 | { | 282 | { |
208 | wrd[0] = textarray[lineno]->data()[chno]; | 283 | wrd[0] = textarray[lineno]->data()[chno]; |
209 | } | 284 | } |
210 | } | 285 | } |
211 | else | 286 | else |
212 | { | 287 | { |
213 | CDrawBuffer* t = textarray[lineno]; | 288 | CDrawBuffer* t = textarray[lineno]; |
214 | int first = 0; | 289 | int first = 0; |
290 | int tgt = _e->x() - t->offset(width()); | ||
215 | while (1) | 291 | while (1) |
216 | { | 292 | { |
217 | int i = first+1; | 293 | int i = first+1; |
218 | while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; | 294 | while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; |
219 | if (t->width(i) > _e->x()) | 295 | if (t->width(i) > tgt) |
220 | { | 296 | { |
221 | wrd = toQString(t->data()+first, i - first); | 297 | wrd = toQString(t->data()+first, i - first); |
222 | break; | 298 | break; |
223 | } | 299 | } |
224 | while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; | 300 | while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; |
225 | if ((*t)[i] == 0) break; | 301 | if ((*t)[i] == 0) break; |
226 | first = i; | 302 | first = i; |
227 | } | 303 | } |
228 | } | 304 | } |
229 | if (!wrd.isEmpty()) | 305 | if (!wrd.isEmpty()) |
230 | { | 306 | { |
231 | emit OnWordSelected(wrd, locnarray[lineno], (m_twotouch) ? wrd : toQString(textarray[lineno]->data())); | 307 | emit OnWordSelected(wrd, locnarray[lineno], (m_twotouch) ? wrd : toQString(textarray[lineno]->data())); |
232 | } | 308 | } |
233 | } | 309 | } |
234 | } | 310 | } |
235 | else | 311 | else |
236 | { | 312 | { |
237 | mouseUpOn = true; | 313 | mouseUpOn = true; |
238 | } | 314 | } |
239 | } | 315 | } |
240 | } | 316 | } |
241 | 317 | ||
242 | void QTReader::focusInEvent(QFocusEvent* e) | 318 | void QTReader::focusInEvent(QFocusEvent* e) |
243 | { | 319 | { |
244 | if (m_autoScroll) timer->start(real_delay(), false); | 320 | if (m_autoScroll) timer->start(real_delay(), false); |
245 | update(); | 321 | update(); |
246 | } | 322 | } |
247 | 323 | ||
248 | void QTReader::focusOutEvent(QFocusEvent* e) | 324 | void QTReader::focusOutEvent(QFocusEvent* e) |
249 | { | 325 | { |
250 | if (m_autoScroll) | 326 | if (m_autoScroll) |
251 | { | 327 | { |
252 | timer->stop(); | 328 | timer->stop(); |
253 | m_scrolldy1 = m_scrolldy2 = 0; | 329 | m_scrolldy1 = m_scrolldy2 = 0; |
254 | } | 330 | } |
255 | } | 331 | } |
256 | 332 | ||
257 | #include <qapplication.h> | 333 | #include <qapplication.h> |
258 | #include <qdrawutil.h> | 334 | #include <qdrawutil.h> |
259 | #include <unistd.h> | 335 | #include <unistd.h> |
260 | 336 | ||
261 | void QTReader::goDown() | 337 | void QTReader::goDown() |
262 | { | 338 | { |
263 | if (m_bpagemode) | 339 | if (m_bpagemode) |
264 | { | 340 | { |
265 | dopagedn(); | 341 | dopagedn(); |
266 | } | 342 | } |
267 | else | 343 | else |
268 | { | 344 | { |
269 | lineDown(); | 345 | lineDown(); |
270 | } | 346 | } |
271 | } | 347 | } |
272 | 348 | ||
273 | void QTReader::goUp() | 349 | void QTReader::goUp() |
274 | { | 350 | { |
275 | if (m_bpagemode) | 351 | if (m_bpagemode) |
276 | { | 352 | { |
277 | dopageup(); | 353 | dopageup(); |
278 | } | 354 | } |
279 | else | 355 | else |
280 | { | 356 | { |
281 | lineUp(); | 357 | lineUp(); |
282 | } | 358 | } |
283 | } | 359 | } |
284 | 360 | ||
361 | void QTReader::NavUp() | ||
362 | { | ||
363 | buffdoc.unsuspend(); | ||
364 | if (buffdoc.hasnavigation()) | ||
365 | { | ||
366 | /* | ||
367 | size_t target = pagelocate(); | ||
368 | if (buffdoc.back(target)) | ||
369 | { | ||
370 | locate(target); | ||
371 | } | ||
372 | */ | ||
373 | locate(buffdoc.startSection()); | ||
374 | } | ||
375 | else | ||
376 | { | ||
377 | goUp(); | ||
378 | } | ||
379 | } | ||
380 | |||
381 | void QTReader::NavDown() | ||
382 | { | ||
383 | buffdoc.unsuspend(); | ||
384 | if (buffdoc.hasnavigation()) | ||
385 | { | ||
386 | /* | ||
387 | size_t target = pagelocate(); | ||
388 | if (buffdoc.forward(target)) | ||
389 | { | ||
390 | locate(target); | ||
391 | } | ||
392 | */ | ||
393 | dopageup(buffdoc.endSection()); | ||
394 | } | ||
395 | else | ||
396 | { | ||
397 | goDown(); | ||
398 | } | ||
399 | } | ||
400 | |||
401 | void QTReader::zoomin() | ||
402 | { | ||
403 | if (m_fontControl.increasesize()) | ||
404 | { | ||
405 | bool sc = m_autoScroll; | ||
406 | setfont(); | ||
407 | m_autoScroll = false; | ||
408 | locate(pagelocate()); | ||
409 | update(); | ||
410 | m_autoScroll = sc; | ||
411 | if (m_autoScroll) autoscroll(); | ||
412 | } | ||
413 | } | ||
414 | |||
415 | void QTReader::zoomout() | ||
416 | { | ||
417 | if (m_fontControl.decreasesize()) | ||
418 | { | ||
419 | bool sc = m_autoScroll; | ||
420 | m_autoScroll = false; | ||
421 | setfont(); | ||
422 | locate(pagelocate()); | ||
423 | update(); | ||
424 | m_autoScroll = sc; | ||
425 | if (m_autoScroll) autoscroll(); | ||
426 | } | ||
427 | } | ||
428 | |||
285 | void QTReader::keyPressEvent(QKeyEvent* e) | 429 | void QTReader::keyPressEvent(QKeyEvent* e) |
286 | { | 430 | { |
431 | buffdoc.unsuspend(); | ||
287 | switch (e->key()) | 432 | switch (e->key()) |
288 | { | 433 | { |
289 | case Key_Down: | 434 | case Key_Down: |
290 | { | 435 | { |
291 | e->accept(); | 436 | e->accept(); |
292 | if (m_autoScroll) | 437 | if (m_autoScroll) |
293 | { | 438 | { |
294 | if (m_delay < 59049) | 439 | if (m_delay < 59049) |
295 | { | 440 | { |
296 | m_delay = (3*m_delay)/2; | 441 | m_delay = (3*m_delay)/2; |
297 | timer->changeInterval(real_delay()); | 442 | timer->changeInterval(real_delay()); |
298 | } | 443 | } |
299 | else | 444 | else |
300 | { | 445 | { |
301 | m_delay = 59049; | 446 | m_delay = 59049; |
302 | } | 447 | } |
303 | } | 448 | } |
304 | else | 449 | else |
305 | { | 450 | { |
306 | goDown(); | 451 | goDown(); |
307 | } | 452 | } |
308 | } | 453 | } |
309 | break; | 454 | break; |
310 | case Key_Up: | 455 | case Key_Up: |
311 | { | 456 | { |
312 | e->accept(); | 457 | e->accept(); |
313 | if (m_autoScroll) | 458 | if (m_autoScroll) |
314 | { | 459 | { |
315 | if (m_delay > 1024) | 460 | if (m_delay > 1024) |
316 | { | 461 | { |
317 | m_delay = (2*m_delay)/3; | 462 | m_delay = (2*m_delay)/3; |
318 | timer->changeInterval(real_delay()); | 463 | timer->changeInterval(real_delay()); |
319 | } | 464 | } |
320 | else | 465 | else |
321 | { | 466 | { |
322 | m_delay = 1024; | 467 | m_delay = 1024; |
323 | } | 468 | } |
324 | } | 469 | } |
325 | else | 470 | else |
326 | { | 471 | { |
327 | goUp(); | 472 | goUp(); |
328 | } | 473 | } |
329 | } | 474 | } |
330 | break; | 475 | break; |
331 | /* | 476 | /* |
332 | case Key_Left: | 477 | case Key_Left: |
333 | { | 478 | { |
334 | e->accept(); | 479 | e->accept(); |
335 | if (m_textfont > 0) | 480 | if (m_textfont > 0) |
336 | { | 481 | { |
337 | m_textfont--; | 482 | m_textfont--; |
338 | setfont(NULL); | 483 | setfont(NULL); |
339 | locate(pagelocate()); | 484 | locate(pagelocate()); |
340 | update(); | 485 | update(); |
341 | } | 486 | } |
342 | } | 487 | } |
343 | break; | 488 | break; |
344 | case Key_Right: | 489 | case Key_Right: |
345 | { | 490 | { |
346 | e->accept(); | 491 | e->accept(); |
347 | if (fonts[++m_textfont] == 0) | 492 | if (fonts[++m_textfont] == 0) |
348 | { | 493 | { |
349 | m_textfont--; | 494 | m_textfont--; |
350 | } | 495 | } |
351 | else | 496 | else |
352 | { | 497 | { |
353 | setfont(NULL); | 498 | setfont(NULL); |
354 | locate(pagelocate()); | 499 | locate(pagelocate()); |
355 | update(); | 500 | update(); |
356 | } | 501 | } |
357 | } | 502 | } |
358 | break; | 503 | break; |
359 | */ | 504 | */ |
360 | case Key_Right: | 505 | case Key_Right: |
361 | { | 506 | { |
362 | e->accept(); | 507 | e->accept(); |
363 | if (m_fontControl.increasesize()) | 508 | if (m_navkeys && buffdoc.hasnavigation()) |
364 | { | 509 | { |
365 | bool sc = m_autoScroll; | 510 | size_t target = pagelocate(); |
366 | setfont(); | 511 | if (buffdoc.forward(target)) |
367 | m_autoScroll = false; | 512 | { |
368 | locate(pagelocate()); | 513 | locate(target); |
369 | update(); | 514 | } |
370 | m_autoScroll = sc; | 515 | } |
371 | if (m_autoScroll) autoscroll(); | 516 | else zoomin(); |
372 | } | ||
373 | } | 517 | } |
374 | break; | 518 | break; |
375 | case Key_Left: | 519 | case Key_Left: |
376 | { | 520 | { |
377 | e->accept(); | 521 | e->accept(); |
378 | if (m_fontControl.decreasesize()) | 522 | if (m_navkeys && buffdoc.hasnavigation()) |
379 | { | 523 | { |
380 | bool sc = m_autoScroll; | 524 | size_t target = pagelocate(); |
381 | m_autoScroll = false; | 525 | if (buffdoc.back(target)) |
382 | setfont(); | 526 | { |
383 | locate(pagelocate()); | 527 | locate(target); |
384 | update(); | 528 | } |
385 | m_autoScroll = sc; | 529 | } |
386 | if (m_autoScroll) autoscroll(); | 530 | else zoomout(); |
387 | } | ||
388 | } | 531 | } |
389 | break; | 532 | break; |
390 | case Key_Space: | 533 | case Key_Space: |
391 | case Key_Return: | 534 | case Key_Return: |
392 | { | 535 | { |
393 | e->accept(); | 536 | e->accept(); |
394 | emit OnActionPressed(); | 537 | emit OnActionPressed(); |
395 | } | 538 | } |
396 | break; | 539 | break; |
397 | default: | 540 | default: |
398 | e->ignore(); | 541 | e->ignore(); |
399 | } | 542 | } |
400 | } | 543 | } |
401 | 544 | ||
402 | void QTReader::setautoscroll(bool _sc) | 545 | void QTReader::setautoscroll(bool _sc) |
403 | { | 546 | { |
404 | if (_sc == m_autoScroll) return; | 547 | if (_sc == m_autoScroll) return; |
405 | if (m_autoScroll) | 548 | if (m_autoScroll) |
406 | { | 549 | { |
407 | m_autoScroll = false; | 550 | m_autoScroll = false; |
408 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | 551 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; |
409 | } | 552 | } |
410 | else | 553 | else |
411 | { | 554 | { |
555 | CDrawBuffer* reusebuffer = textarray[numlines]; | ||
556 | if (reusebuffer == NULL || reusebuffer->eof()) return; | ||
412 | m_autoScroll = true; | 557 | m_autoScroll = true; |
413 | autoscroll(); | 558 | autoscroll(); |
414 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed | 559 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed |
415 | } | 560 | } |
416 | } | 561 | } |
417 | 562 | ||
418 | bool QTReader::getline(CDrawBuffer *buff) | 563 | bool QTReader::getline(CDrawBuffer *buff) |
419 | { | 564 | { |
565 | buffdoc.unsuspend(); | ||
420 | if (m_bMonoSpaced) | 566 | if (m_bMonoSpaced) |
421 | { | 567 | { |
422 | return buffdoc.getline(buff ,width(), m_charWidth); | 568 | return buffdoc.getline(buff ,width(), m_charWidth); |
423 | } | 569 | } |
424 | else | 570 | else |
425 | { | 571 | { |
426 | return buffdoc.getline(buff, width()); | 572 | return buffdoc.getline(buff, width()); |
427 | } | 573 | } |
428 | } | 574 | } |
429 | 575 | ||
430 | void QTReader::doscroll() | 576 | void QTReader::doscroll() |
431 | { | 577 | { |
432 | if (!m_autoScroll) | 578 | if (!m_autoScroll) |
433 | { | 579 | { |
434 | timer->stop(); | 580 | timer->stop(); |
435 | return; | 581 | return; |
436 | } | 582 | } |
437 | // timer->changeInterval(real_delay()); | 583 | // timer->changeInterval(real_delay()); |
438 | QPainter p( this ); | 584 | QPainter p( this ); |
439 | QBrush b( white); | 585 | QBrush b( white); |
440 | bitBlt(this,0,0,this,0,1,width(),-1); | 586 | bitBlt(this,0,0,this,0,1,width(),-1); |
441 | qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b); | 587 | qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b); |
442 | 588 | ||
443 | if (++m_scrolldy1 == textarray[0]->lineSpacing()) | 589 | if (++m_scrolldy1 == textarray[0]->lineSpacing()) |
444 | { | 590 | { |
445 | CDrawBuffer* buff = textarray[0]; | 591 | CDrawBuffer* buff = textarray[0]; |
446 | for (int i = 1; i <= numlines; i++) | 592 | for (int i = 1; i <= numlines; i++) |
447 | { | 593 | { |
448 | textarray[i-1] = textarray[i]; | 594 | textarray[i-1] = textarray[i]; |
449 | locnarray[i-1] = locnarray[i]; | 595 | locnarray[i-1] = locnarray[i]; |
450 | } | 596 | } |
451 | textarray[numlines] = buff; | 597 | textarray[numlines] = buff; |
452 | --numlines; | 598 | --numlines; |
453 | m_scrolldy1 = 0; | 599 | m_scrolldy1 = 0; |
454 | } | 600 | } |
455 | if (++m_scrolldy2 == textarray[numlines]->lineSpacing()) | 601 | if (++m_scrolldy2 == textarray[numlines]->lineSpacing()) |
456 | { | 602 | { |
457 | m_scrolldy2 = 0; | 603 | m_scrolldy2 = 0; |
458 | numlines++; | 604 | numlines++; |
459 | 605 | ||
460 | if (textarray[numlines] == NULL) | 606 | if (textarray[numlines] == NULL) |
461 | { | 607 | { |
462 | textarray[numlines] = new CDrawBuffer; | 608 | textarray[numlines] = new CDrawBuffer(&m_fontControl); |
463 | } | 609 | } |
464 | locnarray[numlines] = locate(); | 610 | locnarray[numlines] = locate(); |
465 | int ch = getline(textarray[numlines]); | 611 | int ch = getline(textarray[numlines]); |
466 | textarray[numlines-1]->render(&p, height() - textarray[numlines]->descent() - 2, m_bMonoSpaced, m_charWidth, width()); | 612 | textarray[numlines-1]->render(&p, height() - textarray[numlines-1]->descent() - 2, m_bMonoSpaced, m_charWidth, width()); |
467 | mylastpos = locate(); | 613 | mylastpos = locate(); |
468 | if (!ch) | 614 | if (!ch) |
469 | { | 615 | { |
470 | m_autoScroll = false; | 616 | m_autoScroll = false; |
471 | ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); | 617 | ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); |
472 | emit OnRedraw(); | ||
473 | } | 618 | } |
474 | emit OnRedraw(); | 619 | emit OnRedraw(); |
475 | } | 620 | } |
476 | } | 621 | } |
477 | 622 | ||
478 | void QTReader::autoscroll() | 623 | void QTReader::autoscroll() |
479 | { | 624 | { |
480 | timer->start(real_delay(), false); | 625 | timer->start(real_delay(), false); |
481 | } | 626 | } |
482 | 627 | ||
483 | void QTReader::setfont() | 628 | void QTReader::setfont() |
484 | { | 629 | { |
485 | // m_fontControl.Change | 630 | // m_fontControl.Change |
486 | m_charWidth = (m_charpc*m_fontControl.currentsize())/100; | 631 | m_charWidth = (m_charpc*m_fontControl.currentsize())/100; |
487 | if (m_charWidth <= 0) m_charWidth = 1; | 632 | if (m_charWidth <= 0) m_charWidth = 1; |
488 | m_ascent = m_fontControl.ascent(); | 633 | m_ascent = m_fontControl.ascent(); |
489 | m_descent = m_fontControl.descent(); | 634 | m_descent = m_fontControl.descent(); |
490 | m_linespacing = m_fontControl.lineSpacing(); | 635 | m_linespacing = m_fontControl.lineSpacing(); |
491 | } | 636 | } |
492 | 637 | ||
493 | void QTReader::drawFonts( QPainter *p ) | 638 | void QTReader::drawFonts( QPainter *p ) |
494 | { | 639 | { |
495 | setfont(); | 640 | if (bDoUpdates) |
496 | if (m_lastwidth != width() || m_lastheight != height()) | 641 | { |
497 | { | 642 | qDebug("How refreshing..."); |
498 | m_lastwidth = width(); | 643 | if (buffdoc.empty()) return; |
499 | m_lastheight = height(); | 644 | setfont(); |
500 | locate(pagelocate()); | 645 | if (m_lastwidth != width()) |
501 | } | 646 | { |
502 | else | 647 | qDebug("Not Optimised %d", m_lastwidth); |
503 | { | 648 | m_lastwidth = width(); |
504 | 649 | m_lastheight = height(); | |
505 | /* | 650 | locate(pagelocate()); |
506 | int sl = screenlines(); | 651 | qDebug("Not Optimised %d", m_lastwidth); |
507 | if (sl < numlines) | 652 | } |
508 | { | 653 | else |
509 | //qDebug("df:<%u,%u>",sl,numlines); | 654 | { |
510 | 655 | if (m_lastheight > height()) | |
511 | size_t newpos = locnarray[sl]; | 656 | { |
512 | CDrawBuffer** nta = new CDrawBuffer*[sl]; | 657 | qDebug("Optimised < %d", numlines); |
513 | size_t* nla = new size_t[sl]; | 658 | int ypos = 0; |
514 | for (int i = 0; i < sl; i++) | 659 | for (int i = 0; i < numlines; i++) |
515 | { | 660 | { |
516 | nta[i] = textarray[i]; | 661 | if ((ypos += textarray[i]->lineSpacing()) > height()) |
517 | nla[i] = locnarray[i]; | 662 | { |
518 | } | 663 | numlines = i; |
519 | for (int i = sl; i < numlines; i++) delete textarray[i]; | 664 | jumpto(locnarray[i+1]); |
520 | delete [] locnarray; | 665 | break; |
521 | delete [] textarray; | 666 | } |
522 | textarray = nta; | 667 | } |
523 | locnarray = nla; | 668 | qDebug("Optimised < %d", numlines); |
524 | numlines = sl; | 669 | m_lastheight = height(); |
525 | jumpto(mylastpos = newpos); | 670 | } |
526 | } | 671 | else if (m_lastheight < height()) |
527 | if (sl > numlines) | 672 | { |
528 | { | 673 | qDebug("Optimised > %d", numlines); |
529 | //qDebug("df:<%u,%u>",sl,numlines); | 674 | int ypos = 0; |
530 | CDrawBuffer** nta = new CDrawBuffer*[sl]; | 675 | for (int i = 0; i <= numlines; i++) |
531 | size_t* nla = new size_t[sl]; | 676 | { |
532 | for (int i = 0; i < numlines; i++) | 677 | ypos += textarray[i]->lineSpacing(); |
533 | { | 678 | } |
534 | nta[i] = textarray[i]; | 679 | fillbuffer(numlines+1, ypos); |
535 | nla[i] = locnarray[i]; | 680 | qDebug("Optimised > %d", numlines); |
536 | } | 681 | m_lastheight = height(); |
537 | if (locate() != mylastpos) jumpto(mylastpos); | 682 | } |
538 | for (int i = numlines; i < sl; i++) | 683 | if (numlines > 0) |
539 | { | 684 | { |
540 | nta[i] = new CDrawBuffer(&m_fontControl); | 685 | int ypos = textarray[0]->ascent(); |
541 | nla[i] = locate(); | 686 | textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width()); |
542 | getline(nta[i]); | 687 | for (int i = 1; i < numlines; i++) |
543 | } | 688 | { |
544 | mylastpos = locate(); | 689 | // ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2; |
545 | delete [] locnarray; | 690 | ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+ |
546 | delete [] textarray; | 691 | (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2; |
547 | textarray = nta; | 692 | textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width()); |
548 | locnarray = nla; | 693 | } |
549 | numlines = sl; | ||
550 | } | ||
551 | */ | ||
552 | if (numlines > 0) | ||
553 | { | ||
554 | int ypos = textarray[0]->ascent(); | ||
555 | textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width()); | ||
556 | for (int i = 1; i < numlines; i++) | ||
557 | { | ||
558 | ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2; | ||
559 | textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width()); | ||
560 | |||
561 | } | ||
562 | // mylastpos = locate(); | 694 | // mylastpos = locate(); |
563 | } | 695 | } |
564 | } | 696 | } |
565 | m_scrolldy1 = m_scrolldy2 = 0; | 697 | m_scrolldy1 = m_scrolldy2 = 0; |
566 | emit OnRedraw(); | 698 | emit OnRedraw(); |
699 | } | ||
700 | else | ||
701 | { | ||
702 | qDebug("Not so refreshing..."); | ||
703 | } | ||
567 | } | 704 | } |
568 | 705 | ||
569 | QString QTReader::firstword() | 706 | QString QTReader::firstword() |
570 | { | 707 | { |
571 | if (m_bMonoSpaced) | 708 | if (m_bMonoSpaced) |
572 | { | 709 | { |
573 | return toQString(textarray[0]->data()); | 710 | return toQString(textarray[0]->data()); |
574 | } | 711 | } |
575 | else | 712 | else |
576 | { | 713 | { |
577 | int start, end, len, j; | 714 | int start, end, len, j; |
578 | for (j = 0; j < numlines; j++) | 715 | for (j = 0; j < numlines; j++) |
579 | { | 716 | { |
580 | len = textarray[j]->length(); | 717 | len = textarray[j]->length(); |
581 | for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++); | 718 | for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++); |
582 | if (start < len) break; | 719 | if (start < len) break; |
583 | } | 720 | } |
584 | if (j < numlines) | 721 | if (j < numlines) |
585 | { | 722 | { |
586 | QString ret = ""; | 723 | QString ret = ""; |
587 | for (end = start; end < len && isalpha((*textarray[j])[end]); end++) | 724 | for (end = start; end < len && isalpha((*textarray[j])[end]); end++) |
588 | ret += (*textarray[j])[end]; | 725 | ret += (*textarray[j])[end]; |
589 | if (ret.isEmpty()) ret = "Current position"; | 726 | if (ret.isEmpty()) ret = "Current position"; |
590 | return ret; | 727 | return ret; |
591 | } | 728 | } |
592 | else | 729 | else |
593 | return "Current position"; | 730 | return "Current position"; |
594 | } | 731 | } |
595 | } | 732 | } |
596 | 733 | ||
597 | // | 734 | // |
598 | // Construct the QTReader with buttons. | 735 | // Construct the QTReader with buttons. |
599 | // | 736 | // |
600 | 737 | ||
601 | bool QTReader::ChangeFont(int tgt) | 738 | bool QTReader::ChangeFont(int tgt) |
602 | { | 739 | { |
603 | return m_fontControl.ChangeFont(m_fontname, tgt); | 740 | return m_fontControl.ChangeFont(m_fontname, tgt); |
604 | } | 741 | } |
605 | 742 | ||
606 | void QTReader::init() | 743 | void QTReader::init() |
607 | { | 744 | { |
608 | // setCaption( "Qt Draw Demo Application" ); | 745 | // setCaption( "Qt Draw Demo Application" ); |
609 | 746 | ||
747 | buffdoc.unsuspend(); | ||
610 | setBackgroundColor( white ); | 748 | setBackgroundColor( white ); |
611 | // QPainter p(this); | 749 | // QPainter p(this); |
612 | // p.setBackgroundMode( Qt::OpaqueMode ); | 750 | // p.setBackgroundMode( Qt::OpaqueMode ); |
613 | buffdoc.setfilter(getfilter()); | 751 | buffdoc.setfilter(getfilter()); |
614 | ChangeFont(m_textsize); | 752 | ChangeFont(m_textsize); |
615 | setFocusPolicy(QWidget::StrongFocus); | 753 | setFocusPolicy(QWidget::StrongFocus); |
616 | // resize( 240, 320 ); | 754 | // resize( 240, 320 ); |
617 | //setFocus(); | 755 | //setFocus(); |
618 | timer = new QTimer(this); | 756 | timer = new QTimer(this); |
619 | connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); | 757 | connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); |
620 | // QMessageBox::information(this, "init", m_lastfile, 1); | 758 | // QMessageBox::information(this, "init", m_lastfile, 1); |
621 | m_lastwidth = width(); | ||
622 | m_lastheight = height(); | ||
623 | setfont(); | 759 | setfont(); |
760 | /* | ||
624 | if (!m_lastfile.isEmpty()) | 761 | if (!m_lastfile.isEmpty()) |
625 | { | 762 | { |
626 | m_string = DocLnk(m_lastfile).name(); | 763 | m_string = DocLnk(m_lastfile).name(); |
627 | load_file(m_lastfile); | 764 | load_file(m_lastfile); |
628 | } | 765 | } |
766 | */ | ||
629 | } | 767 | } |
630 | 768 | ||
631 | // | 769 | // |
632 | // Clean up | 770 | // Clean up |
633 | // | 771 | // |
634 | QTReader::~QTReader() | 772 | QTReader::~QTReader() |
635 | { | 773 | { |
636 | } | 774 | } |
637 | 775 | ||
638 | // | 776 | // |
639 | // Calls the drawing function as specified by the radio buttons. | 777 | // Calls the drawing function as specified by the radio buttons. |
640 | // | 778 | // |
641 | 779 | ||
642 | void QTReader::drawIt( QPainter *p ) | 780 | void QTReader::drawIt( QPainter *p ) |
643 | { | 781 | { |
644 | drawFonts(p); | 782 | drawFonts(p); |
645 | } | 783 | } |
646 | 784 | ||
647 | // | 785 | // |
648 | // Called when the print button is clicked. | 786 | // Called when the print button is clicked. |
649 | // | 787 | // |
650 | /* | 788 | /* |
651 | void QTReader::printIt() | 789 | void QTReader::printIt() |
652 | { | 790 | { |
653 | #ifndef QT_NO_PRINTER | 791 | #ifndef QT_NO_PRINTER |
654 | if ( printer->setup( this ) ) { | 792 | if ( printer->setup( this ) ) { |
655 | QPainter paint; | 793 | QPainter paint; |
656 | if ( !paint.begin( printer ) ) | 794 | if ( !paint.begin( printer ) ) |
657 | return; | 795 | return; |
658 | drawIt( &paint ); | 796 | drawIt( &paint ); |
659 | } | 797 | } |
660 | #endif | 798 | #endif |
661 | } | 799 | } |
662 | */ | 800 | */ |
663 | // | 801 | // |
664 | // Called when the widget needs to be updated. | 802 | // Called when the widget needs to be updated. |
665 | // | 803 | // |
666 | 804 | ||
667 | void QTReader::paintEvent( QPaintEvent * ) | 805 | void QTReader::paintEvent( QPaintEvent * ) |
668 | { | 806 | { |
669 | QPainter paint( this ); | 807 | QPainter paint( this ); |
670 | drawIt( &paint ); | 808 | drawIt( &paint ); |
671 | } | 809 | } |
672 | 810 | ||
673 | // | 811 | // |
674 | // Called when the widget has been resized. | 812 | // Called when the widget has been resized. |
675 | // Moves the button group to the upper right corner | 813 | // Moves the button group to the upper right corner |
676 | // of the widget. | 814 | // of the widget. |
677 | 815 | ||
678 | /* | 816 | /* |
679 | void QTReader::resizeEvent( QResizeEvent * ) | 817 | void QTReader::resizeEvent( QResizeEvent * ) |
680 | { | 818 | { |
681 | // qDebug("resize:(%u,%u)", width(), height()); | 819 | // qDebug("resize:(%u,%u)", width(), height()); |
682 | // bgroup->move( width()-bgroup->width(), 0 ); | 820 | // bgroup->move( width()-bgroup->width(), 0 ); |
683 | } | 821 | } |
684 | */ | 822 | */ |
685 | 823 | ||
686 | // | 824 | // |
687 | // Create and display our widget. | 825 | // Create and display our widget. |
688 | // | 826 | // |
689 | /* | 827 | /* |
690 | int main( int argc, tchar **argv ) | 828 | int main( int argc, tchar **argv ) |
691 | { | 829 | { |
692 | QApplication app( argc, argv ); | 830 | QApplication app( argc, argv ); |
693 | QTReader draw; | 831 | QTReader draw; |
694 | app.setMainWidget( &draw ); | 832 | app.setMainWidget( &draw ); |
695 | draw.setCaption("Qt Example - Drawdemo"); | 833 | draw.setCaption("Qt Example - Drawdemo"); |
696 | draw.show(); | 834 | draw.show(); |
697 | return app.exec(); | 835 | return app.exec(); |
698 | } | 836 | } |
699 | */ | 837 | */ |
700 | 838 | ||
701 | 839 | ||
702 | bool QTReader::locate(unsigned long n) { | 840 | bool QTReader::locate(unsigned long n) { |
703 | //printf("Locate\n"); | 841 | //printf("Locate\n"); |
842 | buffdoc.unsuspend(); | ||
704 | buffdoc.locate(n); | 843 | buffdoc.locate(n); |
705 | // qDebug("&buffdoc.located"); | 844 | // qDebug("&buffdoc.located"); |
706 | fillbuffer(); | 845 | fillbuffer(); |
707 | // qDebug("&Buffer filled"); | 846 | // qDebug("&Buffer filled"); |
708 | update(); | 847 | update(); |
709 | // qDebug("&Located"); | 848 | // qDebug("&Located"); |
710 | return true; | 849 | return true; |
711 | } | 850 | } |
712 | 851 | ||
713 | unsigned int QTReader::screenlines() | 852 | unsigned int QTReader::screenlines() |
714 | { | 853 | { |
715 | // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; | 854 | // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; |
716 | // return (height()-m_descent)/(m_linespacing); | 855 | // return (height()-m_descent)/(m_linespacing); |
717 | return (height()-2)/(m_linespacing); | 856 | return (height()-2)/(m_linespacing); |
718 | }; | 857 | }; |
719 | 858 | ||
720 | bool QTReader::fillbuffer(int reuse, int ht) | 859 | bool QTReader::fillbuffer(int reuse, int ht) |
721 | { | 860 | { |
861 | buffdoc.unsuspend(); | ||
722 | if (buffdoc.empty()) return false; | 862 | if (buffdoc.empty()) return false; |
723 | m_scrolldy1 = m_scrolldy2 = 0; | 863 | m_scrolldy1 = m_scrolldy2 = 0; |
724 | int ch; | 864 | int ch; |
725 | bool ret = false; | 865 | bool ret = false; |
726 | unsigned int oldpagepos = locnarray[reuse]; | 866 | unsigned int oldpagepos = locnarray[reuse]; |
727 | int ypos = ht; | 867 | int ypos = ht; |
728 | numlines = reuse; | 868 | numlines = reuse; |
729 | while (ypos < height()) | 869 | while (ypos < height() || numlines < 2) |
730 | { | 870 | { |
731 | if (textarray[numlines] == NULL) | 871 | if (textarray[numlines] == NULL) |
732 | { | 872 | { |
733 | textarray[numlines] = new CDrawBuffer(&m_fontControl); | 873 | textarray[numlines] = new CDrawBuffer(&m_fontControl); |
734 | } | 874 | } |
735 | locnarray[numlines] = locate(); | 875 | locnarray[numlines] = locate(); |
736 | int ch = getline(textarray[numlines]); | 876 | int ch = getline(textarray[numlines]); |
737 | ypos += textarray[numlines]->lineSpacing(); | 877 | ypos += textarray[numlines]->lineSpacing(); |
738 | numlines++; | 878 | numlines++; |
739 | if (!ch) | 879 | if (!ch) |
740 | { | 880 | { |
741 | if (numlines - reuse == 1/* && locnarray[0] == buffdoc.locate()*/) | 881 | if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/) |
742 | { | 882 | { |
743 | locate(oldpagepos); | 883 | locate(oldpagepos); |
744 | return false; | 884 | return false; |
745 | } | 885 | } |
746 | else | 886 | else |
747 | { | 887 | { |
748 | --numlines; | 888 | --numlines; |
749 | mylastpos = locate(); | 889 | mylastpos = locate(); |
750 | return true; | 890 | return true; |
751 | } | 891 | } |
752 | } | 892 | } |
753 | } | 893 | } |
754 | 894 | ||
755 | --numlines; | 895 | --numlines; |
756 | mylastpos = locate(); | 896 | mylastpos = locate(); |
757 | 897 | ||
758 | return true; | 898 | return true; |
759 | } | 899 | } |
760 | 900 | ||
761 | 901 | ||
762 | void QTReader::dopagedn() | 902 | void QTReader::dopagedn() |
763 | { | 903 | { |
904 | buffdoc.unsuspend(); | ||
764 | int skip = 0, ypos = 0; | 905 | int skip = 0, ypos = 0; |
765 | if (locate() != mylastpos) | 906 | if (locate() != mylastpos) |
766 | { | 907 | { |
767 | //qDebug("Jumping to %u", mylastpos); | 908 | //qDebug("Jumping to %u", mylastpos); |
768 | jumpto(mylastpos); | 909 | jumpto(mylastpos); |
769 | } | 910 | } |
770 | CDrawBuffer* reusebuffer = textarray[numlines]; | 911 | CDrawBuffer* reusebuffer = textarray[numlines]; |
912 | if (reusebuffer != NULL && reusebuffer->eof()) return; | ||
771 | if (reusebuffer != NULL) | 913 | if (reusebuffer != NULL) |
772 | { | 914 | { |
773 | for (int i = 0; i <= m_overlap; i++) | 915 | for (int i = 0; i <= m_overlap; i++) |
774 | { | 916 | { |
775 | int offset = numlines - m_overlap + i; | 917 | int offset = numlines - m_overlap + i; |
776 | reusebuffer = textarray[offset]; | 918 | reusebuffer = textarray[offset]; |
777 | size_t reuselocn = locnarray[offset]; | 919 | size_t reuselocn = locnarray[offset]; |
778 | textarray[offset] = textarray[i]; | 920 | textarray[offset] = textarray[i]; |
779 | textarray[i] = reusebuffer; | 921 | textarray[i] = reusebuffer; |
922 | // reusebuffer->empty(); | ||
780 | locnarray[offset] = locnarray[i]; | 923 | locnarray[offset] = locnarray[i]; |
781 | locnarray[i] = reuselocn; | 924 | locnarray[i] = reuselocn; |
782 | ypos += textarray[i]->lineSpacing(); | 925 | ypos += textarray[i]->lineSpacing(); |
783 | skip++; | 926 | skip++; |
784 | } | 927 | } |
785 | } | 928 | } |
786 | if (fillbuffer(skip, ypos)) | 929 | if (fillbuffer(skip, ypos)) |
787 | { | 930 | { |
788 | update(); | 931 | update(); |
789 | } | 932 | } |
790 | } | 933 | } |
791 | 934 | ||
792 | void QTReader::dopageup() | 935 | void QTReader::dopageup() |
793 | { | 936 | { |
937 | buffdoc.unsuspend(); | ||
938 | dopageup(locnarray[(m_overlap < numlines) ? m_overlap : numlines/2]); | ||
939 | } | ||
940 | |||
941 | void QTReader::dopageup(unsigned int target) | ||
942 | { | ||
943 | buffdoc.unsuspend(); | ||
794 | CBufferFace<CDrawBuffer*> buff; | 944 | CBufferFace<CDrawBuffer*> buff; |
795 | CBufferFace<size_t> loc; | 945 | CBufferFace<size_t> loc; |
796 | unsigned int target = locnarray[(m_overlap < numlines) ? m_overlap : numlines/2]; | ||
797 | 946 | ||
798 | size_t delta; | 947 | size_t delta, guess = 2048; |
799 | if (target < 2048) | 948 | bool ch = true; |
800 | { | 949 | int nbfl, ypos = 0; |
801 | delta = target; | ||
802 | jumpto(0); | ||
803 | } | ||
804 | else | ||
805 | { | ||
806 | delta = 2048; | ||
807 | 950 | ||
808 | jumpto(target - delta); | 951 | while (1) |
809 | 952 | { | |
810 | buff[0] = new CDrawBuffer(&m_fontControl); | 953 | ch = true; |
811 | 954 | nbfl = 0; | |
812 | do | 955 | if (target < guess) |
956 | { | ||
957 | delta = 0; // 0 is a flag to say don't guess any more | ||
958 | jumpto( (m_continuousDocument) ? 0 : buffdoc.startSection() ); | ||
959 | } | ||
960 | else if (!m_continuousDocument && (target - guess < buffdoc.startSection())) | ||
961 | { | ||
962 | delta = 0; // 0 is a flag to say don't guess any more | ||
963 | jumpto(buffdoc.startSection()); | ||
964 | } | ||
965 | else | ||
813 | { | 966 | { |
967 | delta = guess; | ||
814 | 968 | ||
815 | if (!getline(buff[0])) break; | 969 | jumpto(target - delta); |
816 | 970 | ||
817 | if (locate() > target) continue; | 971 | buff[0] = new CDrawBuffer(&m_fontControl); |
972 | |||
973 | do | ||
974 | { | ||
975 | |||
976 | if (!getline(buff[0])) break; | ||
977 | |||
978 | if (locate() > target) break; | ||
979 | } | ||
980 | while (!buffdoc.iseol()); | ||
818 | } | 981 | } |
819 | while (!buffdoc.iseol()); | 982 | |
820 | } | 983 | ypos = 0; |
821 | int nbfl = 0; | 984 | while (locate() < target) |
822 | 985 | { | |
823 | bool ch = true; | 986 | if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); |
824 | int ypos = 0; | 987 | loc[nbfl] = locate(); |
825 | while (locate() < target) | 988 | ch = getline(buff[nbfl]); |
826 | { | 989 | ypos += buff[nbfl]->lineSpacing(); |
827 | if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); | 990 | nbfl++; |
828 | loc[nbfl] = locate(); | 991 | if (!ch) break; |
829 | ch = getline(buff[nbfl]); | 992 | } |
830 | ypos += buff[nbfl]->lineSpacing(); | 993 | if (ypos < height() && (delta != 0)) |
831 | nbfl++; | 994 | { |
832 | if (!ch) break; | 995 | for (int i = 0; i < nbfl; i++) |
833 | } | 996 | { |
834 | if (ypos < height()) | 997 | delete buff[i]; |
835 | { | 998 | buff[i] = NULL; |
836 | locate(0); | 999 | } |
837 | return; | 1000 | guess <<= 1; |
1001 | continue; | ||
1002 | } | ||
1003 | break; | ||
838 | } | 1004 | } |
839 | if (ch) | 1005 | if (ch) |
840 | { | 1006 | { |
841 | if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); | 1007 | if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); |
842 | loc[nbfl] = locate(); | 1008 | loc[nbfl] = locate(); |
843 | int ch = getline(buff[nbfl]); | 1009 | int ch = getline(buff[nbfl]); |
844 | nbfl++; | 1010 | nbfl++; |
845 | } | 1011 | } |
846 | ypos = 0; | 1012 | ypos = 0; |
847 | numlines = 0; | 1013 | numlines = 0; |
848 | while (ypos < height() && numlines <= nbfl-2) | 1014 | while (ypos < height() && numlines <= nbfl-1) |
849 | { | 1015 | { |
850 | ypos += buff[nbfl - numlines - 2]->lineSpacing(); | 1016 | ypos += buff[nbfl - numlines - 1]->lineSpacing(); |
851 | numlines++; | 1017 | numlines++; |
852 | } | 1018 | } |
853 | --numlines; | 1019 | --numlines; |
854 | int offset = nbfl; | 1020 | int offset = nbfl-1; |
855 | offset -= numlines+1; | 1021 | offset -= numlines; |
1022 | ypos = 0; | ||
856 | for (int i = 0; i <= numlines; i++) | 1023 | for (int i = 0; i <= numlines; i++) |
857 | { | 1024 | { |
858 | delete textarray[i]; | 1025 | delete textarray[i]; |
859 | textarray[i] = buff[offset+i]; | 1026 | textarray[i] = buff[offset+i]; |
860 | locnarray[i] = loc[offset + i]; | 1027 | locnarray[i] = loc[offset + i]; |
1028 | ypos += textarray[i]->lineSpacing(); | ||
861 | } | 1029 | } |
862 | for (int i = 0; i < nbfl - numlines - 1; i++) | 1030 | for (int i = 0; i < nbfl - numlines - 1; i++) |
863 | { | 1031 | { |
864 | delete buff[i]; | 1032 | delete buff[i]; |
865 | } | 1033 | } |
866 | 1034 | ||
867 | // --numlines; | 1035 | while (ypos < height()) |
1036 | { | ||
1037 | numlines++; | ||
1038 | locnarray[numlines] = locate(); | ||
1039 | if (textarray[numlines] == NULL) textarray[numlines] = new CDrawBuffer(&m_fontControl); | ||
1040 | if (!getline(textarray[numlines])) break; | ||
1041 | ypos += textarray[numlines]->lineSpacing(); | ||
1042 | } | ||
1043 | |||
868 | mylastpos = locate(); | 1044 | mylastpos = locate(); |
869 | 1045 | ||
870 | update(); | 1046 | update(); |
871 | } | 1047 | } |
872 | 1048 | ||
873 | bool QTReader::load_file(const char *newfile, unsigned int _lcn) | 1049 | bool QTReader::load_file(const char *newfile, unsigned int _lcn) |
874 | { | 1050 | { |
875 | // QMessageBox::information(this, "Name", name, 1); | 1051 | // QMessageBox::information(this, "Name", name, 1); |
876 | // QMessageBox::information(this, "load_file", newfile, 1); | 1052 | // QMessageBox::information(this, "load_file", newfile, 1); |
877 | 1053 | ||
878 | bool bRC = false; | 1054 | bool bRC = false; |
879 | unsigned int lcn = _lcn; | 1055 | unsigned int lcn = _lcn; |
880 | if (m_lastfile == newfile) | 1056 | if (m_lastfile == newfile) |
881 | { | 1057 | { |
882 | lcn = m_lastposn; | 1058 | lcn = m_lastposn; |
883 | } | 1059 | } |
884 | m_lastfile = newfile; | 1060 | m_lastfile = newfile; |
885 | // QMessageBox::information(0, "Opening...", newfile); | 1061 | // QMessageBox::information(0, "Opening...", newfile); |
1062 | m_lastwidth = width(); | ||
1063 | m_lastheight = height(); | ||
886 | if (buffdoc.openfile(this,newfile) == 0) | 1064 | if (buffdoc.openfile(this,newfile) == 0) |
887 | { | 1065 | { |
888 | bRC = true; | 1066 | bRC = true; |
1067 | buffdoc.setContinuous(m_continuousDocument); | ||
889 | // qDebug("buffdoc.openfile done"); | 1068 | // qDebug("buffdoc.openfile done"); |
890 | locate(lcn); | 1069 | locate(lcn); |
891 | // qDebug("buffdoc.locate done"); | 1070 | // qDebug("buffdoc.locate done"); |
892 | } | 1071 | } |
893 | setfilter(getfilter()); | 1072 | setfilter(getfilter()); |
894 | update(); | 1073 | update(); |
895 | // qDebug("Updated"); | 1074 | // qDebug("Updated"); |
896 | return bRC; | 1075 | return bRC; |
897 | } | 1076 | } |
898 | 1077 | ||
899 | void QTReader::lineDown() | 1078 | void QTReader::lineDown() |
900 | { | 1079 | { |
901 | int ypos = 0; | 1080 | int ypos = 0; |
902 | int offset = numlines; | 1081 | int offset = numlines; |
903 | 1082 | ||
904 | for (int i = 0; i <= numlines; i++) | 1083 | for (int i = 0; i <= numlines; i++) |
905 | { | 1084 | { |
906 | if ((ypos += textarray[numlines-i]->lineSpacing()) > height()) | 1085 | if ((ypos += textarray[numlines-i]->lineSpacing()) > height()) |
907 | { | 1086 | { |
908 | offset = i-1; | 1087 | offset = i-1; |
909 | break; | 1088 | break; |
910 | } | 1089 | } |
911 | } | 1090 | } |
912 | offset = numlines - offset; | 1091 | offset = numlines - offset; |
913 | for (int i = offset; i <= numlines; i++) | 1092 | for (int i = offset; i <= numlines; i++) |
914 | { | 1093 | { |
915 | CDrawBuffer* buff = textarray[i-offset]; | 1094 | CDrawBuffer* buff = textarray[i-offset]; |
916 | textarray[i-offset] = textarray[i]; | 1095 | textarray[i-offset] = textarray[i]; |
917 | locnarray[i-offset] = locnarray[i]; | 1096 | locnarray[i-offset] = locnarray[i]; |
918 | textarray[i] = buff; | 1097 | textarray[i] = buff; |
919 | } | 1098 | } |
920 | numlines = numlines - offset + 1; | 1099 | numlines = numlines - offset + 1; |
921 | locnarray[numlines] = locate(); | 1100 | locnarray[numlines] = locate(); |
922 | if (textarray[numlines] == NULL) | 1101 | if (textarray[numlines] == NULL) |
923 | { | 1102 | { |
924 | textarray[numlines] = new CDrawBuffer(&m_fontControl); | 1103 | textarray[numlines] = new CDrawBuffer(&m_fontControl); |
925 | } | 1104 | } |
926 | getline(textarray[numlines]); | 1105 | getline(textarray[numlines]); |
927 | mylastpos = locate(); | 1106 | mylastpos = locate(); |
928 | update(); | 1107 | update(); |
929 | } | 1108 | } |
930 | /* | 1109 | /* |
931 | void QTReader::lineUp() | 1110 | void QTReader::lineUp() |
932 | { | 1111 | { |
933 | CBuffer** buff = textarray; | 1112 | CBuffer** buff = textarray; |
934 | unsigned int *loc = new unsigned int[numlines]; | 1113 | unsigned int *loc = new unsigned int[numlines]; |
935 | int cbptr = 0; | 1114 | int cbptr = 0; |
936 | if (locate() != mylastpos) jumpto(mylastpos); | 1115 | if (locate() != mylastpos) jumpto(mylastpos); |
937 | unsigned int target = locnarray[numlines-1]; | 1116 | unsigned int target = locnarray[numlines-1]; |
938 | if (buffdoc.hasrandomaccess()) | 1117 | if (buffdoc.hasrandomaccess()) |
939 | { | 1118 | { |
940 | unsigned int delta = locate()-pagelocate(); | 1119 | unsigned int delta = locate()-pagelocate(); |
941 | if (delta < 64) delta = 64; | 1120 | if (delta < 64) delta = 64; |
942 | do | 1121 | do |
943 | { | 1122 | { |
944 | delta <<= 1; | 1123 | delta <<= 1; |
945 | if (delta >= target) | 1124 | if (delta >= target) |
946 | { | 1125 | { |
947 | delta = target; | 1126 | delta = target; |
948 | jumpto(0); | 1127 | jumpto(0); |
949 | for (int i = 0; i < numlines; i++) | 1128 | for (int i = 0; i < numlines; i++) |
950 | { | 1129 | { |
951 | loc[i] = locate(); | 1130 | loc[i] = locate(); |
952 | getline(buff[i]); | 1131 | getline(buff[i]); |
953 | } | 1132 | } |
954 | break; | 1133 | break; |
955 | } | 1134 | } |
956 | jumpto(target-delta); | 1135 | jumpto(target-delta); |
957 | do | 1136 | do |
958 | { | 1137 | { |
959 | buffdoc.getline(buff[0],width()); | 1138 | buffdoc.getline(buff[0],width()); |
960 | #ifdef WS | 1139 | #ifdef WS |
961 | //printf("Trying:%s\n",buff[0]); | 1140 | //printf("Trying:%s\n",buff[0]); |
962 | #endif | 1141 | #endif |
963 | if (locate() > target) continue; | 1142 | if (locate() > target) continue; |
964 | } | 1143 | } |
965 | while (!buffdoc.iseol()); | 1144 | while (!buffdoc.iseol()); |
966 | for (int i = 0; i < numlines; i++) | 1145 | for (int i = 0; i < numlines; i++) |
967 | { | 1146 | { |
968 | loc[i] = locate(); | 1147 | loc[i] = locate(); |
969 | buffdoc.getline(buff[i],width()); | 1148 | buffdoc.getline(buff[i],width()); |
970 | #ifdef WS | 1149 | #ifdef WS |
971 | //printf("Filling:%s\n",buff[i]); | 1150 | //printf("Filling:%s\n",buff[i]); |
972 | #endif | 1151 | #endif |
973 | } | 1152 | } |
974 | } | 1153 | } |
975 | while (locate() >= target && delta < 4096); | 1154 | while (locate() >= target && delta < 4096); |
976 | #ifdef WS | 1155 | #ifdef WS |
977 | //printf("Delta:%u\n",delta); | 1156 | //printf("Delta:%u\n",delta); |
978 | #endif | 1157 | #endif |
979 | } | 1158 | } |
980 | else | 1159 | else |
981 | { | 1160 | { |
982 | jumpto(0); | 1161 | jumpto(0); |
983 | for (int i = 0; i < numlines; i++) | 1162 | for (int i = 0; i < numlines; i++) |
984 | { | 1163 | { |
985 | loc[i] = locate(); | 1164 | loc[i] = locate(); |
986 | buffdoc.getline(buff[i],width()); | 1165 | buffdoc.getline(buff[i],width()); |
987 | } | 1166 | } |
988 | } | 1167 | } |
989 | cbptr = 0; | 1168 | cbptr = 0; |
990 | while (locate() < target) | 1169 | while (locate() < target) |
991 | { | 1170 | { |
992 | loc[cbptr] = locate(); | 1171 | loc[cbptr] = locate(); |
993 | buffdoc.getline(buff[cbptr], width()); | 1172 | buffdoc.getline(buff[cbptr], width()); |
994 | #ifdef WS | 1173 | #ifdef WS |
995 | //printf("Adding:%s\n",buff[cbptr]->data()); | 1174 | //printf("Adding:%s\n",buff[cbptr]->data()); |
996 | #endif | 1175 | #endif |
997 | cbptr = (cbptr+1) % numlines; | 1176 | cbptr = (cbptr+1) % numlines; |
998 | } | 1177 | } |
999 | pagepos = loc[cbptr]; | 1178 | pagepos = loc[cbptr]; |
1000 | textarray = new CBuffer*[numlines]; | 1179 | textarray = new CBuffer*[numlines]; |
1001 | for (int i = 0; i < numlines; i++) | 1180 | for (int i = 0; i < numlines; i++) |
1002 | { | 1181 | { |
1003 | int j = (cbptr+i)%numlines; | 1182 | int j = (cbptr+i)%numlines; |
1004 | textarray[i] = buff[j]; | 1183 | textarray[i] = buff[j]; |
1005 | locnarray[i] = loc[j]; | 1184 | locnarray[i] = loc[j]; |
1006 | } | 1185 | } |
1007 | delete [] buff; | 1186 | delete [] buff; |
1008 | delete [] loc; | 1187 | delete [] loc; |
1009 | mylastpos = locate(); | 1188 | mylastpos = locate(); |
1010 | update(); | 1189 | update(); |
1011 | } | 1190 | } |
1012 | */ | 1191 | */ |
1013 | void QTReader::lineUp() | 1192 | void QTReader::lineUp() |
1014 | { | 1193 | { |
1194 | buffdoc.unsuspend(); | ||
1015 | CDrawBuffer* buff = textarray[numlines]; | 1195 | CDrawBuffer* buff = textarray[numlines]; |
1016 | unsigned int loc; | 1196 | unsigned int loc; |
1017 | unsigned int end = locnarray[numlines]; | 1197 | unsigned int end = locnarray[numlines]; |
1018 | int cbptr = 0; | 1198 | int cbptr = 0; |
1019 | if (locate() != mylastpos) jumpto(mylastpos); | 1199 | if (locate() != mylastpos) jumpto(mylastpos); |
1020 | unsigned int target = locnarray[0]; | 1200 | unsigned int target = locnarray[0]; |
1021 | if (target == 0) return; | 1201 | if (target == 0) return; |
1202 | if (!m_continuousDocument && (target == buffdoc.startSection())) return; | ||
1022 | if (buffdoc.hasrandomaccess()) | 1203 | if (buffdoc.hasrandomaccess()) |
1023 | { | 1204 | { |
1024 | unsigned int delta = locate()-pagelocate(); | 1205 | unsigned int delta = locate()-pagelocate(); |
1025 | if (delta < 64) delta = 64; | 1206 | if (delta < 64) delta = 64; |
1026 | do | 1207 | do |
1027 | { | 1208 | { |
1028 | delta <<= 1; | 1209 | delta <<= 1; |
1029 | if (delta >= target) | 1210 | if (delta >= target) |
1030 | { | 1211 | { |
1031 | delta = target; | 1212 | delta = target; |
1032 | jumpto(0); | 1213 | jumpto(0); |
1033 | loc = locate(); | 1214 | loc = locate(); |
1034 | getline(buff); | 1215 | getline(buff); |
1035 | break; | 1216 | break; |
1036 | } | 1217 | } |
1218 | else if (!m_continuousDocument && (target - delta < buffdoc.startSection())) | ||
1219 | { | ||
1220 | delta = target-buffdoc.startSection(); | ||
1221 | jumpto(buffdoc.startSection()); | ||
1222 | loc = locate(); | ||
1223 | getline(buff); | ||
1224 | break; | ||
1225 | } | ||
1037 | jumpto(target-delta); | 1226 | jumpto(target-delta); |
1038 | do | 1227 | do |
1039 | { | 1228 | { |
1040 | getline(buff); | 1229 | getline(buff); |
1041 | #ifdef WS | 1230 | #ifdef WS |
1042 | //printf("Trying:%s\n",buff[0]); | 1231 | //printf("Trying:%s\n",buff[0]); |
1043 | #endif | 1232 | #endif |
1044 | if (locate() > target) continue; | 1233 | if (locate() > target) continue; |
1045 | } | 1234 | } |
1046 | while (!buffdoc.iseol()); | 1235 | while (!buffdoc.iseol()); |
1047 | loc = locate(); | 1236 | loc = locate(); |
1048 | getline(buff); | 1237 | getline(buff); |
1049 | } | 1238 | } |
1050 | while (locate() >= target && delta < 4096); | 1239 | while (locate() >= target && delta < 4096); |
1051 | } | 1240 | } |
1052 | else | 1241 | else |
1053 | { | 1242 | { |
1054 | jumpto(0); | 1243 | jumpto(0); |
1055 | loc = locate(); | 1244 | loc = locate(); |
1056 | getline(buff); | 1245 | getline(buff); |
1057 | } | 1246 | } |
1058 | cbptr = 0; | 1247 | cbptr = 0; |
1059 | while (locate() < target) | 1248 | while (locate() < target) |
1060 | { | 1249 | { |
1061 | loc = locate(); | 1250 | loc = locate(); |
1062 | getline(buff); | 1251 | getline(buff); |
1063 | } | 1252 | } |
1064 | for (int i = numlines; i > 0; i--) | 1253 | for (int i = numlines; i > 0; i--) |
1065 | { | 1254 | { |
1066 | textarray[i] = textarray[i-1]; | 1255 | textarray[i] = textarray[i-1]; |
1067 | locnarray[i] = locnarray[i-1]; | 1256 | locnarray[i] = locnarray[i-1]; |
1068 | } | 1257 | } |
1069 | textarray[0] = buff; | 1258 | textarray[0] = buff; |
1070 | locnarray[0] = loc; | 1259 | locnarray[0] = loc; |
1071 | int start = numlines; | 1260 | int start = numlines; |
1072 | int ypos = 0; | 1261 | int ypos = 0; |
1073 | for (int i = 0; i <= numlines; i++) | 1262 | for (int i = 0; i <= numlines; i++) |
1074 | { | 1263 | { |
1075 | ypos += textarray[i]->lineSpacing(); | 1264 | ypos += textarray[i]->lineSpacing(); |
1076 | if (ypos > height()) | 1265 | if (ypos > height()) |
1077 | { | 1266 | { |
1078 | start = i; | 1267 | start = i; |
1079 | ypos -= textarray[i]->lineSpacing(); | 1268 | ypos -= textarray[i]->lineSpacing(); |
1080 | break; | 1269 | break; |
1081 | } | 1270 | } |
1082 | } | 1271 | } |
1083 | jumpto(locnarray[start]); | 1272 | jumpto(locnarray[start]); |
1084 | fillbuffer(start, ypos); | 1273 | fillbuffer(start, ypos); |
1085 | update(); | 1274 | update(); |
1086 | } | 1275 | } |
1087 | 1276 | ||
1088 | bool QTReader::empty() | 1277 | bool QTReader::empty() |
1089 | { | 1278 | { |
1090 | return buffdoc.empty(); | 1279 | return buffdoc.empty(); |
1091 | } | 1280 | } |
1092 | 1281 | ||
1093 | MarkupType QTReader::PreferredMarkup() | 1282 | MarkupType QTReader::PreferredMarkup() |
1094 | { | 1283 | { |
1095 | MarkupType m = buffdoc.PreferredMarkup(); | 1284 | MarkupType m = buffdoc.PreferredMarkup(); |
1096 | if (m == cTEXT) | 1285 | if (m == cTEXT) |
1097 | { | 1286 | { |
1098 | int ext = m_lastfile.findRev('.'); | 1287 | int ext = m_lastfile.findRev('.'); |
1099 | if (ext >= 0) | 1288 | if (ext >= 0) |
1100 | { | 1289 | { |
1101 | QString ft = m_lastfile.right(m_lastfile.length()-ext-1).upper(); | 1290 | QString ft = m_lastfile.right(m_lastfile.length()-ext-1).upper(); |
1102 | if (ft.left(3) == "HTM") | 1291 | if (ft.left(3) == "HTM") |
1103 | { | 1292 | { |
1104 | m = cHTML; | 1293 | m = cHTML; |
1105 | } | 1294 | } |
1106 | } | 1295 | } |
1107 | } | 1296 | } |
1108 | return m; | 1297 | return m; |
1109 | } | 1298 | } |
1299 | |||
1300 | void QTReader::setstate(const statedata& sd) | ||
1301 | { | ||
1302 | bstripcr = sd.bstripcr; | ||
1303 | btextfmt = sd.btextfmt; | ||
1304 | bautofmt = sd.bautofmt; | ||
1305 | bstriphtml = sd.bstriphtml; | ||
1306 | bpeanut = sd.bpeanut; | ||
1307 | bdehyphen = sd.bdehyphen; | ||
1308 | bonespace = sd.bonespace; | ||
1309 | bunindent = sd.bunindent; | ||
1310 | brepara = sd.brepara; | ||
1311 | bdblspce = sd.bdblspce; | ||
1312 | m_bpagemode = sd.m_bpagemode; | ||
1313 | m_navkeys = sd.m_navkeys; | ||
1314 | m_bMonoSpaced = sd.m_bMonoSpaced; | ||
1315 | bremap = sd.bremap; | ||
1316 | bmakebold = sd.bmakebold; | ||
1317 | m_continuousDocument = sd.Continuous; | ||
1318 | #ifdef REPALM | ||
1319 | brepalm = sd.brepalm; | ||
1320 | #endif | ||
1321 | bindenter = sd.bindenter; | ||
1322 | m_encd = sd.m_charpc; | ||
1323 | m_fontname = sd.m_fontname; | ||
1324 | setContinuous(sd.Continuous); | ||
1325 | ChangeFont(sd.m_textsize); | ||
1326 | refresh(); | ||
1327 | } | ||
diff --git a/noncore/apps/opie-reader/QTReader.h b/noncore/apps/opie-reader/QTReader.h index 78230b4..3d5f57d 100644 --- a/noncore/apps/opie-reader/QTReader.h +++ b/noncore/apps/opie-reader/QTReader.h | |||
@@ -1,272 +1,312 @@ | |||
1 | #ifndef __QTREADER_H | 1 | #ifndef __QTREADER_H |
2 | #define __QTREADER_H | 2 | #define __QTREADER_H |
3 | 3 | ||
4 | #include <qwidget.h> | 4 | #include <qwidget.h> |
5 | //#include <qpainter.h> | 5 | //#include <qpainter.h> |
6 | #include "my_list.h" | 6 | #include "my_list.h" |
7 | #include "BuffDoc.h" | 7 | #include "BuffDoc.h" |
8 | #include "FontControl.h" | 8 | #include "FontControl.h" |
9 | 9 | ||
10 | //#include <qtimer.h> | 10 | //#include <qtimer.h> |
11 | 11 | ||
12 | class CDrawBuffer; | 12 | class CDrawBuffer; |
13 | //class CBuffer; | 13 | //class CBuffer; |
14 | class QPainter; | 14 | class QPainter; |
15 | class QTimer; | 15 | class QTimer; |
16 | class QPixmap; | ||
17 | class statedata; | ||
16 | 18 | ||
17 | class QTReader : public QWidget | 19 | class QTReader : public QWidget |
18 | { | 20 | { |
19 | Q_OBJECT | 21 | Q_OBJECT |
20 | 22 | ||
21 | friend class QTReaderApp; | 23 | friend class QTReaderApp; |
24 | void suspend() { buffdoc.suspend(); } | ||
22 | void drawText(QPainter& p, int x, int y, tchar* text); | 25 | void drawText(QPainter& p, int x, int y, tchar* text); |
23 | int m_delay; | 26 | int m_delay; |
24 | unsigned int m_overlap; | 27 | unsigned int m_overlap; |
25 | bool m_autoScroll; | 28 | bool m_autoScroll; |
26 | void autoscroll(); | 29 | void autoscroll(); |
27 | QTimer* timer; | 30 | QTimer* timer; |
28 | int m_scrolldy1, m_scrolldy2, m_encd; | 31 | int m_scrolldy1, m_scrolldy2, m_encd; |
29 | void focusInEvent(QFocusEvent*); | 32 | void focusInEvent(QFocusEvent*); |
30 | void focusOutEvent(QFocusEvent*); | 33 | void focusOutEvent(QFocusEvent*); |
31 | bool ChangeFont(int); | 34 | bool ChangeFont(int); |
32 | bool getline(CDrawBuffer*); | 35 | bool getline(CDrawBuffer*); |
33 | int m_charWidth; | 36 | int m_charWidth; |
34 | int m_charpc; | 37 | int m_charpc; |
35 | FontControl m_fontControl; | 38 | FontControl m_fontControl; |
36 | public: | 39 | public: |
37 | QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0); | 40 | QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0); |
38 | // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0); | 41 | // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0); |
39 | ~QTReader(); | 42 | ~QTReader(); |
43 | void zoomin(); | ||
44 | void zoomout(); | ||
45 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) | ||
46 | { | ||
47 | buffdoc.setSaveData(data, len, src, srclen); | ||
48 | } | ||
49 | void putSaveData(unsigned char*& src, unsigned short& srclen) | ||
50 | { | ||
51 | buffdoc.putSaveData(src, srclen); | ||
52 | } | ||
40 | bool empty(); | 53 | bool empty(); |
54 | void setContinuous(bool _b); | ||
41 | void toggle_autoscroll(); | 55 | void toggle_autoscroll(); |
42 | void setautoscroll(bool); | 56 | void setautoscroll(bool); |
43 | void disableAutoscroll() { m_autoScroll = false; } | 57 | void disableAutoscroll() { m_autoScroll = false; } |
44 | void copy() | 58 | void copy() |
45 | { | 59 | { |
46 | /* | 60 | /* |
47 | size_t nd = locate(); | 61 | size_t nd = locate(); |
48 | jumpto(m_mark); | 62 | jumpto(m_mark); |
49 | QString text; | 63 | QString text; |
50 | while (m_mark < nd) | 64 | while (m_mark < nd) |
51 | { | 65 | { |
52 | text += buffdoc.getch(); | 66 | text += buffdoc.getch(); |
53 | m_mark++; | 67 | m_mark++; |
54 | } | 68 | } |
55 | QApplication::clipboard()->setText(text); | 69 | QApplication::clipboard()->setText(text); |
56 | jumpto(nd); | 70 | jumpto(nd); |
57 | */ | 71 | */ |
58 | }; | 72 | }; |
59 | void clear() {}; | 73 | void clear() {}; |
60 | void setText(const QString& n, const QString& s) { m_string = n; load_file((const char*)s); }; | 74 | void setText(const QString& n, const QString& s) { m_string = n; load_file((const char*)s); }; |
61 | /* | 75 | /* |
62 | void setText(bool oldfile) | 76 | void setText(bool oldfile) |
63 | { | 77 | { |
64 | if (oldfile) | 78 | if (oldfile) |
65 | { | 79 | { |
66 | m_string = m_lastfile; | 80 | m_string = m_lastfile; |
67 | load_file((const tchar*)m_string); | 81 | load_file((const tchar*)m_string); |
68 | } | 82 | } |
69 | else | 83 | else |
70 | { | 84 | { |
71 | m_string = QString::null; | 85 | m_string = QString::null; |
72 | } | 86 | } |
73 | }; | 87 | }; |
74 | */ | 88 | */ |
75 | void setpeanut(bool _b) | 89 | void setpeanut(bool _b) |
76 | { | 90 | { |
77 | bpeanut = _b; | 91 | bpeanut = _b; |
78 | setfilter(getfilter()); | 92 | setfilter(getfilter()); |
79 | } | 93 | } |
80 | void setremap(bool _b) | 94 | void setremap(bool _b) |
81 | { | 95 | { |
82 | bremap = _b; | 96 | bremap = _b; |
83 | setfilter(getfilter()); | 97 | setfilter(getfilter()); |
84 | } | 98 | } |
85 | void setmakebold(bool _b) | 99 | void setmakebold(bool _b) |
86 | { | 100 | { |
87 | bmakebold = _b; | 101 | bmakebold = _b; |
88 | setfilter(getfilter()); | 102 | setfilter(getfilter()); |
89 | } | 103 | } |
90 | void setautofmt(bool _b) | 104 | void setautofmt(bool _b) |
91 | { | 105 | { |
92 | bautofmt = _b; | 106 | bautofmt = _b; |
93 | if (bautofmt) | 107 | if (bautofmt) |
94 | { | 108 | { |
95 | btextfmt = false; | 109 | btextfmt = false; |
96 | bstriphtml = false;; | 110 | bstriphtml = false;; |
97 | bpeanut = false; | 111 | bpeanut = false; |
98 | } | 112 | } |
99 | setfilter(getfilter()); | 113 | setfilter(getfilter()); |
100 | } | 114 | } |
101 | void settextfmt(bool _b) | 115 | void settextfmt(bool _b) |
102 | { | 116 | { |
103 | btextfmt = _b; | 117 | btextfmt = _b; |
104 | setfilter(getfilter()); | 118 | setfilter(getfilter()); |
105 | } | 119 | } |
106 | void setstripcr(bool _b) | 120 | void setstripcr(bool _b) |
107 | { | 121 | { |
108 | bstripcr = _b; | 122 | bstripcr = _b; |
109 | setfilter(getfilter()); | 123 | setfilter(getfilter()); |
110 | } | 124 | } |
125 | void setonespace(bool _b) | ||
126 | { | ||
127 | bonespace = _b; | ||
128 | setfilter(getfilter()); | ||
129 | } | ||
130 | #ifdef REPALM | ||
131 | void setrepalm(bool _b) | ||
132 | { | ||
133 | brepalm = _b; | ||
134 | setfilter(getfilter()); | ||
135 | } | ||
136 | #endif | ||
111 | void setstriphtml(bool _b) | 137 | void setstriphtml(bool _b) |
112 | { | 138 | { |
113 | bstriphtml = _b; | 139 | bstriphtml = _b; |
114 | setfilter(getfilter()); | 140 | setfilter(getfilter()); |
115 | } | 141 | } |
116 | void setdehyphen(bool _b) | 142 | void setdehyphen(bool _b) |
117 | { | 143 | { |
118 | bdehyphen = _b; | 144 | bdehyphen = _b; |
119 | setfilter(getfilter()); | 145 | setfilter(getfilter()); |
120 | } | 146 | } |
121 | void setunindent(bool _b) | 147 | void setunindent(bool _b) |
122 | { | 148 | { |
123 | bunindent = _b; | 149 | bunindent = _b; |
124 | setfilter(getfilter()); | 150 | setfilter(getfilter()); |
125 | } | 151 | } |
126 | void setrepara(bool _b) | 152 | void setrepara(bool _b) |
127 | { | 153 | { |
128 | brepara = _b; | 154 | brepara = _b; |
129 | setfilter(getfilter()); | 155 | setfilter(getfilter()); |
130 | } | 156 | } |
131 | void setdblspce(bool _b) | 157 | void setdblspce(bool _b) |
132 | { | 158 | { |
133 | bdblspce = _b; | 159 | bdblspce = _b; |
134 | setfilter(getfilter()); | 160 | setfilter(getfilter()); |
135 | } | 161 | } |
136 | void indentplus() | 162 | void indentplus() |
137 | { | 163 | { |
138 | if (bindenter < 15) bindenter += 2; | 164 | if (bindenter < 15) bindenter += 2; |
139 | setfilter(getfilter()); | 165 | setfilter(getfilter()); |
140 | } | 166 | } |
141 | void indentminus() | 167 | void indentminus() |
142 | { | 168 | { |
143 | if (bindenter > 1) bindenter -= 2; | 169 | if (bindenter > 1) bindenter -= 2; |
144 | setfilter(getfilter()); | 170 | setfilter(getfilter()); |
145 | } | 171 | } |
146 | void setpagemode(bool _b) | 172 | void setpagemode(bool _b) |
147 | { | 173 | { |
148 | m_bpagemode = _b; | 174 | m_bpagemode = _b; |
149 | } | 175 | } |
150 | void setmono(bool _b) | 176 | void setmono(bool _b) |
151 | { | 177 | { |
152 | m_bMonoSpaced = _b; | 178 | m_bMonoSpaced = _b; |
153 | ChangeFont(m_fontControl.currentsize()); | 179 | ChangeFont(m_fontControl.currentsize()); |
154 | locate(pagelocate()); | 180 | locate(pagelocate()); |
155 | } | 181 | } |
156 | void setencoding(int _f) | 182 | void setencoding(int _f) |
157 | { | 183 | { |
158 | m_encd = _f; | 184 | m_encd = _f; |
159 | setfilter(getfilter()); | 185 | setfilter(getfilter()); |
160 | } | 186 | } |
161 | MarkupType PreferredMarkup(); | 187 | MarkupType PreferredMarkup(); |
162 | CEncoding* getencoding() | 188 | CEncoding* getencoding() |
163 | { | 189 | { |
164 | switch (m_encd) | 190 | switch (m_encd) |
165 | { | 191 | { |
166 | case 5: | 192 | case 5: |
167 | return new Ccp1252; | 193 | return new Ccp1252; |
168 | case 4: | 194 | case 4: |
169 | return new CPalm; | 195 | return new CPalm; |
170 | case 1: | 196 | case 1: |
171 | return new CUtf8; | 197 | return new CUtf8; |
172 | case 2: | 198 | case 2: |
173 | return new CUcs16be; | 199 | return new CUcs16be; |
174 | case 3: | 200 | case 3: |
175 | return new CUcs16le; | 201 | return new CUcs16le; |
176 | case 0: | 202 | case 0: |
177 | default: | 203 | default: |
178 | return new CAscii; | 204 | return new CAscii; |
179 | } | 205 | } |
180 | } | 206 | } |
181 | CFilterChain* getfilter() | 207 | CFilterChain* getfilter() |
182 | { | 208 | { |
183 | CFilterChain * filt = new CFilterChain(getencoding()); | 209 | CFilterChain * filt = new CFilterChain(getencoding()); |
184 | if (bstripcr) filt->addfilter(new stripcr); | 210 | if (bstripcr) filt->addfilter(new stripcr); |
185 | 211 | ||
186 | if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt); | 212 | if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt); |
187 | if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter); | 213 | if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter); |
188 | if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml); | 214 | if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml); |
189 | 215 | ||
190 | if (bdehyphen) filt->addfilter(new dehyphen); | 216 | if (bdehyphen) filt->addfilter(new dehyphen); |
191 | if (bunindent) filt->addfilter(new unindent); | 217 | if (bunindent) filt->addfilter(new unindent); |
192 | if (brepara) filt->addfilter(new repara); | 218 | if (brepara) filt->addfilter(new repara); |
219 | if (bonespace) filt->addfilter(new OnePara); | ||
193 | if (bindenter) filt->addfilter(new indenter(bindenter)); | 220 | if (bindenter) filt->addfilter(new indenter(bindenter)); |
194 | if (bdblspce) filt->addfilter(new dblspce); | 221 | if (bdblspce) filt->addfilter(new dblspce); |
222 | #ifdef REPALM | ||
223 | if (brepalm) filt->addfilter(new repalm); | ||
224 | #endif | ||
195 | if (bremap) filt->addfilter(new remap); | 225 | if (bremap) filt->addfilter(new remap); |
196 | if (bmakebold) filt->addfilter(new embolden); | 226 | if (bmakebold) filt->addfilter(new embolden); |
197 | return filt; | 227 | return filt; |
198 | } | 228 | } |
199 | 229 | ||
200 | 230 | ||
201 | private slots: | 231 | private slots: |
202 | void doscroll(); | 232 | void doscroll(); |
203 | void drawIt( QPainter * ); | 233 | void drawIt( QPainter * ); |
204 | void paintEvent( QPaintEvent * ); | 234 | void paintEvent( QPaintEvent * ); |
205 | // void resizeEvent( QResizeEvent * p ) { update(); } | 235 | // void resizeEvent( QResizeEvent * p ) { update(); } |
206 | void keyPressEvent(QKeyEvent*); | 236 | void keyPressEvent(QKeyEvent*); |
207 | void drawFonts(QPainter*); | 237 | void drawFonts(QPainter*); |
208 | private: | 238 | private: |
209 | void setTwoTouch(bool _b); | 239 | void setTwoTouch(bool _b); |
210 | void init(); | 240 | void init(); |
211 | void mousePressEvent( QMouseEvent* ); | 241 | void mousePressEvent( QMouseEvent* ); |
212 | void mouseReleaseEvent( QMouseEvent* ); | 242 | void mouseReleaseEvent( QMouseEvent* ); |
213 | // void mouseDoubleClickEvent( QMouseEvent* ); | 243 | // void mouseDoubleClickEvent( QMouseEvent* ); |
214 | QString m_string, m_fontname; | 244 | QString m_string, m_fontname; |
215 | void setfont(); | 245 | void setfont(); |
216 | //myoutput stuff | 246 | //myoutput stuff |
217 | private: | 247 | private: |
218 | bool mouseUpOn; | 248 | bool mouseUpOn; |
219 | bool getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt); | 249 | linkType getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt); |
220 | bool m_twotouch, m_touchone; | 250 | bool m_twotouch, m_touchone; |
221 | size_t m_startpos, m_startoffset; | 251 | size_t m_startpos, m_startoffset; |
252 | void dopageup(unsigned int); | ||
222 | void dopageup(); | 253 | void dopageup(); |
223 | void lineDown(); | 254 | void lineDown(); |
224 | void lineUp(); | 255 | void lineUp(); |
225 | void dopagedn(); | 256 | void dopagedn(); |
226 | long real_delay(); | 257 | long real_delay(); |
227 | int m_textsize; | 258 | int m_textsize; |
228 | int m_lastwidth, m_lastheight; | 259 | int m_lastwidth, m_lastheight; |
229 | CBufferFace<CDrawBuffer*> textarray; | 260 | CBufferFace<CDrawBuffer*> textarray; |
230 | CBufferFace<size_t> locnarray; | 261 | CBufferFace<size_t> locnarray; |
231 | unsigned int numlines; | 262 | unsigned int numlines; |
232 | bool bstripcr, btextfmt, bstriphtml, bdehyphen, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt; | 263 | bool bstripcr, btextfmt, bstriphtml, bdehyphen, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt, bonespace; |
233 | bool m_bpagemode, m_bMonoSpaced; | 264 | #ifdef REPALM |
265 | bool brepalm; | ||
266 | #endif | ||
267 | bool m_bpagemode, m_bMonoSpaced, m_continuousDocument; | ||
234 | unsigned char bindenter; | 268 | unsigned char bindenter; |
235 | QString m_lastfile; | 269 | QString m_lastfile; |
236 | size_t m_lastposn; | 270 | size_t m_lastposn; |
237 | public: | 271 | public: |
272 | bool bDoUpdates; | ||
273 | bool m_navkeys; | ||
274 | void NavUp(); | ||
275 | void NavDown(); | ||
238 | int getch() { return buffdoc.getch(); } | 276 | int getch() { return buffdoc.getch(); } |
239 | bool tight; | 277 | bool tight; |
240 | bool load_file(const char *newfile, unsigned int lcn=0); | 278 | bool load_file(const char *newfile, unsigned int lcn=0); |
241 | BuffDoc buffdoc; | 279 | BuffDoc buffdoc; |
242 | CList<Bkmk>* getbkmklist() { return buffdoc.getbkmklist(); } | 280 | CList<Bkmk>* getbkmklist() { return buffdoc.getbkmklist(); } |
243 | bool locate(unsigned long n); | 281 | bool locate(unsigned long n); |
244 | void jumpto(unsigned long n) { buffdoc.locate(n); } | 282 | void jumpto(unsigned long n) { buffdoc.unsuspend(); buffdoc.locate(n); } |
245 | unsigned long locate() { return buffdoc.locate(); } | 283 | unsigned long locate() { buffdoc.unsuspend(); return buffdoc.locate(); } |
246 | unsigned long explocate() { return buffdoc.explocate(); } | 284 | unsigned long explocate() { buffdoc.unsuspend(); return buffdoc.explocate(); } |
247 | unsigned long pagelocate() { return locnarray[0]; } | 285 | unsigned long pagelocate() { return locnarray[0]; } |
248 | unsigned long mylastpos; | 286 | unsigned long mylastpos; |
249 | void setfilter(CFilterChain *f) { buffdoc.setfilter(f); locate(pagelocate()); } | 287 | void setfilter(CFilterChain *f) { buffdoc.unsuspend(); buffdoc.setfilter(f); locate(pagelocate()); } |
250 | void restore() { jumpto(mylastpos); } | 288 | void restore() { jumpto(mylastpos); } |
251 | void goUp(); | 289 | void goUp(); |
252 | void refresh() { locate(pagelocate()); } | 290 | void refresh() { locate(pagelocate()); } |
253 | void goDown(); | 291 | void goDown(); |
254 | // bool bold; | 292 | // bool bold; |
255 | int textsize() { return m_textsize; } | 293 | int textsize() { return m_textsize; } |
256 | void textsize(int ts) { m_textsize = ts; } | 294 | void textsize(int ts) { m_textsize = ts; } |
257 | bool fillbuffer(int ru = 0, int ht = 0); | 295 | bool fillbuffer(int ru = 0, int ht = 0); |
258 | unsigned int screenlines(); | 296 | unsigned int screenlines(); |
259 | void sizes(unsigned long& fs, unsigned long& ts) { buffdoc.sizes(fs,ts); } | 297 | void sizes(unsigned long& fs, unsigned long& ts) { buffdoc.unsuspend(); buffdoc.sizes(fs,ts); } |
260 | static const char *fonts[]; | 298 | static const char *fonts[]; |
261 | // unsigned int *fontsizes; | 299 | // unsigned int *fontsizes; |
262 | int m_ascent, m_descent, m_linespacing; | 300 | int m_ascent, m_descent, m_linespacing; |
263 | QFontMetrics* m_fm; | 301 | QFontMetrics* m_fm; |
264 | QString firstword(); | 302 | QString firstword(); |
303 | void setstate(const statedata& sd); | ||
265 | 304 | ||
266 | signals: | 305 | signals: |
267 | void OnRedraw(); | 306 | void OnRedraw(); |
268 | void OnWordSelected(const QString&, size_t, const QString&); | 307 | void OnWordSelected(const QString&, size_t, const QString&); |
269 | void OnActionPressed(); | 308 | void OnActionPressed(); |
309 | void OnShowPicture(QPixmap&); | ||
270 | }; | 310 | }; |
271 | 311 | ||
272 | #endif | 312 | #endif |
diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp index 8726df7..2044b1d 100644 --- a/noncore/apps/opie-reader/QTReaderApp.cpp +++ b/noncore/apps/opie-reader/QTReaderApp.cpp | |||
@@ -1,2029 +1,2606 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. Allrights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qt Palmtop Environment. | 4 | ** This file is part of Qt Palmtop Environment. |
5 | ** | 5 | ** |
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 | ||
21 | #include <qclipboard.h> | 21 | #include <qclipboard.h> |
22 | #include <qwidgetstack.h> | 22 | #include <qwidgetstack.h> |
23 | #include <qpe/qpemenubar.h> | 23 | #include <qpe/qpemenubar.h> |
24 | #include <qpe/qpetoolbar.h> | 24 | //#include <qpe/qpetoolbar.h> |
25 | #include <qmenubar.h> | ||
26 | #include <qtoolbar.h> | ||
27 | #include <qpe/menubutton.h> | ||
25 | #include <qpe/fontdatabase.h> | 28 | #include <qpe/fontdatabase.h> |
26 | #include <qcombobox.h> | 29 | #include <qcombobox.h> |
27 | #include <qpopupmenu.h> | 30 | #include <qpopupmenu.h> |
28 | #include <qaction.h> | 31 | #include <qaction.h> |
29 | #include <qapplication.h> | 32 | #include <qapplication.h> |
30 | #include <qlineedit.h> | 33 | #include <qlineedit.h> |
31 | #include <qtoolbutton.h> | 34 | #include <qtoolbutton.h> |
32 | #include <qspinbox.h> | 35 | #include <qspinbox.h> |
33 | #include <qobjectlist.h> | 36 | #include <qobjectlist.h> |
34 | #include <qpe/global.h> | 37 | #include <qpe/global.h> |
35 | #include <qpe/applnk.h> | 38 | #include <qpe/applnk.h> |
36 | #include <qfileinfo.h> | 39 | #include <qfileinfo.h> |
37 | #include <stdlib.h> //getenv | 40 | #include <stdlib.h> //getenv |
38 | #include <qprogressbar.h> | 41 | #include <qprogressbar.h> |
39 | #include <qpe/config.h> | 42 | #include <qpe/config.h> |
40 | #include <qbuttongroup.h> | 43 | #include <qbuttongroup.h> |
41 | #include <qradiobutton.h> | 44 | #include <qradiobutton.h> |
42 | #include <qpe/qcopenvelope_qws.h> | 45 | #include <qpe/qcopenvelope_qws.h> |
43 | 46 | ||
44 | #include "QTReader.h" | 47 | #include "QTReader.h" |
48 | #include "GraphicWin.h" | ||
45 | #include "Bkmks.h" | 49 | #include "Bkmks.h" |
46 | #include "cbkmkselector.h" | 50 | #include "cbkmkselector.h" |
47 | #include "infowin.h" | 51 | #include "infowin.h" |
48 | #include "CAnnoEdit.h" | 52 | #include "CAnnoEdit.h" |
49 | #include "QFloatBar.h" | 53 | #include "QFloatBar.h" |
50 | //#include <qpe/fontdatabase.h> | 54 | //#include <qpe/fontdatabase.h> |
51 | 55 | ||
52 | #include <qpe/resource.h> | 56 | #include <qpe/resource.h> |
53 | #include <qpe/qpeapplication.h> | 57 | #include <qpe/qpeapplication.h> |
54 | 58 | ||
55 | #include "QTReaderApp.h" | 59 | #include "QTReaderApp.h" |
56 | #include "fileBrowser.h" | 60 | #include "fileBrowser.h" |
57 | #include "CDrawBuffer.h" | 61 | #include "CDrawBuffer.h" |
62 | #include "Filedata.h" | ||
63 | #include "opie.h" | ||
64 | #include "name.h" | ||
65 | #include "StateData.h" | ||
66 | |||
67 | #ifdef OPIE | ||
68 | #define PICDIR "opie-reader/" | ||
69 | #else | ||
70 | #define PICDIR | ||
71 | #endif | ||
58 | 72 | ||
59 | 73 | ||
60 | unsigned long QTReaderApp::m_uid = 0; | 74 | unsigned long QTReaderApp::m_uid = 0; |
61 | 75 | ||
62 | void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); } | 76 | void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); } |
63 | 77 | ||
64 | #include <unistd.h> | 78 | #include <unistd.h> |
65 | #include <stddef.h> | 79 | #include <stddef.h> |
66 | #include <dirent.h> | 80 | #include <dirent.h> |
67 | 81 | ||
68 | void QTReaderApp::listBkmkFiles() | 82 | void QTReaderApp::listBkmkFiles() |
69 | { | 83 | { |
70 | bkmkselector->clear(); | 84 | bkmkselector->clear(); |
85 | bkmkselector->setText("Cancel"); | ||
71 | int cnt = 0; | 86 | int cnt = 0; |
72 | DIR *d; | 87 | DIR *d; |
73 | d = opendir((const char *)Global::applicationFileName("uqtreader","")); | 88 | d = opendir((const char *)Global::applicationFileName(APPDIR,"")); |
74 | 89 | ||
75 | while(1) | 90 | while(1) |
76 | { | 91 | { |
77 | struct dirent* de; | 92 | struct dirent* de; |
78 | struct stat buf; | 93 | struct stat buf; |
79 | de = readdir(d); | 94 | de = readdir(d); |
80 | if (de == NULL) break; | 95 | if (de == NULL) break; |
81 | 96 | ||
82 | if (lstat((const char *)Global::applicationFileName("uqtreader",de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) | 97 | if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) |
83 | { | 98 | { |
84 | bkmkselector->insertItem(de->d_name); | 99 | bkmkselector->insertItem(de->d_name); |
85 | cnt++; | 100 | cnt++; |
86 | } | 101 | } |
87 | } | 102 | } |
88 | 103 | ||
89 | closedir(d); | 104 | closedir(d); |
90 | 105 | ||
91 | if (cnt > 0) | 106 | if (cnt > 0) |
92 | { | 107 | { |
93 | //tjw menu->hide(); | 108 | //tjw menu->hide(); |
94 | editBar->hide(); | 109 | editBar->hide(); |
95 | if (m_fontVisible) m_fontBar->hide(); | 110 | if (m_fontVisible) m_fontBar->hide(); |
96 | if (regVisible) regBar->hide(); | 111 | if (regVisible) |
97 | if (searchVisible) searchBar->hide(); | 112 | { |
98 | m_nRegAction = cRmBkmkFile; | 113 | Global::hideInputMethod(); |
114 | regBar->hide(); | ||
115 | } | ||
116 | if (searchVisible) | ||
117 | { | ||
118 | Global::hideInputMethod(); | ||
119 | searchBar->hide(); | ||
120 | } | ||
121 | m_nRegAction = cRmBkmkFile; | ||
99 | editorStack->raiseWidget( bkmkselector ); | 122 | editorStack->raiseWidget( bkmkselector ); |
100 | } | 123 | } |
101 | else | 124 | else |
102 | QMessageBox::information(this, "OpieReader", "No bookmark files"); | 125 | QMessageBox::information(this, PROGNAME, "No bookmark files"); |
103 | } | 126 | } |
104 | 127 | ||
105 | QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | 128 | QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) |
106 | : QMainWindow( parent, name, f ), bFromDocView( FALSE ), m_dontSave(false) | 129 | : QMainWindow( parent, name, f ), bFromDocView( FALSE ), m_dontSave(false) |
107 | { | 130 | { |
108 | // qDebug("Application directory = %s", (const tchar *)QPEApplication::documentDir()); | 131 | // qDebug("Application directory = %s", (const tchar *)QPEApplication::documentDir()); |
109 | // qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml")); | 132 | // qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml")); |
110 | 133 | ||
111 | pBkmklist = NULL; | 134 | pBkmklist = NULL; |
112 | doc = 0; | 135 | pOpenlist = NULL; |
136 | // doc = 0; | ||
113 | 137 | ||
114 | m_fBkmksChanged = false; | 138 | m_fBkmksChanged = false; |
115 | 139 | ||
116 | QString lang = getenv( "LANG" ); | 140 | QString lang = getenv( "LANG" ); |
117 | 141 | ||
118 | m_autogenstr = "^ *[A-Z].*[a-z] *$"; | 142 | m_autogenstr = "^ *[A-Z].*[a-z] *$"; |
119 | setToolBarsMovable( FALSE ); | 143 | setToolBarsMovable( FALSE ); |
120 | 144 | ||
121 | setIcon( Resource::loadPixmap( "opie-reader/uqtreader" ) ); | 145 | setIcon( Resource::loadPixmap( "uqtreader" ) ); |
122 | 146 | ||
123 | QPEToolBar *bar = new QPEToolBar( this ); | 147 | // QPEToolBar *bar = new QPEToolBar( this ); |
148 | QToolBar *bar = new QToolBar( this ); | ||
124 | bar->setHorizontalStretchable( TRUE ); | 149 | bar->setHorizontalStretchable( TRUE ); |
125 | addToolBar(bar, "tool",QMainWindow::Top, true); | 150 | addToolBar(bar, "tool",QMainWindow::Top, true); |
126 | //tjw menu = bar; | 151 | //tjw menu = bar; |
127 | 152 | ||
128 | QPEMenuBar *mb = new QPEMenuBar( bar ); | 153 | QPEMenuBar *mb = new QPEMenuBar( bar ); |
154 | // QMenuBar *mb = new QMenuBar( bar ); | ||
129 | QPopupMenu *file = new QPopupMenu( this ); | 155 | QPopupMenu *file = new QPopupMenu( this ); |
130 | QPopupMenu *format = new QPopupMenu( this ); | 156 | QPopupMenu *format = new QPopupMenu( this ); |
131 | // QPopupMenu *edit = new QPopupMenu( this ); | 157 | // QPopupMenu *edit = new QPopupMenu( this ); |
132 | 158 | ||
133 | // bar = new QToolBar( this ); | 159 | // bar = new QToolBar( this ); |
134 | editBar = bar; | 160 | editBar = bar; |
135 | 161 | ||
136 | /* | 162 | /* |
137 | QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); | 163 | QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); |
138 | connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); | 164 | connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); |
139 | a->addTo( bar ); | 165 | a->addTo( bar ); |
140 | a->addTo( file ); | 166 | a->addTo( file ); |
141 | */ | 167 | */ |
142 | 168 | ||
143 | editorStack = new QWidgetStack( this ); | 169 | editorStack = new QWidgetStack( this ); |
144 | setCentralWidget( editorStack ); | 170 | setCentralWidget( editorStack ); |
145 | 171 | ||
146 | searchVisible = FALSE; | 172 | searchVisible = FALSE; |
147 | regVisible = FALSE; | 173 | regVisible = FALSE; |
148 | m_fontVisible = false; | 174 | m_fontVisible = false; |
149 | 175 | ||
150 | pbar = new QProgressBar(this); | 176 | pbar = new QProgressBar(this); |
151 | pbar->hide(); | 177 | pbar->hide(); |
152 | 178 | ||
153 | m_annoWin = new CAnnoEdit(editorStack); | 179 | m_annoWin = new CAnnoEdit(editorStack); |
154 | editorStack->addWidget(m_annoWin, get_unique_id()); | 180 | editorStack->addWidget(m_annoWin, get_unique_id()); |
155 | connect( m_annoWin, SIGNAL( finished(const QString&, const QString&) ), this, SLOT( addAnno(const QString&, const QString&) ) ); | 181 | connect( m_annoWin, SIGNAL( finished(const QString&, const QString&) ), this, SLOT( addAnno(const QString&, const QString&) ) ); |
156 | connect( m_annoWin, SIGNAL( cancelled() ), this, SLOT( infoClose() ) ); | 182 | connect( m_annoWin, SIGNAL( cancelled() ), this, SLOT( infoClose() ) ); |
157 | 183 | ||
158 | m_infoWin = new infowin(editorStack); | 184 | m_infoWin = new infowin(editorStack); |
159 | editorStack->addWidget(m_infoWin, get_unique_id()); | 185 | editorStack->addWidget(m_infoWin, get_unique_id()); |
160 | connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) ); | 186 | connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) ); |
161 | 187 | ||
188 | m_graphicwin = new GraphicWin(editorStack); | ||
189 | editorStack->addWidget(m_graphicwin, get_unique_id()); | ||
190 | connect( m_graphicwin, SIGNAL( Closed() ), this, SLOT( infoClose() ) ); | ||
191 | |||
162 | // bkmkselector = new QListBox(editorStack, "Bookmarks"); | 192 | // bkmkselector = new QListBox(editorStack, "Bookmarks"); |
163 | bkmkselector = new CBkmkSelector(editorStack, "Bookmarks"); | 193 | bkmkselector = new CBkmkSelector(editorStack, "Bookmarks"); |
164 | // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) ); | 194 | // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) ); |
165 | connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) ); | 195 | connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) ); |
166 | connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) ); | 196 | connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) ); |
167 | editorStack->addWidget( bkmkselector, get_unique_id() ); | 197 | editorStack->addWidget( bkmkselector, get_unique_id() ); |
168 | 198 | ||
169 | /* | 199 | /* |
170 | importSelector = new FileSelector( "*", editorStack, "importselector", false ); | 200 | importSelector = new FileSelector( "*", editorStack, "importselector", false ); |
171 | connect( importSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( importFile( const DocLnk & ) ) ); | 201 | connect( importSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( importFile( const DocLnk & ) ) ); |
172 | 202 | ||
173 | editorStack->addWidget( importSelector, get_unique_id() ); | 203 | editorStack->addWidget( importSelector, get_unique_id() ); |
174 | 204 | ||
175 | // don't need the close visible, it is redundant... | 205 | // don't need the close visible, it is redundant... |
176 | importSelector->setCloseVisible( FALSE ); | 206 | importSelector->setCloseVisible( FALSE ); |
177 | */ | 207 | */ |
208 | qDebug("Reading file list"); | ||
209 | readfilelist(); | ||
178 | 210 | ||
179 | reader = new QTReader( editorStack ); | 211 | reader = new QTReader( editorStack ); |
180 | 212 | ||
213 | reader->bDoUpdates = false; | ||
214 | |||
181 | ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold); | 215 | ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold); |
182 | 216 | ||
183 | Config config( "uqtreader" ); | 217 | qDebug("Reading config"); |
218 | Config config( APPDIR ); | ||
184 | config.setGroup( "View" ); | 219 | config.setGroup( "View" ); |
185 | 220 | ||
186 | reader->bstripcr = config.readBoolEntry( "StripCr", true ); | 221 | reader->bstripcr = config.readBoolEntry( "StripCr", true ); |
187 | reader->btextfmt = config.readBoolEntry( "TextFmt", false ); | 222 | reader->btextfmt = config.readBoolEntry( "TextFmt", false ); |
188 | reader->bautofmt = config.readBoolEntry( "AutoFmt", true ); | 223 | reader->bautofmt = config.readBoolEntry( "AutoFmt", true ); |
189 | reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); | 224 | reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); |
190 | reader->bpeanut = config.readBoolEntry( "Peanut", false ); | 225 | reader->bpeanut = config.readBoolEntry( "Peanut", false ); |
191 | reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); | 226 | reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); |
227 | reader->bonespace = config.readBoolEntry( "OneSpace", false ); | ||
192 | reader->bunindent = config.readBoolEntry( "Unindent", false ); | 228 | reader->bunindent = config.readBoolEntry( "Unindent", false ); |
193 | reader->brepara = config.readBoolEntry( "Repara", false ); | 229 | reader->brepara = config.readBoolEntry( "Repara", false ); |
194 | reader->bdblspce = config.readBoolEntry( "DoubleSpace", false ); | 230 | reader->bdblspce = config.readBoolEntry( "DoubleSpace", false ); |
195 | reader->bindenter = config.readNumEntry( "Indent", 0 ); | 231 | reader->bindenter = config.readNumEntry( "Indent", 0 ); |
196 | reader->m_textsize = config.readNumEntry( "FontSize", 12 ); | 232 | reader->m_textsize = config.readNumEntry( "FontSize", 12 ); |
197 | reader->m_delay = config.readNumEntry( "ScrollDelay", 5184); | 233 | reader->m_delay = config.readNumEntry( "ScrollDelay", 5184); |
198 | reader->m_lastfile = config.readEntry( "LastFile", QString::null ); | 234 | reader->m_lastfile = config.readEntry( "LastFile", QString::null ); |
199 | reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); | 235 | reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); |
200 | reader->m_bpagemode = config.readBoolEntry( "PageMode", true ); | 236 | reader->m_bpagemode = config.readBoolEntry( "PageMode", true ); |
237 | reader->m_navkeys = config.readBoolEntry( "CursorNavigation", false ); | ||
201 | reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false); | 238 | reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false); |
202 | reader->m_fontname = config.readEntry( "Fontname", "helvetica" ); | 239 | reader->m_fontname = config.readEntry( "Fontname", "helvetica" ); |
203 | reader->m_encd = config.readNumEntry( "Encoding", 0 ); | 240 | reader->m_encd = config.readNumEntry( "Encoding", 0 ); |
204 | reader->m_charpc = config.readNumEntry( "CharSpacing", 100 ); | 241 | reader->m_charpc = config.readNumEntry( "CharSpacing", 100 ); |
205 | reader->m_overlap = config.readNumEntry( "Overlap", 0 ); | 242 | reader->m_overlap = config.readNumEntry( "Overlap", 0 ); |
243 | #ifdef REPALM | ||
244 | reader->brepalm = config.readBoolEntry( "Repalm", true ); | ||
245 | #endif | ||
206 | reader->bremap = config.readBoolEntry( "Remap", true ); | 246 | reader->bremap = config.readBoolEntry( "Remap", true ); |
207 | reader->bmakebold = config.readBoolEntry( "MakeBold", false ); | 247 | reader->bmakebold = config.readBoolEntry( "MakeBold", false ); |
248 | reader->setContinuous(config.readBoolEntry( "Continuous", true )); | ||
208 | m_targetapp = config.readEntry( "TargetApp", QString::null ); | 249 | m_targetapp = config.readEntry( "TargetApp", QString::null ); |
209 | m_targetmsg = config.readEntry( "TargetMsg", QString::null ); | 250 | m_targetmsg = config.readEntry( "TargetMsg", QString::null ); |
210 | m_twoTouch = config.readBoolEntry( "TwoTouch", false); | 251 | m_twoTouch = config.readBoolEntry( "TwoTouch", false); |
211 | m_doAnnotation = config.readBoolEntry( "Annotation", false); | 252 | m_doAnnotation = config.readBoolEntry( "Annotation", false); |
212 | m_doDictionary = config.readBoolEntry( "Dictionary", false); | 253 | m_doDictionary = config.readBoolEntry( "Dictionary", false); |
213 | m_doClipboard = config.readBoolEntry( "Clipboard", false); | 254 | m_doClipboard = config.readBoolEntry( "Clipboard", false); |
214 | m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll); | 255 | m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll); |
215 | setTwoTouch(m_twoTouch); | 256 | setTwoTouch(m_twoTouch); |
216 | 257 | ||
217 | 258 | ||
259 | connect( reader, SIGNAL( OnShowPicture(QPixmap&) ), this, SLOT( showgraphic(QPixmap&) ) ); | ||
260 | |||
218 | connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) ); | 261 | connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) ); |
219 | connect( reader, SIGNAL( OnActionPressed() ), this, SLOT( OnActionPressed() ) ); | 262 | connect( reader, SIGNAL( OnActionPressed() ), this, SLOT( OnActionPressed() ) ); |
220 | connect( reader, SIGNAL( OnWordSelected(const QString&, size_t, const QString&) ), this, SLOT( OnWordSelected(const QString&, size_t, const QString&) ) ); | 263 | connect( reader, SIGNAL( OnWordSelected(const QString&, size_t, const QString&) ), this, SLOT( OnWordSelected(const QString&, size_t, const QString&) ) ); |
221 | editorStack->addWidget( reader, get_unique_id() ); | 264 | editorStack->addWidget( reader, get_unique_id() ); |
222 | 265 | ||
223 | QAction *a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); | 266 | QAction *a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); |
224 | connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); | 267 | connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); |
225 | a->addTo( bar ); | 268 | a->addTo( bar ); |
226 | a->addTo( file ); | 269 | a->addTo( file ); |
227 | 270 | ||
271 | a = new QAction( tr( "Close" ), Resource::loadPixmap( "fileclose" ), QString::null, 0, this, 0 ); | ||
272 | connect( a, SIGNAL( activated() ), this, SLOT( fileClose() ) ); | ||
273 | // a->addTo( bar ); | ||
274 | a->addTo( file ); | ||
275 | |||
228 | /* | 276 | /* |
229 | a = new QAction( tr( "Revert" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); | 277 | a = new QAction( tr( "Revert" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); |
230 | connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) ); | 278 | connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) ); |
231 | a->addTo( file ); | 279 | a->addTo( file ); |
232 | 280 | ||
233 | a = new QAction( tr( "Cut" ), Resource::loadPixmap( "cut" ), QString::null, 0, this, 0 ); | 281 | a = new QAction( tr( "Cut" ), Resource::loadPixmap( "cut" ), QString::null, 0, this, 0 ); |
234 | connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); | 282 | connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); |
235 | a->addTo( editBar ); | 283 | a->addTo( editBar ); |
236 | a->addTo( edit ); | 284 | a->addTo( edit ); |
237 | */ | 285 | */ |
238 | 286 | ||
239 | a = new QAction( tr( "Info" ), QString::null, 0, this, NULL); | 287 | a = new QAction( tr( "Info" ), QString::null, 0, this, NULL); |
240 | connect( a, SIGNAL( activated() ), this, SLOT( showinfo() ) ); | 288 | connect( a, SIGNAL( activated() ), this, SLOT( showinfo() ) ); |
241 | a->addTo( file ); | 289 | a->addTo( file ); |
242 | 290 | ||
243 | QActionGroup* ag = new QActionGroup(this); | 291 | QActionGroup* ag = new QActionGroup(this); |
244 | QPopupMenu *spacemenu = new QPopupMenu(this); | 292 | QPopupMenu *spacemenu = new QPopupMenu(this); |
245 | file->insertItem( tr( "On Action..." ), spacemenu ); | 293 | file->insertItem( tr( "On Action..." ), spacemenu ); |
246 | 294 | ||
247 | m_buttonAction[0] = new QAction( tr( "Open File" ), QString::null, 0, ag, NULL, true ); | 295 | m_buttonAction[0] = new QAction( tr( "Open File" ), QString::null, 0, ag, NULL, true ); |
248 | 296 | ||
249 | m_buttonAction[1] = new QAction( tr( "Autoscroll" ), QString::null, 0, ag, NULL, true ); | 297 | m_buttonAction[1] = new QAction( tr( "Autoscroll" ), QString::null, 0, ag, NULL, true ); |
250 | 298 | ||
251 | m_buttonAction[2] = new QAction( tr( "Mark" ), QString::null, 0, ag, NULL, true ); | 299 | m_buttonAction[2] = new QAction( tr( "Mark" ), QString::null, 0, ag, NULL, true ); |
252 | 300 | ||
301 | m_buttonAction[3] = new QAction( tr( "Fullscreen" ), QString::null, 0, ag, NULL, true ); | ||
302 | |||
253 | ag->addTo(spacemenu); | 303 | ag->addTo(spacemenu); |
254 | 304 | ||
255 | connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( buttonActionSelected(QAction*) ) ); | 305 | connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( buttonActionSelected(QAction*) ) ); |
256 | 306 | ||
307 | file->insertSeparator(); | ||
308 | |||
309 | ag = new QActionGroup(this); | ||
310 | ag->setExclusive(false); | ||
311 | QPopupMenu *encoding = new QPopupMenu(this); | ||
312 | file->insertItem( tr( "Navigation" ), encoding ); | ||
313 | |||
314 | a = m_scrollButton = new QAction( tr( "Scroll" ), Resource::loadPixmap( PICDIR "panel-arrow-down" ), QString::null, 0, ag, 0, true ); | ||
257 | 315 | ||
258 | a = m_scrollButton = new QAction( tr( "Scroll" ), Resource::loadPixmap( "opie-reader/panel-arrow-down" ), QString::null, 0, this, 0, true ); | ||
259 | // connect( a, SIGNAL( activated() ), this, SLOT( autoScroll() ) ); | ||
260 | a->setOn(false); | 316 | a->setOn(false); |
261 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) ); | 317 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) ); |
262 | file->insertSeparator(); | ||
263 | a->addTo( bar ); | 318 | a->addTo( bar ); |
264 | a->addTo( file ); | 319 | |
320 | a = new QAction( tr( "Jump" ), QString::null, 0, ag, NULL); | ||
321 | connect( a, SIGNAL( activated() ), this, SLOT( jump() ) ); | ||
322 | |||
323 | a = new QAction( tr( "Page/Line Scroll" ), QString::null, 0, ag, NULL, true ); | ||
324 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) ); | ||
325 | a->setOn(reader->m_bpagemode); | ||
326 | |||
327 | a = new QAction( tr( "Set Overlap" ), QString::null, 0, ag, NULL); | ||
328 | connect( a, SIGNAL( activated() ), this, SLOT( setoverlap() ) ); | ||
329 | |||
330 | a = new QAction( tr( "Use Cursor" ), QString::null, 0, ag, NULL, true ); | ||
331 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( navkeys(bool) ) ); | ||
332 | a->setOn(reader->m_navkeys); | ||
333 | |||
334 | ag->addTo(encoding); | ||
265 | 335 | ||
266 | /* | 336 | /* |
267 | a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true ); | 337 | a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true ); |
268 | // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); | 338 | // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); |
269 | a->addTo( file ); | 339 | a->addTo( file ); |
270 | 340 | ||
271 | a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true ); | 341 | a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true ); |
272 | // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); | 342 | // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); |
273 | a->addTo( file ); | 343 | a->addTo( file ); |
274 | */ | 344 | */ |
275 | a = new QAction( tr( "Jump" ), QString::null, 0, this, NULL); | ||
276 | connect( a, SIGNAL( activated() ), this, SLOT( jump() ) ); | ||
277 | a->addTo( file ); | ||
278 | |||
279 | a = new QAction( tr( "Page/Line Scroll" ), QString::null, 0, this, NULL, true ); | ||
280 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) ); | ||
281 | a->setOn(reader->m_bpagemode); | ||
282 | a->addTo( file ); | ||
283 | |||
284 | a = new QAction( tr( "Set Overlap" ), QString::null, 0, this, NULL); | ||
285 | connect( a, SIGNAL( activated() ), this, SLOT( setoverlap() ) ); | ||
286 | a->addTo( file ); | ||
287 | 345 | ||
288 | file->insertSeparator(); | 346 | file->insertSeparator(); |
289 | 347 | ||
290 | a = new QAction( tr( "Set Dictionary" ), QString::null, 0, this, NULL); | 348 | a = new QAction( tr( "Set Dictionary" ), QString::null, 0, this, NULL); |
291 | connect( a, SIGNAL( activated() ), this, SLOT( settarget() ) ); | 349 | connect( a, SIGNAL( activated() ), this, SLOT( settarget() ) ); |
292 | a->addTo( file ); | 350 | a->addTo( file ); |
293 | 351 | ||
294 | a = new QAction( tr( "Two/One Touch" ), QString::null, 0, this, NULL, true ); | 352 | a = new QAction( tr( "Two/One Touch" ), QString::null, 0, this, NULL, true ); |
295 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( setTwoTouch(bool) ) ); | 353 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( setTwoTouch(bool) ) ); |
296 | a->setOn(m_twoTouch); | 354 | a->setOn(m_twoTouch); |
297 | a->addTo( file ); | 355 | a->addTo( file ); |
298 | 356 | ||
299 | ag = new QActionGroup(this); | 357 | ag = new QActionGroup(this); |
300 | ag->setExclusive(false); | 358 | ag->setExclusive(false); |
301 | QPopupMenu *encoding = new QPopupMenu(this); | 359 | encoding = new QPopupMenu(this); |
302 | file->insertItem( tr( "Target" ), encoding ); | 360 | file->insertItem( tr( "Target" ), encoding ); |
303 | 361 | ||
304 | a = new QAction( tr( "Annotation" ), QString::null, 0, ag, NULL, true ); | 362 | a = new QAction( tr( "Annotation" ), QString::null, 0, ag, NULL, true ); |
305 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnAnnotation(bool) ) ); | 363 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnAnnotation(bool) ) ); |
306 | a->setOn(m_doAnnotation); | 364 | a->setOn(m_doAnnotation); |
307 | 365 | ||
308 | a = new QAction( tr( "Dictionary" ), QString::null, 0, ag, NULL, true ); | 366 | a = new QAction( tr( "Dictionary" ), QString::null, 0, ag, NULL, true ); |
309 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnDictionary(bool) ) ); | 367 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnDictionary(bool) ) ); |
310 | a->setOn(m_doDictionary); | 368 | a->setOn(m_doDictionary); |
311 | 369 | ||
312 | a = new QAction( tr( "Clipboard" ), QString::null, 0, ag, NULL, true ); | 370 | a = new QAction( tr( "Clipboard" ), QString::null, 0, ag, NULL, true ); |
313 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnClipboard(bool) ) ); | 371 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnClipboard(bool) ) ); |
314 | a->setOn(m_doClipboard); | 372 | a->setOn(m_doClipboard); |
315 | 373 | ||
316 | ag->addTo(encoding); | 374 | ag->addTo(encoding); |
317 | 375 | ||
318 | 376 | ||
319 | /* | 377 | /* |
320 | a = new QAction( tr( "Import" ), QString::null, 0, this, NULL ); | 378 | a = new QAction( tr( "Import" ), QString::null, 0, this, NULL ); |
321 | connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) ); | 379 | connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) ); |
322 | a->addTo( file ); | 380 | a->addTo( file ); |
323 | */ | 381 | */ |
324 | 382 | ||
325 | a = new QAction( tr( "Up" ), Resource::loadPixmap( "up" ), QString::null, 0, this, 0 ); | 383 | a = new QAction( tr( "Up" ), Resource::loadPixmap( "up" ), QString::null, 0, this, 0 ); |
326 | connect( a, SIGNAL( activated() ), this, SLOT( pageup() ) ); | 384 | connect( a, SIGNAL( activated() ), this, SLOT( pageup() ) ); |
327 | a->addTo( editBar ); | 385 | a->addTo( editBar ); |
328 | 386 | ||
329 | a = new QAction( tr( "Down" ), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 ); | 387 | a = new QAction( tr( "Down" ), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 ); |
330 | connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); | 388 | connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); |
331 | a->addTo( editBar ); | 389 | a->addTo( editBar ); |
332 | 390 | ||
333 | /* | 391 | /* |
334 | a = new QAction( tr( "Paste" ), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 ); | 392 | a = new QAction( tr( "Paste" ), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 ); |
335 | connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); | 393 | connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); |
336 | a->addTo( editBar ); | 394 | a->addTo( editBar ); |
337 | a->addTo( edit ); | 395 | a->addTo( edit ); |
338 | */ | 396 | */ |
339 | 397 | ||
340 | // a = new QAction( tr( "Find..." ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); | 398 | // a = new QAction( tr( "Find..." ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); |
341 | a = new QAction( tr( "Find..." ), QString::null, 0, this, NULL); | 399 | a = new QAction( tr( "Find..." ), QString::null, 0, this, NULL); |
342 | connect( a, SIGNAL( activated() ), this, SLOT( editFind() ) ); | 400 | connect( a, SIGNAL( activated() ), this, SLOT( editFind() ) ); |
343 | file->insertSeparator(); | 401 | file->insertSeparator(); |
344 | // a->addTo( bar ); | 402 | // a->addTo( bar ); |
345 | a->addTo( file ); | 403 | a->addTo( file ); |
346 | 404 | ||
347 | 405 | ||
406 | m_fullscreen = false; | ||
407 | a = m_actFullscreen = new QAction( tr( "Fullscreen" ), QString::null, 0, this, NULL, true ); | ||
408 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( setfullscreen(bool) ) ); | ||
409 | a->setOn(m_fullscreen); | ||
410 | a->addTo( file ); | ||
411 | |||
412 | a = new QAction( tr( "Continuous" ), QString::null, 0, ag, NULL, true ); | ||
413 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( setcontinuous(bool) ) ); | ||
414 | a->setOn(reader->m_continuousDocument); | ||
415 | a->addTo( file ); | ||
416 | |||
348 | a = m_bkmkAvail = new QAction( tr( "Annotation" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); | 417 | a = m_bkmkAvail = new QAction( tr( "Annotation" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); |
349 | connect( a, SIGNAL( activated() ), this, SLOT( showAnnotation() ) ); | 418 | connect( a, SIGNAL( activated() ), this, SLOT( showAnnotation() ) ); |
350 | a->addTo( bar ); | 419 | a->addTo( bar ); |
351 | 420 | ||
352 | m_bkmkAvail->setEnabled(false); | 421 | m_bkmkAvail->setEnabled(false); |
353 | 422 | ||
354 | 423 | ||
355 | ag = new QActionGroup(this); | 424 | ag = new QActionGroup(this); |
356 | // ag->setExclusive(false); | 425 | // ag->setExclusive(false); |
357 | encoding = new QPopupMenu(this); | 426 | encoding = new QPopupMenu(this); |
358 | format->insertItem( tr( "Markup" ), encoding ); | 427 | format->insertItem( tr( "Markup" ), encoding ); |
359 | 428 | ||
360 | a = new QAction( tr( "Auto" ), QString::null, 0, ag, NULL, true ); | 429 | a = new QAction( tr( "Auto" ), QString::null, 0, ag, NULL, true ); |
361 | a->setOn(reader->bautofmt); | 430 | a->setOn(reader->bautofmt); |
362 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( autofmt(bool) ) ); | 431 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( autofmt(bool) ) ); |
363 | 432 | ||
364 | a = new QAction( tr( "None" ), QString::null, 0, ag, NULL, true ); | 433 | a = new QAction( tr( "None" ), QString::null, 0, ag, NULL, true ); |
365 | a->setOn(!reader->bautofmt && !(reader->btextfmt || reader->bstriphtml || reader->bpeanut)); | 434 | a->setOn(!reader->bautofmt && !(reader->btextfmt || reader->bstriphtml || reader->bpeanut)); |
366 | // connect( a, SIGNAL( toggled(bool) ), this, SLOT( textfmt(bool) ) ); | 435 | // connect( a, SIGNAL( toggled(bool) ), this, SLOT( textfmt(bool) ) ); |
367 | 436 | ||
368 | a = new QAction( tr( "Text" ), QString::null, 0, ag, NULL, true ); | 437 | a = new QAction( tr( "Text" ), QString::null, 0, ag, NULL, true ); |
369 | a->setOn(reader->btextfmt); | 438 | a->setOn(reader->btextfmt); |
370 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( textfmt(bool) ) ); | 439 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( textfmt(bool) ) ); |
371 | 440 | ||
372 | a = new QAction( tr( "HTML" ), QString::null, 0, ag, NULL, true ); | 441 | a = new QAction( tr( "HTML" ), QString::null, 0, ag, NULL, true ); |
373 | a->setOn(reader->bstriphtml); | 442 | a->setOn(reader->bstriphtml); |
374 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( striphtml(bool) ) ); | 443 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( striphtml(bool) ) ); |
375 | 444 | ||
376 | a = new QAction( tr( "Peanut/PML" ), QString::null, 0, ag, NULL, true ); | 445 | a = new QAction( tr( "Peanut/PML" ), QString::null, 0, ag, NULL, true ); |
377 | a->setOn(reader->bpeanut); | 446 | a->setOn(reader->bpeanut); |
378 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( peanut(bool) ) ); | 447 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( peanut(bool) ) ); |
379 | 448 | ||
380 | ag->addTo(encoding); | 449 | ag->addTo(encoding); |
381 | 450 | ||
382 | 451 | ||
383 | 452 | ||
384 | ag = new QActionGroup(this); | 453 | ag = new QActionGroup(this); |
385 | ag->setExclusive(false); | 454 | ag->setExclusive(false); |
386 | encoding = new QPopupMenu(this); | 455 | encoding = new QPopupMenu(this); |
387 | format->insertItem( tr( "Layout" ), encoding ); | 456 | format->insertItem( tr( "Layout" ), encoding ); |
388 | 457 | ||
389 | a = new QAction( tr( "Strip CR" ), QString::null, 0, ag, NULL, true ); | 458 | a = new QAction( tr( "Strip CR" ), QString::null, 0, ag, NULL, true ); |
390 | a->setOn(reader->bstripcr); | 459 | a->setOn(reader->bstripcr); |
391 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( stripcr(bool) ) ); | 460 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( stripcr(bool) ) ); |
392 | 461 | ||
393 | a = new QAction( tr( "Dehyphen" ), QString::null, 0, ag, NULL, true ); | 462 | a = new QAction( tr( "Dehyphen" ), QString::null, 0, ag, NULL, true ); |
394 | a->setOn(reader->bdehyphen); | 463 | a->setOn(reader->bdehyphen); |
395 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( dehyphen(bool) ) ); | 464 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( dehyphen(bool) ) ); |
396 | // a->addTo( format ); | 465 | // a->addTo( format ); |
397 | 466 | ||
467 | a = new QAction( tr( "Single Space" ), QString::null, 0, ag, NULL, true ); | ||
468 | a->setOn(reader->bonespace); | ||
469 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( onespace(bool) ) ); | ||
470 | |||
398 | a = new QAction( tr( "Unindent" ), QString::null, 0, ag, NULL, true ); | 471 | a = new QAction( tr( "Unindent" ), QString::null, 0, ag, NULL, true ); |
399 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( unindent(bool) ) ); | 472 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( unindent(bool) ) ); |
400 | a->setOn(reader->bunindent); | 473 | a->setOn(reader->bunindent); |
401 | // a->addTo( format ); | 474 | // a->addTo( format ); |
402 | 475 | ||
403 | a = new QAction( tr( "Re-paragraph" ), QString::null, 0, ag, NULL, true ); | 476 | a = new QAction( tr( "Re-paragraph" ), QString::null, 0, ag, NULL, true ); |
404 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( repara(bool) ) ); | 477 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( repara(bool) ) ); |
405 | a->setOn(reader->brepara); | 478 | a->setOn(reader->brepara); |
406 | // a->addTo( format ); | 479 | // a->addTo( format ); |
407 | 480 | ||
408 | a = new QAction( tr( "Double Space" ), QString::null, 0, ag, NULL, true ); | 481 | a = new QAction( tr( "Double Space" ), QString::null, 0, ag, NULL, true ); |
409 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( dblspce(bool) ) ); | 482 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( dblspce(bool) ) ); |
410 | a->setOn(reader->bdblspce); | 483 | a->setOn(reader->bdblspce); |
411 | // a->addTo( format ); | 484 | // a->addTo( format ); |
412 | 485 | ||
413 | a = new QAction( tr( "Indent+" ), QString::null, 0, ag, NULL ); | 486 | a = new QAction( tr( "Indent+" ), QString::null, 0, ag, NULL ); |
414 | connect( a, SIGNAL( activated() ), this, SLOT( indentplus() ) ); | 487 | connect( a, SIGNAL( activated() ), this, SLOT( indentplus() ) ); |
415 | // a->addTo( format ); | 488 | // a->addTo( format ); |
416 | 489 | ||
417 | a = new QAction( tr( "Indent-" ), QString::null, 0, ag, NULL ); | 490 | a = new QAction( tr( "Indent-" ), QString::null, 0, ag, NULL ); |
418 | connect( a, SIGNAL( activated() ), this, SLOT( indentminus() ) ); | 491 | connect( a, SIGNAL( activated() ), this, SLOT( indentminus() ) ); |
419 | 492 | #ifdef REPALM | |
493 | a = new QAction( tr( "Repalm" ), QString::null, 0, ag, NULL, true ); | ||
494 | a->setOn(reader->brepalm); | ||
495 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( repalm(bool) ) ); | ||
496 | #endif | ||
420 | a = new QAction( tr( "Remap" ), QString::null, 0, ag, NULL, true ); | 497 | a = new QAction( tr( "Remap" ), QString::null, 0, ag, NULL, true ); |
421 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( remap(bool) ) ); | 498 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( remap(bool) ) ); |
422 | a->setOn(reader->bremap); | 499 | a->setOn(reader->bremap); |
423 | 500 | ||
424 | a = new QAction( tr( "Embolden" ), QString::null, 0, ag, NULL, true ); | 501 | a = new QAction( tr( "Embolden" ), QString::null, 0, ag, NULL, true ); |
425 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( embolden(bool) ) ); | 502 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( embolden(bool) ) ); |
426 | a->setOn(reader->bmakebold); | 503 | a->setOn(reader->bmakebold); |
427 | 504 | ||
428 | ag->addTo(encoding); | 505 | ag->addTo(encoding); |
429 | 506 | ||
430 | // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true ); | 507 | // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true ); |
431 | // a = new QAction( tr( "Zoom" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 ); | 508 | // a = new QAction( tr( "Zoom" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 ); |
432 | a = new QAction( tr( "Zoom" ), QString::null, 0, this); | ||
433 | connect( a, SIGNAL( activated() ), this, SLOT( TBDzoom() ) ); | ||
434 | format->insertSeparator(); | 509 | format->insertSeparator(); |
510 | a = new QAction( tr( "Zoom In" ), QString::null, 0, this); | ||
511 | connect( a, SIGNAL( activated() ), this, SLOT( zoomin() ) ); | ||
512 | a->addTo( format ); | ||
513 | a = new QAction( tr( "Zoom Out" ), QString::null, 0, this); | ||
514 | connect( a, SIGNAL( activated() ), this, SLOT( zoomout() ) ); | ||
435 | a->addTo( format ); | 515 | a->addTo( format ); |
436 | // a->addTo( editBar ); | 516 | // a->addTo( editBar ); |
517 | format->insertSeparator(); | ||
437 | 518 | ||
438 | 519 | ||
439 | a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true ); | 520 | a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true ); |
440 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) ); | 521 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) ); |
441 | a->setOn(reader->m_bMonoSpaced); | 522 | a->setOn(reader->m_bMonoSpaced); |
442 | format->insertSeparator(); | ||
443 | a->addTo( format ); | 523 | a->addTo( format ); |
444 | 524 | ||
445 | a = new QAction( tr( "Set width" ), QString::null, 0, this, NULL); | 525 | a = new QAction( tr( "Set width" ), QString::null, 0, this, NULL); |
446 | connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) ); | 526 | connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) ); |
447 | a->addTo( format ); | 527 | a->addTo( format ); |
448 | 528 | ||
449 | encoding = new QPopupMenu(this); | 529 | encoding = new QPopupMenu(this); |
450 | // format->insertSeparator(); | 530 | // format->insertSeparator(); |
451 | format->insertItem( tr( "Encoding" ), encoding ); | 531 | format->insertItem( tr( "Encoding" ), encoding ); |
452 | 532 | ||
453 | ag = new QActionGroup(this); | 533 | ag = new QActionGroup(this); |
454 | 534 | ||
455 | m_EncodingAction[0] = new QAction( tr( "Ascii" ), QString::null, 0, ag, NULL, true ); | 535 | m_EncodingAction[0] = new QAction( tr( "Ascii" ), QString::null, 0, ag, NULL, true ); |
456 | 536 | ||
457 | m_EncodingAction[1] = new QAction( tr( "UTF-8" ), QString::null, 0, ag, NULL, true ); | 537 | m_EncodingAction[1] = new QAction( tr( "UTF-8" ), QString::null, 0, ag, NULL, true ); |
458 | 538 | ||
459 | m_EncodingAction[2] = new QAction( tr( "UCS-2(BE)" ), QString::null, 0, ag, NULL, true ); | 539 | m_EncodingAction[2] = new QAction( tr( "UCS-2(BE)" ), QString::null, 0, ag, NULL, true ); |
460 | 540 | ||
461 | m_EncodingAction[3] = new QAction( tr( "USC-2(LE)" ), QString::null, 0, ag, NULL, true ); | 541 | m_EncodingAction[3] = new QAction( tr( "USC-2(LE)" ), QString::null, 0, ag, NULL, true ); |
462 | 542 | ||
463 | m_EncodingAction[4] = new QAction( tr( "Palm" ), QString::null, 0, ag, NULL, true ); | 543 | m_EncodingAction[4] = new QAction( tr( "Palm" ), QString::null, 0, ag, NULL, true ); |
464 | 544 | ||
465 | m_EncodingAction[5] = new QAction( tr( "Windows(1252)" ), QString::null, 0, ag, NULL, true ); | 545 | m_EncodingAction[5] = new QAction( tr( "Windows(1252)" ), QString::null, 0, ag, NULL, true ); |
466 | 546 | ||
467 | ag->addTo(encoding); | 547 | ag->addTo(encoding); |
468 | 548 | ||
469 | connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( encodingSelected(QAction*) ) ); | 549 | connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( encodingSelected(QAction*) ) ); |
470 | 550 | ||
471 | a = new QAction( tr( "Set Font" ), QString::null, 0, this); | 551 | a = new QAction( tr( "Set Font" ), QString::null, 0, this); |
472 | connect( a, SIGNAL( activated() ), this, SLOT( setfont() ) ); | 552 | connect( a, SIGNAL( activated() ), this, SLOT( setfont() ) ); |
473 | format->insertSeparator(); | 553 | format->insertSeparator(); |
474 | a->addTo( format ); | 554 | a->addTo( format ); |
475 | 555 | ||
476 | QPopupMenu *marks = new QPopupMenu( this ); | 556 | QPopupMenu *marks = new QPopupMenu( this ); |
477 | 557 | ||
478 | a = new QAction( tr( "Mark" ), QString::null, 0, this, NULL); | 558 | a = new QAction( tr( "Mark" ), QString::null, 0, this, NULL); |
479 | connect( a, SIGNAL( activated() ), this, SLOT( addbkmk() ) ); | 559 | connect( a, SIGNAL( activated() ), this, SLOT( addbkmk() ) ); |
480 | a->addTo( marks ); | 560 | a->addTo( marks ); |
481 | 561 | ||
482 | a = new QAction( tr( "Annotate" ), QString::null, 0, this, NULL); | 562 | a = new QAction( tr( "Annotate" ), QString::null, 0, this, NULL); |
483 | connect( a, SIGNAL( activated() ), this, SLOT( addanno() ) ); | 563 | connect( a, SIGNAL( activated() ), this, SLOT( addanno() ) ); |
484 | a->addTo( marks ); | 564 | a->addTo( marks ); |
485 | 565 | ||
486 | a = new QAction( tr( "Goto" ), QString::null, 0, this, NULL, false ); | 566 | a = new QAction( tr( "Goto" ), QString::null, 0, this, NULL, false ); |
487 | connect( a, SIGNAL( activated() ), this, SLOT( do_gotomark() ) ); | 567 | connect( a, SIGNAL( activated() ), this, SLOT( do_gotomark() ) ); |
488 | a->addTo( marks ); | 568 | a->addTo( marks ); |
489 | 569 | ||
490 | a = new QAction( tr( "Delete" ), QString::null, 0, this, NULL); | 570 | a = new QAction( tr( "Delete" ), QString::null, 0, this, NULL); |
491 | connect( a, SIGNAL( activated() ), this, SLOT( do_delmark() ) ); | 571 | connect( a, SIGNAL( activated() ), this, SLOT( do_delmark() ) ); |
492 | a->addTo( marks ); | 572 | a->addTo( marks ); |
493 | 573 | ||
494 | a = new QAction( tr( "Autogen" ), QString::null, 0, this, NULL, false ); | 574 | a = new QAction( tr( "Autogen" ), QString::null, 0, this, NULL, false ); |
495 | connect( a, SIGNAL( activated() ), this, SLOT( do_autogen() ) ); | 575 | connect( a, SIGNAL( activated() ), this, SLOT( do_autogen() ) ); |
496 | marks->insertSeparator(); | 576 | marks->insertSeparator(); |
497 | a->addTo( marks ); | 577 | a->addTo( marks ); |
498 | 578 | ||
499 | a = new QAction( tr( "Clear" ), QString::null, 0, this, NULL); | 579 | a = new QAction( tr( "Clear" ), QString::null, 0, this, NULL); |
500 | connect( a, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) ); | 580 | connect( a, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) ); |
501 | a->addTo( marks ); | 581 | a->addTo( marks ); |
502 | 582 | ||
503 | a = new QAction( tr( "Save" ), QString::null, 0, this, NULL ); | 583 | a = new QAction( tr( "Save" ), QString::null, 0, this, NULL ); |
504 | connect( a, SIGNAL( activated() ), this, SLOT( savebkmks() ) ); | 584 | connect( a, SIGNAL( activated() ), this, SLOT( savebkmks() ) ); |
505 | a->addTo( marks ); | 585 | a->addTo( marks ); |
506 | 586 | ||
507 | a = new QAction( tr( "Tidy" ), QString::null, 0, this, NULL); | 587 | a = new QAction( tr( "Tidy" ), QString::null, 0, this, NULL); |
508 | connect( a, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) ); | 588 | connect( a, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) ); |
509 | marks->insertSeparator(); | 589 | marks->insertSeparator(); |
510 | a->addTo( marks ); | 590 | a->addTo( marks ); |
511 | 591 | ||
512 | a = new QAction( tr( "Start Block" ), QString::null, 0, this, NULL); | 592 | a = new QAction( tr( "Start Block" ), QString::null, 0, this, NULL); |
513 | connect( a, SIGNAL( activated() ), this, SLOT( editMark() ) ); | 593 | connect( a, SIGNAL( activated() ), this, SLOT( editMark() ) ); |
514 | marks->insertSeparator(); | 594 | marks->insertSeparator(); |
515 | a->addTo( marks ); | 595 | a->addTo( marks ); |
516 | 596 | ||
517 | a = new QAction( tr( "Copy Block" ), QString::null, 0, this, NULL); | 597 | a = new QAction( tr( "Copy Block" ), QString::null, 0, this, NULL); |
518 | connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) ); | 598 | connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) ); |
519 | a->addTo( marks ); | 599 | a->addTo( marks ); |
520 | 600 | ||
521 | 601 | ||
522 | mb->insertItem( tr( "File" ), file ); | 602 | mb->insertItem( tr( "File" ), file ); |
523 | // mb->insertItem( tr( "Edit" ), edit ); | 603 | // mb->insertItem( tr( "Edit" ), edit ); |
524 | mb->insertItem( tr( "Format" ), format ); | 604 | mb->insertItem( tr( "Format" ), format ); |
525 | mb->insertItem( tr( "Marks" ), marks ); | 605 | mb->insertItem( tr( "Marks" ), marks ); |
526 | 606 | ||
527 | searchBar = new QFloatBar( "Search", this, QMainWindow::Top, TRUE ); | 607 | searchBar = new QFloatBar( "Search", this, QMainWindow::Top, TRUE ); |
528 | 608 | ||
529 | searchBar->setHorizontalStretchable( TRUE ); | 609 | searchBar->setHorizontalStretchable( TRUE ); |
530 | 610 | ||
531 | connect(searchBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); | 611 | connect(searchBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); |
532 | 612 | ||
533 | searchEdit = new QLineEdit( searchBar, "searchEdit" ); | 613 | searchEdit = new QLineEdit( searchBar, "searchEdit" ); |
534 | // QFont f("unifont", 16 /*, QFont::Bold*/); | 614 | // QFont f("unifont", 16 /*, QFont::Bold*/); |
535 | // searchEdit->setFont( f ); | 615 | // searchEdit->setFont( f ); |
536 | searchBar->setStretchableWidget( searchEdit ); | 616 | searchBar->setStretchableWidget( searchEdit ); |
537 | 617 | ||
538 | #ifdef __ISEARCH | 618 | #ifdef __ISEARCH |
539 | connect( searchEdit, SIGNAL( textChanged( const QString & ) ), | 619 | connect( searchEdit, SIGNAL( textChanged( const QString & ) ), |
540 | this, SLOT( search( const QString& ) ) ); | 620 | this, SLOT( search( const QString& ) ) ); |
541 | #else | 621 | #else |
542 | connect( searchEdit, SIGNAL( returnPressed( ) ), | 622 | connect( searchEdit, SIGNAL( returnPressed( ) ), |
543 | this, SLOT( search( ) ) ); | 623 | this, SLOT( search( ) ) ); |
544 | #endif | 624 | #endif |
545 | a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 ); | 625 | a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 ); |
546 | connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) ); | 626 | connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) ); |
547 | a->addTo( searchBar ); | 627 | a->addTo( searchBar ); |
548 | 628 | ||
549 | a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); | 629 | a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); |
550 | connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) ); | 630 | connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) ); |
551 | a->addTo( searchBar ); | 631 | a->addTo( searchBar ); |
552 | 632 | ||
553 | searchBar->hide(); | 633 | searchBar->hide(); |
554 | 634 | ||
555 | regBar = new QFloatBar( "Autogen", this, QMainWindow::Top, TRUE ); | 635 | regBar = new QFloatBar( "Autogen", this, QMainWindow::Top, TRUE ); |
556 | connect(regBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); | 636 | connect(regBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); |
557 | 637 | ||
558 | regBar->setHorizontalStretchable( TRUE ); | 638 | regBar->setHorizontalStretchable( TRUE ); |
559 | 639 | ||
560 | regEdit = new QLineEdit( regBar, "regEdit" ); | 640 | regEdit = new QLineEdit( regBar, "regEdit" ); |
561 | // regEdit->setFont( f ); | 641 | // regEdit->setFont( f ); |
562 | 642 | ||
563 | regBar->setStretchableWidget( regEdit ); | 643 | regBar->setStretchableWidget( regEdit ); |
564 | 644 | ||
565 | connect( regEdit, SIGNAL( returnPressed( ) ), | 645 | connect( regEdit, SIGNAL( returnPressed( ) ), |
566 | this, SLOT( do_regaction() ) ); | 646 | this, SLOT( do_regaction() ) ); |
567 | 647 | ||
568 | a = new QAction( tr( "Do Reg" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); | 648 | a = new QAction( tr( "Do Reg" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); |
569 | connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) ); | 649 | connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) ); |
570 | a->addTo( regBar ); | 650 | a->addTo( regBar ); |
571 | 651 | ||
572 | a = new QAction( tr( "Close Edit" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); | 652 | a = new QAction( tr( "Close Edit" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); |
573 | connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) ); | 653 | connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) ); |
574 | a->addTo( regBar ); | 654 | a->addTo( regBar ); |
575 | 655 | ||
576 | regBar->hide(); | 656 | regBar->hide(); |
577 | 657 | ||
578 | m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE ); | 658 | m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE ); |
579 | 659 | ||
580 | m_fontBar->setHorizontalStretchable( TRUE ); | 660 | m_fontBar->setHorizontalStretchable( TRUE ); |
581 | 661 | ||
662 | qDebug("Font selector"); | ||
582 | m_fontSelector = new QComboBox(false, m_fontBar); | 663 | m_fontSelector = new QComboBox(false, m_fontBar); |
583 | m_fontBar->setStretchableWidget( m_fontSelector ); | 664 | m_fontBar->setStretchableWidget( m_fontSelector ); |
584 | { | 665 | { |
585 | FontDatabase f; | 666 | FontDatabase f; |
586 | QStringList flist = f.families(); | 667 | QStringList flist = f.families(); |
587 | m_fontSelector->insertStringList(flist); | 668 | m_fontSelector->insertStringList(flist); |
588 | 669 | ||
589 | bool realfont = false; | 670 | bool realfont = false; |
590 | for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++) | 671 | for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++) |
591 | { | 672 | { |
592 | if (reader->m_fontname == *nm) | 673 | if (reader->m_fontname == *nm) |
593 | { | 674 | { |
594 | realfont = true; | 675 | realfont = true; |
595 | break; | 676 | } |
596 | } | 677 | if (*nm == "courier") reader->m_fontControl.hasCourier(true); |
597 | } | 678 | } |
598 | if (!realfont) reader->m_fontname = flist[0]; | 679 | if (!realfont) reader->m_fontname = flist[0]; |
599 | } // delete the FontDatabase!!! | 680 | } // delete the FontDatabase!!! |
600 | 681 | ||
601 | connect( m_fontSelector, SIGNAL( activated(const QString& ) ), | 682 | connect( m_fontSelector, SIGNAL( activated(const QString& ) ), |
602 | this, SLOT( do_setfont(const QString&) ) ); | 683 | this, SLOT( do_setfont(const QString&) ) ); |
603 | 684 | ||
604 | m_fontBar->hide(); | 685 | m_fontBar->hide(); |
605 | m_fontVisible = false; | 686 | m_fontVisible = false; |
606 | 687 | ||
607 | connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ), | 688 | connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ), |
608 | this, SLOT( msgHandler(const QCString&, const QByteArray&) ) ); | 689 | this, SLOT( msgHandler(const QCString&, const QByteArray&) ) ); |
609 | |||
610 | 690 | ||
691 | qDebug("Initing"); | ||
611 | reader->init(); | 692 | reader->init(); |
612 | if (!reader->m_lastfile.isEmpty()) | 693 | qDebug("Inited"); |
613 | { | ||
614 | openFile( reader->m_lastfile ); | ||
615 | doc = new DocLnk(reader->m_lastfile); | ||
616 | } | ||
617 | m_EncodingAction[reader->m_encd]->setOn(true); | 694 | m_EncodingAction[reader->m_encd]->setOn(true); |
618 | m_buttonAction[m_spaceTarget]->setOn(true); | 695 | m_buttonAction[m_spaceTarget]->setOn(true); |
696 | qDebug("fonting"); | ||
619 | do_setfont(reader->m_fontname); | 697 | do_setfont(reader->m_fontname); |
620 | } | 698 | if (!reader->m_lastfile.isEmpty()) |
699 | { | ||
700 | qDebug("doclnk"); | ||
701 | //doc = new DocLnk(reader->m_lastfile); | ||
702 | qDebug("doclnk done"); | ||
703 | if (pOpenlist != NULL) | ||
704 | { | ||
705 | |||
706 | /* | ||
707 | int ind = 0; | ||
708 | Bkmk* p = (*pOpenlist)[ind]; | ||
709 | while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile) | ||
710 | { | ||
711 | p = (*pOpenlist)[++ind]; | ||
712 | } | ||
713 | */ | ||
714 | Bkmk* p = NULL; | ||
715 | for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++) | ||
716 | { | ||
717 | p = iter.pContent(); | ||
718 | if (toQString(CFiledata(p->anno()).name()) == reader->m_lastfile) | ||
719 | { | ||
720 | break; | ||
721 | } | ||
722 | qDebug("Item:%s", (const char*)toQString(CFiledata(p->anno()).name())); | ||
723 | p = NULL; | ||
724 | } | ||
725 | if (p != NULL) | ||
726 | { | ||
727 | qDebug("openfrombkmk"); | ||
728 | openfrombkmk(p); | ||
729 | } | ||
730 | else | ||
731 | { | ||
732 | qDebug("openfile"); | ||
733 | openFile( reader->m_lastfile ); | ||
734 | } | ||
735 | } | ||
736 | else | ||
737 | { | ||
738 | qDebug("Openfile 2"); | ||
739 | if (!reader->m_lastfile.isNull()) | ||
740 | openFile( reader->m_lastfile ); | ||
741 | } | ||
742 | } | ||
743 | qApp->processEvents(); | ||
744 | reader->bDoUpdates = true; | ||
745 | reader->update(); | ||
746 | qDebug("finished update"); | ||
747 | } | ||
748 | |||
749 | void QTReaderApp::suspend() { reader->suspend(); } | ||
621 | 750 | ||
622 | void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data) | 751 | void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data) |
623 | { | 752 | { |
624 | QString msg = QString::fromUtf8(_msg); | 753 | QString msg = QString::fromUtf8(_msg); |
625 | 754 | ||
626 | // qDebug("Received:%s", (const char*)msg); | 755 | // qDebug("Received:%s", (const char*)msg); |
627 | 756 | ||
628 | QDataStream stream( _data, IO_ReadOnly ); | 757 | QDataStream stream( _data, IO_ReadOnly ); |
629 | if ( msg == "info(QString)" ) | 758 | if ( msg == "info(QString)" ) |
630 | { | 759 | { |
631 | QString info; | 760 | QString info; |
632 | stream >> info; | 761 | stream >> info; |
633 | QMessageBox::information(this, "OpieReader", info); | 762 | QMessageBox::information(this, PROGNAME, info); |
634 | } | 763 | } |
635 | else if ( msg == "warn(QString)" ) | 764 | else if ( msg == "warn(QString)" ) |
636 | { | 765 | { |
637 | QString info; | 766 | QString info; |
638 | stream >> info; | 767 | stream >> info; |
639 | QMessageBox::warning(this, "OpieReader", info); | 768 | QMessageBox::warning(this, PROGNAME, info); |
640 | } | 769 | } |
641 | 770 | ||
642 | 771 | ||
643 | else if ( msg == "exit()" ) | 772 | else if ( msg == "exit()" ) |
644 | { | 773 | { |
645 | m_dontSave = true; | 774 | m_dontSave = true; |
646 | close(); | 775 | close(); |
647 | } | 776 | } |
648 | else if ( msg == "pageDown()" ) | 777 | else if ( msg == "pageDown()" ) |
649 | { | 778 | { |
650 | reader->dopagedn(); | 779 | reader->dopagedn(); |
651 | } | 780 | } |
652 | else if ( msg == "pageUp()" ) | 781 | else if ( msg == "pageUp()" ) |
653 | { | 782 | { |
654 | reader->dopageup(); | 783 | reader->dopageup(); |
655 | } | 784 | } |
656 | else if ( msg == "lineDown()" ) | 785 | else if ( msg == "lineDown()" ) |
657 | { | 786 | { |
658 | reader->lineDown(); | 787 | reader->lineDown(); |
659 | } | 788 | } |
660 | else if ( msg == "lineUp()" ) | 789 | else if ( msg == "lineUp()" ) |
661 | { | 790 | { |
662 | reader->lineUp(); | 791 | reader->lineUp(); |
663 | } | 792 | } |
664 | else if ( msg == "showText()" ) | 793 | else if ( msg == "showText()" ) |
665 | { | 794 | { |
666 | showEditTools(); | 795 | showEditTools(); |
667 | } | 796 | } |
668 | else if ( msg == "File/Open(QString)" ) | 797 | else if ( msg == "File/Open(QString)" ) |
669 | { | 798 | { |
670 | QString info; | 799 | QString info; |
671 | stream >> info; | 800 | stream >> info; |
672 | openFile( info ); | 801 | openFile( info ); |
673 | } | 802 | } |
674 | else if ( msg == "File/Info()" ) | 803 | else if ( msg == "File/Info()" ) |
675 | { | 804 | { |
676 | showinfo(); | 805 | showinfo(); |
677 | } | 806 | } |
678 | else if ( msg == "File/Start Block()" ) | 807 | else if ( msg == "File/Start Block()" ) |
679 | { | 808 | { |
680 | editMark(); | 809 | editMark(); |
681 | } | 810 | } |
682 | else if ( msg == "File/Copy Block()" ) | 811 | else if ( msg == "File/Copy Block()" ) |
683 | { | 812 | { |
684 | editCopy(); | 813 | editCopy(); |
685 | } | 814 | } |
686 | else if ( msg == "File/Scroll(int)" ) | 815 | else if ( msg == "File/Scroll(int)" ) |
687 | { | 816 | { |
688 | int info; | 817 | int info; |
689 | stream >> info; | 818 | stream >> info; |
690 | autoScroll(info); | 819 | autoScroll(info); |
691 | } | 820 | } |
692 | else if ( msg == "File/Jump(int)" ) | 821 | else if ( msg == "File/Jump(int)" ) |
693 | { | 822 | { |
694 | int info; | 823 | int info; |
695 | stream >> info; | 824 | stream >> info; |
696 | reader->locate(info); | 825 | reader->locate(info); |
697 | } | 826 | } |
698 | else if ( msg == "File/Page/Line Scroll(int)" ) | 827 | else if ( msg == "File/Page/Line Scroll(int)" ) |
699 | { | 828 | { |
700 | int info; | 829 | int info; |
701 | stream >> info; | 830 | stream >> info; |
702 | pagemode(info); | 831 | pagemode(info); |
703 | } | 832 | } |
704 | else if ( msg == "File/Set Overlap(int)" ) | 833 | else if ( msg == "File/Set Overlap(int)" ) |
705 | { | 834 | { |
706 | int info; | 835 | int info; |
707 | stream >> info; | 836 | stream >> info; |
708 | reader->m_overlap = info; | 837 | reader->m_overlap = info; |
709 | } | 838 | } |
710 | else if ( msg == "File/Set Dictionary(QString)" ) | 839 | else if ( msg == "File/Set Dictionary(QString)" ) |
711 | { | 840 | { |
712 | QString info; | 841 | QString info; |
713 | stream >> info; | 842 | stream >> info; |
714 | do_settarget(info); | 843 | do_settarget(info); |
715 | } | 844 | } |
716 | else if ( msg == "File/Two/One Touch(int)" ) | 845 | else if ( msg == "File/Two/One Touch(int)" ) |
717 | { | 846 | { |
718 | int info; | 847 | int info; |
719 | stream >> info; | 848 | stream >> info; |
720 | setTwoTouch(info); | 849 | setTwoTouch(info); |
721 | } | 850 | } |
722 | else if ( msg == "Target/Annotation(int)" ) | 851 | else if ( msg == "Target/Annotation(int)" ) |
723 | { | 852 | { |
724 | int info; | 853 | int info; |
725 | stream >> info; | 854 | stream >> info; |
726 | OnAnnotation(info); | 855 | OnAnnotation(info); |
727 | } | 856 | } |
728 | else if ( msg == "Target/Dictionary(int)" ) | 857 | else if ( msg == "Target/Dictionary(int)" ) |
729 | { | 858 | { |
730 | int info; | 859 | int info; |
731 | stream >> info; | 860 | stream >> info; |
732 | OnDictionary(info); | 861 | OnDictionary(info); |
733 | } | 862 | } |
734 | else if ( msg == "Target/Clipboard(int)" ) | 863 | else if ( msg == "Target/Clipboard(int)" ) |
735 | { | 864 | { |
736 | int info; | 865 | int info; |
737 | stream >> info; | 866 | stream >> info; |
738 | OnClipboard(info); | 867 | OnClipboard(info); |
739 | } | 868 | } |
740 | else if ( msg == "File/Find(QString)" ) | 869 | else if ( msg == "File/Find(QString)" ) |
741 | { | 870 | { |
742 | QString info; | 871 | QString info; |
743 | stream >> info; | 872 | stream >> info; |
744 | QRegExp arg(info); | 873 | QRegExp arg(info); |
745 | size_t pos = reader->pagelocate(); | 874 | size_t pos = reader->pagelocate(); |
746 | size_t start = pos; | 875 | size_t start = pos; |
747 | CDrawBuffer test(&(reader->m_fontControl)); | 876 | CDrawBuffer test(&(reader->m_fontControl)); |
748 | reader->buffdoc.getline(&test,reader->width()); | 877 | reader->buffdoc.getline(&test,reader->width()); |
749 | while (arg.match(toQString(test.data())) == -1) | 878 | while (arg.match(toQString(test.data())) == -1) |
750 | { | 879 | { |
751 | pos = reader->locate(); | 880 | pos = reader->locate(); |
752 | if (!reader->buffdoc.getline(&test,reader->width())) | 881 | if (!reader->buffdoc.getline(&test,reader->width())) |
753 | { | 882 | { |
754 | QMessageBox::information(this, "OpieReader", QString("Can't find\n")+info); | 883 | QMessageBox::information(this, PROGNAME, QString("Can't find\n")+info); |
755 | pos = start; | 884 | pos = start; |
756 | break; | 885 | break; |
757 | } | 886 | } |
758 | } | 887 | } |
759 | reader->locate(pos); | 888 | reader->locate(pos); |
760 | } | 889 | } |
761 | else if ( msg == "Layout/Strip CR(int)" ) | 890 | else if ( msg == "Layout/Strip CR(int)" ) |
762 | { | 891 | { |
763 | int info; | 892 | int info; |
764 | stream >> info; | 893 | stream >> info; |
765 | stripcr(info); | 894 | stripcr(info); |
895 | } | ||
896 | else if ( msg == "Layout/Single Space" ) | ||
897 | { | ||
898 | int info; | ||
899 | stream >> info; | ||
900 | onespace(info); | ||
901 | } | ||
902 | #ifdef REPALM | ||
903 | else if ( msg == "Layout/Repalm(int)" ) | ||
904 | { | ||
905 | int info; | ||
906 | stream >> info; | ||
907 | repalm(info); | ||
766 | } | 908 | } |
909 | #endif | ||
767 | else if ( msg == "Markup/Auto(int)" ) | 910 | else if ( msg == "Markup/Auto(int)" ) |
768 | { | 911 | { |
769 | int info; | 912 | int info; |
770 | stream >> info; | 913 | stream >> info; |
771 | autofmt(info); | 914 | autofmt(info); |
772 | } | 915 | } |
773 | else if ( msg == "Markup/Text(int)" ) | 916 | else if ( msg == "Markup/Text(int)" ) |
774 | { | 917 | { |
775 | int info; | 918 | int info; |
776 | stream >> info; | 919 | stream >> info; |
777 | textfmt(info); | 920 | textfmt(info); |
778 | } | 921 | } |
779 | else if ( msg == "Markup/HTML(int)" ) | 922 | else if ( msg == "Markup/HTML(int)" ) |
780 | { | 923 | { |
781 | int info; | 924 | int info; |
782 | stream >> info; | 925 | stream >> info; |
783 | striphtml(info); | 926 | striphtml(info); |
784 | } | 927 | } |
785 | else if ( msg == "Markup/Peanut(int)" ) | 928 | else if ( msg == "Markup/Peanut(int)" ) |
786 | { | 929 | { |
787 | int info; | 930 | int info; |
788 | stream >> info; | 931 | stream >> info; |
789 | peanut(info); | 932 | peanut(info); |
790 | } | 933 | } |
791 | else if ( msg == "Layout/Dehyphen(int)" ) | 934 | else if ( msg == "Layout/Dehyphen(int)" ) |
792 | { | 935 | { |
793 | int info; | 936 | int info; |
794 | stream >> info; | 937 | stream >> info; |
795 | dehyphen(info); | 938 | dehyphen(info); |
796 | } | 939 | } |
797 | else if ( msg == "Layout/Unindent(int)" ) | 940 | else if ( msg == "Layout/Unindent(int)" ) |
798 | { | 941 | { |
799 | int info; | 942 | int info; |
800 | stream >> info; | 943 | stream >> info; |
801 | unindent(info); | 944 | unindent(info); |
802 | } | 945 | } |
803 | else if ( msg == "Layout/Re-paragraph(int)" ) | 946 | else if ( msg == "Layout/Re-paragraph(int)" ) |
804 | { | 947 | { |
805 | int info; | 948 | int info; |
806 | stream >> info; | 949 | stream >> info; |
807 | repara(info); | 950 | repara(info); |
808 | } | 951 | } |
809 | else if ( msg == "Layout/Double Space(int)" ) | 952 | else if ( msg == "Layout/Double Space(int)" ) |
810 | { | 953 | { |
811 | int info; | 954 | int info; |
812 | stream >> info; | 955 | stream >> info; |
813 | dblspce(info); | 956 | dblspce(info); |
814 | } | 957 | } |
815 | else if ( msg == "Layout/Indent(int)" ) | 958 | else if ( msg == "Layout/Indent(int)" ) |
816 | { | 959 | { |
817 | int info; | 960 | int info; |
818 | stream >> info; | 961 | stream >> info; |
819 | reader->bindenter = info; | 962 | reader->bindenter = info; |
820 | reader->setfilter(reader->getfilter()); | 963 | reader->setfilter(reader->getfilter()); |
821 | } | 964 | } |
822 | else if ( msg == "Layout/Remap(int)" ) | 965 | else if ( msg == "Layout/Remap(int)" ) |
823 | { | 966 | { |
824 | int info; | 967 | int info; |
825 | stream >> info; | 968 | stream >> info; |
826 | remap(info); | 969 | remap(info); |
827 | } | 970 | } |
828 | else if ( msg == "Layout/Embolden(int)" ) | 971 | else if ( msg == "Layout/Embolden(int)" ) |
829 | { | 972 | { |
830 | int info; | 973 | int info; |
831 | stream >> info; | 974 | stream >> info; |
832 | embolden(info); | 975 | embolden(info); |
833 | } | 976 | } |
834 | else if ( msg == "Format/Ideogram/Word(int)" ) | 977 | else if ( msg == "Format/Ideogram/Word(int)" ) |
835 | { | 978 | { |
836 | int info; | 979 | int info; |
837 | stream >> info; | 980 | stream >> info; |
838 | monospace(info); | 981 | monospace(info); |
839 | } | 982 | } |
840 | else if ( msg == "Format/Set width(int)" ) | 983 | else if ( msg == "Format/Set width(int)" ) |
841 | { | 984 | { |
842 | int info; | 985 | int info; |
843 | stream >> info; | 986 | stream >> info; |
844 | reader->m_charpc = info; | 987 | reader->m_charpc = info; |
845 | reader->setfont(); | 988 | reader->setfont(); |
846 | reader->refresh(); | 989 | reader->refresh(); |
847 | } | 990 | } |
848 | else if ( msg == "Format/Encoding(QString)" ) | 991 | else if ( msg == "Format/Encoding(QString)" ) |
849 | { | 992 | { |
850 | QString info; | 993 | QString info; |
851 | stream >> info; | 994 | stream >> info; |
852 | reader->setencoding(EncNameToInt(info)); | 995 | reader->setencoding(EncNameToInt(info)); |
853 | } | 996 | } |
854 | else if ( msg == "Format/Set Font(QString,int)" ) | 997 | else if ( msg == "Format/Set Font(QString,int)" ) |
855 | { | 998 | { |
856 | QString fontname; | 999 | QString fontname; |
857 | int size; | 1000 | int size; |
858 | stream >> fontname; | 1001 | stream >> fontname; |
859 | stream >> size; | 1002 | stream >> size; |
860 | setfontHelper(fontname, size); | 1003 | setfontHelper(fontname, size); |
861 | } | 1004 | } |
862 | else if ( msg == "Marks/Autogen(QString)" ) | 1005 | else if ( msg == "Marks/Autogen(QString)" ) |
863 | { | 1006 | { |
864 | QString info; | 1007 | QString info; |
865 | stream >> info; | 1008 | stream >> info; |
866 | do_autogen(info); | 1009 | do_autogen(info); |
867 | } | 1010 | } |
868 | } | 1011 | } |
869 | 1012 | ||
870 | ActionTypes QTReaderApp::ActNameToInt(const QString& _enc) | 1013 | ActionTypes QTReaderApp::ActNameToInt(const QString& _enc) |
871 | { | 1014 | { |
872 | for (int i = 0; i < MAX_ACTIONS; i++) | 1015 | for (int i = 0; i < MAX_ACTIONS; i++) |
873 | { | 1016 | { |
874 | if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i; | 1017 | if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i; |
875 | } | 1018 | } |
876 | return cesAutoScroll; | 1019 | return cesAutoScroll; |
877 | } | 1020 | } |
878 | 1021 | ||
1022 | void QTReaderApp::setfullscreen(bool sfs) | ||
1023 | { | ||
1024 | reader->bDoUpdates = false; | ||
1025 | m_fullscreen = sfs; | ||
1026 | showEditTools(); | ||
1027 | qApp->processEvents(); | ||
1028 | reader->bDoUpdates = true; | ||
1029 | reader->update(); | ||
1030 | } | ||
1031 | |||
1032 | void QTReaderApp::setcontinuous(bool sfs) | ||
1033 | { | ||
1034 | reader->setContinuous(sfs); | ||
1035 | reader->refresh(); | ||
1036 | } | ||
1037 | |||
879 | int QTReaderApp::EncNameToInt(const QString& _enc) | 1038 | int QTReaderApp::EncNameToInt(const QString& _enc) |
880 | { | 1039 | { |
881 | for (int i = 0; i < MAX_ENCODING; i++) | 1040 | for (int i = 0; i < MAX_ENCODING; i++) |
882 | { | 1041 | { |
883 | if (m_EncodingAction[i]->text() == _enc) return i; | 1042 | if (m_EncodingAction[i]->text() == _enc) return i; |
884 | } | 1043 | } |
885 | return 0; | 1044 | return 0; |
886 | /* | 1045 | /* |
887 | if (_enc == "Ascii") return 0; | 1046 | if (_enc == "Ascii") return 0; |
888 | if (_enc == "UTF-8") return 1; | 1047 | if (_enc == "UTF-8") return 1; |
889 | if (_enc == "UCS-2(BE)") return 2; | 1048 | if (_enc == "UCS-2(BE)") return 2; |
890 | if (_enc == "USC-2(LE)") return 3; | 1049 | if (_enc == "USC-2(LE)") return 3; |
891 | */ | 1050 | */ |
892 | } | 1051 | } |
893 | 1052 | ||
894 | void QTReaderApp::encodingSelected(QAction* _a) | 1053 | void QTReaderApp::encodingSelected(QAction* _a) |
895 | { | 1054 | { |
896 | // qDebug("es:%x : %s", _a, (const char *)(_a->text())); | 1055 | // qDebug("es:%x : %s", _a, (const char *)(_a->text())); |
897 | reader->setencoding(EncNameToInt(_a->text())); | 1056 | reader->setencoding(EncNameToInt(_a->text())); |
898 | } | 1057 | } |
899 | 1058 | ||
900 | void QTReaderApp::buttonActionSelected(QAction* _a) | 1059 | void QTReaderApp::buttonActionSelected(QAction* _a) |
901 | { | 1060 | { |
902 | // qDebug("es:%x : %s (%u)", _a, (const char *)(_a->text()), ActNameToInt(_a->text())); | 1061 | // qDebug("es:%x : %s (%u)", _a, (const char *)(_a->text()), ActNameToInt(_a->text())); |
903 | m_spaceTarget = ActNameToInt(_a->text()); | 1062 | m_spaceTarget = ActNameToInt(_a->text()); |
904 | } | 1063 | } |
905 | 1064 | ||
906 | QTReaderApp::~QTReaderApp() | 1065 | QTReaderApp::~QTReaderApp() |
907 | { | 1066 | { |
908 | } | 1067 | } |
909 | 1068 | ||
910 | void QTReaderApp::autoScroll(bool _b) | 1069 | void QTReaderApp::autoScroll(bool _b) |
911 | { | 1070 | { |
912 | reader->setautoscroll(_b); | 1071 | reader->setautoscroll(_b); |
1072 | setScrollState(reader->m_autoScroll); | ||
913 | } | 1073 | } |
914 | 1074 | ||
915 | void QTReaderApp::TBD() | 1075 | void QTReaderApp::zoomin() |
916 | { | 1076 | { |
917 | QMessageBox::information(this, "OpieReader", "Not yet implemented", 1); | 1077 | reader->zoomin(); |
918 | } | 1078 | } |
919 | 1079 | ||
920 | void QTReaderApp::TBDzoom() | 1080 | void QTReaderApp::zoomout() |
921 | { | 1081 | { |
922 | QMessageBox::information(this, "OpieReader", "Zooming is done interactively\nTry left/right cursor keys", 1); | 1082 | reader->zoomout(); |
923 | } | 1083 | } |
924 | 1084 | ||
925 | void QTReaderApp::clearBkmkList() | 1085 | void QTReaderApp::clearBkmkList() |
926 | { | 1086 | { |
927 | delete pBkmklist; | 1087 | delete pBkmklist; |
928 | pBkmklist = NULL; | 1088 | pBkmklist = NULL; |
929 | m_fBkmksChanged = false; | 1089 | m_fBkmksChanged = false; |
1090 | } | ||
1091 | |||
1092 | void QTReaderApp::fileClose() | ||
1093 | { | ||
1094 | if (pOpenlist != NULL) | ||
1095 | { | ||
1096 | int ind = 0; | ||
1097 | Bkmk* p = (*pOpenlist)[ind]; | ||
1098 | while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile) | ||
1099 | { | ||
1100 | p = (*pOpenlist)[++ind]; | ||
1101 | } | ||
1102 | if (p != NULL) pOpenlist->erase(ind); | ||
1103 | switch (QMessageBox::information ( this , PROGNAME, "What do you want to delete?", "Nothing", "Marks", "Marks\nFile", 1, 0 )) | ||
1104 | { | ||
1105 | case 0: | ||
1106 | default: | ||
1107 | break; | ||
1108 | case 2: | ||
1109 | unlink((const char*)reader->m_lastfile); | ||
1110 | case 1: | ||
1111 | unlink((const char *)Global::applicationFileName(APPDIR, reader->m_string)); | ||
1112 | } | ||
1113 | } | ||
1114 | |||
1115 | fileOpen2(); | ||
1116 | } | ||
1117 | |||
1118 | void QTReaderApp::updatefileinfo() | ||
1119 | { | ||
1120 | if (reader->m_string.isNull()) return; | ||
1121 | if (reader->m_lastfile.isNull()) return; | ||
1122 | tchar* nm = fromQString(reader->m_string); | ||
1123 | tchar* fl = fromQString(reader->m_lastfile); | ||
1124 | qDebug("Lastfile:%x", fl); | ||
1125 | bool notadded = true; | ||
1126 | if (pOpenlist == NULL) pOpenlist = new CList<Bkmk>; | ||
1127 | else | ||
1128 | { | ||
1129 | for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++) | ||
1130 | { | ||
1131 | if (ustrcmp(CFiledata(iter->anno()).name(), fl) == 0) | ||
1132 | { | ||
1133 | iter->value(reader->pagelocate()); | ||
1134 | unsigned short dlen; | ||
1135 | unsigned char* data; | ||
1136 | CFiledata fd(iter->anno()); | ||
1137 | reader->setSaveData(data, dlen, fd.content(), fd.length()); | ||
1138 | qDebug("Filedata(1):%u, %u", fd.length(), dlen); | ||
1139 | // getstate(data, dlen); | ||
1140 | iter->setAnno(data, dlen); | ||
1141 | notadded = false; | ||
1142 | delete [] data; | ||
1143 | break; | ||
1144 | } | ||
1145 | } | ||
1146 | } | ||
1147 | qDebug("Added?:%x", notadded); | ||
1148 | if (notadded) | ||
1149 | { | ||
1150 | struct stat fnstat; | ||
1151 | stat((const char *)reader->m_lastfile, &fnstat); | ||
1152 | CFiledata fd(fnstat.st_mtime, fl); | ||
1153 | unsigned short dlen; | ||
1154 | unsigned char* data; | ||
1155 | reader->setSaveData(data, dlen, fd.content(), fd.length()); | ||
1156 | pOpenlist->push_front(Bkmk(nm, data, dlen, reader->pagelocate())); | ||
1157 | qDebug("Filedata(2):%u, %u", fd.length(), dlen); | ||
1158 | delete [] data; | ||
1159 | } | ||
1160 | delete [] nm; | ||
1161 | delete [] fl; | ||
930 | } | 1162 | } |
931 | 1163 | ||
932 | void QTReaderApp::fileOpen() | 1164 | void QTReaderApp::fileOpen() |
933 | { | 1165 | { |
934 | /* | 1166 | /* |
935 | menu->hide(); | 1167 | menu->hide(); |
936 | editBar->hide(); | 1168 | editBar->hide(); |
937 | if (regVisible) regBar->hide(); | 1169 | if (regVisible) regBar->hide(); |
938 | if (searchVisible) searchBar->hide(); | 1170 | if (searchVisible) searchBar->hide(); |
939 | */ | 1171 | */ |
1172 | qDebug("fileOpen"); | ||
1173 | // if (!reader->m_lastfile.isEmpty()) | ||
1174 | updatefileinfo(); | ||
1175 | fileOpen2(); | ||
1176 | } | ||
1177 | |||
1178 | void QTReaderApp::fileOpen2() | ||
1179 | { | ||
940 | if (pBkmklist != NULL) | 1180 | if (pBkmklist != NULL) |
941 | { | 1181 | { |
942 | if (m_fBkmksChanged) | 1182 | if (m_fBkmksChanged) |
943 | { | 1183 | { |
944 | if (QMessageBox::warning(this, "OpieReader", "Save bookmarks?", "Save", "Don't bother") == 0) | 1184 | if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0) |
945 | savebkmks(); | 1185 | savebkmks(); |
946 | } | 1186 | } |
947 | delete pBkmklist; | 1187 | delete pBkmklist; |
948 | pBkmklist = NULL; | 1188 | pBkmklist = NULL; |
949 | m_fBkmksChanged = false; | 1189 | m_fBkmksChanged = false; |
950 | } | 1190 | } |
951 | reader->disableAutoscroll(); | 1191 | reader->disableAutoscroll(); |
952 | /* | 1192 | /* |
953 | editorStack->raiseWidget( fileSelector ); | 1193 | editorStack->raiseWidget( fileSelector ); |
954 | fileSelector->reread(); | 1194 | fileSelector->reread(); |
955 | */ | 1195 | */ |
956 | fileBrowser* fb = new fileBrowser(this,"OpieReader",TRUE, | 1196 | if (pOpenlist != NULL) |
957 | 0, | 1197 | { |
958 | // WStyle_Customize | WStyle_NoBorderEx, | 1198 | m_nRegAction = cOpenFile; |
959 | "*", QFileInfo(reader->m_lastfile).dirPath(true)); | 1199 | listbkmk(pOpenlist, "Browse"); |
1200 | } | ||
1201 | else | ||
1202 | { | ||
1203 | QString fn = usefilebrowser(); | ||
1204 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) | ||
1205 | { | ||
1206 | openFile(fn); | ||
1207 | } | ||
1208 | reader->setFocus(); | ||
1209 | } | ||
1210 | } | ||
1211 | |||
1212 | QString QTReaderApp::usefilebrowser() | ||
1213 | { | ||
1214 | fileBrowser* fb = new fileBrowser(this,"QTReader",TRUE, | ||
1215 | 0, | ||
1216 | // WStyle_Customize | WStyle_NoBorderEx, | ||
1217 | "*", QFileInfo(reader->m_lastfile).dirPath(true)); | ||
960 | 1218 | ||
1219 | |||
1220 | QString fn; | ||
961 | if (fb->exec()) | 1221 | if (fb->exec()) |
962 | { | 1222 | { |
963 | QString fn(fb->fileList[0]); | 1223 | fn = fb->fileList[0]; |
964 | // fb->populateList(); | ||
965 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn); | ||
966 | } | 1224 | } |
1225 | qDebug("Selected %s", (const char*)fn); | ||
967 | delete fb; | 1226 | delete fb; |
968 | reader->setFocus(); | 1227 | return fn; |
1228 | } | ||
1229 | |||
1230 | void QTReaderApp::showgraphic(QPixmap& pm) | ||
1231 | { | ||
1232 | m_graphicwin->setPixmap(pm); | ||
1233 | editorStack->raiseWidget( m_graphicwin ); | ||
1234 | m_graphicwin->setFocus(); | ||
969 | } | 1235 | } |
970 | 1236 | ||
971 | void QTReaderApp::showinfo() | 1237 | void QTReaderApp::showinfo() |
972 | { | 1238 | { |
973 | unsigned long fs, ts, pl; | 1239 | unsigned long fs, ts, pl; |
974 | if (reader->empty()) | 1240 | if (reader->empty()) |
975 | { | 1241 | { |
976 | QMessageBox::information(this, "OpieReader", "No file loaded", 1); | 1242 | QMessageBox::information(this, PROGNAME, "No file loaded", 1); |
977 | } | 1243 | } |
978 | else | 1244 | else |
979 | { | 1245 | { |
980 | reader->sizes(fs,ts); | 1246 | reader->sizes(fs,ts); |
981 | pl = reader->pagelocate(); | 1247 | pl = reader->pagelocate(); |
982 | m_infoWin->setFileSize(fs); | 1248 | m_infoWin->setFileSize(fs); |
983 | m_infoWin->setTextSize(ts); | 1249 | m_infoWin->setTextSize(ts); |
984 | m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts); | 1250 | m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts); |
985 | m_infoWin->setLocation(pl); | 1251 | m_infoWin->setLocation(pl); |
986 | m_infoWin->setRead((100*pl + (ts >> 1))/ts); | 1252 | m_infoWin->setRead((100*pl + (ts >> 1))/ts); |
987 | editorStack->raiseWidget( m_infoWin ); | 1253 | editorStack->raiseWidget( m_infoWin ); |
988 | m_infoWin->setFocus(); | 1254 | m_infoWin->setFocus(); |
989 | } | 1255 | } |
990 | } | 1256 | } |
991 | 1257 | ||
992 | void QTReaderApp::addAnno(const QString& name, const QString& text, size_t posn) | 1258 | void QTReaderApp::addAnno(const QString& name, const QString& text, size_t posn) |
993 | { | 1259 | { |
994 | if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; | 1260 | if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; |
995 | #ifdef _UNICODE | 1261 | #ifdef _UNICODE |
996 | CBuffer buff(name.length()+1); | 1262 | CBuffer buff(name.length()+1); |
997 | int i; | 1263 | int i; |
998 | for (i = 0; i < name.length(); i++) | 1264 | for (i = 0; i < name.length(); i++) |
999 | { | 1265 | { |
1000 | buff[i] = name[i].unicode(); | 1266 | buff[i] = name[i].unicode(); |
1001 | } | 1267 | } |
1002 | buff[i] = 0; | 1268 | buff[i] = 0; |
1003 | CBuffer buff2(text.length()+1); | 1269 | CBuffer buff2(text.length()+1); |
1004 | for (i = 0; i < text.length(); i++) | 1270 | for (i = 0; i < text.length(); i++) |
1005 | { | 1271 | { |
1006 | buff2[i] = text[i].unicode(); | 1272 | buff2[i] = text[i].unicode(); |
1007 | } | 1273 | } |
1008 | buff2[i] = 0; | 1274 | buff2[i] = 0; |
1009 | pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn)); | 1275 | pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn)); |
1010 | #else | 1276 | #else |
1011 | pBkmklist->push_front(Bkmk((const tchar*)text,posn)); | 1277 | pBkmklist->push_front(Bkmk((const tchar*)text,posn)); |
1012 | #endif | 1278 | #endif |
1013 | m_fBkmksChanged = true; | 1279 | m_fBkmksChanged = true; |
1014 | pBkmklist->sort(); | 1280 | pBkmklist->sort(); |
1015 | } | 1281 | } |
1016 | 1282 | ||
1017 | void QTReaderApp::addAnno(const QString& name, const QString& text) | 1283 | void QTReaderApp::addAnno(const QString& name, const QString& text) |
1018 | { | 1284 | { |
1019 | if (m_annoIsEditing) | 1285 | if (m_annoIsEditing) |
1020 | { | 1286 | { |
1021 | if (name.isEmpty()) | 1287 | if (name.isEmpty()) |
1022 | { | 1288 | { |
1023 | QMessageBox::information(this, "OpieReader", "Need a name for the bookmark\nPlease try again", 1); | 1289 | QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nPlease try again", 1); |
1024 | } | 1290 | } |
1025 | else | 1291 | else |
1026 | { | 1292 | { |
1027 | addAnno(name, text, m_annoWin->getPosn()); | 1293 | addAnno(name, text, m_annoWin->getPosn()); |
1028 | } | 1294 | } |
1029 | showEditTools(); | 1295 | showEditTools(); |
1030 | } | 1296 | } |
1031 | else | 1297 | else |
1032 | { | 1298 | { |
1033 | if (m_annoWin->edited()) | 1299 | if (m_annoWin->edited()) |
1034 | { | 1300 | { |
1035 | CBuffer buff(text.length()+1); | 1301 | CBuffer buff(text.length()+1); |
1036 | int i; | 1302 | int i; |
1037 | for (i = 0; i < text.length(); i++) | 1303 | for (i = 0; i < text.length(); i++) |
1038 | { | 1304 | { |
1039 | buff[i] = text[i].unicode(); | 1305 | buff[i] = text[i].unicode(); |
1040 | } | 1306 | } |
1041 | buff[i] = 0; | 1307 | buff[i] = 0; |
1042 | m_fBkmksChanged = true; | 1308 | m_fBkmksChanged = true; |
1043 | m_anno->setAnno(buff.data()); | 1309 | m_anno->setAnno(buff.data()); |
1044 | } | 1310 | } |
1045 | bool found = findNextBookmark(m_anno->value()+1); | 1311 | bool found = findNextBookmark(m_anno->value()+1); |
1046 | if (found) | 1312 | if (found) |
1047 | { | 1313 | { |
1048 | m_annoWin->setName(toQString(m_anno->name())); | 1314 | m_annoWin->setName(toQString(m_anno->name())); |
1049 | m_annoWin->setAnno(toQString(m_anno->anno())); | 1315 | m_annoWin->setAnno(toQString(m_anno->anno())); |
1050 | } | 1316 | } |
1051 | else | 1317 | else |
1052 | { | 1318 | { |
1053 | showEditTools(); | 1319 | showEditTools(); |
1054 | } | 1320 | } |
1055 | } | 1321 | } |
1056 | } | 1322 | } |
1057 | 1323 | ||
1058 | bool QTReaderApp::findNextBookmark(size_t start) | 1324 | bool QTReaderApp::findNextBookmark(size_t start) |
1059 | { | 1325 | { |
1060 | bool found = false; | 1326 | bool found = false; |
1061 | for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++) | 1327 | for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++) |
1062 | { | 1328 | { |
1063 | if (iter->value() >= start) | 1329 | if (iter->value() >= start) |
1064 | { | 1330 | { |
1065 | if (iter->value() < reader->locate()) | 1331 | if (iter->value() < reader->locate()) |
1066 | { | 1332 | { |
1067 | found = true; | 1333 | found = true; |
1068 | m_anno = iter.pContent(); | 1334 | m_anno = iter.pContent(); |
1069 | } | 1335 | } |
1070 | break; | 1336 | break; |
1071 | } | 1337 | } |
1072 | } | 1338 | } |
1073 | return found; | 1339 | return found; |
1074 | } | 1340 | } |
1075 | 1341 | ||
1076 | void QTReaderApp::addanno() | 1342 | void QTReaderApp::addanno() |
1077 | { | 1343 | { |
1078 | if (reader->empty()) | 1344 | if (reader->empty()) |
1079 | { | 1345 | { |
1080 | QMessageBox::information(this, "OpieReader", "No file loaded", 1); | 1346 | QMessageBox::information(this, PROGNAME, "No file loaded", 1); |
1081 | } | 1347 | } |
1082 | else | 1348 | else |
1083 | { | 1349 | { |
1084 | m_annoWin->setName(""); | 1350 | m_annoWin->setName(""); |
1085 | m_annoWin->setAnno(""); | 1351 | m_annoWin->setAnno(""); |
1086 | m_annoWin->setPosn(reader->pagelocate()); | 1352 | m_annoWin->setPosn(reader->pagelocate()); |
1087 | m_annoIsEditing = true; | 1353 | m_annoIsEditing = true; |
1088 | editorStack->raiseWidget( m_annoWin ); | 1354 | editorStack->raiseWidget( m_annoWin ); |
1089 | m_annoWin->setFocus(); | 1355 | Global::showInputMethod(); |
1356 | m_annoWin->setFocus(); | ||
1090 | } | 1357 | } |
1091 | } | 1358 | } |
1092 | 1359 | ||
1093 | void QTReaderApp::infoClose() | 1360 | void QTReaderApp::infoClose() |
1094 | { | 1361 | { |
1095 | showEditTools(); | 1362 | showEditTools(); |
1096 | } | 1363 | } |
1097 | 1364 | ||
1098 | /* | 1365 | /* |
1099 | void QTReaderApp::fileRevert() | 1366 | void QTReaderApp::fileRevert() |
1100 | { | 1367 | { |
1101 | clear(); | 1368 | clear(); |
1102 | fileOpen(); | 1369 | fileOpen(); |
1103 | } | 1370 | } |
1104 | 1371 | ||
1105 | void QTReaderApp::editCut() | 1372 | void QTReaderApp::editCut() |
1106 | { | 1373 | { |
1107 | #ifndef QT_NO_CLIPBOARD | 1374 | #ifndef QT_NO_CLIPBOARD |
1108 | editor->cut(); | 1375 | editor->cut(); |
1109 | #endif | 1376 | #endif |
1110 | } | 1377 | } |
1111 | */ | 1378 | */ |
1112 | void QTReaderApp::editMark() | 1379 | void QTReaderApp::editMark() |
1113 | { | 1380 | { |
1114 | m_savedpos = reader->pagelocate(); | 1381 | m_savedpos = reader->pagelocate(); |
1115 | } | 1382 | } |
1116 | 1383 | ||
1117 | void QTReaderApp::editCopy() | 1384 | void QTReaderApp::editCopy() |
1118 | { | 1385 | { |
1119 | QClipboard* cb = QApplication::clipboard(); | 1386 | QClipboard* cb = QApplication::clipboard(); |
1120 | QString text; | 1387 | QString text; |
1121 | int ch; | 1388 | int ch; |
1122 | unsigned long currentpos = reader->pagelocate(); | 1389 | unsigned long currentpos = reader->pagelocate(); |
1123 | unsigned long endpos = reader->locate(); | 1390 | unsigned long endpos = reader->locate(); |
1124 | reader->jumpto(m_savedpos); | 1391 | reader->jumpto(m_savedpos); |
1125 | while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF) | 1392 | while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF) |
1126 | { | 1393 | { |
1127 | text += ch; | 1394 | text += ch; |
1128 | } | 1395 | } |
1129 | cb->setText(text); | 1396 | cb->setText(text); |
1130 | reader->locate(currentpos); | 1397 | reader->locate(currentpos); |
1131 | } | 1398 | } |
1132 | 1399 | ||
1133 | void QTReaderApp::pageup() | 1400 | void QTReaderApp::pageup() |
1134 | { | 1401 | { |
1135 | reader->goUp(); | 1402 | reader->NavUp(); |
1136 | } | 1403 | } |
1137 | 1404 | ||
1138 | void QTReaderApp::pagedn() | 1405 | void QTReaderApp::pagedn() |
1139 | { | 1406 | { |
1140 | reader->goDown(); | 1407 | reader->NavDown(); |
1141 | } | 1408 | } |
1142 | 1409 | ||
1143 | void QTReaderApp::stripcr(bool _b) | 1410 | void QTReaderApp::stripcr(bool _b) |
1144 | { | 1411 | { |
1145 | reader->setstripcr(_b); | 1412 | reader->setstripcr(_b); |
1146 | } | 1413 | } |
1414 | void QTReaderApp::onespace(bool _b) | ||
1415 | { | ||
1416 | reader->setonespace(_b); | ||
1417 | } | ||
1418 | #ifdef REPALM | ||
1419 | void QTReaderApp::repalm(bool _b) | ||
1420 | { | ||
1421 | reader->setrepalm(_b); | ||
1422 | } | ||
1423 | #endif | ||
1147 | void QTReaderApp::remap(bool _b) | 1424 | void QTReaderApp::remap(bool _b) |
1148 | { | 1425 | { |
1149 | reader->setremap(_b); | 1426 | reader->setremap(_b); |
1150 | } | 1427 | } |
1151 | void QTReaderApp::peanut(bool _b) | 1428 | void QTReaderApp::peanut(bool _b) |
1152 | { | 1429 | { |
1153 | reader->setpeanut(_b); | 1430 | reader->setpeanut(_b); |
1154 | } | 1431 | } |
1155 | void QTReaderApp::embolden(bool _b) | 1432 | void QTReaderApp::embolden(bool _b) |
1156 | { | 1433 | { |
1157 | reader->setmakebold(_b); | 1434 | reader->setmakebold(_b); |
1158 | } | 1435 | } |
1159 | void QTReaderApp::autofmt(bool _b) | 1436 | void QTReaderApp::autofmt(bool _b) |
1160 | { | 1437 | { |
1161 | reader->setautofmt(_b); | 1438 | reader->setautofmt(_b); |
1162 | } | 1439 | } |
1163 | void QTReaderApp::textfmt(bool _b) | 1440 | void QTReaderApp::textfmt(bool _b) |
1164 | { | 1441 | { |
1165 | reader->settextfmt(_b); | 1442 | reader->settextfmt(_b); |
1166 | } | 1443 | } |
1167 | void QTReaderApp::striphtml(bool _b) | 1444 | void QTReaderApp::striphtml(bool _b) |
1168 | { | 1445 | { |
1169 | reader->setstriphtml(_b); | 1446 | reader->setstriphtml(_b); |
1170 | } | 1447 | } |
1171 | void QTReaderApp::dehyphen(bool _b) | 1448 | void QTReaderApp::dehyphen(bool _b) |
1172 | { | 1449 | { |
1173 | reader->setdehyphen(_b); | 1450 | reader->setdehyphen(_b); |
1174 | } | 1451 | } |
1175 | void QTReaderApp::unindent(bool _b) | 1452 | void QTReaderApp::unindent(bool _b) |
1176 | { | 1453 | { |
1177 | reader->setunindent(_b); | 1454 | reader->setunindent(_b); |
1178 | } | 1455 | } |
1179 | void QTReaderApp::repara(bool _b) | 1456 | void QTReaderApp::repara(bool _b) |
1180 | { | 1457 | { |
1181 | reader->setrepara(_b); | 1458 | reader->setrepara(_b); |
1182 | } | 1459 | } |
1183 | void QTReaderApp::dblspce(bool _b) | 1460 | void QTReaderApp::dblspce(bool _b) |
1184 | { | 1461 | { |
1185 | reader->setdblspce(_b); | 1462 | reader->setdblspce(_b); |
1186 | } | 1463 | } |
1187 | void QTReaderApp::pagemode(bool _b) | 1464 | void QTReaderApp::pagemode(bool _b) |
1188 | { | 1465 | { |
1189 | reader->setpagemode(_b); | 1466 | reader->setpagemode(_b); |
1190 | } | 1467 | } |
1191 | 1468 | void QTReaderApp::navkeys(bool _b) | |
1469 | { | ||
1470 | reader->m_navkeys = _b; | ||
1471 | } | ||
1192 | void QTReaderApp::monospace(bool _b) | 1472 | void QTReaderApp::monospace(bool _b) |
1193 | { | 1473 | { |
1194 | reader->setmono(_b); | 1474 | reader->setmono(_b); |
1195 | } | 1475 | } |
1196 | 1476 | ||
1197 | void QTReaderApp::setspacing() | 1477 | void QTReaderApp::setspacing() |
1198 | { | 1478 | { |
1199 | m_nRegAction = cMonoSpace; | 1479 | m_nRegAction = cMonoSpace; |
1200 | char lcn[20]; | 1480 | char lcn[20]; |
1201 | sprintf(lcn, "%lu", reader->m_charpc); | 1481 | sprintf(lcn, "%lu", reader->m_charpc); |
1202 | regEdit->setText(lcn); | 1482 | regEdit->setText(lcn); |
1203 | do_regedit(); | 1483 | do_regedit(); |
1204 | } | 1484 | } |
1205 | 1485 | ||
1206 | void QTReaderApp::setoverlap() | 1486 | void QTReaderApp::setoverlap() |
1207 | { | 1487 | { |
1208 | m_nRegAction = cOverlap; | 1488 | m_nRegAction = cOverlap; |
1209 | char lcn[20]; | 1489 | char lcn[20]; |
1210 | sprintf(lcn, "%lu", reader->m_overlap); | 1490 | sprintf(lcn, "%lu", reader->m_overlap); |
1211 | regEdit->setText(lcn); | 1491 | regEdit->setText(lcn); |
1212 | do_regedit(); | 1492 | do_regedit(); |
1213 | } | 1493 | } |
1214 | 1494 | ||
1215 | void QTReaderApp::settarget() | 1495 | void QTReaderApp::settarget() |
1216 | { | 1496 | { |
1217 | m_nRegAction = cSetTarget; | 1497 | m_nRegAction = cSetTarget; |
1218 | QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp) | 1498 | QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp) |
1219 | + "/" | 1499 | + "/" |
1220 | + ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg); | 1500 | + ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg); |
1221 | regEdit->setText(text); | 1501 | regEdit->setText(text); |
1222 | do_regedit(); | 1502 | do_regedit(); |
1223 | } | 1503 | } |
1224 | 1504 | ||
1225 | void QTReaderApp::do_overlap(const QString& lcn) | 1505 | void QTReaderApp::do_overlap(const QString& lcn) |
1226 | { | 1506 | { |
1227 | bool ok; | 1507 | bool ok; |
1228 | unsigned long ulcn = lcn.toULong(&ok); | 1508 | unsigned long ulcn = lcn.toULong(&ok); |
1229 | if (ok) | 1509 | if (ok) |
1230 | { | 1510 | { |
1231 | reader->m_overlap = ulcn; | 1511 | reader->m_overlap = ulcn; |
1232 | } | 1512 | } |
1233 | else | 1513 | else |
1234 | QMessageBox::information(this, "OpieReader", "Must be a number"); | 1514 | QMessageBox::information(this, PROGNAME, "Must be a number"); |
1235 | } | 1515 | } |
1236 | 1516 | ||
1237 | void QTReaderApp::do_mono(const QString& lcn) | 1517 | void QTReaderApp::do_mono(const QString& lcn) |
1238 | { | 1518 | { |
1239 | bool ok; | 1519 | bool ok; |
1240 | unsigned long ulcn = lcn.toULong(&ok); | 1520 | unsigned long ulcn = lcn.toULong(&ok); |
1241 | if (ok) | 1521 | if (ok) |
1242 | { | 1522 | { |
1243 | reader->m_charpc = ulcn; | 1523 | reader->m_charpc = ulcn; |
1244 | reader->setfont(); | 1524 | reader->setfont(); |
1245 | reader->refresh(); | 1525 | reader->refresh(); |
1246 | // reader->setmono(true); | 1526 | //reader->setmono(true); |
1247 | } | 1527 | } |
1248 | else | 1528 | else |
1249 | QMessageBox::information(this, "OpieReader", "Must be a number"); | 1529 | QMessageBox::information(this, PROGNAME, "Must be a number"); |
1250 | } | 1530 | } |
1251 | 1531 | ||
1252 | /* | 1532 | /* |
1253 | void QTReaderApp::editPaste() | 1533 | void QTReaderApp::editPaste() |
1254 | { | 1534 | { |
1255 | #ifndef QT_NO_CLIPBOARD | 1535 | #ifndef QT_NO_CLIPBOARD |
1256 | editor->paste(); | 1536 | editor->paste(); |
1257 | #endif | 1537 | #endif |
1258 | } | 1538 | } |
1259 | */ | 1539 | */ |
1260 | 1540 | ||
1261 | void QTReaderApp::editFind() | 1541 | void QTReaderApp::editFind() |
1262 | { | 1542 | { |
1263 | searchStart = reader->pagelocate(); | 1543 | searchStart = reader->pagelocate(); |
1264 | #ifdef __ISEARCH | 1544 | #ifdef __ISEARCH |
1265 | searchStack = new QStack<searchrecord>; | 1545 | searchStack = new QStack<searchrecord>; |
1266 | #endif | 1546 | #endif |
1547 | Global::showInputMethod(); | ||
1267 | searchBar->show(); | 1548 | searchBar->show(); |
1268 | searchVisible = TRUE; | 1549 | searchVisible = TRUE; |
1269 | searchEdit->setFocus(); | 1550 | searchEdit->setFocus(); |
1270 | #ifdef __ISEARCH | 1551 | #ifdef __ISEARCH |
1271 | searchStack->push(new searchrecord("",reader->pagelocate())); | 1552 | searchStack->push(new searchrecord("",reader->pagelocate())); |
1272 | #endif | 1553 | #endif |
1273 | } | 1554 | } |
1274 | 1555 | ||
1275 | void QTReaderApp::findNext() | 1556 | void QTReaderApp::findNext() |
1276 | { | 1557 | { |
1277 | // qDebug("findNext called\n"); | 1558 | // qDebug("findNext called\n"); |
1278 | #ifdef __ISEARCH | 1559 | #ifdef __ISEARCH |
1279 | QString arg = searchEdit->text(); | 1560 | QString arg = searchEdit->text(); |
1280 | #else | 1561 | #else |
1281 | QRegExp arg = searchEdit->text(); | 1562 | QRegExp arg = searchEdit->text(); |
1282 | #endif | 1563 | #endif |
1283 | CDrawBuffer test(&(reader->m_fontControl)); | 1564 | CDrawBuffer test(&(reader->m_fontControl)); |
1284 | size_t start = reader->pagelocate(); | 1565 | size_t start = reader->pagelocate(); |
1285 | reader->jumpto(start); | 1566 | reader->jumpto(start); |
1286 | reader->buffdoc.getline(&test,reader->width()); | 1567 | reader->buffdoc.getline(&test,reader->width()); |
1287 | dosearch(start, test, arg); | 1568 | dosearch(start, test, arg); |
1288 | } | 1569 | } |
1289 | 1570 | ||
1290 | void QTReaderApp::findClose() | 1571 | void QTReaderApp::findClose() |
1291 | { | 1572 | { |
1292 | searchVisible = FALSE; | 1573 | searchVisible = FALSE; |
1293 | searchEdit->setText(""); | 1574 | searchEdit->setText(""); |
1575 | Global::hideInputMethod(); | ||
1294 | searchBar->hide(); | 1576 | searchBar->hide(); |
1295 | #ifdef __ISEARCH | 1577 | #ifdef __ISEARCH |
1296 | // searchStack = new QStack<searchrecord>; | 1578 | // searchStack = new QStack<searchrecord>; |
1297 | while (!searchStack->isEmpty()) | 1579 | while (!searchStack->isEmpty()) |
1298 | { | 1580 | { |
1299 | delete searchStack->pop(); | 1581 | delete searchStack->pop(); |
1300 | } | 1582 | } |
1301 | delete searchStack; | 1583 | delete searchStack; |
1302 | #endif | 1584 | #endif |
1303 | reader->setFocus(); | 1585 | reader->setFocus(); |
1304 | } | 1586 | } |
1305 | 1587 | ||
1306 | void QTReaderApp::regClose() | 1588 | void QTReaderApp::regClose() |
1307 | { | 1589 | { |
1308 | regVisible = FALSE; | 1590 | regVisible = FALSE; |
1309 | regEdit->setText(""); | 1591 | regEdit->setText(""); |
1310 | regBar->hide(); | 1592 | regBar->hide(); |
1593 | Global::hideInputMethod(); | ||
1311 | reader->setFocus(); | 1594 | reader->setFocus(); |
1312 | } | 1595 | } |
1313 | 1596 | ||
1314 | #ifdef __ISEARCH | 1597 | #ifdef __ISEARCH |
1315 | bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QString& arg) | 1598 | bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QString& arg) |
1316 | #else | 1599 | #else |
1317 | bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg) | 1600 | bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg) |
1318 | #endif | 1601 | #endif |
1319 | { | 1602 | { |
1320 | bool ret = true; | 1603 | bool ret = true; |
1604 | unsigned long fs, ts; | ||
1605 | reader->sizes(fs,ts); | ||
1321 | size_t pos = reader->locate(); | 1606 | size_t pos = reader->locate(); |
1322 | reader->buffdoc.getline(&test,reader->width()); | 1607 | reader->buffdoc.getline(&test,reader->width()); |
1608 | pbar->show(); | ||
1609 | pbar->resize(width(), editBar->height()); | ||
1610 | pbar->reset(); | ||
1611 | int lastpc = (100*pos)/ts; | ||
1612 | pbar->setProgress(lastpc); | ||
1613 | qApp->processEvents(); | ||
1614 | reader->setFocus(); | ||
1323 | #ifdef __ISEARCH | 1615 | #ifdef __ISEARCH |
1324 | while (strstr(test.data(),(const tchar*)arg) == NULL) | 1616 | while (strstr(test.data(),(const tchar*)arg) == NULL) |
1325 | #else | 1617 | #else |
1326 | #ifdef _UNICODE | 1618 | #ifdef _UNICODE |
1327 | while (arg.match(toQString(test.data())) == -1) | 1619 | while (arg.match(toQString(test.data())) == -1) |
1328 | #else | 1620 | #else |
1329 | while (arg.match(test.data()) == -1) | 1621 | while (arg.match(test.data()) == -1) |
1330 | #endif | 1622 | #endif |
1331 | #endif | 1623 | #endif |
1332 | { | 1624 | { |
1333 | pos = reader->locate(); | 1625 | pos = reader->locate(); |
1626 | unsigned int lcn = reader->locate(); | ||
1627 | int pc = (100*pos)/ts; | ||
1628 | if (pc != lastpc) | ||
1629 | { | ||
1630 | pbar->setProgress(pc); | ||
1631 | qApp->processEvents(); | ||
1632 | reader->setFocus(); | ||
1633 | lastpc = pc; | ||
1634 | } | ||
1635 | |||
1334 | if (!reader->buffdoc.getline(&test,reader->width())) | 1636 | if (!reader->buffdoc.getline(&test,reader->width())) |
1335 | { | 1637 | { |
1336 | if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2) | 1638 | if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2) |
1337 | pos = searchStart; | 1639 | pos = searchStart; |
1338 | else | 1640 | else |
1339 | pos = start; | 1641 | pos = start; |
1340 | ret = false; | 1642 | ret = false; |
1341 | findClose(); | 1643 | findClose(); |
1342 | break; | 1644 | break; |
1343 | } | 1645 | } |
1344 | } | 1646 | } |
1647 | pbar->hide(); | ||
1345 | reader->locate(pos); | 1648 | reader->locate(pos); |
1346 | return ret; | 1649 | return ret; |
1347 | } | 1650 | } |
1348 | 1651 | ||
1349 | #ifdef __ISEARCH | 1652 | #ifdef __ISEARCH |
1350 | void QTReaderApp::search(const QString & arg) | 1653 | void QTReaderApp::search(const QString & arg) |
1351 | { | 1654 | { |
1352 | searchrecord* ss = searchStack->top(); | 1655 | searchrecord* ss = searchStack->top(); |
1353 | CBuffer test; | 1656 | CBuffer test; |
1354 | size_t start = reader->pagelocate(); | 1657 | size_t start = reader->pagelocate(); |
1355 | bool haspopped = false; | 1658 | bool haspopped = false; |
1356 | while (arg.left(ss->s.length()) != ss->s) | 1659 | while (arg.left(ss->s.length()) != ss->s) |
1357 | { | 1660 | { |
1358 | haspopped = true; | 1661 | haspopped = true; |
1359 | start = ss->pos; | 1662 | start = ss->pos; |
1360 | // reader->locate(start); | 1663 | // reader->locate(start); |
1361 | searchStack->pop(); | 1664 | searchStack->pop(); |
1362 | delete ss; | 1665 | delete ss; |
1363 | } | 1666 | } |
1364 | if (haspopped) reader->locate(start); | 1667 | if (haspopped) reader->locate(start); |
1365 | /* | 1668 | /* |
1366 | if (arg.length() < ss->len) | 1669 | if (arg.length() < ss->len) |
1367 | { | 1670 | { |
1368 | start = ss->pos; | 1671 | start = ss->pos; |
1369 | reader->locate(start); | 1672 | reader->locate(start); |
1370 | searchStack->pop(); | 1673 | searchStack->pop(); |
1371 | delete ss; | 1674 | delete ss; |
1372 | } | 1675 | } |
1373 | */ | 1676 | */ |
1374 | else | 1677 | else |
1375 | { | 1678 | { |
1376 | start = reader->pagelocate(); | 1679 | start = reader->pagelocate(); |
1377 | reader->jumpto(start); | 1680 | reader->jumpto(start); |
1378 | searchStack->push(new searchrecord(arg,start)); | 1681 | searchStack->push(new searchrecord(arg,start)); |
1379 | } | 1682 | } |
1380 | dosearch(start, test, arg); | 1683 | dosearch(start, test, arg); |
1381 | } | 1684 | } |
1382 | #else | 1685 | #else |
1383 | void QTReaderApp::search() | 1686 | void QTReaderApp::search() |
1384 | { | 1687 | { |
1385 | findNext(); | 1688 | findNext(); |
1386 | } | 1689 | } |
1387 | #endif | 1690 | #endif |
1388 | 1691 | ||
1389 | void QTReaderApp::openFile( const QString &f ) | 1692 | void QTReaderApp::openFile( const QString &f ) |
1390 | { | 1693 | { |
1391 | openFile(DocLnk(f)); | 1694 | qDebug("File:%s", (const char*)f); |
1392 | } | 1695 | // openFile(DocLnk(f)); |
1393 | 1696 | //} | |
1394 | void QTReaderApp::openFile( const DocLnk &f ) | 1697 | // |
1395 | { | 1698 | //void QTReaderApp::openFile( const DocLnk &f ) |
1699 | //{ | ||
1396 | clear(); | 1700 | clear(); |
1397 | FileManager fm; | 1701 | QFileInfo fm(f); |
1398 | if ( fm.exists( f ) ) | 1702 | if ( fm.exists() ) |
1399 | { | 1703 | { |
1400 | // QMessageBox::information(0, "Progress", "Calling fileNew()"); | 1704 | // QMessageBox::information(0, "Progress", "Calling fileNew()"); |
1401 | 1705 | ||
1402 | clear(); | 1706 | if (fm.extension( FALSE ) == "desktop") |
1707 | { | ||
1708 | DocLnk d(f); | ||
1709 | QFileInfo fnew(d.file()); | ||
1710 | fm = fnew; | ||
1711 | if (!fm.exists()) return; | ||
1712 | } | ||
1403 | 1713 | ||
1404 | // editorStack->raiseWidget( reader ); | 1714 | clear(); |
1405 | |||
1406 | // reader->setFocus(); | ||
1407 | |||
1408 | // QMessageBox::information(0, "DocLnk", "Begin"); | ||
1409 | doc = new DocLnk(f); | ||
1410 | // QMessageBox::information(0, "DocLnk done", doc->file()); | ||
1411 | // QMessageBox::information(0, "Progress", "Calling setText()"); | ||
1412 | // QMessageBox::information(0, "Progress", "Textset"); | ||
1413 | 1715 | ||
1414 | // updateCaption(); | 1716 | reader->setText(fm.baseName(), fm.absFilePath()); |
1415 | showEditTools(); | 1717 | showEditTools(); |
1416 | reader->setText(doc->name(), doc->file()); | ||
1417 | readbkmks(); | 1718 | readbkmks(); |
1418 | } | 1719 | } |
1419 | else | 1720 | else |
1420 | { | 1721 | { |
1421 | QMessageBox::information(this, "OpieReader", "File does not exist"); | 1722 | QMessageBox::information(this, PROGNAME, "File does not exist"); |
1723 | } | ||
1724 | |||
1725 | } | ||
1726 | /* | ||
1727 | void QTReaderApp::resizeEvent(QResizeEvent* e) | ||
1728 | { | ||
1729 | if (m_fullscreen) | ||
1730 | { | ||
1731 | showNormal(); | ||
1732 | showFullScreen(); | ||
1733 | } | ||
1734 | } | ||
1735 | */ | ||
1736 | void QTReaderApp::keyPressEvent(QKeyEvent* e) | ||
1737 | { | ||
1738 | if (m_fullscreen) | ||
1739 | { | ||
1740 | switch(e->key()) | ||
1741 | { | ||
1742 | case Key_Escape: | ||
1743 | m_actFullscreen->setOn(false); | ||
1744 | if (m_fullscreen) | ||
1745 | { | ||
1746 | qDebug("Fullscreen already set - remove this!"); | ||
1747 | } | ||
1748 | else | ||
1749 | { | ||
1750 | m_fullscreen = false; | ||
1751 | reader->bDoUpdates = false; | ||
1752 | showEditTools(); | ||
1753 | qApp->processEvents(); | ||
1754 | reader->bDoUpdates = true; | ||
1755 | reader->update(); | ||
1756 | } | ||
1757 | e->accept(); | ||
1758 | break; | ||
1759 | default: | ||
1760 | e->ignore(); | ||
1761 | } | ||
1762 | } | ||
1763 | else | ||
1764 | { | ||
1765 | e->ignore(); | ||
1422 | } | 1766 | } |
1423 | |||
1424 | } | 1767 | } |
1425 | 1768 | ||
1426 | void QTReaderApp::showEditTools() | 1769 | void QTReaderApp::showEditTools() |
1427 | { | 1770 | { |
1428 | if ( !doc ) | 1771 | // if ( !doc ) |
1429 | close(); | 1772 | //close(); |
1430 | // fileSelector->hide(); | 1773 | if (m_fullscreen) |
1431 | //tjw menu->show(); | 1774 | { |
1432 | editBar->show(); | 1775 | editBar->hide(); |
1433 | if ( searchVisible ) | 1776 | searchBar->hide(); |
1434 | searchBar->show(); | 1777 | regBar->hide(); |
1435 | if ( regVisible ) | 1778 | Global::hideInputMethod(); |
1436 | regBar->show(); | 1779 | m_fontBar->hide(); |
1437 | if (m_fontVisible) m_fontBar->show(); | 1780 | //showNormal(); |
1438 | 1781 | showFullScreen(); | |
1782 | } | ||
1783 | else | ||
1784 | { | ||
1785 | qDebug("him"); | ||
1786 | Global::hideInputMethod(); | ||
1787 | qDebug("eb"); | ||
1788 | editBar->show(); | ||
1789 | if ( searchVisible ) | ||
1790 | { | ||
1791 | Global::showInputMethod(); | ||
1792 | searchBar->show(); | ||
1793 | } | ||
1794 | if ( regVisible ) | ||
1795 | { | ||
1796 | Global::showInputMethod(); | ||
1797 | regBar->show(); | ||
1798 | } | ||
1799 | if (m_fontVisible) m_fontBar->show(); | ||
1800 | qDebug("sn"); | ||
1801 | showNormal(); | ||
1802 | qDebug("sm"); | ||
1803 | showMaximized(); | ||
1804 | //setCentralWidget(reader); | ||
1805 | } | ||
1806 | |||
1807 | qDebug("uc"); | ||
1439 | updateCaption(); | 1808 | updateCaption(); |
1809 | qDebug("rw"); | ||
1440 | editorStack->raiseWidget( reader ); | 1810 | editorStack->raiseWidget( reader ); |
1811 | qDebug("sf"); | ||
1441 | reader->setFocus(); | 1812 | reader->setFocus(); |
1442 | } | 1813 | } |
1443 | /* | 1814 | /* |
1444 | void QTReaderApp::save() | 1815 | void QTReaderApp::save() |
1445 | { | 1816 | { |
1446 | if ( !doc ) | 1817 | if ( !doc ) |
1447 | return; | 1818 | return; |
1448 | if ( !editor->edited() ) | 1819 | if ( !editor->edited() ) |
1449 | return; | 1820 | return; |
1450 | 1821 | ||
1451 | QString rt = editor->text(); | 1822 | QString rt = editor->text(); |
1452 | QString pt = rt; | 1823 | QString pt = rt; |
1453 | 1824 | ||
1454 | if ( doc->name().isEmpty() ) { | 1825 | if ( doc->name().isEmpty() ) { |
1455 | unsigned ispace = pt.find( ' ' ); | 1826 | unsigned ispace = pt.find( ' ' ); |
1456 | unsigned ienter = pt.find( '\n' ); | 1827 | unsigned ienter = pt.find( '\n' ); |
1457 | int i = (ispace < ienter) ? ispace : ienter; | 1828 | int i = (ispace < ienter) ? ispace : ienter; |
1458 | QString docname; | 1829 | QString docname; |
1459 | if ( i == -1 ) { | 1830 | if ( i == -1 ) { |
1460 | if ( pt.isEmpty() ) | 1831 | if ( pt.isEmpty() ) |
1461 | docname = "Empty Text"; | 1832 | docname = "Empty Text"; |
1462 | else | 1833 | else |
1463 | docname = pt; | 1834 | docname = pt; |
1464 | } else { | 1835 | } else { |
1465 | docname = pt.left( i ); | 1836 | docname = pt.left( i ); |
1466 | } | 1837 | } |
1467 | doc->setName(docname); | 1838 | doc->setName(docname); |
1468 | } | 1839 | } |
1469 | FileManager fm; | 1840 | FileManager fm; |
1470 | fm.saveFile( *doc, rt ); | 1841 | fm.saveFile( *doc, rt ); |
1471 | } | 1842 | } |
1472 | */ | 1843 | */ |
1473 | 1844 | ||
1474 | void QTReaderApp::clear() | 1845 | void QTReaderApp::clear() |
1475 | { | 1846 | { |
1476 | if (doc != 0) | 1847 | // if (doc != 0) |
1477 | { | 1848 | // { |
1478 | // QMessageBox::information(this, "QTReader", "Deleting doc", 1); | 1849 | // QMessageBox::information(this, PROGNAME, "Deleting doc", 1); |
1479 | delete doc; | 1850 | //delete doc; |
1480 | // QMessageBox::information(this, "QTReader", "Deleted doc", 1); | 1851 | // QMessageBox::information(this, PROGNAME, "Deleted doc", 1); |
1481 | doc = 0; | 1852 | //doc = 0; |
1482 | } | 1853 | // } |
1483 | reader->clear(); | 1854 | reader->clear(); |
1484 | } | 1855 | } |
1485 | 1856 | ||
1486 | void QTReaderApp::updateCaption() | 1857 | void QTReaderApp::updateCaption() |
1487 | { | 1858 | { |
1488 | if ( !doc ) | 1859 | // if ( !doc ) |
1489 | setCaption( tr("OpieReader") ); | 1860 | //setCaption( tr("QTReader") ); |
1490 | else { | 1861 | // else { |
1491 | QString s = doc->name(); | 1862 | //QString s = doc->name(); |
1492 | if ( s.isEmpty() ) | 1863 | //if ( s.isEmpty() ) |
1493 | s = tr( "Unnamed" ); | 1864 | // s = tr( "Unnamed" ); |
1494 | setCaption( s + " - " + tr("OpieReader") ); | 1865 | setCaption( reader->m_string + " - " + tr(SHORTPROGNAME) ); |
1495 | } | 1866 | // } |
1496 | } | 1867 | } |
1497 | 1868 | ||
1498 | void QTReaderApp::setDocument(const QString& fileref) | 1869 | void QTReaderApp::setDocument(const QString& fileref) |
1499 | { | 1870 | { |
1500 | bFromDocView = TRUE; | 1871 | bFromDocView = TRUE; |
1501 | //QMessageBox::information(0, "setDocument", fileref); | 1872 | //QMessageBox::information(0, "setDocument", fileref); |
1502 | openFile(DocLnk(fileref)); | 1873 | openFile(fileref); |
1503 | // showEditTools(); | 1874 | // showEditTools(); |
1504 | } | 1875 | } |
1505 | 1876 | ||
1506 | void QTReaderApp::closeEvent( QCloseEvent *e ) | 1877 | void QTReaderApp::closeEvent( QCloseEvent *e ) |
1507 | { | 1878 | { |
1508 | if (m_dontSave) | 1879 | if (m_fullscreen) |
1509 | { | 1880 | { |
1510 | e->accept(); | 1881 | m_fullscreen = false; |
1882 | showEditTools(); | ||
1883 | e->accept(); | ||
1884 | } | ||
1885 | else if (m_dontSave) | ||
1886 | { | ||
1887 | e->accept(); | ||
1511 | } | 1888 | } |
1512 | else | 1889 | else |
1513 | { | 1890 | { |
1514 | if (editorStack->visibleWidget() == reader) | 1891 | if (editorStack->visibleWidget() == reader) |
1515 | { | 1892 | { |
1516 | if (m_fontVisible) | 1893 | if (m_fontVisible) |
1517 | { | 1894 | { |
1518 | m_fontBar->hide(); | 1895 | m_fontBar->hide(); |
1519 | m_fontVisible = false; | 1896 | m_fontVisible = false; |
1520 | } | 1897 | } |
1521 | if (regVisible) | 1898 | if (regVisible) |
1522 | { | 1899 | { |
1523 | regBar->hide(); | 1900 | regBar->hide(); |
1524 | regVisible = false; | 1901 | Global::hideInputMethod(); |
1525 | return; | 1902 | regVisible = false; |
1526 | } | 1903 | return; |
1527 | if (searchVisible) | 1904 | } |
1528 | { | 1905 | if (searchVisible) |
1529 | searchBar->hide(); | 1906 | { |
1530 | searchVisible = false; | 1907 | searchBar->hide(); |
1531 | return; | 1908 | Global::hideInputMethod(); |
1532 | } | 1909 | searchVisible = false; |
1533 | if (m_fBkmksChanged && pBkmklist != NULL) | 1910 | return; |
1534 | { | 1911 | } |
1535 | if (QMessageBox::warning(this, "OpieReader", "Save bookmarks?", "Save", "Don't bother") == 0) | 1912 | if (m_fBkmksChanged && pBkmklist != NULL) |
1536 | savebkmks(); | 1913 | { |
1537 | delete pBkmklist; | 1914 | if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0) |
1538 | pBkmklist = NULL; | 1915 | savebkmks(); |
1539 | m_fBkmksChanged = false; | 1916 | delete pBkmklist; |
1540 | } | 1917 | pBkmklist = NULL; |
1541 | bFromDocView = FALSE; | 1918 | m_fBkmksChanged = false; |
1542 | saveprefs(); | 1919 | } |
1543 | e->accept(); | 1920 | bFromDocView = FALSE; |
1544 | } | 1921 | updatefileinfo(); |
1545 | else | 1922 | saveprefs(); |
1546 | { | 1923 | e->accept(); |
1547 | showEditTools(); | 1924 | } |
1548 | } | 1925 | else |
1926 | { | ||
1927 | showEditTools(); | ||
1928 | } | ||
1549 | } | 1929 | } |
1550 | } | 1930 | } |
1551 | 1931 | ||
1552 | void QTReaderApp::do_gotomark() | 1932 | void QTReaderApp::do_gotomark() |
1553 | { | 1933 | { |
1554 | m_nRegAction = cGotoBkmk; | 1934 | m_nRegAction = cGotoBkmk; |
1555 | listbkmk(); | 1935 | listbkmk(pBkmklist); |
1556 | } | 1936 | } |
1557 | 1937 | ||
1558 | void QTReaderApp::do_delmark() | 1938 | void QTReaderApp::do_delmark() |
1559 | { | 1939 | { |
1560 | m_nRegAction = cDelBkmk; | 1940 | m_nRegAction = cDelBkmk; |
1561 | listbkmk(); | 1941 | listbkmk(pBkmklist); |
1562 | } | 1942 | } |
1563 | 1943 | ||
1564 | void QTReaderApp::listbkmk() | 1944 | void QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab) |
1565 | { | 1945 | { |
1566 | bkmkselector->clear(); | 1946 | bkmkselector->clear(); |
1947 | if (_lab.isNull()) | ||
1948 | bkmkselector->setText("Cancel"); | ||
1949 | else | ||
1950 | bkmkselector->setText(_lab); | ||
1567 | int cnt = 0; | 1951 | int cnt = 0; |
1568 | if (pBkmklist != NULL) | 1952 | if (plist != NULL) |
1569 | { | 1953 | { |
1570 | for (CList<Bkmk>::iterator i = pBkmklist->begin(); i != pBkmklist->end(); i++) | 1954 | for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++) |
1571 | { | 1955 | { |
1572 | #ifdef _UNICODE | 1956 | #ifdef _UNICODE |
1573 | bkmkselector->insertItem(toQString(i->name())); | 1957 | qDebug("Item:%s", (const char*)toQString(i->name())); |
1958 | bkmkselector->insertItem(toQString(i->name())); | ||
1574 | #else | 1959 | #else |
1575 | bkmkselector->insertItem(i->name()); | 1960 | bkmkselector->insertItem(i->name()); |
1576 | #endif | 1961 | #endif |
1577 | cnt++; | 1962 | cnt++; |
1578 | } | 1963 | } |
1579 | } | 1964 | } |
1580 | if (cnt > 0) | 1965 | if (cnt > 0) |
1581 | { | 1966 | { |
1582 | //tjw menu->hide(); | 1967 | //tjw menu->hide(); |
1583 | editBar->hide(); | 1968 | editBar->hide(); |
1584 | if (m_fontVisible) m_fontBar->hide(); | 1969 | if (m_fontVisible) m_fontBar->hide(); |
1585 | if (regVisible) regBar->hide(); | 1970 | if (regVisible) |
1586 | if (searchVisible) searchBar->hide(); | 1971 | { |
1972 | Global::hideInputMethod(); | ||
1973 | regBar->hide(); | ||
1974 | } | ||
1975 | if (searchVisible) | ||
1976 | { | ||
1977 | Global::hideInputMethod(); | ||
1978 | searchBar->hide(); | ||
1979 | } | ||
1587 | editorStack->raiseWidget( bkmkselector ); | 1980 | editorStack->raiseWidget( bkmkselector ); |
1588 | } | 1981 | } |
1589 | else | 1982 | else |
1590 | QMessageBox::information(this, "OpieReader", "No bookmarks in memory"); | 1983 | QMessageBox::information(this, PROGNAME, "No bookmarks in memory"); |
1591 | } | 1984 | } |
1592 | 1985 | ||
1593 | void QTReaderApp::do_autogen() | 1986 | void QTReaderApp::do_autogen() |
1594 | { | 1987 | { |
1595 | m_nRegAction = cAutoGen; | 1988 | m_nRegAction = cAutoGen; |
1596 | regEdit->setText(m_autogenstr); | 1989 | regEdit->setText(m_autogenstr); |
1597 | do_regedit(); | 1990 | do_regedit(); |
1598 | } | 1991 | } |
1599 | 1992 | ||
1600 | void QTReaderApp::do_regedit() | 1993 | void QTReaderApp::do_regedit() |
1601 | { | 1994 | { |
1602 | // editBar->hide(); | 1995 | // editBar->hide(); |
1996 | reader->bDoUpdates = false; | ||
1997 | qDebug("Showing regbar"); | ||
1603 | regBar->show(); | 1998 | regBar->show(); |
1999 | qDebug("Showing kbd"); | ||
2000 | Global::showInputMethod(); | ||
1604 | regVisible = true; | 2001 | regVisible = true; |
1605 | regEdit->setFocus(); | 2002 | regEdit->setFocus(); |
2003 | qApp->processEvents(); | ||
2004 | reader->bDoUpdates = true; | ||
2005 | reader->update(); | ||
2006 | } | ||
2007 | |||
2008 | bool QTReaderApp::openfrombkmk(Bkmk* bk) | ||
2009 | { | ||
2010 | QString fn = toQString( | ||
2011 | CFiledata(bk->anno()).name() | ||
2012 | ); | ||
2013 | qDebug("fileinfo"); | ||
2014 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) | ||
2015 | { | ||
2016 | qDebug("Opening"); | ||
2017 | openFile(fn); | ||
2018 | struct stat fnstat; | ||
2019 | stat((const char *)reader->m_lastfile, &fnstat); | ||
2020 | |||
2021 | if (CFiledata(bk->anno()).date() | ||
2022 | != fnstat.st_mtime) | ||
2023 | { | ||
2024 | CFiledata fd(bk->anno()); | ||
2025 | fd.setdate(fnstat.st_mtime); | ||
2026 | bk->value(0); | ||
2027 | } | ||
2028 | else | ||
2029 | { | ||
2030 | unsigned short svlen = bk->filedatalen(); | ||
2031 | unsigned char* svdata = bk->filedata(); | ||
2032 | reader->putSaveData(svdata, svlen); | ||
2033 | // setstate(svdata, svlen); | ||
2034 | if (svlen != 0) | ||
2035 | { | ||
2036 | QMessageBox::warning(this, PROGNAME, "Not all file data used\nNew version?"); | ||
2037 | } | ||
2038 | qDebug("updating"); | ||
2039 | reader->locate(bk->value()); | ||
2040 | } | ||
2041 | return true; | ||
2042 | } | ||
2043 | else | ||
2044 | { | ||
2045 | return false; | ||
2046 | } | ||
1606 | } | 2047 | } |
1607 | 2048 | ||
1608 | void QTReaderApp::gotobkmk(int ind) | 2049 | void QTReaderApp::gotobkmk(int ind) |
1609 | { | 2050 | { |
1610 | switch (m_nRegAction) | 2051 | switch (m_nRegAction) |
1611 | { | 2052 | { |
1612 | case cGotoBkmk: | 2053 | case cOpenFile: |
1613 | reader->locate((*pBkmklist)[ind]->value()); | 2054 | { |
1614 | break; | 2055 | if (!openfrombkmk((*pOpenlist)[ind])) |
1615 | case cDelBkmk: | 2056 | { |
1616 | // qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name()); | 2057 | pOpenlist->erase(ind); |
1617 | pBkmklist->erase(ind); | 2058 | QMessageBox::information(this, PROGNAME, "Can't find file"); |
1618 | m_fBkmksChanged = true; | 2059 | } |
1619 | // pBkmklist->sort(); | 2060 | } |
1620 | break; | 2061 | break; |
1621 | case cRmBkmkFile: | 2062 | case cGotoBkmk: |
1622 | unlink((const char *)Global::applicationFileName("uqtreader",bkmkselector->text(ind))); | 2063 | reader->locate((*pBkmklist)[ind]->value()); |
1623 | break; | 2064 | break; |
2065 | case cDelBkmk: | ||
2066 | // qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name()); | ||
2067 | pBkmklist->erase(ind); | ||
2068 | m_fBkmksChanged = true; | ||
2069 | // pBkmklist->sort(); | ||
2070 | break; | ||
2071 | case cRmBkmkFile: | ||
2072 | unlink((const char *)Global::applicationFileName(APPDIR,bkmkselector->text(ind))); | ||
2073 | break; | ||
1624 | } | 2074 | } |
1625 | showEditTools(); | 2075 | showEditTools(); |
1626 | } | 2076 | } |
1627 | 2077 | ||
1628 | void QTReaderApp::cancelbkmk() | 2078 | void QTReaderApp::cancelbkmk() |
1629 | { | 2079 | { |
2080 | if (m_nRegAction == cOpenFile) | ||
2081 | { | ||
2082 | QString fn = usefilebrowser(); | ||
2083 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn); | ||
2084 | } | ||
1630 | showEditTools(); | 2085 | showEditTools(); |
1631 | } | 2086 | } |
1632 | 2087 | ||
1633 | void QTReaderApp::jump() | 2088 | void QTReaderApp::jump() |
1634 | { | 2089 | { |
1635 | m_nRegAction = cJump; | 2090 | m_nRegAction = cJump; |
1636 | char lcn[20]; | 2091 | char lcn[20]; |
1637 | sprintf(lcn, "%lu", reader->pagelocate()); | 2092 | sprintf(lcn, "%lu", reader->pagelocate()); |
1638 | regEdit->setText(lcn); | 2093 | regEdit->setText(lcn); |
1639 | do_regedit(); | 2094 | do_regedit(); |
1640 | } | 2095 | } |
1641 | 2096 | ||
1642 | void QTReaderApp::do_jump(const QString& lcn) | 2097 | void QTReaderApp::do_jump(const QString& lcn) |
1643 | { | 2098 | { |
1644 | bool ok; | 2099 | bool ok; |
1645 | unsigned long ulcn = lcn.toULong(&ok); | 2100 | unsigned long ulcn = lcn.toULong(&ok); |
1646 | if (ok) | 2101 | if (ok) |
1647 | reader->locate(ulcn); | 2102 | reader->locate(ulcn); |
1648 | else | 2103 | else |
1649 | QMessageBox::information(this, "OpieReader", "Must be a number"); | 2104 | QMessageBox::information(this, PROGNAME, "Must be a number"); |
1650 | } | 2105 | } |
1651 | 2106 | ||
1652 | void QTReaderApp::do_regaction() | 2107 | void QTReaderApp::do_regaction() |
1653 | { | 2108 | { |
2109 | reader->bDoUpdates = false; | ||
1654 | regBar->hide(); | 2110 | regBar->hide(); |
2111 | Global::hideInputMethod(); | ||
1655 | regVisible = false; | 2112 | regVisible = false; |
1656 | switch(m_nRegAction) | 2113 | switch(m_nRegAction) |
1657 | { | 2114 | { |
1658 | case cAutoGen: | 2115 | case cAutoGen: |
1659 | do_autogen(regEdit->text()); | 2116 | do_autogen(regEdit->text()); |
1660 | break; | 2117 | break; |
1661 | case cAddBkmk: | 2118 | case cAddBkmk: |
1662 | do_addbkmk(regEdit->text()); | 2119 | do_addbkmk(regEdit->text()); |
1663 | break; | 2120 | break; |
1664 | case cJump: | 2121 | case cJump: |
1665 | do_jump(regEdit->text()); | 2122 | do_jump(regEdit->text()); |
1666 | break; | 2123 | break; |
1667 | case cMonoSpace: | 2124 | case cMonoSpace: |
1668 | do_mono(regEdit->text()); | 2125 | do_mono(regEdit->text()); |
1669 | break; | 2126 | break; |
1670 | case cOverlap: | 2127 | case cOverlap: |
1671 | do_overlap(regEdit->text()); | 2128 | do_overlap(regEdit->text()); |
1672 | break; | 2129 | break; |
1673 | case cSetTarget: | 2130 | case cSetTarget: |
1674 | do_settarget(regEdit->text()); | 2131 | do_settarget(regEdit->text()); |
1675 | break; | 2132 | break; |
1676 | } | 2133 | } |
1677 | reader->restore(); | 2134 | reader->restore(); |
1678 | // editBar->show(); | 2135 | // editBar->show(); |
1679 | reader->setFocus(); | 2136 | reader->setFocus(); |
2137 | qApp->processEvents(); | ||
2138 | reader->bDoUpdates = true; | ||
2139 | reader->update(); | ||
1680 | } | 2140 | } |
1681 | 2141 | ||
1682 | void QTReaderApp::do_settarget(const QString& _txt) | 2142 | void QTReaderApp::do_settarget(const QString& _txt) |
1683 | { | 2143 | { |
1684 | int ind = _txt.find('/'); | 2144 | int ind = _txt.find('/'); |
1685 | if (ind == -1) | 2145 | if (ind == -1) |
1686 | { | 2146 | { |
1687 | m_targetapp = ""; | 2147 | m_targetapp = ""; |
1688 | m_targetmsg = ""; | 2148 | m_targetmsg = ""; |
1689 | QMessageBox::information(this, "OpieReader", "Format is\nappname/messagename"); | 2149 | QMessageBox::information(this, PROGNAME, "Format is\nappname/messagename"); |
1690 | } | 2150 | } |
1691 | else | 2151 | else |
1692 | { | 2152 | { |
1693 | m_targetapp = _txt.left(ind); | 2153 | m_targetapp = _txt.left(ind); |
1694 | m_targetmsg = _txt.right(_txt.length()-ind-1); | 2154 | m_targetmsg = _txt.right(_txt.length()-ind-1); |
1695 | } | 2155 | } |
1696 | } | 2156 | } |
1697 | 2157 | ||
1698 | void QTReaderApp::setfont() | 2158 | void QTReaderApp::setfont() |
1699 | { | 2159 | { |
1700 | for (int i = 1; i <= m_fontSelector->count(); i++) | 2160 | for (int i = 1; i <= m_fontSelector->count(); i++) |
1701 | { | 2161 | { |
1702 | if (m_fontSelector->text(i) == reader->m_fontname) | 2162 | if (m_fontSelector->text(i) == reader->m_fontname) |
1703 | { | 2163 | { |
1704 | m_fontSelector->setCurrentItem(i); | 2164 | m_fontSelector->setCurrentItem(i); |
1705 | break; | 2165 | break; |
1706 | } | 2166 | } |
1707 | } | 2167 | } |
1708 | m_fontBar->show(); | 2168 | m_fontBar->show(); |
1709 | m_fontVisible = true; | 2169 | m_fontVisible = true; |
1710 | } | 2170 | } |
1711 | 2171 | ||
1712 | void QTReaderApp::setfontHelper(const QString& lcn, int size) | 2172 | void QTReaderApp::setfontHelper(const QString& lcn, int size = 0) |
1713 | { | 2173 | { |
1714 | if (size == 0) size = reader->m_fontControl.currentsize(); | 2174 | if (size == 0) size = reader->m_fontControl.currentsize(); |
1715 | QFont f(lcn, 10 /*, QFont::Bold*/); | 2175 | QFont f(lcn, 10 /*, QFont::Bold*/); |
2176 | qDebug("bs"); | ||
1716 | bkmkselector->setFont( f ); | 2177 | bkmkselector->setFont( f ); |
2178 | qDebug("re"); | ||
1717 | regEdit->setFont( f ); | 2179 | regEdit->setFont( f ); |
2180 | qDebug("se"); | ||
1718 | searchEdit->setFont( f ); | 2181 | searchEdit->setFont( f ); |
2182 | qDebug("aw"); | ||
1719 | m_annoWin->setFont( f ); | 2183 | m_annoWin->setFont( f ); |
1720 | reader->m_fontname = lcn; | 2184 | reader->m_fontname = lcn; |
2185 | qDebug("cf1"); | ||
1721 | if (!reader->ChangeFont(size)) | 2186 | if (!reader->ChangeFont(size)) |
1722 | { | 2187 | { |
1723 | reader->ChangeFont(size); | 2188 | qDebug("cf2"); |
2189 | reader->ChangeFont(size); | ||
1724 | } | 2190 | } |
2191 | qDebug("ref"); | ||
1725 | reader->refresh(); | 2192 | reader->refresh(); |
1726 | m_fontBar->hide(); | 2193 | m_fontBar->hide(); |
1727 | m_fontVisible = false; | 2194 | m_fontVisible = false; |
1728 | showEditTools(); | 2195 | qDebug("showedit"); |
2196 | if (reader->isVisible()) showEditTools(); | ||
2197 | qDebug("showeditdone"); | ||
1729 | } | 2198 | } |
1730 | 2199 | ||
1731 | void QTReaderApp::do_setfont(const QString& lcn) | 2200 | void QTReaderApp::do_setfont(const QString& lcn) |
1732 | { | 2201 | { |
1733 | setfontHelper(lcn); | 2202 | setfontHelper(lcn); |
1734 | } | 2203 | } |
1735 | 2204 | ||
1736 | void QTReaderApp::do_autogen(const QString& regText) | 2205 | void QTReaderApp::do_autogen(const QString& regText) |
1737 | { | 2206 | { |
1738 | unsigned long fs, ts; | 2207 | unsigned long fs, ts; |
1739 | reader->sizes(fs,ts); | 2208 | reader->sizes(fs,ts); |
1740 | // qDebug("Reg:%s\n", (const tchar*)(regEdit->text())); | 2209 | // qDebug("Reg:%s\n", (const tchar*)(regEdit->text())); |
1741 | m_autogenstr = regText; | 2210 | m_autogenstr = regText; |
1742 | QRegExp re(regText); | 2211 | QRegExp re(regText); |
1743 | CBuffer buff; | 2212 | CBuffer buff; |
1744 | if (pBkmklist != NULL) delete pBkmklist; | 2213 | if (pBkmklist != NULL) delete pBkmklist; |
1745 | pBkmklist = new CList<Bkmk>; | 2214 | pBkmklist = new CList<Bkmk>; |
1746 | m_fBkmksChanged = true; | 2215 | m_fBkmksChanged = true; |
1747 | pbar->show(); | 2216 | pbar->show(); |
1748 | pbar->resize(width(), editBar->height()); | 2217 | pbar->resize(width(), editBar->height()); |
1749 | pbar->reset(); | 2218 | pbar->reset(); |
1750 | qApp->processEvents(); | 2219 | qApp->processEvents(); |
1751 | reader->setFocus(); | 2220 | reader->setFocus(); |
1752 | reader->jumpto(0); | 2221 | reader->jumpto(0); |
1753 | int lastpc = 0; | 2222 | int lastpc = 0; |
1754 | int i = 0; | 2223 | int i = 0; |
1755 | while (i >= 0) | 2224 | while (i >= 0) |
1756 | { | 2225 | { |
1757 | unsigned int lcn = reader->locate(); | 2226 | unsigned int lcn = reader->locate(); |
1758 | int pc = (100*lcn)/ts; | 2227 | int pc = (100*lcn)/ts; |
1759 | if (pc != lastpc) | 2228 | if (pc != lastpc) |
1760 | { | 2229 | { |
1761 | pbar->setProgress(pc); | 2230 | pbar->setProgress(pc); |
1762 | qApp->processEvents(); | 2231 | qApp->processEvents(); |
1763 | if (reader->locate() != lcn) reader->jumpto(lcn); | 2232 | if (reader->locate() != lcn) reader->jumpto(lcn); |
1764 | reader->setFocus(); | 2233 | reader->setFocus(); |
1765 | lastpc = pc; | 2234 | lastpc = pc; |
1766 | } | 2235 | } |
1767 | i = reader->buffdoc.getpara(buff); | 2236 | i = reader->buffdoc.getpara(buff); |
1768 | #ifdef _UNICODE | 2237 | #ifdef _UNICODE |
1769 | if (re.match(toQString(buff.data())) != -1) | 2238 | if (re.match(toQString(buff.data())) != -1) |
1770 | #else | 2239 | #else |
1771 | if (re.match(buff.data()) != -1) | 2240 | if (re.match(buff.data()) != -1) |
1772 | #endif | 2241 | #endif |
1773 | pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn)); | 2242 | pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn)); |
1774 | } | 2243 | } |
1775 | pBkmklist->sort(); | 2244 | pBkmklist->sort(); |
1776 | pbar->setProgress(100); | 2245 | pbar->setProgress(100); |
1777 | qApp->processEvents(); | 2246 | qApp->processEvents(); |
1778 | pbar->hide(); | 2247 | pbar->hide(); |
1779 | } | 2248 | } |
1780 | 2249 | ||
1781 | void QTReaderApp::saveprefs() | 2250 | void QTReaderApp::saveprefs() |
1782 | { | 2251 | { |
1783 | // reader->saveprefs("uqtreader"); | 2252 | // reader->saveprefs("uqtreader"); |
1784 | Config config( "uqtreader" ); | 2253 | Config config( APPDIR ); |
1785 | config.setGroup( "View" ); | 2254 | config.setGroup( "View" ); |
1786 | 2255 | ||
1787 | reader->m_lastposn = reader->pagelocate(); | 2256 | reader->m_lastposn = reader->pagelocate(); |
1788 | 2257 | ||
1789 | config.writeEntry( "StripCr", reader->bstripcr ); | 2258 | config.writeEntry( "StripCr", reader->bstripcr ); |
1790 | config.writeEntry( "AutoFmt", reader->bautofmt ); | 2259 | config.writeEntry( "AutoFmt", reader->bautofmt ); |
1791 | config.writeEntry( "TextFmt", reader->btextfmt ); | 2260 | config.writeEntry( "TextFmt", reader->btextfmt ); |
1792 | config.writeEntry( "StripHtml", reader->bstriphtml ); | 2261 | config.writeEntry( "StripHtml", reader->bstriphtml ); |
1793 | config.writeEntry( "Dehyphen", reader->bdehyphen ); | 2262 | config.writeEntry( "Dehyphen", reader->bdehyphen ); |
2263 | config.writeEntry( "OneSpace", reader->bonespace ); | ||
1794 | config.writeEntry( "Unindent", reader->bunindent ); | 2264 | config.writeEntry( "Unindent", reader->bunindent ); |
1795 | config.writeEntry( "Repara", reader->brepara ); | 2265 | config.writeEntry( "Repara", reader->brepara ); |
1796 | config.writeEntry( "DoubleSpace", reader->bdblspce ); | 2266 | config.writeEntry( "DoubleSpace", reader->bdblspce ); |
1797 | config.writeEntry( "Indent", reader->bindenter ); | 2267 | config.writeEntry( "Indent", reader->bindenter ); |
1798 | config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) ); | 2268 | config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) ); |
1799 | config.writeEntry( "ScrollDelay", reader->m_delay); | 2269 | config.writeEntry( "ScrollDelay", reader->m_delay); |
1800 | config.writeEntry( "LastFile", reader->m_lastfile ); | 2270 | config.writeEntry( "LastFile", reader->m_lastfile ); |
1801 | config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); | 2271 | config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); |
1802 | config.writeEntry( "PageMode", reader->m_bpagemode ); | 2272 | config.writeEntry( "PageMode", reader->m_bpagemode ); |
2273 | config.writeEntry( "CursorNavigation", reader->m_navkeys ); | ||
1803 | config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); | 2274 | config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); |
1804 | config.writeEntry( "Fontname", reader->m_fontname ); | 2275 | config.writeEntry( "Fontname", reader->m_fontname ); |
1805 | config.writeEntry( "Encoding", reader->m_encd ); | 2276 | config.writeEntry( "Encoding", reader->m_encd ); |
1806 | config.writeEntry( "CharSpacing", reader->m_charpc ); | 2277 | config.writeEntry( "CharSpacing", reader->m_charpc ); |
1807 | config.writeEntry( "Overlap", (int)(reader->m_overlap) ); | 2278 | config.writeEntry( "Overlap", (int)(reader->m_overlap) ); |
1808 | config.writeEntry( "TargetApp", m_targetapp ); | 2279 | config.writeEntry( "TargetApp", m_targetapp ); |
1809 | config.writeEntry( "TargetMsg", m_targetmsg ); | 2280 | config.writeEntry( "TargetMsg", m_targetmsg ); |
1810 | config.writeEntry( "TwoTouch", m_twoTouch ); | 2281 | config.writeEntry( "TwoTouch", m_twoTouch ); |
1811 | config.writeEntry( "Annotation", m_doAnnotation); | 2282 | config.writeEntry( "Annotation", m_doAnnotation); |
1812 | config.writeEntry( "Dictionary", m_doDictionary); | 2283 | config.writeEntry( "Dictionary", m_doDictionary); |
1813 | config.writeEntry( "Clipboard", m_doClipboard); | 2284 | config.writeEntry( "Clipboard", m_doClipboard); |
1814 | config.writeEntry( "SpaceTarget", m_spaceTarget); | 2285 | config.writeEntry( "SpaceTarget", m_spaceTarget); |
2286 | #ifdef REPALM | ||
2287 | config.writeEntry( "Repalm", reader->brepalm ); | ||
2288 | #endif | ||
1815 | config.writeEntry( "Remap", reader->bremap ); | 2289 | config.writeEntry( "Remap", reader->bremap ); |
1816 | config.writeEntry( "Peanut", reader->bpeanut ); | 2290 | config.writeEntry( "Peanut", reader->bpeanut ); |
1817 | config.writeEntry( "MakeBold", reader->bmakebold ); | 2291 | config.writeEntry( "MakeBold", reader->bmakebold ); |
2292 | config.writeEntry( "Continuous", reader->m_continuousDocument ); | ||
2293 | |||
2294 | savefilelist(); | ||
1818 | } | 2295 | } |
1819 | 2296 | ||
1820 | void QTReaderApp::indentplus() | 2297 | void QTReaderApp::indentplus() |
1821 | { | 2298 | { |
1822 | reader->indentplus(); | 2299 | reader->indentplus(); |
1823 | } | 2300 | } |
1824 | 2301 | ||
1825 | void QTReaderApp::indentminus() | 2302 | void QTReaderApp::indentminus() |
1826 | { | 2303 | { |
1827 | reader->indentminus(); | 2304 | reader->indentminus(); |
1828 | } | 2305 | } |
1829 | 2306 | ||
1830 | /* | 2307 | /* |
1831 | void QTReaderApp::oldFile() | 2308 | void QTReaderApp::oldFile() |
1832 | { | 2309 | { |
1833 | qDebug("oldFile called"); | 2310 | qDebug("oldFile called"); |
1834 | reader->setText(true); | 2311 | reader->setText(true); |
1835 | qDebug("settext called"); | 2312 | qDebug("settext called"); |
1836 | showEditTools(); | 2313 | showEditTools(); |
1837 | qDebug("showedit called"); | 2314 | qDebug("showedit called"); |
1838 | } | 2315 | } |
1839 | */ | 2316 | */ |
1840 | 2317 | ||
1841 | /* | 2318 | /* |
1842 | void info_cb(Fl_Widget* o, void* _data) | 2319 | void info_cb(Fl_Widget* o, void* _data) |
1843 | { | 2320 | { |
1844 | 2321 | ||
1845 | if (infowin == NULL) | 2322 | if (infowin == NULL) |
1846 | { | 2323 | { |
1847 | 2324 | ||
1848 | infowin = new Fl_Window(160,240); | 2325 | infowin = new Fl_Window(160,240); |
1849 | filename = new Fl_Output(45,5,110,14,"Filename"); | 2326 | filename = new Fl_Output(45,5,110,14,"Filename"); |
1850 | filesize = new Fl_Output(45,25,110,14,"Filesize"); | 2327 | filesize = new Fl_Output(45,25,110,14,"Filesize"); |
1851 | textsize = new Fl_Output(45,45,110,14,"Textsize"); | 2328 | textsize = new Fl_Output(45,45,110,14,"Textsize"); |
1852 | comprat = new CBar(45,65,110,14,"Ratio %"); | 2329 | comprat = new CBar(45,65,110,14,"Ratio %"); |
1853 | posn = new Fl_Output(45,85,110,14,"Location"); | 2330 | posn = new Fl_Output(45,85,110,14,"Location"); |
1854 | frcn = new CBar(45,105,110,14,"% Read"); | 2331 | frcn = new CBar(45,105,110,14,"% Read"); |
1855 | about = new Fl_Multiline_Output(5,125,150,90); | 2332 | about = new Fl_Multiline_Output(5,125,150,90); |
1856 | about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files"); | 2333 | about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files"); |
1857 | Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay"); | 2334 | Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay"); |
1858 | infowin->set_modal(); | 2335 | infowin->set_modal(); |
1859 | } | 2336 | } |
1860 | if (((reader_ui *)_data)->g_filename[0] != '\0') | 2337 | if (((reader_ui *)_data)->g_filename[0] != '\0') |
1861 | { | 2338 | { |
1862 | unsigned long fs,ts; | 2339 | unsigned long fs,ts; |
1863 | tchar sz[20]; | 2340 | tchar sz[20]; |
1864 | ((reader_ui *)_data)->input->sizes(fs,ts); | 2341 | ((reader_ui *)_data)->input->sizes(fs,ts); |
1865 | unsigned long pl = ((reader_ui *)_data)->input->locate(); | 2342 | unsigned long pl = ((reader_ui *)_data)->input->locate(); |
1866 | 2343 | ||
1867 | filename->value(((reader_ui *)_data)->g_filename); | 2344 | filename->value(((reader_ui *)_data)->g_filename); |
1868 | 2345 | ||
1869 | sprintf(sz,"%u",fs); | 2346 | sprintf(sz,"%u",fs); |
1870 | filesize->value(sz); | 2347 | filesize->value(sz); |
1871 | 2348 | ||
1872 | sprintf(sz,"%u",ts); | 2349 | sprintf(sz,"%u",ts); |
1873 | textsize->value(sz); | 2350 | textsize->value(sz); |
1874 | 2351 | ||
1875 | comprat->value(100-(100*fs + (ts >> 1))/ts); | 2352 | comprat->value(100-(100*fs + (ts >> 1))/ts); |
1876 | 2353 | ||
1877 | sprintf(sz,"%u",pl); | 2354 | sprintf(sz,"%u",pl); |
1878 | posn->value(sz); | 2355 | posn->value(sz); |
1879 | 2356 | ||
1880 | frcn->value((100*pl + (ts >> 1))/ts); | 2357 | frcn->value((100*pl + (ts >> 1))/ts); |
1881 | } | 2358 | } |
1882 | infowin->show(); | 2359 | infowin->show(); |
1883 | } | 2360 | } |
1884 | */ | 2361 | */ |
1885 | 2362 | ||
1886 | void QTReaderApp::savebkmks() | 2363 | void QTReaderApp::savebkmks() |
1887 | { | 2364 | { |
1888 | if (pBkmklist != NULL) | 2365 | if (pBkmklist != NULL) |
1889 | { | 2366 | { |
1890 | BkmkFile bf((const char *)Global::applicationFileName("uqtreader",reader->m_string), true); | 2367 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR, reader->m_string), true); |
1891 | bf.write(*pBkmklist); | 2368 | bf.write(*pBkmklist); |
2369 | } | ||
2370 | m_fBkmksChanged = false; | ||
2371 | } | ||
2372 | |||
2373 | void QTReaderApp::readfilelist() | ||
2374 | { | ||
2375 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR, ".openfiles")); | ||
2376 | qDebug("Reading open files"); | ||
2377 | pOpenlist = bf.readall(); | ||
2378 | if (pOpenlist != NULL) qDebug("...with success"); | ||
2379 | else qDebug("...without success!"); | ||
2380 | } | ||
2381 | |||
2382 | void QTReaderApp::savefilelist() | ||
2383 | { | ||
2384 | if (pOpenlist != NULL) | ||
2385 | { | ||
2386 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR, ".openfiles"), true); | ||
2387 | qDebug("Writing open files"); | ||
2388 | bf.write(*pOpenlist); | ||
1892 | } | 2389 | } |
1893 | m_fBkmksChanged = false; | ||
1894 | } | 2390 | } |
1895 | 2391 | ||
1896 | void QTReaderApp::readbkmks() | 2392 | void QTReaderApp::readbkmks() |
1897 | { | 2393 | { |
1898 | if (pBkmklist != NULL) | 2394 | if (pBkmklist != NULL) |
1899 | { | 2395 | { |
1900 | delete pBkmklist; | 2396 | delete pBkmklist; |
2397 | } | ||
2398 | struct stat fnstat; | ||
2399 | struct stat bkstat; | ||
2400 | if ( | ||
2401 | stat((const char *)reader->m_lastfile, &fnstat) == 0 | ||
2402 | && | ||
2403 | stat((const char *)Global::applicationFileName(APPDIR, reader->m_string), &bkstat) == 0 | ||
2404 | ) | ||
2405 | { | ||
2406 | if (bkstat.st_mtime < fnstat.st_mtime) | ||
2407 | { | ||
2408 | unlink((const char *)Global::applicationFileName(APPDIR, reader->m_string)); | ||
2409 | } | ||
1901 | } | 2410 | } |
1902 | BkmkFile bf((const char *)Global::applicationFileName("uqtreader",reader->m_string)); | 2411 | |
2412 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR, reader->m_string)); | ||
2413 | |||
1903 | pBkmklist = bf.readall(); | 2414 | pBkmklist = bf.readall(); |
1904 | m_fBkmksChanged = bf.upgraded(); | 2415 | m_fBkmksChanged = bf.upgraded(); |
1905 | if (pBkmklist == NULL) | 2416 | if (pBkmklist == NULL) |
1906 | { | 2417 | { |
1907 | pBkmklist = reader->getbkmklist(); | 2418 | pBkmklist = reader->getbkmklist(); |
1908 | } | 2419 | } |
1909 | if (pBkmklist != NULL) | 2420 | if (pBkmklist != NULL) |
1910 | pBkmklist->sort(); | 2421 | pBkmklist->sort(); |
1911 | } | 2422 | } |
1912 | 2423 | ||
1913 | void QTReaderApp::addbkmk() | 2424 | void QTReaderApp::addbkmk() |
1914 | { | 2425 | { |
1915 | m_nRegAction = cAddBkmk; | 2426 | m_nRegAction = cAddBkmk; |
1916 | regEdit->setText(reader->firstword()); | 2427 | regEdit->setText(reader->firstword()); |
1917 | do_regedit(); | 2428 | do_regedit(); |
1918 | } | 2429 | } |
1919 | 2430 | ||
1920 | void QTReaderApp::do_addbkmk(const QString& text) | 2431 | void QTReaderApp::do_addbkmk(const QString& text) |
1921 | { | 2432 | { |
1922 | if (text.isEmpty()) | 2433 | if (text.isEmpty()) |
1923 | { | 2434 | { |
1924 | QMessageBox::information(this, "OpieReader", "Need a name for the bookmark\nSelect add again", 1); | 2435 | QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nSelect add again", 1); |
1925 | } | 2436 | } |
1926 | else | 2437 | else |
1927 | { | 2438 | { |
1928 | if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; | 2439 | if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; |
1929 | #ifdef _UNICODE | 2440 | #ifdef _UNICODE |
1930 | CBuffer buff; | 2441 | CBuffer buff; |
1931 | int i = 0; | 2442 | int i = 0; |
1932 | for (i = 0; i < text.length(); i++) | 2443 | for (i = 0; i < text.length(); i++) |
1933 | { | 2444 | { |
1934 | buff[i] = text[i].unicode(); | 2445 | buff[i] = text[i].unicode(); |
1935 | } | 2446 | } |
1936 | buff[i] = 0; | 2447 | buff[i] = 0; |
1937 | pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate())); | 2448 | pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate())); |
1938 | #else | 2449 | #else |
1939 | pBkmklist->push_front(Bkmk((const tchar*)text,reader->pagelocate())); | 2450 | pBkmklist->push_front(Bkmk((const tchar*)text, reader->pagelocate())); |
1940 | #endif | 2451 | #endif |
1941 | m_fBkmksChanged = true; | 2452 | m_fBkmksChanged = true; |
1942 | pBkmklist->sort(); | 2453 | pBkmklist->sort(); |
1943 | } | 2454 | } |
1944 | } | 2455 | } |
1945 | 2456 | ||
1946 | void QTReaderApp::OnRedraw() | 2457 | void QTReaderApp::OnRedraw() |
1947 | { | 2458 | { |
1948 | if (pBkmklist != NULL) | 2459 | if (pBkmklist != NULL) |
1949 | { | 2460 | { |
1950 | bool found = findNextBookmark(reader->pagelocate()); | 2461 | bool found = findNextBookmark(reader->pagelocate()); |
1951 | m_bkmkAvail->setEnabled(found); | 2462 | m_bkmkAvail->setEnabled(found); |
1952 | } | 2463 | } |
1953 | } | 2464 | } |
1954 | 2465 | ||
1955 | void QTReaderApp::showAnnotation() | 2466 | void QTReaderApp::showAnnotation() |
1956 | { | 2467 | { |
1957 | m_annoWin->setName(toQString(m_anno->name())); | 2468 | m_annoWin->setName(toQString(m_anno->name())); |
1958 | m_annoWin->setAnno(toQString(m_anno->anno())); | 2469 | m_annoWin->setAnno(toQString(m_anno->anno())); |
1959 | m_annoIsEditing = false; | 2470 | m_annoIsEditing = false; |
2471 | Global::showInputMethod(); | ||
1960 | editorStack->raiseWidget( m_annoWin ); | 2472 | editorStack->raiseWidget( m_annoWin ); |
1961 | m_annoWin->setFocus(); | 2473 | m_annoWin->setFocus(); |
1962 | } | 2474 | } |
1963 | 2475 | ||
1964 | void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, const QString& line) | 2476 | void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, const QString& line) |
1965 | { | 2477 | { |
1966 | // qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd); | 2478 | // qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd); |
1967 | 2479 | ||
1968 | if (m_doClipboard) | 2480 | if (m_doClipboard) |
1969 | { | 2481 | { |
1970 | QClipboard* cb = QApplication::clipboard(); | 2482 | QClipboard* cb = QApplication::clipboard(); |
1971 | cb->setText(wrd); | 2483 | cb->setText(wrd); |
1972 | if (wrd.length() > 10) | 2484 | if (wrd.length() > 10) |
1973 | { | 2485 | { |
1974 | Global::statusMessage(wrd.left(8) + ".."); | 2486 | Global::statusMessage(wrd.left(8) + ".."); |
1975 | } | 2487 | } |
1976 | else | 2488 | else |
1977 | { | 2489 | { |
1978 | Global::statusMessage(wrd); | 2490 | Global::statusMessage(wrd); |
1979 | } | 2491 | } |
1980 | } | 2492 | } |
1981 | if (m_doAnnotation) | 2493 | if (m_doAnnotation) |
1982 | { | 2494 | { |
1983 | // addAnno(wrd, "Need to be able to edit this", posn); | 2495 | //addAnno(wrd, "Need to be able to edit this", posn); |
1984 | m_annoWin->setName(line); | 2496 | m_annoWin->setName(line); |
1985 | m_annoWin->setAnno(""); | 2497 | m_annoWin->setAnno(""); |
1986 | m_annoWin->setPosn(posn); | 2498 | m_annoWin->setPosn(posn); |
1987 | m_annoIsEditing = true; | 2499 | m_annoIsEditing = true; |
1988 | editorStack->raiseWidget( m_annoWin ); | 2500 | Global::showInputMethod(); |
2501 | editorStack->raiseWidget( m_annoWin ); | ||
1989 | } | 2502 | } |
1990 | if (m_doDictionary) | 2503 | if (m_doDictionary) |
1991 | { | 2504 | { |
1992 | if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty()) | 2505 | if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty()) |
1993 | { | 2506 | { |
1994 | QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8()); | 2507 | QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8()); |
1995 | e << wrd; | 2508 | e << wrd; |
1996 | } | 2509 | } |
1997 | } | 2510 | } |
1998 | } | 2511 | } |
1999 | 2512 | ||
2000 | void QTReaderApp::OnActionPressed() | 2513 | void QTReaderApp::OnActionPressed() |
2001 | { | 2514 | { |
2002 | switch (m_spaceTarget) | 2515 | switch (m_spaceTarget) |
2003 | { | 2516 | { |
2004 | case cesOpenFile: | 2517 | case cesOpenFile: |
2005 | { | 2518 | { |
2006 | fileOpen(); | 2519 | fileOpen(); |
2007 | } | 2520 | } |
2008 | break; | 2521 | break; |
2009 | case cesAutoScroll: | 2522 | case cesAutoScroll: |
2010 | { | 2523 | { |
2011 | reader->setautoscroll(!reader->m_autoScroll); | 2524 | reader->setautoscroll(!reader->m_autoScroll); |
2012 | setScrollState(reader->m_autoScroll); | 2525 | setScrollState(reader->m_autoScroll); |
2013 | } | 2526 | } |
2014 | break; | 2527 | break; |
2015 | case cesActionMark: | 2528 | case cesActionMark: |
2016 | { | 2529 | { |
2017 | addbkmk(); | 2530 | addbkmk(); |
2018 | } | 2531 | } |
2019 | break; | 2532 | break; |
2020 | default: | 2533 | case cesFullScreen: |
2021 | { | 2534 | { |
2022 | qDebug("Unknown ActionType:%u", m_spaceTarget); | 2535 | m_actFullscreen->setOn(true); |
2023 | } | 2536 | } |
2024 | break; | 2537 | break; |
2538 | default: | ||
2539 | { | ||
2540 | qDebug("Unknown ActionType:%u", m_spaceTarget); | ||
2541 | } | ||
2542 | break; | ||
2025 | } | 2543 | } |
2026 | } | 2544 | } |
2027 | 2545 | ||
2028 | void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); } | 2546 | void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); } |
2029 | void QTReaderApp::restoreFocus() { reader->setFocus(); } | 2547 | void QTReaderApp::restoreFocus() { reader->setFocus(); } |
2548 | |||
2549 | /* | ||
2550 | void QTReaderApp::setstate(unsigned char* _sd, unsigned short _sdlen) | ||
2551 | { | ||
2552 | unsigned short sdlen; | ||
2553 | memcpy(&sdlen, _sd, sizeof(sdlen)); | ||
2554 | sdlen -= sizeof(sdlen); | ||
2555 | _sd += sizeof(sdlen); | ||
2556 | statedata* sd; | ||
2557 | char* data; | ||
2558 | if (sdlen < sizeof(statedata)+1) | ||
2559 | { | ||
2560 | sdlen = sizeof(statedata)+1; | ||
2561 | } | ||
2562 | data = new char[sdlen]; | ||
2563 | sd = (statedata*)data; | ||
2564 | memcpy(sd, _sd, sdlen); | ||
2565 | data[sdlen] = 0; | ||
2566 | reader->setstate(*sd); | ||
2567 | delete [] data; | ||
2568 | } | ||
2569 | |||
2570 | void QTReaderApp::getstate(unsigned char*& data, unsigned short& len) | ||
2571 | { | ||
2572 | unsigned char* olddata = data; | ||
2573 | unsigned short oldlen = len; | ||
2574 | len = oldlen+sizeof(unsigned short)+sizeof(statedata)+reader->m_fontname.length(); | ||
2575 | data = new unsigned char[len]; | ||
2576 | memcpy(data, olddata, oldlen); | ||
2577 | delete [] olddata; | ||
2578 | memcpy(data+oldlen, &len, sizeof(len)); | ||
2579 | statedata* sd = (statedata*)(data+oldlen+sizeof(unsigned short)); | ||
2580 | |||
2581 | sd->bstripcr = reader->bstripcr; | ||
2582 | sd->btextfmt = reader->btextfmt; | ||
2583 | sd->bautofmt = reader->bautofmt; | ||
2584 | sd->bstriphtml = reader->bstriphtml; | ||
2585 | sd->bpeanut = reader->bpeanut; | ||
2586 | sd->bdehyphen = reader->bdehyphen; | ||
2587 | sd->bonespace = reader->bonespace; | ||
2588 | sd->bunindent = reader->bunindent; | ||
2589 | sd->brepara = reader->brepara; | ||
2590 | sd->bdblspce = reader->bdblspce; | ||
2591 | sd->m_bpagemode = reader->m_bpagemode; | ||
2592 | sd->m_navkeys = reader->m_navkeys; | ||
2593 | sd->m_bMonoSpaced = reader->m_bMonoSpaced; | ||
2594 | sd->bremap = reader->bremap; | ||
2595 | sd->bmakebold = reader->bmakebold; | ||
2596 | sd->Continuous = reader->m_continuousDocument; | ||
2597 | #ifdef REPALM | ||
2598 | sd->brepalm = reader->brepalm; | ||
2599 | #endif | ||
2600 | sd->bindenter = reader->bindenter; | ||
2601 | sd->m_textsize = reader->m_textsize; //reader->m_fontControl.currentsize() | ||
2602 | sd->m_encd = reader->m_encd; | ||
2603 | sd->m_charpc = reader->m_charpc; | ||
2604 | strcpy(sd->m_fontname, reader->m_fontname.latin1()); | ||
2605 | } | ||
2606 | */ | ||
diff --git a/noncore/apps/opie-reader/QTReaderApp.h b/noncore/apps/opie-reader/QTReaderApp.h index 22c57e4..cb33e4a 100644 --- a/noncore/apps/opie-reader/QTReaderApp.h +++ b/noncore/apps/opie-reader/QTReaderApp.h | |||
@@ -1,263 +1,291 @@ | |||
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 __ISEARCH | 23 | //#define __ISEARCH |
24 | 24 | ||
25 | #define MAX_ENCODING 6 | 25 | #define MAX_ENCODING 6 |
26 | #define MAX_ACTIONS 3 | 26 | #define MAX_ACTIONS 4 |
27 | 27 | ||
28 | #include <qmainwindow.h> | 28 | #include <qmainwindow.h> |
29 | #include "CExpander.h" | 29 | #include "CExpander.h" |
30 | #include <qlist.h> | 30 | #include <qlist.h> |
31 | #include <qpe/filemanager.h> | 31 | #include <qpe/filemanager.h> |
32 | #include <qmap.h> | 32 | #include <qmap.h> |
33 | #include <qlineedit.h> | 33 | #include <qlineedit.h> |
34 | #include <qstack.h> | 34 | #include <qstack.h> |
35 | #include <qlistbox.h> | 35 | #include <qlistbox.h> |
36 | //#include "Queue.h" | 36 | //#include "Queue.h" |
37 | 37 | ||
38 | class QWidgetStack; | 38 | class QWidgetStack; |
39 | class QToolButton; | 39 | class QToolButton; |
40 | class QPopupMenu; | 40 | class QPopupMenu; |
41 | class QToolBar; | 41 | class QToolBar; |
42 | class QPEToolBar; | 42 | //class QPEToolBar; |
43 | class CBkmkSelector; | 43 | class CBkmkSelector; |
44 | class QProgressBar; | 44 | class QProgressBar; |
45 | class QAction; | 45 | class QAction; |
46 | class CAnnoEdit; | 46 | class CAnnoEdit; |
47 | class QFloatBar; | 47 | class QFloatBar; |
48 | class CDrawBuffer; | 48 | class CDrawBuffer; |
49 | class QTReader; | 49 | class QTReader; |
50 | class QPixmap; | ||
50 | 51 | ||
51 | enum ActionTypes | 52 | enum ActionTypes |
52 | { | 53 | { |
53 | cesOpenFile = 0, | 54 | cesOpenFile = 0, |
54 | cesAutoScroll, | 55 | cesAutoScroll, |
55 | cesActionMark | 56 | cesActionMark, |
57 | cesFullScreen | ||
56 | }; | 58 | }; |
57 | 59 | ||
58 | #ifdef __ISEARCH | 60 | #ifdef __ISEARCH |
59 | struct searchrecord | 61 | struct searchrecord |
60 | { | 62 | { |
61 | QString s; | 63 | QString s; |
62 | size_t pos; | 64 | size_t pos; |
63 | searchrecord(const QString& _s, size_t _pos) : s(_s), pos(_pos) {} | 65 | searchrecord(const QString& _s, size_t _pos) : s(_s), pos(_pos) {} |
64 | }; | 66 | }; |
65 | #endif | 67 | #endif |
66 | 68 | ||
67 | class infowin; | 69 | class infowin; |
70 | class GraphicWin; | ||
68 | 71 | ||
69 | class QTReaderApp : public QMainWindow | 72 | class QTReaderApp : public QMainWindow |
70 | { | 73 | { |
71 | Q_OBJECT | 74 | Q_OBJECT |
72 | 75 | ||
73 | unsigned long m_savedpos; | 76 | unsigned long m_savedpos; |
74 | bool m_annoIsEditing; | 77 | bool m_annoIsEditing; |
75 | 78 | ||
76 | public: | 79 | public: |
77 | QTReaderApp( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); | 80 | QTReaderApp( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); |
78 | ~QTReaderApp(); | 81 | ~QTReaderApp(); |
79 | 82 | void suspend(); | |
80 | void openFile( const QString & ); | 83 | void openFile( const QString & ); |
81 | 84 | ||
82 | void setScrollState(bool _b); | 85 | void setScrollState(bool _b); |
83 | 86 | ||
84 | protected: | 87 | protected: |
85 | void setfontHelper(const QString& lcn, int size = 0); | 88 | void setfontHelper(const QString& lcn, int size = 0); |
86 | QAction* m_bkmkAvail; | 89 | QAction* m_bkmkAvail, *m_actFullscreen; |
87 | CAnnoEdit* m_annoWin; | 90 | CAnnoEdit* m_annoWin; |
88 | Bkmk* m_anno; | 91 | Bkmk* m_anno; |
92 | // void resizeEvent(QResizeEvent* e); | ||
93 | void keyPressEvent(QKeyEvent* e); | ||
89 | void closeEvent( QCloseEvent *e ); | 94 | void closeEvent( QCloseEvent *e ); |
90 | void readbkmks(); | 95 | void readbkmks(); |
91 | void do_mono(const QString&); | 96 | void do_mono(const QString&); |
92 | void do_jump(const QString&); | 97 | void do_jump(const QString&); |
93 | void do_overlap(const QString&); | 98 | void do_overlap(const QString&); |
94 | void do_settarget(const QString&); | 99 | void do_settarget(const QString&); |
95 | int EncNameToInt(const QString&); | 100 | int EncNameToInt(const QString&); |
96 | ActionTypes ActNameToInt(const QString&); | 101 | ActionTypes ActNameToInt(const QString&); |
97 | bool m_doAnnotation; | 102 | bool m_doAnnotation; |
98 | bool m_doDictionary; | 103 | bool m_doDictionary; |
99 | bool m_doClipboard; | 104 | bool m_doClipboard; |
105 | bool m_fullscreen; | ||
100 | 106 | ||
101 | public: | 107 | public: |
102 | void saveprefs(); | 108 | void saveprefs(); |
103 | private slots: | 109 | private slots: |
110 | void zoomin(); | ||
111 | void zoomout(); | ||
112 | void setfullscreen(bool sfs); | ||
113 | void setcontinuous(bool sfs); | ||
104 | void setTwoTouch(bool _b); | 114 | void setTwoTouch(bool _b); |
105 | void restoreFocus(); | 115 | void restoreFocus(); |
106 | void OnAnnotation(bool _b) | 116 | void OnAnnotation(bool _b) |
107 | { | 117 | { |
108 | m_doAnnotation = _b; | 118 | m_doAnnotation = _b; |
109 | } | 119 | } |
110 | void OnDictionary(bool _b) | 120 | void OnDictionary(bool _b) |
111 | { | 121 | { |
112 | m_doDictionary = _b; | 122 | m_doDictionary = _b; |
113 | } | 123 | } |
114 | void OnClipboard(bool _b) | 124 | void OnClipboard(bool _b) |
115 | { | 125 | { |
116 | m_doClipboard = _b; | 126 | m_doClipboard = _b; |
117 | } | 127 | } |
118 | void OnWordSelected(const QString&, size_t, const QString&); | 128 | void OnWordSelected(const QString&, size_t, const QString&); |
129 | void showgraphic(QPixmap&); | ||
119 | void addAnno(const QString&, const QString&, size_t); | 130 | void addAnno(const QString&, const QString&, size_t); |
120 | void addAnno(const QString&, const QString&); | 131 | void addAnno(const QString&, const QString&); |
121 | void addanno(); | 132 | void addanno(); |
122 | void showAnnotation(); | 133 | void showAnnotation(); |
123 | void do_setfont(const QString&); | 134 | void do_setfont(const QString&); |
124 | void encodingSelected(QAction*); | 135 | void encodingSelected(QAction*); |
125 | void buttonActionSelected(QAction*); | 136 | void buttonActionSelected(QAction*); |
126 | void msgHandler(const QCString&, const QByteArray&); | 137 | void msgHandler(const QCString&, const QByteArray&); |
127 | void monospace(bool); | 138 | void monospace(bool); |
128 | void jump(); | 139 | void jump(); |
129 | void setoverlap(); | 140 | void setoverlap(); |
130 | void settarget(); | 141 | void settarget(); |
131 | void setspacing(); | 142 | void setspacing(); |
132 | void setfont(); | 143 | void setfont(); |
133 | void clearBkmkList(); | 144 | void clearBkmkList(); |
134 | void listBkmkFiles(); | 145 | void listBkmkFiles(); |
135 | void editMark(); | 146 | void editMark(); |
136 | void autoScroll(bool); | 147 | void autoScroll(bool); |
137 | void addbkmk(); | 148 | void addbkmk(); |
138 | void savebkmks(); | 149 | void savebkmks(); |
139 | //void importFiles(); | 150 | //void importFiles(); |
140 | void infoClose(); | 151 | void infoClose(); |
141 | // void oldFile(); | 152 | // void oldFile(); |
142 | void showinfo(); | 153 | void showinfo(); |
143 | void setDocument(const QString&); | 154 | void setDocument(const QString&); |
144 | void TBD(); | ||
145 | void TBDzoom(); | ||
146 | 155 | ||
147 | void indentplus(); | 156 | void indentplus(); |
148 | void indentminus(); | 157 | void indentminus(); |
149 | 158 | ||
150 | void fileOpen(); | 159 | void fileOpen(); |
160 | void fileClose(); | ||
151 | 161 | ||
152 | void editCopy(); | 162 | void editCopy(); |
153 | void editFind(); | 163 | void editFind(); |
154 | 164 | ||
155 | void pageup(); | 165 | void pageup(); |
156 | void pagedn(); | 166 | void pagedn(); |
157 | 167 | ||
158 | void findNext(); | 168 | void findNext(); |
159 | void findClose(); | 169 | void findClose(); |
160 | 170 | ||
161 | void regClose(); | 171 | void regClose(); |
162 | 172 | ||
163 | #ifdef __ISEARCH | 173 | #ifdef __ISEARCH |
164 | // void search( const QString& ); | 174 | // void search( const QString& ); |
165 | #else | 175 | #else |
166 | void search(); | 176 | void search(); |
167 | #endif | 177 | #endif |
168 | 178 | ||
169 | void openFile( const DocLnk & ); | ||
170 | void showEditTools(); | 179 | void showEditTools(); |
171 | 180 | ||
172 | void stripcr(bool); | 181 | void stripcr(bool); |
182 | void onespace(bool); | ||
183 | #ifdef REPALM | ||
184 | // void repalm(bool); | ||
185 | #endif | ||
173 | void peanut(bool _b); | 186 | void peanut(bool _b); |
174 | void remap(bool); | 187 | void remap(bool); |
175 | void embolden(bool); | 188 | void embolden(bool); |
176 | void autofmt(bool); | 189 | void autofmt(bool); |
177 | void textfmt(bool); | 190 | void textfmt(bool); |
178 | void striphtml(bool); | 191 | void striphtml(bool); |
179 | void dehyphen(bool); | 192 | void dehyphen(bool); |
180 | void unindent(bool); | 193 | void unindent(bool); |
181 | void repara(bool); | 194 | void repara(bool); |
182 | void dblspce(bool); | 195 | void dblspce(bool); |
183 | void pagemode(bool); | 196 | void pagemode(bool); |
197 | void navkeys(bool); | ||
184 | // void gotobkmk(const QString& bm); | 198 | // void gotobkmk(const QString& bm); |
185 | void gotobkmk(int); | 199 | void gotobkmk(int); |
186 | void cancelbkmk(); | 200 | void cancelbkmk(); |
187 | void do_gotomark(); | 201 | void do_gotomark(); |
188 | void do_delmark(); | 202 | void do_delmark(); |
189 | void do_autogen(); | 203 | void do_autogen(); |
190 | void do_regaction(); | 204 | void do_regaction(); |
191 | void OnRedraw(); | 205 | void OnRedraw(); |
192 | void OnActionPressed(); | 206 | void OnActionPressed(); |
193 | 207 | ||
194 | private: | 208 | private: |
209 | /* | ||
210 | void setstate(unsigned char* _sd, unsigned short _sdlen); | ||
211 | void getstate(unsigned char*& data, unsigned short& len); | ||
212 | */ | ||
213 | void fileOpen2(); | ||
214 | void readfilelist(); | ||
215 | void savefilelist(); | ||
216 | void updatefileinfo(); | ||
217 | bool openfrombkmk(Bkmk*); | ||
195 | QString m_targetapp, m_targetmsg; | 218 | QString m_targetapp, m_targetmsg; |
196 | void listbkmk(); | 219 | void listbkmk(CList<Bkmk>*, const QString& _lab = QString::null); |
220 | QString usefilebrowser(); | ||
197 | void do_regedit(); | 221 | void do_regedit(); |
198 | void colorChanged( const QColor &c ); | 222 | void colorChanged( const QColor &c ); |
199 | void clear(); | 223 | void clear(); |
200 | void updateCaption(); | 224 | void updateCaption(); |
201 | void do_autogen(const QString&); | 225 | void do_autogen(const QString&); |
202 | void do_addbkmk(const QString&); | 226 | void do_addbkmk(const QString&); |
203 | bool findNextBookmark(size_t start); | 227 | bool findNextBookmark(size_t start); |
204 | 228 | ||
205 | private: | 229 | private: |
206 | 230 | ||
207 | QAction* m_scrollButton; | 231 | QAction* m_scrollButton; |
208 | 232 | ||
209 | QAction* m_EncodingAction[MAX_ENCODING]; | 233 | QAction* m_EncodingAction[MAX_ENCODING]; |
210 | 234 | ||
211 | QAction* m_buttonAction[MAX_ACTIONS]; | 235 | QAction* m_buttonAction[MAX_ACTIONS]; |
212 | 236 | ||
213 | CBkmkSelector* bkmkselector; | 237 | CBkmkSelector* bkmkselector; |
214 | 238 | ||
215 | ActionTypes m_spaceTarget; | 239 | ActionTypes m_spaceTarget; |
216 | size_t searchStart; | 240 | size_t searchStart; |
217 | #ifdef __ISEARCH | 241 | #ifdef __ISEARCH |
218 | QStack<searchrecord>* searchStack; | 242 | QStack<searchrecord>* searchStack; |
219 | bool dosearch(size_t start, CDrawBuffer& test, const QString& arg); | 243 | bool dosearch(size_t start, CDrawBuffer& test, const QString& arg); |
220 | #else | 244 | #else |
221 | bool dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg); | 245 | bool dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg); |
222 | #endif | 246 | #endif |
223 | QWidgetStack *editorStack; | 247 | QWidgetStack *editorStack; |
224 | QTReader* reader; | 248 | QTReader* reader; |
225 | QComboBox* m_fontSelector; | 249 | QComboBox* m_fontSelector; |
226 | QPEToolBar /* *menu,*/ *editBar; | 250 | // QPEToolBar /* *menu,*/ *editBar; |
251 | QToolBar /* *menu,*/ *editBar; | ||
227 | QFloatBar *searchBar, *regBar/*, *m_fontBar*/; | 252 | QFloatBar *searchBar, *regBar/*, *m_fontBar*/; |
228 | QToolBar /* *searchBar, *regBar,*/ *m_fontBar; | 253 | QToolBar /* *searchBar, *regBar,*/ *m_fontBar; |
229 | QLineEdit *searchEdit, *regEdit; | 254 | QLineEdit *searchEdit, *regEdit; |
230 | DocLnk *doc; | ||
231 | bool searchVisible; | 255 | bool searchVisible; |
232 | bool regVisible; | 256 | bool regVisible; |
233 | bool m_fontVisible, m_twoTouch; | 257 | bool m_fontVisible, m_twoTouch; |
234 | bool bFromDocView; | 258 | bool bFromDocView; |
235 | static unsigned long m_uid; | 259 | static unsigned long m_uid; |
236 | long unsigned get_unique_id() { return m_uid++; } | 260 | long unsigned get_unique_id() { return m_uid++; } |
237 | /* | 261 | /* |
238 | void resizeEvent( QResizeEvent * r) | 262 | void resizeEvent( QResizeEvent * r) |
239 | { | 263 | { |
240 | qDebug("resize:(%u,%u)", r->oldSize().width(), r->oldSize().height()); | 264 | qDebug("resize:(%u,%u)", r->oldSize().width(), r->oldSize().height()); |
241 | qDebug("resize:(%u,%u)", r->size().width(), r->size().height()); | 265 | qDebug("resize:(%u,%u)", r->size().width(), r->size().height()); |
242 | // bgroup->move( width()-bgroup->width(), 0 ); | 266 | // bgroup->move( width()-bgroup->width(), 0 ); |
243 | } | 267 | } |
244 | */ | 268 | */ |
245 | CList<Bkmk>* pBkmklist; | 269 | CList<Bkmk>* pBkmklist; |
270 | CList<Bkmk>* pOpenlist; | ||
246 | infowin* m_infoWin; | 271 | infowin* m_infoWin; |
272 | GraphicWin* m_graphicwin; | ||
247 | QProgressBar* pbar; | 273 | QProgressBar* pbar; |
248 | bool m_fBkmksChanged; | 274 | bool m_fBkmksChanged; |
249 | int m_nRegAction; | 275 | int m_nRegAction; |
250 | QString m_autogenstr; | 276 | QString m_autogenstr; |
251 | bool m_dontSave; | 277 | bool m_dontSave; |
252 | }; | 278 | }; |
253 | 279 | ||
254 | const int cAutoGen = 0; | 280 | const int cAutoGen = 0; |
255 | const int cAddBkmk = 1; | 281 | const int cAddBkmk = 1; |
256 | const int cDelBkmk = 2; | 282 | const int cDelBkmk = 2; |
257 | const int cGotoBkmk = 3; | 283 | const int cGotoBkmk = 3; |
258 | const int cRmBkmkFile = 4; | 284 | const int cRmBkmkFile = 4; |
259 | const int cJump = 5; | 285 | const int cJump = 5; |
260 | const int cMonoSpace = 6; | 286 | const int cMonoSpace = 6; |
261 | const int cOverlap = 7; | 287 | const int cOverlap = 7; |
262 | const int cSetTarget = 8; | 288 | const int cSetTarget = 8; |
289 | const int cOpenFile = 9; | ||
290 | |||
263 | #endif | 291 | #endif |
diff --git a/noncore/apps/opie-reader/StateData.h b/noncore/apps/opie-reader/StateData.h new file mode 100644 index 0000000..0cb0f07 --- a/dev/null +++ b/noncore/apps/opie-reader/StateData.h | |||
@@ -0,0 +1,32 @@ | |||
1 | #ifndef __STATEDATA_H | ||
2 | #define __STATEDATA_H | ||
3 | |||
4 | struct statedata | ||
5 | { | ||
6 | bool bstripcr/*:1*/; | ||
7 | bool btextfmt/*:1*/; | ||
8 | bool bautofmt/*:1*/; | ||
9 | bool bstriphtml/*:1*/; | ||
10 | bool bpeanut/*:1*/; | ||
11 | bool bdehyphen/*:1*/; | ||
12 | bool bonespace/*:1*/; | ||
13 | bool bunindent/*:1*/; | ||
14 | bool brepara/*:1*/; | ||
15 | bool bdblspce/*:1*/; | ||
16 | bool m_bpagemode/*:1*/; | ||
17 | bool m_navkeys/*:1*/; | ||
18 | bool m_bMonoSpaced/*:1*/; | ||
19 | bool bremap/*:1*/; | ||
20 | bool bmakebold/*:1*/; | ||
21 | bool Continuous/*:1*/; | ||
22 | #ifdef REPALM | ||
23 | bool brepalm/*:1*/; | ||
24 | #endif | ||
25 | int bindenter; | ||
26 | int m_textsize; | ||
27 | int m_encd; | ||
28 | int m_charpc; | ||
29 | char m_fontname[1]; | ||
30 | }; | ||
31 | |||
32 | #endif | ||
diff --git a/noncore/apps/opie-reader/StyleConsts.cpp b/noncore/apps/opie-reader/StyleConsts.cpp new file mode 100644 index 0000000..e111dbd --- a/dev/null +++ b/noncore/apps/opie-reader/StyleConsts.cpp | |||
@@ -0,0 +1,99 @@ | |||
1 | |||
2 | #include <qpixmap.h> | ||
3 | #include "StyleConsts.h" | ||
4 | |||
5 | GraphicLink::~GraphicLink() { delete graphic; } | ||
6 | |||
7 | pmstore::~pmstore() | ||
8 | { | ||
9 | // qDebug("Deleting image"); | ||
10 | delete graphic; | ||
11 | } | ||
12 | |||
13 | CStyle::~CStyle() | ||
14 | { | ||
15 | if (graphic != NULL) | ||
16 | { | ||
17 | if (--(graphic->count) == 0) | ||
18 | { | ||
19 | delete graphic; | ||
20 | } | ||
21 | } | ||
22 | } | ||
23 | |||
24 | CStyle::CStyle(CStyle& rhs) : graphic(NULL) | ||
25 | { | ||
26 | *this = rhs; | ||
27 | } | ||
28 | |||
29 | CStyle::CStyle(const CStyle& rhs) : graphic(NULL) | ||
30 | { | ||
31 | *this = rhs; | ||
32 | } | ||
33 | |||
34 | CStyle& CStyle::operator=(const CStyle& rhs) | ||
35 | { | ||
36 | if (rhs.graphic != NULL) | ||
37 | { | ||
38 | (rhs.graphic->count)++; | ||
39 | if (graphic != NULL) | ||
40 | { | ||
41 | if (--(graphic->count) == 0) | ||
42 | { | ||
43 | delete graphic; | ||
44 | } | ||
45 | } | ||
46 | graphic = rhs.graphic; | ||
47 | } | ||
48 | else | ||
49 | { | ||
50 | if (graphic != NULL) | ||
51 | { | ||
52 | if (--(graphic->count) == 0) | ||
53 | { | ||
54 | delete graphic; | ||
55 | } | ||
56 | graphic = NULL; | ||
57 | } | ||
58 | } | ||
59 | sty = rhs.sty; | ||
60 | return *this; | ||
61 | } | ||
62 | |||
63 | void CStyle::clearPicture() | ||
64 | { | ||
65 | if (graphic != NULL) | ||
66 | { | ||
67 | if (--(graphic->count) == 0) | ||
68 | { | ||
69 | delete graphic; | ||
70 | } | ||
71 | graphic = NULL; | ||
72 | } | ||
73 | } | ||
74 | |||
75 | void CStyle::unset() | ||
76 | { | ||
77 | sty.unset(); | ||
78 | if (graphic != NULL) | ||
79 | { | ||
80 | if (--(graphic->count) == 0) | ||
81 | { | ||
82 | delete graphic; | ||
83 | } | ||
84 | graphic = NULL; | ||
85 | } | ||
86 | } | ||
87 | |||
88 | void CStyle::setPicture(QPixmap* _g, bool il, unsigned long tgt) | ||
89 | { | ||
90 | if (graphic != NULL) | ||
91 | { | ||
92 | if (--(graphic->count) == 0) | ||
93 | { | ||
94 | delete graphic; | ||
95 | } | ||
96 | graphic = NULL; | ||
97 | } | ||
98 | if (_g != NULL) graphic = new pmstore(_g, il, tgt); | ||
99 | } | ||
diff --git a/noncore/apps/opie-reader/StyleConsts.h b/noncore/apps/opie-reader/StyleConsts.h index b6dd861..5aacdf0 100644 --- a/noncore/apps/opie-reader/StyleConsts.h +++ b/noncore/apps/opie-reader/StyleConsts.h | |||
@@ -1,113 +1,177 @@ | |||
1 | #ifndef __STYLECONSTS_H | 1 | #ifndef __STYLECONSTS_H |
2 | #define __STYLECONSTS_H | 2 | #define __STYLECONSTS_H |
3 | 3 | ||
4 | typedef unsigned short StyleType; | 4 | typedef unsigned short StyleType; |
5 | 5 | ||
6 | class CStyle | 6 | #include <stdlib.h> |
7 | #include <qglobal.h> | ||
8 | class QPixmap; | ||
9 | |||
10 | struct GraphicLink | ||
7 | { | 11 | { |
8 | // 15 14 13-5 4 3 2 1 0 | 12 | QPixmap* graphic; |
9 | //bold italic spare align align fs fs fs | 13 | bool isLink; |
10 | static const StyleType m_Bold = 1 << 15; | 14 | unsigned long link; |
11 | static const StyleType m_Italic = 1 << 14; | 15 | GraphicLink(QPixmap* p, bool isLnk, unsigned long tgt) : |
12 | static const StyleType m_FontMask = 7; | 16 | graphic(p), isLink(isLnk), link(tgt) {} |
13 | static const StyleType m_FontBase = 3; | 17 | ~GraphicLink(); |
14 | 18 | }; | |
15 | static const StyleType m_AlignShift = 3; | ||
16 | static const StyleType m_AlignMask = 3 << m_AlignShift; | ||
17 | static const StyleType m_EveryBit = 0xffff; | ||
18 | 19 | ||
20 | struct pmstore | ||
21 | { | ||
22 | unsigned int count; | ||
23 | GraphicLink* graphic; | ||
24 | pmstore(QPixmap* p, bool isLnk, unsigned long tgt) : count(1) | ||
25 | { | ||
26 | graphic = new GraphicLink(p, isLnk, tgt); | ||
27 | } | ||
28 | ~pmstore(); | ||
29 | }; | ||
19 | 30 | ||
20 | StyleType sty; | 31 | enum EalignmentType |
32 | { | ||
33 | m_AlignLeft, | ||
34 | m_AlignRight, | ||
35 | m_AlignCentre, | ||
36 | m_AlignJustify | ||
37 | }; | ||
21 | 38 | ||
22 | void unjustify() { sty &= m_EveryBit ^ m_AlignMask; } | 39 | class CBasicStyle |
40 | { | ||
41 | friend class CStyle; | ||
42 | bool m_bold, | ||
43 | m_italic; | ||
44 | int m_fontsize; | ||
45 | EalignmentType m_align; | ||
23 | unsigned char red, green, blue; | 46 | unsigned char red, green, blue; |
24 | unsigned long data; | 47 | unsigned long data; |
25 | bool isLink; | 48 | bool isLink; |
26 | public: | 49 | bool m_underline; |
27 | unsigned char Red() { return red; } | 50 | bool m_strikethru; |
28 | unsigned char Green() { return green; } | 51 | bool m_monospaced; |
29 | unsigned char Blue() { return blue; } | 52 | unsigned char m_leftmargin, m_rightmargin; |
30 | void setColour(unsigned char r, unsigned char g, unsigned char b) | 53 | CBasicStyle() |
31 | { | 54 | { |
32 | red = r; | 55 | unset(); |
33 | green = g; | 56 | } |
34 | blue = b; | 57 | bool operator!=(const CBasicStyle& rhs) |
35 | } | 58 | { |
36 | static const StyleType m_AlignLeft = 0; | 59 | return (memcmp(this, &rhs, sizeof(CBasicStyle)) != 0); |
37 | static const StyleType m_AlignRight = 1 << m_AlignShift; | 60 | } |
38 | static const StyleType m_AlignCentre = 2 << m_AlignShift; | ||
39 | static const StyleType m_AlignJustify = 3 << m_AlignShift; | ||
40 | CStyle() | ||
41 | : | ||
42 | sty(m_FontBase), | ||
43 | red(0), green(0), blue(0), | ||
44 | data(0), isLink(false) | ||
45 | {} | ||
46 | // CStyle(const int _fs) : sty(m_FontBase+_fs) {} | ||
47 | |||
48 | void unset() | 61 | void unset() |
49 | { | 62 | { |
50 | sty = m_FontBase; | 63 | m_bold = false; |
64 | m_italic = false; | ||
65 | m_fontsize = 0; | ||
66 | m_align = m_AlignLeft; | ||
51 | red = green = blue = 0; | 67 | red = green = blue = 0; |
52 | data = 0; | 68 | data = 0; |
53 | isLink = false; | 69 | isLink = false; |
70 | m_underline = false; | ||
71 | m_strikethru = false; | ||
72 | m_leftmargin = 0; | ||
73 | m_rightmargin = 0; | ||
74 | m_monospaced = false; | ||
54 | } | 75 | } |
76 | }; | ||
55 | 77 | ||
56 | void setBold() { sty |= m_Bold; } | 78 | class CStyle |
57 | void setItalic() { sty |= m_Italic; } | 79 | { |
58 | void unsetBold() { sty &= m_EveryBit ^ m_Bold; } | 80 | CBasicStyle sty; |
59 | void unsetItalic() { sty &= m_EveryBit ^ m_Italic; } | 81 | pmstore* graphic; |
60 | bool isBold() { return ((sty & m_Bold) != 0); } | 82 | public: |
61 | bool isItalic() { return ((sty & m_Italic) != 0); } | 83 | bool getPictureLink() |
84 | { | ||
85 | return (graphic != NULL && graphic->graphic->isLink); | ||
86 | } | ||
87 | unsigned long getPictureLinkData() | ||
88 | { | ||
89 | return graphic->graphic->link; | ||
90 | } | ||
91 | void setLeftMargin(unsigned char m) { sty.m_leftmargin = m; } | ||
92 | unsigned char getLeftMargin() { return sty.m_leftmargin; } | ||
93 | void setRightMargin(unsigned char m) { sty.m_rightmargin = m; } | ||
94 | unsigned char getRightMargin() { return sty.m_rightmargin; } | ||
95 | unsigned char Red() { return sty.red; } | ||
96 | unsigned char Green() { return sty.green; } | ||
97 | unsigned char Blue() { return sty.blue; } | ||
98 | void setColour(unsigned char r, unsigned char g, unsigned char b) | ||
99 | { | ||
100 | sty.red = r; | ||
101 | sty.green = g; | ||
102 | sty.blue = b; | ||
103 | } | ||
104 | CStyle() : graphic(NULL) {} | ||
105 | ~CStyle(); | ||
106 | CStyle(CStyle&); | ||
107 | CStyle(const CStyle&); | ||
108 | CStyle& operator=(const CStyle&); | ||
109 | void unset(); | ||
110 | bool isPicture() { return (graphic != NULL); } | ||
111 | void clearPicture(); | ||
112 | void setPicture(QPixmap* _g, bool il=false, unsigned long tgt=0); | ||
113 | QPixmap* getPicture() | ||
114 | { | ||
115 | QPixmap* pm = ((graphic != NULL) ? graphic->graphic->graphic : NULL); | ||
116 | return pm; | ||
117 | } | ||
118 | void setUnderline() { sty.m_underline = true; } | ||
119 | void unsetUnderline() { sty.m_underline = false; } | ||
120 | bool isUnderline() { return sty.m_underline; } | ||
121 | void setStrikethru() { sty.m_strikethru = true; } | ||
122 | void unsetStrikethru() { sty.m_strikethru = false; } | ||
123 | bool isStrikethru() { return sty.m_strikethru; } | ||
124 | void setBold() { sty.m_bold = true; } | ||
125 | void unsetBold() { sty.m_bold = false; } | ||
126 | bool isBold() { return sty.m_bold; } | ||
127 | void setItalic() { sty.m_italic = true; } | ||
128 | void unsetItalic() { sty.m_italic = false; } | ||
129 | bool isItalic() { return sty.m_italic; } | ||
130 | void setMono() { sty.m_monospaced = true; } | ||
131 | void unsetMono() { sty.m_monospaced = false; } | ||
132 | bool isMono() { return sty.m_monospaced; } | ||
62 | 133 | ||
63 | void setLeftJustify() | 134 | void setLeftJustify() |
64 | { | 135 | { |
65 | unjustify(); | 136 | sty.m_align = m_AlignLeft; |
66 | sty |= m_AlignLeft; | ||
67 | } | 137 | } |
68 | void setRightJustify() | 138 | void setRightJustify() |
69 | { | 139 | { |
70 | unjustify(); | 140 | sty.m_align = m_AlignRight; |
71 | sty |= m_AlignRight; | ||
72 | } | 141 | } |
73 | void setCentreJustify() | 142 | void setCentreJustify() |
74 | { | 143 | { |
75 | unjustify(); | 144 | sty.m_align = m_AlignCentre; |
76 | sty |= m_AlignCentre; | ||
77 | } | 145 | } |
78 | void setFullJustify() | 146 | void setFullJustify() |
79 | { | 147 | { |
80 | unjustify(); | 148 | sty.m_align = m_AlignJustify; |
81 | sty |= m_AlignJustify; | ||
82 | } | 149 | } |
83 | StyleType getJustify() | 150 | StyleType getJustify() |
84 | { | 151 | { |
85 | return sty & m_AlignMask; | 152 | return sty.m_align; |
86 | } | 153 | } |
87 | 154 | ||
88 | void setFontSize(int _fs) | 155 | void setFontSize(int _fs) |
89 | { | 156 | { |
90 | sty &= m_EveryBit ^ m_FontMask; | 157 | sty.m_fontsize = _fs; |
91 | sty |= m_FontBase + _fs; | ||
92 | } | 158 | } |
93 | int getFontSize() | 159 | int getFontSize() |
94 | { | 160 | { |
95 | return (sty & m_FontMask) - m_FontBase; | 161 | return sty.m_fontsize; |
96 | } | 162 | } |
97 | bool operator!=(const CStyle& rhs) | 163 | bool operator!=(const CStyle& rhs) |
98 | { | 164 | { |
99 | return | 165 | return |
100 | ( | 166 | ( |
101 | (sty != rhs.sty) || (red != rhs.red) || (green != rhs.green) || | 167 | (sty != rhs.sty) || |
102 | (blue != rhs.blue) || | 168 | (graphic != rhs.graphic) |
103 | (data != rhs.data) || | 169 | ); |
104 | (isLink != rhs.isLink) | 170 | } |
105 | ); | 171 | void setLink(bool _l) { sty.isLink = _l; } |
106 | } | 172 | bool getLink() { return sty.isLink; } |
107 | void setLink(bool _l) { isLink = _l; } | 173 | void setData(unsigned long _d) { sty.data = _d; } |
108 | bool getLink() { return isLink; } | 174 | unsigned long getData() { return sty.data; } |
109 | void setData(unsigned long _d) { data = _d; } | ||
110 | unsigned long getData() { return data; } | ||
111 | }; | 175 | }; |
112 | 176 | ||
113 | #endif | 177 | #endif |
diff --git a/noncore/apps/opie-reader/Text.h b/noncore/apps/opie-reader/Text.h deleted file mode 100644 index 4c689be..0000000 --- a/noncore/apps/opie-reader/Text.h +++ b/dev/null | |||
@@ -1,28 +0,0 @@ | |||
1 | #ifndef __Text_h | ||
2 | #define __Text_h | ||
3 | #include <stdio.h> | ||
4 | #include <sys/stat.h> | ||
5 | #include "CExpander.h" | ||
6 | |||
7 | class Text: public CExpander { | ||
8 | FILE* file; | ||
9 | public: | ||
10 | Text() : file(NULL) {}; | ||
11 | virtual ~Text() { if (file != NULL) fclose(file); } | ||
12 | virtual int openfile(const tchar *src) | ||
13 | { | ||
14 | if (file != NULL) fclose(file); | ||
15 | return ((file = fopen(src,"rb")) == NULL); | ||
16 | } | ||
17 | virtual int getch() { return fgetc(file); } | ||
18 | virtual unsigned int locate() { return ftell(file); } | ||
19 | virtual void locate(unsigned int n) { fseek(file,n,SEEK_SET); } | ||
20 | virtual bool hasrandomaccess() { return true; } | ||
21 | virtual void sizes(unsigned long& _file, unsigned long& _text) | ||
22 | { | ||
23 | struct stat _stat; | ||
24 | fstat(fileno(file),&_stat); | ||
25 | _text = _file = _stat.st_size; | ||
26 | } | ||
27 | }; | ||
28 | #endif | ||
diff --git a/noncore/apps/opie-reader/ZText.h b/noncore/apps/opie-reader/ZText.h index debfe8c..22d3733 100644 --- a/noncore/apps/opie-reader/ZText.h +++ b/noncore/apps/opie-reader/ZText.h | |||
@@ -1,39 +1,68 @@ | |||
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/zlib.h" |
5 | #include <sys/stat.h> | 5 | #include <sys/stat.h> |
6 | 6 | ||
7 | #include "CExpander.h" | 7 | #include "CExpander.h" |
8 | 8 | ||
9 | class Text: public CExpander { | 9 | class Text: public CExpander { |
10 | gzFile file; | 10 | gzFile file; |
11 | unsigned long fsize; | 11 | unsigned long fsize; |
12 | public: | 12 | public: |
13 | virtual void suspend() | ||
14 | { | ||
15 | bSuspended = true; | ||
16 | suspos = gztell(file); | ||
17 | gzclose(file); | ||
18 | file = NULL; | ||
19 | sustime = time(NULL); | ||
20 | } | ||
21 | virtual void unsuspend() | ||
22 | { | ||
23 | if (bSuspended) | ||
24 | { | ||
25 | bSuspended = false; | ||
26 | int delay = time(NULL) - sustime; | ||
27 | if (delay < 10) sleep(10-delay); | ||
28 | file = gzopen(fname, "rb"); | ||
29 | for (int i = 0; file == NULL && i < 5; i++) | ||
30 | { | ||
31 | sleep(5); | ||
32 | file = gzopen(fname, "rb"); | ||
33 | } | ||
34 | if (file == NULL) | ||
35 | { | ||
36 | QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file"); | ||
37 | exit(0); | ||
38 | } | ||
39 | suspos = gzseek(file, suspos, SEEK_SET); | ||
40 | } | ||
41 | } | ||
13 | Text() : file(NULL) {}; | 42 | Text() : file(NULL) {}; |
14 | virtual ~Text() | 43 | virtual ~Text() |
15 | { | 44 | { |
16 | if (file != NULL) gzclose(file); | 45 | if (file != NULL) gzclose(file); |
17 | } | 46 | } |
18 | virtual int openfile(const char *src) | 47 | virtual int OpenFile(const char *src) |
19 | { | 48 | { |
20 | if (file != NULL) gzclose(file); | 49 | if (file != NULL) gzclose(file); |
21 | struct stat _stat; | 50 | struct stat _stat; |
22 | stat(src,&_stat); | 51 | stat(src,&_stat); |
23 | fsize = _stat.st_size; | 52 | fsize = _stat.st_size; |
24 | return ((file = gzopen(src,"rb")) == NULL); | 53 | return ((file = gzopen(src,"rb")) == NULL); |
25 | } | 54 | } |
26 | virtual int getch() { return gzgetc(file); } | 55 | virtual int getch() { return gzgetc(file); } |
27 | virtual unsigned int locate() { return gztell(file); } | 56 | virtual unsigned int locate() { return gztell(file); } |
28 | virtual void locate(unsigned int n) { gzseek(file,n,SEEK_SET); } | 57 | virtual void locate(unsigned int n) { gzseek(file,n,SEEK_SET); } |
29 | virtual bool hasrandomaccess() { return true; } | 58 | virtual bool hasrandomaccess() { return true; } |
30 | virtual void sizes(unsigned long& _file, unsigned long& _text) | 59 | virtual void sizes(unsigned long& _file, unsigned long& _text) |
31 | { | 60 | { |
32 | _text = _file = fsize; | 61 | _text = _file = fsize; |
33 | } | 62 | } |
34 | virtual MarkupType PreferredMarkup() | 63 | virtual MarkupType PreferredMarkup() |
35 | { | 64 | { |
36 | return cTEXT; | 65 | return cTEXT; |
37 | } | 66 | } |
38 | }; | 67 | }; |
39 | #endif | 68 | #endif |
diff --git a/noncore/apps/opie-reader/cbkmkselector.h b/noncore/apps/opie-reader/cbkmkselector.h index 1a49c5a..1a70048 100644 --- a/noncore/apps/opie-reader/cbkmkselector.h +++ b/noncore/apps/opie-reader/cbkmkselector.h | |||
@@ -1,41 +1,43 @@ | |||
1 | #include <qwidget.h> | 1 | #include <qwidget.h> |
2 | #include <qlistbox.h> | 2 | #include <qlistbox.h> |
3 | #include <qpushbutton.h> | 3 | #include <qpushbutton.h> |
4 | #include <qlayout.h> | 4 | #include <qlayout.h> |
5 | 5 | ||
6 | class CBkmkSelector : public QWidget | 6 | class CBkmkSelector : public QWidget |
7 | { | 7 | { |
8 | 8 | ||
9 | Q_OBJECT | 9 | Q_OBJECT |
10 | 10 | ||
11 | QListBox* bkmkselector; | 11 | QListBox* bkmkselector; |
12 | QPushButton* exitButton; | ||
12 | 13 | ||
13 | signals: | 14 | signals: |
14 | void selected(int i); | 15 | void selected(int i); |
15 | void cancelled(); | 16 | void cancelled(); |
16 | private slots: | 17 | private slots: |
17 | void slotSelected(QListBoxItem* t) { emit selected(bkmkselector->index(t)); } | 18 | void slotSelected(QListBoxItem* t) { emit selected(bkmkselector->index(t)); } |
18 | void slotSelected(int t) { emit selected(t); } | 19 | void slotSelected(int t) { emit selected(t); } |
19 | void slotCancel() { emit cancelled(); } | 20 | void slotCancel() { emit cancelled(); } |
20 | public: | 21 | public: |
21 | CBkmkSelector( QWidget *parent=0, const char *name=0, WFlags f = 0) : | 22 | CBkmkSelector( QWidget *parent=0, const char *name=0, WFlags f = 0) : |
22 | QWidget(parent, name, f) | 23 | QWidget(parent, name, f) |
23 | { | 24 | { |
24 | 25 | ||
25 | // QFont f("unifont", 16); | 26 | // QFont f("unifont", 16); |
26 | // setFont( f ); | 27 | // setFont( f ); |
27 | 28 | ||
28 | QVBoxLayout* grid = new QVBoxLayout(this); | 29 | QVBoxLayout* grid = new QVBoxLayout(this); |
29 | bkmkselector = new QListBox(this, "Bookmarks"); | 30 | bkmkselector = new QListBox(this, "Bookmarks"); |
30 | QPushButton* exitButton = new QPushButton("Cancel", this); | 31 | exitButton = new QPushButton("Cancel", this); |
31 | connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( slotSelected(int) ) ); | 32 | connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( slotSelected(int) ) ); |
32 | connect(bkmkselector, SIGNAL( clicked(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) ); | 33 | connect(bkmkselector, SIGNAL( clicked(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) ); |
33 | connect(exitButton, SIGNAL( released() ), this, SLOT( slotCancel() ) ); | 34 | connect(exitButton, SIGNAL( released() ), this, SLOT( slotCancel() ) ); |
34 | grid->addWidget(bkmkselector,1); | 35 | grid->addWidget(bkmkselector,1); |
35 | grid->addWidget(exitButton); | 36 | grid->addWidget(exitButton); |
36 | } | 37 | } |
37 | void clear() { bkmkselector->clear(); } | 38 | void clear() { bkmkselector->clear(); } |
38 | void insertItem(const QString& item) { bkmkselector->insertItem(item); } | 39 | void insertItem(const QString& item) { bkmkselector->insertItem(item); } |
39 | QString text(int index) const { return bkmkselector->text(index); } | 40 | QString text(int index) const { return bkmkselector->text(index); } |
41 | void setText(const QString& _l) { exitButton->setText(_l); } | ||
40 | }; | 42 | }; |
41 | 43 | ||
diff --git a/noncore/apps/opie-reader/config.h b/noncore/apps/opie-reader/config.h index 5150270..b6281a4 100644 --- a/noncore/apps/opie-reader/config.h +++ b/noncore/apps/opie-reader/config.h | |||
@@ -1,21 +1,25 @@ | |||
1 | #ifndef __CONFIG_H | 1 | #ifndef __CONFIG_H |
2 | #define __CONFIG_H | 2 | #define __CONFIG_H |
3 | 3 | ||
4 | #define _UNICODE | 4 | #define _UNICODE |
5 | 5 | ||
6 | #ifdef _UNICODE | 6 | #ifdef _UNICODE |
7 | #include <limits.h> | 7 | #include <limits.h> |
8 | 8 | ||
9 | #define UTF8 | 9 | #define UTF8 |
10 | 10 | ||
11 | typedef unsigned short tchar; | 11 | typedef unsigned short tchar; |
12 | const tchar UEOF = USHRT_MAX; | 12 | const tchar UEOF = USHRT_MAX; |
13 | 13 | ||
14 | #else | 14 | #else |
15 | typedef char tchar; | 15 | typedef char tchar; |
16 | const int UEOF = -1; | 16 | const int UEOF = -1; |
17 | #endif | 17 | #endif |
18 | 18 | ||
19 | #include "ustring.h" | 19 | #include "ustring.h" |
20 | 20 | ||
21 | #define BORDER 2 | ||
22 | |||
23 | //#define _FAST | ||
24 | |||
21 | #endif | 25 | #endif |
diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp index b21d59d..21c970b 100644 --- a/noncore/apps/opie-reader/fileBrowser.cpp +++ b/noncore/apps/opie-reader/fileBrowser.cpp | |||
@@ -1,204 +1,207 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | 2 | ||
3 | Derived from a file browser which was | 3 | Derived from a file browser which was |
4 | 4 | ||
5 | ** copyright 2001 ljp ljp@llornkcor.com | 5 | ** copyright 2001 ljp ljp@llornkcor.com |
6 | 6 | ||
7 | Extensive modification by Tim Wentford to allow it to work in rotated mode | 7 | Extensive 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 <qpushbutton.h> | 13 | #include <qpushbutton.h> |
14 | #include <qfile.h> | 14 | #include <qfile.h> |
15 | #include <qmessagebox.h> | 15 | #include <qmessagebox.h> |
16 | #include <unistd.h> | 16 | #include <unistd.h> |
17 | #include <qlayout.h> | 17 | #include <qlayout.h> |
18 | 18 | ||
19 | fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath ) | 19 | fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath ) |
20 | : QDialog( parent, name, modal, fl ), filterspec(QDir::All) | 20 | : QDialog( parent, name, modal, fl ), filterspec(QDir::All) |
21 | { | 21 | { |
22 | // showMaximized(); | 22 | // showMaximized(); |
23 | if ( !name ) | 23 | if ( !name ) |
24 | setName( "fileBrowser" ); | 24 | setName( "fileBrowser" ); |
25 | if (parent != NULL) resize( parent->width(), parent->height() ); | 25 | if (parent != NULL) resize( parent->width(), parent->height() ); |
26 | setCaption(tr( "Browse for file" ) ); | 26 | setCaption(tr( "Browse for file" ) ); |
27 | filterStr=filter; | 27 | filterStr=filter; |
28 | 28 | ||
29 | buttonOk = new QPushButton( this, "buttonOk" ); | 29 | buttonOk = new QPushButton( this, "buttonOk" ); |
30 | buttonOk->setFixedSize( 25, 25 ); | 30 | buttonOk->setFixedSize( 25, 25 ); |
31 | buttonOk->setAutoDefault( false ); | 31 | buttonOk->setAutoDefault( false ); |
32 | buttonOk->setText( tr( "/" ) ); | 32 | buttonOk->setText( tr( "/" ) ); |
33 | 33 | ||
34 | buttonShowHidden = new QPushButton( this, "buttonShowHidden" ); | 34 | buttonShowHidden = new QPushButton( this, "buttonShowHidden" ); |
35 | // buttonShowHidden->setFixedSize( 50, 25 ); | 35 | // buttonShowHidden->setFixedSize( 50, 25 ); |
36 | buttonShowHidden->setText( tr( "Hidden" ) ); | 36 | buttonShowHidden->setText( tr( "Hidden" ) ); |
37 | buttonShowHidden->setAutoDefault( false ); | 37 | buttonShowHidden->setAutoDefault( false ); |
38 | buttonShowHidden->setToggleButton( true ); | 38 | buttonShowHidden->setToggleButton( true ); |
39 | buttonShowHidden->setOn( false ); | 39 | buttonShowHidden->setOn( false ); |
40 | 40 | ||
41 | dirLabel = new QLabel(this, "DirLabel"); | 41 | dirLabel = new QLabel(this, "DirLabel"); |
42 | dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak); | ||
42 | dirLabel->setText(currentDir.canonicalPath()); | 43 | dirLabel->setText(currentDir.canonicalPath()); |
43 | 44 | ||
44 | ListView = new QtrListView( this, "ListView" ); | 45 | ListView = new QtrListView( this, "ListView" ); |
45 | ListView->addColumn( tr( "Name" ) ); | 46 | ListView->addColumn( tr( "Name" ) ); |
46 | ListView->setSorting( 2, FALSE); | 47 | ListView->setSorting( 2, FALSE); |
47 | ListView->addColumn( tr( "Size" ) ); | 48 | ListView->addColumn( tr( "Size" ) ); |
48 | ListView->setSelectionMode(QListView::Single); | 49 | ListView->setSelectionMode(QListView::Single); |
49 | ListView->setAllColumnsShowFocus( TRUE ); | 50 | ListView->setAllColumnsShowFocus( TRUE ); |
51 | ListView->setColumnWidthMode(0, QListView::Manual); | ||
52 | ListView->setColumnWidthMode(1, QListView::Manual); | ||
50 | 53 | ||
51 | // signals and slots connections | 54 | // signals and slots connections |
52 | connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) ); | 55 | connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) ); |
53 | connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) ); | 56 | connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) ); |
54 | connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) ); | 57 | connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) ); |
55 | connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); | 58 | connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); |
56 | connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); | 59 | connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); |
57 | connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); | 60 | connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); |
58 | connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) ); | 61 | connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) ); |
59 | 62 | ||
60 | QVBoxLayout* grid = new QVBoxLayout(this); | 63 | QVBoxLayout* grid = new QVBoxLayout(this); |
61 | QHBoxLayout* hgrid = new QHBoxLayout(grid); | 64 | QHBoxLayout* hgrid = new QHBoxLayout(grid); |
62 | hgrid->addWidget(dirLabel,1); | 65 | hgrid->addWidget(dirLabel,1); |
63 | hgrid->addWidget(buttonShowHidden); | 66 | hgrid->addWidget(buttonShowHidden); |
64 | hgrid->addWidget(buttonOk); | 67 | hgrid->addWidget(buttonOk); |
65 | grid->addWidget(ListView,1); | 68 | grid->addWidget(ListView,1); |
66 | 69 | ||
67 | if (QFileInfo(iPath).exists()) | 70 | if (QFileInfo(iPath).exists()) |
68 | { | 71 | { |
69 | currentDir.setPath(iPath); | 72 | currentDir.setPath(iPath); |
70 | chdir(iPath.latin1()); | 73 | chdir(iPath.latin1()); |
71 | } | 74 | } |
72 | else | 75 | else |
73 | { | 76 | { |
74 | currentDir.setPath(QDir::currentDirPath()); | 77 | currentDir.setPath(QDir::currentDirPath()); |
75 | chdir(QDir::currentDirPath().latin1()); | 78 | chdir(QDir::currentDirPath().latin1()); |
76 | } | 79 | } |
77 | 80 | ||
78 | populateList(); | 81 | populateList(); |
79 | } | 82 | } |
80 | 83 | ||
81 | void fileBrowser::resizeEvent(QResizeEvent* e) | 84 | void fileBrowser::resizeEvent(QResizeEvent* e) |
82 | { | 85 | { |
83 | ListView->setColumnWidth(1,(ListView->width())/4); | 86 | ListView->setColumnWidth(1,(ListView->width())/4); |
84 | ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1)); | 87 | ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1)); |
85 | } | 88 | } |
86 | 89 | ||
87 | fileBrowser::~fileBrowser() | 90 | fileBrowser::~fileBrowser() |
88 | { | 91 | { |
89 | } | 92 | } |
90 | 93 | ||
91 | 94 | ||
92 | void fileBrowser::populateList() | 95 | void fileBrowser::populateList() |
93 | { | 96 | { |
94 | ListView->clear(); | 97 | ListView->clear(); |
95 | //qDebug(currentDir.canonicalPath()); | 98 | //qDebug(currentDir.canonicalPath()); |
96 | // currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks ); | 99 | // currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks ); |
97 | currentDir.setFilter( filterspec ); | 100 | currentDir.setFilter( filterspec ); |
98 | currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); | 101 | currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); |
99 | currentDir.setMatchAllDirs(TRUE); | 102 | currentDir.setMatchAllDirs(TRUE); |
100 | 103 | ||
101 | currentDir.setNameFilter(filterStr); | 104 | currentDir.setNameFilter(filterStr); |
102 | // currentDir.setNameFilter("*.txt;*.etx"); | 105 | // currentDir.setNameFilter("*.txt;*.etx"); |
103 | QString fileL, fileS; | 106 | QString fileL, fileS; |
104 | const QFileInfoList *list = currentDir.entryInfoList(); | 107 | const QFileInfoList *list = currentDir.entryInfoList(); |
105 | QFileInfoListIterator it(*list); | 108 | QFileInfoListIterator it(*list); |
106 | QFileInfo *fi; | 109 | QFileInfo *fi; |
107 | while ( (fi=it.current()) ) | 110 | while ( (fi=it.current()) ) |
108 | { | 111 | { |
109 | if (fi->fileName() != ".") | 112 | if (fi->fileName() != ".") |
110 | { | 113 | { |
111 | fileS.sprintf( "%10li", fi->size() ); | 114 | fileS.sprintf( "%10li", fi->size() ); |
112 | fileL.sprintf( "%s",fi->fileName().data() ); | 115 | fileL.sprintf( "%s",fi->fileName().data() ); |
113 | if( fi->isDir() ) | 116 | if( fi->isDir() ) |
114 | { | 117 | { |
115 | fileL+="/"; | 118 | fileL+="/"; |
116 | } | 119 | } |
117 | else | 120 | else |
118 | { | 121 | { |
119 | // qDebug("Not a dir: "+currentDir.canonicalPath()+fileL); | 122 | // qDebug("Not a dir: "+currentDir.canonicalPath()+fileL); |
120 | } | 123 | } |
121 | new QListViewItem( ListView,fileL,fileS ); | 124 | new QListViewItem( ListView,fileL,fileS ); |
122 | } | 125 | } |
123 | ++it; | 126 | ++it; |
124 | } | 127 | } |
125 | ListView->setSorting( 2, FALSE); | 128 | ListView->setSorting( 2, FALSE); |
126 | dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath()); | 129 | dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath()); |
127 | ListView->setFocus(); | 130 | ListView->setFocus(); |
128 | } | 131 | } |
129 | 132 | ||
130 | void fileBrowser::upDir() | 133 | void fileBrowser::upDir() |
131 | { | 134 | { |
132 | // qDebug(currentDir.canonicalPath()); | 135 | // qDebug(currentDir.canonicalPath()); |
133 | } | 136 | } |
134 | 137 | ||
135 | void fileBrowser::listClicked(QListViewItem *selectedItem) | 138 | void fileBrowser::listClicked(QListViewItem *selectedItem) |
136 | { | 139 | { |
137 | if (selectedItem == NULL) return; | 140 | if (selectedItem == NULL) return; |
138 | QString strItem=selectedItem->text(0); | 141 | QString strItem=selectedItem->text(0); |
139 | 142 | ||
140 | // qDebug("%s", (const char*)strItem); | 143 | // qDebug("%s", (const char*)strItem); |
141 | 144 | ||
142 | 145 | ||
143 | QString strSize=selectedItem->text(1); | 146 | QString strSize=selectedItem->text(1); |
144 | 147 | ||
145 | strSize.stripWhiteSpace(); | 148 | strSize.stripWhiteSpace(); |
146 | 149 | ||
147 | bool ok; | 150 | bool ok; |
148 | 151 | ||
149 | QFileInfo fi(strItem); | 152 | QFileInfo fi(strItem); |
150 | while (fi.isSymLink()) fi.setFile(fi.readLink()); | 153 | while (fi.isSymLink()) fi.setFile(fi.readLink()); |
151 | if (fi.isDir()) | 154 | if (fi.isDir()) |
152 | { | 155 | { |
153 | strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem); | 156 | strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem); |
154 | 157 | ||
155 | if(QDir(strItem).exists()) | 158 | if(QDir(strItem).exists()) |
156 | { | 159 | { |
157 | currentDir.cd(strItem, TRUE); | 160 | currentDir.cd(strItem, TRUE); |
158 | populateList(); | 161 | populateList(); |
159 | } | 162 | } |
160 | } else | 163 | } else |
161 | OnOK(); | 164 | OnOK(); |
162 | chdir(strItem.latin1()); | 165 | chdir(strItem.latin1()); |
163 | // | 166 | // |
164 | 167 | ||
165 | } | 168 | } |
166 | 169 | ||
167 | // you may want to switch these 2 functions. I like single clicks | 170 | // you may want to switch these 2 functions. I like single clicks |
168 | void fileBrowser::listDoubleClicked(QListViewItem *selectedItem) | 171 | void fileBrowser::listDoubleClicked(QListViewItem *selectedItem) |
169 | { | 172 | { |
170 | } | 173 | } |
171 | 174 | ||
172 | void fileBrowser::OnOK() { | 175 | void fileBrowser::OnOK() { |
173 | 176 | ||
174 | QListViewItemIterator it1( ListView); | 177 | QListViewItemIterator it1( ListView); |
175 | for ( ; it1.current(); ++it1 ) { | 178 | for ( ; it1.current(); ++it1 ) { |
176 | if ( it1.current()->isSelected() ) { | 179 | if ( it1.current()->isSelected() ) { |
177 | selectedFileName=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+it1.current()->text(0)); | 180 | selectedFileName=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+it1.current()->text(0)); |
178 | // qDebug("selected filename is "+selectedFileName); | 181 | // qDebug("selected filename is "+selectedFileName); |
179 | fileList.append( selectedFileName ); | 182 | fileList.append( selectedFileName ); |
180 | } | 183 | } |
181 | } | 184 | } |
182 | accept(); | 185 | accept(); |
183 | } | 186 | } |
184 | 187 | ||
185 | void fileBrowser::OnRoot() | 188 | void fileBrowser::OnRoot() |
186 | { | 189 | { |
187 | currentDir.cd("/", TRUE); | 190 | currentDir.cd("/", TRUE); |
188 | populateList(); | 191 | populateList(); |
189 | chdir("/"); | 192 | chdir("/"); |
190 | } | 193 | } |
191 | 194 | ||
192 | void fileBrowser::OnCancel() | 195 | void fileBrowser::OnCancel() |
193 | { | 196 | { |
194 | reject(); | 197 | reject(); |
195 | } | 198 | } |
196 | 199 | ||
197 | void fileBrowser::setHidden(bool _hidden) | 200 | void fileBrowser::setHidden(bool _hidden) |
198 | { | 201 | { |
199 | if (_hidden) | 202 | if (_hidden) |
200 | filterspec = QDir::All | QDir::Hidden; | 203 | filterspec = QDir::All | QDir::Hidden; |
201 | else | 204 | else |
202 | filterspec = QDir::All; | 205 | filterspec = QDir::All; |
203 | populateList(); | 206 | populateList(); |
204 | } | 207 | } |
diff --git a/noncore/apps/opie-reader/infowin.cpp b/noncore/apps/opie-reader/infowin.cpp index 7b8f280..30adebf 100644 --- a/noncore/apps/opie-reader/infowin.cpp +++ b/noncore/apps/opie-reader/infowin.cpp | |||
@@ -1,42 +1,43 @@ | |||
1 | #include "name.h" | ||
1 | #include "infowin.h" | 2 | #include "infowin.h" |
2 | #include "version.h" | 3 | #include "version.h" |
3 | #include <stdio.h> | 4 | #include <stdio.h> |
4 | 5 | ||
5 | infowin::infowin( QWidget *parent, const char *name, WFlags f) : | 6 | infowin::infowin( QWidget *parent=0, const char *name=0, WFlags f = 0) : |
6 | QWidget(parent, name, f) | 7 | QWidget(parent, name, f) |
7 | { | 8 | { |
8 | grid = new QGridLayout(this, 6, 2); | 9 | grid = new QGridLayout(this, 6, 2); |
9 | QLabel* l; | 10 | QLabel* l; |
10 | l = new QLabel("Compressed file size", this); | 11 | l = new QLabel("Compressed file size", this); |
11 | grid->addWidget(l, 0, 0); | 12 | grid->addWidget(l, 0, 0); |
12 | fileSize = new QLabel("0", this); | 13 | fileSize = new QLabel("0", this); |
13 | fileSize->setAlignment( AlignVCenter | AlignRight ); | 14 | fileSize->setAlignment( AlignVCenter | AlignRight ); |
14 | grid->addWidget(fileSize, 0, 1); | 15 | grid->addWidget(fileSize, 0, 1); |
15 | l = new QLabel("Original text size", this); | 16 | l = new QLabel("Original text size", this); |
16 | grid->addWidget(l, 1, 0); | 17 | grid->addWidget(l, 1, 0); |
17 | textSize = new QLabel("0", this); | 18 | textSize = new QLabel("0", this); |
18 | textSize->setAlignment( AlignVCenter | AlignRight ); | 19 | textSize->setAlignment( AlignVCenter | AlignRight ); |
19 | grid->addWidget(textSize, 1, 1); | 20 | grid->addWidget(textSize, 1, 1); |
20 | l = new QLabel("Compression Ratio", this); | 21 | l = new QLabel("Compression Ratio", this); |
21 | grid->addWidget(l, 2, 0); | 22 | grid->addWidget(l, 2, 0); |
22 | ratio = new QLabel("0", this); | 23 | ratio = new QLabel("0", this); |
23 | grid->addWidget(ratio, 2, 1); | 24 | grid->addWidget(ratio, 2, 1); |
24 | ratio->setAlignment( AlignVCenter | AlignRight ); | 25 | ratio->setAlignment( AlignVCenter | AlignRight ); |
25 | l = new QLabel("Current location", this); | 26 | l = new QLabel("Current location", this); |
26 | grid->addWidget(l, 3, 0); | 27 | grid->addWidget(l, 3, 0); |
27 | location = new QLabel("0", this); | 28 | location = new QLabel("0", this); |
28 | location->setAlignment( AlignVCenter | AlignRight ); | 29 | location->setAlignment( AlignVCenter | AlignRight ); |
29 | grid->addWidget(location, 3, 1); | 30 | grid->addWidget(location, 3, 1); |
30 | l = new QLabel("Per centage read", this); | 31 | l = new QLabel("Per centage read", this); |
31 | grid->addWidget(l, 4, 0); | 32 | grid->addWidget(l, 4, 0); |
32 | read = new QLabel("0", this); | 33 | read = new QLabel("0", this); |
33 | read->setAlignment( AlignVCenter | AlignRight ); | 34 | read->setAlignment( AlignVCenter | AlignRight ); |
34 | grid->addWidget(read, 4, 1); | 35 | grid->addWidget(read, 4, 1); |
35 | char vstr[128]; | 36 | char vstr[128]; |
36 | sprintf(vstr, "QT Reader v%u.%u%c (%s)\nA small e-text reader", MAJOR, BKMKTYPE, MINOR, RELEASE_TYPE); | 37 | sprintf(vstr, PROGNAME " v%u.%u%c (%s)\nA small e-text reader", MAJOR, BKMKTYPE, MINOR, RELEASE_TYPE); |
37 | l = new QLabel(vstr, this); | 38 | l = new QLabel(vstr, this); |
38 | grid->addWidget(l, 5, 0); | 39 | grid->addWidget(l, 5, 0); |
39 | QPushButton* exitbutton = new QPushButton("Cancel", this); | 40 | QPushButton* exitbutton = new QPushButton("Cancel", this); |
40 | connect( exitbutton, SIGNAL( released() ), this, SLOT( infoClose() ) ); | 41 | connect( exitbutton, SIGNAL( released() ), this, SLOT( infoClose() ) ); |
41 | grid->addWidget(exitbutton, 5, 1); | 42 | grid->addWidget(exitbutton, 5, 1); |
42 | } | 43 | } |
diff --git a/noncore/apps/opie-reader/main.cpp b/noncore/apps/opie-reader/main.cpp index 08f59a8..2440037 100644 --- a/noncore/apps/opie-reader/main.cpp +++ b/noncore/apps/opie-reader/main.cpp | |||
@@ -1,30 +1,34 @@ | |||
1 | #include <qpe/qpeapplication.h> | 1 | #include <qpe/qpeapplication.h> |
2 | #include "QTReaderApp.h" | 2 | #include "QTReaderApp.h" |
3 | 3 | ||
4 | #include "signal.h" | 4 | #include "signal.h" |
5 | #include "stdio.h" | 5 | #include "stdio.h" |
6 | #include "time.h" | 6 | #include "time.h" |
7 | 7 | ||
8 | QTReaderApp* app = NULL; | 8 | QTReaderApp* app = NULL; |
9 | 9 | ||
10 | void handler(int signum) | 10 | void handler(int signum) |
11 | { | 11 | { |
12 | if (app != NULL) app->saveprefs(); | 12 | if (app != NULL) |
13 | { | ||
14 | app->suspend(); | ||
15 | app->saveprefs(); | ||
16 | } | ||
13 | signal(signum, handler); | 17 | signal(signum, handler); |
14 | } | 18 | } |
15 | 19 | ||
16 | int main( int argc, char ** argv ) | 20 | int main( int argc, char ** argv ) |
17 | { | 21 | { |
18 | signal(SIGCONT, handler); | 22 | signal(SIGCONT, handler); |
19 | 23 | ||
20 | QPEApplication a( argc, argv ); | 24 | QPEApplication a( argc, argv ); |
21 | 25 | ||
22 | QTReaderApp m; | 26 | QTReaderApp m; |
23 | 27 | ||
24 | a.showMainDocumentWidget( &m ); | 28 | a.showMainDocumentWidget( &m ); |
25 | 29 | ||
26 | app = &m; | 30 | app = &m; |
27 | 31 | ||
28 | return a.exec(); | 32 | return a.exec(); |
29 | } | 33 | } |
30 | 34 | ||
diff --git a/noncore/apps/opie-reader/name.h b/noncore/apps/opie-reader/name.h new file mode 100644 index 0000000..d419005 --- a/dev/null +++ b/noncore/apps/opie-reader/name.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef __NAME_H | ||
2 | #define __NAME_H | ||
3 | |||
4 | #define PROGNAME "Opie-Reader" | ||
5 | #define SHORTPROGNAME "Reader" | ||
6 | #define APPDIR "uqtreader" | ||
7 | |||
8 | #endif | ||
diff --git a/noncore/apps/opie-reader/opie-reader.pro b/noncore/apps/opie-reader/opie-reader.pro index 51849a3..139c03a 100644 --- a/noncore/apps/opie-reader/opie-reader.pro +++ b/noncore/apps/opie-reader/opie-reader.pro | |||
@@ -1,58 +1,73 @@ | |||
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 | BuffDoc.h \ | 4 | Bkmks.h \ |
5 | CBuffer.h \ | 5 | BuffDoc.h \ |
6 | CDrawBuffer.h \ | 6 | CAnnoEdit.h \ |
7 | CExpander.h \ | 7 | CBuffer.h \ |
8 | CFilter.h \ | 8 | CDrawBuffer.h \ |
9 | QTReader.h \ | 9 | CEncoding.h \ |
10 | QTReaderApp.h \ | 10 | CExpander.h \ |
11 | ZText.h \ | 11 | CFilter.h \ |
12 | arith.h \ | 12 | Filedata.h \ |
13 | my_list.h \ | 13 | FontControl.h \ |
14 | ppm.h \ | 14 | GraphicWin.h \ |
15 | ppm_expander.h \ | 15 | Markups.h \ |
16 | cbkmkselector.h \ | 16 | Navigation.h \ |
17 | fileBrowser.h \ | 17 | Palm2QImage.h \ |
18 | ztxt.h \ | 18 | QFloatBar.h \ |
19 | QtrListView.h \ | 19 | QTReader.h \ |
20 | infowin.h \ | 20 | QTReaderApp.h \ |
21 | version.h \ | 21 | QtrListView.h \ |
22 | pdb.h \ | 22 | Queue.h \ |
23 | utypes.h \ | 23 | StateData.h \ |
24 | ustring.h \ | 24 | StyleConsts.h \ |
25 | CEncoding.h \ | 25 | ZText.h \ |
26 | CAnnoEdit.h \ | 26 | arith.h \ |
27 | QFloatBar.h \ | 27 | cbkmkselector.h \ |
28 | StyleConsts.h \ | 28 | config.h \ |
29 | FontControl.h \ | 29 | fileBrowser.h \ |
30 | plucker.h \ | 30 | infowin.h \ |
31 | Markups.h \ | 31 | my_list.h \ |
32 | Bkmks.h \ | 32 | name.h \ |
33 | config.h | 33 | opie.h \ |
34 | SOURCES = Aportis.cpp \ | 34 | pdb.h \ |
35 | BuffDoc.cpp \ | 35 | plucker.h \ |
36 | CBuffer.cpp \ | 36 | ppm.h \ |
37 | CDrawBuffer.cpp \ | 37 | ppm_expander.h \ |
38 | QTReader.cpp \ | 38 | ustring.h \ |
39 | QTReaderApp.cpp \ | 39 | utypes.h \ |
40 | arith_d.cpp \ | 40 | version.h \ |
41 | main.cpp \ | 41 | ztxt.h |
42 | ppm.cpp \ | 42 | |
43 | ppm_expander.cpp \ | 43 | SOURCES = Aportis.cpp \ |
44 | ztxt.cpp \ | 44 | Bkmks.cpp \ |
45 | QtrListView.cpp \ | 45 | BuffDoc.cpp \ |
46 | infowin.cpp \ | 46 | CBuffer.cpp \ |
47 | pdb.cpp \ | 47 | CDrawBuffer.cpp \ |
48 | CEncoding.cpp \ | 48 | CEncoding.cpp \ |
49 | CFilter.cpp \ | 49 | CFilter.cpp \ |
50 | plucker.cpp \ | 50 | FontControl.cpp \ |
51 | Bkmks.cpp \ | 51 | Navigation.cpp \ |
52 | fileBrowser.cpp | 52 | Palm2QImage.cpp \ |
53 | DESTDIR = $(OPIEDIR)/bin | 53 | QTReader.cpp \ |
54 | INCLUDEPATH += $(OPIEDIR)/include | 54 | QTReaderApp.cpp \ |
55 | DEPENDPATH += $(OPIEDIR)/include | 55 | QtrListView.cpp \ |
56 | TARGET = reader | 56 | StyleConsts.cpp \ |
57 | LIBS += -lqpe | 57 | arith_d.cpp \ |
58 | fileBrowser.cpp \ | ||
59 | infowin.cpp \ | ||
60 | main.cpp \ | ||
61 | pdb.cpp \ | ||
62 | plucker.cpp \ | ||
63 | ppm.cpp \ | ||
64 | ppm_expander.cpp \ | ||
65 | ztxt.cpp | ||
66 | |||
67 | INTERFACES= | ||
68 | DESTDIR = $(OPIEDIR)/bin | ||
69 | INCLUDEPATH+= $(OPIEDIR)/include | ||
70 | DEPENDPATH+= $(OPIEDIR)/include | ||
71 | TARGET = reader | ||
72 | LIBS += -lqpe | ||
58 | 73 | ||
diff --git a/noncore/apps/opie-reader/opie.h b/noncore/apps/opie-reader/opie.h new file mode 100644 index 0000000..e28c2ab --- a/dev/null +++ b/noncore/apps/opie-reader/opie.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __OPIE_H | ||
2 | #define __OPIE_H | ||
3 | |||
4 | #define OPIE | ||
5 | |||
6 | #endif | ||
diff --git a/noncore/apps/opie-reader/pdb.cpp b/noncore/apps/opie-reader/pdb.cpp index 68b904e..3054424 100644 --- a/noncore/apps/opie-reader/pdb.cpp +++ b/noncore/apps/opie-reader/pdb.cpp | |||
@@ -1,57 +1,63 @@ | |||
1 | #include "pdb.h" | 1 | #include "pdb.h" |
2 | #include <sys/types.h> | ||
3 | #include <sys/stat.h> | ||
4 | #include <unistd.h> | ||
2 | 5 | ||
3 | size_t Cpdb::recordpos(int n) | 6 | size_t Cpdb::recordpos(int n) |
4 | { | 7 | { |
5 | UInt16 mxn = ntohs(head.recordList.numRecords); | 8 | UInt16 mxn = ntohs(head.recordList.numRecords); |
6 | if (n >= mxn) | 9 | if (n >= mxn) |
7 | { | 10 | { |
8 | return file_length; | 11 | return file_length; |
9 | } | 12 | } |
10 | else | 13 | else |
11 | { | 14 | { |
12 | size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16); | 15 | size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16); |
13 | dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n; | 16 | dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n; |
14 | fseek(fin, dataoffset, SEEK_SET); | 17 | fseek(fin, dataoffset, SEEK_SET); |
15 | RecordListType hdr; | 18 | RecordListType hdr; |
16 | fread(&hdr, 1, sizeof(hdr), fin); | 19 | fread(&hdr, 1, sizeof(hdr), fin); |
17 | return ntohl(hdr.nextRecordListID); | 20 | return ntohl(hdr.nextRecordListID); |
18 | } | 21 | } |
19 | 22 | ||
20 | } | 23 | } |
21 | 24 | ||
22 | size_t Cpdb::recordlength(int n) | 25 | size_t Cpdb::recordlength(int n) |
23 | { | 26 | { |
24 | return recordpos(n+1)-recordpos(n); | 27 | return recordpos(n+1)-recordpos(n); |
25 | } | 28 | } |
26 | 29 | ||
27 | void Cpdb::gotorecordnumber(int n) | 30 | void Cpdb::gotorecordnumber(int n) |
28 | { | 31 | { |
29 | fseek(fin, recordpos(n), SEEK_SET); | 32 | fseek(fin, recordpos(n), SEEK_SET); |
30 | } | 33 | } |
31 | 34 | ||
32 | bool Cpdb::openfile(const char *src) | 35 | bool Cpdb::openfile(const char *src) |
33 | { | 36 | { |
34 | 37 | ||
35 | // printf("In openfile\n"); | 38 | // printf("In openfile\n"); |
36 | int ret = 0; | 39 | int ret = 0; |
37 | // printf("closing fin:%x\n",fin); | 40 | // printf("closing fin:%x\n",fin); |
38 | if (fin != NULL) fclose(fin); | 41 | if (fin != NULL) fclose(fin); |
39 | // printf("opening fin\n"); | 42 | // printf("opening fin\n"); |
40 | fin = fopen(src,"rb"); | 43 | fin = fopen(src,"rb"); |
41 | 44 | ||
42 | if (fin==0) | 45 | if (fin==0) |
43 | { | 46 | { |
44 | return false; | 47 | return false; |
45 | } | 48 | } |
46 | 49 | ||
47 | // just holds the first few chars of the file | 50 | // just holds the first few chars of the file |
48 | //char buf[0x100]; | 51 | //char buf[0x100]; |
49 | fseek(fin,0,SEEK_END); | 52 | struct stat buf; |
50 | file_length = ftell(fin); | 53 | stat(src, &buf); |
54 | file_length = buf.st_size; | ||
55 | // fseek(fin,0,SEEK_END); | ||
56 | // file_length = ftell(fin); | ||
51 | 57 | ||
52 | fseek(fin,0,SEEK_SET); | 58 | // fseek(fin,0,SEEK_SET); |
53 | 59 | ||
54 | fread(&head, 1, sizeof(head), fin); | 60 | fread(&head, 1, sizeof(head), fin); |
55 | 61 | ||
56 | return true; | 62 | return true; |
57 | } | 63 | } |
diff --git a/noncore/apps/opie-reader/plucker.cpp b/noncore/apps/opie-reader/plucker.cpp index ddda4bc..eb039de 100644 --- a/noncore/apps/opie-reader/plucker.cpp +++ b/noncore/apps/opie-reader/plucker.cpp | |||
@@ -1,579 +1,1241 @@ | |||
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <string.h> | 2 | #include <string.h> |
3 | #include <qmessagebox.h> | 3 | #include <qmessagebox.h> |
4 | #include "plucker.h" | 4 | #include <qpixmap.h> |
5 | #include <qpe/qcopenvelope_qws.h> | ||
6 | #ifdef LOCALPICTURES | ||
7 | #include <qscrollview.h> | ||
8 | #endif | ||
9 | #include <qpe/global.h> | ||
10 | #include <qclipboard.h> | ||
11 | #include <qpe/qpeapplication.h> | ||
5 | 12 | ||
13 | #include "plucker.h" | ||
6 | #include "Aportis.h" | 14 | #include "Aportis.h" |
15 | #include "Palm2QImage.h" | ||
16 | #include "name.h" | ||
17 | |||
18 | CPlucker::CPlucker() : | ||
19 | #ifdef LOCALPICTURES | ||
20 | m_viewer(NULL), | ||
21 | m_picture(NULL), | ||
22 | #endif | ||
23 | expandedtextbuffer(NULL), | ||
24 | compressedtextbuffer(NULL), | ||
25 | urls(NULL) | ||
26 | { /*printf("constructing:%x\n",fin);*/ } | ||
7 | 27 | ||
8 | CPlucker::CPlucker() : expandedtextbuffer(NULL), compressedtextbuffer(NULL) { /*printf("constructing:%x\n",fin);*/ } | ||
9 | 28 | ||
29 | void CPlucker::Expand(UInt16 reclen, UInt8 type, UInt8* buffer, UInt16 buffersize) | ||
30 | { | ||
31 | if (type%2 == 0) | ||
32 | { | ||
33 | fread(buffer, reclen, sizeof(char), fin); | ||
34 | } | ||
35 | else | ||
36 | { | ||
37 | fread(compressedtextbuffer, reclen, sizeof(char), fin); | ||
38 | switch (ntohs(hdr0.version)) | ||
39 | { | ||
40 | case 2: | ||
41 | UnZip(reclen, buffer, buffersize); | ||
42 | break; | ||
43 | case 1: | ||
44 | UnDoc(reclen, buffer, buffersize); | ||
45 | break; | ||
46 | } | ||
47 | } | ||
48 | } | ||
10 | 49 | ||
11 | int CPlucker::openfile(const char *src) | 50 | int CPlucker::OpenFile(const char *src) |
12 | { | 51 | { |
52 | m_lastBreak = 0; | ||
13 | if (!Cpdb::openfile(src)) | 53 | if (!Cpdb::openfile(src)) |
14 | { | 54 | { |
15 | return -1; | 55 | return -1; |
16 | } | 56 | } |
17 | 57 | ||
18 | //printf("Okay %u\n", 4); | 58 | //printf("Okay %u\n", 4); |
19 | 59 | ||
20 | if (memcmp(&head.type, "DataPlkr", 8) != 0) return -1; | 60 | if (memcmp(&head.type, "DataPlkr", 8) != 0) return -1; |
21 | 61 | ||
22 | // qDebug("Cool - this IS plucker"); | 62 | // qDebug("Cool - this IS plucker"); |
23 | 63 | ||
24 | textlength = 0; | 64 | EOPPhase = 0; |
25 | for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) | ||
26 | { | ||
27 | CPlucker_dataRecord thisHdr; | ||
28 | gotorecordnumber(recptr); | ||
29 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
30 | if (thisHdr.type < 2) textlength += htons(thisHdr.size); | ||
31 | } | ||
32 | |||
33 | gotorecordnumber(0); | 65 | gotorecordnumber(0); |
34 | fread(&hdr0, 1, sizeof(hdr0), fin); | 66 | fread(&hdr0, 1, sizeof(hdr0), fin); |
35 | //printf("Okay %u\n", 5); | 67 | //printf("Okay %u\n", 5); |
36 | buffersize = 32*1024; | 68 | buffersize = 32*1024; |
37 | compressedtextbuffer = new UInt8[buffersize]; | 69 | compressedtextbuffer = new UInt8[buffersize]; |
38 | expandedtextbuffer = new UInt8[buffersize]; | 70 | expandedtextbuffer = new UInt8[buffersize]; |
39 | 71 | ||
40 | // qDebug("Total number of records:%u", ntohs(head.recordList.numRecords)); | 72 | qDebug("Total number of records:%u", ntohs(head.recordList.numRecords)); |
41 | 73 | ||
42 | unsigned int nrecs = ntohs(hdr0.nRecords); | 74 | unsigned int nrecs = ntohs(hdr0.nRecords); |
43 | // qDebug("Version %u, no. res %u", ntohs(hdr0.version), nrecs); | 75 | qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs); |
44 | for (unsigned int i = 0; i < 4*nrecs; i++) | 76 | UInt16 homerecid = 1; |
77 | UInt16 urlid = 0; | ||
78 | bool urlsfound = false; | ||
79 | for (unsigned int i = 0; i < nrecs; i++) | ||
45 | { | 80 | { |
46 | UInt8 id; | 81 | UInt16 id, name; |
47 | fread(&id, 1, sizeof(id), fin); | 82 | fread(&name, 1, sizeof(name), fin); |
48 | // qDebug("%x", id); | 83 | fread(&id, 1, sizeof(id), fin); |
84 | qDebug("N:%d, I:%d", ntohs(name), ntohs(id)); | ||
85 | if (ntohs(name) == 0) homerecid = ntohs(id); | ||
86 | if (ntohs(name) == 2) | ||
87 | { | ||
88 | urlsfound = true; | ||
89 | urlid = id; | ||
90 | qDebug("Found url index:%d", ntohs(urlid)); | ||
91 | } | ||
92 | //qDebug("%x", id); | ||
49 | } | 93 | } |
94 | |||
95 | textlength = 0; | ||
96 | for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) | ||
97 | { | ||
98 | CPlucker_dataRecord thisHdr; | ||
99 | gotorecordnumber(recptr); | ||
100 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
101 | if (ntohs(thisHdr.uid) == homerecid) | ||
102 | { | ||
103 | m_homepos = textlength; | ||
104 | qDebug("Home pos found after %u records", recptr); | ||
105 | break; | ||
106 | } | ||
107 | if (thisHdr.type < 2) textlength += ntohs(thisHdr.size); | ||
108 | } | ||
109 | textlength = 0; | ||
110 | |||
111 | if (urlsfound) | ||
112 | { | ||
113 | unsigned short recptr = finduid(ntohs(urlid)); | ||
114 | if (recptr != 0) | ||
115 | { | ||
116 | CPlucker_dataRecord thisHdr; | ||
117 | gotorecordnumber(recptr); | ||
118 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
119 | fread(&urlid, 1, sizeof(urlid), fin); | ||
120 | fread(&urlid, 1, sizeof(urlid), fin); | ||
121 | qDebug("urls are in %d", ntohs(urlid)); | ||
122 | recptr = finduid(ntohs(urlid)); | ||
123 | if (recptr != 0) | ||
124 | { | ||
125 | gotorecordnumber(recptr); | ||
126 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
127 | qDebug("Found urls:%x",thisHdr.type); | ||
128 | UInt16 reclen = recordlength(recptr) - sizeof(thisHdr); | ||
129 | gotorecordnumber(recptr); | ||
130 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
131 | urlsize = ntohs(thisHdr.size); | ||
132 | urls = new char[urlsize]; | ||
133 | Expand(reclen, thisHdr.type, (UInt8*)urls, urlsize); | ||
134 | } | ||
135 | } | ||
136 | } | ||
137 | /* | ||
138 | for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) | ||
139 | { | ||
140 | CPlucker_dataRecord thisHdr; | ||
141 | gotorecordnumber(recptr); | ||
142 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
143 | if (thisHdr.uid == urlid) | ||
144 | { | ||
145 | qDebug("Found urls:%x",thisHdr.type); | ||
146 | UInt16 reclen = recordlength(recptr) - sizeof(thisHdr); | ||
147 | gotorecordnumber(recptr); | ||
148 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
149 | urlsize = ntohs(thisHdr.size); | ||
150 | urls = new char[urlsize]; | ||
151 | Expand(reclen, thisHdr.type, (UInt8*)urls, urlsize); | ||
152 | break; | ||
153 | } | ||
154 | } | ||
155 | */ | ||
50 | home(); | 156 | home(); |
157 | #ifdef LOCALPICTURES | ||
158 | if (m_viewer == NULL) | ||
159 | { | ||
160 | m_viewer = new QScrollView(NULL); | ||
161 | m_picture = new QWidget(m_viewer->viewport()); | ||
162 | m_viewer->addChild(m_picture); | ||
163 | } | ||
164 | #endif | ||
51 | return 0; | 165 | return 0; |
166 | |||
167 | } | ||
168 | |||
169 | void CPlucker::sizes(unsigned long& _file, unsigned long& _text) | ||
170 | { | ||
171 | qDebug("Sizes called:%u",textlength); | ||
172 | _file = file_length; | ||
173 | if (textlength == 0) | ||
174 | { | ||
175 | for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) | ||
176 | { | ||
177 | CPlucker_dataRecord thisHdr; | ||
178 | gotorecordnumber(recptr); | ||
179 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
180 | if (thisHdr.type < 2) textlength += ntohs(thisHdr.size); | ||
181 | } | ||
182 | } | ||
183 | _text = textlength; | ||
184 | //ntohl(hdr0.size); | ||
185 | } | ||
186 | |||
187 | |||
188 | char* CPlucker::geturl(UInt16 i) | ||
189 | { | ||
190 | if (urls == NULL) return NULL; | ||
191 | char* ptr = urls; | ||
192 | int rn = 1; | ||
193 | while (ptr - urls < urlsize) | ||
194 | { | ||
195 | if (rn == i) return ptr; | ||
196 | ptr += strlen(ptr)+1; | ||
197 | rn++; | ||
198 | } | ||
199 | return NULL; | ||
200 | } | ||
201 | |||
202 | CPlucker::~CPlucker() | ||
203 | { | ||
204 | if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; | ||
205 | if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; | ||
206 | if (urls != NULL) delete [] urls; | ||
207 | #ifdef LOCALPICTURES | ||
208 | if (m_viewer != NULL) delete m_viewer; | ||
209 | #endif | ||
52 | } | 210 | } |
53 | 211 | ||
54 | int CPlucker::bgetch() | 212 | int CPlucker::bgetch() |
55 | { | 213 | { |
56 | int ch = EOF; | 214 | int ch = EOF; |
57 | if (bufferpos >= buffercontent) | 215 | if (bufferpos >= buffercontent) |
58 | { | 216 | { |
59 | if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF; | 217 | if (!m_continuous) return EOF; |
60 | // qDebug("Passing through %u", currentpos); | 218 | if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF; |
61 | if (!expand(bufferrec+1)) return EOF; | 219 | //qDebug("Passing through %u", currentpos); |
62 | mystyle.unset(); | 220 | if (!expand(bufferrec+1)) return EOF; |
221 | mystyle.unset(); | ||
222 | ch = 10; | ||
223 | EOPPhase = 4; | ||
63 | } | 224 | } |
64 | 225 | else if (bufferpos == m_nextPara) | |
65 | if (bufferpos == m_nextPara) | ||
66 | { | 226 | { |
67 | UInt16 attr = m_ParaAttrs[m_nextParaIndex]; | 227 | while (bufferpos == m_nextPara) |
68 | m_nextParaIndex++; | 228 | { |
69 | if (m_nextParaIndex == m_nParas) | 229 | UInt16 attr = m_ParaAttrs[m_nextParaIndex]; |
70 | { | 230 | m_nextParaIndex++; |
71 | m_nextPara = -1; | 231 | if (m_nextParaIndex == m_nParas) |
72 | } | 232 | { |
73 | else | 233 | m_nextPara = -1; |
74 | { | 234 | } |
75 | m_nextPara += m_ParaOffsets[m_nextParaIndex]; | 235 | else |
76 | } | 236 | { |
77 | // qDebug("New paragraph"); | 237 | m_nextPara += m_ParaOffsets[m_nextParaIndex]; |
78 | ch = 10; | 238 | } |
239 | } | ||
240 | mystyle.unset(); | ||
241 | if (m_lastBreak == locate()) | ||
242 | { | ||
243 | currentpos++; | ||
244 | ch = expandedtextbuffer[bufferpos++]; | ||
245 | } | ||
246 | else | ||
247 | { | ||
248 | ch = 10; | ||
249 | } | ||
79 | } | 250 | } |
80 | else | 251 | else |
81 | { | 252 | { |
82 | currentpos++; | 253 | currentpos++; |
83 | ch = expandedtextbuffer[bufferpos++]; | 254 | ch = expandedtextbuffer[bufferpos++]; |
84 | } | 255 | } |
85 | return ch; | 256 | return ch; |
86 | } | 257 | } |
87 | 258 | ||
88 | int CPlucker::getch() | 259 | int CPlucker::getch() |
89 | { | 260 | { |
90 | int ch = bgetch(); | 261 | mystyle.clearPicture(); |
91 | while (ch == 0) | 262 | |
92 | { | 263 | |
93 | ch = bgetch(); | 264 | if (EOPPhase > 0) |
94 | // qDebug("Function:%x", ch); | ||
95 | switch (ch) | ||
96 | { | ||
97 | case 0x38: | ||
98 | ch = 10; | ||
99 | break; | ||
100 | case 0x0a: | ||
101 | case 0x0c: | ||
102 | { | ||
103 | unsigned long ln = 0; | ||
104 | int skip = ch & 7; | ||
105 | for (int i = 0; i < 2; i++) | ||
106 | { | 265 | { |
107 | int ch = bgetch(); | 266 | int ch = 10; |
108 | ln = (ln << 8) + ch; | 267 | switch (EOPPhase) |
109 | // qDebug("ch:%d, ln:%u", ch, ln); | 268 | { |
269 | case 4: | ||
270 | mystyle.setPicture(hRule(100,5)); | ||
271 | mystyle.setCentreJustify(); | ||
272 | ch = '#'; | ||
273 | break; | ||
274 | case 3: | ||
275 | mystyle.setFontSize(3); | ||
276 | ch = 10; | ||
277 | break; | ||
278 | case 2: | ||
279 | ch = 10; | ||
280 | break; | ||
281 | case 1: | ||
282 | mystyle.unset(); | ||
283 | default: | ||
284 | ch = 10; | ||
285 | } | ||
286 | EOPPhase--; | ||
287 | return ch; | ||
110 | } | 288 | } |
111 | if (skip == 2) | 289 | |
290 | |||
291 | int ch = bgetch(); | ||
292 | while (ch == 0) | ||
112 | { | 293 | { |
113 | ln <<= 16; | 294 | ch = bgetch(); |
295 | //qDebug("Function:%x", ch); | ||
296 | switch (ch) | ||
297 | { | ||
298 | case 0x38: | ||
299 | // qDebug("Break:%u", locate()); | ||
300 | if (m_lastBreak == locate()) | ||
301 | { | ||
302 | ch = bgetch(); | ||
303 | } | ||
304 | else | ||
305 | { | ||
306 | ch = 10; | ||
307 | } | ||
308 | m_lastBreak = locate(); | ||
309 | break; | ||
310 | case 0x0a: | ||
311 | case 0x0c: | ||
312 | { | ||
313 | unsigned long ln = 0; | ||
314 | int skip = ch & 7; | ||
315 | for (int i = 0; i < 2; i++) | ||
316 | { | ||
317 | int ch = bgetch(); | ||
318 | ln = (ln << 8) + ch; | ||
319 | // qDebug("ch:%d, ln:%u", ch, ln); | ||
320 | } | ||
321 | if (skip == 2) | ||
322 | { | ||
323 | ln <<= 16; | ||
324 | } | ||
325 | else | ||
326 | { | ||
327 | for (int i = 0; i < 2; i++) | ||
328 | { | ||
329 | int ch = bgetch(); | ||
330 | ln = (ln << 8) + ch; | ||
331 | // qDebug("ch:%d, ln:%u", ch, ln); | ||
332 | } | ||
333 | } | ||
334 | // qDebug("ln:%u", ln); | ||
335 | mystyle.setLink(true); | ||
336 | mystyle.setData(ln); | ||
337 | // mystyle.setColour(255, 0, 0); | ||
338 | bool hasseen = false; | ||
339 | for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++) | ||
340 | { | ||
341 | if (*it == ln) | ||
342 | { | ||
343 | hasseen = true; | ||
344 | break; | ||
345 | } | ||
346 | } | ||
347 | if (hasseen) | ||
348 | { | ||
349 | mystyle.setStrikethru(); | ||
350 | } | ||
351 | else | ||
352 | { | ||
353 | mystyle.setUnderline(); | ||
354 | } | ||
355 | ch = bgetch(); | ||
356 | } | ||
357 | break; | ||
358 | case 0x08: | ||
359 | ch = bgetch(); | ||
360 | // mystyle.setColour(0, 0, 0); | ||
361 | mystyle.unsetUnderline(); | ||
362 | mystyle.unsetStrikethru(); | ||
363 | mystyle.setLink(false); | ||
364 | mystyle.setData(0); | ||
365 | break; | ||
366 | case 0x40: | ||
367 | mystyle.setItalic(); | ||
368 | ch = bgetch(); | ||
369 | break; | ||
370 | case 0x48: | ||
371 | mystyle.unsetItalic(); | ||
372 | ch = bgetch(); | ||
373 | break; | ||
374 | case 0x11: | ||
375 | { | ||
376 | ch = bgetch(); | ||
377 | // qDebug("Font:%d",ch); | ||
378 | switch (ch) | ||
379 | { | ||
380 | case 0: | ||
381 | mystyle.unsetMono(); | ||
382 | mystyle.unsetBold(); | ||
383 | mystyle.setFontSize(0); | ||
384 | break; | ||
385 | case 1: | ||
386 | mystyle.unsetMono(); | ||
387 | mystyle.setBold(); | ||
388 | mystyle.setFontSize(3); | ||
389 | break; | ||
390 | case 2: | ||
391 | mystyle.unsetMono(); | ||
392 | mystyle.setBold(); | ||
393 | mystyle.setFontSize(2); | ||
394 | break; | ||
395 | case 3: | ||
396 | mystyle.unsetMono(); | ||
397 | mystyle.setBold(); | ||
398 | // mystyle.unsetBold(); | ||
399 | mystyle.setFontSize(1); | ||
400 | break; | ||
401 | case 4: | ||
402 | mystyle.unsetMono(); | ||
403 | mystyle.setBold(); | ||
404 | // mystyle.unsetBold(); | ||
405 | mystyle.setFontSize(0); | ||
406 | break; | ||
407 | case 5: | ||
408 | mystyle.unsetMono(); | ||
409 | mystyle.setBold(); | ||
410 | mystyle.setFontSize(0); | ||
411 | break; | ||
412 | case 6: | ||
413 | mystyle.unsetMono(); | ||
414 | mystyle.setBold(); | ||
415 | mystyle.setFontSize(0); | ||
416 | break; | ||
417 | case 7: | ||
418 | mystyle.unsetMono(); | ||
419 | mystyle.setBold(); | ||
420 | mystyle.setFontSize(0); | ||
421 | break; | ||
422 | case 8: // should be fixed width | ||
423 | qDebug("Trying fixed width"); | ||
424 | mystyle.unsetBold(); | ||
425 | mystyle.setFontSize(0); | ||
426 | mystyle.setMono(); | ||
427 | break; | ||
428 | default: | ||
429 | mystyle.unsetBold(); | ||
430 | mystyle.unsetMono(); | ||
431 | mystyle.setFontSize(0); | ||
432 | break; | ||
433 | } | ||
434 | ch = bgetch(); | ||
435 | } | ||
436 | break; | ||
437 | case 0x29: | ||
438 | ch = bgetch(); | ||
439 | switch (ch) | ||
440 | { | ||
441 | case 0: | ||
442 | mystyle.setLeftJustify(); | ||
443 | // qDebug("left"); | ||
444 | break; | ||
445 | case 1: | ||
446 | mystyle.setRightJustify(); | ||
447 | // qDebug("right"); | ||
448 | break; | ||
449 | case 2: | ||
450 | mystyle.setCentreJustify(); | ||
451 | // qDebug("centre"); | ||
452 | break; | ||
453 | case 3: | ||
454 | mystyle.setFullJustify(); | ||
455 | // qDebug("full"); | ||
456 | break; | ||
457 | |||
458 | } | ||
459 | ch = bgetch(); | ||
460 | break; | ||
461 | case 0x53: | ||
462 | { | ||
463 | int r = bgetch(); | ||
464 | int g = bgetch(); | ||
465 | int b = bgetch(); | ||
466 | mystyle.setColour(r,g,b); | ||
467 | ch = bgetch(); | ||
468 | } | ||
469 | break; | ||
470 | case 0x1a: | ||
471 | case 0x5c: | ||
472 | { | ||
473 | bool hasalternate = (ch == 0x5c); | ||
474 | UInt16 ir = bgetch(); | ||
475 | ir = (ir << 8) + bgetch(); | ||
476 | if (hasalternate) | ||
477 | { | ||
478 | qDebug("Alternate image:%x", ir); | ||
479 | UInt16 ir2 = bgetch(); | ||
480 | ir2 = (ir2 << 8) + bgetch(); | ||
481 | mystyle.setPicture(expandimg(ir2, true), true, ir); | ||
482 | #ifdef LOCALPICTURES | ||
483 | UInt32 ln = ir; | ||
484 | ln <<= 16; | ||
485 | mystyle.setLink(true); | ||
486 | mystyle.setData(ln); | ||
487 | #endif | ||
488 | } | ||
489 | else | ||
490 | { | ||
491 | mystyle.setPicture(expandimg(ir)); | ||
492 | } | ||
493 | if (mystyle.getLink()) qDebug("Picture link!"); | ||
494 | ch = '#'; | ||
495 | } | ||
496 | // ch = bgetch(); | ||
497 | break; | ||
498 | case 0x33: | ||
499 | { | ||
500 | UInt8 h = bgetch(); | ||
501 | UInt8 wc = bgetch(); | ||
502 | UInt8 pc = bgetch(); | ||
503 | UInt16 w = wc; | ||
504 | // qDebug("h,w,pc [%u, %u, %u]", h, w, pc); | ||
505 | if (w == 0) | ||
506 | { | ||
507 | w = (240*(unsigned long)pc)/100; | ||
508 | } | ||
509 | if (w == 0) w = 320; | ||
510 | mystyle.setPicture(hRule(w,h,mystyle.Red(),mystyle.Green(),mystyle.Blue())); | ||
511 | // if (mystyle.getLink()) qDebug("hRule link!"); | ||
512 | ch = '#'; | ||
513 | } | ||
514 | break; | ||
515 | case 0x60: | ||
516 | mystyle.setUnderline(); | ||
517 | ch = bgetch(); | ||
518 | break; | ||
519 | case 0x68: | ||
520 | mystyle.unsetUnderline(); | ||
521 | ch = bgetch(); | ||
522 | break; | ||
523 | case 0x22: | ||
524 | ch = bgetch(); | ||
525 | mystyle.setLeftMargin(ch); | ||
526 | // qDebug("Left margin:%d", ch); | ||
527 | ch = bgetch(); | ||
528 | mystyle.setRightMargin(ch); | ||
529 | // qDebug("Right margin:%d", ch); | ||
530 | ch = bgetch(); | ||
531 | break; | ||
532 | case 0x70: | ||
533 | mystyle.setStrikethru(); | ||
534 | ch = bgetch(); | ||
535 | break; | ||
536 | case 0x78: | ||
537 | mystyle.unsetStrikethru(); | ||
538 | ch = bgetch(); | ||
539 | break; | ||
540 | case 0x83: | ||
541 | case 0x85: | ||
542 | default: | ||
543 | qDebug("Function:%x NOT IMPLEMENTED", ch); | ||
544 | { | ||
545 | int skip = ch & 7; | ||
546 | for (int i = 0; i < skip; i++) | ||
547 | { | ||
548 | ch = bgetch(); | ||
549 | // qDebug("Arg %d, %d", i, ch); | ||
550 | } | ||
551 | ch = bgetch(); | ||
552 | } | ||
553 | } | ||
114 | } | 554 | } |
115 | else | 555 | |
556 | if (m_lastIsBreak && !mystyle.isMono()) | ||
116 | { | 557 | { |
117 | for (int i = 0; i < 2; i++) | 558 | while (ch == ' ') |
118 | { | 559 | { |
119 | int ch = bgetch(); | 560 | ch = getch(); |
120 | ln = (ln << 8) + ch; | 561 | } |
121 | // qDebug("ch:%d, ln:%u", ch, ln); | ||
122 | } | ||
123 | } | ||
124 | // qDebug("ln:%u", ln); | ||
125 | mystyle.setLink(true); | ||
126 | mystyle.setData(ln); | ||
127 | mystyle.setColour(255, 0, 0); | ||
128 | ch = bgetch(); | ||
129 | } | ||
130 | break; | ||
131 | case 0x08: | ||
132 | ch = bgetch(); | ||
133 | mystyle.setColour(0, 0, 0); | ||
134 | mystyle.setLink(false); | ||
135 | mystyle.setData(0); | ||
136 | break; | ||
137 | case 0x40: | ||
138 | mystyle.setItalic(); | ||
139 | ch = bgetch(); | ||
140 | break; | ||
141 | case 0x48: | ||
142 | mystyle.unsetItalic(); | ||
143 | ch = bgetch(); | ||
144 | break; | ||
145 | case 0x11: | ||
146 | { | ||
147 | ch = bgetch(); | ||
148 | qDebug("Font:%d",ch); | ||
149 | switch (ch) | ||
150 | { | ||
151 | case 0: | ||
152 | mystyle.unsetBold(); | ||
153 | mystyle.setFontSize(0); | ||
154 | break; | ||
155 | case 1: | ||
156 | mystyle.setBold(); | ||
157 | mystyle.setFontSize(1); | ||
158 | break; | ||
159 | case 2: | ||
160 | mystyle.setBold(); | ||
161 | mystyle.setFontSize(1); | ||
162 | break; | ||
163 | case 3: | ||
164 | // mystyle.setBold(); | ||
165 | mystyle.setFontSize(1); | ||
166 | break; | ||
167 | case 4: | ||
168 | // mystyle.setBold(); | ||
169 | mystyle.setFontSize(1); | ||
170 | break; | ||
171 | case 5: | ||
172 | mystyle.setBold(); | ||
173 | mystyle.setFontSize(0); | ||
174 | break; | ||
175 | case 6: | ||
176 | mystyle.setBold(); | ||
177 | mystyle.setFontSize(0); | ||
178 | break; | ||
179 | case 7: | ||
180 | mystyle.setBold(); | ||
181 | mystyle.setFontSize(0); | ||
182 | break; | ||
183 | case 8: // should be fixed width | ||
184 | mystyle.unsetBold(); | ||
185 | mystyle.setFontSize(0); | ||
186 | break; | ||
187 | default: | ||
188 | mystyle.unsetBold(); | ||
189 | mystyle.setFontSize(0); | ||
190 | break; | ||
191 | } | ||
192 | ch = bgetch(); | ||
193 | } | ||
194 | break; | ||
195 | case 0x29: | ||
196 | ch = bgetch(); | ||
197 | switch (ch) | ||
198 | { | ||
199 | case 0: | ||
200 | mystyle.setLeftJustify(); | ||
201 | // qDebug("left"); | ||
202 | break; | ||
203 | case 1: | ||
204 | mystyle.setRightJustify(); | ||
205 | // qDebug("right"); | ||
206 | break; | ||
207 | case 2: | ||
208 | mystyle.setCentreJustify(); | ||
209 | // qDebug("centre"); | ||
210 | break; | ||
211 | case 3: | ||
212 | mystyle.setFullJustify(); | ||
213 | // qDebug("full"); | ||
214 | break; | ||
215 | |||
216 | } | ||
217 | ch = bgetch(); | ||
218 | break; | ||
219 | case 0x53: | ||
220 | { | ||
221 | int r = bgetch(); | ||
222 | int g = bgetch(); | ||
223 | int b = bgetch(); | ||
224 | mystyle.setColour(r,g,b); | ||
225 | ch = bgetch(); | ||
226 | } | ||
227 | break; | ||
228 | case 0x1a: | ||
229 | /* | ||
230 | { | ||
231 | UInt16 ir = bgetch(); | ||
232 | ir = (ir << 8) + bgetch(); | ||
233 | expandimg(ir); | ||
234 | } | ||
235 | ch = bgetch(); | ||
236 | break; | ||
237 | */ | ||
238 | case 0x33: | ||
239 | case 0x22: | ||
240 | case 0x5c: | ||
241 | case 0x60: | ||
242 | case 0x68: | ||
243 | case 0x70: | ||
244 | case 0x78: | ||
245 | case 0x83: | ||
246 | case 0x85: | ||
247 | default: | ||
248 | qDebug("Function:%x NOT IMPLEMENTED", ch); | ||
249 | { | ||
250 | int skip = ch & 7; | ||
251 | for (int i = 0; i < skip; i++) | ||
252 | { | ||
253 | ch = bgetch(); | ||
254 | qDebug("Arg %d, %d", i, ch); | ||
255 | } | ||
256 | ch = bgetch(); | ||
257 | } | ||
258 | } | ||
259 | } | 562 | } |
563 | |||
564 | m_lastIsBreak = (ch == 10); | ||
565 | |||
260 | return ch; | 566 | return ch; |
261 | } | 567 | } |
262 | 568 | ||
263 | void CPlucker::getch(int& ch, CStyle& sty) | 569 | void CPlucker::getch(int& ch, CStyle& sty) |
264 | { | 570 | { |
265 | ch = getch(); | 571 | ch = getch(); |
266 | sty = mystyle; | 572 | sty = mystyle; |
267 | } | 573 | } |
268 | 574 | ||
269 | unsigned int CPlucker::locate() | 575 | unsigned int CPlucker::locate() |
270 | { | 576 | { |
271 | return currentpos; | 577 | return currentpos; |
272 | /* | 578 | /* |
273 | UInt16 thisrec = 1; | 579 | UInt16 thisrec = 1; |
274 | unsigned long locpos = 0; | 580 | unsigned long locpos = 0; |
275 | gotorecordnumber(thisrec); | 581 | gotorecordnumber(thisrec); |
276 | CPlucker_dataRecord thisHdr; | 582 | CPlucker_dataRecord thisHdr; |
277 | while (thisrec < bufferrec) | 583 | while (thisrec < bufferrec) |
278 | { | 584 | { |
279 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | 585 | fread(&thisHdr, 1, sizeof(thisHdr), fin); |
280 | if (thisHdr.type < 2) locpos += htons(thisHdr.size); | 586 | if (thisHdr.type < 2) locpos += ntohs(thisHdr.size); |
281 | thisrec++; | 587 | thisrec++; |
282 | gotorecordnumber(thisrec); | 588 | gotorecordnumber(thisrec); |
283 | } | 589 | } |
284 | return locpos+bufferpos; | 590 | return locpos+bufferpos; |
285 | */ | 591 | */ |
286 | } | 592 | } |
287 | 593 | ||
288 | void CPlucker::locate(unsigned int n) | 594 | void CPlucker::locate(unsigned int n) |
289 | { | 595 | { |
290 | UInt16 thisrec = 0; | 596 | UInt16 thisrec = 0; |
291 | unsigned long locpos = 0; | 597 | unsigned long locpos = 0; |
292 | unsigned long bs = 0; | 598 | unsigned long bs = 0; |
293 | CPlucker_dataRecord thisHdr; | 599 | CPlucker_dataRecord thisHdr; |
294 | do | 600 | do |
295 | { | 601 | { |
296 | thisrec++; | 602 | thisrec++; |
297 | locpos += bs; | 603 | locpos += bs; |
298 | gotorecordnumber(thisrec); | 604 | gotorecordnumber(thisrec); |
299 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | 605 | fread(&thisHdr, 1, sizeof(thisHdr), fin); |
300 | if (thisHdr.type < 2) | 606 | if (thisHdr.type < 2) |
301 | { | 607 | { |
302 | bs = htons(thisHdr.size); | 608 | bs = ntohs(thisHdr.size); |
303 | } | 609 | } |
304 | else | 610 | else |
305 | { | 611 | { |
306 | bs = 0; | 612 | bs = 0; |
307 | } | 613 | } |
308 | } while (locpos + bs < n); | 614 | } while (locpos + bs <= n); |
309 | currentpos = locpos; | 615 | currentpos = locpos; |
310 | expand(thisrec); | 616 | expand(thisrec); |
617 | #ifdef _FAST | ||
311 | while (currentpos < n && bufferpos < buffercontent) bgetch(); | 618 | while (currentpos < n && bufferpos < buffercontent) bgetch(); |
619 | #else | ||
620 | while (currentpos < n && bufferpos < buffercontent) getch(); | ||
621 | #endif | ||
312 | } | 622 | } |
313 | 623 | ||
314 | bool CPlucker::hyperlink(unsigned int n) | 624 | bool CPlucker::hyperlink(unsigned int n) |
315 | { | 625 | { |
626 | visited.push_front(n); | ||
316 | UInt16 tuid = (n >> 16); | 627 | UInt16 tuid = (n >> 16); |
317 | n &= 0xffff; | 628 | n &= 0xffff; |
629 | // qDebug("Hyper:<%u,%u>", tuid, n); | ||
318 | UInt16 thisrec = 1; | 630 | UInt16 thisrec = 1; |
319 | currentpos = 0; | 631 | currentpos = 0; |
320 | gotorecordnumber(thisrec); | 632 | gotorecordnumber(thisrec); |
321 | CPlucker_dataRecord thisHdr; | 633 | CPlucker_dataRecord thisHdr; |
322 | while (1) | 634 | while (1) |
323 | { | 635 | { |
324 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | 636 | fread(&thisHdr, 1, sizeof(thisHdr), fin); |
325 | if (tuid <= htons(thisHdr.uid)) break; | 637 | if (tuid == ntohs(thisHdr.uid)) break; |
326 | if (thisHdr.type < 2) currentpos += htons(thisHdr.size); | 638 | if (thisHdr.type < 2) currentpos += ntohs(thisHdr.size); |
327 | // qDebug("hyper-cp:%u", currentpos); | 639 | //qDebug("hyper-cp:%u", currentpos); |
328 | thisrec++; | 640 | thisrec++; |
329 | gotorecordnumber(thisrec); | 641 | if (thisrec >= ntohs(head.recordList.numRecords)) |
642 | { | ||
643 | if (urls == NULL) | ||
644 | { | ||
645 | QMessageBox::information(NULL, | ||
646 | PROGNAME, | ||
647 | QString("No external links\nin this pluck") | ||
648 | ); | ||
649 | } | ||
650 | else | ||
651 | { | ||
652 | char *turl = geturl(tuid); | ||
653 | if (turl == NULL) | ||
654 | { | ||
655 | QMessageBox::information(NULL, | ||
656 | PROGNAME, | ||
657 | QString("Couldn't find link") | ||
658 | ); | ||
659 | } | ||
660 | else | ||
661 | { | ||
662 | QString wrd(turl); | ||
663 | QClipboard* cb = QApplication::clipboard(); | ||
664 | cb->setText(wrd); | ||
665 | if (wrd.length() > 10) | ||
666 | { | ||
667 | Global::statusMessage(wrd.left(8) + ".."); | ||
668 | } | ||
669 | } | ||
670 | } | ||
671 | return false; | ||
672 | } | ||
673 | gotorecordnumber(thisrec); | ||
330 | } | 674 | } |
331 | if (thisHdr.type > 1) | 675 | if (thisHdr.type > 1) |
332 | { | 676 | { |
333 | QMessageBox::information(NULL, | 677 | if (thisHdr.type == 4) |
334 | QString("OpieReader"), | 678 | { |
335 | QString("External links\nnot yet supported") | 679 | QMessageBox::information(NULL, |
336 | ); | 680 | PROGNAME, |
337 | return false; | 681 | QString("Mailto links\nnot yet supported (2)")); |
682 | } | ||
683 | else | ||
684 | { | ||
685 | #ifdef LOCALPICTURES | ||
686 | if (thisHdr.type > 3) | ||
687 | { | ||
688 | #endif | ||
689 | QMessageBox::information(NULL, | ||
690 | PROGNAME, | ||
691 | QString("External links\nnot yet supported (2)") | ||
692 | ); | ||
693 | #ifdef LOCALPICTURES | ||
694 | } | ||
695 | else | ||
696 | { | ||
697 | showimg(tuid); | ||
698 | } | ||
699 | #endif | ||
700 | } | ||
701 | return false; | ||
702 | } | ||
703 | /* | ||
704 | if (thisHdr.type == 2 || thisHdr.type == 3) | ||
705 | { | ||
706 | expandimg(thisrec); | ||
707 | |||
338 | } | 708 | } |
709 | */ | ||
339 | else | 710 | else |
340 | { | 711 | { |
341 | expand(thisrec); | 712 | expand(thisrec); |
342 | while (bufferpos < n && bufferpos < buffercontent) getch(); | 713 | if (n != 0) |
714 | { | ||
715 | if (n >= m_nParas) | ||
716 | { | ||
717 | QMessageBox::information(NULL, | ||
718 | PROGNAME, | ||
719 | QString("Error in link\nPara # too big") | ||
720 | ); | ||
721 | return false; | ||
722 | } | ||
723 | unsigned int noff = 0; | ||
724 | for (int i = 0; i < n; i++) noff += m_ParaOffsets[i]; | ||
725 | n = noff; | ||
726 | } | ||
727 | if (n > ntohs(thisHdr.size)) | ||
728 | { | ||
729 | QMessageBox::information(NULL, | ||
730 | PROGNAME, | ||
731 | QString("Error in link\nOffset too big") | ||
732 | ); | ||
733 | return false; | ||
734 | } | ||
735 | qDebug("Hyper:<%u,%u>", tuid, n); | ||
736 | while (bufferpos < n && bufferpos < buffercontent) getch(); | ||
343 | } | 737 | } |
344 | return true; | 738 | return true; |
345 | } | 739 | } |
740 | /* | ||
741 | bool CPlucker::hyperlink(unsigned int n) | ||
742 | { | ||
743 | visited.push_front(n); | ||
744 | UInt16 tuid = (n >> 16); | ||
745 | n &= 0xffff; | ||
746 | // qDebug("Hyper:<%u,%u>", tuid, n); | ||
747 | UInt16 thisrec = finduid(tuid); | ||
748 | if (thisrec == 0) | ||
749 | { | ||
750 | if (urls == NULL) | ||
751 | { | ||
752 | QMessageBox::information(NULL, | ||
753 | PROGNAME, | ||
754 | QString("No external links\nin this pluck") | ||
755 | ); | ||
756 | } | ||
757 | else | ||
758 | { | ||
759 | char *turl = geturl(tuid); | ||
760 | if (turl == NULL) | ||
761 | { | ||
762 | QMessageBox::information(NULL, | ||
763 | PROGNAME, | ||
764 | QString("Couldn't find link") | ||
765 | ); | ||
766 | } | ||
767 | else | ||
768 | { | ||
769 | QString wrd(turl); | ||
770 | QClipboard* cb = QApplication::clipboard(); | ||
771 | cb->setText(wrd); | ||
772 | if (wrd.length() > 10) | ||
773 | { | ||
774 | Global::statusMessage(wrd.left(8) + ".."); | ||
775 | } | ||
776 | } | ||
777 | } | ||
778 | return false; | ||
779 | } | ||
780 | else | ||
781 | { | ||
782 | currentpos = 0; | ||
783 | gotorecordnumber(thisrec); | ||
784 | CPlucker_dataRecord thisHdr; | ||
785 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
346 | 786 | ||
787 | if (thisHdr.type > 1) | ||
788 | { | ||
789 | if (thisHdr.type == 4) | ||
790 | { | ||
791 | QMessageBox::information(NULL, | ||
792 | PROGNAME, | ||
793 | QString("Mailto links\nnot yet supported (2)")); | ||
794 | } | ||
795 | else | ||
796 | { | ||
797 | #ifdef LOCALPICTURES | ||
798 | if (thisHdr.type > 3) | ||
799 | { | ||
800 | #endif | ||
801 | QMessageBox::information(NULL, | ||
802 | PROGNAME, | ||
803 | QString("External links\nnot yet supported (2)") | ||
804 | ); | ||
805 | #ifdef LOCALPICTURES | ||
806 | } | ||
807 | else | ||
808 | { | ||
809 | showimg(tuid); | ||
810 | } | ||
811 | #endif | ||
812 | } | ||
813 | return false; | ||
814 | } | ||
815 | // if (thisHdr.type == 2 || thisHdr.type == 3) | ||
816 | // { | ||
817 | // expandimg(thisrec); | ||
818 | // } | ||
819 | else | ||
820 | { | ||
821 | expand(thisrec); | ||
822 | if (n != 0) | ||
823 | { | ||
824 | if (n >= m_nParas) | ||
825 | { | ||
826 | QMessageBox::information(NULL, | ||
827 | PROGNAME, | ||
828 | QString("Error in link\nPara # too big") | ||
829 | ); | ||
830 | return false; | ||
831 | } | ||
832 | unsigned int noff = 0; | ||
833 | for (int i = 0; i < n; i++) noff += m_ParaOffsets[i]; | ||
834 | n = noff; | ||
835 | } | ||
836 | if (n > ntohs(thisHdr.size)) | ||
837 | { | ||
838 | QMessageBox::information(NULL, | ||
839 | PROGNAME, | ||
840 | QString("Error in link\nOffset too big") | ||
841 | ); | ||
842 | return false; | ||
843 | } | ||
844 | qDebug("Hyper:<%u,%u>", tuid, n); | ||
845 | while (bufferpos < n && bufferpos < buffercontent) getch(); | ||
846 | } | ||
847 | return true; | ||
848 | } | ||
849 | } | ||
850 | */ | ||
347 | bool CPlucker::expand(int thisrec) | 851 | bool CPlucker::expand(int thisrec) |
348 | { | 852 | { |
349 | mystyle.unset(); | 853 | mystyle.unset(); |
350 | size_t reclen = recordlength(thisrec); | 854 | size_t reclen = recordlength(thisrec); |
351 | gotorecordnumber(thisrec); | 855 | gotorecordnumber(thisrec); |
352 | CPlucker_dataRecord thisHdr; | 856 | CPlucker_dataRecord thisHdr; |
353 | while (1) | 857 | while (1) |
354 | { | 858 | { |
355 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | 859 | fread(&thisHdr, 1, sizeof(thisHdr), fin); |
356 | // qDebug("This (%d) type is %d, uid is %u", thisrec, thisHdr.type, ntohs(thisHdr.uid)); | 860 | //qDebug("This (%d) type is %d, uid is %u", thisrec, thisHdr.type, ntohs(thisHdr.uid)); |
357 | if (thisHdr.type < 2) break; | 861 | if (thisHdr.type < 2) break; |
358 | qDebug("Skipping paragraph of type %d", thisHdr.type); | 862 | qDebug("Skipping paragraph of type %d", thisHdr.type); |
359 | if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false; | 863 | if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false; |
360 | reclen = recordlength(thisrec); | 864 | reclen = recordlength(thisrec); |
361 | gotorecordnumber(thisrec); | 865 | gotorecordnumber(thisrec); |
362 | } | 866 | } |
363 | m_nParas = ntohs(thisHdr.nParagraphs); | 867 | m_nParas = ntohs(thisHdr.nParagraphs); |
364 | // qDebug("It has %u paragraphs and is %u bytes", htons(thisHdr.nParagraphs), htons(thisHdr.size)); | 868 | //qDebug("It has %u paragraphs and is %u bytes", ntohs(thisHdr.nParagraphs), ntohs(thisHdr.size)); |
365 | uid = ntohs(thisHdr.uid); | 869 | uid = ntohs(thisHdr.uid); |
366 | for (int i = 0; i < m_nParas; i++) | 870 | for (int i = 0; i < m_nParas; i++) |
367 | { | 871 | { |
368 | UInt16 ubytes, attrs; | 872 | UInt16 ubytes, attrs; |
369 | fread(&ubytes, 1, sizeof(ubytes), fin); | 873 | fread(&ubytes, 1, sizeof(ubytes), fin); |
370 | fread(&attrs, 1, sizeof(attrs), fin); | 874 | fread(&attrs, 1, sizeof(attrs), fin); |
371 | m_ParaOffsets[i] = ntohs(ubytes); | 875 | m_ParaOffsets[i] = ntohs(ubytes); |
372 | m_ParaAttrs[i] = ntohs(attrs); | 876 | m_ParaAttrs[i] = ntohs(attrs); |
373 | // qDebug("Bytes %u, Attr %x", ntohs(ubytes), attrs); | 877 | //qDebug("Bytes %u, Attr %x", ntohs(ubytes), attrs); |
374 | } | 878 | } |
375 | if (m_nParas > 0) | 879 | if (m_nParas > 0) |
376 | { | 880 | { |
377 | m_nextPara = m_ParaOffsets[0]; | 881 | m_nextPara = m_ParaOffsets[0]; |
378 | // qDebug("First offset = %u", m_nextPara); | 882 | //qDebug("First offset = %u", m_nextPara); |
379 | m_nextParaIndex = 0; | 883 | m_nextParaIndex = 0; |
380 | } | 884 | } |
381 | else | 885 | else |
382 | { | 886 | { |
383 | m_nextPara = -1; | 887 | m_nextPara = -1; |
384 | } | 888 | } |
385 | 889 | ||
386 | reclen -= sizeof(thisHdr)+4*m_nParas; | 890 | reclen -= sizeof(thisHdr)+4*m_nParas; |
387 | 891 | ||
388 | buffercontent = htons(thisHdr.size); | 892 | buffercontent = ntohs(thisHdr.size); |
389 | 893 | ||
390 | if (thisHdr.type == 0) | 894 | Expand(reclen, thisHdr.type, expandedtextbuffer, buffercontent); |
391 | { | ||
392 | fread(expandedtextbuffer, reclen, sizeof(char), fin); | ||
393 | } | ||
394 | else | ||
395 | { | ||
396 | fread(compressedtextbuffer, reclen, sizeof(char), fin); | ||
397 | switch (ntohs(hdr0.version)) | ||
398 | { | ||
399 | case 2: | ||
400 | UnZip(reclen, expandedtextbuffer, buffercontent); | ||
401 | break; | ||
402 | case 1: | ||
403 | UnDoc(reclen, expandedtextbuffer, buffercontent); | ||
404 | break; | ||
405 | } | ||
406 | } | ||
407 | bufferpos = 0; | 895 | bufferpos = 0; |
408 | bufferrec = thisrec; | 896 | bufferrec = thisrec; |
409 | // qDebug("BC:%u, HS:%u", buffercontent, ntohs(thisHdr.size)); | 897 | // qDebug("BC:%u, HS:%u", buffercontent, ntohs(thisHdr.size)); |
410 | return true; | 898 | return true; |
411 | } | 899 | } |
412 | 900 | ||
413 | void CPlucker::UnZip(size_t reclen, UInt8* tgtbuffer, UInt16 bsize) | 901 | void CPlucker::UnZip(size_t reclen, UInt8* tgtbuffer, UInt16 bsize) |
414 | { | 902 | { |
415 | z_stream zstream; | 903 | z_stream zstream; |
416 | memset(&zstream,sizeof(zstream),0); | 904 | memset(&zstream,sizeof(zstream),0); |
417 | zstream.next_in = compressedtextbuffer; | 905 | zstream.next_in = compressedtextbuffer; |
418 | zstream.next_out = tgtbuffer; | 906 | zstream.next_out = tgtbuffer; |
419 | zstream.avail_out = bsize; | 907 | zstream.avail_out = bsize; |
420 | zstream.avail_in = reclen; | 908 | zstream.avail_in = reclen; |
421 | 909 | ||
422 | int keylen = 0; | 910 | int keylen = 0; |
423 | 911 | ||
424 | zstream.zalloc = Z_NULL; | 912 | zstream.zalloc = Z_NULL; |
425 | zstream.zfree = Z_NULL; | 913 | zstream.zfree = Z_NULL; |
426 | zstream.opaque = Z_NULL; | 914 | zstream.opaque = Z_NULL; |
427 | 915 | ||
428 | // printf("Initialising\n"); | 916 | // printf("Initialising\n"); |
429 | 917 | ||
430 | inflateInit(&zstream); | 918 | inflateInit(&zstream); |
431 | int err = 0; | 919 | int err = 0; |
432 | do { | 920 | do { |
433 | if ( zstream.avail_in == 0 && 0 < keylen ) { | 921 | if ( zstream.avail_in == 0 && 0 < keylen ) { |
434 | zstream.next_in = compressedtextbuffer + keylen; | 922 | zstream.next_in = compressedtextbuffer + keylen; |
435 | zstream.avail_in = reclen - keylen; | 923 | zstream.avail_in = reclen - keylen; |
436 | keylen = 0; | 924 | keylen = 0; |
437 | } | 925 | } |
438 | zstream.next_out = tgtbuffer; | 926 | zstream.next_out = tgtbuffer; |
439 | zstream.avail_out = bsize; | 927 | zstream.avail_out = bsize; |
440 | 928 | ||
441 | err = inflate( &zstream, Z_SYNC_FLUSH ); | 929 | err = inflate( &zstream, Z_SYNC_FLUSH ); |
442 | 930 | ||
931 | //qDebug("err:%d - %u", err, zstream.avail_in); | ||
932 | |||
443 | } while ( err == Z_OK ); | 933 | } while ( err == Z_OK ); |
444 | 934 | ||
445 | inflateEnd(&zstream); | 935 | inflateEnd(&zstream); |
446 | } | 936 | } |
447 | 937 | ||
448 | void CPlucker::UnDoc(size_t reclen, UInt8* tgtbuffer, UInt16 bsize) | 938 | void CPlucker::UnDoc(size_t reclen, UInt8* tgtbuffer, UInt16 bsize) |
449 | { | 939 | { |
450 | // UInt16 headerSize; | 940 | // UInt16 headerSize; |
451 | UInt16 docSize; | 941 | UInt16 docSize; |
452 | UInt16 i; | 942 | UInt16 i; |
453 | UInt16 j; | 943 | UInt16 j; |
454 | UInt16 k; | 944 | UInt16 k; |
455 | 945 | ||
456 | UInt8 *inBuf = compressedtextbuffer; | 946 | UInt8 *inBuf = compressedtextbuffer; |
457 | UInt8 *outBuf = tgtbuffer; | 947 | UInt8 *outBuf = tgtbuffer; |
458 | 948 | ||
459 | // headerSize = sizeof( Header ) + record->paragraphs * sizeof( Paragraph ); | 949 | // headerSize = sizeof( Header ) + record->paragraphs * sizeof( Paragraph ); |
460 | docSize = reclen; | 950 | docSize = reclen; |
461 | 951 | ||
462 | j = 0; | 952 | j = 0; |
463 | k = 0; | 953 | k = 0; |
464 | while ( j < docSize ) { | 954 | while ( j < docSize ) { |
465 | i = 0; | 955 | i = 0; |
466 | while ( i < bsize && j < docSize ) { | 956 | while ( i < bsize && j < docSize ) { |
467 | UInt16 c; | 957 | UInt16 c; |
468 | 958 | ||
469 | c = (UInt16) inBuf[ j++ ]; | 959 | c = (UInt16) inBuf[ j++ ]; |
470 | if ( 0 < c && c < 9 ) { | 960 | if ( 0 < c && c < 9 ) { |
471 | while ( 0 < c-- ) | 961 | while ( 0 < c-- ) |
472 | outBuf[ i++ ] = inBuf[ j++ ]; | 962 | outBuf[ i++ ] = inBuf[ j++ ]; |
473 | } | 963 | } |
474 | else if ( c < 0x80 ) | 964 | else if ( c < 0x80 ) |
475 | outBuf[ i++ ] = c; | 965 | outBuf[ i++ ] = c; |
476 | else if ( 0xc0 <= c ) { | 966 | else if ( 0xc0 <= c ) { |
477 | outBuf[ i++ ] = ' '; | 967 | outBuf[ i++ ] = ' '; |
478 | outBuf[ i++ ] = c ^ 0x80; | 968 | outBuf[ i++ ] = c ^ 0x80; |
479 | } | 969 | } |
480 | else { | 970 | else { |
481 | Int16 m; | 971 | Int16 m; |
482 | Int16 n; | 972 | Int16 n; |
483 | 973 | ||
484 | c <<= 8; | 974 | c <<= 8; |
485 | c += inBuf[ j++ ]; | 975 | c += inBuf[ j++ ]; |
486 | 976 | ||
487 | m = ( c & 0x3fff ) >> COUNT_BITS; | 977 | m = ( c & 0x3fff ) >> COUNT_BITS; |
488 | n = c & ( ( 1 << COUNT_BITS ) - 1 ); | 978 | n = c & ( ( 1 << COUNT_BITS ) - 1 ); |
489 | n += 2; | 979 | n += 2; |
490 | 980 | ||
491 | do { | 981 | do { |
492 | outBuf[ i ] = outBuf[ i - m ]; | 982 | outBuf[ i ] = outBuf[ i - m ]; |
493 | i++; | 983 | i++; |
494 | } while ( 0 < n-- ); | 984 | } while ( 0 < n-- ); |
495 | } | 985 | } |
496 | } | 986 | } |
497 | k += bsize; | 987 | k += bsize; |
498 | } | 988 | } |
499 | } | 989 | } |
500 | 990 | ||
501 | void CPlucker::home() | 991 | void CPlucker::home() |
502 | { | 992 | { |
503 | currentpos = 0; | 993 | currentpos = 0; |
504 | expand(1); | 994 | expand(1); |
505 | } | 995 | } |
506 | 996 | ||
507 | CList<Bkmk>* CPlucker::getbkmklist() | 997 | CList<Bkmk>* CPlucker::getbkmklist() |
508 | { | 998 | { |
509 | /* | 999 | /* |
510 | CPlucker_dataRecord thisHdr; | 1000 | CPlucker_dataRecord thisHdr; |
511 | 1001 | ||
512 | for (int i = 1; i < ntohs(head.recordList.numRecords); i++) | 1002 | for (int i = 1; i < ntohs(head.recordList.numRecords); i++) |
513 | { | 1003 | { |
514 | gotorecordnumber(i); | 1004 | gotorecordnumber(i); |
515 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | 1005 | fread(&thisHdr, 1, sizeof(thisHdr), fin); |
516 | if (thisHdr.type == 8) | 1006 | if (thisHdr.type == 8) |
517 | { | 1007 | { |
518 | UInt16 n; | 1008 | UInt16 n; |
519 | fread(&n, 1, sizeof(n), fin); | 1009 | fread(&n, 1, sizeof(n), fin); |
520 | n = ntohs(n); | 1010 | n = ntohs(n); |
521 | qDebug("Found %u bookmarks", n); | 1011 | qDebug("Found %u bookmarks", n); |
522 | } | 1012 | } |
523 | qDebug("Found:%d, %u", i , thisHdr.type); | 1013 | qDebug("Found:%d, %u", i , thisHdr.type); |
524 | } | 1014 | } |
525 | */ | 1015 | */ |
526 | return NULL; | 1016 | return NULL; |
527 | } | 1017 | } |
528 | 1018 | ||
529 | void CPlucker::expandimg(UInt16 tgt) | 1019 | QImage* CPlucker::getimg(UInt16 tgt) |
530 | { | 1020 | { |
531 | qDebug("Image:%u", tgt); | 1021 | // static int imageno; |
1022 | // char* file = "tmp1"; | ||
1023 | // sprintf(file, "image%04u.tbmp", imageno++); | ||
1024 | // qDebug("Image:%u", tgt); | ||
532 | CPlucker_dataRecord thisHdr; | 1025 | CPlucker_dataRecord thisHdr; |
533 | size_t reclen; | 1026 | size_t reclen; |
1027 | UInt16 thisrec = finduid(tgt); | ||
1028 | reclen = recordlength(thisrec); | ||
1029 | gotorecordnumber(thisrec); | ||
1030 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
1031 | /* | ||
534 | UInt16 thisrec = 0; | 1032 | UInt16 thisrec = 0; |
535 | do | 1033 | do |
536 | { | 1034 | { |
537 | thisrec++; | 1035 | hthisrec++; |
538 | reclen = recordlength(thisrec); | 1036 | reclen = recordlength(thisrec); |
539 | gotorecordnumber(thisrec); | 1037 | gotorecordnumber(thisrec); |
540 | qDebug("thisrec:%u.%u", ftell(fin),thisrec); | 1038 | //qDebug("thisrec:%u.%u", ftell(fin),thisrec); |
541 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | 1039 | fread(&thisHdr, 1, sizeof(thisHdr), fin); |
542 | } | 1040 | } |
543 | while (ntohs(thisHdr.uid) != tgt); | 1041 | while (ntohs(thisHdr.uid) != tgt); |
544 | 1042 | */ | |
545 | reclen -= sizeof(thisHdr); | 1043 | reclen -= sizeof(thisHdr); |
546 | 1044 | ||
547 | UInt16 imgsize = htons(thisHdr.size); | 1045 | UInt16 imgsize = ntohs(thisHdr.size); |
548 | UInt8* imgbuffer = new UInt8[imgsize]; | 1046 | UInt8* imgbuffer = new UInt8[imgsize]; |
549 | 1047 | ||
550 | qDebug("type:%u", thisHdr.type); | 1048 | // qDebug("type:%u", thisHdr.type); |
1049 | Expand(reclen, thisHdr.type, imgbuffer, imgsize); | ||
551 | 1050 | ||
552 | if (thisHdr.type == 2) | 1051 | QImage* qimage = Palm2QImage(imgbuffer, imgsize); |
1052 | |||
1053 | delete [] imgbuffer; | ||
1054 | |||
1055 | return qimage; | ||
1056 | } | ||
1057 | |||
1058 | #include <qnamespace.h> | ||
1059 | |||
1060 | QPixmap* CPlucker::expandimg(UInt16 tgt, bool border) | ||
1061 | { | ||
1062 | QImage* qimage = getimg(tgt); | ||
1063 | if (qimage == NULL) return NULL; | ||
1064 | QPixmap* image = new QPixmap(0,0); | ||
1065 | QPixmap* ret; | ||
1066 | // qDebug("New image"); | ||
1067 | image->convertFromImage(*qimage); | ||
1068 | delete qimage; | ||
1069 | if (border) | ||
553 | { | 1070 | { |
554 | qDebug("Not compressed:%u.%u", ftell(fin),reclen); | 1071 | ret = new QPixmap(image->width()+4, image->height()+4); |
555 | fread(imgbuffer, reclen, sizeof(char), fin); | 1072 | ret->fill(Qt::red); |
556 | qDebug("Not compressed:%u.%u", ftell(fin),reclen); | 1073 | bitBlt(ret, 2, 2, image, 0, 0, -1, -1);//, Qt::RasterOp::CopyROP); |
1074 | delete image; | ||
557 | } | 1075 | } |
558 | else | 1076 | else |
559 | { | 1077 | { |
560 | qDebug("Compressed"); | 1078 | ret = image; |
561 | fread(compressedtextbuffer, reclen, sizeof(char), fin); | ||
562 | switch (ntohs(hdr0.version)) | ||
563 | { | ||
564 | case 2: | ||
565 | UnZip(reclen, imgbuffer, imgsize); | ||
566 | break; | ||
567 | case 1: | ||
568 | UnDoc(reclen, imgbuffer, imgsize); | ||
569 | break; | ||
570 | } | ||
571 | } | 1079 | } |
572 | FILE* imgfile = fopen("/home/tim/newreader/imagefile.tbmp", "w"); | 1080 | return ret; |
573 | if (imgfile != NULL) | 1081 | } |
1082 | |||
1083 | #ifdef _BUFFERPICS | ||
1084 | #include <qmap.h> | ||
1085 | #endif | ||
1086 | |||
1087 | QPixmap* CPlucker::getPicture(unsigned long tgt) | ||
1088 | { | ||
1089 | #ifdef _BUFFERPICS | ||
1090 | static QMap<unsigned long, QPixmap> pix; | ||
1091 | QMap<unsigned long, QPixmap>::Iterator t = pix.find(tgt); | ||
1092 | if (t == pix.end()) | ||
574 | { | 1093 | { |
575 | fwrite(imgbuffer, 1, imgsize, imgfile); | 1094 | pix[tgt] = *expandimg(tgt); |
576 | fclose(imgfile); | 1095 | return &pix[tgt]; |
577 | } | 1096 | } |
578 | delete [] imgbuffer; | 1097 | else |
1098 | return &(t.data()); | ||
1099 | #else | ||
1100 | return expandimg(tgt); | ||
1101 | #endif | ||
1102 | } | ||
1103 | |||
1104 | #ifdef LOCALPICTURES | ||
1105 | #include <unistd.h> | ||
1106 | #include <qpe/global.h> | ||
1107 | void 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 | |||
1142 | void 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 | |||
1167 | void 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 | |||
1196 | unsigned short CPlucker::finduid(unsigned short urlid) | ||
1197 | { | ||
1198 | // qDebug("Finding %u", urlid); | ||
1199 | unsigned short jmin = 1, jmax = ntohs(head.recordList.numRecords); | ||
1200 | unsigned short jmid = (jmin+jmax) >> 1; | ||
1201 | while (jmax - jmin > 1) | ||
1202 | { | ||
1203 | CPlucker_dataRecord thisHdr; | ||
1204 | gotorecordnumber(jmid); | ||
1205 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
1206 | unsigned short luid = ntohs(thisHdr.uid); | ||
1207 | //qDebug("%u %u %u : %u", jmin, jmid, jmax, urlid); | ||
1208 | if (luid == urlid) | ||
1209 | { | ||
1210 | return jmid; | ||
1211 | } | ||
1212 | if (luid < urlid) | ||
1213 | { | ||
1214 | jmin = jmid; | ||
1215 | } | ||
1216 | else | ||
1217 | { | ||
1218 | jmax = jmid; | ||
1219 | } | ||
1220 | jmid = (jmin+jmax) >> 1; | ||
1221 | } | ||
1222 | CPlucker_dataRecord thisHdr; | ||
1223 | gotorecordnumber(jmin); | ||
1224 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
1225 | unsigned short luid = ntohs(thisHdr.uid); | ||
1226 | qDebug("jmin at end:%u,%u", jmin, luid); | ||
1227 | if (luid == urlid) | ||
1228 | { | ||
1229 | return jmin; | ||
1230 | } | ||
1231 | gotorecordnumber(jmax); | ||
1232 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
1233 | luid = ntohs(thisHdr.uid); | ||
1234 | qDebug("jmax at end:%u,%u", jmax, luid); | ||
1235 | if (luid == urlid) | ||
1236 | { | ||
1237 | return jmax; | ||
1238 | } | ||
1239 | qDebug("Couldn't find %u", urlid); | ||
1240 | return 0; // Not found! | ||
579 | } | 1241 | } |
diff --git a/noncore/apps/opie-reader/plucker.h b/noncore/apps/opie-reader/plucker.h index d3ca732..083eac6 100644 --- a/noncore/apps/opie-reader/plucker.h +++ b/noncore/apps/opie-reader/plucker.h | |||
@@ -1,86 +1,123 @@ | |||
1 | #ifndef __plucker_h | 1 | #ifndef __plucker_h |
2 | #define __plucker_h | 2 | #define __plucker_h |
3 | 3 | ||
4 | #include "CExpander.h" | 4 | #include "CExpander.h" |
5 | #include "zlib/zlib.h" | 5 | #include "zlib/zlib.h" |
6 | #include "ztxt.h" | 6 | #include "ztxt.h" |
7 | #include "pdb.h" | 7 | #include "pdb.h" |
8 | #include "CBuffer.h" | 8 | #include "CBuffer.h" |
9 | #include "Navigation.h" | ||
10 | #include "my_list.h" | ||
11 | |||
12 | #ifdef LOCALPICTURES | ||
13 | class QScrollView; | ||
14 | class QWidget; | ||
15 | #endif | ||
9 | 16 | ||
10 | struct CPlucker_dataRecord | 17 | struct CPlucker_dataRecord |
11 | { | 18 | { |
12 | UInt16 uid; | 19 | UInt16 uid; |
13 | UInt16 nParagraphs; | 20 | UInt16 nParagraphs; |
14 | UInt16 size; | 21 | UInt16 size; |
15 | UInt8 type; | 22 | UInt8 type; |
16 | UInt8 reserved; | 23 | UInt8 reserved; |
17 | }; | 24 | }; |
18 | 25 | ||
19 | struct CPlucker_record0 | 26 | struct CPlucker_record0 |
20 | { | 27 | { |
21 | UInt16 uid; | 28 | UInt16 uid; |
22 | UInt16 version; | 29 | UInt16 version; |
23 | UInt16 nRecords; | 30 | UInt16 nRecords; |
24 | }; | 31 | }; |
25 | 32 | ||
26 | struct CPluckerbkmk | 33 | struct CPluckerbkmk |
27 | { | 34 | { |
28 | UInt32 offset; | 35 | UInt32 offset; |
29 | tchar title[MAX_BMRK_LENGTH]; | 36 | tchar title[MAX_BMRK_LENGTH]; |
30 | }; | 37 | }; |
31 | 38 | ||
32 | |||
33 | const UInt32 CPLUCKER_ID = 0x5458547a; | 39 | const UInt32 CPLUCKER_ID = 0x5458547a; |
34 | 40 | ||
35 | class CPlucker : public CExpander, Cpdb | 41 | class CPlucker : public CExpander, Cpdb |
36 | { | 42 | { |
37 | size_t textlength; | 43 | unsigned short finduid(unsigned short); |
44 | char* geturl(UInt16); | ||
45 | void Expand(UInt16, UInt8, UInt8*, UInt16); | ||
46 | CList<unsigned long> visited; | ||
47 | bool m_lastIsBreak; | ||
48 | #ifdef LOCALPICTURES | ||
49 | QScrollView* m_viewer; | ||
50 | QWidget* m_picture; | ||
51 | #endif | ||
52 | size_t textlength, m_lastBreak; | ||
38 | UInt16 uid; | 53 | UInt16 uid; |
54 | UInt8 EOPPhase; | ||
39 | int m_nextPara, m_nextParaIndex; | 55 | int m_nextPara, m_nextParaIndex; |
40 | CBufferFace<UInt16> m_ParaOffsets; | 56 | CBufferFace<UInt16> m_ParaOffsets; |
41 | CBufferFace<UInt16> m_ParaAttrs; | 57 | CBufferFace<UInt16> m_ParaAttrs; |
42 | UInt16 m_nParas; | 58 | UInt16 m_nParas; |
43 | CStyle mystyle; | 59 | CStyle mystyle; |
44 | // bool bInit; | 60 | // bool bInit; |
45 | UInt32 buffersize; | 61 | UInt32 buffersize; |
46 | UInt32 buffercontent; | 62 | UInt32 buffercontent; |
47 | UInt8* expandedtextbuffer; | 63 | UInt8* expandedtextbuffer; |
48 | UInt8* compressedtextbuffer; | 64 | UInt8* compressedtextbuffer; |
65 | char* urls; | ||
66 | size_t urlsize; | ||
49 | size_t bufferpos; | 67 | size_t bufferpos; |
50 | UInt16 bufferrec; | 68 | UInt16 bufferrec; |
51 | CPlucker_record0 hdr0; | 69 | CPlucker_record0 hdr0; |
52 | size_t currentpos; | 70 | size_t currentpos; |
53 | bool expand(int); | 71 | bool expand(int); |
54 | void UnZip(size_t, UInt8*, UInt16); | 72 | void UnZip(size_t, UInt8*, UInt16); |
55 | void UnDoc(size_t, UInt8*, UInt16); | 73 | void UnDoc(size_t, UInt8*, UInt16); |
56 | void expandimg(UInt16 tgt); | 74 | #ifdef LOCALPICTURES |
75 | void showimg(UInt16 tgt); | ||
76 | #endif | ||
77 | QImage* getimg(UInt16 tgt); | ||
78 | QPixmap* expandimg(UInt16 tgt, bool border=false); | ||
57 | void home(); | 79 | void home(); |
58 | int bgetch(); | 80 | int bgetch(); |
81 | CNavigation m_nav; | ||
59 | public: | 82 | public: |
60 | virtual void sizes(unsigned long& _file, unsigned long& _text) | 83 | virtual void suspend() |
61 | { | 84 | { |
62 | _file = file_length; | 85 | CExpander::suspend(fin); |
63 | _text = textlength; | 86 | } |
64 | //ntohl(hdr0.size); | 87 | virtual void unsuspend() |
65 | } | 88 | { |
89 | CExpander::unsuspend(fin); | ||
90 | } | ||
91 | virtual QPixmap* getPicture(unsigned long tgt); | ||
92 | virtual void sizes(unsigned long& _file, unsigned long& _text); | ||
66 | virtual bool hasrandomaccess() { return true; } | 93 | virtual bool hasrandomaccess() { return true; } |
67 | virtual ~CPlucker() | 94 | virtual ~CPlucker(); |
68 | { | ||
69 | if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; | ||
70 | if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; | ||
71 | } | ||
72 | CPlucker(); | 95 | CPlucker(); |
73 | virtual int openfile(const char *src); | 96 | virtual int OpenFile(const char *src); |
74 | virtual int getch(); | 97 | virtual int getch(); |
75 | virtual void getch(int&, CStyle&); | 98 | virtual void getch(int&, CStyle&); |
76 | virtual unsigned int locate(); | 99 | virtual unsigned int locate(); |
77 | virtual void locate(unsigned int n); | 100 | virtual void locate(unsigned int n); |
78 | virtual CList<Bkmk>* getbkmklist(); | 101 | virtual CList<Bkmk>* getbkmklist(); |
79 | virtual bool hyperlink(unsigned int n); | 102 | virtual bool hyperlink(unsigned int n); |
80 | virtual MarkupType PreferredMarkup() | 103 | virtual MarkupType PreferredMarkup() |
81 | { | 104 | { |
82 | return cNONE; | 105 | return cNONE; |
83 | } | 106 | } |
107 | void saveposn(size_t posn) { m_nav.saveposn(posn); } | ||
108 | bool forward(size_t& loc) { return m_nav.forward(loc); } | ||
109 | bool back(size_t& loc) { return m_nav.back(loc); } | ||
110 | bool hasnavigation() { return true; } | ||
111 | unsigned long startSection() | ||
112 | { | ||
113 | return currentpos-bufferpos; | ||
114 | } | ||
115 | unsigned long endSection() | ||
116 | { | ||
117 | return startSection()+buffercontent; | ||
118 | } | ||
119 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen); | ||
120 | void putSaveData(unsigned char*& src, unsigned short& srclen); | ||
84 | }; | 121 | }; |
85 | 122 | ||
86 | #endif | 123 | #endif |
diff --git a/noncore/apps/opie-reader/ppm_expander.cpp b/noncore/apps/opie-reader/ppm_expander.cpp index 4f0a277..fe2745c 100644 --- a/noncore/apps/opie-reader/ppm_expander.cpp +++ b/noncore/apps/opie-reader/ppm_expander.cpp | |||
@@ -1,108 +1,108 @@ | |||
1 | /* | 1 | /* |
2 | * Interface pour le programme de compression | 2 | * Interface pour le programme de compression |
3 | * (c) 1995 Fabrice Bellard | 3 | * (c) 1995 Fabrice Bellard |
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <stdlib.h> | 6 | #include <stdlib.h> |
7 | //#include <unistd.h> | 7 | //#include <unistd.h> |
8 | #include <stdio.h> | 8 | #include <stdio.h> |
9 | #include <string.h> | 9 | #include <string.h> |
10 | #include <time.h> | 10 | #include <time.h> |
11 | 11 | ||
12 | /*************************************************************************** | 12 | /*************************************************************************** |
13 | * Interface avec les routines de compression | 13 | * Interface avec les routines de compression |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #define METHOD_NB 2 /* nombre total de méthodes de compression */ | 16 | #define METHOD_NB 2 /* nombre total de méthodes de compression */ |
17 | 17 | ||
18 | #define METHOD_STORE 0 | 18 | #define METHOD_STORE 0 |
19 | #define METHOD_PPM 1 | 19 | #define METHOD_PPM 1 |
20 | 20 | ||
21 | 21 | ||
22 | #define DEFAULT_SUFFIX ".st" /* extension par défault */ | 22 | #define DEFAULT_SUFFIX ".st" /* extension par défault */ |
23 | /* signature en début de fichier */ | 23 | /* signature en début de fichier */ |
24 | #define STAT_MAGIC_SIZE 4 | 24 | #define STAT_MAGIC_SIZE 4 |
25 | char stat_magic[STAT_MAGIC_SIZE]={'P','P','M','S'}; | 25 | char stat_magic[STAT_MAGIC_SIZE]={'P','P','M','S'}; |
26 | 26 | ||
27 | #include "ppm_expander.h" | 27 | #include "ppm_expander.h" |
28 | 28 | ||
29 | ppm_expander::~ppm_expander() { | 29 | ppm_expander::~ppm_expander() { |
30 | if (needppmend) ppm.PPM_End(); | 30 | if (needppmend) ppm.PPM_End(); |
31 | ppm.arith.Arith_DecodeEnd(); | 31 | ppm.arith.Arith_DecodeEnd(); |
32 | if (buf_in!=NULL) delete [] buf_in; | 32 | if (buf_in!=NULL) delete [] buf_in; |
33 | if (buf_out!=NULL) delete [] buf_out; | 33 | if (buf_out!=NULL) delete [] buf_out; |
34 | if (my_read_buf != NULL) delete my_read_buf; | 34 | if (my_read_buf != NULL) delete my_read_buf; |
35 | if (my_file_in != NULL) fclose(my_file_in); | 35 | if (my_file_in != NULL) fclose(my_file_in); |
36 | } | 36 | } |
37 | 37 | ||
38 | int ppm_expander::openfile(const char* infile) | 38 | int ppm_expander::OpenFile(const char* infile) |
39 | { | 39 | { |
40 | my_file_in=fopen(infile,"rb"); | 40 | my_file_in=fopen(infile,"rb"); |
41 | my_read_buf = new PPM_ReadBuf(my_file_in); | 41 | my_read_buf = new PPM_ReadBuf(my_file_in); |
42 | return home(); | 42 | return home(); |
43 | } | 43 | } |
44 | 44 | ||
45 | void ppm_expander::sizes(unsigned long& file, unsigned long& text) | 45 | void ppm_expander::sizes(unsigned long& file, unsigned long& text) |
46 | { | 46 | { |
47 | struct stat _stat; | 47 | struct stat _stat; |
48 | fstat(fileno(my_file_in),&_stat); | 48 | fstat(fileno(my_file_in),&_stat); |
49 | file = _stat.st_size; | 49 | file = _stat.st_size; |
50 | text = numblocks*blocksize; | 50 | text = numblocks*blocksize; |
51 | } | 51 | } |
52 | 52 | ||
53 | int ppm_expander::home() | 53 | int ppm_expander::home() |
54 | { | 54 | { |
55 | fseek(my_file_in,0, SEEK_SET); | 55 | fseek(my_file_in,0, SEEK_SET); |
56 | unsigned char header[STAT_MAGIC_SIZE]; | 56 | unsigned char header[STAT_MAGIC_SIZE]; |
57 | size_t len=fread(header,1,STAT_MAGIC_SIZE,my_file_in); | 57 | size_t len=fread(header,1,STAT_MAGIC_SIZE,my_file_in); |
58 | if (strncmp((char*)header,stat_magic,STAT_MAGIC_SIZE)!=0) { | 58 | if (strncmp((char*)header,stat_magic,STAT_MAGIC_SIZE)!=0) { |
59 | return 1; | 59 | return 1; |
60 | } | 60 | } |
61 | if (len!=(STAT_MAGIC_SIZE)) { | 61 | if (len!=(STAT_MAGIC_SIZE)) { |
62 | return 1; | 62 | return 1; |
63 | } | 63 | } |
64 | if (fread(&maxnode,sizeof(maxnode),1,my_file_in) != 1) return 1; | 64 | if (fread(&maxnode,sizeof(maxnode),1,my_file_in) != 1) return 1; |
65 | if (fread(&blocksize,sizeof(blocksize),1,my_file_in) != 1) return 1; | 65 | if (fread(&blocksize,sizeof(blocksize),1,my_file_in) != 1) return 1; |
66 | if (fread(&numblocks,sizeof(numblocks),1,my_file_in) != 1) return 1; | 66 | if (fread(&numblocks,sizeof(numblocks),1,my_file_in) != 1) return 1; |
67 | //fprintf(stderr,"<%u,%u,%u>\n",maxnode,blocksize,numblocks); | 67 | //fprintf(stderr,"<%u,%u,%u>\n",maxnode,blocksize,numblocks); |
68 | int err = locate(0,0); | 68 | int err = locate(0,0); |
69 | outbytes = 0; | 69 | outbytes = 0; |
70 | return err; | 70 | return err; |
71 | } | 71 | } |
72 | 72 | ||
73 | void ppm_expander::locate(unsigned int n) { | 73 | void ppm_expander::locate(unsigned int n) { |
74 | locate(n/blocksize, n%blocksize); | 74 | locate(n/blocksize, n%blocksize); |
75 | outbytes = n; | 75 | outbytes = n; |
76 | } | 76 | } |
77 | 77 | ||
78 | int ppm_expander::locate(unsigned short block, unsigned int n) | 78 | int ppm_expander::locate(unsigned short block, unsigned int n) |
79 | { | 79 | { |
80 | if (needppmend) | 80 | if (needppmend) |
81 | { | 81 | { |
82 | ppm.PPM_End(); | 82 | ppm.PPM_End(); |
83 | needppmend = false; | 83 | needppmend = false; |
84 | } | 84 | } |
85 | size_t fpos; | 85 | size_t fpos; |
86 | fseek(my_file_in,STAT_MAGIC_SIZE+sizeof(maxnode)+sizeof(blocksize)+sizeof(numblocks)+block*sizeof(fpos),SEEK_SET); | 86 | fseek(my_file_in,STAT_MAGIC_SIZE+sizeof(maxnode)+sizeof(blocksize)+sizeof(numblocks)+block*sizeof(fpos),SEEK_SET); |
87 | if (fread(&fpos,sizeof(fpos),1,my_file_in) != 1) return 1; | 87 | if (fread(&fpos,sizeof(fpos),1,my_file_in) != 1) return 1; |
88 | fseek(my_file_in,fpos,SEEK_SET); | 88 | fseek(my_file_in,fpos,SEEK_SET); |
89 | 89 | ||
90 | ppm.arith.Arith_DecodeInit(my_read_buf,buf_in,bufsize); | 90 | ppm.arith.Arith_DecodeInit(my_read_buf,buf_in,bufsize); |
91 | int err=ppm.PPM_Init(maxnode); | 91 | int err=ppm.PPM_Init(maxnode); |
92 | needppmend = true; | 92 | needppmend = true; |
93 | curblock = block; | 93 | curblock = block; |
94 | for (int i = 0; i < n; i++) getch(); | 94 | for (int i = 0; i < n; i++) getch(); |
95 | } | 95 | } |
96 | 96 | ||
97 | int ppm_expander::getch() { | 97 | int ppm_expander::getch() { |
98 | if (curblock >= numblocks) return EOF; | 98 | if (curblock >= numblocks) return EOF; |
99 | int c=ppm.PPM_Decode(); | 99 | int c=ppm.PPM_Decode(); |
100 | if (c == SYM_EOF) | 100 | if (c == SYM_EOF) |
101 | { | 101 | { |
102 | if (++curblock >= numblocks) return EOF; | 102 | if (++curblock >= numblocks) return EOF; |
103 | locate(curblock,0); | 103 | locate(curblock,0); |
104 | c = ppm.PPM_Decode(); | 104 | c = ppm.PPM_Decode(); |
105 | } | 105 | } |
106 | outbytes++; | 106 | outbytes++; |
107 | return (c==SYM_EOF) ? EOF : c; | 107 | return (c==SYM_EOF) ? EOF : c; |
108 | } | 108 | } |
diff --git a/noncore/apps/opie-reader/ppm_expander.h b/noncore/apps/opie-reader/ppm_expander.h index 115988d..4278c82 100644 --- a/noncore/apps/opie-reader/ppm_expander.h +++ b/noncore/apps/opie-reader/ppm_expander.h | |||
@@ -1,50 +1,58 @@ | |||
1 | #ifndef __ppm_expander_h | 1 | #ifndef __ppm_expander_h |
2 | #define __ppm_expander_h | 2 | #define __ppm_expander_h |
3 | 3 | ||
4 | #include "CExpander.h" | 4 | #include "CExpander.h" |
5 | #include <sys/stat.h> | 5 | #include <sys/stat.h> |
6 | 6 | ||
7 | 7 | ||
8 | #include "utypes.h" | 8 | #include "utypes.h" |
9 | #include "ppm.h" | 9 | #include "ppm.h" |
10 | #include "arith.h" | 10 | #include "arith.h" |
11 | 11 | ||
12 | 12 | ||
13 | #define SYM_EOF 256 | 13 | #define SYM_EOF 256 |
14 | 14 | ||
15 | class ppm_expander : public CExpander { | 15 | class ppm_expander : public CExpander { |
16 | UCHAR *buf_in,*buf_out; | 16 | UCHAR *buf_in,*buf_out; |
17 | unsigned int bufsize; | 17 | unsigned int bufsize; |
18 | unsigned int outbytes; | 18 | unsigned int outbytes; |
19 | unsigned long blocksize; | 19 | unsigned long blocksize; |
20 | unsigned short numblocks; | 20 | unsigned short numblocks; |
21 | unsigned short curblock; | 21 | unsigned short curblock; |
22 | unsigned short maxnode; | 22 | unsigned short maxnode; |
23 | bool needppmend; | 23 | bool needppmend; |
24 | int home(); | 24 | int home(); |
25 | FILE* my_file_in; | 25 | FILE* my_file_in; |
26 | PPM_ReadBuf* my_read_buf; | 26 | PPM_ReadBuf* my_read_buf; |
27 | ppm_worker ppm; | 27 | ppm_worker ppm; |
28 | public: | 28 | public: |
29 | virtual void suspend() | ||
30 | { | ||
31 | CExpander::suspend(my_file_in); | ||
32 | } | ||
33 | virtual void unsuspend() | ||
34 | { | ||
35 | CExpander::unsuspend(my_file_in); | ||
36 | } | ||
29 | ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL) | 37 | ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL) |
30 | { | 38 | { |
31 | bufsize = 1024; | 39 | bufsize = 1024; |
32 | buf_in = new UCHAR[bufsize]; | 40 | buf_in = new UCHAR[bufsize]; |
33 | buf_out = new UCHAR[bufsize]; | 41 | buf_out = new UCHAR[bufsize]; |
34 | outbytes = 0; | 42 | outbytes = 0; |
35 | } | 43 | } |
36 | virtual int openfile(const char* infile); | 44 | virtual int OpenFile(const char* infile); |
37 | virtual int getch(); | 45 | virtual int getch(); |
38 | int locate(unsigned short block, unsigned int n); | 46 | int locate(unsigned short block, unsigned int n); |
39 | virtual ~ppm_expander(); | 47 | virtual ~ppm_expander(); |
40 | virtual unsigned int locate() { return outbytes; } | 48 | virtual unsigned int locate() { return outbytes; } |
41 | virtual void locate(unsigned int n); | 49 | virtual void locate(unsigned int n); |
42 | virtual bool hasrandomaccess() { return (numblocks > 1); } | 50 | virtual bool hasrandomaccess() { return (numblocks > 1); } |
43 | virtual void sizes(unsigned long& file, unsigned long& text); | 51 | virtual void sizes(unsigned long& file, unsigned long& text); |
44 | virtual MarkupType PreferredMarkup() | 52 | virtual MarkupType PreferredMarkup() |
45 | { | 53 | { |
46 | return cTEXT; | 54 | return cTEXT; |
47 | } | 55 | } |
48 | }; | 56 | }; |
49 | 57 | ||
50 | #endif | 58 | #endif |
diff --git a/noncore/apps/opie-reader/ustring.h b/noncore/apps/opie-reader/ustring.h index a4dc048..a3ef8df 100644 --- a/noncore/apps/opie-reader/ustring.h +++ b/noncore/apps/opie-reader/ustring.h | |||
@@ -1,71 +1,83 @@ | |||
1 | #include <qstring.h> | 1 | #include <qstring.h> |
2 | 2 | ||
3 | #ifdef _UNICODE | 3 | #ifdef _UNICODE |
4 | inline size_t ustrlen(const tchar* _p) | 4 | inline 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 | ||
23 | inline int ustrcmp(const tchar* _p1, const tchar* _p2) | 23 | inline 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 | ||
47 | inline QString toQString(tchar *_p) | 47 | inline 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 | ||
57 | inline QString toQString(tchar *_p, unsigned int len) | 57 | inline 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 | while (*p != 0 && i < len) ret[i++] = *(p++); | 63 | while (*p != 0 && i < len) ret[i++] = *(p++); |
64 | return ret; | 64 | return ret; |
65 | } | 65 | } |
66 | |||
67 | inline tchar* fromQString(const QString& qs) | ||
68 | { | ||
69 | int len = qs.length(); | ||
70 | tchar* ret = new tchar[len+1]; | ||
71 | for (int i = 0; i < len; i++) | ||
72 | { | ||
73 | ret[i] = qs[i].unicode(); | ||
74 | } | ||
75 | ret[len] = 0; | ||
76 | return ret; | ||
77 | } | ||
66 | #else | 78 | #else |
67 | 79 | ||
68 | inline size_t ustrlen(const tchar* _p) { return strlen(_p); } | 80 | inline size_t ustrlen(const tchar* _p) { return strlen(_p); } |
69 | inline int ustrcmp(const tchar* _p1, const tchar* _p2) { return strcmp(_p1, _p2); } | 81 | inline int ustrcmp(const tchar* _p1, const tchar* _p2) { return strcmp(_p1, _p2); } |
70 | 82 | ||
71 | #endif | 83 | #endif |
diff --git a/noncore/apps/opie-reader/version.h b/noncore/apps/opie-reader/version.h index 8b6c756..003e9db 100644 --- a/noncore/apps/opie-reader/version.h +++ b/noncore/apps/opie-reader/version.h | |||
@@ -1,5 +1,5 @@ | |||
1 | 1 | ||
2 | #define MAJOR 0 | 2 | #define MAJOR 0 |
3 | #define BKMKTYPE 5 | 3 | #define BKMKTYPE 6 |
4 | #define MINOR 'a' | 4 | #define MINOR 'a' |
5 | #define RELEASE_TYPE "beta" | 5 | #define RELEASE_TYPE "beta" |
diff --git a/noncore/apps/opie-reader/ztxt.cpp b/noncore/apps/opie-reader/ztxt.cpp index 289b13a..8091d32 100644 --- a/noncore/apps/opie-reader/ztxt.cpp +++ b/noncore/apps/opie-reader/ztxt.cpp | |||
@@ -1,161 +1,161 @@ | |||
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <string.h> | 2 | #include <string.h> |
3 | #include "ztxt.h" | 3 | #include "ztxt.h" |
4 | #include "my_list.h" | 4 | #include "my_list.h" |
5 | #include "Bkmks.h" | 5 | #include "Bkmks.h" |
6 | 6 | ||
7 | ztxt::ztxt() : bInit(false), expandedtextbuffer(NULL), compressedtextbuffer(NULL) { /*printf("constructing:%x\n",fin);*/ } | 7 | ztxt::ztxt() : bInit(false), expandedtextbuffer(NULL), compressedtextbuffer(NULL) { /*printf("constructing:%x\n",fin);*/ } |
8 | 8 | ||
9 | 9 | ||
10 | int ztxt::openfile(const char *src) | 10 | int ztxt::OpenFile(const char *src) |
11 | { | 11 | { |
12 | if (!Cpdb::openfile(src)) | 12 | if (!Cpdb::openfile(src)) |
13 | { | 13 | { |
14 | return -1; | 14 | return -1; |
15 | } | 15 | } |
16 | 16 | ||
17 | //printf("Okay %u\n", 4); | 17 | //printf("Okay %u\n", 4); |
18 | 18 | ||
19 | if (head.type != ZTXT_ID) return -1; | 19 | if (head.type != ZTXT_ID) return -1; |
20 | 20 | ||
21 | gotorecordnumber(0); | 21 | gotorecordnumber(0); |
22 | fread(&hdr0, 1, sizeof(hdr0), fin); | 22 | fread(&hdr0, 1, sizeof(hdr0), fin); |
23 | //printf("Okay %u\n", 5); | 23 | //printf("Okay %u\n", 5); |
24 | buffersize = ntohl(hdr0.size); | 24 | buffersize = ntohl(hdr0.size); |
25 | compressedtextbuffer = new UInt8[buffersize]; | 25 | compressedtextbuffer = new UInt8[buffersize]; |
26 | expandedtextbuffer = new UInt8[buffersize]; | 26 | expandedtextbuffer = new UInt8[buffersize]; |
27 | //printf("Okay %u\n", 6); | 27 | //printf("Okay %u\n", 6); |
28 | 28 | ||
29 | home(); | 29 | home(); |
30 | //printf("Okay %u\n", 7); | 30 | //printf("Okay %u\n", 7); |
31 | 31 | ||
32 | // printf("Returning 0\n"); | 32 | // printf("Returning 0\n"); |
33 | 33 | ||
34 | return 0; | 34 | return 0; |
35 | } | 35 | } |
36 | 36 | ||
37 | int ztxt::getch() | 37 | int ztxt::getch() |
38 | { | 38 | { |
39 | if (bufferpos >= buffercontent) | 39 | if (bufferpos >= buffercontent) |
40 | { | 40 | { |
41 | size_t reclen = recordlength(++bufferrec); | 41 | size_t reclen = recordlength(++bufferrec); |
42 | if (reclen == 0) return -1; | 42 | if (reclen == 0) return -1; |
43 | gotorecordnumber(bufferrec); | 43 | gotorecordnumber(bufferrec); |
44 | fread(compressedtextbuffer, reclen, sizeof(char), fin); | 44 | fread(compressedtextbuffer, reclen, sizeof(char), fin); |
45 | 45 | ||
46 | zstream.next_in = compressedtextbuffer; | 46 | zstream.next_in = compressedtextbuffer; |
47 | zstream.next_out = expandedtextbuffer; | 47 | zstream.next_out = expandedtextbuffer; |
48 | zstream.avail_out = buffersize; | 48 | zstream.avail_out = buffersize; |
49 | zstream.avail_in = reclen; | 49 | zstream.avail_in = reclen; |
50 | 50 | ||
51 | int ret = inflate(&zstream, Z_SYNC_FLUSH); | 51 | int ret = inflate(&zstream, Z_SYNC_FLUSH); |
52 | buffercontent = buffersize - zstream.avail_out; | 52 | buffercontent = buffersize - zstream.avail_out; |
53 | bufferpos = 0; | 53 | bufferpos = 0; |
54 | 54 | ||
55 | } | 55 | } |
56 | currentpos++; | 56 | currentpos++; |
57 | return expandedtextbuffer[bufferpos++]; | 57 | return expandedtextbuffer[bufferpos++]; |
58 | } | 58 | } |
59 | 59 | ||
60 | unsigned int ztxt::locate() | 60 | unsigned int ztxt::locate() |
61 | { | 61 | { |
62 | return currentpos; | 62 | return currentpos; |
63 | } | 63 | } |
64 | 64 | ||
65 | void ztxt::locate(unsigned int n) | 65 | void ztxt::locate(unsigned int n) |
66 | { | 66 | { |
67 | 67 | ||
68 | if (hasrandomaccess()) | 68 | if (hasrandomaccess()) |
69 | { | 69 | { |
70 | bufferrec = n / ntohs(hdr0.recordSize) + 1; | 70 | bufferrec = n / ntohs(hdr0.recordSize) + 1; |
71 | if (bufferrec == 1) | 71 | if (bufferrec == 1) |
72 | { | 72 | { |
73 | inflateEnd(&zstream); | 73 | inflateEnd(&zstream); |
74 | } | 74 | } |
75 | size_t reclen = recordlength(bufferrec); | 75 | size_t reclen = recordlength(bufferrec); |
76 | if (reclen == 0) return; | 76 | if (reclen == 0) return; |
77 | gotorecordnumber(bufferrec); | 77 | gotorecordnumber(bufferrec); |
78 | fread(compressedtextbuffer, reclen, sizeof(char), fin); | 78 | fread(compressedtextbuffer, reclen, sizeof(char), fin); |
79 | 79 | ||
80 | zstream.next_in = compressedtextbuffer; | 80 | zstream.next_in = compressedtextbuffer; |
81 | zstream.next_out = expandedtextbuffer; | 81 | zstream.next_out = expandedtextbuffer; |
82 | zstream.avail_out = buffersize; | 82 | zstream.avail_out = buffersize; |
83 | zstream.avail_in = reclen; | 83 | zstream.avail_in = reclen; |
84 | 84 | ||
85 | if (bufferrec == 1) | 85 | if (bufferrec == 1) |
86 | { | 86 | { |
87 | zstream.zalloc = Z_NULL; | 87 | zstream.zalloc = Z_NULL; |
88 | zstream.zfree = Z_NULL; | 88 | zstream.zfree = Z_NULL; |
89 | zstream.opaque = Z_NULL; | 89 | zstream.opaque = Z_NULL; |
90 | 90 | ||
91 | inflateInit(&zstream); | 91 | inflateInit(&zstream); |
92 | } | 92 | } |
93 | 93 | ||
94 | 94 | ||
95 | int ret = inflate(&zstream, Z_SYNC_FLUSH); | 95 | int ret = inflate(&zstream, Z_SYNC_FLUSH); |
96 | buffercontent = buffersize - zstream.avail_out; | 96 | buffercontent = buffersize - zstream.avail_out; |
97 | bufferpos = 0; | 97 | bufferpos = 0; |
98 | currentpos = n - n % ntohs(hdr0.recordSize); | 98 | currentpos = n - n % ntohs(hdr0.recordSize); |
99 | while (currentpos < n) getch(); | 99 | while (currentpos < n) getch(); |
100 | } | 100 | } |
101 | else | 101 | else |
102 | { | 102 | { |
103 | home(); | 103 | home(); |
104 | while (currentpos < n && getch() != EOF); | 104 | while (currentpos < n && getch() != EOF); |
105 | } | 105 | } |
106 | } | 106 | } |
107 | 107 | ||
108 | void ztxt::home() | 108 | void ztxt::home() |
109 | { | 109 | { |
110 | if (bInit) | 110 | if (bInit) |
111 | { | 111 | { |
112 | inflateEnd(&zstream); | 112 | inflateEnd(&zstream); |
113 | } | 113 | } |
114 | bInit = true; | 114 | bInit = true; |
115 | size_t reclen = recordlength(1); | 115 | size_t reclen = recordlength(1); |
116 | gotorecordnumber(1); | 116 | gotorecordnumber(1); |
117 | fread(compressedtextbuffer, reclen, sizeof(char), fin); | 117 | fread(compressedtextbuffer, reclen, sizeof(char), fin); |
118 | 118 | ||
119 | zstream.next_in = compressedtextbuffer; | 119 | zstream.next_in = compressedtextbuffer; |
120 | zstream.next_out = expandedtextbuffer; | 120 | zstream.next_out = expandedtextbuffer; |
121 | zstream.avail_out = buffersize; | 121 | zstream.avail_out = buffersize; |
122 | zstream.avail_in = reclen; | 122 | zstream.avail_in = reclen; |
123 | 123 | ||
124 | zstream.zalloc = Z_NULL; | 124 | zstream.zalloc = Z_NULL; |
125 | zstream.zfree = Z_NULL; | 125 | zstream.zfree = Z_NULL; |
126 | zstream.opaque = Z_NULL; | 126 | zstream.opaque = Z_NULL; |
127 | 127 | ||
128 | // printf("Initialising\n"); | 128 | // printf("Initialising\n"); |
129 | 129 | ||
130 | inflateInit(&zstream); | 130 | inflateInit(&zstream); |
131 | 131 | ||
132 | int ret = inflate(&zstream, Z_SYNC_FLUSH); | 132 | int ret = inflate(&zstream, Z_SYNC_FLUSH); |
133 | // printf("Inflate : %d\n", ret); | 133 | // printf("Inflate : %d\n", ret); |
134 | bufferpos = 0; | 134 | bufferpos = 0; |
135 | bufferrec = 1; | 135 | bufferrec = 1; |
136 | currentpos = 0; | 136 | currentpos = 0; |
137 | buffercontent = buffersize - zstream.avail_out; | 137 | buffercontent = buffersize - zstream.avail_out; |
138 | //printf("buffercontent:%u\n", buffercontent); | 138 | //printf("buffercontent:%u\n", buffercontent); |
139 | } | 139 | } |
140 | 140 | ||
141 | CList<Bkmk>* ztxt::getbkmklist() | 141 | CList<Bkmk>* ztxt::getbkmklist() |
142 | { | 142 | { |
143 | UInt16 recno = ntohs(hdr0.bookmarkRecord); | 143 | UInt16 recno = ntohs(hdr0.bookmarkRecord); |
144 | 144 | ||
145 | // printf("Bookmarks - record %d contains %d\n", recno, ntohs(hdr0.numBookmarks)); | 145 | // printf("Bookmarks - record %d contains %d\n", recno, ntohs(hdr0.numBookmarks)); |
146 | 146 | ||
147 | if (recno == 0) return NULL; | 147 | if (recno == 0) return NULL; |
148 | 148 | ||
149 | CList<Bkmk>* t = new CList<Bkmk>; | 149 | CList<Bkmk>* t = new CList<Bkmk>; |
150 | size_t cur = ftell(fin); | 150 | size_t cur = ftell(fin); |
151 | gotorecordnumber(recno); | 151 | gotorecordnumber(recno); |
152 | for (int i = 0; i < ntohs(hdr0.numBookmarks); i++) | 152 | for (int i = 0; i < ntohs(hdr0.numBookmarks); i++) |
153 | { | 153 | { |
154 | zTXTbkmk bkmk; | 154 | zTXTbkmk bkmk; |
155 | if (fread(&bkmk, sizeof(bkmk), 1, fin) != 1) break; | 155 | if (fread(&bkmk, sizeof(bkmk), 1, fin) != 1) break; |
156 | // printf("Bookmark number:%d:%.20s\n", i, bkmk.title); | 156 | // printf("Bookmark number:%d:%.20s\n", i, bkmk.title); |
157 | t->push_back(Bkmk(bkmk.title, NULL, ntohl(bkmk.offset))); | 157 | t->push_back(Bkmk(bkmk.title, NULL, ntohl(bkmk.offset))); |
158 | } | 158 | } |
159 | fseek(fin, cur, SEEK_SET); | 159 | fseek(fin, cur, SEEK_SET); |
160 | return t; | 160 | return t; |
161 | } | 161 | } |
diff --git a/noncore/apps/opie-reader/ztxt.h b/noncore/apps/opie-reader/ztxt.h index 20558a6..d7cb96a 100644 --- a/noncore/apps/opie-reader/ztxt.h +++ b/noncore/apps/opie-reader/ztxt.h | |||
@@ -1,105 +1,113 @@ | |||
1 | #ifndef __ztxt_h | 1 | #ifndef __ztxt_h |
2 | #define __ztxt_h | 2 | #define __ztxt_h |
3 | 3 | ||
4 | #include "CExpander.h" | 4 | #include "CExpander.h" |
5 | #include "zlib/zlib.h" | 5 | #include "zlib/zlib.h" |
6 | #include "pdb.h" | 6 | #include "pdb.h" |
7 | /* | 7 | /* |
8 | * Stuff common to both Weasel Reader and makeztxt | 8 | * Stuff common to both Weasel Reader and makeztxt |
9 | * | 9 | * |
10 | * $Id$ | 10 | * $Id$ |
11 | * | 11 | * |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #ifndef _WEASEL_COMMON_H_ | 14 | #ifndef _WEASEL_COMMON_H_ |
15 | #define _WEASEL_COMMON_H_ 1 | 15 | #define _WEASEL_COMMON_H_ 1 |
16 | 16 | ||
17 | 17 | ||
18 | /* Padding is no good */ | 18 | /* Padding is no good */ |
19 | #if defined(__GNUC__) && defined(__UNIX__) | 19 | #if defined(__GNUC__) && defined(__UNIX__) |
20 | # pragma pack(2) | 20 | # pragma pack(2) |
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | /* The default creator is Weasel Reader 'GPlm' */ | 23 | /* The default creator is Weasel Reader 'GPlm' */ |
24 | #define GPLM_CREATOR_ID "GPlm" | 24 | #define GPLM_CREATOR_ID "GPlm" |
25 | /* Databases of type 'zTXT' */ | 25 | /* Databases of type 'zTXT' */ |
26 | #define ZTXT_TYPE_ID "zTXT" | 26 | #define ZTXT_TYPE_ID "zTXT" |
27 | /* Size of one database record */ | 27 | /* Size of one database record */ |
28 | #define RECORD_SIZE 8192 | 28 | #define RECORD_SIZE 8192 |
29 | /* Allow largest WBIT size for data. Lower with command line options | 29 | /* Allow largest WBIT size for data. Lower with command line options |
30 | in makeztxt */ | 30 | in makeztxt */ |
31 | #define MAXWBITS 15 | 31 | #define MAXWBITS 15 |
32 | /* Max length for a bookmark/annotation title */ | 32 | /* Max length for a bookmark/annotation title */ |
33 | #define MAX_BMRK_LENGTH 20 | 33 | #define MAX_BMRK_LENGTH 20 |
34 | 34 | ||
35 | 35 | ||
36 | /***************************************************** | 36 | /***************************************************** |
37 | * This is the zTXT document header (record #0) * | 37 | * This is the zTXT document header (record #0) * |
38 | * ----zTXT version 1.42---- * | 38 | * ----zTXT version 1.42---- * |
39 | *****************************************************/ | 39 | *****************************************************/ |
40 | typedef struct zTXT_record0Type { | 40 | typedef struct zTXT_record0Type { |
41 | UInt16 version; /* zTXT format version */ | 41 | UInt16 version; /* zTXT format version */ |
42 | UInt16 numRecords; /* Number of data (TEXT) records */ | 42 | UInt16 numRecords; /* Number of data (TEXT) records */ |
43 | UInt32 size; /* Size in bytes of uncomp. data */ | 43 | UInt32 size; /* Size in bytes of uncomp. data */ |
44 | UInt16 recordSize; /* Size of a single data record */ | 44 | UInt16 recordSize; /* Size of a single data record */ |
45 | UInt16 numBookmarks; /* Number of bookmarks in DB */ | 45 | UInt16 numBookmarks; /* Number of bookmarks in DB */ |
46 | UInt16 bookmarkRecord; /* Record containing bookmarks */ | 46 | UInt16 bookmarkRecord; /* Record containing bookmarks */ |
47 | UInt16 numAnnotations; /* Number of annotation records */ | 47 | UInt16 numAnnotations; /* Number of annotation records */ |
48 | UInt16 annotationRecord; /* Record # of annotation index */ | 48 | UInt16 annotationRecord; /* Record # of annotation index */ |
49 | UInt8 randomAccess; /* 1 if compressed w/Z_FULL_FLUSH */ | 49 | UInt8 randomAccess; /* 1 if compressed w/Z_FULL_FLUSH */ |
50 | UInt8 padding[0x20 - 19]; /* Pad to a size of 0x20 bytes */ | 50 | UInt8 padding[0x20 - 19]; /* Pad to a size of 0x20 bytes */ |
51 | } zTXT_record0; | 51 | } zTXT_record0; |
52 | 52 | ||
53 | struct zTXTbkmk | 53 | struct zTXTbkmk |
54 | { | 54 | { |
55 | UInt32 offset; | 55 | UInt32 offset; |
56 | tchar title[MAX_BMRK_LENGTH]; | 56 | tchar title[MAX_BMRK_LENGTH]; |
57 | }; | 57 | }; |
58 | 58 | ||
59 | #endif | 59 | #endif |
60 | 60 | ||
61 | 61 | ||
62 | const UInt32 ZTXT_ID = 0x5458547a; | 62 | const UInt32 ZTXT_ID = 0x5458547a; |
63 | 63 | ||
64 | class ztxt : public CExpander, Cpdb | 64 | class ztxt : public CExpander, Cpdb |
65 | { | 65 | { |
66 | bool bInit; | 66 | bool bInit; |
67 | UInt32 buffersize; | 67 | UInt32 buffersize; |
68 | UInt32 buffercontent; | 68 | UInt32 buffercontent; |
69 | UInt8* expandedtextbuffer; | 69 | UInt8* expandedtextbuffer; |
70 | UInt8* compressedtextbuffer; | 70 | UInt8* compressedtextbuffer; |
71 | z_stream zstream; | 71 | z_stream zstream; |
72 | size_t bufferpos; | 72 | size_t bufferpos; |
73 | UInt16 bufferrec; | 73 | UInt16 bufferrec; |
74 | zTXT_record0 hdr0; | 74 | zTXT_record0 hdr0; |
75 | size_t currentpos; | 75 | size_t currentpos; |
76 | void home(); | 76 | void home(); |
77 | public: | 77 | public: |
78 | virtual void suspend() | ||
79 | { | ||
80 | CExpander::suspend(fin); | ||
81 | } | ||
82 | virtual void unsuspend() | ||
83 | { | ||
84 | CExpander::unsuspend(fin); | ||
85 | } | ||
78 | virtual void sizes(unsigned long& _file, unsigned long& _text) | 86 | virtual void sizes(unsigned long& _file, unsigned long& _text) |
79 | { | 87 | { |
80 | _file = file_length; | 88 | _file = file_length; |
81 | _text = ntohl(hdr0.size); | 89 | _text = ntohl(hdr0.size); |
82 | } | 90 | } |
83 | virtual bool hasrandomaccess() { return (hdr0.randomAccess != 0); } | 91 | virtual bool hasrandomaccess() { return (hdr0.randomAccess != 0); } |
84 | virtual ~ztxt() | 92 | virtual ~ztxt() |
85 | { | 93 | { |
86 | if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; | 94 | if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; |
87 | if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; | 95 | if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; |
88 | if (bInit) | 96 | if (bInit) |
89 | { | 97 | { |
90 | inflateEnd(&zstream); | 98 | inflateEnd(&zstream); |
91 | } | 99 | } |
92 | } | 100 | } |
93 | ztxt(); | 101 | ztxt(); |
94 | virtual int openfile(const char *src); | 102 | virtual int OpenFile(const char *src); |
95 | virtual int getch(); | 103 | virtual int getch(); |
96 | virtual unsigned int locate(); | 104 | virtual unsigned int locate(); |
97 | virtual void locate(unsigned int n); | 105 | virtual void locate(unsigned int n); |
98 | virtual CList<Bkmk>* getbkmklist(); | 106 | virtual CList<Bkmk>* getbkmklist(); |
99 | virtual MarkupType PreferredMarkup() | 107 | virtual MarkupType PreferredMarkup() |
100 | { | 108 | { |
101 | return cTEXT; | 109 | return cTEXT; |
102 | } | 110 | } |
103 | }; | 111 | }; |
104 | 112 | ||
105 | #endif | 113 | #endif |