43 files changed, 4114 insertions, 2695 deletions
diff --git a/noncore/apps/opie-reader/Aportis.cpp b/noncore/apps/opie-reader/Aportis.cpp index b4988da..2f8cdc3 100644 --- a/noncore/apps/opie-reader/Aportis.cpp +++ b/noncore/apps/opie-reader/Aportis.cpp | |||
@@ -1,374 +1,374 @@ | |||
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include <string.h> | 2 | #include <string.h> |
3 | #include "Aportis.h" | 3 | #include "Aportis.h" |
4 | #include "my_list.h" | 4 | #include "my_list.h" |
5 | #include "Bkmks.h" | 5 | #include "Bkmks.h" |
6 | 6 | ||
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 af1fd3b..202a36f 100644 --- a/noncore/apps/opie-reader/Aportis.h +++ b/noncore/apps/opie-reader/Aportis.h | |||
@@ -1,108 +1,110 @@ | |||
1 | /* | 1 | /* |
2 | Derived from makedoc9 by Pat Beirne | 2 | Derived from makedoc9 by Pat Beirne |
3 | */ | 3 | */ |
4 | 4 | ||
5 | #ifndef __Aportis_h | 5 | #ifndef __Aportis_h |
6 | #define __Aportis_h | 6 | #define __Aportis_h |
7 | 7 | #include "useqpe.h" | |
8 | #include "CExpander.h" | 8 | #include "CExpander.h" |
9 | #include "pdb.h" | 9 | #include "pdb.h" |
10 | 10 | ||
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() | 78 | #ifdef USEQPE |
79 | void suspend() | ||
79 | { | 80 | { |
80 | CExpander::suspend(fin); | 81 | CExpander::suspend(fin); |
81 | } | 82 | } |
82 | virtual void unsuspend() | 83 | void unsuspend() |
83 | { | 84 | { |
84 | CExpander::unsuspend(fin); | 85 | CExpander::unsuspend(fin); |
85 | } | 86 | } |
86 | virtual void sizes(unsigned long& _file, unsigned long& _text) | 87 | #endif |
88 | void sizes(unsigned long& _file, unsigned long& _text) | ||
87 | { | 89 | { |
88 | _file = dwLen; | 90 | _file = dwLen; |
89 | _text = dwTLen; | 91 | _text = dwTLen; |
90 | } | 92 | } |
91 | virtual bool hasrandomaccess() { return true; } | 93 | bool hasrandomaccess() { return true; } |
92 | virtual ~Aportis() {} | 94 | virtual ~Aportis() {} |
93 | Aportis(); | 95 | Aportis(); |
94 | virtual int OpenFile(const char *src); | 96 | int OpenFile(const char *src); |
95 | virtual int getch(); | 97 | int getch(); |
96 | virtual unsigned int locate(); | 98 | unsigned int locate(); |
97 | virtual void locate(unsigned int n); | 99 | void locate(unsigned int n); |
98 | virtual CList<Bkmk>* getbkmklist(); | 100 | CList<Bkmk>* getbkmklist(); |
99 | virtual MarkupType PreferredMarkup() | 101 | MarkupType PreferredMarkup() |
100 | { | 102 | { |
101 | return (peanutfile) ? cPML : cTEXT; | 103 | return (peanutfile) ? cPML : cTEXT; |
102 | } | 104 | } |
103 | private: | 105 | private: |
104 | bool refreshbuffer(); | 106 | bool refreshbuffer(); |
105 | unsigned int GetBS(unsigned int bn); | 107 | unsigned int GetBS(unsigned int bn); |
106 | }; | 108 | }; |
107 | 109 | ||
108 | #endif | 110 | #endif |
diff --git a/noncore/apps/opie-reader/Bkmks.cpp b/noncore/apps/opie-reader/Bkmks.cpp index a8bee13..889c6d8 100644 --- a/noncore/apps/opie-reader/Bkmks.cpp +++ b/noncore/apps/opie-reader/Bkmks.cpp | |||
@@ -1,322 +1,322 @@ | |||
1 | #include "name.h" | ||
2 | #include <qmessagebox.h> | 1 | #include <qmessagebox.h> |
3 | 2 | ||
4 | #include "Bkmks.h" | 3 | #include "Bkmks.h" |
5 | 4 | ||
6 | #include "StyleConsts.h" | 5 | #include "StyleConsts.h" |
7 | #include "Markups.h" | 6 | #include "Markups.h" |
8 | #include "my_list.h" | 7 | #include "my_list.h" |
9 | #include "version.h" | 8 | #include "version.h" |
9 | #include "names.h" | ||
10 | 10 | ||
11 | 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); |
12 | 12 | ||
13 | Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p) | 13 | Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p) |
14 | { | 14 | { |
15 | init(_nm, _nmlen, _anno, _annolen, _p); | 15 | init(_nm, _nmlen, _anno, _annolen, _p); |
16 | } | 16 | } |
17 | 17 | ||
18 | Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p) | 18 | Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p) |
19 | { | 19 | { |
20 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p); | 20 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p); |
21 | } | 21 | } |
22 | 22 | ||
23 | 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) |
24 | { | 24 | { |
25 | 25 | ||
26 | if (_anno == NULL) | 26 | if (_anno == NULL) |
27 | { | 27 | { |
28 | tchar t = 0; | 28 | tchar t = 0; |
29 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p); | 29 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p); |
30 | } | 30 | } |
31 | else | 31 | else |
32 | { | 32 | { |
33 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p); | 33 | init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p); |
34 | } | 34 | } |
35 | } | 35 | } |
36 | 36 | ||
37 | void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p) | 37 | void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p) |
38 | { | 38 | { |
39 | m_namelen = _nmlen; | 39 | m_namelen = _nmlen; |
40 | if (m_namelen > 0) | 40 | if (m_namelen > 0) |
41 | { | 41 | { |
42 | m_name = new unsigned char[m_namelen]; | 42 | m_name = new unsigned char[m_namelen]; |
43 | memcpy(m_name, _nm, m_namelen); | 43 | memcpy(m_name, _nm, m_namelen); |
44 | } | 44 | } |
45 | else | 45 | else |
46 | { | 46 | { |
47 | m_name = NULL; | 47 | m_name = NULL; |
48 | } | 48 | } |
49 | 49 | ||
50 | m_annolen = _annolen; | 50 | m_annolen = _annolen; |
51 | if (m_annolen > 0) | 51 | if (m_annolen > 0) |
52 | { | 52 | { |
53 | m_anno = new unsigned char[m_annolen]; | 53 | m_anno = new unsigned char[m_annolen]; |
54 | memcpy(m_anno, _anno, m_annolen); | 54 | memcpy(m_anno, _anno, m_annolen); |
55 | } | 55 | } |
56 | else | 56 | else |
57 | { | 57 | { |
58 | m_anno = NULL; | 58 | m_anno = NULL; |
59 | } | 59 | } |
60 | m_position = _p; | 60 | m_position = _p; |
61 | } | 61 | } |
62 | 62 | ||
63 | Bkmk::~Bkmk() | 63 | Bkmk::~Bkmk() |
64 | { | 64 | { |
65 | if (m_name != NULL) delete [] m_name; | 65 | if (m_name != NULL) delete [] m_name; |
66 | m_name = NULL; | 66 | m_name = NULL; |
67 | if (m_anno != NULL) delete [] m_anno; | 67 | if (m_anno != NULL) delete [] m_anno; |
68 | m_anno = NULL; | 68 | m_anno = NULL; |
69 | } | 69 | } |
70 | 70 | ||
71 | Bkmk& Bkmk::operator=(const Bkmk& rhs) | 71 | Bkmk& Bkmk::operator=(const Bkmk& rhs) |
72 | { | 72 | { |
73 | if (m_name != NULL) | 73 | if (m_name != NULL) |
74 | { | 74 | { |
75 | delete [] m_name; | 75 | delete [] m_name; |
76 | m_name = NULL; | 76 | m_name = NULL; |
77 | } | 77 | } |
78 | if (m_anno != NULL) | 78 | if (m_anno != NULL) |
79 | { | 79 | { |
80 | delete [] m_anno; | 80 | delete [] m_anno; |
81 | m_anno = NULL; | 81 | m_anno = NULL; |
82 | } | 82 | } |
83 | if (rhs.m_name != NULL) | 83 | if (rhs.m_name != NULL) |
84 | { | 84 | { |
85 | m_namelen = rhs.m_namelen; | 85 | m_namelen = rhs.m_namelen; |
86 | m_name = new unsigned char[m_namelen]; | 86 | m_name = new unsigned char[m_namelen]; |
87 | memcpy(m_name, rhs.m_name, m_namelen); | 87 | memcpy(m_name, rhs.m_name, m_namelen); |
88 | } | 88 | } |
89 | else | 89 | else |
90 | m_name = NULL; | 90 | m_name = NULL; |
91 | if (rhs.m_anno != NULL) | 91 | if (rhs.m_anno != NULL) |
92 | { | 92 | { |
93 | m_annolen = rhs.m_annolen; | 93 | m_annolen = rhs.m_annolen; |
94 | m_anno = new unsigned char[m_annolen]; | 94 | m_anno = new unsigned char[m_annolen]; |
95 | memcpy(m_anno, rhs.m_anno, m_annolen); | 95 | memcpy(m_anno, rhs.m_anno, m_annolen); |
96 | } | 96 | } |
97 | else | 97 | else |
98 | m_anno = NULL; | 98 | m_anno = NULL; |
99 | m_position = rhs.m_position; | 99 | m_position = rhs.m_position; |
100 | return *this; | 100 | return *this; |
101 | } | 101 | } |
102 | 102 | ||
103 | bool Bkmk::operator==(const Bkmk& rhs) | 103 | bool Bkmk::operator==(const Bkmk& rhs) |
104 | { | 104 | { |
105 | return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0); | 105 | return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0); |
106 | } | 106 | } |
107 | 107 | ||
108 | void Bkmk::setAnno(unsigned char* t, unsigned short len) | 108 | void Bkmk::setAnno(unsigned char* t, unsigned short len) |
109 | { | 109 | { |
110 | if (m_anno != NULL) | 110 | if (m_anno != NULL) |
111 | { | 111 | { |
112 | delete [] m_anno; | 112 | delete [] m_anno; |
113 | m_anno = NULL; | 113 | m_anno = NULL; |
114 | } | 114 | } |
115 | if (t != NULL) | 115 | if (t != NULL) |
116 | { | 116 | { |
117 | m_annolen = len; | 117 | m_annolen = len; |
118 | m_anno = new unsigned char[m_annolen]; | 118 | m_anno = new unsigned char[m_annolen]; |
119 | memcpy(m_anno, t, m_annolen); | 119 | memcpy(m_anno, t, m_annolen); |
120 | } | 120 | } |
121 | else | 121 | else |
122 | { | 122 | { |
123 | m_annolen = sizeof(tchar); | 123 | m_annolen = sizeof(tchar); |
124 | m_anno = new unsigned char[m_annolen]; | 124 | m_anno = new unsigned char[m_annolen]; |
125 | *((tchar*)m_anno) = 0; | 125 | *((tchar*)m_anno) = 0; |
126 | } | 126 | } |
127 | } | 127 | } |
128 | 128 | ||
129 | void Bkmk::setAnno(tchar* t) | 129 | void Bkmk::setAnno(tchar* t) |
130 | { | 130 | { |
131 | if (m_anno != NULL) | 131 | if (m_anno != NULL) |
132 | { | 132 | { |
133 | delete [] m_anno; | 133 | delete [] m_anno; |
134 | m_anno = NULL; | 134 | m_anno = NULL; |
135 | } | 135 | } |
136 | if (t != NULL) | 136 | if (t != NULL) |
137 | { | 137 | { |
138 | unsigned short len = ustrlen(t)+1; | 138 | unsigned short len = ustrlen(t)+1; |
139 | m_annolen = sizeof(tchar)*len; | 139 | m_annolen = sizeof(tchar)*len; |
140 | m_anno = new unsigned char[m_annolen]; | 140 | m_anno = new unsigned char[m_annolen]; |
141 | memcpy(m_anno, t, m_annolen); | 141 | memcpy(m_anno, t, m_annolen); |
142 | } | 142 | } |
143 | else | 143 | else |
144 | { | 144 | { |
145 | m_annolen = sizeof(tchar); | 145 | m_annolen = sizeof(tchar); |
146 | m_anno = new unsigned char[m_annolen]; | 146 | m_anno = new unsigned char[m_annolen]; |
147 | *((tchar*)m_anno) = 0; | 147 | *((tchar*)m_anno) = 0; |
148 | } | 148 | } |
149 | } | 149 | } |
150 | 150 | ||
151 | BkmkFile::BkmkFile(const char *fnm, bool w) | 151 | BkmkFile::BkmkFile(const char *fnm, bool w) |
152 | : | 152 | : |
153 | wt(w), isUpgraded(false) | 153 | wt(w), isUpgraded(false) |
154 | { | 154 | { |
155 | if (w) | 155 | if (w) |
156 | { | 156 | { |
157 | f = fopen(fnm, "wb"); | 157 | f = fopen(fnm, "wb"); |
158 | } | 158 | } |
159 | else | 159 | else |
160 | { | 160 | { |
161 | f = fopen(fnm, "rb"); | 161 | f = fopen(fnm, "rb"); |
162 | } | 162 | } |
163 | } | 163 | } |
164 | 164 | ||
165 | BkmkFile::~BkmkFile() | 165 | BkmkFile::~BkmkFile() |
166 | { | 166 | { |
167 | if (f != NULL) fclose(f); | 167 | if (f != NULL) fclose(f); |
168 | } | 168 | } |
169 | 169 | ||
170 | void BkmkFile::write(const Bkmk& b) | 170 | void BkmkFile::write(const Bkmk& b) |
171 | { | 171 | { |
172 | if (f != NULL) | 172 | if (f != NULL) |
173 | { | 173 | { |
174 | fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f); | 174 | fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f); |
175 | fwrite(b.m_name,1,b.m_namelen,f); | 175 | fwrite(b.m_name,1,b.m_namelen,f); |
176 | fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f); | 176 | fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f); |
177 | fwrite(b.m_anno,1,b.m_annolen,f); | 177 | fwrite(b.m_anno,1,b.m_annolen,f); |
178 | fwrite(&b.m_position,sizeof(b.m_position),1,f); | 178 | fwrite(&b.m_position,sizeof(b.m_position),1,f); |
179 | } | 179 | } |
180 | } | 180 | } |
181 | 181 | ||
182 | void BkmkFile::write(CList<Bkmk>& bl) | 182 | void BkmkFile::write(CList<Bkmk>& bl) |
183 | { | 183 | { |
184 | if (f != NULL) | 184 | if (f != NULL) |
185 | { | 185 | { |
186 | fwrite(&magic, sizeof(magic), 1, f); | 186 | fwrite(&magic, sizeof(magic), 1, f); |
187 | for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++) | 187 | for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++) |
188 | { | 188 | { |
189 | write(*i); | 189 | write(*i); |
190 | } | 190 | } |
191 | } | 191 | } |
192 | } | 192 | } |
193 | 193 | ||
194 | CList<Bkmk>* BkmkFile::readall() | 194 | CList<Bkmk>* BkmkFile::readall() |
195 | { | 195 | { |
196 | CList<Bkmk>* bl = NULL; | 196 | CList<Bkmk>* bl = NULL; |
197 | if (f != NULL) | 197 | if (f != NULL) |
198 | { | 198 | { |
199 | unsigned long newmagic; | 199 | unsigned long newmagic; |
200 | fread(&newmagic, sizeof(newmagic), 1, f); | 200 | fread(&newmagic, sizeof(newmagic), 1, f); |
201 | if ((newmagic & 0xffffff00) != (magic & 0xffffff00)) | 201 | if ((newmagic & 0xffffff00) != (magic & 0xffffff00)) |
202 | { | 202 | { |
203 | if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of " PROGNAME "\ndid you upgrade from?", "0_4*", "Any other version") == 0) | 203 | if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of " PROGNAME "\ndid you upgrade from?", "0_4*", "Any other version") == 0) |
204 | { | 204 | { |
205 | fseek(f,0,SEEK_SET); | 205 | fseek(f,0,SEEK_SET); |
206 | bl = readall00(&read05); | 206 | bl = readall00(&read05); |
207 | } | 207 | } |
208 | else | 208 | else |
209 | { | 209 | { |
210 | fseek(f,0,SEEK_SET); | 210 | fseek(f,0,SEEK_SET); |
211 | bl = readall00(&read03); | 211 | bl = readall00(&read03); |
212 | } | 212 | } |
213 | isUpgraded = true; | 213 | isUpgraded = true; |
214 | } | 214 | } |
215 | else | 215 | else |
216 | { | 216 | { |
217 | switch(newmagic & 0xff) | 217 | switch(newmagic & 0xff) |
218 | { | 218 | { |
219 | case 6: | 219 | case 6: |
220 | isUpgraded = false; | 220 | isUpgraded = false; |
221 | bl = readall00(read06); | 221 | bl = readall00(read06); |
222 | qDebug("Correct version!"); | 222 | // qDebug("Correct version!"); |
223 | break; | 223 | break; |
224 | case 5: | 224 | case 5: |
225 | isUpgraded = true; | 225 | isUpgraded = true; |
226 | bl = readall00(read05); | 226 | bl = readall00(read05); |
227 | qDebug("Known version!"); | 227 | // qDebug("Known version!"); |
228 | break; | 228 | break; |
229 | default: | 229 | default: |
230 | qDebug("Unknown version!"); | 230 | // qDebug("Unknown version!"); |
231 | isUpgraded = true; | 231 | isUpgraded = true; |
232 | bl = readall00(read05); | 232 | bl = readall00(read05); |
233 | } | 233 | } |
234 | } | 234 | } |
235 | } | 235 | } |
236 | return bl; | 236 | return bl; |
237 | } | 237 | } |
238 | 238 | ||
239 | CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*)) | 239 | CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*)) |
240 | { | 240 | { |
241 | CList<Bkmk>* bl = new CList<Bkmk>; | 241 | CList<Bkmk>* bl = new CList<Bkmk>; |
242 | while (1) | 242 | while (1) |
243 | { | 243 | { |
244 | Bkmk* b = (*readfn)(f); | 244 | Bkmk* b = (*readfn)(f); |
245 | if (b == NULL) break; | 245 | if (b == NULL) break; |
246 | bl->push_back(*b); | 246 | bl->push_back(*b); |
247 | delete b; | 247 | delete b; |
248 | } | 248 | } |
249 | return bl; | 249 | return bl; |
250 | } | 250 | } |
251 | 251 | ||
252 | Bkmk* BkmkFile::read03(FILE* f) | 252 | Bkmk* BkmkFile::read03(FILE* f) |
253 | { | 253 | { |
254 | Bkmk* b = NULL; | 254 | Bkmk* b = NULL; |
255 | if (f != NULL) | 255 | if (f != NULL) |
256 | { | 256 | { |
257 | unsigned short ln; | 257 | unsigned short ln; |
258 | if (fread(&ln,sizeof(ln),1,f) == 1) | 258 | if (fread(&ln,sizeof(ln),1,f) == 1) |
259 | { | 259 | { |
260 | tchar* name = new tchar[ln+1]; | 260 | tchar* name = new tchar[ln+1]; |
261 | fread(name,sizeof(tchar),ln,f); | 261 | fread(name,sizeof(tchar),ln,f); |
262 | name[ln] = 0; | 262 | name[ln] = 0; |
263 | 263 | ||
264 | ln = 0; | 264 | ln = 0; |
265 | tchar* anno = new tchar[ln+1]; | 265 | tchar* anno = new tchar[ln+1]; |
266 | anno[ln] = 0; | 266 | anno[ln] = 0; |
267 | 267 | ||
268 | unsigned int pos; | 268 | unsigned int pos; |
269 | fread(&pos,sizeof(pos),1,f); | 269 | fread(&pos,sizeof(pos),1,f); |
270 | b = new Bkmk(name,anno,pos); | 270 | b = new Bkmk(name,anno,pos); |
271 | } | 271 | } |
272 | } | 272 | } |
273 | return b; | 273 | return b; |
274 | } | 274 | } |
275 | 275 | ||
276 | Bkmk* BkmkFile::read05(FILE* f) | 276 | Bkmk* BkmkFile::read05(FILE* f) |
277 | { | 277 | { |
278 | Bkmk* b = NULL; | 278 | Bkmk* b = NULL; |
279 | if (f != NULL) | 279 | if (f != NULL) |
280 | { | 280 | { |
281 | unsigned short ln; | 281 | unsigned short ln; |
282 | if (fread(&ln,sizeof(ln),1,f) == 1) | 282 | if (fread(&ln,sizeof(ln),1,f) == 1) |
283 | { | 283 | { |
284 | tchar* nm = new tchar[ln+1]; | 284 | tchar* nm = new tchar[ln+1]; |
285 | fread(nm,sizeof(tchar),ln,f); | 285 | fread(nm,sizeof(tchar),ln,f); |
286 | nm[ln] = 0; | 286 | nm[ln] = 0; |
287 | fread(&ln,sizeof(ln),1,f); | 287 | fread(&ln,sizeof(ln),1,f); |
288 | tchar* anno = new tchar[ln+1]; | 288 | tchar* anno = new tchar[ln+1]; |
289 | if (ln > 0) fread(anno,sizeof(tchar),ln,f); | 289 | if (ln > 0) fread(anno,sizeof(tchar),ln,f); |
290 | anno[ln] = 0; | 290 | anno[ln] = 0; |
291 | unsigned int pos; | 291 | unsigned int pos; |
292 | fread(&pos,sizeof(pos),1,f); | 292 | fread(&pos,sizeof(pos),1,f); |
293 | b = new Bkmk(nm,anno,pos); | 293 | b = new Bkmk(nm,anno,pos); |
294 | } | 294 | } |
295 | } | 295 | } |
296 | return b; | 296 | return b; |
297 | } | 297 | } |
298 | 298 | ||
299 | Bkmk* BkmkFile::read06(FILE* f) | 299 | Bkmk* BkmkFile::read06(FILE* f) |
300 | { | 300 | { |
301 | Bkmk* b = NULL; | 301 | Bkmk* b = NULL; |
302 | if (f != NULL) | 302 | if (f != NULL) |
303 | { | 303 | { |
304 | unsigned short ln; | 304 | unsigned short ln; |
305 | if (fread(&ln,sizeof(ln),1,f) == 1) | 305 | if (fread(&ln,sizeof(ln),1,f) == 1) |
306 | { | 306 | { |
307 | b = new Bkmk; | 307 | b = new Bkmk; |
308 | b->m_namelen = ln; | 308 | b->m_namelen = ln; |
309 | b->m_name = new unsigned char[b->m_namelen]; | 309 | b->m_name = new unsigned char[b->m_namelen]; |
310 | fread(b->m_name,1,b->m_namelen,f); | 310 | fread(b->m_name,1,b->m_namelen,f); |
311 | 311 | ||
312 | fread(&(b->m_annolen),sizeof(b->m_annolen),1,f); | 312 | fread(&(b->m_annolen),sizeof(b->m_annolen),1,f); |
313 | if (b->m_annolen > 0) | 313 | if (b->m_annolen > 0) |
314 | { | 314 | { |
315 | b->m_anno = new unsigned char[b->m_annolen]; | 315 | b->m_anno = new unsigned char[b->m_annolen]; |
316 | fread(b->m_anno,1,b->m_annolen,f); | 316 | fread(b->m_anno,1,b->m_annolen,f); |
317 | } | 317 | } |
318 | fread(&(b->m_position),sizeof(b->m_position),1,f); | 318 | fread(&(b->m_position),sizeof(b->m_position),1,f); |
319 | } | 319 | } |
320 | } | 320 | } |
321 | return b; | 321 | return b; |
322 | } | 322 | } |
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp index 1123960..2402904 100644 --- a/noncore/apps/opie-reader/BuffDoc.cpp +++ b/noncore/apps/opie-reader/BuffDoc.cpp | |||
@@ -1,356 +1,416 @@ | |||
1 | #include "name.h" | 1 | #include "names.h" |
2 | |||
3 | #define NEWLINEBREAK | ||
2 | 4 | ||
3 | #include "BuffDoc.h" | 5 | #include "BuffDoc.h" |
4 | //#include <FL/fl_draw.h> | 6 | //#include <FL/fl_draw.h> |
5 | #include "config.h" | 7 | #include "config.h" |
6 | #include "CDrawBuffer.h" | 8 | #include "CDrawBuffer.h" |
7 | #include "plucker.h" | 9 | #include "plucker.h" |
10 | #include "usenef.h" | ||
11 | #ifdef USENEF | ||
12 | #include "nef.h" | ||
13 | #include "arrierego.h" | ||
14 | #endif | ||
8 | 15 | ||
9 | 16 | linkType BuffDoc::hyperlink(unsigned int n, QString& wrd) | |
10 | bool BuffDoc::hyperlink(unsigned int n) | ||
11 | { | 17 | { |
12 | bool bRet = false; | 18 | linkType bRet = eNone; |
13 | lastword.empty(); | ||
14 | lastsizes[0] = laststartline = n; | ||
15 | lastispara = false; | ||
16 | if (exp != NULL) | 19 | if (exp != NULL) |
17 | { | 20 | { |
18 | bRet = exp->hyperlink(n); | 21 | bRet = exp->hyperlink(n, wrd); |
19 | lastsizes[0] = laststartline = exp->locate(); | 22 | if (bRet == eLink) |
23 | { | ||
24 | lastword.empty(); | ||
25 | lastsizes[0] = laststartline = n; | ||
26 | #ifdef NEWLINEBREAK | ||
27 | lastispara = true; | ||
28 | #else | ||
29 | lastispara = false; | ||
30 | #endif | ||
31 | lastsizes[0] = laststartline = exp->locate(); | ||
32 | } | ||
20 | } | 33 | } |
21 | return bRet; | 34 | return bRet; |
22 | } | 35 | } |
23 | 36 | ||
24 | void BuffDoc::locate(unsigned int n) | 37 | void BuffDoc::locate(unsigned int n) |
25 | { | 38 | { |
26 | // qDebug("BuffDoc:locating:%u",n); | 39 | // //qDebug("BuffDoc:locating:%u",n); |
27 | lastword.empty(); | 40 | lastword.empty(); |
28 | lastsizes[0] = laststartline = n; | 41 | lastsizes[0] = laststartline = n; |
29 | lastispara = false; | 42 | #ifdef NEWLINEBREAK |
43 | lastispara = true; | ||
44 | #else | ||
45 | lastispara = false; | ||
46 | #endif | ||
30 | // tchar linebuf[1024]; | 47 | // tchar linebuf[1024]; |
31 | if (exp != NULL) exp->locate(n); | 48 | if (exp != NULL) exp->locate(n); |
32 | // qDebug("BuffDoc:Located"); | 49 | // //qDebug("BuffDoc:Located"); |
33 | } | 50 | } |
34 | 51 | ||
35 | #define NEWLINEBREAK | ||
36 | #ifdef NEWLINEBREAK | 52 | #ifdef NEWLINEBREAK |
37 | bool BuffDoc::getline(CDrawBuffer* buff, int wth) | 53 | bool BuffDoc::getline(CDrawBuffer* buff, int wth, unsigned char _border) |
38 | { | 54 | { |
39 | bool moreleft = true; | 55 | bool moreleft = true; |
40 | bool margindone = false; | 56 | bool margindone = false; |
41 | int w = wth-2*BORDER; | 57 | int w = wth-2*_border; |
42 | tchar ch = 32; | 58 | tchar ch = 32; |
43 | CStyle cs; | 59 | CStyle cs; |
44 | buff->empty(); | 60 | buff->empty(); |
45 | if (exp == NULL) | 61 | if (exp == NULL) |
46 | { | 62 | { |
47 | buff->empty(); | 63 | buff->empty(); |
48 | buff->setEof(); | 64 | buff->setEof(); |
49 | return false; | 65 | return false; |
50 | } | 66 | } |
51 | int len = 0; | 67 | int len = 0; |
52 | if (lastword.length() > 0) | 68 | if (lastword.length() > 0) |
53 | { | 69 | { |
54 | *buff = lastword; | 70 | *buff = lastword; |
55 | cs = lastword.laststyle(); | 71 | cs = lastword.laststyle(); |
56 | w -= buff->leftMargin() + buff->rightMargin(); | 72 | w -= buff->leftMargin() + buff->rightMargin(); |
57 | margindone = true; | 73 | margindone = true; |
58 | len = lastword.length(); | 74 | len = lastword.length(); |
59 | } | 75 | } |
60 | else buff->empty(); | 76 | else buff->empty(); |
61 | lastword.empty(); | 77 | lastword.empty(); |
62 | unsigned int slen = buff->width(len); | 78 | unsigned int slen = buff->width(len); |
63 | lastispara = false; | 79 | if (lastispara) buff->setstartpara(); |
64 | while (1) | 80 | while (1) |
65 | { | 81 | { |
66 | lastsizes[len] = exp->locate(); | 82 | lastsizes[len] = exp->locate(); |
67 | getch(ch, cs); | 83 | getch(ch, cs); |
84 | if (ch == 10 && len == 0 && !lastispara) | ||
85 | { | ||
86 | lastsizes[len] = exp->locate(); | ||
87 | getch(ch, cs); | ||
88 | } | ||
68 | if (ch == UEOF) | 89 | if (ch == UEOF) |
69 | { | 90 | { |
70 | lastword.empty(); | ||
71 | if (len == 0) | 91 | if (len == 0) |
72 | { | 92 | { |
73 | buff->setEof(); | 93 | buff->setEof(); |
74 | moreleft = false; | 94 | moreleft = false; |
75 | } | 95 | } |
76 | laststartline = exp->locate(); | 96 | laststartline = exp->locate(); |
77 | break; | 97 | break; |
78 | } | 98 | } |
79 | if (ch == 10) | 99 | if (ch == 10) |
80 | { | 100 | { |
81 | lastword.empty(); | 101 | buff->setendpara(); |
82 | lastispara = true; | 102 | lastispara = true; |
83 | laststartline = exp->locate(); | 103 | laststartline = exp->locate(); |
84 | break; | 104 | break; |
85 | } | 105 | } |
106 | lastispara = false; | ||
86 | buff->addch(ch, cs); | 107 | buff->addch(ch, cs); |
87 | len++; | 108 | len++; |
88 | if (!margindone) | 109 | if (!margindone) |
89 | { | 110 | { |
90 | w -= buff->leftMargin() + buff->rightMargin(); | 111 | w -= buff->leftMargin() + buff->rightMargin(); |
91 | margindone = true; | 112 | margindone = true; |
92 | } | 113 | } |
93 | if ((slen = buff->width(len)) > w) | 114 | if ((slen = buff->width(len)) > w) |
94 | { | 115 | { |
95 | if (ch == ' ' || len == 1) | 116 | if (ch == ' ' || len == 1) |
96 | { | 117 | { |
97 | lastword.empty(); | 118 | if (ch == ' ') buff->truncate(len-1); |
98 | laststartline = exp->locate(); | 119 | laststartline = exp->locate(); |
99 | break; | 120 | break; |
100 | } | 121 | } |
101 | else // should do a backward search for spaces, first. | 122 | else // should do a backward search for spaces, first. |
102 | { | 123 | { |
103 | for (int i = len-1; i > 0; i--) | 124 | for (int i = len-2; i > 0; i--) |
104 | { | 125 | { |
105 | if ((*buff)[i] == ' ') | 126 | if ((*buff)[i] == ' ') |
106 | { | 127 | { |
107 | (*buff)[len] = 0; | 128 | (*buff)[len] = 0; |
108 | lastword.setright(*buff, i+1); | 129 | lastword.setright(*buff, i+1); |
109 | buff->truncate(i); | 130 | buff->truncate(i); |
110 | (*buff)[i] = '\0'; | 131 | (*buff)[i] = '\0'; |
111 | laststartline = lastsizes[i+1]; | 132 | laststartline = lastsizes[i+1]; |
112 | buff->resize(); | 133 | buff->resize(); |
113 | for (int j = 0; j < lastword.length(); j++) | 134 | for (int j = 0; j < lastword.length(); j++) |
114 | { | 135 | { |
115 | lastsizes[j] = lastsizes[j+i+1]; | 136 | lastsizes[j] = lastsizes[j+i+1]; |
116 | } | 137 | } |
117 | return true; | 138 | return true; |
118 | } | 139 | } |
140 | if ((*buff)[i] == '-' && !(((*buff)[i-1] == '-') || ((*buff)[i+1] == '-'))) | ||
141 | { | ||
142 | (*buff)[len] = 0; | ||
143 | lastword.setright(*buff, i+1); | ||
144 | buff->truncate(i+1); | ||
145 | (*buff)[i+1] = '\0'; | ||
146 | laststartline = lastsizes[i+1]; | ||
147 | buff->resize(); | ||
148 | for (int j = 0; j < lastword.length(); j++) | ||
149 | { | ||
150 | lastsizes[j] = lastsizes[j+i+1]; | ||
151 | } | ||
152 | return true; | ||
153 | } | ||
119 | } | 154 | } |
120 | laststartline = lastsizes[len-1]; | 155 | laststartline = lastsizes[len-1]; |
156 | (*buff)[len] = 0; | ||
121 | lastword.setright(*buff, len - 1); | 157 | lastword.setright(*buff, len - 1); |
122 | buff->truncate(len-1); | 158 | buff->truncate(len-1); |
123 | buff->addch('-', cs); | 159 | buff->addch('-', cs); |
124 | for (int j = 0; j < lastword.length(); j++) | 160 | for (int j = 0; j < lastword.length(); j++) |
125 | { | 161 | { |
126 | lastsizes[j] = lastsizes[j+len]; | 162 | lastsizes[j] = lastsizes[j+len]; |
127 | } | 163 | } |
128 | break; | 164 | break; |
129 | } | 165 | } |
130 | } | 166 | } |
131 | } | 167 | } |
132 | (*buff)[len] = '\0'; | 168 | (*buff)[len] = '\0'; |
133 | buff->resize(); | 169 | buff->resize(); |
134 | return moreleft; | 170 | return moreleft; |
135 | } | 171 | } |
136 | #else | 172 | #else |
137 | bool BuffDoc::getline(CDrawBuffer* buff, int wth) | 173 | bool BuffDoc::getline(CDrawBuffer* buff, int wth, unsigned char _border) |
138 | { | 174 | { |
139 | bool margindone = false; | 175 | bool margindone = false; |
140 | int w = wth-2*BORDER; | 176 | int w = wth-2*_border; |
141 | tchar ch = 32; | 177 | tchar ch = 32; |
142 | CStyle cs; | 178 | CStyle cs; |
143 | buff->empty(); | 179 | buff->empty(); |
144 | if (exp == NULL) | 180 | if (exp == NULL) |
145 | { | 181 | { |
146 | //(*buff)[0] = '\0'; | 182 | //(*buff)[0] = '\0'; |
147 | buff->empty(); | 183 | buff->empty(); |
148 | return false; | 184 | return false; |
149 | } | 185 | } |
150 | int len = 0, lastcheck = 0; | 186 | int len = 0, lastcheck = 0; |
151 | if (lastword.length() > 0) | 187 | if (lastword.length() > 0) |
152 | { | 188 | { |
153 | *buff = lastword; | 189 | *buff = lastword; |
154 | cs = lastword.laststyle(); | 190 | cs = lastword.laststyle(); |
155 | w -= buff->leftMargin() + buff->rightMargin(); | 191 | w -= buff->leftMargin() + buff->rightMargin(); |
156 | margindone = true; | 192 | margindone = true; |
157 | } | 193 | } |
158 | else buff->empty(); | 194 | else buff->empty(); |
159 | // qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data())); | 195 | // //qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data())); |
160 | lastcheck = len = buff->length(); | 196 | lastcheck = len = buff->length(); |
161 | unsigned int slen = buff->width(len); | 197 | unsigned int slen = buff->width(len); |
162 | if (slen > w) | 198 | if (slen > w) |
163 | { | 199 | { |
164 | for ( ; len > 1; len--) | 200 | for ( ; len > 1; len--) |
165 | { | 201 | { |
166 | if (buff->width(len) < w) break; | 202 | if (buff->width(len) < w) break; |
167 | } | 203 | } |
168 | // lastword = buff->data() + len - 1; | 204 | // lastword = buff->data() + len - 1; |
169 | laststartline = lastsizes[len-1]; | 205 | laststartline = lastsizes[len-1]; |
170 | for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1]; | 206 | for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1]; |
171 | // (*buff)[len-1] = '-'; | 207 | // (*buff)[len-1] = '-'; |
172 | if (len > 2) | 208 | if (len > 2) |
173 | { | 209 | { |
174 | lastword.setright(*buff, len - 1); | 210 | lastword.setright(*buff, len - 1); |
175 | buff->truncate(len-1); | 211 | buff->truncate(len-1); |
176 | buff->addch('-', cs); | 212 | buff->addch('-', cs); |
177 | (*buff)[len] = '\0'; | 213 | (*buff)[len] = '\0'; |
178 | } | 214 | } |
179 | 215 | ||
180 | else | 216 | else |
181 | { | 217 | { |
182 | lastword.empty(); | 218 | lastword.empty(); |
183 | (*buff)[len] = '\0'; | 219 | (*buff)[len] = '\0'; |
184 | } | 220 | } |
185 | buff->resize(); | 221 | buff->resize(); |
186 | return true; | 222 | return true; |
187 | } | 223 | } |
188 | if (lastispara) | 224 | if (lastispara) |
189 | { | 225 | { |
190 | lastispara = false; | 226 | lastispara = false; |
191 | // lastword[0] = '\0'; | 227 | // lastword[0] = '\0'; |
192 | lastword.empty(); | 228 | lastword.empty(); |
193 | len = buff->length(); | 229 | len = buff->length(); |
194 | while (buff->width(len) > w) len--; | 230 | while (buff->width(len) > w) len--; |
195 | // (*buff)[len] = '\0'; | 231 | // (*buff)[len] = '\0'; |
196 | buff->truncate(len); | 232 | buff->truncate(len); |
197 | laststartline = exp->locate(); | 233 | laststartline = exp->locate(); |
198 | buff->resize(); | 234 | buff->resize(); |
199 | return true; | 235 | return true; |
200 | } | 236 | } |
201 | lastispara = false; | 237 | lastispara = false; |
202 | for (int i = 0; i < len; i++) allsizes[i] = lastsizes[i]; | 238 | for (int i = 0; i < len; i++) allsizes[i] = lastsizes[i]; |
203 | while (slen < w) | 239 | while (slen < w) |
204 | { | 240 | { |
205 | lastcheck = len; | 241 | lastcheck = len; |
206 | allsizes[len] = exp->locate(); | 242 | allsizes[len] = exp->locate(); |
207 | getch(ch, cs); | 243 | getch(ch, cs); |
208 | while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128) | 244 | while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128) |
209 | { | 245 | { |
210 | len++; | 246 | len++; |
211 | buff->addch(ch,cs); | 247 | buff->addch(ch,cs); |
212 | allsizes[len] = exp->locate(); | 248 | allsizes[len] = exp->locate(); |
213 | getch(ch, cs); | 249 | getch(ch, cs); |
214 | } | 250 | } |
215 | (*buff)[len] = 0; | 251 | (*buff)[len] = 0; |
216 | slen = buff->width(len); | 252 | slen = buff->width(len); |
217 | len++; | 253 | len++; |
218 | buff->addch(' ', cs); | 254 | buff->addch(' ', cs); |
219 | if (!margindone) | 255 | if (!margindone) |
220 | { | 256 | { |
221 | w -= buff->leftMargin() + buff->rightMargin(); | 257 | w -= buff->leftMargin() + buff->rightMargin(); |
222 | margindone = true; | 258 | margindone = true; |
223 | } | 259 | } |
224 | allsizes[len] = exp->locate(); | 260 | allsizes[len] = exp->locate(); |
225 | if (slen < w && ch != ' ') | 261 | if (slen < w && ch != ' ') |
226 | { | 262 | { |
227 | lastcheck = len; | 263 | lastcheck = len; |
228 | break; | 264 | break; |
229 | } | 265 | } |
230 | lastispara = (ch == '\012'); | 266 | lastispara = (ch == '\012'); |
231 | } | 267 | } |
232 | (*buff)[len] = '\0'; | 268 | (*buff)[len] = '\0'; |
233 | // lastword = buff->data()+lastcheck; | 269 | // lastword = buff->data()+lastcheck; |
234 | #ifdef WINDOWS | 270 | #ifdef _WINDOWS |
235 | lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1); | 271 | lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1); |
236 | { | 272 | { |
237 | int i; | 273 | int i; |
238 | for (i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; | 274 | for (i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; |
239 | } | 275 | } |
240 | #else | 276 | #else |
241 | lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1); | 277 | lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1); |
242 | for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; | 278 | for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck]; |
243 | #endif | 279 | #endif |
244 | if (lastcheck > 0) | 280 | if (lastcheck > 0) |
245 | { | 281 | { |
246 | laststartline = allsizes[lastcheck]; | 282 | laststartline = allsizes[lastcheck]; |
247 | // (*buff)[lastcheck-1] = '\0'; | 283 | // (*buff)[lastcheck-1] = '\0'; |
248 | buff->truncate(lastcheck-1); | 284 | buff->truncate(lastcheck-1); |
249 | } | 285 | } |
250 | else | 286 | else |
251 | { | 287 | { |
252 | laststartline = (lastcheck == len) ? exp->locate() : allsizes[lastcheck+1]; | 288 | laststartline = (lastcheck == len) ? exp->locate() : allsizes[lastcheck+1]; |
253 | // (*buff)[lastcheck] = '\0'; | 289 | // (*buff)[lastcheck] = '\0'; |
254 | buff->truncate(lastcheck); | 290 | buff->truncate(lastcheck); |
255 | } | 291 | } |
256 | // buff->frig(); | 292 | // buff->frig(); |
257 | buff->resize(); | 293 | buff->resize(); |
258 | if (ch == UEOF && buff->length() == 0) | 294 | if (ch == UEOF && buff->length() == 0) |
259 | { | 295 | { |
260 | buff->setEof(); | 296 | buff->setEof(); |
261 | return false; | 297 | return false; |
262 | } | 298 | } |
263 | return true; | 299 | return true; |
264 | } | 300 | } |
265 | #endif | 301 | #endif |
266 | 302 | ||
267 | bool BuffDoc::getline(CDrawBuffer* buff, int wth, int cw) | 303 | bool BuffDoc::getline(CDrawBuffer* buff, int wth, int cw, unsigned char _border) |
268 | { | 304 | { |
269 | int w = wth-2*BORDER; | 305 | int w = wth-2*_border; |
270 | buff->empty(); | 306 | buff->empty(); |
271 | if (exp == NULL) | 307 | if (exp == NULL) |
272 | { | 308 | { |
273 | return false; | 309 | return false; |
274 | } | 310 | } |
275 | tchar ch; | 311 | tchar ch; |
276 | CStyle cs; | 312 | CStyle cs; |
277 | int i = 0; | 313 | int i = 1; |
278 | while (i*cw < w) | 314 | while (i*cw < w-buff->offset(w,0)) |
279 | { | 315 | { |
280 | getch(ch, cs); | 316 | getch(ch, cs); |
281 | if (ch == '\12' || ch == UEOF) break; | 317 | if (ch == '\12' || ch == UEOF) break; |
282 | buff->addch(ch,cs); | 318 | buff->addch(ch,cs); |
283 | i++; | 319 | i++; |
284 | } | 320 | } |
285 | buff->truncate(i); | 321 | buff->truncate(i); |
286 | laststartline = exp->locate(); | 322 | laststartline = exp->locate(); |
287 | buff->resize(); | 323 | buff->resize(); |
288 | return (ch != UEOF); | 324 | return (ch != UEOF); |
289 | } | 325 | } |
290 | 326 | ||
291 | int BuffDoc::openfile(QWidget* _parent, const char *src) | 327 | int BuffDoc::openfile(QWidget* _parent, const char *src) |
292 | { | 328 | { |
293 | // qDebug("BuffDoc:Openfile:%s", src); | 329 | // //qDebug("BuffDoc:Openfile:%s", src); |
294 | // qDebug("Trying aportis %x",exp); | 330 | // //qDebug("Trying aportis %x",exp); |
295 | if (exp != NULL) delete exp; | 331 | if (exp != NULL) delete exp; |
296 | lastword.empty(); | 332 | lastword.empty(); |
297 | lastsizes[0] = laststartline = 0; | 333 | lastsizes[0] = laststartline = 0; |
334 | #ifdef NEWLINEBREAK | ||
335 | lastispara = true; | ||
336 | #else | ||
298 | lastispara = false; | 337 | lastispara = false; |
338 | #endif | ||
299 | /* | 339 | /* |
300 | exp = new Text; | 340 | exp = new Text; |
301 | int ret = exp->openfile(src); | 341 | int ret = exp->openfile(src); |
302 | */ | 342 | */ |
303 | 343 | ||
304 | exp = new Aportis; | 344 | exp = new Aportis; |
305 | int ret = exp->openfile(src); | 345 | int ret = exp->openfile(src); |
306 | if (ret == -1) | 346 | if (ret == -1) |
307 | { | 347 | { |
308 | delete exp; | 348 | delete exp; |
309 | exp = NULL; | 349 | exp = NULL; |
310 | return ret; | 350 | return ret; |
311 | } | 351 | } |
312 | if (ret == -2) | 352 | if (ret == -2) |
313 | { | 353 | { |
314 | 354 | ||
315 | delete exp; | 355 | delete exp; |
316 | exp = new ztxt; | 356 | exp = new ztxt; |
317 | ret = exp->openfile(src); | 357 | ret = exp->openfile(src); |
318 | } | 358 | } |
359 | #ifdef USENEF | ||
360 | if (ret != 0) | ||
361 | { | ||
362 | |||
363 | delete exp; | ||
364 | exp = new CArriere; | ||
365 | ret = exp->openfile(src); | ||
366 | } | ||
367 | if (ret != 0) | ||
368 | { | ||
369 | |||
370 | delete exp; | ||
371 | exp = new CNEF; | ||
372 | ret = exp->openfile(src); | ||
373 | } | ||
374 | #endif | ||
319 | if (ret != 0) | 375 | if (ret != 0) |
320 | { | 376 | { |
321 | 377 | ||
322 | delete exp; | 378 | delete exp; |
323 | exp = new CPlucker; | 379 | exp = new CPlucker; |
324 | ret = exp->openfile(src); | 380 | ret = exp->openfile(src); |
325 | } | 381 | } |
326 | if (ret != 0) | 382 | if (ret != 0) |
327 | { | 383 | { |
328 | delete exp; | 384 | delete exp; |
329 | qDebug("Trying ppms"); | 385 | //qDebug("Trying ppms"); |
330 | exp = new ppm_expander; | 386 | exp = new ppm_expander; |
331 | ret = exp->openfile(src); | 387 | ret = exp->openfile(src); |
332 | } | 388 | } |
333 | if (ret != 0) | 389 | if (ret != 0) |
334 | { | 390 | { |
335 | delete exp; | 391 | delete exp; |
336 | exp = new Text; | 392 | exp = new Text; |
337 | // qDebug("Trying text"); | 393 | // //qDebug("Trying text"); |
338 | ret = exp->openfile(src); | 394 | ret = exp->openfile(src); |
339 | } | 395 | } |
340 | 396 | ||
341 | if (ret != 0) | 397 | if (ret != 0) |
342 | { | 398 | { |
343 | delete exp; | 399 | delete exp; |
344 | QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file"); | 400 | QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file"); |
345 | return ret; | 401 | return ret; |
346 | } | 402 | } |
347 | // qDebug("Doing final open:%x:%x",exp,filt); | 403 | // //qDebug("Doing final open:%x:%x",exp,filt); |
348 | 404 | ||
349 | lastword.empty(); | 405 | lastword.empty(); |
350 | lastsizes[0] = laststartline = 0; | 406 | lastsizes[0] = laststartline = 0; |
407 | #ifdef NEWLINEBREAK | ||
408 | lastispara = true; | ||
409 | #else | ||
351 | lastispara = false; | 410 | lastispara = false; |
411 | #endif | ||
352 | exp->locate(0); | 412 | exp->locate(0); |
353 | filt->setsource(exp); | 413 | filt->setsource(exp); |
354 | // qDebug("BuffDoc:file opened"); | 414 | // //qDebug("BuffDoc:file opened"); |
355 | return 0; | 415 | return 0; |
356 | } | 416 | } |
diff --git a/noncore/apps/opie-reader/BuffDoc.h b/noncore/apps/opie-reader/BuffDoc.h index 78d8457..29d0329 100644 --- a/noncore/apps/opie-reader/BuffDoc.h +++ b/noncore/apps/opie-reader/BuffDoc.h | |||
@@ -1,114 +1,122 @@ | |||
1 | #ifndef __BuffDoc_h | 1 | #ifndef __BuffDoc_h |
2 | #define __BuffDoc_h | 2 | #define __BuffDoc_h |
3 | 3 | ||
4 | #include "useqpe.h" | ||
4 | #include "ZText.h" | 5 | #include "ZText.h" |
5 | #include "Aportis.h" | 6 | #include "Aportis.h" |
6 | #include "ztxt.h" | 7 | #include "ztxt.h" |
7 | #include "ppm_expander.h" | 8 | #include "ppm_expander.h" |
8 | #include "CDrawBuffer.h" | 9 | #include "CDrawBuffer.h" |
9 | #include "CFilter.h" | 10 | #include "CFilter.h" |
10 | #include <qfontmetrics.h> | 11 | #include <qfontmetrics.h> |
11 | #include <qmessagebox.h> | 12 | #include <qmessagebox.h> |
12 | 13 | ||
13 | class BuffDoc | 14 | class BuffDoc |
14 | { | 15 | { |
15 | CDrawBuffer lastword; | 16 | CDrawBuffer lastword; |
16 | CSizeBuffer lastsizes, allsizes; | 17 | CSizeBuffer lastsizes, allsizes; |
17 | size_t laststartline; | 18 | size_t laststartline; |
18 | bool lastispara; | 19 | bool lastispara; |
19 | CExpander* exp; | 20 | CExpander* exp; |
20 | CFilterChain* filt; | 21 | CFilterChain* filt; |
21 | public: | 22 | public: |
22 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) | 23 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) |
23 | { | 24 | { |
24 | if (exp == NULL) | 25 | if (exp == NULL) |
25 | { | 26 | { |
26 | data = NULL; | 27 | data = NULL; |
27 | len = 0; | 28 | len = 0; |
28 | } | 29 | } |
29 | else | 30 | else |
30 | { | 31 | { |
31 | exp->setSaveData(data, len, src, srclen); | 32 | exp->setSaveData(data, len, src, srclen); |
32 | } | 33 | } |
33 | } | 34 | } |
34 | void putSaveData(unsigned char*& src, unsigned short& srclen) | 35 | void putSaveData(unsigned char*& src, unsigned short& srclen) |
35 | { | 36 | { |
36 | if (exp != NULL) | 37 | if (exp != NULL) |
37 | { | 38 | { |
38 | exp->putSaveData(src, srclen); | 39 | exp->putSaveData(src, srclen); |
39 | } | 40 | } |
40 | } | 41 | } |
42 | #ifdef USEQPE | ||
41 | void suspend() { if (exp != NULL) exp->suspend(); } | 43 | void suspend() { if (exp != NULL) exp->suspend(); } |
42 | void unsuspend() { if (exp != NULL) exp->unsuspend(); } | 44 | void unsuspend() { if (exp != NULL) exp->unsuspend(); } |
45 | #else | ||
46 | void suspend() {} | ||
47 | void unsuspend() {} | ||
48 | #endif | ||
43 | ~BuffDoc() | 49 | ~BuffDoc() |
44 | { | 50 | { |
45 | delete filt; | 51 | delete filt; |
46 | delete exp; | 52 | delete exp; |
47 | } | 53 | } |
48 | BuffDoc() | 54 | BuffDoc() |
49 | { | 55 | { |
50 | exp = NULL; | 56 | exp = NULL; |
51 | filt = NULL; | 57 | filt = NULL; |
52 | lastword.empty(); | 58 | lastword.empty(); |
53 | // qDebug("Buffdoc created"); | 59 | // // qDebug("Buffdoc created"); |
54 | } | 60 | } |
55 | bool empty() { return (exp == NULL); } | 61 | bool empty() { return (exp == NULL); } |
56 | void setfilter(CFilterChain* _f) | 62 | void setfilter(CFilterChain* _f) |
57 | { | 63 | { |
58 | if (filt != NULL) delete filt; | 64 | if (filt != NULL) delete filt; |
59 | filt = _f; | 65 | filt = _f; |
60 | filt->setsource(exp); | 66 | filt->setsource(exp); |
61 | } | 67 | } |
62 | CList<Bkmk>* getbkmklist() { return exp->getbkmklist(); } | 68 | CList<Bkmk>* getbkmklist() { return exp->getbkmklist(); } |
63 | bool hasrandomaccess() { return (exp == NULL) ? false : exp->hasrandomaccess(); } | 69 | bool hasrandomaccess() { return (exp == NULL) ? false : exp->hasrandomaccess(); } |
64 | bool iseol() { return (lastword[0] == '\0'); } | 70 | bool iseol() { return (lastword[0] == '\0'); } |
65 | int openfile(QWidget* _parent, const char *src); | 71 | int openfile(QWidget* _parent, const char *src); |
66 | tchar getch() | 72 | tchar getch() |
67 | { | 73 | { |
68 | tchar ch = UEOF; | 74 | tchar ch = UEOF; |
69 | CStyle sty; | 75 | CStyle sty; |
70 | if (exp != NULL) | 76 | if (exp != NULL) |
71 | { | 77 | { |
72 | filt->getch(ch, sty); | 78 | filt->getch(ch, sty); |
73 | } | 79 | } |
74 | return ch; | 80 | return ch; |
75 | } | 81 | } |
76 | void getch(tchar& ch, CStyle& sty) | 82 | void getch(tchar& ch, CStyle& sty) |
77 | { | 83 | { |
78 | if (exp != NULL) | 84 | if (exp != NULL) |
79 | { | 85 | { |
80 | filt->getch(ch, sty); | 86 | filt->getch(ch, sty); |
81 | } | 87 | } |
82 | else | 88 | else |
83 | ch = UEOF; | 89 | ch = UEOF; |
84 | } | 90 | } |
85 | QPixmap* getPicture(unsigned long tgt) { return (exp == NULL) ? NULL : exp->getPicture(tgt); } | 91 | void setwidth(int w) { if (exp != NULL) exp->setwidth(w); } |
92 | QImage* getPicture(unsigned long tgt) { return (exp == NULL) ? NULL : exp->getPicture(tgt); } | ||
86 | unsigned int startSection() { return (exp == NULL) ? 0 : exp->startSection(); } | 93 | unsigned int startSection() { return (exp == NULL) ? 0 : exp->startSection(); } |
87 | unsigned int endSection() { return (exp == NULL) ? 0 : exp->endSection(); } | 94 | unsigned int endSection() { return (exp == NULL) ? 0 : exp->endSection(); } |
88 | unsigned int locate() { return (exp == NULL) ? 0 : laststartline; } | 95 | unsigned int locate() { return (exp == NULL) ? 0 : laststartline; } |
89 | unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); } | 96 | unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); } |
90 | void setContinuous(bool _b) { if (exp != NULL) exp->setContinuous(_b); } | 97 | void setContinuous(bool _b) { if (exp != NULL) exp->setContinuous(_b); } |
91 | MarkupType PreferredMarkup() { return (exp == NULL) ? cTEXT : exp->PreferredMarkup(); } | 98 | MarkupType PreferredMarkup() { return (exp == NULL) ? cTEXT : exp->PreferredMarkup(); } |
92 | bool hyperlink(unsigned int n); | 99 | linkType hyperlink(unsigned int n, QString& wrd); |
93 | size_t getHome() { return ((exp != NULL) ? exp->getHome() : 0); } | 100 | size_t getHome() { return ((exp != NULL) ? exp->getHome() : 0); } |
94 | void locate(unsigned int n); | 101 | void locate(unsigned int n); |
95 | bool getline(CDrawBuffer* buff, int w); | 102 | bool getline(CDrawBuffer* buff, int w, unsigned char _border); |
96 | bool getline(CDrawBuffer* buff, int w, int cw); | 103 | bool getline(CDrawBuffer* buff, int w, int cw, unsigned char _border); |
97 | void sizes(unsigned long& fs, unsigned long& ts) { exp->sizes(fs,ts); } | 104 | void sizes(unsigned long& fs, unsigned long& ts) { exp->sizes(fs,ts); } |
98 | int getpara(CBuffer& buff) | 105 | int getpara(CBuffer& buff) |
99 | { | 106 | { |
100 | tchar ch; | 107 | tchar ch; |
101 | int i = 0; | 108 | int i = 0; |
102 | while ((ch = getch()) != 10 && ch != UEOF) buff[i++] = ch; | 109 | while ((ch = getch()) != 10 && ch != UEOF) buff[i++] = ch; |
103 | buff[i] = '\0'; | 110 | buff[i] = '\0'; |
104 | if (i == 0 && ch == UEOF) i = -1; | 111 | if (i == 0 && ch == UEOF) i = -1; |
105 | laststartline = exp->locate(); | 112 | laststartline = exp->locate(); |
106 | return i; | 113 | return i; |
107 | } | 114 | } |
108 | void saveposn(size_t posn) { exp->saveposn(posn); } | 115 | void saveposn(size_t posn) { exp->saveposn(posn); } |
116 | void writeposn(size_t posn) { exp->writeposn(posn); } | ||
109 | bool forward(size_t& loc) { return exp->forward(loc); } | 117 | bool forward(size_t& loc) { return exp->forward(loc); } |
110 | bool back(size_t& loc) { return exp->back(loc); } | 118 | bool back(size_t& loc) { return exp->back(loc); } |
111 | bool hasnavigation() { return exp->hasnavigation(); } | 119 | bool hasnavigation() { return exp->hasnavigation(); } |
112 | }; | 120 | }; |
113 | 121 | ||
114 | #endif | 122 | #endif |
diff --git a/noncore/apps/opie-reader/CAnnoEdit.h b/noncore/apps/opie-reader/CAnnoEdit.h index 3cc9f78..f320061 100644 --- a/noncore/apps/opie-reader/CAnnoEdit.h +++ b/noncore/apps/opie-reader/CAnnoEdit.h | |||
@@ -1,58 +1,59 @@ | |||
1 | #ifndef __CANNOEDIT_H | 1 | #ifndef __CANNOEDIT_H |
2 | #define __CANNOEDIT_H | 2 | #define __CANNOEDIT_H |
3 | #include <qlabel.h> | 3 | #include <qlabel.h> |
4 | #include <qlayout.h> | 4 | #include <qlayout.h> |
5 | #include <qpushbutton.h> | 5 | #include <qpushbutton.h> |
6 | #include <qlineedit.h> | 6 | #include <qlineedit.h> |
7 | #include <qmultilineedit.h> | 7 | #include <qmultilineedit.h> |
8 | 8 | ||
9 | class CAnnoEdit : public QWidget | 9 | class CAnnoEdit : public QWidget |
10 | { | 10 | { |
11 | Q_OBJECT | 11 | Q_OBJECT |
12 | 12 | ||
13 | QLineEdit* m_name; | 13 | QLineEdit* m_name; |
14 | QMultiLineEdit* m_anno; | 14 | QMultiLineEdit* m_anno; |
15 | size_t m_posn; | 15 | size_t m_posn; |
16 | public: | 16 | public: |
17 | void setPosn(size_t p) { m_posn = p; } | 17 | void setPosn(size_t p) { m_posn = p; } |
18 | size_t getPosn() { return m_posn; } | 18 | size_t getPosn() { return m_posn; } |
19 | void setName(const QString& name) | 19 | void setName(const QString& name) |
20 | { | 20 | { |
21 | m_name->setText(name); | 21 | m_name->setText(name); |
22 | } | 22 | } |
23 | void setAnno(const QString& name) | 23 | void setAnno(const QString& name) |
24 | { | 24 | { |
25 | m_anno->setText(name); | 25 | m_anno->setText(name); |
26 | m_anno->setEdited(false); | 26 | m_anno->setEdited(false); |
27 | } | 27 | } |
28 | bool edited() { return m_anno->edited(); } | 28 | bool edited() { return m_anno->edited(); } |
29 | CAnnoEdit(QWidget *parent=0, const char *name=0, WFlags f = 0) : | 29 | CAnnoEdit(QWidget *parent=0, const char *name=0, WFlags f = 0) : |
30 | QWidget(parent, name, f) | 30 | QWidget(parent, name, f) |
31 | { | 31 | { |
32 | QVBoxLayout* grid = new QVBoxLayout(this); | 32 | QVBoxLayout* grid = new QVBoxLayout(this); |
33 | m_name = new QLineEdit(this, "Name"); | 33 | m_name = new QLineEdit(this, "Name"); |
34 | m_anno = new QMultiLineEdit(this, "Annotation"); | 34 | m_anno = new QMultiLineEdit(this, "Annotation"); |
35 | m_anno->setWordWrap(QMultiLineEdit::WidgetWidth); | ||
35 | QPushButton* exitButton = new QPushButton("Okay", this); | 36 | QPushButton* exitButton = new QPushButton("Okay", this); |
36 | connect(exitButton, SIGNAL( released() ), this, SLOT( slotOkay() ) ); | 37 | connect(exitButton, SIGNAL( released() ), this, SLOT( slotOkay() ) ); |
37 | QPushButton* cancelButton = new QPushButton("Cancel", this); | 38 | QPushButton* cancelButton = new QPushButton("Cancel", this); |
38 | connect(cancelButton, SIGNAL( released() ), this, SLOT( slotCancel() ) ); | 39 | connect(cancelButton, SIGNAL( released() ), this, SLOT( slotCancel() ) ); |
39 | QLabel *l = new QLabel("Text",this); | 40 | QLabel *l = new QLabel("Text",this); |
40 | grid->addWidget(l); | 41 | grid->addWidget(l); |
41 | grid->addWidget(m_name); | 42 | grid->addWidget(m_name); |
42 | l = new QLabel("Annotation",this); | 43 | l = new QLabel("Annotation",this); |
43 | grid->addWidget(l); | 44 | grid->addWidget(l); |
44 | grid->addWidget(m_anno,1); | 45 | grid->addWidget(m_anno,1); |
45 | QHBoxLayout* hgrid = new QHBoxLayout(grid); | 46 | QHBoxLayout* hgrid = new QHBoxLayout(grid); |
46 | hgrid->addWidget(cancelButton); | 47 | hgrid->addWidget(cancelButton); |
47 | hgrid->addWidget(exitButton); | 48 | hgrid->addWidget(exitButton); |
48 | } | 49 | } |
49 | private slots: | 50 | private slots: |
50 | void slotOkay() { emit finished(m_name->text(), m_anno->text()); } | 51 | void slotOkay() { emit finished(m_name->text(), m_anno->text()); } |
51 | void slotCancel() { emit cancelled(); } | 52 | void slotCancel() { emit cancelled(); } |
52 | public: | 53 | public: |
53 | signals: | 54 | signals: |
54 | void finished(const QString&, const QString&); | 55 | void finished(const QString&, const QString&); |
55 | void cancelled(); | 56 | void cancelled(); |
56 | }; | 57 | }; |
57 | 58 | ||
58 | #endif | 59 | #endif |
diff --git a/noncore/apps/opie-reader/CBuffer.cpp b/noncore/apps/opie-reader/CBuffer.cpp index 0780a88..03d7733 100644 --- a/noncore/apps/opie-reader/CBuffer.cpp +++ b/noncore/apps/opie-reader/CBuffer.cpp | |||
@@ -1,46 +1,46 @@ | |||
1 | #include "CBuffer.h" | 1 | #include "CBuffer.h" |
2 | 2 | ||
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, len); |
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) : len(n*ms), membersize(ms) |
15 | { | 15 | { |
16 | buffer = new unsigned char[len*membersize]; | 16 | buffer = new unsigned char[len]; |
17 | memset(buffer, 0, len*membersize); | 17 | memset(buffer, 0, len); |
18 | } | 18 | } |
19 | 19 | ||
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) |
35 | { | 35 | { |
36 | if (_buffer == NULL) _buffer = buffer; | 36 | if (_buffer == NULL) _buffer = buffer; |
37 | unsigned char* zero = new unsigned char[membersize]; | 37 | unsigned char* zero = new unsigned char[membersize]; |
38 | memset(zero,0,membersize); | 38 | memset(zero,0,membersize); |
39 | unsigned char* element = _buffer; | 39 | unsigned char* element = _buffer; |
40 | while (memcmp(element, zero, membersize) != 0) | 40 | while (memcmp(element, zero, membersize) != 0) |
41 | { | 41 | { |
42 | element += membersize; | 42 | element += membersize; |
43 | } | 43 | } |
44 | delete [] zero; | 44 | delete [] zero; |
45 | return (element - _buffer)/membersize; | 45 | return (element - _buffer)/membersize; |
46 | } | 46 | } |
diff --git a/noncore/apps/opie-reader/CDrawBuffer.cpp b/noncore/apps/opie-reader/CDrawBuffer.cpp index ca220e6..77b76fb 100644 --- a/noncore/apps/opie-reader/CDrawBuffer.cpp +++ b/noncore/apps/opie-reader/CDrawBuffer.cpp | |||
@@ -1,379 +1,550 @@ | |||
1 | #include "CDrawBuffer.h" | 1 | #include "CDrawBuffer.h" |
2 | #include "FontControl.h" | 2 | #include "FontControl.h" |
3 | #include <qfontmetrics.h> | 3 | #include <qfontmetrics.h> |
4 | #include <qpainter.h> | 4 | #include <qpainter.h> |
5 | #include <qpixmap.h> | 5 | #include <qpixmap.h> |
6 | #include <qimage.h> | ||
7 | #include "useqpe.h" | ||
6 | #include "opie.h" | 8 | #include "opie.h" |
7 | 9 | ||
8 | CDrawBuffer::~CDrawBuffer() | 10 | CDrawBuffer::~CDrawBuffer() |
9 | { | 11 | { |
10 | while (!segs.isEmpty()) segs.erase(0); | 12 | while (!segs.isEmpty()) segs.erase(0); |
11 | } | 13 | } |
12 | 14 | ||
13 | void CDrawBuffer::setright(CDrawBuffer& rhs, int f) | 15 | void CDrawBuffer::setright(CDrawBuffer& rhs, int f) |
14 | { | 16 | { |
15 | int i; | 17 | int i; |
16 | len = rhs.len; | 18 | len = rhs.len; |
17 | fc = rhs.fc; | 19 | fc = rhs.fc; |
18 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; | 20 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; |
19 | while (!segs.isEmpty()) | 21 | while (!segs.isEmpty()) |
20 | { | 22 | { |
21 | segs.erase(0); | 23 | segs.erase(0); |
22 | } | 24 | } |
23 | for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); ) | 25 | for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); ) |
24 | { | 26 | { |
25 | CList<textsegment>::iterator next = iter; | 27 | CList<textsegment>::iterator next = iter; |
26 | iter++; | 28 | iter++; |
27 | if (iter == rhs.segs.end() || iter->start > f) | 29 | if (iter == rhs.segs.end() || iter->start > f) |
28 | { | 30 | { |
29 | int st = next->start-f; | 31 | int st = next->start-f; |
30 | if (st < 0) st = 0; | 32 | if (st < 0) st = 0; |
31 | 33 | ||
32 | CStyle _style = next->style; | 34 | CStyle _style = next->style; |
33 | 35 | ||
34 | segs.push_back(textsegment(st,next->style)); | 36 | segs.push_back(textsegment(st,next->style)); |
35 | } | 37 | } |
36 | } | 38 | } |
37 | for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i]; | 39 | for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i]; |
38 | (*this)[i-f] = '\0'; | 40 | (*this)[i-f] = '\0'; |
39 | len = i; | 41 | len = i; |
40 | } | 42 | } |
41 | 43 | ||
42 | CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs) | 44 | CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs) |
43 | { | 45 | { |
44 | int i; | 46 | int i; |
45 | // qDebug("Trying 2"); | 47 | // //qDebug("Trying 2"); |
46 | len = rhs.len; | 48 | len = rhs.len; |
47 | m_maxstyle = rhs.m_maxstyle; | 49 | m_maxstyle = rhs.m_maxstyle; |
48 | m_ascent = rhs.m_ascent; | 50 | m_ascent = rhs.m_ascent; |
49 | m_descent = rhs.m_descent; | 51 | m_descent = rhs.m_descent; |
50 | m_lineSpacing = rhs.m_lineSpacing; | 52 | m_lineSpacing = rhs.m_lineSpacing; |
51 | m_lineExtraSpacing = rhs.m_lineExtraSpacing; | 53 | m_lineExtraSpacing = rhs.m_lineExtraSpacing; |
52 | while (!segs.isEmpty()) | 54 | while (!segs.isEmpty()) |
53 | { | 55 | { |
54 | segs.erase(0); | 56 | segs.erase(0); |
55 | } | 57 | } |
56 | for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++) | 58 | for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++) |
57 | { | 59 | { |
58 | segs.push_back(*iter); | 60 | segs.push_back(*iter); |
59 | } | 61 | } |
60 | for (i = 0; rhs[i] != '\0'; i++) (*this)[i] = rhs[i]; | 62 | for (i = 0; rhs[i] != '\0'; i++) (*this)[i] = rhs[i]; |
61 | (*this)[i] = '\0'; | 63 | (*this)[i] = '\0'; |
62 | len = i; | 64 | len = i; |
63 | // qDebug("Tried 2"); | 65 | // //qDebug("Tried 2"); |
64 | return *this; | 66 | return *this; |
65 | } | 67 | } |
66 | 68 | ||
67 | CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp) | 69 | CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp) |
68 | { | 70 | { |
69 | int i; | 71 | int i; |
70 | while (!segs.isEmpty()) | 72 | while (!segs.isEmpty()) |
71 | { | 73 | { |
72 | segs.erase(0); | 74 | segs.erase(0); |
73 | } | 75 | } |
74 | segs.push_back(textsegment(0, CStyle())); | 76 | segs.push_back(textsegment(0, CStyle())); |
75 | for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i]; | 77 | for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i]; |
76 | (*this)[i] = '\0'; | 78 | (*this)[i] = '\0'; |
77 | len = i; | 79 | len = i; |
78 | return *this; | 80 | return *this; |
79 | } | 81 | } |
80 | 82 | ||
81 | void CDrawBuffer::empty() | 83 | void CDrawBuffer::empty() |
82 | { | 84 | { |
85 | m_bSop = false; | ||
86 | m_bEop = false; | ||
83 | len = 0; | 87 | len = 0; |
84 | (*this)[0] = 0; | 88 | (*this)[0] = 0; |
85 | while (!segs.isEmpty()) | 89 | while (!segs.isEmpty()) |
86 | { | 90 | { |
87 | segs.erase(0); | 91 | segs.erase(0); |
88 | } | 92 | } |
89 | segs.push_back(textsegment(0,CStyle())); | 93 | segs.push_back(textsegment(0,CStyle())); |
90 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; | 94 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; |
91 | m_bEof = false; | 95 | m_bEof = false; |
92 | } | 96 | } |
93 | 97 | ||
94 | void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/) | 98 | void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/) |
95 | { | 99 | { |
96 | if (len == 0) | 100 | if (len == 0) |
97 | { | 101 | { |
98 | segs.first().start = 0; | 102 | segs.first().start = 0; |
99 | segs.first().style = _style; | 103 | segs.first().style = _style; |
100 | } | 104 | } |
101 | else if (_style != segs.last().style) | 105 | else if (_style != segs.last().style) |
102 | { | 106 | { |
103 | segs.push_back(textsegment(len, _style)); | 107 | segs.push_back(textsegment(len, _style)); |
104 | } | 108 | } |
105 | (*this)[len++] = ch; | 109 | (*this)[len++] = ch; |
106 | } | 110 | } |
107 | 111 | ||
108 | void CDrawBuffer::truncate(int n) | 112 | void CDrawBuffer::truncate(int n) |
109 | { | 113 | { |
110 | len = n; | 114 | len = n; |
111 | (*this)[n] = 0; | 115 | (*this)[n] = 0; |
112 | } | 116 | } |
113 | 117 | ||
114 | int CDrawBuffer::width(int numchars) | 118 | int CDrawBuffer::width(int numchars, bool onscreen, int scwidth, unsigned char _border) |
115 | { | 119 | { |
120 | int gzoom = fc->gzoom(); | ||
116 | int currentx = 0, end = 0; | 121 | int currentx = 0, end = 0; |
117 | QString text = toQString(data()); | 122 | QString text = (numchars < 0) ? toQString(data()) : toQString(data(), numchars); |
118 | CList<textsegment>::iterator textstart = segs.begin(); | 123 | CList<textsegment>::iterator textstart = segs.begin(); |
124 | int extraspace = 0; | ||
125 | bool just = (onscreen && !m_bEop && textstart->style.getJustify() == m_AlignJustify); | ||
126 | int spaces = 0; | ||
127 | int spacesofar = 0; | ||
128 | int spacenumber = 0; | ||
129 | int nonspace = 0; | ||
130 | if (just) | ||
131 | { | ||
132 | for (int i = 0; i < len; i++) | ||
133 | { | ||
134 | if ((*this)[i] != ' ') | ||
135 | { | ||
136 | nonspace = i; | ||
137 | break; | ||
138 | } | ||
139 | } | ||
140 | #ifdef _WINDOWS | ||
141 | for (i = nonspace; i < len; i++) | ||
142 | #else | ||
143 | for (int i = nonspace; i < len; i++) | ||
144 | #endif | ||
145 | { | ||
146 | if ((*this)[i] == ' ') | ||
147 | { | ||
148 | spaces++; | ||
149 | } | ||
150 | } | ||
151 | if (spaces == 0) | ||
152 | { | ||
153 | just = false; | ||
154 | } | ||
155 | else | ||
156 | { | ||
157 | extraspace = (scwidth - 2*_border - rightMargin() - leftMargin() - width()); | ||
158 | if (extraspace == 0) just = false; | ||
159 | } | ||
160 | } | ||
119 | CList<textsegment>::iterator textend = textstart; | 161 | CList<textsegment>::iterator textend = textstart; |
120 | do | 162 | do |
121 | { | 163 | { |
122 | textend++; | 164 | textend++; |
123 | end = (textend != segs.end()) ? textend->start : length(); | 165 | end = (textend != segs.end()) ? textend->start : len; |
124 | if (numchars >= 0 && end > numchars) | 166 | if (numchars >= 0 && end > numchars) |
125 | { | 167 | { |
126 | end = numchars; | 168 | end = numchars; |
127 | } | 169 | } |
128 | CStyle currentstyle = textstart->style; | 170 | CStyle currentstyle = textstart->style; |
129 | if (currentstyle.isPicture()) | 171 | if (currentstyle.isPicture()) |
130 | { | 172 | { |
131 | currentx += currentstyle.getPicture()->width(); | 173 | if (currentstyle.canScale()) |
174 | { | ||
175 | currentx += (gzoom*currentstyle.getPicture()->width())/100; | ||
176 | } | ||
177 | else | ||
178 | { | ||
179 | currentx += currentstyle.getPicture()->width(); | ||
180 | } | ||
132 | } | 181 | } |
133 | else | 182 | else |
134 | { | 183 | { |
135 | if (currentstyle.isMono() && !fc->hasCourier()) | 184 | if (currentstyle.isMono() && !fc->hasCourier()) |
136 | { | 185 | { |
137 | int cw = (7*fc->getsize(currentstyle))/10; | 186 | int cw = (7*fc->getsize(currentstyle))/10; |
138 | currentx += cw*(end-textstart->start); | 187 | currentx += cw*(end-textstart->start); |
139 | } | 188 | } |
140 | else | 189 | else |
141 | { | 190 | { |
142 | QFont f(currentstyle.isMono() ? QString("courier") : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); | 191 | QFont f(currentstyle.isMono() ? QString(fc->fixedfontname()) : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); |
143 | // f.setUnderline(currentstyle.isUnderline()); | 192 | // f.setUnderline(currentstyle.isUnderline()); |
144 | QString str = text.mid(textstart->start, end-textstart->start); | 193 | QString str = text.mid(textstart->start, end-textstart->start); |
145 | QFontMetrics fm(f); | 194 | QFontMetrics fm(f); |
146 | currentx += fm.width(str); | 195 | if (just) |
196 | { | ||
197 | int lastspace = -1; | ||
198 | int nsp = 0; | ||
199 | int cx = currentx; | ||
200 | while ((nsp = str.find(" ", lastspace+1)) >= 0) | ||
201 | { | ||
202 | if (nsp > nonspace) | ||
203 | { | ||
204 | spacenumber++; | ||
205 | int nexttoadd = (extraspace*spacenumber+spaces/2)/spaces - spacesofar; | ||
206 | QString nstr = str.mid(lastspace+1, nsp-lastspace); | ||
207 | int lw = fm.width(nstr); | ||
208 | cx += lw+nexttoadd; | ||
209 | spacesofar += nexttoadd; | ||
210 | lastspace = nsp; | ||
211 | } | ||
212 | else | ||
213 | { | ||
214 | QString nstr = str.mid(lastspace+1, nsp-lastspace); | ||
215 | // qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr); | ||
216 | int lw = fm.width(nstr); | ||
217 | cx += lw; | ||
218 | lastspace = nsp; | ||
219 | } | ||
220 | } | ||
221 | QString nstr = str.right(str.length()-1-lastspace); | ||
222 | cx += fm.width(nstr); | ||
223 | currentx = cx; | ||
224 | } | ||
225 | else | ||
226 | { | ||
227 | currentx += fm.width(str); | ||
228 | } | ||
147 | } | 229 | } |
148 | } | 230 | } |
149 | textstart = textend; | 231 | textstart = textend; |
150 | } | 232 | } |
151 | while (textend != segs.end() && end != numchars); | 233 | while (textend != segs.end() && end != numchars && textstart->start < len); |
152 | return currentx; | 234 | return currentx; |
153 | } | 235 | } |
154 | 236 | ||
155 | int CDrawBuffer::leftMargin() | 237 | int CDrawBuffer::leftMargin() |
156 | { | 238 | { |
157 | return (segs.begin()->style.getLeftMargin()*fc->getsize(segs.begin()->style))/6; | 239 | return (segs.begin()->style.getLeftMargin()*fc->getsize(segs.begin()->style)+3)/6; |
158 | } | 240 | } |
159 | 241 | ||
160 | int CDrawBuffer::rightMargin() | 242 | int CDrawBuffer::rightMargin() |
161 | { | 243 | { |
162 | return (segs.begin()->style.getRightMargin()*fc->getsize(segs.begin()->style))/6; | 244 | return (segs.begin()->style.getRightMargin()*fc->getsize(segs.begin()->style)+3)/6; |
163 | } | 245 | } |
164 | 246 | ||
165 | int CDrawBuffer::offset(int scwidth) | 247 | int CDrawBuffer::offset(int scwidth, unsigned char _border) |
166 | { | 248 | { |
167 | int currentx = BORDER; | 249 | int currentx = _border; |
168 | switch(segs.begin()->style.getJustify()) | 250 | switch(segs.begin()->style.getJustify()) |
169 | { | 251 | { |
170 | case m_AlignRight: | 252 | case m_AlignRight: |
171 | { | 253 | { |
172 | currentx = scwidth - BORDER - rightMargin() - width(); | 254 | currentx = scwidth - _border - rightMargin() - width(); |
173 | } | 255 | } |
174 | break; | 256 | break; |
175 | case m_AlignCentre: | 257 | case m_AlignCentre: |
176 | { | 258 | { |
177 | currentx = ( | 259 | currentx = ( |
178 | scwidth + | 260 | scwidth + |
179 | leftMargin() - rightMargin() | 261 | leftMargin() - rightMargin() |
180 | - width())/2; | 262 | - width())/2; |
181 | } | 263 | } |
182 | break; | 264 | break; |
183 | case m_AlignJustify: | 265 | case m_AlignJustify: |
184 | case m_AlignLeft: | 266 | case m_AlignLeft: |
185 | currentx = BORDER + leftMargin(); | 267 | currentx = _border + leftMargin(); |
186 | break; | 268 | break; |
187 | } | 269 | } |
188 | return currentx; | 270 | return currentx; |
189 | } | 271 | } |
190 | 272 | ||
191 | void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth) | 273 | void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth, unsigned char _border) |
192 | { | 274 | { |
193 | int currentx = offset(scwidth); | 275 | int gzoom = fc->gzoom(); |
276 | int currentx = offset(scwidth, _border); | ||
194 | QString text = toQString(data()); | 277 | QString text = toQString(data()); |
195 | CList<textsegment>::iterator textstart = segs.begin(); | 278 | CList<textsegment>::iterator textstart = segs.begin(); |
196 | /* | 279 | int extraspace = 0; |
197 | StyleType align = textstart->style.getJustify(); | 280 | bool just = (!m_bEop && textstart->style.getJustify() == m_AlignJustify); |
198 | switch (align) | 281 | int spaces = 0; |
282 | int spacesofar = 0; | ||
283 | int spacenumber = 0; | ||
284 | int nonspace = 0; | ||
285 | if (just) | ||
199 | { | 286 | { |
200 | case CStyle::m_AlignRight: | 287 | for (int i = 0; i < len; i++) |
201 | { | 288 | { |
202 | currentx = scwidth - width() - 2*BORDER; | 289 | if ((*this)[i] != ' ') |
290 | { | ||
291 | nonspace = i; | ||
292 | break; | ||
293 | } | ||
203 | } | 294 | } |
204 | break; | 295 | #ifdef _WINDOWS |
205 | case CStyle::m_AlignCentre: | 296 | for (i = nonspace; i < len; i++) |
297 | #else | ||
298 | for (int i = nonspace; i < len; i++) | ||
299 | #endif | ||
206 | { | 300 | { |
207 | currentx = (scwidth - width())/2 - BORDER; | 301 | if ((*this)[i] == ' ') |
302 | { | ||
303 | spaces++; | ||
304 | } | ||
305 | } | ||
306 | if (spaces == 0) | ||
307 | { | ||
308 | just = false; | ||
309 | } | ||
310 | else | ||
311 | { | ||
312 | extraspace = (scwidth - 2*_border - rightMargin() - leftMargin() - width()); | ||
313 | if (extraspace == 0) just = false; | ||
208 | } | 314 | } |
209 | break; | ||
210 | case CStyle::m_AlignJustify: | ||
211 | case CStyle::m_AlignLeft: | ||
212 | break; | ||
213 | } | 315 | } |
214 | */ | ||
215 | CList<textsegment>::iterator textend = textstart; | 316 | CList<textsegment>::iterator textend = textstart; |
216 | do | 317 | do |
217 | { | 318 | { |
218 | textend++; | 319 | textend++; |
219 | int end = (textend != segs.end()) ? textend->start : length(); | 320 | int end = (textend != segs.end()) ? textend->start : len; |
220 | CStyle currentstyle = textstart->style; | 321 | CStyle currentstyle = textstart->style; |
221 | QFont f((currentstyle.isMono() && fc->hasCourier()) ? QString("courier") : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); | 322 | QFont f((currentstyle.isMono() && fc->hasCourier()) ? fc->fixedfontname() : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) ); |
222 | //f.setUnderline(currentstyle.isUnderline()); | 323 | //f.setUnderline(currentstyle.isUnderline()); |
223 | //if (currentstyle.isUnderline()) qDebug("UNDERLINE"); | 324 | //if (currentstyle.isUnderline()) qDebug("UNDERLINE"); |
224 | _p->setFont(f); | 325 | _p->setFont(f); |
225 | QString str = text.mid(textstart->start, end-textstart->start); | 326 | QString str = text.mid(textstart->start, end-textstart->start); |
226 | #ifdef OPIE | 327 | #if defined(OPIE) || !defined(USEQPE) |
227 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100)); | 328 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100)); |
228 | #else | 329 | #else |
229 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10)); | 330 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10)); |
230 | #endif | 331 | #endif |
332 | int voffset = currentstyle.getVOffset()*fc->getsize(currentstyle)/2; | ||
231 | if (_bMono) | 333 | if (_bMono) |
232 | { | 334 | { |
233 | if (currentstyle.isUnderline()) | 335 | if (currentstyle.isUnderline()) |
234 | { | 336 | { |
235 | _p->drawLine( currentx, _y, currentx + str.length()*_charWidth, _y); | 337 | _p->drawLine( currentx, _y+voffset, currentx + str.length()*_charWidth, _y+voffset); |
236 | } | 338 | } |
237 | if (currentstyle.isStrikethru()) | 339 | if (currentstyle.isStrikethru()) |
238 | { | 340 | { |
239 | int ascent = fc->ascent(currentstyle)/3; | 341 | int ascent = fc->ascent(currentstyle)/3; |
240 | _p->drawLine( currentx, _y-ascent, currentx + str.length()*_charWidth, _y-ascent); | 342 | _p->drawLine( currentx, _y-ascent+voffset, currentx + str.length()*_charWidth, _y-ascent+voffset); |
241 | } | 343 | } |
242 | for (int i = 0; i < str.length(); i++) | 344 | for (int i = 0; i < str.length(); i++) |
243 | { | 345 | { |
244 | _p->drawText( currentx + i*_charWidth, _y, QString(str[i])); | 346 | _p->drawText( currentx + i*_charWidth, _y+voffset, QString(str[i])); |
245 | } | 347 | } |
246 | currentx += str.length()*_charWidth; | 348 | currentx += str.length()*_charWidth; |
247 | } | 349 | } |
248 | else | 350 | else |
249 | { | 351 | { |
250 | if (currentstyle.isPicture()) | 352 | if (currentstyle.isPicture()) |
251 | { | 353 | { |
354 | int ht = (gzoom*currentstyle.getPicture()->height())/100; | ||
355 | int wt = (gzoom*currentstyle.getPicture()->width())/100; | ||
252 | int ascent = fc->ascent(currentstyle)/2; | 356 | int ascent = fc->ascent(currentstyle)/2; |
253 | int yoffset = currentstyle.getPicture()->height()/2 + ascent; | 357 | int yoffset = ht/2 + ascent; |
254 | _p->drawPixmap( currentx, _y-yoffset, *(currentstyle.getPicture())); | 358 | |
255 | currentx += currentstyle.getPicture()->width(); | 359 | QPixmap pc; |
360 | if (gzoom != 100 && currentstyle.canScale()) | ||
361 | { | ||
362 | QImage im = currentstyle.getPicture()->smoothScale(wt,ht); | ||
363 | pc.convertFromImage(im); | ||
364 | } | ||
365 | else | ||
366 | { | ||
367 | pc.convertFromImage(*currentstyle.getPicture()); | ||
368 | } | ||
369 | _p->drawPixmap( currentx, _y-yoffset, pc ); | ||
370 | currentx += wt; | ||
256 | } | 371 | } |
257 | else | 372 | else |
258 | { | 373 | { |
259 | if (currentstyle.isMono() && !fc->hasCourier()) | 374 | if (currentstyle.isMono() && !fc->hasCourier()) |
260 | { | 375 | { |
261 | int cw = (7*fc->getsize(currentstyle))/10; | 376 | int cw = (7*fc->getsize(currentstyle))/10; |
262 | int w = cw*(end-textstart->start); | 377 | int w = cw*(end-textstart->start); |
263 | if (currentstyle.isUnderline()) | 378 | if (currentstyle.isUnderline()) |
264 | { | 379 | { |
265 | _p->drawLine( currentx, _y, currentx + w, _y); | 380 | _p->drawLine( currentx, _y+voffset, currentx + w, _y+voffset); |
266 | } | 381 | } |
267 | if (currentstyle.isStrikethru()) | 382 | if (currentstyle.isStrikethru()) |
268 | { | 383 | { |
269 | int ascent = fc->ascent(currentstyle)/3; | 384 | int ascent = fc->ascent(currentstyle)/3; |
270 | _p->drawLine( currentx, _y-ascent, currentx + w, _y-ascent); | 385 | _p->drawLine( currentx, _y-ascent+voffset, currentx + w, _y-ascent+voffset); |
271 | } | 386 | } |
272 | QString str = text.mid(textstart->start, end-textstart->start); | 387 | QString str = text.mid(textstart->start, end-textstart->start); |
273 | 388 | ||
274 | for (int i = 0; i < str.length(); i++) | 389 | for (unsigned int i = 0; i < str.length(); i++) |
275 | { | 390 | { |
276 | _p->drawText( currentx, _y, QString(str[i])); | 391 | #ifdef _WINDOWS |
392 | _p->drawText( currentx, _y+voffset, QString(str.at(i))); | ||
393 | #else | ||
394 | _p->drawText( currentx, _y+voffset, QString(str[i])); | ||
395 | #endif | ||
277 | currentx += cw; | 396 | currentx += cw; |
278 | } | 397 | } |
279 | } | 398 | } |
280 | else | 399 | else |
281 | { | 400 | { |
282 | QFontMetrics fm(f); | 401 | QFontMetrics fm(f); |
283 | int w = fm.width(str); | 402 | int w; |
403 | if (just) | ||
404 | { | ||
405 | int lastspace = -1; | ||
406 | int nsp = 0; | ||
407 | int cx = currentx; | ||
408 | while ((nsp = str.find(" ", lastspace+1)) >= 0) | ||
409 | { | ||
410 | if (nsp+textstart->start >= nonspace) | ||
411 | { | ||
412 | spacenumber++; | ||
413 | int nexttoadd = (extraspace*spacenumber+spaces/2)/spaces - spacesofar; | ||
414 | QString nstr = str.mid(lastspace+1, nsp-lastspace); | ||
415 | // qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr); | ||
416 | int lw = fm.width(nstr); | ||
417 | _p->drawText( cx, _y+voffset, nstr); | ||
418 | cx += lw+nexttoadd; | ||
419 | spacesofar += nexttoadd; | ||
420 | lastspace = nsp; | ||
421 | } | ||
422 | else | ||
423 | { | ||
424 | QString nstr = str.mid(lastspace+1, nsp-lastspace); | ||
425 | // qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr); | ||
426 | int lw = fm.width(nstr); | ||
427 | _p->drawText( cx, _y+voffset, nstr); | ||
428 | cx += lw; | ||
429 | lastspace = nsp; | ||
430 | } | ||
431 | } | ||
432 | QString nstr = str.right(str.length()-1-lastspace); | ||
433 | _p->drawText( cx, _y+voffset, nstr); | ||
434 | cx += fm.width(nstr); | ||
435 | w = cx - currentx; | ||
436 | } | ||
437 | else | ||
438 | { | ||
439 | _p->drawText( currentx, _y+voffset, str); | ||
440 | w = fm.width(str); | ||
441 | } | ||
284 | if (currentstyle.isUnderline()) | 442 | if (currentstyle.isUnderline()) |
285 | { | 443 | { |
286 | _p->drawLine( currentx, _y, currentx + w, _y); | 444 | _p->drawLine( currentx, _y+voffset, currentx + w, _y+voffset); |
287 | } | 445 | } |
288 | if (currentstyle.isStrikethru()) | 446 | if (currentstyle.isStrikethru()) |
289 | { | 447 | { |
290 | int ascent = fc->ascent(currentstyle)/3; | 448 | int ascent = fc->ascent(currentstyle)/3; |
291 | _p->drawLine( currentx, _y-ascent, currentx + w, _y-ascent); | 449 | _p->drawLine( currentx, _y-ascent+voffset, currentx + w, _y-ascent+voffset); |
292 | } | 450 | } |
293 | _p->drawText( currentx, _y, str); | ||
294 | currentx += w; | 451 | currentx += w; |
295 | } | 452 | } |
296 | } | 453 | } |
297 | } | 454 | } |
298 | textstart = textend; | 455 | textstart = textend; |
299 | } | 456 | } |
300 | while (textend != segs.end() && textstart->start < length()-1); | 457 | while (textend != segs.end() && textstart->start < len); |
301 | } | 458 | } |
302 | 459 | ||
303 | CStyle CDrawBuffer::laststyle() | 460 | CStyle CDrawBuffer::laststyle() |
304 | { | 461 | { |
305 | return segs.last().style; | 462 | return segs.last().style; |
306 | } | 463 | } |
307 | 464 | ||
308 | linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt) | 465 | linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt) |
309 | { | 466 | { |
310 | int end = 0; | 467 | int end = 0; |
311 | CStyle currentstyle; | 468 | CStyle currentstyle; |
312 | CList<textsegment>::iterator textstart = segs.begin(); | 469 | CList<textsegment>::iterator textstart = segs.begin(); |
313 | CList<textsegment>::iterator textend = textstart; | 470 | CList<textsegment>::iterator textend = textstart; |
314 | do | 471 | do |
315 | { | 472 | { |
316 | textend++; | 473 | textend++; |
317 | end = (textend != segs.end()) ? textend->start : length(); | 474 | end = (textend != segs.end()) ? textend->start : len; |
318 | currentstyle = textstart->style; | 475 | currentstyle = textstart->style; |
319 | /* | 476 | /* |
320 | if (currentstyle.isPicture()) qDebug("Passed thru picture"); | 477 | if (currentstyle.isPicture()) qDebug("Passed thru picture"); |
321 | if (currentstyle.getLink()) qDebug("Passed thru link"); | 478 | if (currentstyle.getLink()) qDebug("Passed thru link"); |
322 | qDebug("islink:%d - %d", numchars, end); | 479 | //qDebug("islink:%d - %d", numchars, end); |
323 | */ | 480 | */ |
324 | textstart = textend; | 481 | textstart = textend; |
325 | } | 482 | } |
326 | while (textend != segs.end() && end <= numchars); | 483 | while (textend != segs.end() && end <= numchars); |
327 | // if (currentstyle.isPicture()) qDebug("Clicked on picture"); | 484 | // if (currentstyle.isPicture()) qDebug("Clicked on picture"); |
328 | if (currentstyle.getPictureLink()) | 485 | if (currentstyle.getPictureLink()) |
329 | { | 486 | { |
330 | tgt = currentstyle.getPictureLinkData(); | 487 | tgt = currentstyle.getPictureLinkData(); |
331 | return ePicture; | 488 | return ePicture; |
332 | } | 489 | } |
333 | if (currentstyle.getLink()) | 490 | if (currentstyle.getLink()) |
334 | { | 491 | { |
335 | tgt = currentstyle.getData(); | 492 | tgt = currentstyle.getData(); |
336 | return eLink; | 493 | return eLink; |
337 | } | 494 | } |
338 | return eNone; | 495 | return eNone; |
339 | } | 496 | } |
340 | 497 | ||
341 | void CDrawBuffer::resize() | 498 | void CDrawBuffer::resize() |
342 | { | 499 | { |
343 | int i; | 500 | int gzoom = fc->gzoom(); |
344 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; | 501 | m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0; |
345 | for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= length(); ) | 502 | for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= len; ) |
346 | { | 503 | { |
347 | CList<textsegment>::iterator next = iter; | 504 | CList<textsegment>::iterator next = iter; |
348 | iter++; | 505 | iter++; |
349 | int st = next->start; | 506 | int st = next->start; |
350 | if (st < 0) st = 0; | 507 | if (st < 0) st = 0; |
351 | 508 | ||
352 | CStyle _style = next->style; | 509 | CStyle _style = next->style; |
353 | 510 | ||
354 | int linespacing, ascent, descent, extra; | 511 | int linespacing, ascent, descent, extra; |
355 | 512 | ||
356 | ascent = fc->ascent(_style); | 513 | ascent = fc->ascent(_style); |
357 | descent = fc->descent(_style); | 514 | descent = fc->descent(_style); |
358 | linespacing = fc->lineSpacing(_style); | 515 | linespacing = fc->lineSpacing(_style); |
359 | extra = linespacing - ascent - descent; | 516 | extra = linespacing - ascent - descent; |
360 | if (_style.isPicture()) | 517 | if (_style.isPicture() && _style.canScale()) |
361 | { | 518 | { |
362 | descent = (_style.getPicture()->height()-ascent)/2; | 519 | descent = ((gzoom*_style.getPicture()->height())/100-ascent)/2; |
363 | ascent = (_style.getPicture()->height()+ascent)/2; | 520 | ascent = ((gzoom*_style.getPicture()->height())/100+ascent)/2; |
364 | } | 521 | } |
365 | /* | 522 | /* |
366 | else if (fc != NULL) | 523 | else if (fc != NULL) |
367 | { | 524 | { |
368 | ascent = fc->ascent(_style); | 525 | ascent = fc->ascent(_style); |
369 | descent = fc->descent(_style); | 526 | descent = fc->descent(_style); |
370 | linespacing = fc->lineSpacing(_style); | 527 | linespacing = fc->lineSpacing(_style); |
371 | extra = linespacing - ascent - descent; | 528 | extra = linespacing - ascent - descent; |
372 | } | 529 | } |
373 | */ | 530 | */ |
374 | if (ascent > m_ascent) m_ascent = ascent; | 531 | if (ascent > m_ascent) m_ascent = ascent; |
375 | if (descent > m_descent) m_descent = descent; | 532 | if (descent > m_descent) m_descent = descent; |
376 | if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra; | 533 | if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra; |
377 | m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing; | 534 | m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing; |
378 | } | 535 | } |
536 | int lead = fc->getlead(); | ||
537 | if (lead != 0) | ||
538 | { | ||
539 | int xt = (lead*m_lineSpacing+5)/10; | ||
540 | m_descent += xt; | ||
541 | m_lineSpacing += xt; | ||
542 | } | ||
543 | if (m_bSop) | ||
544 | { | ||
545 | int xt = ((segs.begin()->style.getExtraSpace()+fc->getextraspace())*fc->getsize(segs.begin()->style)+5)/10; | ||
546 | //qDebug("ExtraSpace:%d", xt); | ||
547 | m_ascent += xt; | ||
548 | m_lineSpacing += xt; | ||
549 | } | ||
379 | } | 550 | } |
diff --git a/noncore/apps/opie-reader/CDrawBuffer.h b/noncore/apps/opie-reader/CDrawBuffer.h index 0d8968c..9ec0ed9 100644 --- a/noncore/apps/opie-reader/CDrawBuffer.h +++ b/noncore/apps/opie-reader/CDrawBuffer.h | |||
@@ -1,76 +1,73 @@ | |||
1 | #ifndef __CDRAWBUFFER_H | 1 | #ifndef __CDRAWBUFFER_H |
2 | #define __CDRAWBUFFER_H | 2 | #define __CDRAWBUFFER_H |
3 | 3 | ||
4 | #include "StyleConsts.h" | 4 | #include "StyleConsts.h" |
5 | #include "CBuffer.h" | 5 | #include "CBuffer.h" |
6 | #include "my_list.h" | 6 | #include "my_list.h" |
7 | #include "linktype.h" | ||
7 | 8 | ||
8 | class QPainter; | 9 | class QPainter; |
9 | 10 | ||
10 | enum linkType | ||
11 | { | ||
12 | eNone, | ||
13 | eLink, | ||
14 | ePicture | ||
15 | }; | ||
16 | |||
17 | struct textsegment | 11 | struct textsegment |
18 | { | 12 | { |
19 | int start; | 13 | int start; |
20 | CStyle style; | 14 | CStyle style; |
21 | textsegment(int _start, const CStyle& _style) | 15 | textsegment(int _start, const CStyle& _style) |
22 | : | 16 | : |
23 | start(_start), style(_style) | 17 | start(_start), style(_style) |
24 | {} | 18 | {} |
25 | }; | 19 | }; |
26 | 20 | ||
27 | class FontControl; | 21 | class FontControl; |
28 | 22 | ||
29 | class CDrawBuffer : public CBuffer | 23 | class CDrawBuffer : public CBuffer |
30 | { | 24 | { |
31 | CList<textsegment> segs; | 25 | CList<textsegment> segs; |
32 | int len; | 26 | int len; |
33 | FontControl* fc; | 27 | FontControl* fc; |
34 | int m_maxstyle, m_ascent, m_descent, m_lineSpacing, m_lineExtraSpacing; | 28 | int m_maxstyle, m_ascent, m_descent, m_lineSpacing, m_lineExtraSpacing; |
35 | bool m_bEof; | 29 | bool m_bEof; |
30 | bool m_bSop, m_bEop; | ||
36 | CDrawBuffer(const CDrawBuffer&); | 31 | CDrawBuffer(const CDrawBuffer&); |
37 | CDrawBuffer& operator=(const tchar*sztmp); | 32 | CDrawBuffer& operator=(const tchar*sztmp); |
38 | public: | 33 | public: |
34 | void setstartpara() { m_bSop = true; } | ||
35 | void setendpara() { m_bEop = true; } | ||
39 | int leftMargin(); | 36 | int leftMargin(); |
40 | int rightMargin(); | 37 | int rightMargin(); |
41 | void setEof() { m_bEof = true; } | 38 | void setEof() { m_bEof = true; } |
42 | bool eof() { return m_bEof; } | 39 | bool eof() { return m_bEof; } |
43 | CDrawBuffer& operator=(CDrawBuffer&); | 40 | CDrawBuffer& operator=(CDrawBuffer&); |
44 | CDrawBuffer(FontControl* _fs = NULL) | 41 | CDrawBuffer(FontControl* _fs = NULL) |
45 | : | 42 | : |
46 | fc(_fs) | 43 | fc(_fs) |
47 | { | 44 | { |
48 | empty(); | 45 | empty(); |
49 | } | 46 | } |
50 | ~CDrawBuffer(); | 47 | ~CDrawBuffer(); |
51 | /* | 48 | /* |
52 | CDrawBuffer() | 49 | CDrawBuffer() |
53 | : | 50 | : |
54 | size(0) | 51 | size(0) |
55 | { | 52 | { |
56 | empty(); | 53 | empty(); |
57 | } | 54 | } |
58 | */ | 55 | */ |
59 | int width(int numchars = -1); | 56 | int width(int numchars = -1, bool onscreen = false, int scwidth = 0, unsigned char _border = 0); |
60 | int offset(int); | 57 | int offset(int, unsigned char); |
61 | void render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scw); | 58 | void render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scw, unsigned char); |
62 | void empty(); | 59 | void empty(); |
63 | void addch(tchar ch, CStyle _style); | 60 | void addch(tchar ch, CStyle _style); |
64 | void truncate(int); | 61 | void truncate(int); |
65 | void setright(CDrawBuffer&, int); | 62 | void setright(CDrawBuffer&, int); |
66 | CStyle laststyle(); | 63 | CStyle laststyle(); |
67 | int ascent() { return m_ascent; } | 64 | int ascent() { return m_ascent; } |
68 | int descent() { return m_descent; } | 65 | int descent() { return m_descent; } |
69 | int lineSpacing() { return m_lineSpacing; } | 66 | int lineSpacing() { return m_lineSpacing; } |
70 | int lineExtraSpacing() { return m_lineExtraSpacing; } | 67 | int lineExtraSpacing() { return m_lineExtraSpacing; } |
71 | 68 | ||
72 | // void frig(); | 69 | // void frig(); |
73 | linkType getLinkType(int numchars, size_t& tgt); | 70 | linkType getLinkType(int numchars, size_t& tgt); |
74 | void resize(); | 71 | void resize(); |
75 | }; | 72 | }; |
76 | #endif | 73 | #endif |
diff --git a/noncore/apps/opie-reader/CEncoding.cpp b/noncore/apps/opie-reader/CEncoding.cpp index c1dcfe8..60a1057 100644 --- a/noncore/apps/opie-reader/CEncoding.cpp +++ b/noncore/apps/opie-reader/CEncoding.cpp | |||
@@ -1,210 +1,210 @@ | |||
1 | #include <stdio.h> | 1 | #include <stdio.h> |
2 | #include "CEncoding.h" | 2 | #include "CEncoding.h" |
3 | 3 | ||
4 | void CUtf8::getch(tchar& ch, CStyle& sty) | 4 | void CUtf8::getch(tchar& ch, CStyle& sty) |
5 | { | 5 | { |
6 | int iret; | 6 | tchar ret; |
7 | parent->getch(iret, sty); | 7 | parent->getch(ret, sty); |
8 | if (iret == EOF) | 8 | if (ret == UEOF) |
9 | { | 9 | { |
10 | ch = UEOF; | 10 | ch = UEOF; |
11 | return; | 11 | return; |
12 | } | 12 | } |
13 | tchar ret = iret; | ||
14 | int count = 0; | 13 | int count = 0; |
15 | if (ret & (1 << 7)) | 14 | if (ret & (1 << 7)) |
16 | { | 15 | { |
17 | unsigned char flags = ret << 1; | 16 | unsigned char flags = ret << 1; |
18 | while ((flags & (1 << 7)) != 0) | 17 | while ((flags & (1 << 7)) != 0) |
19 | { | 18 | { |
20 | ret <<= 6; | 19 | ret <<= 6; |
20 | tchar iret; | ||
21 | parent->getch(iret, sty); | 21 | parent->getch(iret, sty); |
22 | ret += iret & 0x3f; | 22 | ret += iret & 0x3f; |
23 | flags <<= 1; | 23 | flags <<= 1; |
24 | count++; | 24 | count++; |
25 | } | 25 | } |
26 | switch (count) | 26 | switch (count) |
27 | { | 27 | { |
28 | case 0: | 28 | case 0: |
29 | break; | 29 | break; |
30 | case 1: | 30 | case 1: |
31 | ret &= 0x07ff; | 31 | ret &= 0x07ff; |
32 | break; | 32 | break; |
33 | case 2: | 33 | case 2: |
34 | break; | 34 | break; |
35 | case 3: | 35 | case 3: |
36 | case 4: | 36 | case 4: |
37 | case 5: | 37 | case 5: |
38 | default: | 38 | default: |
39 | printf("Only 16bit unicode supported..."); | 39 | printf("Only 16bit unicode supported..."); |
40 | } | 40 | } |
41 | } | 41 | } |
42 | ch = ret; | 42 | ch = ret; |
43 | return; | 43 | return; |
44 | } | 44 | } |
45 | 45 | ||
46 | void CUcs16be::getch(tchar& ch, CStyle& sty) | 46 | void CUcs16be::getch(tchar& ch, CStyle& sty) |
47 | { | 47 | { |
48 | int iret; | 48 | tchar iret; |
49 | parent->getch(iret, sty); | 49 | parent->getch(iret, sty); |
50 | if (iret == EOF) | 50 | if (iret == UEOF) |
51 | { | 51 | { |
52 | ch = UEOF; | 52 | ch = UEOF; |
53 | return; | 53 | return; |
54 | } | 54 | } |
55 | tchar ret = iret; | 55 | tchar ret = iret; |
56 | parent->getch(iret, sty); | 56 | parent->getch(iret, sty); |
57 | ch = (ret << 8) + iret; | 57 | ch = (ret << 8) + iret; |
58 | } | 58 | } |
59 | 59 | ||
60 | void CUcs16le::getch(tchar& ch, CStyle& sty) | 60 | void CUcs16le::getch(tchar& ch, CStyle& sty) |
61 | { | 61 | { |
62 | int iret; | 62 | tchar iret; |
63 | parent->getch(iret, sty); | 63 | parent->getch(iret, sty); |
64 | if (iret == EOF) | 64 | if (iret == UEOF) |
65 | { | 65 | { |
66 | ch = UEOF; | 66 | ch = UEOF; |
67 | return; | 67 | return; |
68 | } | 68 | } |
69 | tchar ret = iret; | 69 | tchar ret = iret; |
70 | parent->getch(iret, sty); | 70 | parent->getch(iret, sty); |
71 | ch = ret + (iret << 8); | 71 | ch = ret + (iret << 8); |
72 | } | 72 | } |
73 | 73 | ||
74 | void Ccp1252::getch(tchar& ch, CStyle& sty) | 74 | void Ccp1252::getch(tchar& ch, CStyle& sty) |
75 | { | 75 | { |
76 | int iret; | 76 | tchar iret; |
77 | parent->getch(iret, sty); | 77 | parent->getch(iret, sty); |
78 | ch = iret; | 78 | ch = iret; |
79 | switch (ch) | 79 | switch (ch) |
80 | { | 80 | { |
81 | case EOF: | 81 | case UEOF: |
82 | ch = UEOF; | 82 | ch = UEOF; |
83 | break; | 83 | break; |
84 | case 0x80: | 84 | case 0x80: |
85 | ch = 0x20ac; | 85 | ch = 0x20ac; |
86 | break; | 86 | break; |
87 | case 0x82: | 87 | case 0x82: |
88 | ch = 0x201a; | 88 | ch = 0x201a; |
89 | break; | 89 | break; |
90 | case 0x83: | 90 | case 0x83: |
91 | ch = 0x0192; | 91 | ch = 0x0192; |
92 | break; | 92 | break; |
93 | case 0x84: | 93 | case 0x84: |
94 | ch = 0x201e; | 94 | ch = 0x201e; |
95 | break; | 95 | break; |
96 | case 0x85: | 96 | case 0x85: |
97 | ch = 0x2026; | 97 | ch = 0x2026; |
98 | break; | 98 | break; |
99 | case 0x86: | 99 | case 0x86: |
100 | ch = 0x2020; | 100 | ch = 0x2020; |
101 | break; | 101 | break; |
102 | case 0x87: | 102 | case 0x87: |
103 | ch = 0x2021; | 103 | ch = 0x2021; |
104 | break; | 104 | break; |
105 | case 0x88: | 105 | case 0x88: |
106 | ch = 0x02c6; | 106 | ch = 0x02c6; |
107 | break; | 107 | break; |
108 | case 0x89: | 108 | case 0x89: |
109 | ch = 0x2030; | 109 | ch = 0x2030; |
110 | break; | 110 | break; |
111 | case 0x8a: | 111 | case 0x8a: |
112 | ch = 0x0160; | 112 | ch = 0x0160; |
113 | break; | 113 | break; |
114 | case 0x8b: | 114 | case 0x8b: |
115 | ch = 0x2039; | 115 | ch = 0x2039; |
116 | break; | 116 | break; |
117 | case 0x8c: | 117 | case 0x8c: |
118 | ch = 0x0152; | 118 | ch = 0x0152; |
119 | break; | 119 | break; |
120 | case 0x8e: | 120 | case 0x8e: |
121 | ch = 0x017d; | 121 | ch = 0x017d; |
122 | break; | 122 | break; |
123 | case 0x91: | 123 | case 0x91: |
124 | ch = 0x2018; | 124 | ch = 0x2018; |
125 | break; | 125 | break; |
126 | case 0x92: | 126 | case 0x92: |
127 | ch = 0x2019; | 127 | ch = 0x2019; |
128 | break; | 128 | break; |
129 | case 0x93: | 129 | case 0x93: |
130 | ch = 0x201c; | 130 | ch = 0x201c; |
131 | break; | 131 | break; |
132 | case 0x94: | 132 | case 0x94: |
133 | ch = 0x201d; | 133 | ch = 0x201d; |
134 | break; | 134 | break; |
135 | case 0x95: | 135 | case 0x95: |
136 | ch = 0x2022; | 136 | ch = 0x2022; |
137 | break; | 137 | break; |
138 | case 0x96: | 138 | case 0x96: |
139 | ch = 0x2013; | 139 | ch = 0x2013; |
140 | break; | 140 | break; |
141 | case 0x97: | 141 | case 0x97: |
142 | ch = 0x2014; | 142 | ch = 0x2014; |
143 | break; | 143 | break; |
144 | case 0x98: | 144 | case 0x98: |
145 | ch = 0x02dc; | 145 | ch = 0x02dc; |
146 | break; | 146 | break; |
147 | case 0x99: | 147 | case 0x99: |
148 | ch = 0x2122; | 148 | ch = 0x2122; |
149 | break; | 149 | break; |
150 | case 0x9a: | 150 | case 0x9a: |
151 | ch = 0x0161; | 151 | ch = 0x0161; |
152 | break; | 152 | break; |
153 | case 0x9b: | 153 | case 0x9b: |
154 | ch = 0x203a; | 154 | ch = 0x203a; |
155 | break; | 155 | break; |
156 | case 0x9c: | 156 | case 0x9c: |
157 | ch = 0x0153; | 157 | ch = 0x0153; |
158 | break; | 158 | break; |
159 | case 0x9e: | 159 | case 0x9e: |
160 | ch = 0x017e; | 160 | ch = 0x017e; |
161 | break; | 161 | break; |
162 | case 0x9f: | 162 | case 0x9f: |
163 | ch = 0x0178; | 163 | ch = 0x0178; |
164 | break; | 164 | break; |
165 | default: | 165 | default: |
166 | break; | 166 | break; |
167 | } | 167 | } |
168 | } | 168 | } |
169 | 169 | ||
170 | void CPalm::getch(tchar& ch, CStyle& sty) | 170 | void CPalm::getch(tchar& ch, CStyle& sty) |
171 | { | 171 | { |
172 | Ccp1252::getch(ch, sty); | 172 | Ccp1252::getch(ch, sty); |
173 | switch (ch) | 173 | switch (ch) |
174 | { | 174 | { |
175 | case 0x18: | 175 | case 0x18: |
176 | ch = 0x2026; | 176 | ch = 0x2026; |
177 | break; | 177 | break; |
178 | case 0x19: | 178 | case 0x19: |
179 | ch = 0x2007; | 179 | ch = 0x2007; |
180 | break; | 180 | break; |
181 | case 0x8d: | 181 | case 0x8d: |
182 | ch = 0x2662; | 182 | ch = 0x2662; |
183 | break; | 183 | break; |
184 | case 0x8e: | 184 | case 0x8e: |
185 | ch = 0x2663; | 185 | ch = 0x2663; |
186 | break; | 186 | break; |
187 | case 0x8f: | 187 | case 0x8f: |
188 | ch = 0x2661; | 188 | ch = 0x2661; |
189 | break; | 189 | break; |
190 | case 0x90: | 190 | case 0x90: |
191 | ch = 0x2660; | 191 | ch = 0x2660; |
192 | break; | 192 | break; |
193 | default: | 193 | default: |
194 | break; | 194 | break; |
195 | } | 195 | } |
196 | } | 196 | } |
197 | 197 | ||
198 | void CAscii::getch(tchar& ch, CStyle& sty) | 198 | void CAscii::getch(tchar& ch, CStyle& sty) |
199 | { | 199 | { |
200 | int iret; | 200 | tchar iret; |
201 | parent->getch(iret, sty); | 201 | parent->getch(iret, sty); |
202 | if (iret == EOF) | 202 | if (iret == UEOF) |
203 | { | 203 | { |
204 | ch = UEOF; | 204 | ch = UEOF; |
205 | } | 205 | } |
206 | else | 206 | else |
207 | { | 207 | { |
208 | ch = iret; | 208 | ch = iret; |
209 | } | 209 | } |
210 | } | 210 | } |
diff --git a/noncore/apps/opie-reader/CEncoding.h b/noncore/apps/opie-reader/CEncoding.h index 86562e7..463fba9 100644 --- a/noncore/apps/opie-reader/CEncoding.h +++ b/noncore/apps/opie-reader/CEncoding.h | |||
@@ -1,53 +1,74 @@ | |||
1 | #ifndef __CENCODING_H | 1 | #ifndef __CENCODING_H |
2 | #define __CENCODING_H | 2 | #define __CENCODING_H |
3 | 3 | ||
4 | #include "CExpander.h" | 4 | #include "CExpander.h" |
5 | 5 | ||
6 | #define MAX_ENCODING 6 | ||
7 | |||
6 | class CEncoding : public CCharacterSource | 8 | class CEncoding : public CCharacterSource |
7 | { | 9 | { |
8 | friend class CFilterChain; | 10 | friend class CFilterChain; |
9 | protected: | 11 | protected: |
10 | CExpander* parent; | 12 | CExpander* parent; |
13 | linkType hyperlink(unsigned int n, QString& t) { return parent->hyperlink(n,t); } | ||
11 | public: | 14 | public: |
12 | CEncoding() : parent(NULL) {} | 15 | CEncoding() : parent(NULL) {} |
13 | void setparent(CExpander* p) { parent = p; } | 16 | void setparent(CExpander* p) { parent = p; } |
14 | virtual ~CEncoding() {}; | 17 | virtual ~CEncoding() {}; |
15 | }; | 18 | }; |
16 | 19 | ||
17 | class CUtf8 : public CEncoding | 20 | class CUtf8 : public CEncoding |
18 | { | 21 | { |
19 | public: | 22 | public: |
20 | void getch(tchar& ch, CStyle& sty); | 23 | void getch(tchar& ch, CStyle& sty); |
21 | }; | 24 | }; |
22 | 25 | ||
23 | class CUcs16be : public CEncoding | 26 | class CUcs16be : public CEncoding |
24 | { | 27 | { |
25 | public: | 28 | public: |
26 | void getch(tchar& ch, CStyle& sty); | 29 | void getch(tchar& ch, CStyle& sty); |
27 | }; | 30 | }; |
28 | 31 | ||
29 | class CUcs16le : public CEncoding | 32 | class CUcs16le : public CEncoding |
30 | { | 33 | { |
31 | public: | 34 | public: |
32 | void getch(tchar& ch, CStyle& sty); | 35 | void getch(tchar& ch, CStyle& sty); |
33 | }; | 36 | }; |
34 | 37 | ||
35 | class Ccp1252 : public CEncoding | 38 | class Ccp1252 : public CEncoding |
36 | { | 39 | { |
37 | public: | 40 | public: |
38 | void getch(tchar& ch, CStyle& sty); | 41 | void getch(tchar& ch, CStyle& sty); |
39 | }; | 42 | }; |
40 | 43 | ||
41 | class CPalm : public Ccp1252 | 44 | class CPalm : public Ccp1252 |
42 | { | 45 | { |
43 | public: | 46 | public: |
44 | void getch(tchar& ch, CStyle& sty); | 47 | void getch(tchar& ch, CStyle& sty); |
45 | }; | 48 | }; |
46 | 49 | ||
47 | class CAscii : public CEncoding | 50 | class CAscii : public CEncoding |
48 | { | 51 | { |
49 | public: | 52 | public: |
50 | void getch(tchar& ch, CStyle& sty); | 53 | void getch(tchar& ch, CStyle& sty); |
51 | }; | 54 | }; |
52 | 55 | ||
56 | #include "CEncoding_tables.h" | ||
57 | |||
58 | class CGeneral8Bit : public CEncoding | ||
59 | { | ||
60 | int m_index; | ||
61 | public: | ||
62 | CGeneral8Bit(int _i) : m_index(_i) | ||
63 | { | ||
64 | // qDebug("8Bit:%d", _i); | ||
65 | // qDebug("%s", unicodetable::iterator(_i)->mime); | ||
66 | } | ||
67 | void getch(tchar& ch, CStyle& sty) | ||
68 | { | ||
69 | parent->getch(ch, sty); | ||
70 | ch = unicodetable::unicodevalue(m_index, ch); | ||
71 | } | ||
72 | }; | ||
73 | |||
53 | #endif | 74 | #endif |
diff --git a/noncore/apps/opie-reader/CExpander.h b/noncore/apps/opie-reader/CExpander.h index c281398..7b21d3e 100644 --- a/noncore/apps/opie-reader/CExpander.h +++ b/noncore/apps/opie-reader/CExpander.h | |||
@@ -1,124 +1,151 @@ | |||
1 | #ifndef __CExpander_h | 1 | #ifndef __CExpander_h |
2 | #define __CExpander_h | 2 | #define __CExpander_h |
3 | 3 | ||
4 | #ifndef _WINDOWS | ||
4 | #include <unistd.h> | 5 | #include <unistd.h> |
6 | #endif | ||
5 | #include <stdio.h> | 7 | #include <stdio.h> |
6 | #include <time.h> | 8 | #include <time.h> |
7 | #include <qmessagebox.h> | 9 | #include <qmessagebox.h> |
10 | #include "useqpe.h" | ||
8 | #include "config.h" | 11 | #include "config.h" |
9 | #include "StyleConsts.h" | 12 | #include "StyleConsts.h" |
10 | #include "Markups.h" | 13 | #include "Markups.h" |
11 | #include "name.h" | 14 | #include "names.h" |
15 | #include "linktype.h" | ||
12 | 16 | ||
13 | class QPixmap; | 17 | class QImage; |
14 | class Bkmk; | 18 | class Bkmk; |
15 | 19 | ||
16 | template<class T> | 20 | template<class T> |
17 | class CList; | 21 | class CList; |
18 | 22 | ||
19 | class CCharacterSource | 23 | class CCharacterSource |
20 | { | 24 | { |
21 | public: | 25 | public: |
22 | virtual void getch(tchar&, CStyle&) = 0; | 26 | virtual void getch(tchar&, CStyle&) = 0; |
27 | virtual linkType hyperlink(unsigned int n, QString&) = 0; | ||
23 | }; | 28 | }; |
24 | 29 | ||
25 | class CExpander | 30 | class CExpander |
26 | { | 31 | { |
27 | protected: | 32 | protected: |
28 | size_t m_homepos; | 33 | size_t m_homepos; |
29 | bool m_continuous; | 34 | bool m_continuous; |
30 | char* fname; | 35 | char* fname; |
31 | bool bSuspended; | 36 | bool bSuspended; |
32 | size_t suspos; | 37 | size_t suspos; |
33 | time_t sustime; | 38 | time_t sustime; |
39 | int m_scrWidth; | ||
40 | unsigned long m_currentstart, m_currentend; | ||
34 | public: | 41 | public: |
35 | virtual void suspend() = 0; | 42 | #ifdef USEQPE |
43 | virtual void suspend() = 0; | ||
36 | virtual void unsuspend() = 0; | 44 | virtual void unsuspend() = 0; |
45 | #endif | ||
37 | size_t getHome() { return m_homepos; } | 46 | size_t getHome() { return m_homepos; } |
38 | CExpander() : m_homepos(0), fname(NULL) {}; | 47 | CExpander() : m_homepos(0), fname(NULL), m_scrWidth(240), m_currentstart(1), m_currentend(0) {}; |
39 | virtual ~CExpander() { if (fname != NULL) delete [] fname; }; | 48 | virtual ~CExpander() { if (fname != NULL) delete [] fname; }; |
40 | int openfile(const char *src) | 49 | int openfile(const char *src) |
41 | { | 50 | { |
42 | bSuspended = false; | 51 | bSuspended = false; |
43 | fname = strdup(src); | 52 | fname = strdup(src); |
44 | return OpenFile(src); | 53 | return OpenFile(src); |
45 | } | 54 | } |
46 | virtual int OpenFile(const char *src) = 0; | 55 | virtual int OpenFile(const char *src) = 0; |
47 | virtual unsigned int locate() = 0; | 56 | virtual unsigned int locate() = 0; |
48 | virtual void locate(unsigned int n) = 0; | 57 | virtual void locate(unsigned int n) = 0; |
49 | virtual bool hasrandomaccess() = 0; | 58 | virtual bool hasrandomaccess() = 0; |
50 | virtual void sizes(unsigned long& file, unsigned long& text) = 0; | 59 | virtual void sizes(unsigned long& file, unsigned long& text) = 0; |
51 | virtual CList<Bkmk>* getbkmklist() { return NULL; } | 60 | virtual CList<Bkmk>* getbkmklist() { return NULL; } |
52 | virtual void getch(int& ch, CStyle& sty) | 61 | virtual void getch(tchar& ch, CStyle& sty) |
53 | { | 62 | { |
54 | ch = getch(); | 63 | int ich = getch(); |
64 | ch = (ich == EOF) ? UEOF : ich; | ||
55 | sty.unset(); | 65 | sty.unset(); |
56 | } | 66 | } |
57 | virtual int getch() = 0; | 67 | virtual int getch() = 0; |
58 | virtual bool hyperlink(unsigned int n) | 68 | virtual linkType hyperlink(unsigned int n, QString& wrd) |
59 | { | 69 | { |
60 | locate(n); | 70 | locate(n); |
61 | return true; | 71 | return eLink; |
62 | } | 72 | } |
63 | virtual MarkupType PreferredMarkup() = 0; | 73 | virtual MarkupType PreferredMarkup() = 0; |
64 | virtual void saveposn(size_t posn) {} | 74 | virtual void saveposn(size_t posn) {} |
65 | virtual bool forward(size_t& loc) {} | 75 | virtual void writeposn(size_t posn) {} |
66 | virtual bool back(size_t& loc) {} | 76 | virtual bool forward(size_t& loc) { return false; } |
77 | virtual bool back(size_t& loc) { return false; } | ||
67 | virtual bool hasnavigation() { return false; } | 78 | virtual bool hasnavigation() { return false; } |
68 | virtual unsigned long startSection() | 79 | unsigned long startSection() |
80 | { | ||
81 | unsigned long current = locate(); | ||
82 | if (m_currentstart > current || current > m_currentend) | ||
83 | { | ||
84 | start2endSection(); | ||
85 | } | ||
86 | return m_currentstart; | ||
87 | } | ||
88 | unsigned long endSection() | ||
69 | { | 89 | { |
70 | return 0; | 90 | unsigned long current = locate(); |
91 | if (m_currentstart > current || current > m_currentend) | ||
92 | { | ||
93 | start2endSection(); | ||
94 | } | ||
95 | return m_currentend; | ||
71 | } | 96 | } |
72 | virtual unsigned long endSection() | 97 | virtual void start2endSection() |
73 | { | 98 | { |
74 | unsigned long file, text; | 99 | m_currentstart = 0; |
75 | sizes(file, text); | 100 | unsigned long file; |
76 | return text; | 101 | sizes(file, m_currentend); |
77 | } | 102 | } |
78 | virtual QPixmap* getPicture(unsigned long tgt) { return NULL; } | 103 | virtual QImage* getPicture(unsigned long tgt) { return NULL; } |
79 | void setContinuous(bool _b) { m_continuous = _b; } | 104 | void setContinuous(bool _b) { m_continuous = _b; } |
80 | 105 | #ifdef USEQPE | |
81 | virtual void suspend(FILE*& fin) | 106 | virtual void suspend(FILE*& fin) |
82 | { | 107 | { |
83 | bSuspended = true; | 108 | bSuspended = true; |
84 | suspos = ftell(fin); | 109 | suspos = ftell(fin); |
85 | fclose(fin); | 110 | fclose(fin); |
86 | fin = NULL; | 111 | fin = NULL; |
87 | sustime = time(NULL); | 112 | sustime = time(NULL); |
88 | } | 113 | } |
89 | virtual void unsuspend(FILE*& fin) | 114 | virtual void unsuspend(FILE*& fin) |
90 | { | 115 | { |
91 | if (bSuspended) | 116 | if (bSuspended) |
92 | { | 117 | { |
93 | bSuspended = false; | 118 | bSuspended = false; |
94 | int delay = time(NULL) - sustime; | 119 | int delay = time(NULL) - sustime; |
95 | if (delay < 10) sleep(10-delay); | 120 | if (delay < 10) sleep(10-delay); |
96 | fin = fopen(fname, "rb"); | 121 | fin = fopen(fname, "rb"); |
97 | for (int i = 0; fin == NULL && i < 5; i++) | 122 | for (int i = 0; fin == NULL && i < 5; i++) |
98 | { | 123 | { |
99 | sleep(5); | 124 | sleep(5); |
100 | fin = fopen(fname, "rb"); | 125 | fin = fopen(fname, "rb"); |
101 | } | 126 | } |
102 | if (fin == NULL) | 127 | if (fin == NULL) |
103 | { | 128 | { |
104 | QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file"); | 129 | QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file"); |
105 | exit(0); | 130 | exit(0); |
106 | } | 131 | } |
107 | suspos = fseek(fin, suspos, SEEK_SET); | 132 | suspos = fseek(fin, suspos, SEEK_SET); |
108 | } | 133 | } |
109 | } | 134 | } |
135 | #endif | ||
110 | virtual void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) | 136 | virtual void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) |
111 | { | 137 | { |
112 | len = srclen; | 138 | len = srclen; |
113 | data = new unsigned char[len]; | 139 | data = new unsigned char[len]; |
114 | memcpy(data, src, len); | 140 | memcpy(data, src, len); |
115 | } | 141 | } |
116 | virtual void putSaveData(unsigned char*& src, unsigned short& srclen) | 142 | virtual void putSaveData(unsigned char*& src, unsigned short& srclen) |
117 | { | 143 | { |
118 | if (srclen != 0) | 144 | if (srclen != 0) |
119 | { | 145 | { |
120 | qDebug("Don't know what to do with non-zero save data"); | 146 | qDebug("Don't know what to do with non-zero save data"); |
121 | } | 147 | } |
122 | } | 148 | } |
149 | void setwidth(int w) { m_scrWidth = w; } | ||
123 | }; | 150 | }; |
124 | #endif | 151 | #endif |
diff --git a/noncore/apps/opie-reader/CFilter.cpp b/noncore/apps/opie-reader/CFilter.cpp index d5e3116..73a0872 100644 --- a/noncore/apps/opie-reader/CFilter.cpp +++ b/noncore/apps/opie-reader/CFilter.cpp | |||
@@ -1,684 +1,742 @@ | |||
1 | #include "CDrawBuffer.h" | 1 | #include "CDrawBuffer.h" |
2 | #include "CFilter.h" | 2 | #include "CFilter.h" |
3 | 3 | ||
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() == m_AlignCentre) | 535 | if (currentstyle.getJustify() == m_AlignCentre) |
536 | { | 536 | { |
537 | currentstyle.setLeftJustify(); | 537 | currentstyle.setLeftJustify(); |
538 | } | 538 | } |
539 | else | 539 | else |
540 | { | 540 | { |
541 | currentstyle.setCentreJustify(); | 541 | currentstyle.setCentreJustify(); |
542 | } | 542 | } |
543 | parent->getch(ch, dummy); | 543 | parent->getch(ch, dummy); |
544 | break; | 544 | break; |
545 | case 'r': | 545 | case 'r': |
546 | if (currentstyle.getJustify() == m_AlignRight) | 546 | if (currentstyle.getJustify() == m_AlignRight) |
547 | { | 547 | { |
548 | currentstyle.setLeftJustify(); | 548 | currentstyle.setLeftJustify(); |
549 | } | 549 | } |
550 | else | 550 | else |
551 | { | 551 | { |
552 | currentstyle.setRightJustify(); | 552 | currentstyle.setRightJustify(); |
553 | } | 553 | } |
554 | parent->getch(ch, dummy); | 554 | parent->getch(ch, dummy); |
555 | break; | 555 | break; |
556 | default: | 556 | default: |
557 | currentstyle.setColour(255,0,0); | 557 | currentstyle.setColour(255,0,0); |
558 | } | 558 | } |
559 | } | 559 | } |
560 | sty = currentstyle; | 560 | sty = currentstyle; |
561 | } | 561 | } |
562 | 562 | ||
563 | void OnePara::getch(tchar& ch, CStyle& sty) | 563 | void OnePara::getch(tchar& ch, CStyle& sty) |
564 | { | 564 | { |
565 | parent->getch(ch, sty); | 565 | parent->getch(ch, sty); |
566 | if (m_lastchar == 10) | 566 | if (m_lastchar == 10) |
567 | { | 567 | { |
568 | while (ch == 10) parent->getch(ch, sty); | 568 | while (ch == 10) parent->getch(ch, sty); |
569 | } | 569 | } |
570 | m_lastchar = ch; | 570 | m_lastchar = ch; |
571 | } | 571 | } |
572 | 572 | ||
573 | #ifdef REPALM | 573 | #ifdef REPALM |
574 | void repalm::getch(tchar& ch, CStyle& sty) | 574 | void repalm::getch(tchar& ch, CStyle& sty) |
575 | { | 575 | { |
576 | parent->getch(ch, sty); | 576 | parent->getch(ch, sty); |
577 | switch (ch) | 577 | switch (ch) |
578 | { | 578 | { |
579 | case 0x80: | 579 | case 0x80: |
580 | ch = 0x20ac; | 580 | ch = 0x20ac; |
581 | break; | 581 | break; |
582 | case 0x82: | 582 | case 0x82: |
583 | ch = 0x201a; | 583 | ch = 0x201a; |
584 | break; | 584 | break; |
585 | case 0x83: | 585 | case 0x83: |
586 | ch = 0x0192; | 586 | ch = 0x0192; |
587 | break; | 587 | break; |
588 | case 0x84: | 588 | case 0x84: |
589 | ch = 0x201e; | 589 | ch = 0x201e; |
590 | break; | 590 | break; |
591 | case 0x85: | 591 | case 0x85: |
592 | ch = 0x2026; | 592 | ch = 0x2026; |
593 | break; | 593 | break; |
594 | case 0x86: | 594 | case 0x86: |
595 | ch = 0x2020; | 595 | ch = 0x2020; |
596 | break; | 596 | break; |
597 | case 0x87: | 597 | case 0x87: |
598 | ch = 0x2021; | 598 | ch = 0x2021; |
599 | break; | 599 | break; |
600 | case 0x88: | 600 | case 0x88: |
601 | ch = 0x02c6; | 601 | ch = 0x02c6; |
602 | break; | 602 | break; |
603 | case 0x89: | 603 | case 0x89: |
604 | ch = 0x2030; | 604 | ch = 0x2030; |
605 | break; | 605 | break; |
606 | case 0x8a: | 606 | case 0x8a: |
607 | ch = 0x0160; | 607 | ch = 0x0160; |
608 | break; | 608 | break; |
609 | case 0x8b: | 609 | case 0x8b: |
610 | ch = 0x2039; | 610 | ch = 0x2039; |
611 | break; | 611 | break; |
612 | case 0x8c: | 612 | case 0x8c: |
613 | ch = 0x0152; | 613 | ch = 0x0152; |
614 | break; | 614 | break; |
615 | /* | 615 | /* |
616 | case 0x8e: | 616 | case 0x8e: |
617 | ch = 0x017d; | 617 | ch = 0x017d; |
618 | break; | 618 | break; |
619 | */ | 619 | */ |
620 | case 0x91: | 620 | case 0x91: |
621 | ch = 0x2018; | 621 | ch = 0x2018; |
622 | break; | 622 | break; |
623 | case 0x92: | 623 | case 0x92: |
624 | ch = 0x2019; | 624 | ch = 0x2019; |
625 | break; | 625 | break; |
626 | case 0x93: | 626 | case 0x93: |
627 | ch = 0x201c; | 627 | ch = 0x201c; |
628 | break; | 628 | break; |
629 | case 0x94: | 629 | case 0x94: |
630 | ch = 0x201d; | 630 | ch = 0x201d; |
631 | break; | 631 | break; |
632 | case 0x95: | 632 | case 0x95: |
633 | ch = 0x2022; | 633 | ch = 0x2022; |
634 | break; | 634 | break; |
635 | case 0x96: | 635 | case 0x96: |
636 | ch = 0x2013; | 636 | ch = 0x2013; |
637 | break; | 637 | break; |
638 | case 0x97: | 638 | case 0x97: |
639 | ch = 0x2014; | 639 | ch = 0x2014; |
640 | break; | 640 | break; |
641 | case 0x98: | 641 | case 0x98: |
642 | ch = 0x02dc; | 642 | ch = 0x02dc; |
643 | break; | 643 | break; |
644 | case 0x99: | 644 | case 0x99: |
645 | ch = 0x2122; | 645 | ch = 0x2122; |
646 | break; | 646 | break; |
647 | case 0x9a: | 647 | case 0x9a: |
648 | ch = 0x0161; | 648 | ch = 0x0161; |
649 | break; | 649 | break; |
650 | case 0x9b: | 650 | case 0x9b: |
651 | ch = 0x203a; | 651 | ch = 0x203a; |
652 | break; | 652 | break; |
653 | case 0x9c: | 653 | case 0x9c: |
654 | ch = 0x0153; | 654 | ch = 0x0153; |
655 | break; | 655 | break; |
656 | case 0x9e: | 656 | case 0x9e: |
657 | ch = 0x017e; | 657 | ch = 0x017e; |
658 | break; | 658 | break; |
659 | case 0x9f: | 659 | case 0x9f: |
660 | ch = 0x0178; | 660 | ch = 0x0178; |
661 | break; | 661 | break; |
662 | case 0x18: | 662 | case 0x18: |
663 | ch = 0x2026; | 663 | ch = 0x2026; |
664 | break; | 664 | break; |
665 | case 0x19: | 665 | case 0x19: |
666 | ch = 0x2007; | 666 | ch = 0x2007; |
667 | break; | 667 | break; |
668 | case 0x8d: | 668 | case 0x8d: |
669 | ch = 0x2662; | 669 | ch = 0x2662; |
670 | break; | 670 | break; |
671 | case 0x8e: | 671 | case 0x8e: |
672 | ch = 0x2663; | 672 | ch = 0x2663; |
673 | break; | 673 | break; |
674 | case 0x8f: | 674 | case 0x8f: |
675 | ch = 0x2661; | 675 | ch = 0x2661; |
676 | break; | 676 | break; |
677 | case 0x90: | 677 | case 0x90: |
678 | ch = 0x2660; | 678 | ch = 0x2660; |
679 | break; | 679 | break; |
680 | default: | 680 | default: |
681 | break; | 681 | break; |
682 | } | 682 | } |
683 | } | 683 | } |
684 | #endif | 684 | #endif |
685 | |||
686 | //static tchar nextpart[] = { 'C','l','i','c','k',' ','h','e','r','e',' ','f','o','r',' ','t','h','e',' ','n','e','x','t',' ','p','a','r','t',0 }; | ||
687 | //static tchar prevpart[] = { 'C','l','i','c','k',' ','h','e','r','e',' ','f','o','r',' ','t','h','e',' ','p','r','e','v','i','o','u','s',' ','p','a','r','t',0 }; | ||
688 | |||
689 | void DePluck::getch(tchar& ch, CStyle& sty) | ||
690 | { | ||
691 | if (m_buffed > 0) | ||
692 | { | ||
693 | sty = m_laststyle; | ||
694 | ch = nextpart[m_current++]; | ||
695 | if (m_current == m_buffed) | ||
696 | { | ||
697 | m_current = m_buffed = 0; | ||
698 | } | ||
699 | } | ||
700 | else | ||
701 | { | ||
702 | if (m_buffer != 0) | ||
703 | { | ||
704 | ch = m_buffer; | ||
705 | m_buffer = 0; | ||
706 | return; | ||
707 | } | ||
708 | unsigned long lnk; | ||
709 | do | ||
710 | { | ||
711 | if (nextpart[m_buffed] == 0) break; | ||
712 | parent->getch(ch, sty); | ||
713 | m_laststyle = sty; | ||
714 | if (sty.getLink()) lnk = sty.getData(); | ||
715 | } while (ch == nextpart[m_buffed] && sty.getLink() && ++m_buffed); | ||
716 | m_current = 0; | ||
717 | if (nextpart[m_buffed] == 0) | ||
718 | { | ||
719 | m_buffed = 0; | ||
720 | QString dmy; | ||
721 | parent->hyperlink(lnk, dmy); | ||
722 | do | ||
723 | { | ||
724 | parent->getch(ch, sty); | ||
725 | } | ||
726 | while (ch != 10); | ||
727 | parent->getch(ch, sty); | ||
728 | } | ||
729 | else if (m_buffed > 0) | ||
730 | { | ||
731 | m_buffer = ch; | ||
732 | ch = nextpart[0]; | ||
733 | if (m_buffed == 1) | ||
734 | { | ||
735 | m_buffed = 0; | ||
736 | } | ||
737 | else m_current = 1; | ||
738 | } | ||
739 | } | ||
740 | |||
741 | return; | ||
742 | } | ||
diff --git a/noncore/apps/opie-reader/CFilter.h b/noncore/apps/opie-reader/CFilter.h index 2d0c30f..0a03b3e 100644 --- a/noncore/apps/opie-reader/CFilter.h +++ b/noncore/apps/opie-reader/CFilter.h | |||
@@ -1,287 +1,328 @@ | |||
1 | #ifndef __CFILTER_H | 1 | #ifndef __CFILTER_H |
2 | #define __CFILTER_H | 2 | #define __CFILTER_H |
3 | 3 | ||
4 | #include "CExpander.h" | 4 | #include "CExpander.h" |
5 | #include "CEncoding.h" | 5 | #include "CEncoding.h" |
6 | 6 | ||
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 | linkType hyperlink(unsigned int n, QString& w) | ||
13 | { | ||
14 | return parent->hyperlink(n,w); | ||
15 | } | ||
12 | public: | 16 | public: |
13 | CFilter() : parent(NULL) {} | 17 | CFilter() : parent(NULL) {} |
14 | void setparent(CCharacterSource* p) { parent = p; } | 18 | void setparent(CCharacterSource* p) { parent = p; } |
15 | virtual ~CFilter() {}; | 19 | virtual ~CFilter() {}; |
16 | }; | 20 | }; |
17 | 21 | ||
18 | class CFilterChain | 22 | class CFilterChain |
19 | { | 23 | { |
20 | CExpander* expander; | 24 | CExpander* expander; |
21 | CEncoding* encoder; | 25 | CEncoding* encoder; |
22 | CFilter* first; | 26 | CFilter* first; |
23 | CCharacterSource* front; | 27 | CCharacterSource* front; |
24 | public: | 28 | public: |
25 | CFilterChain(CEncoding* _e) : encoder(_e), first(NULL), front(_e) {}; | 29 | CFilterChain(CEncoding* _e) : encoder(_e), first(NULL), front(_e) {}; |
26 | ~CFilterChain() | 30 | ~CFilterChain() |
27 | { | 31 | { |
28 | CCharacterSource* p = front; | 32 | CCharacterSource* p = front; |
29 | while (p != encoder) | 33 | while (p != encoder) |
30 | { | 34 | { |
31 | CFilter* pnext = (CFilter*)p; | 35 | CFilter* pnext = (CFilter*)p; |
32 | p = ((CFilter*)p)->parent; | 36 | p = ((CFilter*)p)->parent; |
33 | delete pnext; | 37 | delete pnext; |
34 | } | 38 | } |
35 | delete encoder; | 39 | delete encoder; |
36 | } | 40 | } |
37 | void getch(tchar& ch, CStyle& sty) | 41 | void getch(tchar& ch, CStyle& sty) |
38 | { | 42 | { |
39 | front->getch(ch, sty); | 43 | front->getch(ch, sty); |
40 | } | 44 | } |
41 | void addfilter(CFilter* p) | 45 | void addfilter(CFilter* p) |
42 | { | 46 | { |
43 | if (first == NULL) | 47 | if (first == NULL) |
44 | { | 48 | { |
45 | front = first = p; | 49 | front = first = p; |
46 | p->setparent(encoder); | 50 | p->setparent(encoder); |
47 | } | 51 | } |
48 | else | 52 | else |
49 | { | 53 | { |
50 | p->setparent(front); | 54 | p->setparent(front); |
51 | front = p; | 55 | front = p; |
52 | } | 56 | } |
53 | } | 57 | } |
54 | void setsource(CExpander* p) | 58 | void setsource(CExpander* p) |
55 | { | 59 | { |
56 | expander = p; | 60 | expander = p; |
57 | encoder->setparent(p); | 61 | encoder->setparent(p); |
58 | } | 62 | } |
59 | void setencoder(CEncoding* p) | 63 | void setencoder(CEncoding* p) |
60 | { | 64 | { |
61 | delete encoder; | 65 | delete encoder; |
62 | encoder = p; | 66 | encoder = p; |
63 | first->setparent(p); | 67 | first->setparent(p); |
64 | encoder->setparent(expander); | 68 | encoder->setparent(expander); |
65 | } | 69 | } |
66 | }; | 70 | }; |
67 | 71 | ||
68 | class stripcr : public CFilter | 72 | class stripcr : public CFilter |
69 | { | 73 | { |
70 | public: | 74 | public: |
71 | stripcr() {} | 75 | stripcr() {} |
72 | virtual ~stripcr() {} | 76 | ~stripcr() {} |
73 | virtual void getch(tchar& ch, CStyle& sty) | 77 | void getch(tchar& ch, CStyle& sty) |
74 | { | 78 | { |
75 | do | 79 | do |
76 | { | 80 | { |
77 | parent->getch(ch, sty); | 81 | parent->getch(ch, sty); |
78 | } | 82 | } |
79 | while (ch == 13); | 83 | while (ch == 13); |
80 | } | 84 | } |
81 | }; | 85 | }; |
82 | 86 | ||
83 | class dehyphen : public CFilter | 87 | class dehyphen : public CFilter |
84 | { | 88 | { |
85 | bool m_bCharWaiting; | 89 | bool m_bCharWaiting; |
86 | tchar m_nextChar; | 90 | tchar m_nextChar; |
87 | CStyle m_nextSty; | 91 | CStyle m_nextSty; |
88 | public: | 92 | public: |
89 | dehyphen() : m_bCharWaiting(false) {} | 93 | dehyphen() : m_bCharWaiting(false) {} |
90 | virtual ~dehyphen() {} | 94 | ~dehyphen() {} |
91 | virtual void getch(tchar& ch, CStyle& sty) | 95 | void getch(tchar& ch, CStyle& sty) |
92 | { | 96 | { |
93 | if (m_bCharWaiting) | 97 | if (m_bCharWaiting) |
94 | { | 98 | { |
95 | m_bCharWaiting = false; | 99 | m_bCharWaiting = false; |
96 | ch = m_nextChar; | 100 | ch = m_nextChar; |
97 | sty = m_nextSty; | 101 | sty = m_nextSty; |
98 | return; | 102 | return; |
99 | } | 103 | } |
100 | parent->getch(ch, sty); | 104 | parent->getch(ch, sty); |
101 | if (ch != '-') return; | 105 | if (ch != '-') return; |
102 | parent->getch(m_nextChar, m_nextSty); | 106 | parent->getch(m_nextChar, m_nextSty); |
103 | if (m_nextChar != 10) | 107 | if (m_nextChar != 10) |
104 | { | 108 | { |
105 | m_bCharWaiting = true; | 109 | m_bCharWaiting = true; |
106 | ch = '-'; | 110 | ch = '-'; |
107 | return; | 111 | return; |
108 | } | 112 | } |
109 | parent->getch(ch, sty); | 113 | parent->getch(ch, sty); |
110 | } | 114 | } |
111 | }; | 115 | }; |
112 | 116 | ||
113 | class striphtml : public CFilter | 117 | class striphtml : public CFilter |
114 | { | 118 | { |
115 | CStyle currentstyle; | 119 | CStyle currentstyle; |
116 | unsigned short skip_ws(); | 120 | unsigned short skip_ws(); |
117 | unsigned short skip_ws_end(); | 121 | unsigned short skip_ws_end(); |
118 | unsigned short parse_m(); | 122 | unsigned short parse_m(); |
119 | void mygetch(tchar& ch, CStyle& sty); | 123 | void mygetch(tchar& ch, CStyle& sty); |
120 | public: | 124 | public: |
121 | striphtml() {} | 125 | striphtml() {} |
122 | virtual ~striphtml() {} | 126 | ~striphtml() {} |
123 | virtual void getch(tchar& ch, CStyle& sty); | 127 | void getch(tchar& ch, CStyle& sty); |
124 | }; | 128 | }; |
125 | 129 | ||
126 | class unindent : public CFilter | 130 | class unindent : public CFilter |
127 | { | 131 | { |
128 | tchar lc; | 132 | tchar lc; |
129 | public: | 133 | public: |
130 | unindent() : lc(0) {} | 134 | unindent() : lc(0) {} |
131 | virtual ~unindent() {} | 135 | ~unindent() {} |
132 | virtual void getch(tchar& ch, CStyle& sty) | 136 | void getch(tchar& ch, CStyle& sty) |
133 | { | 137 | { |
134 | if (lc == 10) | 138 | if (lc == 10) |
135 | { | 139 | { |
136 | do | 140 | do |
137 | { | 141 | { |
138 | parent->getch(ch, sty); | 142 | parent->getch(ch, sty); |
139 | } | 143 | } |
140 | while (ch == ' '); | 144 | while (ch == ' '); |
141 | } | 145 | } |
142 | else parent->getch(ch, sty); | 146 | else parent->getch(ch, sty); |
143 | lc = ch; | 147 | lc = ch; |
144 | return; | 148 | return; |
145 | } | 149 | } |
146 | }; | 150 | }; |
147 | 151 | ||
148 | class repara : public CFilter | 152 | class repara : public CFilter |
149 | { | 153 | { |
150 | tchar tch; | 154 | tchar tch; |
151 | public: | 155 | public: |
152 | repara() : tch(0) {} | 156 | repara() : tch(0) {} |
153 | virtual ~repara() {} | 157 | ~repara() {} |
154 | virtual void getch(tchar& ch, CStyle& sty) | 158 | void getch(tchar& ch, CStyle& sty) |
155 | { | 159 | { |
156 | parent->getch(ch, sty); | 160 | parent->getch(ch, sty); |
157 | if (ch == 10) | 161 | if (ch == 10) |
158 | { | 162 | { |
159 | if (tch == 10) | 163 | if (tch == 10) |
160 | { | 164 | { |
161 | return; | 165 | return; |
162 | } | 166 | } |
163 | else | 167 | else |
164 | { | 168 | { |
165 | tch = ch; | 169 | tch = ch; |
166 | ch = ' '; | 170 | ch = ' '; |
167 | return; | 171 | return; |
168 | } | 172 | } |
169 | } | 173 | } |
170 | tch = ch; | 174 | tch = ch; |
171 | return; | 175 | return; |
172 | } | 176 | } |
173 | }; | 177 | }; |
174 | 178 | ||
175 | class indenter : public CFilter | 179 | class indenter : public CFilter |
176 | { | 180 | { |
177 | int amnt; | 181 | int amnt; |
178 | int indent; | 182 | int indent; |
179 | CStyle lsty; | 183 | CStyle lsty; |
180 | public: | 184 | public: |
181 | indenter(int _a=5) : amnt(_a), indent(0) {} | 185 | indenter(int _a=5) : amnt(_a), indent(0) {} |
182 | virtual ~indenter() {} | 186 | ~indenter() {} |
183 | virtual void getch(tchar& ch, CStyle& sty) | 187 | void getch(tchar& ch, CStyle& sty) |
184 | { | 188 | { |
185 | if (indent > 0) | 189 | if (indent > 0) |
186 | { | 190 | { |
187 | indent--; | 191 | indent--; |
188 | ch = ' '; | 192 | ch = ' '; |
189 | sty = lsty; | 193 | sty = lsty; |
190 | return; | 194 | return; |
191 | } | 195 | } |
192 | parent->getch(ch, sty); | 196 | parent->getch(ch, sty); |
193 | if (ch == 10) | 197 | if (ch == 10) |
194 | { | 198 | { |
195 | indent = amnt; | 199 | indent = amnt; |
196 | lsty = sty; | 200 | lsty = sty; |
197 | } | 201 | } |
198 | return; | 202 | return; |
199 | } | 203 | } |
200 | }; | 204 | }; |
201 | 205 | ||
202 | class dblspce : public CFilter | 206 | class dblspce : public CFilter |
203 | { | 207 | { |
204 | bool lastlf; | 208 | bool lastlf; |
205 | CStyle lsty; | 209 | CStyle lsty; |
206 | public: | 210 | public: |
207 | dblspce() : lastlf(false) {} | 211 | dblspce() : lastlf(false) {} |
208 | virtual ~dblspce() {} | 212 | ~dblspce() {} |
209 | virtual void getch(tchar& ch, CStyle& sty) | 213 | void getch(tchar& ch, CStyle& sty) |
210 | { | 214 | { |
211 | if (lastlf) | 215 | if (lastlf) |
212 | { | 216 | { |
213 | lastlf = false; | 217 | lastlf = false; |
214 | ch = 10; | 218 | ch = 10; |
215 | sty = lsty; | 219 | sty = lsty; |
216 | return; | 220 | return; |
217 | } | 221 | } |
218 | parent->getch(ch, sty); | 222 | parent->getch(ch, sty); |
219 | if (lastlf = (ch == 10)) | 223 | if (lastlf = (ch == 10)) |
220 | { | 224 | { |
221 | lsty = sty; | 225 | lsty = sty; |
222 | } | 226 | } |
223 | return; | 227 | return; |
224 | } | 228 | } |
225 | }; | 229 | }; |
226 | 230 | ||
227 | class textfmt : public CFilter | 231 | class textfmt : public CFilter |
228 | { | 232 | { |
229 | CStyle currentstyle; | 233 | CStyle currentstyle; |
230 | tchar lastchar; | 234 | tchar lastchar; |
231 | bool uselast; | 235 | bool uselast; |
232 | void mygetch(tchar&, CStyle&); | 236 | void mygetch(tchar&, CStyle&); |
233 | public: | 237 | public: |
234 | textfmt() : lastchar(0), uselast(false) {} | 238 | textfmt() : lastchar(0), uselast(false) {} |
235 | virtual ~textfmt() {} | 239 | ~textfmt() {} |
236 | virtual void getch(tchar& ch, CStyle& sty); | 240 | void getch(tchar& ch, CStyle& sty); |
237 | }; | 241 | }; |
238 | 242 | ||
239 | class embolden : public CFilter | 243 | class embolden : public CFilter |
240 | { | 244 | { |
241 | public: | 245 | public: |
242 | embolden() {} | 246 | embolden() {} |
243 | virtual ~embolden() {} | 247 | ~embolden() {} |
244 | virtual void getch(tchar& ch, CStyle& sty) | 248 | void getch(tchar& ch, CStyle& sty) |
245 | { | 249 | { |
246 | parent->getch(ch, sty); | 250 | parent->getch(ch, sty); |
247 | sty.setBold(); | 251 | sty.setBold(); |
248 | } | 252 | } |
249 | }; | 253 | }; |
250 | 254 | ||
251 | class remap : public CFilter | 255 | class remap : public CFilter |
252 | { | 256 | { |
253 | tchar q[3]; | 257 | tchar q[3]; |
254 | int offset; | 258 | int offset; |
255 | CStyle currentstyle; | 259 | CStyle currentstyle; |
256 | public: | 260 | public: |
257 | remap() : offset(0) { q[0] = 0; } | 261 | remap() : offset(0) { q[0] = 0; } |
258 | virtual ~remap() {} | 262 | ~remap() {} |
259 | virtual void getch(tchar& ch, CStyle& sty); | 263 | void getch(tchar& ch, CStyle& sty); |
260 | }; | 264 | }; |
261 | 265 | ||
262 | class PeanutFormatter : public CFilter | 266 | class PeanutFormatter : public CFilter |
263 | { | 267 | { |
264 | CStyle currentstyle; | 268 | CStyle currentstyle; |
265 | public: | 269 | public: |
266 | virtual ~PeanutFormatter() {} | 270 | ~PeanutFormatter() {} |
267 | virtual void getch(tchar& ch, CStyle& sty); | 271 | void getch(tchar& ch, CStyle& sty); |
268 | }; | 272 | }; |
269 | 273 | ||
270 | class OnePara : public CFilter | 274 | class OnePara : public CFilter |
271 | { | 275 | { |
272 | tchar m_lastchar; | 276 | tchar m_lastchar; |
273 | public: | 277 | public: |
274 | OnePara() : m_lastchar(0) {} | 278 | OnePara() : m_lastchar(0) {} |
275 | virtual ~OnePara() {} | 279 | ~OnePara() {} |
276 | virtual void getch(tchar& ch, CStyle& sty); | 280 | void getch(tchar& ch, CStyle& sty); |
281 | }; | ||
282 | |||
283 | class DePluck : public CFilter | ||
284 | { | ||
285 | tchar* nextpart; | ||
286 | tchar m_buffer; | ||
287 | int m_buffed; | ||
288 | int m_current; | ||
289 | bool m_debuff; | ||
290 | CStyle m_laststyle; | ||
291 | public: | ||
292 | DePluck(tchar* t) : nextpart(t), m_buffer(0), m_buffed(0), m_current(0), m_debuff(false) {} | ||
293 | ~DePluck() {} | ||
294 | void getch(tchar& ch, CStyle& sty); | ||
277 | }; | 295 | }; |
278 | 296 | ||
279 | #ifdef REPALM | 297 | #ifdef REPALM |
280 | class repalm : public CFilter | 298 | class repalm : public CFilter |
281 | { | 299 | { |
282 | public: | 300 | public: |
283 | virtual ~repalm() {} | 301 | ~repalm() {} |
284 | virtual void getch(tchar& ch, CStyle& sty); | 302 | void getch(tchar& ch, CStyle& sty); |
285 | }; | 303 | }; |
286 | #endif | 304 | #endif |
305 | |||
306 | class FullJust : public CFilter | ||
307 | { | ||
308 | public: | ||
309 | void getch(tchar& ch, CStyle& sty) | ||
310 | { | ||
311 | parent->getch(ch, sty); | ||
312 | if (sty.getJustify() == m_AlignLeft) sty.setFullJustify(); | ||
313 | } | ||
314 | }; | ||
315 | /* | ||
316 | class AddSpace : public CFilter | ||
317 | { | ||
318 | unsigned char m_espc; | ||
319 | public: | ||
320 | AddSpace(unsigned char s) : m_espc(s) {} | ||
321 | void getch(tchar& ch, CStyle& sty) | ||
322 | { | ||
323 | parent->getch(ch, sty); | ||
324 | sty.setExtraSpace(m_espc); | ||
325 | } | ||
326 | }; | ||
327 | */ | ||
287 | #endif | 328 | #endif |
diff --git a/noncore/apps/opie-reader/Filedata.h b/noncore/apps/opie-reader/Filedata.h index f920238..096dd31 100644 --- a/noncore/apps/opie-reader/Filedata.h +++ b/noncore/apps/opie-reader/Filedata.h | |||
@@ -1,51 +1,51 @@ | |||
1 | #ifndef __FILEDATA_H | 1 | #ifndef __FILEDATA_H |
2 | #define __FILEDATA_H | 2 | #define __FILEDATA_H |
3 | 3 | ||
4 | #include <time.h> | 4 | #include <time.h> |
5 | 5 | ||
6 | class CFiledata | 6 | class CFiledata |
7 | { | 7 | { |
8 | unsigned char* data; | 8 | unsigned char* data; |
9 | bool m_own; | 9 | bool m_own; |
10 | public: | 10 | public: |
11 | CFiledata(tchar* d) | 11 | CFiledata(tchar* d) |
12 | { | 12 | { |
13 | data = (unsigned char*)d; | 13 | data = (unsigned char*)d; |
14 | m_own = false; | 14 | m_own = false; |
15 | } | 15 | } |
16 | CFiledata(time_t dt, tchar* nm) | 16 | CFiledata(time_t dt, tchar* nm) |
17 | { | 17 | { |
18 | int nlen = ustrlen(nm)+1; | 18 | int nlen = ustrlen(nm)+1; |
19 | data = new unsigned char[sizeof(time_t)+sizeof(tchar)*nlen]; | 19 | data = new unsigned char[sizeof(time_t)+sizeof(tchar)*nlen]; |
20 | *((time_t *)data) = dt; | 20 | *((time_t *)data) = dt; |
21 | memcpy(data+sizeof(time_t), nm, sizeof(tchar)*nlen); | 21 | memcpy(data+sizeof(time_t), nm, sizeof(tchar)*nlen); |
22 | m_own = true; | 22 | m_own = true; |
23 | } | 23 | } |
24 | ~CFiledata() | 24 | ~CFiledata() |
25 | { | 25 | { |
26 | if (m_own && data != NULL) | 26 | if (m_own && data != NULL) |
27 | { | 27 | { |
28 | delete [] data; | 28 | delete [] data; |
29 | qDebug("~Filedata: deleting"); | 29 | // qDebug("~Filedata: deleting"); |
30 | } | 30 | } |
31 | else | 31 | else |
32 | { | 32 | { |
33 | qDebug("~Filedata: not deleting"); | 33 | // qDebug("~Filedata: not deleting"); |
34 | } | 34 | } |
35 | } | 35 | } |
36 | tchar* name() const { return (tchar*)(data+sizeof(time_t)); } | 36 | tchar* name() const { return (tchar*)(data+sizeof(time_t)); } |
37 | time_t date() { return *((time_t *)data); } | 37 | time_t date() { return *((time_t *)data); } |
38 | void setdate(time_t _t) { *((time_t *)data) = _t; } | 38 | void setdate(time_t _t) { *((time_t *)data) = _t; } |
39 | unsigned char* content() { return data; } | 39 | unsigned char* content() { return data; } |
40 | size_t length() const { return sizeof(time_t)+sizeof(tchar)*(ustrlen(name())+1); } | 40 | size_t length() const { return sizeof(time_t)+sizeof(tchar)*(ustrlen(name())+1); } |
41 | bool operator==(const CFiledata& rhs) | 41 | bool operator==(const CFiledata& rhs) |
42 | { | 42 | { |
43 | return ((length() == rhs.length()) && (memcmp(data, rhs.data, length()) == 0)); | 43 | return ((length() == rhs.length()) && (memcmp(data, rhs.data, length()) == 0)); |
44 | } | 44 | } |
45 | bool samename(const CFiledata& rhs) | 45 | bool samename(const CFiledata& rhs) |
46 | { | 46 | { |
47 | return (ustrcmp((tchar *)(data+sizeof(time_t)),(tchar *)(rhs.data+sizeof(time_t))) == 0); | 47 | return (ustrcmp((tchar *)(data+sizeof(time_t)),(tchar *)(rhs.data+sizeof(time_t))) == 0); |
48 | } | 48 | } |
49 | }; | 49 | }; |
50 | 50 | ||
51 | #endif | 51 | #endif |
diff --git a/noncore/apps/opie-reader/FontControl.cpp b/noncore/apps/opie-reader/FontControl.cpp index f0ed98b..e03bf64 100644 --- a/noncore/apps/opie-reader/FontControl.cpp +++ b/noncore/apps/opie-reader/FontControl.cpp | |||
@@ -1,37 +1,60 @@ | |||
1 | #include "opie.h" | 1 | #include "opie.h" |
2 | #include "useqpe.h" | ||
2 | #include "FontControl.h" | 3 | #include "FontControl.h" |
3 | 4 | ||
5 | int FontControl::gzoom() | ||
6 | { | ||
7 | int ret; | ||
8 | if (m_size == g_size) | ||
9 | { | ||
10 | ret = m_fontsizes[m_size]*m_basesize; | ||
11 | } | ||
12 | else if (g_size < 0) | ||
13 | { | ||
14 | int f = -g_size; | ||
15 | ret = (m_fontsizes[0]*m_basesize) >> (f/2); | ||
16 | if (f%2) ret = (2*ret/3); | ||
17 | } | ||
18 | else | ||
19 | { | ||
20 | int f = g_size - m_maxsize + 1; | ||
21 | ret = (m_fontsizes[m_maxsize-1]*m_basesize) << (f/2); | ||
22 | if (f%2) ret = (3*ret/2); | ||
23 | } | ||
24 | return ret; | ||
25 | } | ||
26 | |||
4 | bool FontControl::ChangeFont(QString& n, int tgt) | 27 | bool FontControl::ChangeFont(QString& n, int tgt) |
5 | { | 28 | { |
6 | QValueList<int>::Iterator it; | 29 | QValueList<int>::Iterator it; |
7 | QFontDatabase fdb; | 30 | QFontDatabase fdb; |
8 | QValueList<int> sizes = fdb.pointSizes(n); | 31 | QValueList<int> sizes = fdb.pointSizes(n); |
9 | if (sizes.count() == 0) | 32 | if (sizes.count() == 0) |
10 | { | 33 | { |
11 | return false; | 34 | return false; |
12 | } | 35 | } |
13 | else | 36 | else |
14 | { | 37 | { |
15 | m_fontname = n; | 38 | m_fontname = n; |
16 | m_maxsize = sizes.count(); | 39 | m_maxsize = sizes.count(); |
17 | if (m_fontsizes != NULL) delete [] m_fontsizes; | 40 | if (m_fontsizes != NULL) delete [] m_fontsizes; |
18 | m_fontsizes = new int[m_maxsize]; | 41 | m_fontsizes = new int[m_maxsize]; |
19 | uint i = 0; | 42 | uint i = 0; |
20 | uint best = 0; | 43 | uint best = 0; |
21 | for (it = sizes.begin(); it != sizes.end(); it++) | 44 | for (it = sizes.begin(); it != sizes.end(); it++) |
22 | { | 45 | { |
23 | #ifdef OPIE | 46 | #if defined(OPIE) || !defined(USEQPE) |
24 | m_fontsizes[i] = (*it); | 47 | m_fontsizes[i] = (*it); |
25 | #else | 48 | #else |
26 | m_fontsizes[i] = (*it)/10; | 49 | m_fontsizes[i] = (*it)/10; |
27 | #endif | 50 | #endif |
28 | if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best])) | 51 | if (abs(tgt-m_fontsizes[i]) < abs(tgt-m_fontsizes[best])) |
29 | { | 52 | { |
30 | best = i; | 53 | best = i; |
31 | } | 54 | } |
32 | i++; | 55 | i++; |
33 | } | 56 | } |
34 | m_size = best; | 57 | g_size = m_size = best; |
35 | } | 58 | } |
36 | return true; | 59 | return true; |
37 | } | 60 | } |
diff --git a/noncore/apps/opie-reader/FontControl.h b/noncore/apps/opie-reader/FontControl.h index 02049d0..5681496 100644 --- a/noncore/apps/opie-reader/FontControl.h +++ b/noncore/apps/opie-reader/FontControl.h | |||
@@ -1,104 +1,153 @@ | |||
1 | #ifndef __FONTCONTROL_H | 1 | #ifndef __FONTCONTROL_H |
2 | #define __FONTCONTROL_H | 2 | #define __FONTCONTROL_H |
3 | 3 | ||
4 | #include <qfontdatabase.h> | 4 | #include <qfontdatabase.h> |
5 | #include <qfontmetrics.h> | 5 | #include <qfontmetrics.h> |
6 | #include "StyleConsts.h" | 6 | #include "StyleConsts.h" |
7 | 7 | ||
8 | class FontControl | 8 | class FontControl |
9 | { | 9 | { |
10 | int * m_fontsizes; | 10 | int * m_fontsizes; |
11 | int m_size; | 11 | int m_size, g_size; |
12 | QString m_fontname; | 12 | QString m_fontname; |
13 | QString m_fixedfontname; | ||
13 | int m_maxsize; | 14 | int m_maxsize; |
14 | bool m_hasCourier; | 15 | bool m_hasCourier; |
16 | int m_leading, m_extraspace; | ||
17 | unsigned char m_basesize; | ||
15 | public: | 18 | public: |
19 | void setBaseSize(unsigned char _s) { m_basesize = _s; } | ||
20 | unsigned char getBaseSize() { return m_basesize; } | ||
21 | int gzoom(); | ||
16 | FontControl(QString n = "helvetica", int size = 10) | 22 | FontControl(QString n = "helvetica", int size = 10) |
17 | : | 23 | : |
18 | m_fontsizes(NULL), m_hasCourier(false) | 24 | m_fontsizes(NULL), m_hasCourier(false), m_leading(0), m_extraspace(0) |
19 | { | 25 | { |
20 | ChangeFont(n, size); | 26 | ChangeFont(n, size); |
21 | } | 27 | } |
22 | ~FontControl() | 28 | ~FontControl() |
23 | { | 29 | { |
24 | if (m_fontsizes != NULL) delete [] m_fontsizes; | 30 | if (m_fontsizes != NULL) delete [] m_fontsizes; |
25 | } | 31 | } |
26 | void hasCourier(bool _b) { m_hasCourier = _b; } | 32 | void hasCourier(bool _b, const QString& _nm) |
33 | { | ||
34 | m_hasCourier = _b; | ||
35 | m_fixedfontname = _nm; | ||
36 | } | ||
37 | QString& fixedfontname() { return m_fixedfontname; } | ||
27 | bool hasCourier() { return m_hasCourier; } | 38 | bool hasCourier() { return m_hasCourier; } |
28 | QString name() { return m_fontname; } | 39 | QString name() { return m_fontname; } |
29 | int currentsize() { return m_fontsizes[m_size]; } | 40 | int currentsize() { return m_fontsizes[m_size]; } |
30 | int getsize(CStyle size) | 41 | int getsize(const CStyle& size) |
31 | { | 42 | { |
32 | int tgt = m_size+size.getFontSize(); | 43 | int tgt = m_size+size.getFontSize(); |
33 | if (tgt < 0) | 44 | if (tgt < 0) |
34 | { | 45 | { |
35 | tgt = 0; | 46 | tgt = 0; |
36 | } | 47 | } |
37 | if (tgt >= m_maxsize) | 48 | if (tgt >= m_maxsize) |
38 | { | 49 | { |
39 | tgt = m_maxsize - 1; | 50 | tgt = m_maxsize - 1; |
40 | } | 51 | } |
41 | return m_fontsizes[tgt]; | 52 | return m_fontsizes[tgt]; |
42 | } | 53 | } |
43 | int ascent() | 54 | int ascent() |
44 | { | 55 | { |
45 | QFont f(name(), currentsize()); | 56 | QFont f(name(), currentsize()); |
46 | QFontMetrics fm(f); | 57 | QFontMetrics fm(f); |
47 | return fm.ascent(); | 58 | return fm.ascent(); |
48 | } | 59 | } |
49 | int ascent(CStyle ch) | 60 | int ascent(const CStyle& ch) |
50 | { | 61 | { |
51 | QFont f(name(), getsize(ch)); | 62 | QFont f(name(), getsize(ch)); |
52 | QFontMetrics fm(f); | 63 | QFontMetrics fm(f); |
53 | return fm.ascent(); | 64 | return fm.ascent(); |
54 | } | 65 | } |
55 | int descent() | 66 | int descent() |
56 | { | 67 | { |
57 | QFont f(name(), currentsize()); | 68 | QFont f(name(), currentsize()); |
58 | QFontMetrics fm(f); | 69 | QFontMetrics fm(f); |
59 | return fm.descent(); | 70 | return fm.descent(); |
60 | } | 71 | } |
61 | int descent(CStyle ch) | 72 | int descent(const CStyle& ch) |
62 | { | 73 | { |
63 | QFont f(name(), getsize(ch)); | 74 | QFont f(name(), getsize(ch)); |
64 | QFontMetrics fm(f); | 75 | QFontMetrics fm(f); |
65 | return fm.descent(); | 76 | return fm.descent(); |
66 | } | 77 | } |
67 | int lineSpacing() | 78 | int lineSpacing() |
68 | { | 79 | { |
69 | QFont f(name(), currentsize()); | 80 | QFont f(name(), currentsize()); |
70 | QFontMetrics fm(f); | 81 | QFontMetrics fm(f); |
71 | return fm.lineSpacing(); | 82 | return fm.lineSpacing(); |
72 | } | 83 | } |
73 | int lineSpacing(CStyle ch) | 84 | int lineSpacing(const CStyle& ch) |
74 | { | 85 | { |
75 | QFont f(name(), getsize(ch)); | 86 | QFont f(name(), getsize(ch)); |
76 | QFontMetrics fm(f); | 87 | QFontMetrics fm(f); |
77 | return fm.lineSpacing(); | 88 | return fm.lineSpacing(); |
78 | } | 89 | } |
79 | bool decreasesize() | 90 | bool decreasesize() |
80 | { | 91 | { |
92 | /* | ||
81 | if (--m_size < 0) | 93 | if (--m_size < 0) |
82 | { | 94 | { |
83 | m_size = 0; | 95 | m_size = 0; |
84 | return false; | 96 | return false; |
85 | } | 97 | } |
86 | else return true; | 98 | else return true; |
99 | */ | ||
100 | if (g_size-- == m_size) | ||
101 | { | ||
102 | if (--m_size < 0) | ||
103 | { | ||
104 | m_size = 0; | ||
105 | } | ||
106 | } | ||
107 | // qDebug("Font:%d Graphics:%d", m_size, g_size); | ||
108 | return true; | ||
87 | } | 109 | } |
88 | bool increasesize() | 110 | bool increasesize() |
89 | { | 111 | { |
112 | /* | ||
90 | if (++m_size >= m_maxsize) | 113 | if (++m_size >= m_maxsize) |
91 | { | 114 | { |
92 | m_size = m_maxsize - 1; | 115 | m_size = m_maxsize - 1; |
93 | return false; | 116 | return false; |
94 | } | 117 | } |
95 | else return true; | 118 | else return true; |
119 | */ | ||
120 | if (g_size++ == m_size) | ||
121 | { | ||
122 | if (++m_size >= m_maxsize) | ||
123 | { | ||
124 | m_size = m_maxsize - 1; | ||
125 | } | ||
126 | } | ||
127 | // qDebug("Font:%d Graphics:%d", m_size, g_size); | ||
128 | return true; | ||
96 | } | 129 | } |
97 | bool ChangeFont(QString& n) | 130 | bool ChangeFont(QString& n) |
98 | { | 131 | { |
99 | return ChangeFont(n, currentsize()); | 132 | return ChangeFont(n, currentsize()); |
100 | } | 133 | } |
101 | bool ChangeFont(QString& n, int tgt); | 134 | bool ChangeFont(QString& n, int tgt); |
135 | void setlead(int _lead) | ||
136 | { | ||
137 | m_leading = _lead; | ||
138 | } | ||
139 | int getlead() | ||
140 | { | ||
141 | return m_leading; | ||
142 | } | ||
143 | void setextraspace(int _lead) | ||
144 | { | ||
145 | m_extraspace = _lead; | ||
146 | } | ||
147 | int getextraspace() | ||
148 | { | ||
149 | return m_extraspace; | ||
150 | } | ||
102 | }; | 151 | }; |
103 | 152 | ||
104 | #endif | 153 | #endif |
diff --git a/noncore/apps/opie-reader/Navigation.cpp b/noncore/apps/opie-reader/Navigation.cpp index 4f11887..36e33b4 100644 --- a/noncore/apps/opie-reader/Navigation.cpp +++ b/noncore/apps/opie-reader/Navigation.cpp | |||
@@ -1,100 +1,122 @@ | |||
1 | #include "Navigation.h" | 1 | #ifdef _WINDOWS |
2 | |||
3 | #include <string.h> | 2 | #include <string.h> |
3 | #endif | ||
4 | #include "Navigation.h" | ||
5 | //#include <stdio.h> | ||
4 | 6 | ||
7 | /* | ||
8 | void saveposn(size_t posn) | ||
9 | save/push position to history buffer for future use of back() function | ||
10 | */ | ||
5 | void CNavigation::saveposn(size_t posn) | 11 | void CNavigation::saveposn(size_t posn) |
6 | { | 12 | { |
7 | // qDebug("Saved:%u [%u,%u,%u]", posn, historystart, historycurrent, historyend); | 13 | //printf("saving position %u, depth %u\n",posn,historycurrent); |
8 | historycurrent = historyend = (historycurrent+1)%NAVIGATION_HISTORY_SIZE; | ||
9 | history[historycurrent] = posn; | 14 | history[historycurrent] = posn; |
10 | if (historystart == historyend) historystart = (historystart+1)%NAVIGATION_HISTORY_SIZE; | 15 | historycurrent=(historycurrent+1)%NAVIGATION_HISTORY_SIZE; |
11 | // qDebug("Saved:%u [%u,%u,%u]", posn, historystart, historycurrent, historyend); | 16 | if (historycurrent==historystart) |
17 | // circular buffer full, forget oldest record | ||
18 | historystart=(historystart+1)%NAVIGATION_HISTORY_SIZE; | ||
19 | // no forward possible after saveposn | ||
20 | historyend = historycurrent; | ||
12 | } | 21 | } |
13 | 22 | ||
14 | bool CNavigation::forward(size_t& loc) | 23 | /* |
24 | void writeposn(size_t posn) | ||
25 | overwrite current (unused) position | ||
26 | useful for saving current position before using back button | ||
27 | */ | ||
28 | void CNavigation::writeposn(size_t posn) | ||
15 | { | 29 | { |
16 | if (historycurrent != historyend) | 30 | //printf("witing position %u, depth %u\n",posn,historycurrent); |
17 | { | 31 | history[historycurrent] = posn; |
18 | historycurrent = (historycurrent + 1)%NAVIGATION_HISTORY_SIZE; | ||
19 | loc = history[historycurrent]; | ||
20 | //qDebug("Forward:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend); | ||
21 | return true; | ||
22 | } | ||
23 | else | ||
24 | { | ||
25 | return false; | ||
26 | } | ||
27 | } | 32 | } |
28 | 33 | ||
29 | bool CNavigation::back(size_t& loc) | 34 | /* |
35 | bool back(size_t& posn) | ||
36 | go back in history | ||
37 | restore last position saved with saveposn() and return true | ||
38 | return false if there is nothing saved in history | ||
39 | */ | ||
40 | bool CNavigation::back(size_t& posn) | ||
30 | { | 41 | { |
31 | if (historyend != historystart) | 42 | if (historycurrent!=historystart) { |
32 | { | 43 | // buffer is not empty |
33 | //qDebug("Back:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend); | 44 | if (historycurrent==0) |
34 | if (historycurrent == historyend && history[historycurrent] != loc) | 45 | historycurrent=NAVIGATION_HISTORY_SIZE-1; |
35 | { | 46 | else |
36 | historyend = (historyend+1) % NAVIGATION_HISTORY_SIZE; | 47 | historycurrent--; |
37 | history[historyend] = loc; | 48 | posn=history[historycurrent]; |
38 | } | 49 | //printf("back(): going back to %u depth %u\n",posn,historycurrent); |
39 | else | 50 | return true; |
40 | { | 51 | |
41 | size_t sv = historycurrent; | 52 | } else { |
42 | historycurrent = (historycurrent + NAVIGATION_HISTORY_SIZE - 1) % NAVIGATION_HISTORY_SIZE; | 53 | // circular buffer empty |
43 | if (historycurrent == historystart) | 54 | //printf("back(): empty history\n"); |
44 | { | 55 | return false; |
45 | historycurrent = sv; | ||
46 | return false; | ||
47 | } | ||
48 | } | ||
49 | loc = history[historycurrent]; | ||
50 | //qDebug("Back:%u [%u,%u,%u]", loc, historystart, historycurrent, historyend); | ||
51 | return true; | ||
52 | } | ||
53 | else | ||
54 | { | ||
55 | return false; | ||
56 | } | 56 | } |
57 | } | 57 | } |
58 | 58 | ||
59 | #include <stdio.h> | 59 | /* |
60 | bool forward(size_t& posn) | ||
61 | go forward in history, if possible | ||
62 | undo calling of back() | ||
63 | */ | ||
64 | bool CNavigation::forward(size_t& posn) | ||
65 | { | ||
66 | if (historycurrent!=historyend) { | ||
67 | // [historycurrent] = current position | ||
68 | // [historycurrent+1] = position we need | ||
69 | historycurrent=(historycurrent+1)%NAVIGATION_HISTORY_SIZE; | ||
70 | posn = history[historycurrent]; | ||
71 | //printf("forward(): going to position %d\n",posn); | ||
72 | return true; | ||
73 | } else { | ||
74 | //printf("forward(): there is no future :)\n"); | ||
75 | return false; | ||
76 | } | ||
77 | } | ||
60 | 78 | ||
61 | void CNavigation::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) | 79 | void CNavigation::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) |
62 | { | 80 | { |
63 | len = srclen+sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE); | 81 | len = srclen+sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE); |
64 | data = new unsigned char[len]; | 82 | data = new unsigned char[len]; |
65 | unsigned char* p = data; | 83 | unsigned char* p = data; |
66 | memcpy(p, src, srclen); | 84 | memcpy(p, src, srclen); |
67 | p += srclen; | 85 | p += srclen; |
68 | memcpy(p, &historystart, sizeof(size_t)); | 86 | memcpy(p, &historystart, sizeof(size_t)); |
69 | p += sizeof(size_t); | 87 | p += sizeof(size_t); |
70 | memcpy(p, &historyend, sizeof(size_t)); | 88 | memcpy(p, &historyend, sizeof(size_t)); |
71 | p += sizeof(size_t); | 89 | p += sizeof(size_t); |
72 | memcpy(p, &historycurrent, sizeof(size_t)); | 90 | memcpy(p, &historycurrent, sizeof(size_t)); |
73 | p += sizeof(size_t); | 91 | p += sizeof(size_t); |
74 | memcpy(p, history, sizeof(size_t)*NAVIGATION_HISTORY_SIZE); | 92 | memcpy(p, history, sizeof(size_t)*NAVIGATION_HISTORY_SIZE); |
93 | /* | ||
75 | printf("<%u,%u,%u>\n", historystart, historyend, historycurrent); | 94 | printf("<%u,%u,%u>\n", historystart, historyend, historycurrent); |
76 | for (int i = historystart; i <= historyend; i++) | 95 | for (int i = historystart; i <= historyend; i++) |
77 | printf("<%u> ", history[i]); | 96 | printf("<%u> ", history[i]); |
78 | printf("\n"); | 97 | printf("\n"); |
98 | */ | ||
79 | } | 99 | } |
80 | 100 | ||
81 | void CNavigation::putSaveData(unsigned char*& src, unsigned short& srclen) | 101 | void CNavigation::putSaveData(unsigned char*& src, unsigned short& srclen) |
82 | { | 102 | { |
83 | if (srclen >= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE)) | 103 | if (srclen >= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE)) |
84 | { | 104 | { |
85 | unsigned char* p = src; | 105 | unsigned char* p = src; |
86 | memcpy(&historystart, p, sizeof(size_t)); | 106 | memcpy(&historystart, p, sizeof(size_t)); |
87 | p += sizeof(size_t); | 107 | p += sizeof(size_t); |
88 | memcpy(&historyend, p, sizeof(size_t)); | 108 | memcpy(&historyend, p, sizeof(size_t)); |
89 | p += sizeof(size_t); | 109 | p += sizeof(size_t); |
90 | memcpy(&historycurrent, p, sizeof(size_t)); | 110 | memcpy(&historycurrent, p, sizeof(size_t)); |
91 | p += sizeof(size_t); | 111 | p += sizeof(size_t); |
92 | memcpy(history, p, sizeof(size_t)*NAVIGATION_HISTORY_SIZE); | 112 | memcpy(history, p, sizeof(size_t)*NAVIGATION_HISTORY_SIZE); |
93 | src = p + sizeof(size_t)*NAVIGATION_HISTORY_SIZE; | 113 | src = p + sizeof(size_t)*NAVIGATION_HISTORY_SIZE; |
94 | srclen -= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE); | 114 | srclen -= sizeof(size_t)*(3+NAVIGATION_HISTORY_SIZE); |
95 | } | 115 | } |
116 | /* | ||
96 | printf("<%u,%u,%u>\n", historystart, historyend, historycurrent); | 117 | printf("<%u,%u,%u>\n", historystart, historyend, historycurrent); |
97 | for (int i = historystart; i <= historyend; i++) | 118 | for (int i = historystart; i <= historyend; i++) |
98 | printf("<%u> ", history[i]); | 119 | printf("<%u> ", history[i]); |
99 | printf("\n"); | 120 | printf("\n"); |
121 | */ | ||
100 | } | 122 | } |
diff --git a/noncore/apps/opie-reader/Navigation.h b/noncore/apps/opie-reader/Navigation.h index 57fb006..19d7f81 100644 --- a/noncore/apps/opie-reader/Navigation.h +++ b/noncore/apps/opie-reader/Navigation.h | |||
@@ -1,16 +1,18 @@ | |||
1 | #include <string.h> | ||
1 | #include <stdlib.h> | 2 | #include <stdlib.h> |
2 | 3 | ||
3 | const size_t NAVIGATION_HISTORY_SIZE = 32; | 4 | const size_t NAVIGATION_HISTORY_SIZE = 32; |
4 | 5 | ||
5 | class CNavigation | 6 | class CNavigation |
6 | { | 7 | { |
7 | size_t history[NAVIGATION_HISTORY_SIZE]; | 8 | size_t history[NAVIGATION_HISTORY_SIZE]; |
8 | size_t historystart, historyend, historycurrent; | 9 | size_t historystart, historyend, historycurrent; |
9 | public: | 10 | public: |
10 | CNavigation() : historystart(0),historyend(0),historycurrent(0) {} | 11 | CNavigation() : historystart(0),historyend(0),historycurrent(0) {} |
11 | void saveposn(size_t posn); | 12 | void saveposn(size_t posn); |
13 | void writeposn(size_t posn); | ||
12 | bool forward(size_t& loc); | 14 | bool forward(size_t& loc); |
13 | bool back(size_t& loc); | 15 | bool back(size_t& loc); |
14 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen); | 16 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen); |
15 | void putSaveData(unsigned char*& src, unsigned short& srclen); | 17 | void putSaveData(unsigned char*& src, unsigned short& srclen); |
16 | }; | 18 | }; |
diff --git a/noncore/apps/opie-reader/Palm2QImage.cpp b/noncore/apps/opie-reader/Palm2QImage.cpp index 9603877..bf5ece3 100644 --- a/noncore/apps/opie-reader/Palm2QImage.cpp +++ b/noncore/apps/opie-reader/Palm2QImage.cpp | |||
@@ -1,308 +1,309 @@ | |||
1 | /* -*- mode: c; indent-tabs-mode: nil; -*- */ | 1 | /* -*- mode: c; indent-tabs-mode: nil; -*- */ |
2 | #include "useqpe.h" | ||
2 | #include <stdio.h> | 3 | #include <stdio.h> |
3 | #include <stdlib.h> | 4 | #include <stdlib.h> |
4 | #include <string.h> | 5 | #include <string.h> |
5 | #ifndef WINDOWS | 6 | #ifndef _WINDOWS |
6 | #include <unistd.h> /* for link */ | 7 | #include <unistd.h> /* for link */ |
7 | #endif | 8 | #endif |
8 | #include <sys/types.h> | 9 | #include <sys/types.h> |
9 | #include <sys/stat.h> | 10 | #include <sys/stat.h> |
10 | #include <stdarg.h> | 11 | #include <stdarg.h> |
11 | 12 | ||
12 | #include <qimage.h> | 13 | #include <qimage.h> |
13 | 14 | ||
14 | /***********************************************************************/ | 15 | /***********************************************************************/ |
15 | /***********************************************************************/ | 16 | /***********************************************************************/ |
16 | /***** *****/ | 17 | /***** *****/ |
17 | /***** Code to decode the Palm image format to JPEG *****/ | 18 | /***** Code to decode the Palm image format to JPEG *****/ |
18 | /***** *****/ | 19 | /***** *****/ |
19 | /***********************************************************************/ | 20 | /***********************************************************************/ |
20 | /***********************************************************************/ | 21 | /***********************************************************************/ |
21 | 22 | ||
22 | #define READ_BIGENDIAN_SHORT(p) (((p)[0] << 8)|((p)[1])) | 23 | #define READ_BIGENDIAN_SHORT(p) (((p)[0] << 8)|((p)[1])) |
23 | #define READ_BIGENDIAN_LONG(p) (((p)[0] << 24)|((p)[1] << 16)|((p)[2] << 8)|((p)[3])) | 24 | #define READ_BIGENDIAN_LONG(p) (((p)[0] << 24)|((p)[1] << 16)|((p)[2] << 8)|((p)[3])) |
24 | 25 | ||
25 | #define PALM_IS_COMPRESSED_FLAG 0x8000 | 26 | #define PALM_IS_COMPRESSED_FLAG 0x8000 |
26 | #define PALM_HAS_COLORMAP_FLAG 0x4000 | 27 | #define PALM_HAS_COLORMAP_FLAG 0x4000 |
27 | #define PALM_HAS_TRANSPARENCY_FLAG 0x2000 | 28 | #define PALM_HAS_TRANSPARENCY_FLAG 0x2000 |
28 | #define PALM_DIRECT_COLOR_FLAG 0x0400 | 29 | #define PALM_DIRECT_COLOR_FLAG 0x0400 |
29 | #define PALM_4_BYTE_FIELD_FLAG 0x0200 | 30 | #define PALM_4_BYTE_FIELD_FLAG 0x0200 |
30 | 31 | ||
31 | #define PALM_COMPRESSION_SCANLINE 0x00 | 32 | #define PALM_COMPRESSION_SCANLINE 0x00 |
32 | #define PALM_COMPRESSION_RLE 0x01 | 33 | #define PALM_COMPRESSION_RLE 0x01 |
33 | #define PALM_COMPRESSION_PACKBITS 0x02 | 34 | #define PALM_COMPRESSION_PACKBITS 0x02 |
34 | #define PALM_COMPRESSION_NONE 0xFF | 35 | #define PALM_COMPRESSION_NONE 0xFF |
35 | 36 | ||
36 | #define PALM_COLORMAP_SIZE 232 | 37 | #define PALM_COLORMAP_SIZE 232 |
37 | 38 | ||
38 | typedef struct { | 39 | typedef struct { |
39 | unsigned char red; | 40 | unsigned char red; |
40 | unsigned char green; | 41 | unsigned char green; |
41 | unsigned char blue; | 42 | unsigned char blue; |
42 | } ColorMapEntry; | 43 | } ColorMapEntry; |
43 | 44 | ||
44 | static ColorMapEntry Palm8BitColormap[] = { | 45 | static ColorMapEntry Palm8BitColormap[] = { |
45 | { 255, 255, 255 }, { 255, 204, 255 }, { 255, 153, 255 }, { 255, 102, 255 }, | 46 | { 255, 255, 255 }, { 255, 204, 255 }, { 255, 153, 255 }, { 255, 102, 255 }, |
46 | { 255, 51, 255 }, { 255, 0, 255 }, { 255, 255, 204 }, { 255, 204, 204 }, | 47 | { 255, 51, 255 }, { 255, 0, 255 }, { 255, 255, 204 }, { 255, 204, 204 }, |
47 | { 255, 153, 204 }, { 255, 102, 204 }, { 255, 51, 204 }, { 255, 0, 204 }, | 48 | { 255, 153, 204 }, { 255, 102, 204 }, { 255, 51, 204 }, { 255, 0, 204 }, |
48 | { 255, 255, 153 }, { 255, 204, 153 }, { 255, 153, 153 }, { 255, 102, 153 }, | 49 | { 255, 255, 153 }, { 255, 204, 153 }, { 255, 153, 153 }, { 255, 102, 153 }, |
49 | { 255, 51, 153 }, { 255, 0, 153 }, { 204, 255, 255 }, { 204, 204, 255 }, | 50 | { 255, 51, 153 }, { 255, 0, 153 }, { 204, 255, 255 }, { 204, 204, 255 }, |
50 | { 204, 153, 255 }, { 204, 102, 255 }, { 204, 51, 255 }, { 204, 0, 255 }, | 51 | { 204, 153, 255 }, { 204, 102, 255 }, { 204, 51, 255 }, { 204, 0, 255 }, |
51 | { 204, 255, 204 }, { 204, 204, 204 }, { 204, 153, 204 }, { 204, 102, 204 }, | 52 | { 204, 255, 204 }, { 204, 204, 204 }, { 204, 153, 204 }, { 204, 102, 204 }, |
52 | { 204, 51, 204 }, { 204, 0, 204 }, { 204, 255, 153 }, { 204, 204, 153 }, | 53 | { 204, 51, 204 }, { 204, 0, 204 }, { 204, 255, 153 }, { 204, 204, 153 }, |
53 | { 204, 153, 153 }, { 204, 102, 153 }, { 204, 51, 153 }, { 204, 0, 153 }, | 54 | { 204, 153, 153 }, { 204, 102, 153 }, { 204, 51, 153 }, { 204, 0, 153 }, |
54 | { 153, 255, 255 }, { 153, 204, 255 }, { 153, 153, 255 }, { 153, 102, 255 }, | 55 | { 153, 255, 255 }, { 153, 204, 255 }, { 153, 153, 255 }, { 153, 102, 255 }, |
55 | { 153, 51, 255 }, { 153, 0, 255 }, { 153, 255, 204 }, { 153, 204, 204 }, | 56 | { 153, 51, 255 }, { 153, 0, 255 }, { 153, 255, 204 }, { 153, 204, 204 }, |
56 | { 153, 153, 204 }, { 153, 102, 204 }, { 153, 51, 204 }, { 153, 0, 204 }, | 57 | { 153, 153, 204 }, { 153, 102, 204 }, { 153, 51, 204 }, { 153, 0, 204 }, |
57 | { 153, 255, 153 }, { 153, 204, 153 }, { 153, 153, 153 }, { 153, 102, 153 }, | 58 | { 153, 255, 153 }, { 153, 204, 153 }, { 153, 153, 153 }, { 153, 102, 153 }, |
58 | { 153, 51, 153 }, { 153, 0, 153 }, { 102, 255, 255 }, { 102, 204, 255 }, | 59 | { 153, 51, 153 }, { 153, 0, 153 }, { 102, 255, 255 }, { 102, 204, 255 }, |
59 | { 102, 153, 255 }, { 102, 102, 255 }, { 102, 51, 255 }, { 102, 0, 255 }, | 60 | { 102, 153, 255 }, { 102, 102, 255 }, { 102, 51, 255 }, { 102, 0, 255 }, |
60 | { 102, 255, 204 }, { 102, 204, 204 }, { 102, 153, 204 }, { 102, 102, 204 }, | 61 | { 102, 255, 204 }, { 102, 204, 204 }, { 102, 153, 204 }, { 102, 102, 204 }, |
61 | { 102, 51, 204 }, { 102, 0, 204 }, { 102, 255, 153 }, { 102, 204, 153 }, | 62 | { 102, 51, 204 }, { 102, 0, 204 }, { 102, 255, 153 }, { 102, 204, 153 }, |
62 | { 102, 153, 153 }, { 102, 102, 153 }, { 102, 51, 153 }, { 102, 0, 153 }, | 63 | { 102, 153, 153 }, { 102, 102, 153 }, { 102, 51, 153 }, { 102, 0, 153 }, |
63 | { 51, 255, 255 }, { 51, 204, 255 }, { 51, 153, 255 }, { 51, 102, 255 }, | 64 | { 51, 255, 255 }, { 51, 204, 255 }, { 51, 153, 255 }, { 51, 102, 255 }, |
64 | { 51, 51, 255 }, { 51, 0, 255 }, { 51, 255, 204 }, { 51, 204, 204 }, | 65 | { 51, 51, 255 }, { 51, 0, 255 }, { 51, 255, 204 }, { 51, 204, 204 }, |
65 | { 51, 153, 204 }, { 51, 102, 204 }, { 51, 51, 204 }, { 51, 0, 204 }, | 66 | { 51, 153, 204 }, { 51, 102, 204 }, { 51, 51, 204 }, { 51, 0, 204 }, |
66 | { 51, 255, 153 }, { 51, 204, 153 }, { 51, 153, 153 }, { 51, 102, 153 }, | 67 | { 51, 255, 153 }, { 51, 204, 153 }, { 51, 153, 153 }, { 51, 102, 153 }, |
67 | { 51, 51, 153 }, { 51, 0, 153 }, { 0, 255, 255 }, { 0, 204, 255 }, | 68 | { 51, 51, 153 }, { 51, 0, 153 }, { 0, 255, 255 }, { 0, 204, 255 }, |
68 | { 0, 153, 255 }, { 0, 102, 255 }, { 0, 51, 255 }, { 0, 0, 255 }, | 69 | { 0, 153, 255 }, { 0, 102, 255 }, { 0, 51, 255 }, { 0, 0, 255 }, |
69 | { 0, 255, 204 }, { 0, 204, 204 }, { 0, 153, 204 }, { 0, 102, 204 }, | 70 | { 0, 255, 204 }, { 0, 204, 204 }, { 0, 153, 204 }, { 0, 102, 204 }, |
70 | { 0, 51, 204 }, { 0, 0, 204 }, { 0, 255, 153 }, { 0, 204, 153 }, | 71 | { 0, 51, 204 }, { 0, 0, 204 }, { 0, 255, 153 }, { 0, 204, 153 }, |
71 | { 0, 153, 153 }, { 0, 102, 153 }, { 0, 51, 153 }, { 0, 0, 153 }, | 72 | { 0, 153, 153 }, { 0, 102, 153 }, { 0, 51, 153 }, { 0, 0, 153 }, |
72 | { 255, 255, 102 }, { 255, 204, 102 }, { 255, 153, 102 }, { 255, 102, 102 }, | 73 | { 255, 255, 102 }, { 255, 204, 102 }, { 255, 153, 102 }, { 255, 102, 102 }, |
73 | { 255, 51, 102 }, { 255, 0, 102 }, { 255, 255, 51 }, { 255, 204, 51 }, | 74 | { 255, 51, 102 }, { 255, 0, 102 }, { 255, 255, 51 }, { 255, 204, 51 }, |
74 | { 255, 153, 51 }, { 255, 102, 51 }, { 255, 51, 51 }, { 255, 0, 51 }, | 75 | { 255, 153, 51 }, { 255, 102, 51 }, { 255, 51, 51 }, { 255, 0, 51 }, |
75 | { 255, 255, 0 }, { 255, 204, 0 }, { 255, 153, 0 }, { 255, 102, 0 }, | 76 | { 255, 255, 0 }, { 255, 204, 0 }, { 255, 153, 0 }, { 255, 102, 0 }, |
76 | { 255, 51, 0 }, { 255, 0, 0 }, { 204, 255, 102 }, { 204, 204, 102 }, | 77 | { 255, 51, 0 }, { 255, 0, 0 }, { 204, 255, 102 }, { 204, 204, 102 }, |
77 | { 204, 153, 102 }, { 204, 102, 102 }, { 204, 51, 102 }, { 204, 0, 102 }, | 78 | { 204, 153, 102 }, { 204, 102, 102 }, { 204, 51, 102 }, { 204, 0, 102 }, |
78 | { 204, 255, 51 }, { 204, 204, 51 }, { 204, 153, 51 }, { 204, 102, 51 }, | 79 | { 204, 255, 51 }, { 204, 204, 51 }, { 204, 153, 51 }, { 204, 102, 51 }, |
79 | { 204, 51, 51 }, { 204, 0, 51 }, { 204, 255, 0 }, { 204, 204, 0 }, | 80 | { 204, 51, 51 }, { 204, 0, 51 }, { 204, 255, 0 }, { 204, 204, 0 }, |
80 | { 204, 153, 0 }, { 204, 102, 0 }, { 204, 51, 0 }, { 204, 0, 0 }, | 81 | { 204, 153, 0 }, { 204, 102, 0 }, { 204, 51, 0 }, { 204, 0, 0 }, |
81 | { 153, 255, 102 }, { 153, 204, 102 }, { 153, 153, 102 }, { 153, 102, 102 }, | 82 | { 153, 255, 102 }, { 153, 204, 102 }, { 153, 153, 102 }, { 153, 102, 102 }, |
82 | { 153, 51, 102 }, { 153, 0, 102 }, { 153, 255, 51 }, { 153, 204, 51 }, | 83 | { 153, 51, 102 }, { 153, 0, 102 }, { 153, 255, 51 }, { 153, 204, 51 }, |
83 | { 153, 153, 51 }, { 153, 102, 51 }, { 153, 51, 51 }, { 153, 0, 51 }, | 84 | { 153, 153, 51 }, { 153, 102, 51 }, { 153, 51, 51 }, { 153, 0, 51 }, |
84 | { 153, 255, 0 }, { 153, 204, 0 }, { 153, 153, 0 }, { 153, 102, 0 }, | 85 | { 153, 255, 0 }, { 153, 204, 0 }, { 153, 153, 0 }, { 153, 102, 0 }, |
85 | { 153, 51, 0 }, { 153, 0, 0 }, { 102, 255, 102 }, { 102, 204, 102 }, | 86 | { 153, 51, 0 }, { 153, 0, 0 }, { 102, 255, 102 }, { 102, 204, 102 }, |
86 | { 102, 153, 102 }, { 102, 102, 102 }, { 102, 51, 102 }, { 102, 0, 102 }, | 87 | { 102, 153, 102 }, { 102, 102, 102 }, { 102, 51, 102 }, { 102, 0, 102 }, |
87 | { 102, 255, 51 }, { 102, 204, 51 }, { 102, 153, 51 }, { 102, 102, 51 }, | 88 | { 102, 255, 51 }, { 102, 204, 51 }, { 102, 153, 51 }, { 102, 102, 51 }, |
88 | { 102, 51, 51 }, { 102, 0, 51 }, { 102, 255, 0 }, { 102, 204, 0 }, | 89 | { 102, 51, 51 }, { 102, 0, 51 }, { 102, 255, 0 }, { 102, 204, 0 }, |
89 | { 102, 153, 0 }, { 102, 102, 0 }, { 102, 51, 0 }, { 102, 0, 0 }, | 90 | { 102, 153, 0 }, { 102, 102, 0 }, { 102, 51, 0 }, { 102, 0, 0 }, |
90 | { 51, 255, 102 }, { 51, 204, 102 }, { 51, 153, 102 }, { 51, 102, 102 }, | 91 | { 51, 255, 102 }, { 51, 204, 102 }, { 51, 153, 102 }, { 51, 102, 102 }, |
91 | { 51, 51, 102 }, { 51, 0, 102 }, { 51, 255, 51 }, { 51, 204, 51 }, | 92 | { 51, 51, 102 }, { 51, 0, 102 }, { 51, 255, 51 }, { 51, 204, 51 }, |
92 | { 51, 153, 51 }, { 51, 102, 51 }, { 51, 51, 51 }, { 51, 0, 51 }, | 93 | { 51, 153, 51 }, { 51, 102, 51 }, { 51, 51, 51 }, { 51, 0, 51 }, |
93 | { 51, 255, 0 }, { 51, 204, 0 }, { 51, 153, 0 }, { 51, 102, 0 }, | 94 | { 51, 255, 0 }, { 51, 204, 0 }, { 51, 153, 0 }, { 51, 102, 0 }, |
94 | { 51, 51, 0 }, { 51, 0, 0 }, { 0, 255, 102 }, { 0, 204, 102 }, | 95 | { 51, 51, 0 }, { 51, 0, 0 }, { 0, 255, 102 }, { 0, 204, 102 }, |
95 | { 0, 153, 102 }, { 0, 102, 102 }, { 0, 51, 102 }, { 0, 0, 102 }, | 96 | { 0, 153, 102 }, { 0, 102, 102 }, { 0, 51, 102 }, { 0, 0, 102 }, |
96 | { 0, 255, 51 }, { 0, 204, 51 }, { 0, 153, 51 }, { 0, 102, 51 }, | 97 | { 0, 255, 51 }, { 0, 204, 51 }, { 0, 153, 51 }, { 0, 102, 51 }, |
97 | { 0, 51, 51 }, { 0, 0, 51 }, { 0, 255, 0 }, { 0, 204, 0 }, | 98 | { 0, 51, 51 }, { 0, 0, 51 }, { 0, 255, 0 }, { 0, 204, 0 }, |
98 | { 0, 153, 0 }, { 0, 102, 0 }, { 0, 51, 0 }, { 17, 17, 17 }, | 99 | { 0, 153, 0 }, { 0, 102, 0 }, { 0, 51, 0 }, { 17, 17, 17 }, |
99 | { 34, 34, 34 }, { 68, 68, 68 }, { 85, 85, 85 }, { 119, 119, 119 }, | 100 | { 34, 34, 34 }, { 68, 68, 68 }, { 85, 85, 85 }, { 119, 119, 119 }, |
100 | { 136, 136, 136 }, { 170, 170, 170 }, { 187, 187, 187 }, { 221, 221, 221 }, | 101 | { 136, 136, 136 }, { 170, 170, 170 }, { 187, 187, 187 }, { 221, 221, 221 }, |
101 | { 238, 238, 238 }, { 192, 192, 192 }, { 128, 0, 0 }, { 128, 0, 128 }, | 102 | { 238, 238, 238 }, { 192, 192, 192 }, { 128, 0, 0 }, { 128, 0, 128 }, |
102 | { 0, 128, 0 }, { 0, 128, 128 }, { 0, 0, 0 }, { 0, 0, 0 }, | 103 | { 0, 128, 0 }, { 0, 128, 128 }, { 0, 0, 0 }, { 0, 0, 0 }, |
103 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | 104 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, |
104 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | 105 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, |
105 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | 106 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, |
106 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | 107 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, |
107 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, | 108 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, |
108 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }}; | 109 | { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }}; |
109 | 110 | ||
110 | static ColorMapEntry Palm1BitColormap[] = {{ 255, 255, 255 }, { 0, 0, 0 }}; | 111 | static ColorMapEntry Palm1BitColormap[] = {{ 255, 255, 255 }, { 0, 0, 0 }}; |
111 | 112 | ||
112 | static ColorMapEntry Palm2BitColormap[] = { | 113 | static ColorMapEntry Palm2BitColormap[] = { |
113 | { 255, 255, 255 }, { 192, 192, 192 }, { 128, 128, 128 }, { 0, 0, 0 }}; | 114 | { 255, 255, 255 }, { 192, 192, 192 }, { 128, 128, 128 }, { 0, 0, 0 }}; |
114 | 115 | ||
115 | static ColorMapEntry Palm4BitColormap[] = { | 116 | static ColorMapEntry Palm4BitColormap[] = { |
116 | { 255, 255, 255 }, { 238, 238, 238 }, { 221, 221, 221 }, { 204, 204, 204 }, | 117 | { 255, 255, 255 }, { 238, 238, 238 }, { 221, 221, 221 }, { 204, 204, 204 }, |
117 | { 187, 187, 187 }, { 170, 170, 170 }, { 153, 153, 153 }, { 136, 136, 136 }, | 118 | { 187, 187, 187 }, { 170, 170, 170 }, { 153, 153, 153 }, { 136, 136, 136 }, |
118 | { 119, 119, 119 }, { 102, 102, 102 }, { 85, 85, 85 }, { 68, 68, 68 }, | 119 | { 119, 119, 119 }, { 102, 102, 102 }, { 85, 85, 85 }, { 68, 68, 68 }, |
119 | { 51, 51, 51 }, { 34, 34, 34 }, { 17, 17, 17 }, { 0, 0, 0 }}; | 120 | { 51, 51, 51 }, { 34, 34, 34 }, { 17, 17, 17 }, { 0, 0, 0 }}; |
120 | 121 | ||
121 | QImage* Palm2QImage | 122 | QImage* Palm2QImage |
122 | (unsigned char *image_bytes_in, int byte_count_in) | 123 | (unsigned char *image_bytes_in, int byte_count_in) |
123 | { | 124 | { |
124 | unsigned int width, height, bytes_per_row, flags, next_depth_offset; | 125 | unsigned int width, height, bytes_per_row, flags, next_depth_offset; |
125 | unsigned int bits_per_pixel, version, transparent_index, compression_type, i, j, inval, inbit, mask, incount; | 126 | unsigned int bits_per_pixel, version, transparent_index, compression_type, i, j, inval, inbit, mask, incount; |
126 | unsigned int palm_red_bits, palm_green_bits, palm_blue_bits; | 127 | unsigned int palm_red_bits, palm_green_bits, palm_blue_bits; |
127 | unsigned char *palm_ptr, *x_ptr, *imagedata, *inbyte, *rowbuf, *lastrow, | 128 | unsigned char *palm_ptr, *x_ptr, *imagedata, *inbyte, *rowbuf, *lastrow, |
128 | *imagedatastart, *palmimage; | 129 | *imagedatastart, *palmimage; |
129 | ColorMapEntry *colormap; | 130 | ColorMapEntry *colormap; |
130 | 131 | ||
131 | palmimage = image_bytes_in; | 132 | palmimage = image_bytes_in; |
132 | width = READ_BIGENDIAN_SHORT(palmimage + 0); | 133 | width = READ_BIGENDIAN_SHORT(palmimage + 0); |
133 | height = READ_BIGENDIAN_SHORT(palmimage + 2); | 134 | height = READ_BIGENDIAN_SHORT(palmimage + 2); |
134 | bytes_per_row = READ_BIGENDIAN_SHORT(palmimage + 4); | 135 | bytes_per_row = READ_BIGENDIAN_SHORT(palmimage + 4); |
135 | flags = READ_BIGENDIAN_SHORT(palmimage + 6); | 136 | flags = READ_BIGENDIAN_SHORT(palmimage + 6); |
136 | bits_per_pixel = palmimage[8]; | 137 | bits_per_pixel = palmimage[8]; |
137 | version = palmimage[9]; | 138 | version = palmimage[9]; |
138 | next_depth_offset = READ_BIGENDIAN_SHORT(palmimage + 10); | 139 | next_depth_offset = READ_BIGENDIAN_SHORT(palmimage + 10); |
139 | transparent_index = palmimage[12]; | 140 | transparent_index = palmimage[12]; |
140 | compression_type = palmimage[13]; | 141 | compression_type = palmimage[13]; |
141 | /* bytes 14 and 15 are reserved by Palm and always 0 */ | 142 | /* bytes 14 and 15 are reserved by Palm and always 0 */ |
142 | 143 | ||
143 | #if 0 | 144 | #if 0 |
144 | // qDebug ("Palm image is %dx%d, %d bpp, version %d, flags 0x%x, compression %d", width, height, bits_per_pixel, version, flags, compression_type); | 145 | // qDebug ("Palm image is %dx%d, %d bpp, version %d, flags 0x%x, compression %d", width, height, bits_per_pixel, version, flags, compression_type); |
145 | #endif | 146 | #endif |
146 | 147 | ||
147 | if (compression_type == PALM_COMPRESSION_PACKBITS) { | 148 | if (compression_type == PALM_COMPRESSION_PACKBITS) { |
148 | // qDebug ("Image uses packbits compression; not yet supported"); | 149 | // qDebug ("Image uses packbits compression; not yet supported"); |
149 | return NULL; | 150 | return NULL; |
150 | } else if ((compression_type != PALM_COMPRESSION_NONE) && | 151 | } else if ((compression_type != PALM_COMPRESSION_NONE) && |
151 | (compression_type != PALM_COMPRESSION_RLE) && | 152 | (compression_type != PALM_COMPRESSION_RLE) && |
152 | (compression_type != PALM_COMPRESSION_SCANLINE)) { | 153 | (compression_type != PALM_COMPRESSION_SCANLINE)) { |
153 | // qDebug ("Image uses unknown compression, code 0x%x", compression_type); | 154 | // qDebug ("Image uses unknown compression, code 0x%x", compression_type); |
154 | return NULL; | 155 | return NULL; |
155 | } | 156 | } |
156 | 157 | ||
157 | /* as of PalmOS 4.0, there are 6 different kinds of Palm pixmaps: | 158 | /* as of PalmOS 4.0, there are 6 different kinds of Palm pixmaps: |
158 | 159 | ||
159 | 1, 2, or 4 bit grayscale | 160 | 1, 2, or 4 bit grayscale |
160 | 8-bit StaticColor using the Palm standard colormap | 161 | 8-bit StaticColor using the Palm standard colormap |
161 | 8-bit PseudoColor using a user-specified colormap | 162 | 8-bit PseudoColor using a user-specified colormap |
162 | 16-bit DirectColor using 5 bits for red, 6 for green, and 5 for blue | 163 | 16-bit DirectColor using 5 bits for red, 6 for green, and 5 for blue |
163 | 164 | ||
164 | Each of these can be compressed with one of four compression schemes, | 165 | Each of these can be compressed with one of four compression schemes, |
165 | "RLE", "Scanline", "PackBits", or none. | 166 | "RLE", "Scanline", "PackBits", or none. |
166 | 167 | ||
167 | We begin by constructing the colormap. | 168 | We begin by constructing the colormap. |
168 | */ | 169 | */ |
169 | 170 | ||
170 | if (flags & PALM_HAS_COLORMAP_FLAG) { | 171 | if (flags & PALM_HAS_COLORMAP_FLAG) { |
171 | // qDebug("Palm images with custom colormaps are not currently supported.\n"); | 172 | // qDebug("Palm images with custom colormaps are not currently supported.\n"); |
172 | return NULL; | 173 | return NULL; |
173 | } else if (bits_per_pixel == 1) { | 174 | } else if (bits_per_pixel == 1) { |
174 | colormap = Palm1BitColormap; | 175 | colormap = Palm1BitColormap; |
175 | imagedatastart = palmimage + 16; | 176 | imagedatastart = palmimage + 16; |
176 | } else if (bits_per_pixel == 2) { | 177 | } else if (bits_per_pixel == 2) { |
177 | colormap = Palm2BitColormap; | 178 | colormap = Palm2BitColormap; |
178 | imagedatastart = palmimage + 16; | 179 | imagedatastart = palmimage + 16; |
179 | } else if (bits_per_pixel == 4) { | 180 | } else if (bits_per_pixel == 4) { |
180 | colormap = Palm4BitColormap; | 181 | colormap = Palm4BitColormap; |
181 | imagedatastart = palmimage + 16; | 182 | imagedatastart = palmimage + 16; |
182 | } else if (bits_per_pixel == 8) { | 183 | } else if (bits_per_pixel == 8) { |
183 | colormap = Palm8BitColormap; | 184 | colormap = Palm8BitColormap; |
184 | imagedatastart = palmimage + 16; | 185 | imagedatastart = palmimage + 16; |
185 | } else if (bits_per_pixel == 16 && (flags & PALM_DIRECT_COLOR_FLAG)) { | 186 | } else if (bits_per_pixel == 16 && (flags & PALM_DIRECT_COLOR_FLAG)) { |
186 | colormap = NULL; | 187 | colormap = NULL; |
187 | palm_red_bits = palmimage[16]; | 188 | palm_red_bits = palmimage[16]; |
188 | palm_green_bits = palmimage[17]; | 189 | palm_green_bits = palmimage[17]; |
189 | palm_blue_bits = palmimage[18]; | 190 | palm_blue_bits = palmimage[18]; |
190 | // qDebug("Bits:%d, %d, %d", palm_red_bits, palm_green_bits, palm_blue_bits); | 191 | // qDebug("Bits:%d, %d, %d", palm_red_bits, palm_green_bits, palm_blue_bits); |
191 | if (palm_blue_bits > 8 || palm_green_bits > 8 || palm_red_bits > 8) { | 192 | if (palm_blue_bits > 8 || palm_green_bits > 8 || palm_red_bits > 8) { |
192 | // qDebug("Can't handle this format DirectColor image -- too wide in some color (%d:%d:%d)\n", palm_red_bits, palm_green_bits, palm_blue_bits); | 193 | // qDebug("Can't handle this format DirectColor image -- too wide in some color (%d:%d:%d)\n", palm_red_bits, palm_green_bits, palm_blue_bits); |
193 | return NULL; | 194 | return NULL; |
194 | } | 195 | } |
195 | if (bits_per_pixel > (8 * sizeof(unsigned long))) { | 196 | if (bits_per_pixel > (8 * sizeof(unsigned long))) { |
196 | // qDebug ("Can't handle this format DirectColor image -- too many bits per pixel (%d)\n", bits_per_pixel); | 197 | // qDebug ("Can't handle this format DirectColor image -- too many bits per pixel (%d)\n", bits_per_pixel); |
197 | return NULL; | 198 | return NULL; |
198 | } | 199 | } |
199 | imagedatastart = palmimage + 24; | 200 | imagedatastart = palmimage + 24; |
200 | } else { | 201 | } else { |
201 | // qDebug("Unknown bits-per-pixel of %d encountered.\n", bits_per_pixel); | 202 | // qDebug("Unknown bits-per-pixel of %d encountered.\n", bits_per_pixel); |
202 | return NULL; | 203 | return NULL; |
203 | } | 204 | } |
204 | 205 | ||
205 | #ifdef WINDOWS | 206 | #ifndef USEQPE |
206 | QImage* qimage = new QImage(width, height, 32); | 207 | QImage* qimage = new QImage(width, height, 32); |
207 | #else | 208 | #else |
208 | QImage* qimage = new QImage(width, height, 16); | 209 | QImage* qimage = new QImage(width, height, 16); |
209 | #endif | 210 | #endif |
210 | 211 | ||
211 | /* row by row, uncompress the Palm image and copy it to the JPEG buffer */ | 212 | /* row by row, uncompress the Palm image and copy it to the JPEG buffer */ |
212 | rowbuf = new unsigned char[bytes_per_row * width]; | 213 | rowbuf = new unsigned char[bytes_per_row * width]; |
213 | lastrow = new unsigned char[bytes_per_row * width]; | 214 | lastrow = new unsigned char[bytes_per_row * width]; |
214 | 215 | ||
215 | for (i=0, palm_ptr = imagedatastart , x_ptr = imagedata; i < height; ++i) { | 216 | for (i=0, palm_ptr = imagedatastart , x_ptr = imagedata; i < height; ++i) { |
216 | // qDebug("inval:%x palm_ptr:%x x_ptr:%x bpr:%x", inval, palm_ptr, x_ptr, bytes_per_row); | 217 | // qDebug("inval:%x palm_ptr:%x x_ptr:%x bpr:%x", inval, palm_ptr, x_ptr, bytes_per_row); |
217 | 218 | ||
218 | /* first, uncompress the Palm image */ | 219 | /* first, uncompress the Palm image */ |
219 | if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_RLE)) { | 220 | if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_RLE)) { |
220 | for (j = 0; j < bytes_per_row; ) { | 221 | for (j = 0; j < bytes_per_row; ) { |
221 | incount = *palm_ptr++; | 222 | incount = *palm_ptr++; |
222 | inval = *palm_ptr++; | 223 | inval = *palm_ptr++; |
223 | memset(rowbuf + j, inval, incount); | 224 | memset(rowbuf + j, inval, incount); |
224 | j += incount; | 225 | j += incount; |
225 | } | 226 | } |
226 | } else if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_SCANLINE)) { | 227 | } else if ((flags & PALM_IS_COMPRESSED_FLAG) && (compression_type == PALM_COMPRESSION_SCANLINE)) { |
227 | for (j = 0; j < bytes_per_row; j += 8) { | 228 | for (j = 0; j < bytes_per_row; j += 8) { |
228 | incount = *palm_ptr++; | 229 | incount = *palm_ptr++; |
229 | inval = ((bytes_per_row - j) < 8) ? (bytes_per_row - j) : 8; | 230 | inval = ((bytes_per_row - j) < 8) ? (bytes_per_row - j) : 8; |
230 | for (inbit = 0; inbit < inval; inbit += 1) { | 231 | for (inbit = 0; inbit < inval; inbit += 1) { |
231 | if (incount & (1 << (7 - inbit))) | 232 | if (incount & (1 << (7 - inbit))) |
232 | rowbuf[j + inbit] = *palm_ptr++; | 233 | rowbuf[j + inbit] = *palm_ptr++; |
233 | else | 234 | else |
234 | rowbuf[j + inbit] = lastrow[j + inbit]; | 235 | rowbuf[j + inbit] = lastrow[j + inbit]; |
235 | } | 236 | } |
236 | } | 237 | } |
237 | memcpy (lastrow, rowbuf, bytes_per_row); | 238 | memcpy (lastrow, rowbuf, bytes_per_row); |
238 | } else if (((flags & PALM_IS_COMPRESSED_FLAG) && | 239 | } else if (((flags & PALM_IS_COMPRESSED_FLAG) && |
239 | (compression_type == PALM_COMPRESSION_NONE)) || | 240 | (compression_type == PALM_COMPRESSION_NONE)) || |
240 | ((flags & PALM_IS_COMPRESSED_FLAG) == 0)) | 241 | ((flags & PALM_IS_COMPRESSED_FLAG) == 0)) |
241 | { | 242 | { |
242 | memcpy (rowbuf, palm_ptr, bytes_per_row); | 243 | memcpy (rowbuf, palm_ptr, bytes_per_row); |
243 | palm_ptr += bytes_per_row; | 244 | palm_ptr += bytes_per_row; |
244 | } | 245 | } |
245 | else { | 246 | else { |
246 | qDebug("Case 4"); | 247 | qDebug("Case 4"); |
247 | qDebug("Is compressed:%s", ((flags & PALM_IS_COMPRESSED_FLAG) == 0) ? "false" : "true"); | 248 | qDebug("Is compressed:%s", ((flags & PALM_IS_COMPRESSED_FLAG) == 0) ? "false" : "true"); |
248 | qDebug("Has colourmap:%s", ((flags & PALM_HAS_COLORMAP_FLAG) == 0) ? "false" : "true"); | 249 | qDebug("Has colourmap:%s", ((flags & PALM_HAS_COLORMAP_FLAG) == 0) ? "false" : "true"); |
249 | qDebug("Has transparency:%s", ((flags & PALM_HAS_TRANSPARENCY_FLAG) == 0) ? "false" : "true"); | 250 | qDebug("Has transparency:%s", ((flags & PALM_HAS_TRANSPARENCY_FLAG) == 0) ? "false" : "true"); |
250 | qDebug("Direct colour:%s", ((flags & PALM_DIRECT_COLOR_FLAG) == 0) ? "false" : "true"); | 251 | qDebug("Direct colour:%s", ((flags & PALM_DIRECT_COLOR_FLAG) == 0) ? "false" : "true"); |
251 | qDebug("four byte field:%s", ((flags & PALM_4_BYTE_FIELD_FLAG) == 0) ? "false" : "true"); | 252 | qDebug("four byte field:%s", ((flags & PALM_4_BYTE_FIELD_FLAG) == 0) ? "false" : "true"); |
252 | memcpy (rowbuf, palm_ptr, bytes_per_row); | 253 | memcpy (rowbuf, palm_ptr, bytes_per_row); |
253 | palm_ptr += bytes_per_row; | 254 | palm_ptr += bytes_per_row; |
254 | } | 255 | } |
255 | /* next, write it to the GDK bitmap */ | 256 | /* next, write it to the GDK bitmap */ |
256 | if (colormap) { | 257 | if (colormap) { |
257 | mask = (1 << bits_per_pixel) - 1; | 258 | mask = (1 << bits_per_pixel) - 1; |
258 | for (inbit = 8 - bits_per_pixel, inbyte = rowbuf, j = 0; j < width; ++j) { | 259 | for (inbit = 8 - bits_per_pixel, inbyte = rowbuf, j = 0; j < width; ++j) { |
259 | inval = ((*inbyte) & (mask << inbit)) >> inbit; | 260 | inval = ((*inbyte) & (mask << inbit)) >> inbit; |
260 | /* correct for oddity of the 8-bit color Palm pixmap... */ | 261 | /* correct for oddity of the 8-bit color Palm pixmap... */ |
261 | if ((bits_per_pixel == 8) && (inval == 0xFF)) inval = 231; | 262 | if ((bits_per_pixel == 8) && (inval == 0xFF)) inval = 231; |
262 | /* now lookup the correct color and set the pixel in the GTK bitmap */ | 263 | /* now lookup the correct color and set the pixel in the GTK bitmap */ |
263 | QRgb colour = qRgb(colormap[inval].red, colormap[inval].green, colormap[inval].blue); | 264 | QRgb colour = qRgb(colormap[inval].red, colormap[inval].green, colormap[inval].blue); |
264 | qimage->setPixel(j, i, colour); | 265 | qimage->setPixel(j, i, colour); |
265 | if (!inbit) { | 266 | if (!inbit) { |
266 | ++inbyte; | 267 | ++inbyte; |
267 | inbit = 8 - bits_per_pixel; | 268 | inbit = 8 - bits_per_pixel; |
268 | } else { | 269 | } else { |
269 | inbit -= bits_per_pixel; | 270 | inbit -= bits_per_pixel; |
270 | } | 271 | } |
271 | } | 272 | } |
272 | } else if (!colormap && | 273 | } else if (!colormap && |
273 | bits_per_pixel == 16) { | 274 | bits_per_pixel == 16) { |
274 | for (inbyte = rowbuf, j = 0; j < width; ++j) { | 275 | for (inbyte = rowbuf, j = 0; j < width; ++j) { |
275 | inval = ((unsigned short)inbyte[0] << (unsigned short)8) | inbyte[1]; | 276 | inval = ((unsigned short)inbyte[0] << (unsigned short)8) | inbyte[1]; |
276 | 277 | ||
277 | /* | 278 | /* |
278 | qDebug ("pixel is %d,%d (%d:%d:%d)", | 279 | qDebug ("pixel is %d,%d (%d:%d:%d)", |
279 | j, i, | 280 | j, i, |
280 | ((inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1)) << (8-palm_red_bits), | 281 | ((inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1)) << (8-palm_red_bits), |
281 | ((inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1)) << (8-palm_green_bits), | 282 | ((inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1)) << (8-palm_green_bits), |
282 | ((inval >> 0) & ((1 << palm_blue_bits) - 1)) << (8-palm_blue_bits)); | 283 | ((inval >> 0) & ((1 << palm_blue_bits) - 1)) << (8-palm_blue_bits)); |
283 | */ | 284 | */ |
284 | QRgb colour = qRgb( | 285 | QRgb colour = qRgb( |
285 | ((inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1)) << (8-palm_red_bits), | 286 | ((inval >> (bits_per_pixel - palm_red_bits)) & ((1 << palm_red_bits) - 1)) << (8-palm_red_bits), |
286 | ((inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1)) << (8-palm_green_bits), | 287 | ((inval >> palm_blue_bits) & ((1 << palm_green_bits) - 1)) << (8-palm_green_bits), |
287 | ((inval >> 0) & ((1 << palm_blue_bits) - 1)) << (8-palm_blue_bits)); | 288 | ((inval >> 0) & ((1 << palm_blue_bits) - 1)) << (8-palm_blue_bits)); |
288 | qimage->setPixel(j, i, colour); | 289 | qimage->setPixel(j, i, colour); |
289 | inbyte += 2; | 290 | inbyte += 2; |
290 | } | 291 | } |
291 | } | 292 | } |
292 | } | 293 | } |
293 | 294 | ||
294 | delete [] rowbuf; | 295 | delete [] rowbuf; |
295 | delete [] lastrow; | 296 | delete [] lastrow; |
296 | 297 | ||
297 | return qimage; | 298 | return qimage; |
298 | } | 299 | } |
299 | 300 | ||
300 | QImage* hRule(int w, int h, unsigned char r, unsigned char g, unsigned char b) | 301 | QImage* hRule(int w, int h, unsigned char r, unsigned char g, unsigned char b) |
301 | { | 302 | { |
302 | //// qDebug("hrule [%d, %d]", w, h); | 303 | //// qDebug("hrule [%d, %d]", w, h); |
303 | QPixmap* qimage = new QPixmap(w, h); | 304 | QPixmap* qimage = new QPixmap(w, h); |
304 | qimage->fill(QColor(r,g,b)); | 305 | qimage->fill(QColor(r,g,b)); |
305 | QImage* ret = new QImage(qimage->convertToImage()); | 306 | QImage* ret = new QImage(qimage->convertToImage()); |
306 | delete qimage; | 307 | delete qimage; |
307 | return ret; | 308 | return ret; |
308 | } | 309 | } |
diff --git a/noncore/apps/opie-reader/Palm2QImage.h b/noncore/apps/opie-reader/Palm2QImage.h index 3ac2d19..5d327c5 100644 --- a/noncore/apps/opie-reader/Palm2QImage.h +++ b/noncore/apps/opie-reader/Palm2QImage.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #include <qimage.h> | 1 | #include <qimage.h> |
2 | #include <qpixmap.h> | 2 | #include <qpixmap.h> |
3 | 3 | ||
4 | QImage* Palm2QImage | 4 | QImage* Palm2QImage |
5 | (unsigned char *image_bytes_in, int byte_count_in); | 5 | (unsigned char *image_bytes_in, int byte_count_in); |
6 | 6 | ||
7 | QPixmap* hRule(int w, int h, unsigned char r=0, unsigned char g=0, unsigned char b=0); | 7 | QImage* hRule(int w, int h, unsigned char r=0, unsigned char g=0, unsigned char b=0); |
diff --git a/noncore/apps/opie-reader/QFloatBar.h b/noncore/apps/opie-reader/QFloatBar.h index bc70566..cc98233 100644 --- a/noncore/apps/opie-reader/QFloatBar.h +++ b/noncore/apps/opie-reader/QFloatBar.h | |||
@@ -1,19 +1,20 @@ | |||
1 | #ifndef __QFLOATBAR_H | 1 | #ifndef __QFLOATBAR_H |
2 | #define __QFLOATBAR_H | 2 | #define __QFLOATBAR_H |
3 | 3 | ||
4 | #include <qtoolbar.h> | 4 | #include <qtoolbar.h> |
5 | #include <qmainwindow.h> | ||
5 | 6 | ||
6 | class QFloatBar : public QToolBar | 7 | class QFloatBar : public QToolBar |
7 | { | 8 | { |
8 | Q_OBJECT | 9 | Q_OBJECT |
9 | virtual void hideEvent(QHideEvent* e) | 10 | virtual void hideEvent(QHideEvent* e) |
10 | { | 11 | { |
11 | /*if (e->spontaneous())*/ emit OnHide(); | 12 | /*if (e->spontaneous())*/ emit OnHide(); |
12 | } | 13 | } |
13 | public: | 14 | public: |
14 | QFloatBar(char* t, QMainWindow* mw, QMainWindow::ToolBarDock td, bool f) : QToolBar(t, mw, td, f) {} | 15 | QFloatBar(char* t, QMainWindow* mw, QMainWindow::ToolBarDock td, bool f) : QToolBar(t, mw, td, f) {} |
15 | signals: | 16 | signals: |
16 | void OnHide(); | 17 | void OnHide(); |
17 | }; | 18 | }; |
18 | 19 | ||
19 | #endif | 20 | #endif |
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp index f2ee027..03c8fbe 100644 --- a/noncore/apps/opie-reader/QTReader.cpp +++ b/noncore/apps/opie-reader/QTReader.cpp | |||
@@ -1,1327 +1,1563 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | ** $Id$ | 2 | ** $Id$ |
3 | ** | 3 | ** |
4 | ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. | 4 | ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. |
5 | ** | 5 | ** |
6 | ** This file is part of an example program for Qt. This example | 6 | ** This file is part of an example program for Qt. This example |
7 | ** program may be used, distributed and modified without limitation. | 7 | ** program may be used, distributed and modified without limitation. |
8 | ** | 8 | ** |
9 | *****************************************************************************/ | 9 | *****************************************************************************/ |
10 | 10 | ||
11 | #include "useqpe.h" | ||
11 | #include <qpainter.h> | 12 | #include <qpainter.h> |
13 | #include <qimage.h> | ||
14 | #include <qtimer.h> | ||
12 | #include "config.h" | 15 | #include "config.h" |
13 | #include "QTReader.h" | 16 | #include "QTReader.h" |
14 | #include "QTReaderApp.h" | 17 | #include "QTReaderApp.h" |
15 | #include "CDrawBuffer.h" | 18 | #include "CDrawBuffer.h" |
19 | #ifdef USEQPE | ||
16 | #include <qpe/qpeapplication.h> | 20 | #include <qpe/qpeapplication.h> |
21 | #endif | ||
17 | #include <math.h> | 22 | #include <math.h> |
18 | #include <ctype.h> | 23 | #include <ctype.h> |
19 | #include <stdio.h> //for sprintf | 24 | #include <stdio.h> //for sprintf |
25 | #ifdef USEQPE | ||
20 | #include <qpe/config.h> | 26 | #include <qpe/config.h> |
21 | #include <qpe/applnk.h> | 27 | #include <qpe/applnk.h> |
22 | #include <qfontdatabase.h> | ||
23 | #include <qpe/global.h> | 28 | #include <qpe/global.h> |
24 | #include <qpe/qcopenvelope_qws.h> | 29 | #include <qpe/qcopenvelope_qws.h> |
25 | #include "StateData.h" | 30 | #endif |
31 | #include <qfontdatabase.h> | ||
26 | 32 | ||
27 | #ifdef _UNICODE | 33 | #ifdef _UNICODE |
28 | const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; | 34 | const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; |
29 | #else | 35 | #else |
30 | const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 }; | 36 | const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 }; |
31 | #endif | 37 | #endif |
32 | //const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; | 38 | //const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; |
33 | 39 | ||
34 | //const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 }; | 40 | //const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 }; |
35 | //const int QTReader::fontsizes[] = {10,16,17,22,0}; | 41 | //const int QTReader::fontsizes[] = {10,16,17,22,0}; |
36 | //const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 }; | 42 | //const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 }; |
37 | //const int QTReader::fontsizes[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,0}; | 43 | //const int QTReader::fontsizes[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,0}; |
38 | 44 | ||
45 | tchar QTReader::pluckernextpart[] = { 'C','l','i','c','k',' ','h','e','r','e',' ','f','o','r',' ','t','h','e',' ','n','e','x','t',' ','p','a','r','t',0 }; | ||
46 | tchar QTReader::jplucknextpart[] = { 'N','e','x','t',' ','P','a','r','t',' ','>','>',0 }; | ||
47 | //tchar QTReader::jplucknextpart[] = { 10,'#',10,'N','e','x','t',' ','P','a','r','t',' ','>','>',0 }; | ||
48 | |||
39 | QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : | 49 | QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : |
40 | QWidget(parent, name, f), | 50 | QWidget(parent, name, f), |
41 | m_delay(100), | 51 | m_delay(100), |
42 | m_scrolldy1(0), | 52 | m_scrolldy1(0), |
43 | m_scrolldy2(0), | 53 | m_scrolldy2(0), |
44 | m_autoScroll(false), | 54 | m_autoScroll(false), |
45 | //textarray(NULL), | 55 | //textarray(NULL), |
46 | //locnarray(NULL), | 56 | //locnarray(NULL), |
47 | numlines(0), | 57 | numlines(0), |
48 | m_fontname("unifont"), | 58 | m_fontname("unifont"), |
49 | m_fm(NULL), | 59 | m_fm(NULL), |
50 | mouseUpOn(true), | 60 | mouseUpOn(true), |
51 | m_twotouch(true), | 61 | m_twotouch(true), |
52 | m_touchone(true), | 62 | m_touchone(true), |
53 | bDoUpdates(false), | 63 | bDoUpdates(false), |
54 | m_navkeys(true) | 64 | #ifdef _SCROLLPIPE |
65 | m_pipeout(NULL), | ||
66 | #endif | ||
67 | m_border(2) | ||
55 | { | 68 | { |
56 | m_overlap = 1; | 69 | m_overlap = 1; |
70 | setKeyCompression ( true ); | ||
57 | // init(); | 71 | // init(); |
58 | } | 72 | } |
73 | |||
59 | /* | 74 | /* |
60 | QTReader::QTReader( const QString& filename, QWidget *parent, const tchar *name, WFlags f ) : | 75 | QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0) : |
61 | QWidget(parent, name, f), | 76 | QWidget(parent, name, f), |
62 | m_textfont(0), | 77 | m_textfont(0), |
63 | m_textsize(1), | 78 | m_textsize(1), |
64 | textarray(NULL), | 79 | textarray(NULL), |
65 | numlines(0), | 80 | numlines(0), |
66 | bstripcr(true), | 81 | bstripcr(true), |
67 | bunindent(false), | 82 | bunindent(false), |
68 | brepara(false), | 83 | brepara(false), |
69 | bdblspce(false), | 84 | bdblspce(false), |
70 | btight(false), | 85 | btight(false), |
71 | bindenter(0), | 86 | bindenter(0), |
72 | m_fm(NULL) | 87 | m_fm(NULL) |
73 | { | 88 | { |
74 | init(); | 89 | init(); |
75 | // qDebug("Load_file(1)"); | 90 | // // qDebug("Load_file(1)"); |
76 | load_file((const tchar*)filename); | 91 | load_file((const tchar*)filename); |
77 | } | 92 | } |
78 | */ | 93 | */ |
79 | 94 | ||
95 | /* | ||
96 | void QTReader::mouseMoveEvent(QMouseEvent* _e) | ||
97 | { | ||
98 | |||
99 | mouseUpOn = !(_e->pos().x() == -1); | ||
100 | |||
101 | qDebug("MouseMove:[%d, %d]", _e->pos().x(), _e->pos().y()); | ||
102 | } | ||
103 | */ | ||
80 | long QTReader::real_delay() | 104 | long QTReader::real_delay() |
81 | { | 105 | { |
82 | return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing ); | 106 | return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing ); |
83 | } | 107 | } |
84 | 108 | ||
85 | void QTReader::mousePressEvent( QMouseEvent* _e ) | 109 | void QTReader::mousePressEvent( QMouseEvent* _e ) |
86 | { | 110 | { |
87 | buffdoc.unsuspend(); | 111 | buffdoc.unsuspend(); |
88 | if (_e->button() == RightButton) | 112 | if (_e->button() == RightButton) |
89 | { | 113 | { |
114 | //qDebug("MousePress"); | ||
90 | mouseUpOn = false; | 115 | mouseUpOn = false; |
91 | if (buffdoc.hasnavigation()) | 116 | if (m_swapmouse) |
92 | { | 117 | { |
93 | if (_e->y() > (2*height())/3) | 118 | int lineno = 0; |
94 | { | 119 | int ht = textarray[0]->lineSpacing(); |
95 | goDown(); | 120 | while ((ht < _e->y()) && (lineno < numlines)) |
96 | } | ||
97 | else if (_e->y() < height()/3) | ||
98 | { | ||
99 | goUp(); | ||
100 | } | ||
101 | else | ||
102 | { | ||
103 | if (_e->x() < width()/3) | ||
104 | { | ||
105 | size_t target = pagelocate(); | ||
106 | if (buffdoc.back(target)) | ||
107 | { | ||
108 | locate(target); | ||
109 | } | ||
110 | } | ||
111 | else if (_e->x() > (2*width())/3) | ||
112 | { | ||
113 | size_t target = pagelocate(); | ||
114 | if (buffdoc.forward(target)) | ||
115 | { | ||
116 | locate(target); | ||
117 | } | ||
118 | } | ||
119 | else | ||
120 | { | 121 | { |
121 | buffdoc.saveposn(pagelocate()); | 122 | ht += textarray[++lineno]->lineSpacing(); |
122 | locate(buffdoc.getHome()); | ||
123 | } | 123 | } |
124 | } | 124 | size_t startpos, startoffset, tgt; |
125 | getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt); | ||
126 | processmousewordevent(startpos, startoffset, _e, lineno); | ||
127 | } | ||
128 | else | ||
129 | processmousepositionevent(_e); | ||
130 | } | ||
131 | } | ||
132 | |||
133 | void QTReader::processmousepositionevent( QMouseEvent* _e ) | ||
134 | { | ||
135 | if (buffdoc.hasnavigation()) | ||
136 | { | ||
137 | if (_e->y() > (2*height())/3) | ||
138 | { | ||
139 | goDown(); | ||
140 | } | ||
141 | else if (_e->y() < height()/3) | ||
142 | { | ||
143 | goUp(); | ||
125 | } | 144 | } |
126 | else | 145 | else |
127 | { | 146 | { |
128 | if (_e->y() > height()/2) | 147 | if (_e->x() < width()/3) |
129 | { | 148 | { |
130 | goDown(); | 149 | goBack(); |
150 | } | ||
151 | else if (_e->x() > (2*width())/3) | ||
152 | { | ||
153 | goForward(); | ||
131 | } | 154 | } |
132 | else | 155 | else |
133 | { | 156 | { |
134 | goUp(); | 157 | goHome(); |
135 | } | 158 | } |
136 | } | 159 | } |
137 | } | 160 | } |
161 | else | ||
162 | { | ||
163 | if (_e->y() > height()/2) | ||
164 | { | ||
165 | goDown(); | ||
166 | } | ||
167 | else | ||
168 | { | ||
169 | goUp(); | ||
170 | } | ||
171 | } | ||
172 | } | ||
173 | |||
174 | void QTReader::goHome() | ||
175 | { | ||
176 | if (buffdoc.hasnavigation()) | ||
177 | { | ||
178 | size_t current=pagelocate(); | ||
179 | size_t home=buffdoc.getHome(); | ||
180 | if (current!=home) | ||
181 | { | ||
182 | buffdoc.saveposn(current); | ||
183 | locate(home); | ||
184 | } | ||
185 | } | ||
186 | } | ||
187 | |||
188 | void QTReader::goBack() | ||
189 | { | ||
190 | if (buffdoc.hasnavigation()) | ||
191 | { | ||
192 | size_t target = pagelocate(); | ||
193 | buffdoc.writeposn(target); | ||
194 | if (buffdoc.back(target)) | ||
195 | { | ||
196 | locate(target); | ||
197 | } | ||
198 | } | ||
199 | } | ||
200 | |||
201 | void QTReader::goForward() | ||
202 | { | ||
203 | if (buffdoc.hasnavigation()) | ||
204 | { | ||
205 | size_t target = pagelocate(); | ||
206 | if (buffdoc.forward(target)) | ||
207 | { | ||
208 | locate(target); | ||
209 | } | ||
210 | } | ||
138 | } | 211 | } |
139 | 212 | ||
140 | linkType QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt) | 213 | linkType QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt) |
141 | { | 214 | { |
142 | int lineno = 0; | 215 | int lineno = 0; |
143 | int ht = textarray[0]->lineSpacing(); | 216 | int ht = textarray[0]->lineSpacing(); |
144 | while ((ht < y) && (lineno < numlines)) | 217 | while ((ht < y) && (lineno < numlines)) |
145 | { | 218 | { |
146 | ht += textarray[++lineno]->lineSpacing(); | 219 | ht += textarray[++lineno]->lineSpacing(); |
147 | } | 220 | } |
148 | start = locnarray[lineno]; | 221 | start = locnarray[lineno]; |
149 | if (m_bMonoSpaced) | 222 | if (m_bMonoSpaced) |
150 | { | 223 | { |
151 | offset = x/m_charWidth; | 224 | offset = (x - textarray[lineno]->offset(width(), m_border))/m_charWidth; |
152 | } | 225 | } |
153 | else | 226 | else |
154 | { | 227 | { |
155 | int i; | 228 | int i; |
156 | CDrawBuffer* t = textarray[lineno]; | 229 | CDrawBuffer* t = textarray[lineno]; |
157 | x = x - t->offset(width()); | 230 | x = x - t->offset(width(), m_border); |
158 | for (i = t->length(); i >= 0 && t->width(i) > x; i--); | 231 | for (i = t->length(); i >= 0 && t->width(i, true, width(), m_border) > x; i--); |
159 | offset = i; | 232 | offset = i; |
160 | } | 233 | } |
161 | return textarray[lineno]->getLinkType(offset, tgt); | 234 | return textarray[lineno]->getLinkType(offset, tgt); |
162 | } | 235 | } |
163 | 236 | ||
237 | void QTReader::suspend() | ||
238 | { | ||
239 | #ifdef OPIE | ||
240 | if (memcmp("/mnt/", m_lastfile.latin1(), 5) == 0) buffdoc.suspend(); | ||
241 | #else | ||
242 | if (memcmp("/usr/mnt.rom/", m_lastfile.latin1(), 13) == 0) buffdoc.suspend(); | ||
243 | #endif | ||
244 | } | ||
245 | |||
164 | void QTReader::setTwoTouch(bool _b) | 246 | void QTReader::setTwoTouch(bool _b) |
165 | { | 247 | { |
166 | setBackgroundColor( white ); | 248 | setBackgroundColor( white ); |
167 | m_twotouch = m_touchone = _b; | 249 | m_twotouch = m_touchone = _b; |
168 | } | 250 | } |
169 | 251 | ||
170 | void QTReader::setContinuous(bool _b) | 252 | void QTReader::setContinuous(bool _b) |
171 | { | 253 | { |
172 | buffdoc.unsuspend(); | 254 | buffdoc.unsuspend(); |
173 | buffdoc.setContinuous(m_continuousDocument = _b); | 255 | buffdoc.setContinuous(m_continuousDocument = _b); |
174 | } | 256 | } |
175 | 257 | ||
258 | void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouseEvent* _e, int lineno) | ||
259 | { | ||
260 | QString wrd; | ||
261 | if (m_twotouch) | ||
262 | { | ||
263 | if (m_touchone) | ||
264 | { | ||
265 | m_touchone = false; | ||
266 | m_startpos = startpos; | ||
267 | m_startoffset = startoffset; | ||
268 | setBackgroundColor( lightGray ); | ||
269 | } | ||
270 | else | ||
271 | { | ||
272 | m_touchone = true; | ||
273 | setBackgroundColor( white ); | ||
274 | size_t endpos, endoffset; | ||
275 | endpos = startpos; | ||
276 | endoffset = startoffset; | ||
277 | size_t currentpos = locate(); | ||
278 | if (endpos >= m_startpos) | ||
279 | { | ||
280 | jumpto(m_startpos); | ||
281 | for (int i = 0; i < m_startoffset; i++) | ||
282 | { | ||
283 | getch(); | ||
284 | } | ||
285 | if (m_startpos == endpos) | ||
286 | { | ||
287 | for (int i = m_startoffset; i <= endoffset; i++) | ||
288 | { | ||
289 | wrd += QChar(getch()); | ||
290 | } | ||
291 | } | ||
292 | else | ||
293 | { | ||
294 | while (buffdoc.explocate() <= endpos) | ||
295 | { | ||
296 | wrd += QChar(getch()); | ||
297 | } | ||
298 | for (int i = 0; i < endoffset; i++) | ||
299 | { | ||
300 | wrd += QChar(getch()); | ||
301 | } | ||
302 | } | ||
303 | jumpto(currentpos); | ||
304 | } | ||
305 | } | ||
306 | } | ||
307 | else if (m_bMonoSpaced) | ||
308 | { | ||
309 | int chno = (_e->x()-textarray[lineno]->offset(width(), m_border))/m_charWidth; | ||
310 | if (chno < ustrlen(textarray[lineno]->data())) | ||
311 | { | ||
312 | wrd[0] = textarray[lineno]->data()[chno]; | ||
313 | } | ||
314 | } | ||
315 | else | ||
316 | { | ||
317 | CDrawBuffer* t = textarray[lineno]; | ||
318 | int first = 0; | ||
319 | int tgt = _e->x() - t->offset(width(), m_border); | ||
320 | while (1) | ||
321 | { | ||
322 | int i = first+1; | ||
323 | while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; | ||
324 | if (t->width(i, true, width(), m_border) > tgt) | ||
325 | { | ||
326 | wrd = toQString(t->data()+first, i - first); | ||
327 | // qDebug("Got %s", (const char *)wrd); | ||
328 | break; | ||
329 | } | ||
330 | while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; | ||
331 | if ((*t)[i] == 0) break; | ||
332 | first = i; | ||
333 | } | ||
334 | } | ||
335 | if (!wrd.isEmpty()) | ||
336 | { | ||
337 | //qDebug("Selected:%s", (const char*)wrd); | ||
338 | emit OnWordSelected(wrd, locnarray[lineno], (m_twotouch) ? wrd : toQString(textarray[lineno]->data())); | ||
339 | } | ||
340 | } | ||
341 | |||
176 | void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | 342 | void QTReader::mouseReleaseEvent( QMouseEvent* _e ) |
177 | { | 343 | { |
178 | buffdoc.unsuspend(); | 344 | buffdoc.unsuspend(); |
179 | if (_e->button() == LeftButton) | 345 | if (_e->button() == LeftButton) |
180 | { | 346 | { |
181 | if (mouseUpOn) | 347 | if (mouseUpOn) |
182 | { | 348 | { |
349 | // qDebug("MouseRelease"); | ||
350 | if (_e->x() > width() - m_border) | ||
351 | { | ||
352 | locate(buffdoc.startSection()+((buffdoc.endSection()-buffdoc.startSection())*_e->y()+height()/2)/height()); | ||
353 | return; | ||
354 | } | ||
183 | if (textarray[0] != NULL) | 355 | if (textarray[0] != NULL) |
184 | { | 356 | { |
185 | QString wrd, line; | 357 | QString line; |
186 | // int lineno = _e->y()/m_linespacing; | 358 | // int lineno = _e->y()/m_linespacing; |
187 | int lineno = 0; | 359 | int lineno = 0; |
188 | int ht = textarray[0]->lineSpacing(); | 360 | int ht = textarray[0]->lineSpacing(); |
189 | while ((ht < _e->y()) && (lineno < numlines)) | 361 | while ((ht < _e->y()) && (lineno < numlines)) |
190 | { | 362 | { |
191 | ht += textarray[++lineno]->lineSpacing(); | 363 | ht += textarray[++lineno]->lineSpacing(); |
192 | } | 364 | } |
193 | size_t startpos, startoffset, tgt; | 365 | size_t startpos, startoffset, tgt; |
194 | switch (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt)) | 366 | switch (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt)) |
195 | { | 367 | { |
196 | case eLink: | 368 | case eLink: |
197 | { | 369 | { |
198 | size_t saveposn = pagelocate(); | 370 | size_t saveposn = pagelocate(); |
199 | if (buffdoc.hyperlink(tgt)) | 371 | QString href; |
372 | linkType lt = buffdoc.hyperlink(tgt, href); | ||
373 | if (lt == eLink) | ||
200 | { | 374 | { |
201 | buffdoc.saveposn(saveposn); | 375 | buffdoc.saveposn(saveposn); |
202 | fillbuffer(); | 376 | fillbuffer(); |
203 | update(); | 377 | update(); |
204 | } | 378 | } |
205 | else | 379 | else |
206 | { | 380 | { |
381 | if (lt == ePicture) | ||
382 | { | ||
383 | QImage* pm = buffdoc.getPicture(tgt); | ||
384 | if (pm != NULL) | ||
385 | { | ||
386 | emit OnShowPicture(*pm); | ||
387 | delete pm; | ||
388 | } | ||
389 | } | ||
390 | else | ||
391 | { | ||
392 | // QString anchortext = textarray[lineno]->getanchortext(startoffset); | ||
393 | if (!href.isEmpty()) | ||
394 | { | ||
395 | emit OnURLSelected(href); | ||
396 | } | ||
397 | } | ||
207 | locate(pagelocate()); | 398 | locate(pagelocate()); |
208 | } | 399 | } |
209 | return; | 400 | return; |
210 | } | 401 | } |
211 | case ePicture: | 402 | case ePicture: |
212 | { | 403 | { |
213 | qDebug("Picture:%x", tgt); | 404 | // qDebug("Picture:%x", tgt); |
214 | QPixmap* pm = buffdoc.getPicture(tgt); | 405 | QImage* pm = buffdoc.getPicture(tgt); |
215 | if (pm != NULL) | 406 | if (pm != NULL) |
216 | { | 407 | { |
217 | emit OnShowPicture(*pm); | 408 | emit OnShowPicture(*pm); |
218 | delete pm; | 409 | delete pm; |
219 | } | 410 | } |
220 | else | 411 | else |
221 | { | 412 | { |
222 | locate(pagelocate()); | 413 | locate(pagelocate()); |
223 | } | 414 | } |
224 | return; | 415 | return; |
225 | } | 416 | } |
226 | case eNone: | 417 | case eNone: |
227 | break; | 418 | break; |
228 | default: | 419 | default: |
229 | qDebug("Unknown linktype"); | 420 | // qDebug("Unknown linktype"); |
230 | return; | 421 | return; |
231 | } | 422 | } |
232 | if (m_twotouch) | 423 | if (m_swapmouse) |
233 | { | 424 | processmousepositionevent(_e); |
234 | if (m_touchone) | ||
235 | { | ||
236 | m_touchone = false; | ||
237 | m_startpos = startpos; | ||
238 | m_startoffset = startoffset; | ||
239 | setBackgroundColor( lightGray ); | ||
240 | } | ||
241 | else | ||
242 | { | ||
243 | m_touchone = true; | ||
244 | setBackgroundColor( white ); | ||
245 | size_t endpos, endoffset; | ||
246 | endpos = startpos; | ||
247 | endoffset = startoffset; | ||
248 | size_t currentpos = locate(); | ||
249 | if (endpos >= m_startpos) | ||
250 | { | ||
251 | jumpto(m_startpos); | ||
252 | for (int i = 0; i < m_startoffset; i++) | ||
253 | { | ||
254 | getch(); | ||
255 | } | ||
256 | if (m_startpos == endpos) | ||
257 | { | ||
258 | for (int i = m_startoffset; i <= endoffset; i++) | ||
259 | { | ||
260 | wrd += QChar(getch()); | ||
261 | } | ||
262 | } | ||
263 | else | ||
264 | { | ||
265 | while (buffdoc.explocate() <= endpos) | ||
266 | { | ||
267 | wrd += QChar(getch()); | ||
268 | } | ||
269 | for (int i = 0; i < endoffset; i++) | ||
270 | { | ||
271 | wrd += QChar(getch()); | ||
272 | } | ||
273 | } | ||
274 | jumpto(currentpos); | ||
275 | } | ||
276 | } | ||
277 | } | ||
278 | else if (m_bMonoSpaced) | ||
279 | { | ||
280 | int chno = _e->x()/m_charWidth; | ||
281 | if (chno < ustrlen(textarray[lineno]->data())) | ||
282 | { | ||
283 | wrd[0] = textarray[lineno]->data()[chno]; | ||
284 | } | ||
285 | } | ||
286 | else | 425 | else |
287 | { | 426 | processmousewordevent(startpos, startoffset, _e, lineno); |
288 | CDrawBuffer* t = textarray[lineno]; | ||
289 | int first = 0; | ||
290 | int tgt = _e->x() - t->offset(width()); | ||
291 | while (1) | ||
292 | { | ||
293 | int i = first+1; | ||
294 | while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; | ||
295 | if (t->width(i) > tgt) | ||
296 | { | ||
297 | wrd = toQString(t->data()+first, i - first); | ||
298 | break; | ||
299 | } | ||
300 | while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; | ||
301 | if ((*t)[i] == 0) break; | ||
302 | first = i; | ||
303 | } | ||
304 | } | ||
305 | if (!wrd.isEmpty()) | ||
306 | { | ||
307 | emit OnWordSelected(wrd, locnarray[lineno], (m_twotouch) ? wrd : toQString(textarray[lineno]->data())); | ||
308 | } | ||
309 | } | 427 | } |
310 | } | 428 | } |
311 | else | 429 | else |
312 | { | 430 | { |
313 | mouseUpOn = true; | 431 | mouseUpOn = true; |
314 | } | 432 | } |
315 | } | 433 | } |
316 | } | 434 | } |
317 | 435 | ||
318 | void QTReader::focusInEvent(QFocusEvent* e) | 436 | void QTReader::focusInEvent(QFocusEvent* e) |
319 | { | 437 | { |
320 | if (m_autoScroll) timer->start(real_delay(), false); | 438 | if (m_autoScroll) timer->start(real_delay(), false); |
321 | update(); | 439 | update(); |
322 | } | 440 | } |
323 | 441 | ||
324 | void QTReader::focusOutEvent(QFocusEvent* e) | 442 | void QTReader::focusOutEvent(QFocusEvent* e) |
325 | { | 443 | { |
326 | if (m_autoScroll) | 444 | if (m_autoScroll) |
327 | { | 445 | { |
328 | timer->stop(); | 446 | timer->stop(); |
329 | m_scrolldy1 = m_scrolldy2 = 0; | 447 | //m_scrolldy1 = m_scrolldy2 = 0; |
330 | } | 448 | } |
331 | } | 449 | } |
332 | 450 | ||
333 | #include <qapplication.h> | 451 | #include <qapplication.h> |
334 | #include <qdrawutil.h> | 452 | #include <qdrawutil.h> |
453 | #ifndef _WINDOWS | ||
335 | #include <unistd.h> | 454 | #include <unistd.h> |
455 | #endif | ||
336 | 456 | ||
337 | void QTReader::goDown() | 457 | void QTReader::goDown() |
338 | { | 458 | { |
339 | if (m_bpagemode) | 459 | if (m_bpagemode) |
340 | { | 460 | { |
341 | dopagedn(); | 461 | dopagedn(); |
342 | } | 462 | } |
343 | else | 463 | else |
344 | { | 464 | { |
345 | lineDown(); | 465 | lineDown(); |
346 | } | 466 | } |
347 | } | 467 | } |
348 | 468 | ||
349 | void QTReader::goUp() | 469 | void QTReader::goUp() |
350 | { | 470 | { |
351 | if (m_bpagemode) | 471 | if (m_bpagemode) |
352 | { | 472 | { |
353 | dopageup(); | 473 | dopageup(); |
354 | } | 474 | } |
355 | else | 475 | else |
356 | { | 476 | { |
357 | lineUp(); | 477 | lineUp(); |
358 | } | 478 | } |
359 | } | 479 | } |
360 | 480 | ||
361 | void QTReader::NavUp() | 481 | void QTReader::NavUp() |
362 | { | 482 | { |
363 | buffdoc.unsuspend(); | 483 | buffdoc.unsuspend(); |
364 | if (buffdoc.hasnavigation()) | 484 | if (buffdoc.hasnavigation()) |
365 | { | 485 | { |
366 | /* | 486 | /* |
367 | size_t target = pagelocate(); | 487 | size_t target = pagelocate(); |
368 | if (buffdoc.back(target)) | 488 | if (buffdoc.back(target)) |
369 | { | 489 | { |
370 | locate(target); | 490 | locate(target); |
371 | } | 491 | } |
372 | */ | 492 | */ |
373 | locate(buffdoc.startSection()); | 493 | locate(buffdoc.startSection()); |
374 | } | 494 | } |
375 | else | 495 | else |
376 | { | 496 | { |
377 | goUp(); | 497 | goUp(); |
378 | } | 498 | } |
379 | } | 499 | } |
380 | 500 | ||
381 | void QTReader::NavDown() | 501 | void QTReader::NavDown() |
382 | { | 502 | { |
383 | buffdoc.unsuspend(); | 503 | buffdoc.unsuspend(); |
384 | if (buffdoc.hasnavigation()) | 504 | if (buffdoc.hasnavigation()) |
385 | { | 505 | { |
386 | /* | 506 | /* |
387 | size_t target = pagelocate(); | 507 | size_t target = pagelocate(); |
388 | if (buffdoc.forward(target)) | 508 | if (buffdoc.forward(target)) |
389 | { | 509 | { |
390 | locate(target); | 510 | locate(target); |
391 | } | 511 | } |
392 | */ | 512 | */ |
393 | dopageup(buffdoc.endSection()); | 513 | dopageup(buffdoc.endSection()); |
394 | } | 514 | } |
395 | else | 515 | else |
396 | { | 516 | { |
397 | goDown(); | 517 | goDown(); |
398 | } | 518 | } |
399 | } | 519 | } |
400 | 520 | ||
401 | void QTReader::zoomin() | 521 | void QTReader::zoomin() |
402 | { | 522 | { |
403 | if (m_fontControl.increasesize()) | 523 | if (m_fontControl.increasesize()) |
404 | { | 524 | { |
405 | bool sc = m_autoScroll; | 525 | bool sc = m_autoScroll; |
406 | setfont(); | 526 | setfont(); |
407 | m_autoScroll = false; | 527 | m_autoScroll = false; |
408 | locate(pagelocate()); | 528 | locate(pagelocate()); |
409 | update(); | 529 | update(); |
410 | m_autoScroll = sc; | 530 | m_autoScroll = sc; |
411 | if (m_autoScroll) autoscroll(); | 531 | if (m_autoScroll) autoscroll(); |
412 | } | 532 | } |
413 | } | 533 | } |
414 | 534 | ||
415 | void QTReader::zoomout() | 535 | void QTReader::zoomout() |
416 | { | 536 | { |
417 | if (m_fontControl.decreasesize()) | 537 | if (m_fontControl.decreasesize()) |
418 | { | 538 | { |
419 | bool sc = m_autoScroll; | 539 | bool sc = m_autoScroll; |
420 | m_autoScroll = false; | 540 | m_autoScroll = false; |
421 | setfont(); | 541 | setfont(); |
422 | locate(pagelocate()); | 542 | locate(pagelocate()); |
423 | update(); | 543 | update(); |
424 | m_autoScroll = sc; | 544 | m_autoScroll = sc; |
425 | if (m_autoScroll) autoscroll(); | 545 | if (m_autoScroll) autoscroll(); |
426 | } | 546 | } |
427 | } | 547 | } |
428 | 548 | ||
549 | void QTReader::reduceScroll() | ||
550 | { | ||
551 | if (m_delay < 59049) | ||
552 | { | ||
553 | m_delay = (3*m_delay)/2; | ||
554 | timer->changeInterval(real_delay()); | ||
555 | } | ||
556 | else | ||
557 | { | ||
558 | m_delay = 59049; | ||
559 | } | ||
560 | } | ||
561 | |||
562 | void QTReader::increaseScroll() | ||
563 | { | ||
564 | if (m_delay > 1024) | ||
565 | { | ||
566 | m_delay = (2*m_delay)/3; | ||
567 | timer->changeInterval(real_delay()); | ||
568 | } | ||
569 | else | ||
570 | { | ||
571 | m_delay = 1024; | ||
572 | } | ||
573 | } | ||
574 | |||
429 | void QTReader::keyPressEvent(QKeyEvent* e) | 575 | void QTReader::keyPressEvent(QKeyEvent* e) |
430 | { | 576 | { |
431 | buffdoc.unsuspend(); | 577 | buffdoc.unsuspend(); |
578 | ((QTReaderApp*)parent()->parent())->handlekey(e); | ||
579 | // e->ignore(); | ||
580 | return; | ||
581 | #ifdef _SCROLLPIPE | ||
582 | if (m_isPaused) | ||
583 | { | ||
584 | m_isPaused = false; | ||
585 | if (e->key() != Key_Space) | ||
586 | { | ||
587 | m_autoScroll = false; | ||
588 | if (m_pipeout != NULL) | ||
589 | { | ||
590 | pclose(m_pipeout); | ||
591 | m_pipeout = NULL; | ||
592 | } | ||
593 | ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); | ||
594 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | ||
595 | } | ||
596 | else | ||
597 | { | ||
598 | timer->start(real_delay(), false); | ||
599 | } | ||
600 | e->accept(); | ||
601 | return; | ||
602 | } | ||
603 | #endif | ||
604 | /* | ||
432 | switch (e->key()) | 605 | switch (e->key()) |
433 | { | 606 | { |
434 | case Key_Down: | 607 | case Key_Down: |
435 | { | 608 | { |
436 | e->accept(); | 609 | e->accept(); |
437 | if (m_autoScroll) | 610 | if (m_autoScroll) |
438 | { | 611 | { |
439 | if (m_delay < 59049) | 612 | if (m_delay < 59049) |
440 | { | 613 | { |
441 | m_delay = (3*m_delay)/2; | 614 | m_delay = (3*m_delay)/2; |
442 | timer->changeInterval(real_delay()); | 615 | timer->changeInterval(real_delay()); |
443 | } | 616 | } |
444 | else | 617 | else |
445 | { | 618 | { |
446 | m_delay = 59049; | 619 | m_delay = 59049; |
447 | } | 620 | } |
448 | } | 621 | } |
449 | else | 622 | else |
450 | { | 623 | { |
451 | goDown(); | 624 | goDown(); |
452 | } | 625 | } |
453 | } | 626 | } |
454 | break; | 627 | break; |
455 | case Key_Up: | 628 | case Key_Up: |
456 | { | 629 | { |
457 | e->accept(); | 630 | e->accept(); |
458 | if (m_autoScroll) | 631 | if (m_autoScroll) |
459 | { | 632 | { |
460 | if (m_delay > 1024) | 633 | if (m_delay > 1024) |
461 | { | 634 | { |
462 | m_delay = (2*m_delay)/3; | 635 | m_delay = (2*m_delay)/3; |
463 | timer->changeInterval(real_delay()); | 636 | timer->changeInterval(real_delay()); |
464 | } | 637 | } |
465 | else | 638 | else |
466 | { | 639 | { |
467 | m_delay = 1024; | 640 | m_delay = 1024; |
468 | } | 641 | } |
469 | } | 642 | } |
470 | else | 643 | else |
471 | { | 644 | { |
472 | goUp(); | 645 | goUp(); |
473 | } | 646 | } |
474 | } | 647 | } |
475 | break; | 648 | break; |
476 | /* | ||
477 | case Key_Left: | ||
478 | { | ||
479 | e->accept(); | ||
480 | if (m_textfont > 0) | ||
481 | { | ||
482 | m_textfont--; | ||
483 | setfont(NULL); | ||
484 | locate(pagelocate()); | ||
485 | update(); | ||
486 | } | ||
487 | } | ||
488 | break; | ||
489 | case Key_Right: | ||
490 | { | ||
491 | e->accept(); | ||
492 | if (fonts[++m_textfont] == 0) | ||
493 | { | ||
494 | m_textfont--; | ||
495 | } | ||
496 | else | ||
497 | { | ||
498 | setfont(NULL); | ||
499 | locate(pagelocate()); | ||
500 | update(); | ||
501 | } | ||
502 | } | ||
503 | break; | ||
504 | */ | ||
505 | case Key_Right: | 649 | case Key_Right: |
506 | { | 650 | { |
507 | e->accept(); | 651 | e->accept(); |
508 | if (m_navkeys && buffdoc.hasnavigation()) | 652 | if (m_navkeys && buffdoc.hasnavigation()) |
509 | { | 653 | { |
510 | size_t target = pagelocate(); | 654 | size_t target = pagelocate(); |
511 | if (buffdoc.forward(target)) | 655 | if (buffdoc.forward(target)) |
512 | { | 656 | { |
513 | locate(target); | 657 | locate(target); |
514 | } | 658 | } |
515 | } | 659 | } |
516 | else zoomin(); | 660 | else zoomin(); |
517 | } | 661 | } |
518 | break; | 662 | break; |
519 | case Key_Left: | 663 | case Key_Left: |
520 | { | 664 | { |
521 | e->accept(); | 665 | e->accept(); |
522 | if (m_navkeys && buffdoc.hasnavigation()) | 666 | if (m_navkeys && buffdoc.hasnavigation()) |
523 | { | 667 | { |
524 | size_t target = pagelocate(); | 668 | size_t target = pagelocate(); |
525 | if (buffdoc.back(target)) | 669 | if (buffdoc.back(target)) |
526 | { | 670 | { |
527 | locate(target); | 671 | locate(target); |
528 | } | 672 | } |
529 | } | 673 | } |
530 | else zoomout(); | 674 | else zoomout(); |
531 | } | 675 | } |
532 | break; | 676 | break; |
533 | case Key_Space: | ||
534 | case Key_Return: | ||
535 | { | ||
536 | e->accept(); | ||
537 | emit OnActionPressed(); | ||
538 | } | ||
539 | break; | ||
540 | default: | 677 | default: |
541 | e->ignore(); | 678 | e->ignore(); |
542 | } | 679 | } |
680 | */ | ||
543 | } | 681 | } |
544 | 682 | ||
545 | void QTReader::setautoscroll(bool _sc) | 683 | void QTReader::setautoscroll(bool _sc) |
546 | { | 684 | { |
547 | if (_sc == m_autoScroll) return; | 685 | if (_sc == m_autoScroll) return; |
548 | if (m_autoScroll) | 686 | if (m_autoScroll) |
549 | { | 687 | { |
550 | m_autoScroll = false; | 688 | m_autoScroll = false; |
689 | #ifdef USEQPE | ||
551 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | 690 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; |
691 | #endif | ||
692 | #ifdef _SCROLLPIPE | ||
693 | if (m_pipeout != NULL) | ||
694 | { | ||
695 | pclose(m_pipeout); | ||
696 | m_pipeout = NULL; | ||
697 | } | ||
698 | #endif | ||
552 | } | 699 | } |
553 | else | 700 | else |
554 | { | 701 | { |
555 | CDrawBuffer* reusebuffer = textarray[numlines]; | 702 | CDrawBuffer* reusebuffer = textarray[numlines]; |
556 | if (reusebuffer == NULL || reusebuffer->eof()) return; | 703 | if (reusebuffer == NULL || reusebuffer->eof()) return; |
557 | m_autoScroll = true; | 704 | m_autoScroll = true; |
705 | #ifdef _SCROLLPIPE | ||
706 | if (!m_pipetarget.isEmpty()) | ||
707 | { | ||
708 | // qDebug("Opening pipe to %s", (const char*)m_pipetarget); | ||
709 | m_pipeout = popen((const char*)m_pipetarget, "w"); | ||
710 | m_isPaused = false; | ||
711 | } | ||
712 | #endif | ||
558 | autoscroll(); | 713 | autoscroll(); |
714 | #ifdef USEQPE | ||
559 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed | 715 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed |
716 | #endif | ||
560 | } | 717 | } |
561 | } | 718 | } |
562 | 719 | ||
563 | bool QTReader::getline(CDrawBuffer *buff) | 720 | bool QTReader::getline(CDrawBuffer *buff) |
564 | { | 721 | { |
565 | buffdoc.unsuspend(); | 722 | buffdoc.unsuspend(); |
566 | if (m_bMonoSpaced) | 723 | if (m_bMonoSpaced) |
567 | { | 724 | { |
568 | return buffdoc.getline(buff ,width(), m_charWidth); | 725 | return buffdoc.getline(buff ,width(), m_charWidth, m_border); |
569 | } | 726 | } |
570 | else | 727 | else |
571 | { | 728 | { |
572 | return buffdoc.getline(buff, width()); | 729 | return buffdoc.getline(buff, width(), m_border); |
573 | } | 730 | } |
574 | } | 731 | } |
575 | 732 | ||
576 | void QTReader::doscroll() | 733 | void QTReader::doscroll() |
577 | { | 734 | { |
578 | if (!m_autoScroll) | 735 | if (!m_autoScroll) |
579 | { | 736 | { |
580 | timer->stop(); | 737 | timer->stop(); |
581 | return; | 738 | return; |
582 | } | 739 | } |
583 | // timer->changeInterval(real_delay()); | 740 | // timer->changeInterval(real_delay()); |
584 | QPainter p( this ); | 741 | QPainter p( this ); |
585 | QBrush b( white); | 742 | QBrush b( white); |
586 | bitBlt(this,0,0,this,0,1,width(),-1); | 743 | bitBlt(this,0,0,this,0,1,width(),-1); |
587 | qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b); | 744 | qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b); |
588 | 745 | ||
589 | if (++m_scrolldy1 == textarray[0]->lineSpacing()) | 746 | if (++m_scrolldy1 == textarray[0]->lineSpacing()) |
590 | { | 747 | { |
748 | #ifdef _SCROLLPIPE | ||
749 | if (m_pipeout != NULL) | ||
750 | { | ||
751 | QString outstr = toQString(textarray[0]->data()); | ||
752 | if (!outstr.isEmpty()) | ||
753 | { | ||
754 | fprintf(m_pipeout, "%s\n", (const char*)outstr); | ||
755 | fflush(m_pipeout); | ||
756 | } | ||
757 | else if (m_pauseAfterEachPara) | ||
758 | { | ||
759 | m_isPaused = true; | ||
760 | timer->stop(); | ||
761 | } | ||
762 | // write(m_pipeout, (const char*)outstr, outstr.length()); | ||
763 | // write(m_pipeout, "\n", 1); | ||
764 | // fputc(10, m_pipeout); | ||
765 | } | ||
766 | #endif | ||
591 | CDrawBuffer* buff = textarray[0]; | 767 | CDrawBuffer* buff = textarray[0]; |
592 | for (int i = 1; i <= numlines; i++) | 768 | for (int i = 1; i <= numlines; i++) |
593 | { | 769 | { |
594 | textarray[i-1] = textarray[i]; | 770 | textarray[i-1] = textarray[i]; |
595 | locnarray[i-1] = locnarray[i]; | 771 | locnarray[i-1] = locnarray[i]; |
596 | } | 772 | } |
597 | textarray[numlines] = buff; | 773 | textarray[numlines] = buff; |
598 | --numlines; | 774 | --numlines; |
599 | m_scrolldy1 = 0; | 775 | m_scrolldy1 = 0; |
600 | } | 776 | } |
601 | if (++m_scrolldy2 == textarray[numlines]->lineSpacing()) | 777 | if (++m_scrolldy2 == textarray[numlines]->lineSpacing()) |
602 | { | 778 | { |
603 | m_scrolldy2 = 0; | 779 | m_scrolldy2 = 0; |
604 | numlines++; | 780 | numlines++; |
605 | 781 | ||
606 | if (textarray[numlines] == NULL) | 782 | if (textarray[numlines] == NULL) |
607 | { | 783 | { |
608 | textarray[numlines] = new CDrawBuffer(&m_fontControl); | 784 | textarray[numlines] = new CDrawBuffer(&m_fontControl); |
609 | } | 785 | } |
610 | locnarray[numlines] = locate(); | 786 | locnarray[numlines] = locate(); |
611 | int ch = getline(textarray[numlines]); | 787 | int ch = getline(textarray[numlines]); |
612 | textarray[numlines-1]->render(&p, height() - textarray[numlines-1]->descent() - 2, m_bMonoSpaced, m_charWidth, width()); | 788 | textarray[numlines-1]->render(&p, height() - textarray[numlines-1]->descent() - 2, m_bMonoSpaced, m_charWidth, width(), m_border); |
613 | mylastpos = locate(); | 789 | mylastpos = locate(); |
614 | if (!ch) | 790 | if (!ch) |
615 | { | 791 | { |
616 | m_autoScroll = false; | 792 | m_autoScroll = false; |
793 | #ifdef _SCROLLPIPE | ||
794 | for (int i = 0; i < numlines; i++) | ||
795 | { | ||
796 | if (m_pipeout != NULL) | ||
797 | { | ||
798 | QString outstr = toQString(textarray[i]->data()); | ||
799 | if (!outstr.isEmpty()) | ||
800 | { | ||
801 | fprintf(m_pipeout, "%s\n", (const char*)outstr); | ||
802 | fflush(m_pipeout); | ||
803 | } | ||
804 | } | ||
805 | } | ||
806 | #endif | ||
617 | ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); | 807 | ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); |
808 | #ifdef USEQPE | ||
809 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | ||
810 | #endif | ||
618 | } | 811 | } |
619 | emit OnRedraw(); | 812 | emit OnRedraw(); |
620 | } | 813 | } |
621 | } | 814 | } |
622 | 815 | ||
623 | void QTReader::autoscroll() | 816 | void QTReader::autoscroll() |
624 | { | 817 | { |
625 | timer->start(real_delay(), false); | 818 | timer->start(real_delay(), false); |
626 | } | 819 | } |
627 | 820 | ||
628 | void QTReader::setfont() | 821 | void QTReader::setfont() |
629 | { | 822 | { |
630 | // m_fontControl.Change | 823 | // m_fontControl.Change |
631 | m_charWidth = (m_charpc*m_fontControl.currentsize())/100; | 824 | m_charWidth = (m_charpc*m_fontControl.currentsize())/100; |
632 | if (m_charWidth <= 0) m_charWidth = 1; | 825 | if (m_charWidth <= 0) m_charWidth = 1; |
633 | m_ascent = m_fontControl.ascent(); | 826 | m_ascent = m_fontControl.ascent(); |
634 | m_descent = m_fontControl.descent(); | 827 | m_descent = m_fontControl.descent(); |
635 | m_linespacing = m_fontControl.lineSpacing(); | 828 | m_linespacing = m_fontControl.lineSpacing(); |
636 | } | 829 | } |
637 | 830 | ||
638 | void QTReader::drawFonts( QPainter *p ) | 831 | void QTReader::drawFonts( QPainter *p ) |
639 | { | 832 | { |
640 | if (bDoUpdates) | 833 | if (bDoUpdates) |
641 | { | 834 | { |
642 | qDebug("How refreshing..."); | 835 | //qDebug("How refreshing..."); |
643 | if (buffdoc.empty()) return; | 836 | if (buffdoc.empty()) return; |
644 | setfont(); | 837 | setfont(); |
645 | if (m_lastwidth != width()) | 838 | if (m_lastwidth != width()) |
646 | { | 839 | { |
647 | qDebug("Not Optimised %d", m_lastwidth); | 840 | // qDebug("Not Optimised %d", m_lastwidth); |
648 | m_lastwidth = width(); | 841 | m_lastwidth = width(); |
649 | m_lastheight = height(); | 842 | m_lastheight = height(); |
843 | buffdoc.setwidth(m_lastwidth-2*m_border); | ||
650 | locate(pagelocate()); | 844 | locate(pagelocate()); |
651 | qDebug("Not Optimised %d", m_lastwidth); | 845 | // qDebug("Not Optimised %d", m_lastwidth); |
652 | } | 846 | } |
653 | else | 847 | else |
654 | { | 848 | { |
655 | if (m_lastheight > height()) | 849 | int newht = height(); |
850 | if (m_lastheight > newht) | ||
656 | { | 851 | { |
657 | qDebug("Optimised < %d", numlines); | 852 | // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht); |
658 | int ypos = 0; | 853 | int ypos = 0; |
659 | for (int i = 0; i < numlines; i++) | 854 | for (int i = 0; i < numlines; i++) |
660 | { | 855 | { |
661 | if ((ypos += textarray[i]->lineSpacing()) > height()) | 856 | if ((ypos += textarray[i]->lineSpacing()) > newht) |
662 | { | 857 | { |
663 | numlines = i; | 858 | numlines = i; |
664 | jumpto(locnarray[i+1]); | 859 | jumpto(mylastpos = locnarray[i+1]); |
665 | break; | 860 | break; |
666 | } | 861 | } |
667 | } | 862 | } |
668 | qDebug("Optimised < %d", numlines); | 863 | // qDebug("Optimised < %d", numlines); |
669 | m_lastheight = height(); | 864 | m_lastheight = newht; |
670 | } | 865 | } |
671 | else if (m_lastheight < height()) | 866 | else if (m_lastheight < newht) |
672 | { | 867 | { |
673 | qDebug("Optimised > %d", numlines); | 868 | // qDebug("Optimised > %d", numlines); |
674 | int ypos = 0; | 869 | int ypos = 0; |
675 | for (int i = 0; i <= numlines; i++) | 870 | for (int i = 0; i <= numlines; i++) |
676 | { | 871 | { |
677 | ypos += textarray[i]->lineSpacing(); | 872 | ypos += textarray[i]->lineSpacing(); |
678 | } | 873 | } |
679 | fillbuffer(numlines+1, ypos); | 874 | fillbuffer(numlines+1, ypos, newht); |
680 | qDebug("Optimised > %d", numlines); | 875 | // qDebug("Optimised > %d", numlines); |
681 | m_lastheight = height(); | ||
682 | } | 876 | } |
683 | if (numlines > 0) | 877 | if (numlines > 0) |
684 | { | 878 | { |
685 | int ypos = textarray[0]->ascent(); | 879 | int ypos = textarray[0]->ascent(); |
686 | textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width()); | 880 | textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_border); |
881 | // int last = (m_showlast) ? numlines : numlines-1; | ||
882 | // for (int i = 1; i <= last; i++) | ||
687 | for (int i = 1; i < numlines; i++) | 883 | for (int i = 1; i < numlines; i++) |
688 | { | 884 | { |
689 | // ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2; | 885 | // ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2; |
690 | ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+ | 886 | ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+ |
691 | (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2; | 887 | (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2; |
692 | textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width()); | 888 | textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_border); |
693 | } | 889 | } |
694 | // mylastpos = locate(); | 890 | // mylastpos = locate(); |
695 | } | 891 | } |
696 | } | 892 | } |
697 | m_scrolldy1 = m_scrolldy2 = 0; | 893 | |
894 | m_scrolldy1 = m_scrolldy2 = m_scrollpart; | ||
895 | if (m_border > 5 && !buffdoc.empty()) | ||
896 | { | ||
897 | p->fillRect(width()-2, 0, 2, height(), cyan); | ||
898 | int sectionsize = (buffdoc.endSection()-buffdoc.startSection()); | ||
899 | int mid = (height()*(locnarray[numlines]+locnarray[0]-2*buffdoc.startSection())+sectionsize)/(2*sectionsize); | ||
900 | p->fillRect(width()-2, mid-5, 2, 10, yellow); | ||
901 | p->fillRect(width()-2, (height()*(locnarray[0]-buffdoc.startSection())+sectionsize/2)/sectionsize, 2, ((locnarray[numlines]-locnarray[0])*height()+sectionsize/2)/sectionsize, magenta); | ||
902 | } | ||
903 | |||
698 | emit OnRedraw(); | 904 | emit OnRedraw(); |
699 | } | 905 | } |
906 | /* | ||
700 | else | 907 | else |
701 | { | 908 | { |
702 | qDebug("Not so refreshing..."); | 909 | qDebug("Not so refreshing..."); |
703 | } | 910 | } |
911 | */ | ||
704 | } | 912 | } |
705 | 913 | ||
706 | QString QTReader::firstword() | 914 | QString QTReader::firstword() |
707 | { | 915 | { |
708 | if (m_bMonoSpaced) | 916 | if (m_bMonoSpaced) |
709 | { | 917 | { |
710 | return toQString(textarray[0]->data()); | 918 | return toQString(textarray[0]->data()); |
711 | } | 919 | } |
712 | else | 920 | else |
713 | { | 921 | { |
714 | int start, end, len, j; | 922 | int start, end, len, j; |
715 | for (j = 0; j < numlines; j++) | 923 | for (j = 0; j < numlines; j++) |
716 | { | 924 | { |
717 | len = textarray[j]->length(); | 925 | len = textarray[j]->length(); |
718 | for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++); | 926 | for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++); |
719 | if (start < len) break; | 927 | if (start < len) break; |
720 | } | 928 | } |
721 | if (j < numlines) | 929 | if (j < numlines) |
722 | { | 930 | { |
723 | QString ret = ""; | 931 | QString ret = ""; |
724 | for (end = start; end < len && isalpha((*textarray[j])[end]); end++) | 932 | for (end = start; end < len && isalpha((*textarray[j])[end]); end++) |
725 | ret += (*textarray[j])[end]; | 933 | ret += (*textarray[j])[end]; |
726 | if (ret.isEmpty()) ret = "Current position"; | 934 | if (ret.isEmpty()) ret = "Current position"; |
727 | return ret; | 935 | return ret; |
728 | } | 936 | } |
729 | else | 937 | else |
730 | return "Current position"; | 938 | return "Current position"; |
731 | } | 939 | } |
732 | } | 940 | } |
733 | 941 | ||
734 | // | 942 | // |
735 | // Construct the QTReader with buttons. | 943 | // Construct the QTReader with buttons. |
736 | // | 944 | // |
737 | 945 | ||
738 | bool QTReader::ChangeFont(int tgt) | 946 | bool QTReader::ChangeFont(int tgt) |
739 | { | 947 | { |
740 | return m_fontControl.ChangeFont(m_fontname, tgt); | 948 | return m_fontControl.ChangeFont(m_fontname, tgt); |
741 | } | 949 | } |
742 | 950 | ||
743 | void QTReader::init() | 951 | void QTReader::init() |
744 | { | 952 | { |
953 | // m_showlast = true; | ||
745 | // setCaption( "Qt Draw Demo Application" ); | 954 | // setCaption( "Qt Draw Demo Application" ); |
746 | 955 | ||
747 | buffdoc.unsuspend(); | 956 | buffdoc.unsuspend(); |
748 | setBackgroundColor( white ); | 957 | setBackgroundColor( white ); |
749 | // QPainter p(this); | 958 | // QPainter p(this); |
750 | // p.setBackgroundMode( Qt::OpaqueMode ); | 959 | // p.setBackgroundMode( Qt::OpaqueMode ); |
751 | buffdoc.setfilter(getfilter()); | 960 | buffdoc.setfilter(getfilter()); |
752 | ChangeFont(m_textsize); | 961 | ChangeFont(m_textsize); |
753 | setFocusPolicy(QWidget::StrongFocus); | 962 | setFocusPolicy(QWidget::StrongFocus); |
754 | // resize( 240, 320 ); | 963 | // resize( 240, 320 ); |
755 | //setFocus(); | 964 | //setFocus(); |
756 | timer = new QTimer(this); | 965 | timer = new QTimer(this); |
757 | connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); | 966 | connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); |
758 | // QMessageBox::information(this, "init", m_lastfile, 1); | 967 | // QMessageBox::information(this, "init", m_lastfile, 1); |
759 | setfont(); | 968 | setfont(); |
760 | /* | 969 | /* |
761 | if (!m_lastfile.isEmpty()) | 970 | if (!m_lastfile.isEmpty()) |
762 | { | 971 | { |
763 | m_string = DocLnk(m_lastfile).name(); | 972 | m_string = DocLnk(m_lastfile).name(); |
764 | load_file(m_lastfile); | 973 | load_file(m_lastfile); |
765 | } | 974 | } |
766 | */ | 975 | */ |
767 | } | 976 | } |
768 | 977 | ||
769 | // | 978 | // |
770 | // Clean up | 979 | // Clean up |
771 | // | 980 | // |
772 | QTReader::~QTReader() | 981 | QTReader::~QTReader() |
773 | { | 982 | { |
983 | #ifdef USEQPE | ||
984 | if (m_autoScroll) | ||
985 | { | ||
986 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | ||
987 | } | ||
988 | #endif | ||
989 | #ifdef _SCROLLPIPE | ||
990 | if (m_pipeout != NULL) | ||
991 | { | ||
992 | fclose(m_pipeout); | ||
993 | } | ||
994 | #endif | ||
774 | } | 995 | } |
775 | 996 | ||
776 | // | 997 | // |
777 | // Calls the drawing function as specified by the radio buttons. | 998 | // Calls the drawing function as specified by the radio buttons. |
778 | // | 999 | // |
779 | 1000 | ||
780 | void QTReader::drawIt( QPainter *p ) | 1001 | void QTReader::drawIt( QPainter *p ) |
781 | { | 1002 | { |
782 | drawFonts(p); | 1003 | drawFonts(p); |
783 | } | 1004 | } |
784 | 1005 | ||
785 | // | 1006 | // |
786 | // Called when the print button is clicked. | 1007 | // Called when the print button is clicked. |
787 | // | 1008 | // |
788 | /* | 1009 | /* |
789 | void QTReader::printIt() | 1010 | void QTReader::printIt() |
790 | { | 1011 | { |
791 | #ifndef QT_NO_PRINTER | 1012 | #ifndef QT_NO_PRINTER |
792 | if ( printer->setup( this ) ) { | 1013 | if ( printer->setup( this ) ) { |
793 | QPainter paint; | 1014 | QPainter paint; |
794 | if ( !paint.begin( printer ) ) | 1015 | if ( !paint.begin( printer ) ) |
795 | return; | 1016 | return; |
796 | drawIt( &paint ); | 1017 | drawIt( &paint ); |
797 | } | 1018 | } |
798 | #endif | 1019 | #endif |
799 | } | 1020 | } |
800 | */ | 1021 | */ |
801 | // | 1022 | // |
802 | // Called when the widget needs to be updated. | 1023 | // Called when the widget needs to be updated. |
803 | // | 1024 | // |
804 | 1025 | ||
805 | void QTReader::paintEvent( QPaintEvent * ) | 1026 | void QTReader::paintEvent( QPaintEvent * ) |
806 | { | 1027 | { |
807 | QPainter paint( this ); | 1028 | QPainter paint( this ); |
808 | drawIt( &paint ); | 1029 | drawIt( &paint ); |
809 | } | 1030 | } |
810 | 1031 | ||
811 | // | 1032 | // |
812 | // Called when the widget has been resized. | 1033 | // Called when the widget has been resized. |
813 | // Moves the button group to the upper right corner | 1034 | // Moves the button group to the upper right corner |
814 | // of the widget. | 1035 | // of the widget. |
815 | 1036 | ||
816 | /* | 1037 | /* |
817 | void QTReader::resizeEvent( QResizeEvent * ) | 1038 | void QTReader::resizeEvent( QResizeEvent * ) |
818 | { | 1039 | { |
819 | // qDebug("resize:(%u,%u)", width(), height()); | 1040 | // // qDebug("resize:(%u,%u)", width(), height()); |
820 | // bgroup->move( width()-bgroup->width(), 0 ); | 1041 | // bgroup->move( width()-bgroup->width(), 0 ); |
821 | } | 1042 | } |
822 | */ | 1043 | */ |
823 | 1044 | ||
824 | // | 1045 | // |
825 | // Create and display our widget. | 1046 | // Create and display our widget. |
826 | // | 1047 | // |
827 | /* | 1048 | /* |
828 | int main( int argc, tchar **argv ) | 1049 | int main( int argc, tchar **argv ) |
829 | { | 1050 | { |
830 | QApplication app( argc, argv ); | 1051 | QApplication app( argc, argv ); |
831 | QTReader draw; | 1052 | QTReader draw; |
832 | app.setMainWidget( &draw ); | 1053 | app.setMainWidget( &draw ); |
833 | draw.setCaption("Qt Example - Drawdemo"); | 1054 | draw.setCaption("Qt Example - Drawdemo"); |
834 | draw.show(); | 1055 | draw.show(); |
835 | return app.exec(); | 1056 | return app.exec(); |
836 | } | 1057 | } |
837 | */ | 1058 | */ |
838 | 1059 | ||
839 | 1060 | ||
840 | bool QTReader::locate(unsigned long n) { | 1061 | bool QTReader::locate(unsigned long n) { |
841 | //printf("Locate\n"); | 1062 | //printf("Locate\n"); |
842 | buffdoc.unsuspend(); | 1063 | buffdoc.unsuspend(); |
843 | buffdoc.locate(n); | 1064 | buffdoc.locate(n); |
844 | // qDebug("&buffdoc.located"); | 1065 | // // qDebug("&buffdoc.located"); |
845 | fillbuffer(); | 1066 | fillbuffer(); |
846 | // qDebug("&Buffer filled"); | 1067 | // // qDebug("&Buffer filled"); |
847 | update(); | 1068 | update(); |
848 | // qDebug("&Located"); | 1069 | // // qDebug("&Located"); |
849 | return true; | 1070 | return true; |
850 | } | 1071 | } |
851 | 1072 | ||
852 | unsigned int QTReader::screenlines() | 1073 | unsigned int QTReader::screenlines() |
853 | { | 1074 | { |
854 | // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; | 1075 | // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; |
855 | // return (height()-m_descent)/(m_linespacing); | 1076 | // return (height()-m_descent)/(m_linespacing); |
856 | return (height()-2)/(m_linespacing); | 1077 | return (height()-2)/(m_linespacing); |
857 | }; | 1078 | }; |
858 | 1079 | ||
859 | bool QTReader::fillbuffer(int reuse, int ht) | 1080 | bool QTReader::fillbuffer(int reuse, int ht, int newht) |
860 | { | 1081 | { |
861 | buffdoc.unsuspend(); | 1082 | buffdoc.unsuspend(); |
862 | if (buffdoc.empty()) return false; | 1083 | if (buffdoc.empty()) return false; |
863 | m_scrolldy1 = m_scrolldy2 = 0; | 1084 | if (newht < 0) |
1085 | m_lastheight = height(); | ||
1086 | else | ||
1087 | m_lastheight = newht; | ||
864 | int ch; | 1088 | int ch; |
865 | bool ret = false; | 1089 | bool ret = false; |
866 | unsigned int oldpagepos = locnarray[reuse]; | 1090 | unsigned int oldpagepos = locnarray[reuse]; |
867 | int ypos = ht; | 1091 | int lastypos = ht, ypos = ht; |
868 | numlines = reuse; | 1092 | numlines = reuse; |
869 | while (ypos < height() || numlines < 2) | 1093 | while (ypos < m_lastheight || numlines < 2) |
870 | { | 1094 | { |
1095 | lastypos = ypos; | ||
871 | if (textarray[numlines] == NULL) | 1096 | if (textarray[numlines] == NULL) |
872 | { | 1097 | { |
873 | textarray[numlines] = new CDrawBuffer(&m_fontControl); | 1098 | textarray[numlines] = new CDrawBuffer(&m_fontControl); |
874 | } | 1099 | } |
875 | locnarray[numlines] = locate(); | 1100 | locnarray[numlines] = locate(); |
876 | int ch = getline(textarray[numlines]); | 1101 | int ch = getline(textarray[numlines]); |
877 | ypos += textarray[numlines]->lineSpacing(); | 1102 | ypos += textarray[numlines]->lineSpacing(); |
878 | numlines++; | 1103 | numlines++; |
879 | if (!ch) | 1104 | if (!ch) |
880 | { | 1105 | { |
881 | if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/) | 1106 | if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/) |
882 | { | 1107 | { |
883 | locate(oldpagepos); | 1108 | locate(oldpagepos); |
884 | return false; | 1109 | return false; |
885 | } | 1110 | } |
886 | else | 1111 | else |
887 | { | 1112 | { |
888 | --numlines; | 1113 | --numlines; |
889 | mylastpos = locate(); | 1114 | mylastpos = locate(); |
890 | return true; | 1115 | return true; |
891 | } | 1116 | } |
892 | } | 1117 | } |
893 | } | 1118 | } |
894 | 1119 | ||
895 | --numlines; | 1120 | --numlines; |
896 | mylastpos = locate(); | 1121 | mylastpos = locate(); |
1122 | m_scrolldy1 = m_scrolldy2 = m_scrollpart = m_lastheight - lastypos; | ||
897 | 1123 | ||
898 | return true; | 1124 | return true; |
899 | } | 1125 | } |
900 | 1126 | ||
901 | |||
902 | void QTReader::dopagedn() | 1127 | void QTReader::dopagedn() |
903 | { | 1128 | { |
1129 | // qDebug("HEIGHT(2):%d", m_lastheight); | ||
904 | buffdoc.unsuspend(); | 1130 | buffdoc.unsuspend(); |
905 | int skip = 0, ypos = 0; | 1131 | int skip = 0, ypos = 0; |
906 | if (locate() != mylastpos) | 1132 | if (locate() != mylastpos) |
907 | { | 1133 | { |
908 | //qDebug("Jumping to %u", mylastpos); | 1134 | ////qDebug("Jumping to %u", mylastpos); |
909 | jumpto(mylastpos); | 1135 | jumpto(mylastpos); |
910 | } | 1136 | } |
911 | CDrawBuffer* reusebuffer = textarray[numlines]; | 1137 | CDrawBuffer* reusebuffer = textarray[numlines]; |
912 | if (reusebuffer != NULL && reusebuffer->eof()) return; | 1138 | if (reusebuffer != NULL && reusebuffer->eof()) return; |
913 | if (reusebuffer != NULL) | 1139 | if (reusebuffer != NULL) |
914 | { | 1140 | { |
915 | for (int i = 0; i <= m_overlap; i++) | 1141 | for (int i = 0; i <= m_overlap; i++) |
916 | { | 1142 | { |
917 | int offset = numlines - m_overlap + i; | 1143 | int offset = numlines - m_overlap + i; |
918 | reusebuffer = textarray[offset]; | 1144 | reusebuffer = textarray[offset]; |
919 | size_t reuselocn = locnarray[offset]; | 1145 | size_t reuselocn = locnarray[offset]; |
920 | textarray[offset] = textarray[i]; | 1146 | textarray[offset] = textarray[i]; |
921 | textarray[i] = reusebuffer; | 1147 | textarray[i] = reusebuffer; |
922 | // reusebuffer->empty(); | 1148 | // reusebuffer->empty(); |
923 | locnarray[offset] = locnarray[i]; | 1149 | locnarray[offset] = locnarray[i]; |
924 | locnarray[i] = reuselocn; | 1150 | locnarray[i] = reuselocn; |
925 | ypos += textarray[i]->lineSpacing(); | 1151 | ypos += textarray[i]->lineSpacing(); |
926 | skip++; | 1152 | skip++; |
927 | } | 1153 | } |
928 | } | 1154 | } |
929 | if (fillbuffer(skip, ypos)) | 1155 | if (fillbuffer(skip, ypos)) |
930 | { | 1156 | { |
931 | update(); | 1157 | update(); |
932 | } | 1158 | } |
933 | } | 1159 | } |
934 | 1160 | ||
935 | void QTReader::dopageup() | 1161 | void QTReader::dopageup() |
936 | { | 1162 | { |
937 | buffdoc.unsuspend(); | 1163 | buffdoc.unsuspend(); |
938 | dopageup(locnarray[(m_overlap < numlines) ? m_overlap : numlines/2]); | 1164 | dopageup(locnarray[(m_overlap < numlines) ? m_overlap : numlines/2]); |
939 | } | 1165 | } |
940 | 1166 | ||
1167 | bool QTReader::synch(size_t start, size_t end) | ||
1168 | { | ||
1169 | jumpto(start); | ||
1170 | while (start++ < end) | ||
1171 | { | ||
1172 | tchar ch = getch(); | ||
1173 | if (ch == 10) return true; | ||
1174 | if (ch == UEOF) return false; | ||
1175 | } | ||
1176 | return false; | ||
1177 | } | ||
1178 | |||
941 | void QTReader::dopageup(unsigned int target) | 1179 | void QTReader::dopageup(unsigned int target) |
942 | { | 1180 | { |
943 | buffdoc.unsuspend(); | 1181 | buffdoc.unsuspend(); |
944 | CBufferFace<CDrawBuffer*> buff; | 1182 | CBufferFace<CDrawBuffer*> buff; |
945 | CBufferFace<size_t> loc; | 1183 | CBufferFace<size_t> loc; |
946 | 1184 | ||
947 | size_t delta, guess = 2048; | 1185 | size_t delta, guess = 2*(locate()-pagelocate()), lastdelta = 0; |
948 | bool ch = true; | 1186 | bool ch = true; |
949 | int nbfl, ypos = 0; | 1187 | int nbfl, ypos = 0; |
950 | 1188 | if (guess < 128) guess = 128; | |
951 | while (1) | 1189 | while (1) |
952 | { | 1190 | { |
953 | ch = true; | 1191 | ch = true; |
954 | nbfl = 0; | ||
955 | if (target < guess) | 1192 | if (target < guess) |
956 | { | 1193 | { |
957 | delta = 0; // 0 is a flag to say don't guess any more | 1194 | delta = 0; // 0 is a flag to say don't guess any more |
958 | jumpto( (m_continuousDocument) ? 0 : buffdoc.startSection() ); | 1195 | jumpto( (m_continuousDocument) ? 0 : buffdoc.startSection() ); |
959 | } | 1196 | } |
960 | else if (!m_continuousDocument && (target - guess < buffdoc.startSection())) | 1197 | else if (!m_continuousDocument && (target - guess < buffdoc.startSection())) |
961 | { | 1198 | { |
962 | delta = 0; // 0 is a flag to say don't guess any more | 1199 | delta = 0; // 0 is a flag to say don't guess any more |
963 | jumpto(buffdoc.startSection()); | 1200 | jumpto(buffdoc.startSection()); |
964 | } | 1201 | } |
965 | else | 1202 | else |
966 | { | 1203 | { |
967 | delta = guess; | 1204 | delta = guess; |
968 | 1205 | if (!synch(target-delta, target-lastdelta)) | |
969 | jumpto(target - delta); | ||
970 | |||
971 | buff[0] = new CDrawBuffer(&m_fontControl); | ||
972 | |||
973 | do | ||
974 | { | 1206 | { |
975 | 1207 | lastdelta = delta; | |
976 | if (!getline(buff[0])) break; | 1208 | if (guess < 4000) |
977 | 1209 | { | |
978 | if (locate() > target) break; | 1210 | guess <<= 1; |
1211 | continue; | ||
1212 | } | ||
1213 | else | ||
1214 | { | ||
1215 | jumpto(target-delta); | ||
1216 | } | ||
979 | } | 1217 | } |
980 | while (!buffdoc.iseol()); | ||
981 | } | 1218 | } |
982 | 1219 | ||
1220 | nbfl = 0; | ||
983 | ypos = 0; | 1221 | ypos = 0; |
1222 | |||
984 | while (locate() < target) | 1223 | while (locate() < target) |
985 | { | 1224 | { |
986 | if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); | 1225 | if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); |
987 | loc[nbfl] = locate(); | 1226 | loc[nbfl] = locate(); |
988 | ch = getline(buff[nbfl]); | 1227 | ch = getline(buff[nbfl]); |
989 | ypos += buff[nbfl]->lineSpacing(); | 1228 | ypos += buff[nbfl]->lineSpacing(); |
990 | nbfl++; | 1229 | nbfl++; |
991 | if (!ch) break; | 1230 | if (!ch) break; |
992 | } | 1231 | } |
993 | if (ypos < height() && (delta != 0)) | 1232 | if (guess < 4000 && ypos < height() && (delta != 0)) |
994 | { | 1233 | { |
995 | for (int i = 0; i < nbfl; i++) | 1234 | for (int i = 0; i < nbfl; i++) |
996 | { | 1235 | { |
997 | delete buff[i]; | 1236 | delete buff[i]; |
998 | buff[i] = NULL; | 1237 | buff[i] = NULL; |
999 | } | 1238 | } |
1000 | guess <<= 1; | 1239 | guess <<= 1; |
1001 | continue; | 1240 | continue; |
1002 | } | 1241 | } |
1003 | break; | 1242 | break; |
1004 | } | 1243 | } |
1005 | if (ch) | 1244 | if (ch) |
1006 | { | 1245 | { |
1007 | if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); | 1246 | if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl); |
1008 | loc[nbfl] = locate(); | 1247 | loc[nbfl] = locate(); |
1009 | int ch = getline(buff[nbfl]); | 1248 | int ch = getline(buff[nbfl]); |
1010 | nbfl++; | 1249 | nbfl++; |
1011 | } | 1250 | } |
1251 | /* | ||
1012 | ypos = 0; | 1252 | ypos = 0; |
1013 | numlines = 0; | 1253 | numlines = 0; |
1014 | while (ypos < height() && numlines <= nbfl-1) | 1254 | while (ypos < height() && numlines <= nbfl-1) |
1015 | { | 1255 | { |
1016 | ypos += buff[nbfl - numlines - 1]->lineSpacing(); | 1256 | ypos += buff[nbfl - numlines - 1]->lineSpacing(); |
1017 | numlines++; | 1257 | numlines++; |
1018 | } | 1258 | } |
1019 | --numlines; | 1259 | --numlines; |
1260 | */ | ||
1261 | |||
1262 | ypos = 0; | ||
1263 | numlines = 0; | ||
1264 | while (ypos < height() && numlines+2 <= nbfl) | ||
1265 | { | ||
1266 | ypos += buff[nbfl - numlines - 2]->lineSpacing(); | ||
1267 | numlines++; | ||
1268 | } | ||
1269 | if (numlines > 0) --numlines; | ||
1270 | if (numlines == 0 && nbfl > 1) numlines = 1; | ||
1271 | |||
1020 | int offset = nbfl-1; | 1272 | int offset = nbfl-1; |
1021 | offset -= numlines; | 1273 | offset -= numlines; |
1022 | ypos = 0; | 1274 | ypos = 0; |
1023 | for (int i = 0; i <= numlines; i++) | 1275 | for (int i = 0; i <= numlines; i++) |
1024 | { | 1276 | { |
1025 | delete textarray[i]; | 1277 | delete textarray[i]; |
1026 | textarray[i] = buff[offset+i]; | 1278 | textarray[i] = buff[offset+i]; |
1027 | locnarray[i] = loc[offset + i]; | 1279 | locnarray[i] = loc[offset + i]; |
1028 | ypos += textarray[i]->lineSpacing(); | 1280 | ypos += textarray[i]->lineSpacing(); |
1029 | } | 1281 | } |
1282 | #ifdef _WINDOWS | ||
1283 | for (i = 0; i < nbfl - numlines - 1; i++) | ||
1284 | #else | ||
1030 | for (int i = 0; i < nbfl - numlines - 1; i++) | 1285 | for (int i = 0; i < nbfl - numlines - 1; i++) |
1286 | #endif | ||
1031 | { | 1287 | { |
1032 | delete buff[i]; | 1288 | delete buff[i]; |
1033 | } | 1289 | } |
1034 | 1290 | ||
1035 | while (ypos < height()) | 1291 | while (ypos < height()) |
1036 | { | 1292 | { |
1037 | numlines++; | 1293 | numlines++; |
1038 | locnarray[numlines] = locate(); | 1294 | locnarray[numlines] = locate(); |
1039 | if (textarray[numlines] == NULL) textarray[numlines] = new CDrawBuffer(&m_fontControl); | 1295 | if (textarray[numlines] == NULL) textarray[numlines] = new CDrawBuffer(&m_fontControl); |
1040 | if (!getline(textarray[numlines])) break; | 1296 | if (!getline(textarray[numlines])) break; |
1041 | ypos += textarray[numlines]->lineSpacing(); | 1297 | ypos += textarray[numlines]->lineSpacing(); |
1042 | } | 1298 | } |
1043 | 1299 | ||
1044 | mylastpos = locate(); | 1300 | mylastpos = locate(); |
1045 | 1301 | ||
1046 | update(); | 1302 | update(); |
1047 | } | 1303 | } |
1048 | 1304 | ||
1049 | bool QTReader::load_file(const char *newfile, unsigned int _lcn) | 1305 | bool QTReader::load_file(const char *newfile, unsigned int _lcn) |
1050 | { | 1306 | { |
1051 | // QMessageBox::information(this, "Name", name, 1); | 1307 | // QMessageBox::information(this, "Name", name, 1); |
1052 | // QMessageBox::information(this, "load_file", newfile, 1); | 1308 | // QMessageBox::information(this, "load_file", newfile, 1); |
1053 | 1309 | ||
1054 | bool bRC = false; | 1310 | bool bRC = false; |
1055 | unsigned int lcn = _lcn; | 1311 | unsigned int lcn = _lcn; |
1056 | if (m_lastfile == newfile) | 1312 | if (m_lastfile == newfile) |
1057 | { | 1313 | { |
1058 | lcn = m_lastposn; | 1314 | lcn = m_lastposn; |
1059 | } | 1315 | } |
1060 | m_lastfile = newfile; | ||
1061 | // QMessageBox::information(0, "Opening...", newfile); | 1316 | // QMessageBox::information(0, "Opening...", newfile); |
1062 | m_lastwidth = width(); | 1317 | m_lastwidth = width(); |
1063 | m_lastheight = height(); | 1318 | m_lastheight = height(); |
1064 | if (buffdoc.openfile(this,newfile) == 0) | 1319 | if (buffdoc.openfile(this,newfile) == 0) |
1065 | { | 1320 | { |
1321 | m_lastfile = newfile; | ||
1322 | buffdoc.setwidth(m_lastwidth-2*m_border); | ||
1066 | bRC = true; | 1323 | bRC = true; |
1067 | buffdoc.setContinuous(m_continuousDocument); | 1324 | buffdoc.setContinuous(m_continuousDocument); |
1068 | // qDebug("buffdoc.openfile done"); | 1325 | // // qDebug("buffdoc.openfile done"); |
1069 | locate(lcn); | 1326 | locate(lcn); |
1070 | // qDebug("buffdoc.locate done"); | 1327 | // // qDebug("buffdoc.locate done"); |
1071 | } | 1328 | } |
1072 | setfilter(getfilter()); | 1329 | setfilter(getfilter()); |
1073 | update(); | 1330 | update(); |
1074 | // qDebug("Updated"); | 1331 | // // qDebug("Updated"); |
1075 | return bRC; | 1332 | return bRC; |
1076 | } | 1333 | } |
1077 | 1334 | ||
1078 | void QTReader::lineDown() | 1335 | void QTReader::lineDown() |
1079 | { | 1336 | { |
1080 | int ypos = 0; | 1337 | int ypos = 0; |
1081 | int offset = numlines; | 1338 | int offset = numlines; |
1082 | 1339 | ||
1083 | for (int i = 0; i <= numlines; i++) | 1340 | for (int i = 0; i <= numlines; i++) |
1084 | { | 1341 | { |
1085 | if ((ypos += textarray[numlines-i]->lineSpacing()) > height()) | 1342 | if ((ypos += textarray[numlines-i]->lineSpacing()) > height()) |
1086 | { | 1343 | { |
1087 | offset = i-1; | 1344 | offset = i-1; |
1088 | break; | 1345 | break; |
1089 | } | 1346 | } |
1090 | } | 1347 | } |
1091 | offset = numlines - offset; | 1348 | offset = numlines - offset; |
1349 | #ifdef _WINDOWS | ||
1350 | for (i = offset; i <= numlines; i++) | ||
1351 | #else | ||
1092 | for (int i = offset; i <= numlines; i++) | 1352 | for (int i = offset; i <= numlines; i++) |
1353 | #endif | ||
1093 | { | 1354 | { |
1094 | CDrawBuffer* buff = textarray[i-offset]; | 1355 | CDrawBuffer* buff = textarray[i-offset]; |
1095 | textarray[i-offset] = textarray[i]; | 1356 | textarray[i-offset] = textarray[i]; |
1096 | locnarray[i-offset] = locnarray[i]; | 1357 | locnarray[i-offset] = locnarray[i]; |
1097 | textarray[i] = buff; | 1358 | textarray[i] = buff; |
1098 | } | 1359 | } |
1099 | numlines = numlines - offset + 1; | 1360 | numlines = numlines - offset + 1; |
1100 | locnarray[numlines] = locate(); | 1361 | locnarray[numlines] = locate(); |
1101 | if (textarray[numlines] == NULL) | 1362 | if (textarray[numlines] == NULL) |
1102 | { | 1363 | { |
1103 | textarray[numlines] = new CDrawBuffer(&m_fontControl); | 1364 | textarray[numlines] = new CDrawBuffer(&m_fontControl); |
1104 | } | 1365 | } |
1105 | getline(textarray[numlines]); | 1366 | getline(textarray[numlines]); |
1106 | mylastpos = locate(); | 1367 | mylastpos = locate(); |
1107 | update(); | 1368 | update(); |
1108 | } | 1369 | } |
1109 | /* | 1370 | /* |
1110 | void QTReader::lineUp() | 1371 | void QTReader::lineUp() |
1111 | { | 1372 | { |
1112 | CBuffer** buff = textarray; | 1373 | CBuffer** buff = textarray; |
1113 | unsigned int *loc = new unsigned int[numlines]; | 1374 | unsigned int *loc = new unsigned int[numlines]; |
1114 | int cbptr = 0; | 1375 | int cbptr = 0; |
1115 | if (locate() != mylastpos) jumpto(mylastpos); | 1376 | if (locate() != mylastpos) jumpto(mylastpos); |
1116 | unsigned int target = locnarray[numlines-1]; | 1377 | unsigned int target = locnarray[numlines-1]; |
1117 | if (buffdoc.hasrandomaccess()) | 1378 | if (buffdoc.hasrandomaccess()) |
1118 | { | 1379 | { |
1119 | unsigned int delta = locate()-pagelocate(); | 1380 | unsigned int delta = locate()-pagelocate(); |
1120 | if (delta < 64) delta = 64; | 1381 | if (delta < 64) delta = 64; |
1121 | do | 1382 | do |
1122 | { | 1383 | { |
1123 | delta <<= 1; | 1384 | delta <<= 1; |
1124 | if (delta >= target) | 1385 | if (delta >= target) |
1125 | { | 1386 | { |
1126 | delta = target; | 1387 | delta = target; |
1127 | jumpto(0); | 1388 | jumpto(0); |
1128 | for (int i = 0; i < numlines; i++) | 1389 | for (int i = 0; i < numlines; i++) |
1129 | { | 1390 | { |
1130 | loc[i] = locate(); | 1391 | loc[i] = locate(); |
1131 | getline(buff[i]); | 1392 | getline(buff[i]); |
1132 | } | 1393 | } |
1133 | break; | 1394 | break; |
1134 | } | 1395 | } |
1135 | jumpto(target-delta); | 1396 | jumpto(target-delta); |
1136 | do | 1397 | do |
1137 | { | 1398 | { |
1138 | buffdoc.getline(buff[0],width()); | 1399 | buffdoc.getline(buff[0],width()); |
1139 | #ifdef WS | 1400 | #ifdef WS |
1140 | //printf("Trying:%s\n",buff[0]); | 1401 | //printf("Trying:%s\n",buff[0]); |
1141 | #endif | 1402 | #endif |
1142 | if (locate() > target) continue; | 1403 | if (locate() > target) continue; |
1143 | } | 1404 | } |
1144 | while (!buffdoc.iseol()); | 1405 | while (!buffdoc.iseol()); |
1145 | for (int i = 0; i < numlines; i++) | 1406 | for (int i = 0; i < numlines; i++) |
1146 | { | 1407 | { |
1147 | loc[i] = locate(); | 1408 | loc[i] = locate(); |
1148 | buffdoc.getline(buff[i],width()); | 1409 | buffdoc.getline(buff[i],width()); |
1149 | #ifdef WS | 1410 | #ifdef WS |
1150 | //printf("Filling:%s\n",buff[i]); | 1411 | //printf("Filling:%s\n",buff[i]); |
1151 | #endif | 1412 | #endif |
1152 | } | 1413 | } |
1153 | } | 1414 | } |
1154 | while (locate() >= target && delta < 4096); | 1415 | while (locate() >= target && delta < 4096); |
1155 | #ifdef WS | 1416 | #ifdef WS |
1156 | //printf("Delta:%u\n",delta); | 1417 | //printf("Delta:%u\n",delta); |
1157 | #endif | 1418 | #endif |
1158 | } | 1419 | } |
1159 | else | 1420 | else |
1160 | { | 1421 | { |
1161 | jumpto(0); | 1422 | jumpto(0); |
1162 | for (int i = 0; i < numlines; i++) | 1423 | for (int i = 0; i < numlines; i++) |
1163 | { | 1424 | { |
1164 | loc[i] = locate(); | 1425 | loc[i] = locate(); |
1165 | buffdoc.getline(buff[i],width()); | 1426 | buffdoc.getline(buff[i],width()); |
1166 | } | 1427 | } |
1167 | } | 1428 | } |
1168 | cbptr = 0; | 1429 | cbptr = 0; |
1169 | while (locate() < target) | 1430 | while (locate() < target) |
1170 | { | 1431 | { |
1171 | loc[cbptr] = locate(); | 1432 | loc[cbptr] = locate(); |
1172 | buffdoc.getline(buff[cbptr], width()); | 1433 | buffdoc.getline(buff[cbptr], width()); |
1173 | #ifdef WS | 1434 | #ifdef WS |
1174 | //printf("Adding:%s\n",buff[cbptr]->data()); | 1435 | //printf("Adding:%s\n",buff[cbptr]->data()); |
1175 | #endif | 1436 | #endif |
1176 | cbptr = (cbptr+1) % numlines; | 1437 | cbptr = (cbptr+1) % numlines; |
1177 | } | 1438 | } |
1178 | pagepos = loc[cbptr]; | 1439 | pagepos = loc[cbptr]; |
1179 | textarray = new CBuffer*[numlines]; | 1440 | textarray = new CBuffer*[numlines]; |
1180 | for (int i = 0; i < numlines; i++) | 1441 | for (int i = 0; i < numlines; i++) |
1181 | { | 1442 | { |
1182 | int j = (cbptr+i)%numlines; | 1443 | int j = (cbptr+i)%numlines; |
1183 | textarray[i] = buff[j]; | 1444 | textarray[i] = buff[j]; |
1184 | locnarray[i] = loc[j]; | 1445 | locnarray[i] = loc[j]; |
1185 | } | 1446 | } |
1186 | delete [] buff; | 1447 | delete [] buff; |
1187 | delete [] loc; | 1448 | delete [] loc; |
1188 | mylastpos = locate(); | 1449 | mylastpos = locate(); |
1189 | update(); | 1450 | update(); |
1190 | } | 1451 | } |
1191 | */ | 1452 | */ |
1192 | void QTReader::lineUp() | 1453 | void QTReader::lineUp() |
1193 | { | 1454 | { |
1194 | buffdoc.unsuspend(); | 1455 | buffdoc.unsuspend(); |
1195 | CDrawBuffer* buff = textarray[numlines]; | 1456 | CDrawBuffer* buff = textarray[numlines]; |
1196 | unsigned int loc; | 1457 | unsigned int loc; |
1197 | unsigned int end = locnarray[numlines]; | 1458 | unsigned int end = locnarray[numlines]; |
1198 | int cbptr = 0; | 1459 | int cbptr = 0; |
1199 | if (locate() != mylastpos) jumpto(mylastpos); | 1460 | if (locate() != mylastpos) jumpto(mylastpos); |
1200 | unsigned int target = locnarray[0]; | 1461 | unsigned int target = locnarray[0]; |
1201 | if (target == 0) return; | 1462 | if (target == 0) return; |
1202 | if (!m_continuousDocument && (target == buffdoc.startSection())) return; | 1463 | if (!m_continuousDocument && (target == buffdoc.startSection())) return; |
1203 | if (buffdoc.hasrandomaccess()) | 1464 | if (buffdoc.hasrandomaccess()) |
1204 | { | 1465 | { |
1205 | unsigned int delta = locate()-pagelocate(); | 1466 | unsigned int delta = locate()-pagelocate(); |
1206 | if (delta < 64) delta = 64; | 1467 | if (delta < 64) delta = 64; |
1207 | do | 1468 | do |
1208 | { | 1469 | { |
1209 | delta <<= 1; | 1470 | delta <<= 1; |
1210 | if (delta >= target) | 1471 | if (delta >= target) |
1211 | { | 1472 | { |
1212 | delta = target; | 1473 | delta = target; |
1213 | jumpto(0); | 1474 | jumpto(0); |
1214 | loc = locate(); | 1475 | loc = locate(); |
1215 | getline(buff); | 1476 | getline(buff); |
1216 | break; | 1477 | break; |
1217 | } | 1478 | } |
1218 | else if (!m_continuousDocument && (target - delta < buffdoc.startSection())) | 1479 | else if (!m_continuousDocument && (target - delta < buffdoc.startSection())) |
1219 | { | 1480 | { |
1220 | delta = target-buffdoc.startSection(); | 1481 | delta = target-buffdoc.startSection(); |
1221 | jumpto(buffdoc.startSection()); | 1482 | jumpto(buffdoc.startSection()); |
1222 | loc = locate(); | 1483 | loc = locate(); |
1223 | getline(buff); | 1484 | getline(buff); |
1224 | break; | 1485 | break; |
1225 | } | 1486 | } |
1226 | jumpto(target-delta); | 1487 | jumpto(target-delta); |
1227 | do | 1488 | do |
1228 | { | 1489 | { |
1229 | getline(buff); | 1490 | getline(buff); |
1230 | #ifdef WS | 1491 | #ifdef WS |
1231 | //printf("Trying:%s\n",buff[0]); | 1492 | //printf("Trying:%s\n",buff[0]); |
1232 | #endif | 1493 | #endif |
1233 | if (locate() > target) continue; | 1494 | if (locate() > target) continue; |
1234 | } | 1495 | } |
1235 | while (!buffdoc.iseol()); | 1496 | while (!buffdoc.iseol()); |
1236 | loc = locate(); | 1497 | loc = locate(); |
1237 | getline(buff); | 1498 | getline(buff); |
1238 | } | 1499 | } |
1239 | while (locate() >= target && delta < 4096); | 1500 | while (locate() >= target && delta < 4096); |
1240 | } | 1501 | } |
1241 | else | 1502 | else |
1242 | { | 1503 | { |
1243 | jumpto(0); | 1504 | jumpto(0); |
1244 | loc = locate(); | 1505 | loc = locate(); |
1245 | getline(buff); | 1506 | getline(buff); |
1246 | } | 1507 | } |
1247 | cbptr = 0; | 1508 | cbptr = 0; |
1248 | while (locate() < target) | 1509 | while (locate() < target) |
1249 | { | 1510 | { |
1250 | loc = locate(); | 1511 | loc = locate(); |
1251 | getline(buff); | 1512 | getline(buff); |
1252 | } | 1513 | } |
1253 | for (int i = numlines; i > 0; i--) | 1514 | for (int i = numlines; i > 0; i--) |
1254 | { | 1515 | { |
1255 | textarray[i] = textarray[i-1]; | 1516 | textarray[i] = textarray[i-1]; |
1256 | locnarray[i] = locnarray[i-1]; | 1517 | locnarray[i] = locnarray[i-1]; |
1257 | } | 1518 | } |
1258 | textarray[0] = buff; | 1519 | textarray[0] = buff; |
1259 | locnarray[0] = loc; | 1520 | locnarray[0] = loc; |
1260 | int start = numlines; | 1521 | int start = numlines; |
1261 | int ypos = 0; | 1522 | int ypos = 0; |
1262 | for (int i = 0; i <= numlines; i++) | 1523 | #ifdef _WINDOWS |
1524 | for (i = 0; i <= numlines; i++) | ||
1525 | #else | ||
1526 | for (int i = 0; i <= numlines; i++) | ||
1527 | #endif | ||
1263 | { | 1528 | { |
1264 | ypos += textarray[i]->lineSpacing(); | 1529 | ypos += textarray[i]->lineSpacing(); |
1265 | if (ypos > height()) | 1530 | if (ypos > height()) |
1266 | { | 1531 | { |
1267 | start = i; | 1532 | start = i; |
1268 | ypos -= textarray[i]->lineSpacing(); | 1533 | ypos -= textarray[i]->lineSpacing(); |
1269 | break; | 1534 | break; |
1270 | } | 1535 | } |
1271 | } | 1536 | } |
1272 | jumpto(locnarray[start]); | 1537 | jumpto(locnarray[start]); |
1273 | fillbuffer(start, ypos); | 1538 | fillbuffer(start, ypos); |
1274 | update(); | 1539 | update(); |
1275 | } | 1540 | } |
1276 | 1541 | ||
1277 | bool QTReader::empty() | 1542 | bool QTReader::empty() |
1278 | { | 1543 | { |
1279 | return buffdoc.empty(); | 1544 | return buffdoc.empty(); |
1280 | } | 1545 | } |
1281 | 1546 | ||
1282 | MarkupType QTReader::PreferredMarkup() | 1547 | MarkupType QTReader::PreferredMarkup() |
1283 | { | 1548 | { |
1284 | MarkupType m = buffdoc.PreferredMarkup(); | 1549 | MarkupType m = buffdoc.PreferredMarkup(); |
1285 | if (m == cTEXT) | 1550 | if (m == cTEXT) |
1286 | { | 1551 | { |
1287 | int ext = m_lastfile.findRev('.'); | 1552 | int ext = m_lastfile.findRev('.'); |
1288 | if (ext >= 0) | 1553 | if (ext >= 0) |
1289 | { | 1554 | { |
1290 | QString ft = m_lastfile.right(m_lastfile.length()-ext-1).upper(); | 1555 | QString ft = m_lastfile.right(m_lastfile.length()-ext-1).upper(); |
1291 | if (ft.left(3) == "HTM") | 1556 | if (ft.left(3) == "HTM") |
1292 | { | 1557 | { |
1293 | m = cHTML; | 1558 | m = cHTML; |
1294 | } | 1559 | } |
1295 | } | 1560 | } |
1296 | } | 1561 | } |
1297 | return m; | 1562 | return m; |
1298 | } | 1563 | } |
1299 | |||
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 3d5f57d..dfbdfb9 100644 --- a/noncore/apps/opie-reader/QTReader.h +++ b/noncore/apps/opie-reader/QTReader.h | |||
@@ -1,312 +1,272 @@ | |||
1 | #ifndef __QTREADER_H | 1 | #ifndef __QTREADER_H |
2 | #define __QTREADER_H | 2 | #define __QTREADER_H |
3 | 3 | ||
4 | //#define _SCROLLPIPE | ||
5 | |||
4 | #include <qwidget.h> | 6 | #include <qwidget.h> |
5 | //#include <qpainter.h> | 7 | //#include <qpainter.h> |
6 | #include "my_list.h" | 8 | #include "my_list.h" |
7 | #include "BuffDoc.h" | 9 | #include "BuffDoc.h" |
8 | #include "FontControl.h" | 10 | #include "FontControl.h" |
9 | 11 | ||
10 | //#include <qtimer.h> | 12 | //#include <qtimer.h> |
11 | 13 | ||
12 | class CDrawBuffer; | 14 | class CDrawBuffer; |
13 | //class CBuffer; | 15 | //class CBuffer; |
14 | class QPainter; | 16 | class QPainter; |
15 | class QTimer; | 17 | class QTimer; |
16 | class QPixmap; | 18 | class QPixmap; |
17 | class statedata; | ||
18 | 19 | ||
19 | class QTReader : public QWidget | 20 | class QTReader : public QWidget |
20 | { | 21 | { |
21 | Q_OBJECT | 22 | Q_OBJECT |
22 | 23 | ||
24 | static tchar pluckernextpart[]; | ||
25 | static tchar jplucknextpart[]; | ||
23 | friend class QTReaderApp; | 26 | friend class QTReaderApp; |
24 | void suspend() { buffdoc.suspend(); } | 27 | void suspend(); |
28 | void increaseScroll(); | ||
29 | void reduceScroll(); | ||
25 | void drawText(QPainter& p, int x, int y, tchar* text); | 30 | void drawText(QPainter& p, int x, int y, tchar* text); |
26 | int m_delay; | 31 | int m_delay; |
27 | unsigned int m_overlap; | 32 | unsigned int m_overlap; |
28 | bool m_autoScroll; | 33 | bool m_autoScroll, m_swapmouse; |
29 | void autoscroll(); | 34 | void autoscroll(); |
30 | QTimer* timer; | 35 | QTimer* timer; |
31 | int m_scrolldy1, m_scrolldy2, m_encd; | 36 | int m_scrolldy1, m_scrolldy2, m_encd, m_scrollpart; |
32 | void focusInEvent(QFocusEvent*); | 37 | void focusInEvent(QFocusEvent*); |
33 | void focusOutEvent(QFocusEvent*); | 38 | void focusOutEvent(QFocusEvent*); |
39 | void processmousepositionevent( QMouseEvent* _e ); | ||
40 | void processmousewordevent(size_t startpos, size_t startoffset, QMouseEvent* _e, int lineno); | ||
34 | bool ChangeFont(int); | 41 | bool ChangeFont(int); |
35 | bool getline(CDrawBuffer*); | 42 | bool getline(CDrawBuffer*); |
36 | int m_charWidth; | 43 | int m_charWidth; |
37 | int m_charpc; | 44 | int m_charpc; |
45 | unsigned char m_border; | ||
38 | FontControl m_fontControl; | 46 | FontControl m_fontControl; |
47 | void setBaseSize(unsigned char _s) { m_fontControl.setBaseSize(_s); } | ||
48 | unsigned char getBaseSize() { return m_fontControl.getBaseSize(); } | ||
49 | #ifdef _SCROLLPIPE | ||
50 | FILE* m_pipeout; | ||
51 | QString m_pipetarget; | ||
52 | bool m_isPaused; | ||
53 | bool m_pauseAfterEachPara; | ||
54 | #endif | ||
39 | public: | 55 | public: |
40 | QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0); | 56 | QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0); |
41 | // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0); | 57 | // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0); |
42 | ~QTReader(); | 58 | ~QTReader(); |
43 | void zoomin(); | 59 | void zoomin(); |
44 | void zoomout(); | 60 | void zoomout(); |
45 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) | 61 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen) |
46 | { | 62 | { |
47 | buffdoc.setSaveData(data, len, src, srclen); | 63 | buffdoc.setSaveData(data, len, src, srclen); |
48 | } | 64 | } |
49 | void putSaveData(unsigned char*& src, unsigned short& srclen) | 65 | void putSaveData(unsigned char*& src, unsigned short& srclen) |
50 | { | 66 | { |
51 | buffdoc.putSaveData(src, srclen); | 67 | buffdoc.putSaveData(src, srclen); |
52 | } | 68 | } |
53 | bool empty(); | 69 | bool empty(); |
54 | void setContinuous(bool _b); | 70 | void setContinuous(bool _b); |
55 | void toggle_autoscroll(); | 71 | void toggle_autoscroll(); |
56 | void setautoscroll(bool); | 72 | void setautoscroll(bool); |
57 | void disableAutoscroll() { m_autoScroll = false; } | 73 | void disableAutoscroll() { m_autoScroll = false; } |
58 | void copy() | 74 | void copy() |
59 | { | 75 | { |
60 | /* | 76 | /* |
61 | size_t nd = locate(); | 77 | size_t nd = locate(); |
62 | jumpto(m_mark); | 78 | jumpto(m_mark); |
63 | QString text; | 79 | QString text; |
64 | while (m_mark < nd) | 80 | while (m_mark < nd) |
65 | { | 81 | { |
66 | text += buffdoc.getch(); | 82 | text += buffdoc.getch(); |
67 | m_mark++; | 83 | m_mark++; |
68 | } | 84 | } |
69 | QApplication::clipboard()->setText(text); | 85 | QApplication::clipboard()->setText(text); |
70 | jumpto(nd); | 86 | jumpto(nd); |
71 | */ | 87 | */ |
72 | }; | 88 | }; |
73 | void clear() {}; | 89 | void clear() {}; |
74 | void setText(const QString& n, const QString& s) { m_string = n; load_file((const char*)s); }; | 90 | void setText(const QString& n, const QString& s) { m_string = n; load_file((const char*)s); }; |
75 | /* | 91 | /* |
76 | void setText(bool oldfile) | 92 | void setText(bool oldfile) |
77 | { | 93 | { |
78 | if (oldfile) | 94 | if (oldfile) |
79 | { | 95 | { |
80 | m_string = m_lastfile; | 96 | m_string = m_lastfile; |
81 | load_file((const tchar*)m_string); | 97 | load_file((const tchar*)m_string); |
82 | } | 98 | } |
83 | else | 99 | else |
84 | { | 100 | { |
85 | m_string = QString::null; | 101 | m_string = QString::null; |
86 | } | 102 | } |
87 | }; | 103 | }; |
88 | */ | 104 | */ |
89 | void setpeanut(bool _b) | 105 | void setlead(int _lead) |
90 | { | ||
91 | bpeanut = _b; | ||
92 | setfilter(getfilter()); | ||
93 | } | ||
94 | void setremap(bool _b) | ||
95 | { | ||
96 | bremap = _b; | ||
97 | setfilter(getfilter()); | ||
98 | } | ||
99 | void setmakebold(bool _b) | ||
100 | { | ||
101 | bmakebold = _b; | ||
102 | setfilter(getfilter()); | ||
103 | } | ||
104 | void setautofmt(bool _b) | ||
105 | { | ||
106 | bautofmt = _b; | ||
107 | if (bautofmt) | ||
108 | { | 106 | { |
109 | btextfmt = false; | 107 | m_fontControl.setlead(_lead); |
110 | bstriphtml = false;; | 108 | } |
111 | bpeanut = false; | 109 | int getlead() |
110 | { | ||
111 | return m_fontControl.getlead(); | ||
112 | } | ||
113 | void setextraspace(int _lead) | ||
114 | { | ||
115 | m_fontControl.setextraspace(_lead); | ||
116 | } | ||
117 | int getextraspace() | ||
118 | { | ||
119 | return m_fontControl.getextraspace(); | ||
112 | } | 120 | } |
113 | setfilter(getfilter()); | ||
114 | } | ||
115 | void settextfmt(bool _b) | ||
116 | { | ||
117 | btextfmt = _b; | ||
118 | setfilter(getfilter()); | ||
119 | } | ||
120 | void setstripcr(bool _b) | ||
121 | { | ||
122 | bstripcr = _b; | ||
123 | setfilter(getfilter()); | ||
124 | } | ||
125 | void setonespace(bool _b) | ||
126 | { | ||
127 | bonespace = _b; | ||
128 | setfilter(getfilter()); | ||
129 | } | ||
130 | #ifdef REPALM | ||
131 | void setrepalm(bool _b) | ||
132 | { | ||
133 | brepalm = _b; | ||
134 | setfilter(getfilter()); | ||
135 | } | ||
136 | #endif | ||
137 | void setstriphtml(bool _b) | ||
138 | { | ||
139 | bstriphtml = _b; | ||
140 | setfilter(getfilter()); | ||
141 | } | ||
142 | void setdehyphen(bool _b) | ||
143 | { | ||
144 | bdehyphen = _b; | ||
145 | setfilter(getfilter()); | ||
146 | } | ||
147 | void setunindent(bool _b) | ||
148 | { | ||
149 | bunindent = _b; | ||
150 | setfilter(getfilter()); | ||
151 | } | ||
152 | void setrepara(bool _b) | ||
153 | { | ||
154 | brepara = _b; | ||
155 | setfilter(getfilter()); | ||
156 | } | ||
157 | void setdblspce(bool _b) | ||
158 | { | ||
159 | bdblspce = _b; | ||
160 | setfilter(getfilter()); | ||
161 | } | ||
162 | void indentplus() | ||
163 | { | ||
164 | if (bindenter < 15) bindenter += 2; | ||
165 | setfilter(getfilter()); | ||
166 | } | ||
167 | void indentminus() | ||
168 | { | ||
169 | if (bindenter > 1) bindenter -= 2; | ||
170 | setfilter(getfilter()); | ||
171 | } | ||
172 | void setpagemode(bool _b) | 121 | void setpagemode(bool _b) |
173 | { | 122 | { |
174 | m_bpagemode = _b; | 123 | m_bpagemode = _b; |
175 | } | 124 | } |
176 | void setmono(bool _b) | 125 | void setmono(bool _b) |
177 | { | 126 | { |
178 | m_bMonoSpaced = _b; | 127 | m_bMonoSpaced = _b; |
179 | ChangeFont(m_fontControl.currentsize()); | 128 | ChangeFont(m_fontControl.currentsize()); |
180 | locate(pagelocate()); | 129 | locate(pagelocate()); |
181 | } | 130 | } |
182 | void setencoding(int _f) | 131 | void setencoding(int _f) |
183 | { | 132 | { |
184 | m_encd = _f; | 133 | m_encd = _f; |
185 | setfilter(getfilter()); | 134 | setfilter(getfilter()); |
186 | } | 135 | } |
187 | MarkupType PreferredMarkup(); | 136 | MarkupType PreferredMarkup(); |
188 | CEncoding* getencoding() | 137 | CEncoding* getencoding() |
189 | { | 138 | { |
139 | // qDebug("m_encd:%d", m_encd); | ||
190 | switch (m_encd) | 140 | switch (m_encd) |
191 | { | 141 | { |
192 | case 5: | ||
193 | return new Ccp1252; | ||
194 | case 4: | 142 | case 4: |
143 | // qDebug("palm"); | ||
195 | return new CPalm; | 144 | return new CPalm; |
196 | case 1: | 145 | case 1: |
146 | // qDebug("utf8"); | ||
197 | return new CUtf8; | 147 | return new CUtf8; |
198 | case 2: | 148 | case 2: |
149 | // qDebug("ucs16be"); | ||
199 | return new CUcs16be; | 150 | return new CUcs16be; |
200 | case 3: | 151 | case 3: |
152 | // qDebug("ucs16le"); | ||
201 | return new CUcs16le; | 153 | return new CUcs16le; |
202 | case 0: | 154 | case 0: |
203 | default: | 155 | // qDebug("ascii"); |
204 | return new CAscii; | 156 | return new CAscii; |
157 | default: | ||
158 | return new CGeneral8Bit(m_encd-MAX_ENCODING+1); | ||
205 | } | 159 | } |
206 | } | 160 | } |
207 | CFilterChain* getfilter() | 161 | CFilterChain* getfilter() |
208 | { | 162 | { |
209 | CFilterChain * filt = new CFilterChain(getencoding()); | 163 | CFilterChain * filt = new CFilterChain(getencoding()); |
210 | if (bstripcr) filt->addfilter(new stripcr); | 164 | if (bstripcr) filt->addfilter(new stripcr); |
211 | 165 | ||
212 | if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt); | 166 | if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt); |
213 | if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter); | 167 | if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter); |
214 | if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml); | 168 | if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml); |
215 | 169 | ||
216 | if (bdehyphen) filt->addfilter(new dehyphen); | 170 | if (bdehyphen) filt->addfilter(new dehyphen); |
217 | if (bunindent) filt->addfilter(new unindent); | 171 | if (bunindent) filt->addfilter(new unindent); |
218 | if (brepara) filt->addfilter(new repara); | 172 | if (brepara) filt->addfilter(new repara); |
219 | if (bonespace) filt->addfilter(new OnePara); | 173 | if (bonespace) filt->addfilter(new OnePara); |
220 | if (bindenter) filt->addfilter(new indenter(bindenter)); | 174 | if (bindenter) filt->addfilter(new indenter(bindenter)); |
221 | if (bdblspce) filt->addfilter(new dblspce); | 175 | if (bdblspce) filt->addfilter(new dblspce); |
222 | #ifdef REPALM | 176 | #ifdef REPALM |
223 | if (brepalm) filt->addfilter(new repalm); | 177 | if (brepalm) filt->addfilter(new repalm); |
224 | #endif | 178 | #endif |
225 | if (bremap) filt->addfilter(new remap); | 179 | if (bremap) filt->addfilter(new remap); |
180 | if (bdepluck) filt->addfilter(new DePluck(pluckernextpart)); | ||
181 | if (bdejpluck) filt->addfilter(new DePluck(jplucknextpart)); | ||
226 | if (bmakebold) filt->addfilter(new embolden); | 182 | if (bmakebold) filt->addfilter(new embolden); |
183 | if (bfulljust) filt->addfilter(new FullJust); | ||
227 | return filt; | 184 | return filt; |
228 | } | 185 | } |
229 | 186 | ||
230 | 187 | ||
231 | private slots: | 188 | private slots: |
189 | void goHome(); | ||
190 | void goBack(); | ||
191 | void goForward(); | ||
232 | void doscroll(); | 192 | void doscroll(); |
233 | void drawIt( QPainter * ); | 193 | void drawIt( QPainter * ); |
234 | void paintEvent( QPaintEvent * ); | 194 | void paintEvent( QPaintEvent * ); |
235 | // void resizeEvent( QResizeEvent * p ) { update(); } | 195 | // void resizeEvent( QResizeEvent * p ) { update(); } |
236 | void keyPressEvent(QKeyEvent*); | 196 | void keyPressEvent(QKeyEvent*); |
237 | void drawFonts(QPainter*); | 197 | void drawFonts(QPainter*); |
238 | private: | 198 | private: |
239 | void setTwoTouch(bool _b); | 199 | void setTwoTouch(bool _b); |
240 | void init(); | 200 | void init(); |
241 | void mousePressEvent( QMouseEvent* ); | 201 | void mousePressEvent( QMouseEvent* ); |
242 | void mouseReleaseEvent( QMouseEvent* ); | 202 | void mouseReleaseEvent( QMouseEvent* ); |
243 | // void mouseDoubleClickEvent( QMouseEvent* ); | 203 | // void mouseDoubleClickEvent( QMouseEvent* ); |
244 | QString m_string, m_fontname; | 204 | QString m_string, m_fontname; |
245 | void setfont(); | 205 | void setfont(); |
246 | //myoutput stuff | 206 | //myoutput stuff |
247 | private: | 207 | private: |
248 | bool mouseUpOn; | 208 | bool mouseUpOn; |
249 | linkType getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt); | 209 | linkType getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt); |
250 | bool m_twotouch, m_touchone; | 210 | bool m_twotouch, m_touchone; |
251 | size_t m_startpos, m_startoffset; | 211 | size_t m_startpos, m_startoffset; |
252 | void dopageup(unsigned int); | 212 | void dopageup(unsigned int); |
253 | void dopageup(); | 213 | void dopageup(); |
254 | void lineDown(); | 214 | void lineDown(); |
255 | void lineUp(); | 215 | void lineUp(); |
256 | void dopagedn(); | 216 | void dopagedn(); |
257 | long real_delay(); | 217 | long real_delay(); |
258 | int m_textsize; | 218 | int m_textsize; |
259 | int m_lastwidth, m_lastheight; | 219 | int m_lastwidth, m_lastheight; |
260 | CBufferFace<CDrawBuffer*> textarray; | 220 | CBufferFace<CDrawBuffer*> textarray; |
261 | CBufferFace<size_t> locnarray; | 221 | CBufferFace<size_t> locnarray; |
262 | unsigned int numlines; | 222 | unsigned int numlines; |
263 | bool bstripcr, btextfmt, bstriphtml, bdehyphen, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt, bonespace; | 223 | // bool m_showlast; |
224 | bool bstripcr, btextfmt, bstriphtml, bdehyphen, bdepluck, bdejpluck, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt, bonespace, bfulljust; | ||
264 | #ifdef REPALM | 225 | #ifdef REPALM |
265 | bool brepalm; | 226 | bool brepalm; |
266 | #endif | 227 | #endif |
267 | bool m_bpagemode, m_bMonoSpaced, m_continuousDocument; | 228 | bool m_bpagemode, m_bMonoSpaced, m_continuousDocument; |
268 | unsigned char bindenter; | 229 | unsigned char bindenter; |
269 | QString m_lastfile; | 230 | QString m_lastfile; |
270 | size_t m_lastposn; | 231 | size_t m_lastposn; |
271 | public: | 232 | public: |
272 | bool bDoUpdates; | 233 | bool bDoUpdates; |
273 | bool m_navkeys; | ||
274 | void NavUp(); | 234 | void NavUp(); |
275 | void NavDown(); | 235 | void NavDown(); |
276 | int getch() { return buffdoc.getch(); } | 236 | tchar getch() { return buffdoc.getch(); } |
237 | bool synch(size_t, size_t); | ||
277 | bool tight; | 238 | bool tight; |
278 | bool load_file(const char *newfile, unsigned int lcn=0); | 239 | bool load_file(const char *newfile, unsigned int lcn=0); |
279 | BuffDoc buffdoc; | 240 | BuffDoc buffdoc; |
280 | CList<Bkmk>* getbkmklist() { return buffdoc.getbkmklist(); } | 241 | CList<Bkmk>* getbkmklist() { return buffdoc.getbkmklist(); } |
281 | bool locate(unsigned long n); | 242 | bool locate(unsigned long n); |
282 | void jumpto(unsigned long n) { buffdoc.unsuspend(); buffdoc.locate(n); } | 243 | void jumpto(unsigned long n) { buffdoc.unsuspend(); buffdoc.locate(n); } |
283 | unsigned long locate() { buffdoc.unsuspend(); return buffdoc.locate(); } | 244 | unsigned long locate() { buffdoc.unsuspend(); return buffdoc.locate(); } |
284 | unsigned long explocate() { buffdoc.unsuspend(); return buffdoc.explocate(); } | 245 | unsigned long explocate() { buffdoc.unsuspend(); return buffdoc.explocate(); } |
285 | unsigned long pagelocate() { return locnarray[0]; } | 246 | unsigned long pagelocate() { return locnarray[0]; } |
286 | unsigned long mylastpos; | 247 | unsigned long mylastpos; |
287 | void setfilter(CFilterChain *f) { buffdoc.unsuspend(); buffdoc.setfilter(f); locate(pagelocate()); } | 248 | void setfilter(CFilterChain *f) { buffdoc.unsuspend(); buffdoc.setfilter(f); locate(pagelocate()); } |
288 | void restore() { jumpto(mylastpos); } | 249 | void restore() { jumpto(mylastpos); } |
289 | void goUp(); | 250 | void goUp(); |
290 | void refresh() { locate(pagelocate()); } | 251 | void refresh() { locate(pagelocate()); } |
291 | void goDown(); | 252 | void goDown(); |
292 | // bool bold; | 253 | // bool bold; |
293 | int textsize() { return m_textsize; } | 254 | int textsize() { return m_textsize; } |
294 | void textsize(int ts) { m_textsize = ts; } | 255 | void textsize(int ts) { m_textsize = ts; } |
295 | bool fillbuffer(int ru = 0, int ht = 0); | 256 | bool fillbuffer(int ru = 0, int ht = 0, int newht = -1); |
296 | unsigned int screenlines(); | 257 | unsigned int screenlines(); |
297 | void sizes(unsigned long& fs, unsigned long& ts) { buffdoc.unsuspend(); buffdoc.sizes(fs,ts); } | 258 | void sizes(unsigned long& fs, unsigned long& ts) { buffdoc.unsuspend(); buffdoc.sizes(fs,ts); } |
298 | static const char *fonts[]; | 259 | static const char *fonts[]; |
299 | // unsigned int *fontsizes; | 260 | // unsigned int *fontsizes; |
300 | int m_ascent, m_descent, m_linespacing; | 261 | int m_ascent, m_descent, m_linespacing; |
301 | QFontMetrics* m_fm; | 262 | QFontMetrics* m_fm; |
302 | QString firstword(); | 263 | QString firstword(); |
303 | void setstate(const statedata& sd); | ||
304 | 264 | ||
305 | signals: | 265 | signals: |
306 | void OnRedraw(); | 266 | void OnRedraw(); |
307 | void OnWordSelected(const QString&, size_t, const QString&); | 267 | void OnWordSelected(const QString&, size_t, const QString&); |
308 | void OnActionPressed(); | 268 | void OnShowPicture(QImage&); |
309 | void OnShowPicture(QPixmap&); | 269 | void OnURLSelected(const QString&); |
310 | }; | 270 | }; |
311 | 271 | ||
312 | #endif | 272 | #endif |
diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp index 7333a28..af1da27 100644 --- a/noncore/apps/opie-reader/QTReaderApp.cpp +++ b/noncore/apps/opie-reader/QTReaderApp.cpp | |||
@@ -1,2606 +1,4222 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. Allrights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. Allrights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qt Palmtop Environment. | 4 | ** This file is part of Qt Palmtop Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | 20 | #include "useqpe.h" | |
21 | #include <qregexp.h> | ||
21 | #include <qclipboard.h> | 22 | #include <qclipboard.h> |
22 | #include <qwidgetstack.h> | 23 | #include <qwidgetstack.h> |
24 | #ifdef USEQPE | ||
23 | #include <qpe/qpemenubar.h> | 25 | #include <qpe/qpemenubar.h> |
24 | //#include <qpe/qpetoolbar.h> | 26 | #include <qpe/qpetoolbar.h> |
27 | #endif | ||
25 | #include <qmenubar.h> | 28 | #include <qmenubar.h> |
26 | #include <qtoolbar.h> | 29 | #include <qtoolbar.h> |
30 | #ifdef USEQPE | ||
27 | #include <qpe/menubutton.h> | 31 | #include <qpe/menubutton.h> |
28 | #include <qpe/fontdatabase.h> | 32 | #include <qpe/fontdatabase.h> |
33 | #endif | ||
29 | #include <qcombobox.h> | 34 | #include <qcombobox.h> |
30 | #include <qpopupmenu.h> | 35 | #include <qpopupmenu.h> |
31 | #include <qaction.h> | 36 | #include <qaction.h> |
32 | #include <qapplication.h> | 37 | #include <qapplication.h> |
33 | #include <qlineedit.h> | 38 | #include <qlineedit.h> |
34 | #include <qtoolbutton.h> | 39 | #include <qtoolbutton.h> |
35 | #include <qspinbox.h> | 40 | #include <qspinbox.h> |
36 | #include <qobjectlist.h> | 41 | #include <qobjectlist.h> |
42 | #ifdef USEQPE | ||
37 | #include <qpe/global.h> | 43 | #include <qpe/global.h> |
38 | #include <qpe/applnk.h> | 44 | #include <qpe/applnk.h> |
45 | #endif | ||
39 | #include <qfileinfo.h> | 46 | #include <qfileinfo.h> |
40 | #include <stdlib.h> //getenv | 47 | #include <stdlib.h> //getenv |
41 | #include <qprogressbar.h> | 48 | #include <qprogressbar.h> |
49 | #ifdef USEQPE | ||
42 | #include <qpe/config.h> | 50 | #include <qpe/config.h> |
51 | #endif | ||
43 | #include <qbuttongroup.h> | 52 | #include <qbuttongroup.h> |
44 | #include <qradiobutton.h> | 53 | #include <qradiobutton.h> |
54 | #ifdef USEQPE | ||
45 | #include <qpe/qcopenvelope_qws.h> | 55 | #include <qpe/qcopenvelope_qws.h> |
46 | 56 | #endif | |
47 | #include "QTReader.h" | 57 | #include "QTReader.h" |
48 | #include "GraphicWin.h" | 58 | #include "GraphicWin.h" |
49 | #include "Bkmks.h" | 59 | #include "Bkmks.h" |
50 | #include "cbkmkselector.h" | 60 | #include "cbkmkselector.h" |
51 | #include "infowin.h" | 61 | #include "infowin.h" |
62 | #include "ToolbarPrefs.h" | ||
63 | #include "Prefs.h" | ||
52 | #include "CAnnoEdit.h" | 64 | #include "CAnnoEdit.h" |
53 | #include "QFloatBar.h" | 65 | #include "QFloatBar.h" |
66 | #include "FixedFont.h" | ||
67 | #include "URLDialog.h" | ||
54 | //#include <qpe/fontdatabase.h> | 68 | //#include <qpe/fontdatabase.h> |
55 | 69 | ||
70 | #ifdef USEQPE | ||
56 | #include <qpe/resource.h> | 71 | #include <qpe/resource.h> |
57 | #include <qpe/qpeapplication.h> | 72 | #include <qpe/qpeapplication.h> |
73 | #include "fileBrowser.h" | ||
74 | #else | ||
75 | #include "qfiledialog.h" | ||
76 | #endif | ||
58 | 77 | ||
59 | #include "QTReaderApp.h" | 78 | #include "QTReaderApp.h" |
60 | #include "fileBrowser.h" | ||
61 | #include "CDrawBuffer.h" | 79 | #include "CDrawBuffer.h" |
62 | #include "Filedata.h" | 80 | #include "Filedata.h" |
63 | #include "opie.h" | 81 | #include "opie.h" |
64 | #include "name.h" | 82 | #include "useqpe.h" |
65 | #include "StateData.h" | 83 | #include "names.h" |
84 | #include "CEncoding_tables.h" | ||
85 | #include "CloseDialog.h" | ||
66 | 86 | ||
67 | #ifdef OPIE | 87 | bool CheckVersion(int&, int&, char&); |
88 | |||
89 | #ifdef _WINDOWS | ||
90 | #define PICDIR "c:\\uqtreader\\pics\\" | ||
91 | #else | ||
92 | #ifdef USEQPE | ||
68 | #define PICDIR "opie-reader/" | 93 | #define PICDIR "opie-reader/" |
69 | #else | 94 | #else |
70 | #define PICDIR | 95 | #define PICDIR "/home/tim/uqtreader/pics/" |
96 | #endif | ||
71 | #endif | 97 | #endif |
72 | |||
73 | 98 | ||
74 | unsigned long QTReaderApp::m_uid = 0; | 99 | unsigned long QTReaderApp::m_uid = 0; |
75 | 100 | ||
76 | void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); } | 101 | void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); } |
77 | 102 | ||
103 | #ifdef USEQPE | ||
104 | #define geticon(iconname) Resource::loadPixmap( iconname ) | ||
105 | #define getmyicon(iconname) Resource::loadPixmap( PICDIR iconname ) | ||
106 | #else | ||
107 | #define geticon(iconname) QPixmap(PICDIR iconname ".png") | ||
108 | #define getmyicon(iconname) geticon(iconname) | ||
109 | //#define geticon(iconname) QIconSet( QPixmap(PICDIR iconname) ) | ||
110 | #endif | ||
111 | |||
112 | #ifndef _WINDOWS | ||
78 | #include <unistd.h> | 113 | #include <unistd.h> |
114 | #endif | ||
79 | #include <stddef.h> | 115 | #include <stddef.h> |
116 | #ifndef _WINDOWS | ||
80 | #include <dirent.h> | 117 | #include <dirent.h> |
118 | #endif | ||
81 | 119 | ||
82 | void QTReaderApp::listBkmkFiles() | 120 | void QTReaderApp::listBkmkFiles() |
83 | { | 121 | { |
84 | bkmkselector->clear(); | 122 | bkmkselector->clear(); |
85 | bkmkselector->setText("Cancel"); | 123 | bkmkselector->setText("Cancel"); |
124 | #ifndef USEQPE | ||
125 | int cnt = 0; | ||
126 | |||
127 | QDir d = QDir::home(); // "/" | ||
128 | if ( !d.cd(APPDIR) ) { // "/tmp" | ||
129 | qWarning( "Cannot find the \"~/" APPDIR "\" directory" ); | ||
130 | d = QDir::home(); | ||
131 | d.mkdir(APPDIR); | ||
132 | d.cd(APPDIR); | ||
133 | } | ||
134 | |||
135 | |||
136 | |||
137 | |||
138 | d.setFilter( QDir::Files | QDir::NoSymLinks ); | ||
139 | // d.setSorting( QDir::Size | QDir::Reversed ); | ||
140 | |||
141 | const QFileInfoList *list = d.entryInfoList(); | ||
142 | QFileInfoListIterator it( *list ); // create list iterator | ||
143 | QFileInfo *fi; // pointer for traversing | ||
144 | |||
145 | while ( (fi=it.current()) ) { // for each file... | ||
146 | |||
147 | bkmkselector->insertItem(fi->fileName()); | ||
148 | cnt++; | ||
149 | |||
150 | //qDebug( "%10li %s", fi->size(), fi->fileName().data() ); | ||
151 | ++it; // goto next list element | ||
152 | } | ||
153 | |||
154 | #else /* USEQPE */ | ||
86 | int cnt = 0; | 155 | int cnt = 0; |
87 | DIR *d; | 156 | DIR *d; |
88 | d = opendir((const char *)Global::applicationFileName(APPDIR,"")); | 157 | d = opendir((const char *)Global::applicationFileName(APPDIR,"")); |
89 | 158 | ||
90 | while(1) | 159 | while(1) |
91 | { | 160 | { |
92 | struct dirent* de; | 161 | struct dirent* de; |
93 | struct stat buf; | 162 | struct stat buf; |
94 | de = readdir(d); | 163 | de = readdir(d); |
95 | if (de == NULL) break; | 164 | if (de == NULL) break; |
96 | 165 | ||
97 | if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) | 166 | if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) |
98 | { | 167 | { |
99 | bkmkselector->insertItem(de->d_name); | 168 | bkmkselector->insertItem(de->d_name); |
100 | cnt++; | 169 | cnt++; |
101 | } | 170 | } |
102 | } | 171 | } |
103 | 172 | ||
104 | closedir(d); | 173 | closedir(d); |
105 | 174 | #endif | |
106 | if (cnt > 0) | 175 | if (cnt > 0) |
107 | { | 176 | { |
108 | //tjw menu->hide(); | 177 | //tjw menu->hide(); |
109 | editBar->hide(); | ||
110 | if (m_fontVisible) m_fontBar->hide(); | ||
111 | if (regVisible) | ||
112 | { | ||
113 | Global::hideInputMethod(); | ||
114 | regBar->hide(); | ||
115 | } | ||
116 | if (searchVisible) | ||
117 | { | ||
118 | Global::hideInputMethod(); | ||
119 | searchBar->hide(); | ||
120 | } | ||
121 | m_nRegAction = cRmBkmkFile; | ||
122 | editorStack->raiseWidget( bkmkselector ); | 178 | editorStack->raiseWidget( bkmkselector ); |
179 | hidetoolbars(); | ||
180 | m_nBkmkAction = cRmBkmkFile; | ||
123 | } | 181 | } |
124 | else | 182 | else |
125 | QMessageBox::information(this, PROGNAME, "No bookmark files"); | 183 | QMessageBox::information(this, PROGNAME, "No bookmark files"); |
126 | } | 184 | } |
127 | 185 | ||
128 | QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | 186 | void QTReaderApp::hidetoolbars() |
129 | : QMainWindow( parent, name, f ), bFromDocView( FALSE ), m_dontSave(false) | ||
130 | { | 187 | { |
131 | // qDebug("Application directory = %s", (const tchar *)QPEApplication::documentDir()); | 188 | menubar->hide(); |
132 | // qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml")); | 189 | if (fileBar != NULL) fileBar->hide(); |
190 | if (viewBar != NULL) viewBar->hide(); | ||
191 | if (navBar != NULL) navBar->hide(); | ||
192 | if (markBar != NULL) markBar->hide(); | ||
193 | if (m_fontVisible) m_fontBar->hide(); | ||
194 | if (regVisible) | ||
195 | { | ||
196 | #ifdef USEQPE | ||
197 | Global::hideInputMethod(); | ||
198 | #endif | ||
199 | regBar->hide(); | ||
200 | } | ||
201 | if (searchVisible) | ||
202 | { | ||
203 | #ifdef USEQPE | ||
204 | Global::hideInputMethod(); | ||
205 | #endif | ||
206 | searchBar->hide(); | ||
207 | } | ||
208 | } | ||
133 | 209 | ||
210 | QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | ||
211 | : QMainWindow( parent, name, f ), bFromDocView( FALSE ), m_dontSave(false), | ||
212 | fileBar(NULL), navBar(NULL), viewBar(NULL), markBar(NULL) | ||
213 | { | ||
214 | m_url_clipboard = false; | ||
215 | m_url_localfile = false; | ||
216 | m_url_globalfile = false; | ||
217 | ftime(&m_lastkeytime); | ||
218 | //// qDebug("Application directory = %s", (const tchar *)QPEApplication::documentDir()); | ||
219 | //// qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml")); | ||
220 | |||
221 | m_bcloseDisabled = true; | ||
222 | m_disableesckey = false; | ||
134 | pBkmklist = NULL; | 223 | pBkmklist = NULL; |
135 | pOpenlist = NULL; | 224 | pOpenlist = NULL; |
136 | // doc = 0; | 225 | // doc = 0; |
137 | 226 | ||
138 | m_fBkmksChanged = false; | 227 | m_fBkmksChanged = false; |
139 | 228 | ||
140 | QString lang = getenv( "LANG" ); | 229 | QString lang = getenv( "LANG" ); |
230 | QString rot = getenv( "QWS_DISPLAY" ); | ||
141 | 231 | ||
142 | m_autogenstr = "^ *[A-Z].*[a-z] *$"; | 232 | /* |
143 | setToolBarsMovable( FALSE ); | 233 | int m_rot = 0; |
234 | if (rot.contains("Rot90")) | ||
235 | { | ||
236 | m_rot = 90; | ||
237 | } | ||
238 | else if (rot.contains("Rot180")) | ||
239 | { | ||
240 | m_rot = 180; | ||
241 | } | ||
242 | else if (rot.contains("Rot270")) | ||
243 | { | ||
244 | m_rot = 270; | ||
245 | } | ||
246 | |||
247 | // qDebug("Initial Rotation(%d):%s", m_rot, (const char*)rot); | ||
248 | */ | ||
249 | m_autogenstr = "^ *[A-Z].*[a-z] *$"; | ||
144 | 250 | ||
145 | setIcon( Resource::loadPixmap( "uqtreader" ) ); | 251 | #ifdef USEQPE |
252 | setIcon( Resource::loadPixmap( PICDIR "uqtreader") ); | ||
253 | #else | ||
254 | setIcon( QPixmap (PICDIR "uqtreader.png") ); | ||
255 | #endif /* USEQPE */ | ||
146 | 256 | ||
147 | // QPEToolBar *bar = new QPEToolBar( this ); | 257 | // QPEToolBar *bar = new QPEToolBar( this ); |
148 | QToolBar *bar = new QToolBar( this ); | 258 | // menubar = new QPEToolBar( this ); |
149 | bar->setHorizontalStretchable( TRUE ); | 259 | #ifdef USEQPE |
150 | addToolBar(bar, "tool",QMainWindow::Top, true); | 260 | Config config( APPDIR ); |
151 | //tjw menu = bar; | 261 | #else |
152 | 262 | QDir d = QDir::home(); // "/" | |
153 | QPEMenuBar *mb = new QPEMenuBar( bar ); | 263 | if ( !d.cd(APPDIR) ) { // "/tmp" |
154 | // QMenuBar *mb = new QMenuBar( bar ); | 264 | qWarning( "Cannot find the \"~/" APPDIR "\" directory" ); |
155 | QPopupMenu *file = new QPopupMenu( this ); | 265 | d = QDir::home(); |
156 | QPopupMenu *format = new QPopupMenu( this ); | 266 | d.mkdir(APPDIR); |
157 | // QPopupMenu *edit = new QPopupMenu( this ); | 267 | d.cd(APPDIR); |
268 | } | ||
269 | QFileInfo fi(d, INIFILE); | ||
270 | // qDebug("Path:%s", (const char*)fi.absFilePath()); | ||
271 | Config config(fi.absFilePath()); | ||
272 | #endif | ||
273 | config.setGroup("Toolbar"); | ||
274 | m_tbmovesave = m_tbmove = config.readBoolEntry("Movable", false); | ||
275 | m_tbpolsave = m_tbpol = (ToolbarPolicy)config.readNumEntry("Policy", 1); | ||
276 | m_tbposition = (ToolBarDock)config.readNumEntry("Position", 2); | ||
277 | menubar = new QToolBar("Menus", this, m_tbposition); | ||
278 | |||
279 | // fileBar = new QToolBar("File", this); | ||
280 | // QToolBar* viewBar = new QToolBar("File", this); | ||
281 | // QToolBar* navBar = new QToolBar("File", this); | ||
282 | // QToolBar* markBar = new QToolBar("File", this); | ||
283 | |||
284 | #ifdef USEQPE | ||
285 | mb = new QPEMenuBar( menubar ); | ||
286 | #else | ||
287 | mb = new QMenuBar( menubar ); | ||
288 | #endif | ||
158 | 289 | ||
159 | // bar = new QToolBar( this ); | 290 | //#ifdef USEQPE |
160 | editBar = bar; | 291 | QPopupMenu* tmp = new QPopupMenu(mb); |
292 | mb->insertItem( geticon( "AppsIcon" ), tmp ); | ||
293 | //#else | ||
294 | // QMenuBar* tmp = mb; | ||
295 | //#endif | ||
296 | |||
297 | QPopupMenu *file = new QPopupMenu( mb ); | ||
298 | tmp->insertItem( tr( "File" ), file ); | ||
299 | |||
300 | QPopupMenu *navigation = new QPopupMenu(mb); | ||
301 | tmp->insertItem( tr( "Navigation" ), navigation ); | ||
302 | |||
303 | QPopupMenu *view = new QPopupMenu( mb ); | ||
304 | tmp->insertItem( tr( "View" ), view ); | ||
305 | |||
306 | QPopupMenu *marks = new QPopupMenu( this ); | ||
307 | tmp->insertItem( tr( "Marks" ), marks ); | ||
308 | |||
309 | QPopupMenu *settings = new QPopupMenu( this ); | ||
310 | tmp->insertItem( tr( "Settings" ), settings ); | ||
311 | |||
312 | // addToolBar(menubar, "Menus",QMainWindow::Top); | ||
313 | // addToolBar(fileBar, "Toolbar",QMainWindow::Top); | ||
314 | |||
315 | // QPopupMenu *edit = new QPopupMenu( this ); | ||
161 | 316 | ||
162 | /* | 317 | /* |
163 | QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); | 318 | QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); |
164 | connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); | 319 | connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); |
165 | a->addTo( bar ); | 320 | a->addTo( bar ); |
166 | a->addTo( file ); | 321 | a->addTo( file ); |
167 | */ | 322 | */ |
168 | 323 | ||
169 | editorStack = new QWidgetStack( this ); | 324 | editorStack = new QWidgetStack( this ); |
170 | setCentralWidget( editorStack ); | 325 | setCentralWidget( editorStack ); |
171 | 326 | ||
172 | searchVisible = FALSE; | 327 | searchVisible = FALSE; |
173 | regVisible = FALSE; | 328 | regVisible = FALSE; |
174 | m_fontVisible = false; | 329 | m_fontVisible = false; |
175 | 330 | ||
176 | pbar = new QProgressBar(this); | ||
177 | pbar->hide(); | ||
178 | |||
179 | m_annoWin = new CAnnoEdit(editorStack); | 331 | m_annoWin = new CAnnoEdit(editorStack); |
180 | editorStack->addWidget(m_annoWin, get_unique_id()); | 332 | editorStack->addWidget(m_annoWin, get_unique_id()); |
181 | connect( m_annoWin, SIGNAL( finished(const QString&, const QString&) ), this, SLOT( addAnno(const QString&, const QString&) ) ); | 333 | connect( m_annoWin, SIGNAL( finished(const QString&, const QString&) ), this, SLOT( addAnno(const QString&, const QString&) ) ); |
182 | connect( m_annoWin, SIGNAL( cancelled() ), this, SLOT( infoClose() ) ); | 334 | connect( m_annoWin, SIGNAL( cancelled() ), this, SLOT( infoClose() ) ); |
183 | 335 | ||
184 | m_infoWin = new infowin(editorStack); | 336 | m_infoWin = new infowin(editorStack); |
185 | editorStack->addWidget(m_infoWin, get_unique_id()); | 337 | editorStack->addWidget(m_infoWin, get_unique_id()); |
186 | connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) ); | 338 | connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) ); |
187 | 339 | ||
188 | m_graphicwin = new GraphicWin(editorStack); | 340 | m_graphicwin = new GraphicWin(editorStack); |
189 | editorStack->addWidget(m_graphicwin, get_unique_id()); | 341 | editorStack->addWidget(m_graphicwin, get_unique_id()); |
190 | connect( m_graphicwin, SIGNAL( Closed() ), this, SLOT( infoClose() ) ); | 342 | connect( m_graphicwin, SIGNAL( Closed() ), this, SLOT( infoClose() ) ); |
191 | 343 | ||
192 | // bkmkselector = new QListBox(editorStack, "Bookmarks"); | 344 | // bkmkselector = new QListBox(editorStack, "Bookmarks"); |
193 | bkmkselector = new CBkmkSelector(editorStack, "Bookmarks"); | 345 | bkmkselector = new CBkmkSelector(editorStack, "Bookmarks"); |
194 | // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) ); | 346 | // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) ); |
195 | connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) ); | 347 | connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) ); |
196 | connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) ); | 348 | connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) ); |
197 | editorStack->addWidget( bkmkselector, get_unique_id() ); | 349 | editorStack->addWidget( bkmkselector, get_unique_id() ); |
198 | 350 | ||
199 | /* | 351 | /* |
200 | importSelector = new FileSelector( "*", editorStack, "importselector", false ); | 352 | importSelector = new FileSelector( "*", editorStack, "importselector", false ); |
201 | connect( importSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( importFile( const DocLnk & ) ) ); | 353 | connect( importSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( importFile( const DocLnk & ) ) ); |
202 | 354 | ||
203 | editorStack->addWidget( importSelector, get_unique_id() ); | 355 | editorStack->addWidget( importSelector, get_unique_id() ); |
204 | 356 | ||
205 | // don't need the close visible, it is redundant... | 357 | // don't need the close visible, it is redundant... |
206 | importSelector->setCloseVisible( FALSE ); | 358 | importSelector->setCloseVisible( FALSE ); |
207 | */ | 359 | */ |
208 | qDebug("Reading file list"); | 360 | // qDebug("Reading file list"); |
209 | readfilelist(); | 361 | readfilelist(); |
210 | 362 | ||
211 | reader = new QTReader( editorStack ); | 363 | reader = new QTReader( editorStack ); |
212 | 364 | ||
213 | reader->bDoUpdates = false; | 365 | reader->bDoUpdates = false; |
214 | 366 | ||
367 | #ifdef USEQPE | ||
215 | ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold); | 368 | ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold); |
369 | #endif | ||
216 | 370 | ||
217 | qDebug("Reading config"); | 371 | // qDebug("Reading config"); |
218 | Config config( APPDIR ); | 372 | // Config config( APPDIR ); |
219 | config.setGroup( "View" ); | 373 | config.setGroup( "View" ); |
220 | 374 | m_debounce = config.readNumEntry("Debounce", 0); | |
375 | #ifdef USEQPE | ||
376 | m_bFloatingDialog = config.readBoolEntry("FloatDialogs", false); | ||
377 | #else | ||
378 | m_bFloatingDialog = config.readBoolEntry("FloatDialogs", true); | ||
379 | #endif | ||
221 | reader->bstripcr = config.readBoolEntry( "StripCr", true ); | 380 | reader->bstripcr = config.readBoolEntry( "StripCr", true ); |
381 | reader->bfulljust = config.readBoolEntry( "FullJust", false ); | ||
382 | reader->setextraspace(config.readNumEntry( "ExtraSpace", 0 )); | ||
383 | reader->setlead(config.readNumEntry( "ExtraLead", 0 )); | ||
222 | reader->btextfmt = config.readBoolEntry( "TextFmt", false ); | 384 | reader->btextfmt = config.readBoolEntry( "TextFmt", false ); |
223 | reader->bautofmt = config.readBoolEntry( "AutoFmt", true ); | 385 | reader->bautofmt = config.readBoolEntry( "AutoFmt", true ); |
224 | reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); | 386 | reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); |
225 | reader->bpeanut = config.readBoolEntry( "Peanut", false ); | 387 | reader->bpeanut = config.readBoolEntry( "Peanut", false ); |
226 | reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); | 388 | reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); |
389 | reader->bdepluck = config.readBoolEntry( "Depluck", false ); | ||
390 | reader->bdejpluck = config.readBoolEntry( "Dejpluck", false ); | ||
227 | reader->bonespace = config.readBoolEntry( "OneSpace", false ); | 391 | reader->bonespace = config.readBoolEntry( "OneSpace", false ); |
228 | reader->bunindent = config.readBoolEntry( "Unindent", false ); | 392 | reader->bunindent = config.readBoolEntry( "Unindent", false ); |
229 | reader->brepara = config.readBoolEntry( "Repara", false ); | 393 | reader->brepara = config.readBoolEntry( "Repara", false ); |
230 | reader->bdblspce = config.readBoolEntry( "DoubleSpace", false ); | 394 | reader->bdblspce = config.readBoolEntry( "DoubleSpace", false ); |
231 | reader->bindenter = config.readNumEntry( "Indent", 0 ); | 395 | reader->bindenter = config.readNumEntry( "Indent", 0 ); |
232 | reader->m_textsize = config.readNumEntry( "FontSize", 12 ); | 396 | reader->m_textsize = config.readNumEntry( "FontSize", 12 ); |
233 | reader->m_delay = config.readNumEntry( "ScrollDelay", 5184); | 397 | reader->m_delay = config.readNumEntry( "ScrollDelay", 5184); |
234 | reader->m_lastfile = config.readEntry( "LastFile", QString::null ); | 398 | reader->m_lastfile = config.readEntry( "LastFile", QString::null ); |
235 | reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); | 399 | reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); |
236 | reader->m_bpagemode = config.readBoolEntry( "PageMode", true ); | 400 | reader->m_bpagemode = config.readBoolEntry( "PageMode", true ); |
237 | reader->m_navkeys = config.readBoolEntry( "CursorNavigation", false ); | ||
238 | reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false); | 401 | reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false); |
402 | reader->m_swapmouse = config.readBoolEntry( "SwapMouse", false); | ||
239 | reader->m_fontname = config.readEntry( "Fontname", "helvetica" ); | 403 | reader->m_fontname = config.readEntry( "Fontname", "helvetica" ); |
240 | reader->m_encd = config.readNumEntry( "Encoding", 0 ); | 404 | reader->m_encd = config.readNumEntry( "Encoding", 0 ); |
241 | reader->m_charpc = config.readNumEntry( "CharSpacing", 100 ); | 405 | reader->m_charpc = config.readNumEntry( "CharSpacing", 100 ); |
242 | reader->m_overlap = config.readNumEntry( "Overlap", 0 ); | 406 | reader->m_overlap = config.readNumEntry( "Overlap", 0 ); |
407 | reader->m_border = config.readNumEntry( "Margin", 6 ); | ||
243 | #ifdef REPALM | 408 | #ifdef REPALM |
244 | reader->brepalm = config.readBoolEntry( "Repalm", true ); | 409 | reader->brepalm = config.readBoolEntry( "Repalm", true ); |
245 | #endif | 410 | #endif |
246 | reader->bremap = config.readBoolEntry( "Remap", true ); | 411 | reader->bremap = config.readBoolEntry( "Remap", true ); |
247 | reader->bmakebold = config.readBoolEntry( "MakeBold", false ); | 412 | reader->bmakebold = config.readBoolEntry( "MakeBold", false ); |
248 | reader->setContinuous(config.readBoolEntry( "Continuous", true )); | 413 | reader->setContinuous(config.readBoolEntry( "Continuous", true )); |
249 | m_targetapp = config.readEntry( "TargetApp", QString::null ); | 414 | m_targetapp = config.readEntry( "TargetApp", QString::null ); |
250 | m_targetmsg = config.readEntry( "TargetMsg", QString::null ); | 415 | m_targetmsg = config.readEntry( "TargetMsg", QString::null ); |
416 | #ifdef _SCROLLPIPE | ||
417 | reader->m_pipetarget = config.readEntry( "PipeTarget", QString::null ); | ||
418 | reader->m_pauseAfterEachPara = config.readBoolEntry( "PauseAfterPara", true ); | ||
419 | #endif | ||
251 | m_twoTouch = config.readBoolEntry( "TwoTouch", false); | 420 | m_twoTouch = config.readBoolEntry( "TwoTouch", false); |
252 | m_doAnnotation = config.readBoolEntry( "Annotation", false); | 421 | m_doAnnotation = config.readBoolEntry( "Annotation", false); |
253 | m_doDictionary = config.readBoolEntry( "Dictionary", false); | 422 | m_doDictionary = config.readBoolEntry( "Dictionary", false); |
254 | m_doClipboard = config.readBoolEntry( "Clipboard", false); | 423 | m_doClipboard = config.readBoolEntry( "Clipboard", false); |
255 | m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll); | 424 | m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll); |
256 | setTwoTouch(m_twoTouch); | 425 | m_escapeTarget = (ActionTypes)config.readNumEntry("EscapeTarget", cesNone); |
426 | m_returnTarget = (ActionTypes)config.readNumEntry("ReturnTarget", cesFullScreen); | ||
427 | m_leftTarget = (ActionTypes)config.readNumEntry("LeftTarget", cesZoomOut); | ||
428 | m_rightTarget = (ActionTypes)config.readNumEntry("RightTarget", cesZoomIn); | ||
429 | m_upTarget = (ActionTypes)config.readNumEntry("UpTarget", cesPageUp); | ||
430 | m_downTarget = (ActionTypes)config.readNumEntry("DownTarget", cesPageDown); | ||
431 | |||
432 | m_leftScroll = config.readBoolEntry("LeftScroll", false); | ||
433 | m_rightScroll = config.readBoolEntry("RightScroll", false); | ||
434 | m_upScroll = config.readBoolEntry("UpScroll", true); | ||
435 | m_downScroll = config.readBoolEntry("DownScroll", true); | ||
436 | |||
437 | m_propogatefontchange = config.readBoolEntry( "RequestorFontChange", false); | ||
438 | reader->setBaseSize(config.readNumEntry( "Basesize", 10 )); | ||
439 | |||
440 | #ifndef USEQPE | ||
441 | config.setGroup( "Geometry" ); | ||
442 | setGeometry(0,0, | ||
443 | config.readNumEntry( "width", QApplication::desktop()->width()/2 ), | ||
444 | config.readNumEntry( "height", QApplication::desktop()->height()/2 )); | ||
445 | move( | ||
446 | config.readNumEntry( "x", 20 ), | ||
447 | config.readNumEntry( "y", 20 )); | ||
448 | #endif | ||
257 | 449 | ||
258 | 450 | ||
259 | connect( reader, SIGNAL( OnShowPicture(QPixmap&) ), this, SLOT( showgraphic(QPixmap&) ) ); | 451 | |
452 | setTwoTouch(m_twoTouch); | ||
453 | |||
454 | connect( reader, SIGNAL( OnShowPicture(QImage&) ), this, SLOT( showgraphic(QImage&) ) ); | ||
260 | 455 | ||
261 | connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) ); | 456 | connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) ); |
262 | connect( reader, SIGNAL( OnActionPressed() ), this, SLOT( OnActionPressed() ) ); | ||
263 | connect( reader, SIGNAL( OnWordSelected(const QString&, size_t, const QString&) ), this, SLOT( OnWordSelected(const QString&, size_t, const QString&) ) ); | 457 | connect( reader, SIGNAL( OnWordSelected(const QString&, size_t, const QString&) ), this, SLOT( OnWordSelected(const QString&, size_t, const QString&) ) ); |
458 | connect( reader, SIGNAL( OnURLSelected(const QString&) ), this, SLOT( OnURLSelected(const QString&) ) ); | ||
264 | editorStack->addWidget( reader, get_unique_id() ); | 459 | editorStack->addWidget( reader, get_unique_id() ); |
265 | 460 | ||
266 | QAction *a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); | 461 | m_preferences_action = new QAction( tr( "Configuration" ), geticon( "SettingsIcon" ), QString::null, 0, this, NULL); |
267 | connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); | 462 | connect( m_preferences_action, SIGNAL( activated() ), this, SLOT( showprefs() ) ); |
268 | a->addTo( bar ); | 463 | m_preferences_action->addTo( settings ); |
269 | a->addTo( file ); | ||
270 | 464 | ||
271 | a = new QAction( tr( "Close" ), Resource::loadPixmap( "fileclose" ), QString::null, 0, this, 0 ); | 465 | m_saveconfig_action = new QAction( tr( "Save Config" ), QString::null, 0, this, NULL); |
272 | connect( a, SIGNAL( activated() ), this, SLOT( fileClose() ) ); | 466 | connect( m_saveconfig_action, SIGNAL( activated() ), this, SLOT( SaveConfig() ) ); |
273 | // a->addTo( bar ); | 467 | m_saveconfig_action->addTo( settings ); |
274 | a->addTo( file ); | 468 | |
469 | m_loadconfig_action = new QAction( tr( "Load Config" ), QString::null, 0, this, NULL); | ||
470 | connect( m_loadconfig_action, SIGNAL( activated() ), this, SLOT( LoadConfig() ) ); | ||
471 | m_loadconfig_action->addTo( settings ); | ||
472 | |||
473 | m_tidyconfig_action = new QAction( tr( "Delete Config" ), QString::null, 0, this, NULL); | ||
474 | connect( m_tidyconfig_action, SIGNAL( activated() ), this, SLOT( TidyConfig() ) ); | ||
475 | m_tidyconfig_action->addTo( settings ); | ||
476 | |||
477 | settings->insertSeparator(); | ||
478 | m_toolbarprefs_action = new QAction( tr( "Toolbars" ), QString::null, 0, this, NULL); | ||
479 | connect( m_toolbarprefs_action, SIGNAL( activated() ), this, SLOT( showtoolbarprefs() ) ); | ||
480 | m_toolbarprefs_action->addTo( settings ); | ||
481 | |||
482 | m_open_action = new QAction( tr( "Open" ), geticon( "fileopen" ), QString::null, 0, this, 0 ); | ||
483 | connect( m_open_action, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); | ||
484 | m_open_action->addTo( file ); | ||
485 | |||
486 | m_close_action = new QAction( tr( "Close" ), geticon( "close" ), QString::null, 0, this, 0 ); | ||
487 | connect( m_close_action, SIGNAL( activated() ), this, SLOT( fileClose() ) ); | ||
488 | m_close_action->addTo( file ); | ||
275 | 489 | ||
490 | #ifdef _SCRIPT | ||
491 | a = new QAction( tr( "Run Script" ), QString::null, 0, this, NULL); | ||
492 | connect( a, SIGNAL( activated() ), this, SLOT( RunScript() ) ); | ||
493 | a->addTo( file ); | ||
494 | #endif | ||
276 | /* | 495 | /* |
277 | a = new QAction( tr( "Revert" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); | 496 | a = new QAction( tr( "Revert" ), geticon( "close" ), QString::null, 0, this, 0 ); |
278 | connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) ); | 497 | connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) ); |
279 | a->addTo( file ); | 498 | a->addTo( file ); |
280 | 499 | ||
281 | a = new QAction( tr( "Cut" ), Resource::loadPixmap( "cut" ), QString::null, 0, this, 0 ); | 500 | a = new QAction( tr( "Cut" ), geticon( "cut" ), QString::null, 0, this, 0 ); |
282 | connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); | 501 | connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); |
283 | a->addTo( editBar ); | 502 | a->addTo( filebar() ); |
284 | a->addTo( edit ); | 503 | a->addTo( edit ); |
285 | */ | 504 | */ |
286 | 505 | ||
287 | a = new QAction( tr( "Info" ), QString::null, 0, this, NULL); | 506 | m_info_action = new QAction( tr( "Info" ), geticon( "UtilsIcon" ), QString::null, 0, this, NULL); |
288 | connect( a, SIGNAL( activated() ), this, SLOT( showinfo() ) ); | 507 | connect( m_info_action, SIGNAL( activated() ), this, SLOT( showinfo() ) ); |
289 | a->addTo( file ); | 508 | m_info_action->addTo( file ); |
290 | |||
291 | QActionGroup* ag = new QActionGroup(this); | ||
292 | QPopupMenu *spacemenu = new QPopupMenu(this); | ||
293 | file->insertItem( tr( "On Action..." ), spacemenu ); | ||
294 | |||
295 | m_buttonAction[0] = new QAction( tr( "Open File" ), QString::null, 0, ag, NULL, true ); | ||
296 | |||
297 | m_buttonAction[1] = new QAction( tr( "Autoscroll" ), QString::null, 0, ag, NULL, true ); | ||
298 | |||
299 | m_buttonAction[2] = new QAction( tr( "Mark" ), QString::null, 0, ag, NULL, true ); | ||
300 | 509 | ||
301 | m_buttonAction[3] = new QAction( tr( "Fullscreen" ), QString::null, 0, ag, NULL, true ); | 510 | m_touch_action = new QAction( tr( "Two/One Touch" ), geticon( "1to1" ), QString::null, 0, this, NULL, true ); |
511 | connect( m_touch_action, SIGNAL( toggled(bool) ), this, SLOT( setTwoTouch(bool) ) ); | ||
512 | m_touch_action->setOn(m_twoTouch); | ||
513 | m_touch_action->addTo( file ); | ||
302 | 514 | ||
303 | ag->addTo(spacemenu); | 515 | m_find_action = new QAction( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, NULL); |
516 | connect( m_find_action, SIGNAL( activated() ), this, SLOT( editFind() ) ); | ||
517 | file->insertSeparator(); | ||
518 | // a->addTo( bar ); | ||
519 | m_find_action->addTo( file ); | ||
304 | 520 | ||
305 | connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( buttonActionSelected(QAction*) ) ); | 521 | m_exportlinks_action = new QAction( tr( "Export Links" ), QString::null, 0, this, NULL); |
522 | connect( m_exportlinks_action, SIGNAL( activated() ), this, SLOT( ExportLinks() ) ); | ||
523 | m_exportlinks_action->addTo( file ); | ||
306 | 524 | ||
307 | file->insertSeparator(); | 525 | m_scrollButton = new QAction( tr( "Scroll" ), getmyicon( "panel-arrow-down" ), QString::null, 0, this, 0, true ); |
526 | connect( m_scrollButton, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) ); | ||
527 | m_scrollButton->addTo(navigation); | ||
528 | m_scrollButton->setOn(false); | ||
308 | 529 | ||
309 | ag = new QActionGroup(this); | 530 | m_start_action = new QAction( tr( "Goto Start" ), geticon( "start" ), QString::null, 0, this, NULL); |
310 | ag->setExclusive(false); | 531 | connect( m_start_action, SIGNAL( activated() ), this, SLOT( gotoStart() ) ); |
311 | QPopupMenu *encoding = new QPopupMenu(this); | 532 | m_start_action->addTo(navigation); |
312 | file->insertItem( tr( "Navigation" ), encoding ); | ||
313 | 533 | ||
314 | a = m_scrollButton = new QAction( tr( "Scroll" ), Resource::loadPixmap( PICDIR "panel-arrow-down" ), QString::null, 0, ag, 0, true ); | 534 | m_end_action = new QAction( tr( "Goto End" ), geticon( "finish" ), QString::null, 0, this, NULL); |
535 | connect( m_end_action, SIGNAL( activated() ), this, SLOT( gotoEnd() ) ); | ||
536 | m_end_action->addTo(navigation); | ||
315 | 537 | ||
316 | a->setOn(false); | 538 | m_jump_action = new QAction( tr( "Jump" ), geticon( "rotate" ), QString::null, 0, this, NULL); |
317 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) ); | 539 | connect( m_jump_action, SIGNAL( activated() ), this, SLOT( jump() ) ); |
318 | a->addTo( bar ); | 540 | m_jump_action->addTo(navigation); |
319 | 541 | ||
320 | a = new QAction( tr( "Jump" ), QString::null, 0, ag, NULL); | 542 | m_pageline_action = new QAction( tr( "Page/Line Scroll" ), geticon( "pass" ), QString::null, 0, this, NULL, true ); |
321 | connect( a, SIGNAL( activated() ), this, SLOT( jump() ) ); | 543 | connect( m_pageline_action, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) ); |
544 | m_pageline_action->addTo(navigation); | ||
545 | m_pageline_action->setOn(reader->m_bpagemode); | ||
322 | 546 | ||
323 | a = new QAction( tr( "Page/Line Scroll" ), QString::null, 0, ag, NULL, true ); | 547 | m_pageup_action = new QAction( tr( "Up" ), geticon( "up" ), QString::null, 0, this, 0 ); |
324 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) ); | 548 | connect( m_pageup_action, SIGNAL( activated() ), this, SLOT( pageup() ) ); |
325 | a->setOn(reader->m_bpagemode); | 549 | m_pageup_action->addTo( navigation ); |
550 | |||
551 | m_pagedn_action = new QAction( tr( "Down" ), geticon( "down" ), QString::null, 0, this, 0 ); | ||
552 | connect( m_pagedn_action, SIGNAL( activated() ), this, SLOT( pagedn() ) ); | ||
553 | m_pagedn_action->addTo( navigation ); | ||
326 | 554 | ||
327 | a = new QAction( tr( "Set Overlap" ), QString::null, 0, ag, NULL); | 555 | m_back_action = new QAction( tr( "Back" ), geticon( "back" ), QString::null, 0, this, 0 ); |
328 | connect( a, SIGNAL( activated() ), this, SLOT( setoverlap() ) ); | 556 | connect( m_back_action, SIGNAL( activated() ), reader, SLOT( goBack() ) ); |
557 | m_back_action->addTo( navigation ); | ||
329 | 558 | ||
330 | a = new QAction( tr( "Use Cursor" ), QString::null, 0, ag, NULL, true ); | 559 | m_home_action = new QAction( tr( "Home" ), geticon( "home" ), QString::null, 0, this, 0 ); |
331 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( navkeys(bool) ) ); | 560 | connect( m_home_action, SIGNAL( activated() ), reader, SLOT( goHome() ) ); |
332 | a->setOn(reader->m_navkeys); | 561 | m_home_action->addTo( navigation ); |
333 | 562 | ||
334 | ag->addTo(encoding); | 563 | m_forward_action = new QAction( tr( "Forward" ), geticon( "forward" ), QString::null, 0, this, 0 ); |
564 | connect( m_forward_action, SIGNAL( activated() ), reader, SLOT( goForward() ) ); | ||
565 | m_forward_action->addTo( navigation ); | ||
335 | 566 | ||
336 | /* | 567 | /* |
337 | a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true ); | 568 | a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true ); |
338 | // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); | 569 | // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); |
339 | a->addTo( file ); | 570 | a->addTo( file ); |
340 | 571 | ||
341 | a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true ); | 572 | a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true ); |
342 | // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); | 573 | // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); |
343 | a->addTo( file ); | 574 | a->addTo( file ); |
344 | */ | 575 | */ |
345 | 576 | ||
346 | file->insertSeparator(); | 577 | // file->insertSeparator(); |
347 | 578 | ||
348 | a = new QAction( tr( "Set Dictionary" ), QString::null, 0, this, NULL); | 579 | #ifdef _SCROLLPIPE |
349 | connect( a, SIGNAL( activated() ), this, SLOT( settarget() ) ); | ||
350 | a->addTo( file ); | ||
351 | 580 | ||
352 | a = new QAction( tr( "Two/One Touch" ), QString::null, 0, this, NULL, true ); | 581 | QActionGroup* ag = new QActionGroup(this); |
353 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( setTwoTouch(bool) ) ); | ||
354 | a->setOn(m_twoTouch); | ||
355 | a->addTo( file ); | ||
356 | |||
357 | ag = new QActionGroup(this); | ||
358 | ag->setExclusive(false); | 582 | ag->setExclusive(false); |
359 | encoding = new QPopupMenu(this); | 583 | spacemenu = new QPopupMenu(this); |
360 | file->insertItem( tr( "Target" ), encoding ); | 584 | file->insertItem( tr( "Scrolling" ), spacemenu ); |
361 | 585 | ||
362 | a = new QAction( tr( "Annotation" ), QString::null, 0, ag, NULL, true ); | 586 | a = new QAction( tr( "Set Target" ), QString::null, 0, ag, NULL); |
363 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnAnnotation(bool) ) ); | 587 | connect( a, SIGNAL( activated() ), this, SLOT( setpipetarget() ) ); |
364 | a->setOn(m_doAnnotation); | ||
365 | 588 | ||
366 | a = new QAction( tr( "Dictionary" ), QString::null, 0, ag, NULL, true ); | 589 | a = new QAction( tr( "Pause Paras" ), QString::null, 0, ag, NULL, true ); |
367 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnDictionary(bool) ) ); | 590 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( setpause(bool) ) ); |
368 | a->setOn(m_doDictionary); | 591 | a->setOn(reader->m_pauseAfterEachPara); |
369 | 592 | ||
370 | a = new QAction( tr( "Clipboard" ), QString::null, 0, ag, NULL, true ); | 593 | ag->addTo(spacemenu); |
371 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( OnClipboard(bool) ) ); | 594 | // file->insertSeparator(); |
372 | a->setOn(m_doClipboard); | ||
373 | |||
374 | ag->addTo(encoding); | ||
375 | 595 | ||
596 | #endif | ||
376 | 597 | ||
377 | /* | 598 | /* |
378 | a = new QAction( tr( "Import" ), QString::null, 0, this, NULL ); | 599 | a = new QAction( tr( "Import" ), QString::null, 0, this, NULL ); |
379 | connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) ); | 600 | connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) ); |
380 | a->addTo( file ); | 601 | a->addTo( file ); |
381 | */ | 602 | */ |
382 | |||
383 | a = new QAction( tr( "Up" ), Resource::loadPixmap( "up" ), QString::null, 0, this, 0 ); | ||
384 | connect( a, SIGNAL( activated() ), this, SLOT( pageup() ) ); | ||
385 | a->addTo( editBar ); | ||
386 | |||
387 | a = new QAction( tr( "Down" ), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 ); | ||
388 | connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) ); | ||
389 | a->addTo( editBar ); | ||
390 | 603 | ||
391 | /* | 604 | /* |
392 | a = new QAction( tr( "Paste" ), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 ); | 605 | a = new QAction( tr( "Paste" ), geticon( "paste" ), QString::null, 0, this, 0 ); |
393 | connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); | 606 | connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); |
394 | a->addTo( editBar ); | 607 | a->addTo( fileBar ); |
395 | a->addTo( edit ); | 608 | a->addTo( edit ); |
396 | */ | 609 | */ |
397 | 610 | ||
398 | // a = new QAction( tr( "Find..." ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); | 611 | // a = new QAction( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, 0 ); |
399 | a = new QAction( tr( "Find..." ), QString::null, 0, this, NULL); | ||
400 | connect( a, SIGNAL( activated() ), this, SLOT( editFind() ) ); | ||
401 | file->insertSeparator(); | ||
402 | // a->addTo( bar ); | ||
403 | a->addTo( file ); | ||
404 | |||
405 | 612 | ||
406 | m_fullscreen = false; | 613 | m_fullscreen = false; |
407 | a = m_actFullscreen = new QAction( tr( "Fullscreen" ), QString::null, 0, this, NULL, true ); | 614 | m_actFullscreen = new QAction( tr( "Fullscreen" ), geticon( "fullscreen" ), QString::null, 0, this, NULL, true ); |
408 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( setfullscreen(bool) ) ); | 615 | connect( m_actFullscreen, SIGNAL( toggled(bool) ), this, SLOT( setfullscreen(bool) ) ); |
409 | a->setOn(m_fullscreen); | 616 | m_actFullscreen->setOn(m_fullscreen); |
410 | a->addTo( file ); | 617 | m_actFullscreen->addTo( view ); |
411 | |||
412 | a = new QAction( tr( "Continuous" ), QString::null, 0, ag, NULL, true ); | ||
413 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( setcontinuous(bool) ) ); | ||
414 | a->setOn(reader->m_continuousDocument); | ||
415 | a->addTo( file ); | ||
416 | |||
417 | a = m_bkmkAvail = new QAction( tr( "Annotation" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); | ||
418 | connect( a, SIGNAL( activated() ), this, SLOT( showAnnotation() ) ); | ||
419 | a->addTo( bar ); | ||
420 | |||
421 | m_bkmkAvail->setEnabled(false); | ||
422 | 618 | ||
619 | view->insertSeparator(); | ||
423 | 620 | ||
424 | ag = new QActionGroup(this); | 621 | m_zoomin_action = new QAction( tr( "Zoom In" ), geticon( "zoom" ), QString::null, 0, this); |
425 | // ag->setExclusive(false); | 622 | connect( m_zoomin_action, SIGNAL( activated() ), this, SLOT( zoomin() ) ); |
426 | encoding = new QPopupMenu(this); | 623 | m_zoomin_action->addTo( view ); |
427 | format->insertItem( tr( "Markup" ), encoding ); | ||
428 | 624 | ||
429 | a = new QAction( tr( "Auto" ), QString::null, 0, ag, NULL, true ); | 625 | m_zoomout_action = new QAction( tr( "Zoom Out" ), geticon( "mag" ), QString::null, 0, this); |
430 | a->setOn(reader->bautofmt); | 626 | connect( m_zoomout_action, SIGNAL( activated() ), this, SLOT( zoomout() ) ); |
431 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( autofmt(bool) ) ); | 627 | m_zoomout_action->addTo( view ); |
432 | 628 | ||
433 | a = new QAction( tr( "None" ), QString::null, 0, ag, NULL, true ); | 629 | view->insertSeparator(); |
434 | a->setOn(!reader->bautofmt && !(reader->btextfmt || reader->bstriphtml || reader->bpeanut)); | 630 | m_setfont_action = new QAction( tr( "Set Font" ), getmyicon( "font" ), QString::null, 0, this); |
435 | // connect( a, SIGNAL( toggled(bool) ), this, SLOT( textfmt(bool) ) ); | 631 | connect( m_setfont_action, SIGNAL( activated() ), this, SLOT( setfont() ) ); |
632 | m_setfont_action->addTo( view ); | ||
436 | 633 | ||
437 | a = new QAction( tr( "Text" ), QString::null, 0, ag, NULL, true ); | 634 | view->insertSeparator(); |
438 | a->setOn(reader->btextfmt); | 635 | m_setenc_action = new QAction( tr( "Set Encoding" ), getmyicon( "charset" ), QString::null, 0, this); |
439 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( textfmt(bool) ) ); | 636 | connect( m_setenc_action, SIGNAL( activated() ), this, SLOT( chooseencoding() ) ); |
637 | m_setenc_action->addTo( view ); | ||
440 | 638 | ||
441 | a = new QAction( tr( "HTML" ), QString::null, 0, ag, NULL, true ); | 639 | m_setmono_action = new QAction( tr( "Ideogram" ), getmyicon( "ideogram" ), QString::null, 0, this, NULL, true); |
442 | a->setOn(reader->bstriphtml); | 640 | connect( m_setmono_action, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) ); |
443 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( striphtml(bool) ) ); | 641 | m_setmono_action->addTo( view ); |
642 | m_setmono_action->setOn(reader->m_bMonoSpaced); | ||
444 | 643 | ||
445 | a = new QAction( tr( "Peanut/PML" ), QString::null, 0, ag, NULL, true ); | ||
446 | a->setOn(reader->bpeanut); | ||
447 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( peanut(bool) ) ); | ||
448 | 644 | ||
449 | ag->addTo(encoding); | 645 | // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true ); |
450 | 646 | // a = new QAction( tr( "Zoom" ), geticon( "mag" ), QString::null, 0, this, 0 ); | |
451 | |||
452 | |||
453 | ag = new QActionGroup(this); | ||
454 | ag->setExclusive(false); | ||
455 | encoding = new QPopupMenu(this); | ||
456 | format->insertItem( tr( "Layout" ), encoding ); | ||
457 | |||
458 | a = new QAction( tr( "Strip CR" ), QString::null, 0, ag, NULL, true ); | ||
459 | a->setOn(reader->bstripcr); | ||
460 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( stripcr(bool) ) ); | ||
461 | |||
462 | a = new QAction( tr( "Dehyphen" ), QString::null, 0, ag, NULL, true ); | ||
463 | a->setOn(reader->bdehyphen); | ||
464 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( dehyphen(bool) ) ); | ||
465 | // a->addTo( format ); | ||
466 | |||
467 | a = new QAction( tr( "Single Space" ), QString::null, 0, ag, NULL, true ); | ||
468 | a->setOn(reader->bonespace); | ||
469 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( onespace(bool) ) ); | ||
470 | |||
471 | a = new QAction( tr( "Unindent" ), QString::null, 0, ag, NULL, true ); | ||
472 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( unindent(bool) ) ); | ||
473 | a->setOn(reader->bunindent); | ||
474 | // a->addTo( format ); | ||
475 | |||
476 | a = new QAction( tr( "Re-paragraph" ), QString::null, 0, ag, NULL, true ); | ||
477 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( repara(bool) ) ); | ||
478 | a->setOn(reader->brepara); | ||
479 | // a->addTo( format ); | ||
480 | |||
481 | a = new QAction( tr( "Double Space" ), QString::null, 0, ag, NULL, true ); | ||
482 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( dblspce(bool) ) ); | ||
483 | a->setOn(reader->bdblspce); | ||
484 | // a->addTo( format ); | ||
485 | |||
486 | a = new QAction( tr( "Indent+" ), QString::null, 0, ag, NULL ); | ||
487 | connect( a, SIGNAL( activated() ), this, SLOT( indentplus() ) ); | ||
488 | // a->addTo( format ); | ||
489 | |||
490 | a = new QAction( tr( "Indent-" ), QString::null, 0, ag, NULL ); | ||
491 | connect( a, SIGNAL( activated() ), this, SLOT( indentminus() ) ); | ||
492 | #ifdef REPALM | ||
493 | a = new QAction( tr( "Repalm" ), QString::null, 0, ag, NULL, true ); | ||
494 | a->setOn(reader->brepalm); | ||
495 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( repalm(bool) ) ); | ||
496 | #endif | ||
497 | a = new QAction( tr( "Remap" ), QString::null, 0, ag, NULL, true ); | ||
498 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( remap(bool) ) ); | ||
499 | a->setOn(reader->bremap); | ||
500 | |||
501 | a = new QAction( tr( "Embolden" ), QString::null, 0, ag, NULL, true ); | ||
502 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( embolden(bool) ) ); | ||
503 | a->setOn(reader->bmakebold); | ||
504 | 647 | ||
505 | ag->addTo(encoding); | ||
506 | 648 | ||
507 | // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true ); | ||
508 | // a = new QAction( tr( "Zoom" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 ); | ||
509 | format->insertSeparator(); | ||
510 | a = new QAction( tr( "Zoom In" ), QString::null, 0, this); | ||
511 | connect( a, SIGNAL( activated() ), this, SLOT( zoomin() ) ); | ||
512 | a->addTo( format ); | ||
513 | a = new QAction( tr( "Zoom Out" ), QString::null, 0, this); | ||
514 | connect( a, SIGNAL( activated() ), this, SLOT( zoomout() ) ); | ||
515 | a->addTo( format ); | ||
516 | // a->addTo( editBar ); | ||
517 | format->insertSeparator(); | ||
518 | 649 | ||
650 | // a->addTo( filebar() ); | ||
651 | // view->insertSeparator(); | ||
519 | 652 | ||
653 | /* | ||
520 | a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true ); | 654 | a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true ); |
521 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) ); | 655 | connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) ); |
522 | a->setOn(reader->m_bMonoSpaced); | 656 | a->setOn(reader->m_bMonoSpaced); |
523 | a->addTo( format ); | 657 | a->addTo( view ); |
524 | 658 | */ | |
525 | a = new QAction( tr( "Set width" ), QString::null, 0, this, NULL); | 659 | /* |
660 | a = new QAction( tr( "Set Width" ), QString::null, 0, this, NULL); | ||
526 | connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) ); | 661 | connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) ); |
527 | a->addTo( format ); | 662 | a->addTo( view ); |
528 | 663 | */ | |
529 | encoding = new QPopupMenu(this); | ||
530 | // format->insertSeparator(); | ||
531 | format->insertItem( tr( "Encoding" ), encoding ); | ||
532 | |||
533 | ag = new QActionGroup(this); | ||
534 | |||
535 | m_EncodingAction[0] = new QAction( tr( "Ascii" ), QString::null, 0, ag, NULL, true ); | ||
536 | |||
537 | m_EncodingAction[1] = new QAction( tr( "UTF-8" ), QString::null, 0, ag, NULL, true ); | ||
538 | |||
539 | m_EncodingAction[2] = new QAction( tr( "UCS-2(BE)" ), QString::null, 0, ag, NULL, true ); | ||
540 | |||
541 | m_EncodingAction[3] = new QAction( tr( "USC-2(LE)" ), QString::null, 0, ag, NULL, true ); | ||
542 | |||
543 | m_EncodingAction[4] = new QAction( tr( "Palm" ), QString::null, 0, ag, NULL, true ); | ||
544 | |||
545 | m_EncodingAction[5] = new QAction( tr( "Windows(1252)" ), QString::null, 0, ag, NULL, true ); | ||
546 | |||
547 | ag->addTo(encoding); | ||
548 | |||
549 | connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( encodingSelected(QAction*) ) ); | ||
550 | |||
551 | a = new QAction( tr( "Set Font" ), QString::null, 0, this); | ||
552 | connect( a, SIGNAL( activated() ), this, SLOT( setfont() ) ); | ||
553 | format->insertSeparator(); | ||
554 | a->addTo( format ); | ||
555 | |||
556 | QPopupMenu *marks = new QPopupMenu( this ); | ||
557 | 664 | ||
558 | a = new QAction( tr( "Mark" ), QString::null, 0, this, NULL); | 665 | m_mark_action = new QAction( tr( "Bookmark" ), getmyicon( "bookmark" ), QString::null, 0, this, NULL); |
559 | connect( a, SIGNAL( activated() ), this, SLOT( addbkmk() ) ); | 666 | connect( m_mark_action, SIGNAL( activated() ), this, SLOT( addbkmk() ) ); |
560 | a->addTo( marks ); | 667 | m_mark_action->addTo( marks ); |
561 | 668 | ||
562 | a = new QAction( tr( "Annotate" ), QString::null, 0, this, NULL); | 669 | m_annotate_action = new QAction( tr( "Annotate" ), getmyicon( "annotate" ), QString::null, 0, this, NULL); |
563 | connect( a, SIGNAL( activated() ), this, SLOT( addanno() ) ); | 670 | connect( m_annotate_action, SIGNAL( activated() ), this, SLOT( addanno() ) ); |
564 | a->addTo( marks ); | 671 | m_annotate_action->addTo( marks ); |
565 | 672 | ||
566 | a = new QAction( tr( "Goto" ), QString::null, 0, this, NULL, false ); | 673 | m_goto_action = new QAction( tr( "Goto" ), getmyicon( "bookmark_goto" ), QString::null, 0, this, NULL, false ); |
567 | connect( a, SIGNAL( activated() ), this, SLOT( do_gotomark() ) ); | 674 | connect( m_goto_action, SIGNAL( activated() ), this, SLOT( do_gotomark() ) ); |
568 | a->addTo( marks ); | 675 | m_goto_action->addTo( marks ); |
569 | 676 | ||
570 | a = new QAction( tr( "Delete" ), QString::null, 0, this, NULL); | 677 | m_delete_action = new QAction( tr( "Delete" ), getmyicon( "bookmark_delete" ), QString::null, 0, this, NULL); |
571 | connect( a, SIGNAL( activated() ), this, SLOT( do_delmark() ) ); | 678 | connect( m_delete_action, SIGNAL( activated() ), this, SLOT( do_delmark() ) ); |
572 | a->addTo( marks ); | 679 | m_delete_action->addTo( marks ); |
573 | 680 | ||
574 | a = new QAction( tr( "Autogen" ), QString::null, 0, this, NULL, false ); | 681 | m_autogen_action = new QAction( tr( "Autogen" ), geticon( "exec" ), QString::null, 0, this, NULL, false ); |
575 | connect( a, SIGNAL( activated() ), this, SLOT( do_autogen() ) ); | 682 | connect( m_autogen_action, SIGNAL( activated() ), this, SLOT( do_autogen() ) ); |
576 | marks->insertSeparator(); | 683 | marks->insertSeparator(); |
577 | a->addTo( marks ); | 684 | m_autogen_action->addTo( marks ); |
578 | 685 | ||
579 | a = new QAction( tr( "Clear" ), QString::null, 0, this, NULL); | 686 | m_clear_action = new QAction( tr( "Clear" ), getmyicon( "bookmark_clear" ), QString::null, 0, this, NULL); |
580 | connect( a, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) ); | 687 | connect( m_clear_action, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) ); |
581 | a->addTo( marks ); | 688 | m_clear_action->addTo( marks ); |
582 | 689 | ||
583 | a = new QAction( tr( "Save" ), QString::null, 0, this, NULL ); | 690 | m_save_action = new QAction( tr( "Save" ), getmyicon( "bookmark_save" ), QString::null, 0, this, NULL ); |
584 | connect( a, SIGNAL( activated() ), this, SLOT( savebkmks() ) ); | 691 | connect( m_save_action, SIGNAL( activated() ), this, SLOT( savebkmks() ) ); |
585 | a->addTo( marks ); | 692 | m_save_action->addTo( marks ); |
586 | 693 | ||
587 | a = new QAction( tr( "Tidy" ), QString::null, 0, this, NULL); | 694 | m_tidy_action = new QAction( tr( "Tidy" ), getmyicon( "bookmark_tidy" ), QString::null, 0, this, NULL); |
588 | connect( a, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) ); | 695 | connect( m_tidy_action, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) ); |
589 | marks->insertSeparator(); | 696 | marks->insertSeparator(); |
590 | a->addTo( marks ); | 697 | m_tidy_action->addTo( marks ); |
591 | 698 | ||
592 | a = new QAction( tr( "Start Block" ), QString::null, 0, this, NULL); | 699 | m_startBlock_action = new QAction( tr( "Start Block" ), geticon( "new" ), QString::null, 0, this, NULL); |
593 | connect( a, SIGNAL( activated() ), this, SLOT( editMark() ) ); | 700 | connect( m_startBlock_action, SIGNAL( activated() ), this, SLOT( editMark() ) ); |
594 | marks->insertSeparator(); | 701 | marks->insertSeparator(); |
595 | a->addTo( marks ); | 702 | m_startBlock_action->addTo( marks ); |
703 | |||
704 | m_endBlock_action = new QAction( tr( "Copy Block" ), geticon( "copy" ), QString::null, 0, this, NULL); | ||
705 | connect( m_endBlock_action, SIGNAL( activated() ), this, SLOT( editCopy() ) ); | ||
706 | m_endBlock_action->addTo( marks ); | ||
596 | 707 | ||
597 | a = new QAction( tr( "Copy Block" ), QString::null, 0, this, NULL); | 708 | m_bkmkAvail = NULL; |
598 | connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) ); | ||
599 | a->addTo( marks ); | ||
600 | 709 | ||
601 | 710 | ||
602 | mb->insertItem( tr( "File" ), file ); | 711 | setToolBarsMovable(m_tbmove); |
603 | // mb->insertItem( tr( "Edit" ), edit ); | 712 | addtoolbars(&config); |
604 | mb->insertItem( tr( "Format" ), format ); | 713 | |
605 | mb->insertItem( tr( "Marks" ), marks ); | 714 | pbar = new QProgressBar(this); |
715 | pbar->hide(); | ||
606 | 716 | ||
607 | searchBar = new QFloatBar( "Search", this, QMainWindow::Top, TRUE ); | 717 | searchBar = new QFloatBar( "Search", this, QMainWindow::Top, TRUE ); |
608 | 718 | ||
609 | searchBar->setHorizontalStretchable( TRUE ); | 719 | searchBar->setHorizontalStretchable( TRUE ); |
610 | 720 | ||
611 | connect(searchBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); | 721 | connect(searchBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); |
612 | 722 | ||
613 | searchEdit = new QLineEdit( searchBar, "searchEdit" ); | 723 | searchEdit = new QLineEdit( searchBar, "searchEdit" ); |
614 | // QFont f("unifont", 16 /*, QFont::Bold*/); | 724 | // QFont f("unifont", 16 /*, QFont::Bold*/); |
615 | // searchEdit->setFont( f ); | 725 | // searchEdit->setFont( f ); |
616 | searchBar->setStretchableWidget( searchEdit ); | 726 | searchBar->setStretchableWidget( searchEdit ); |
617 | 727 | ||
728 | |||
618 | #ifdef __ISEARCH | 729 | #ifdef __ISEARCH |
619 | connect( searchEdit, SIGNAL( textChanged( const QString & ) ), | 730 | connect( searchEdit, SIGNAL( textChanged( const QString & ) ), |
620 | this, SLOT( search( const QString& ) ) ); | 731 | this, SLOT( search( const QString& ) ) ); |
621 | #else | 732 | #else |
622 | connect( searchEdit, SIGNAL( returnPressed( ) ), | 733 | connect( searchEdit, SIGNAL( returnPressed( ) ), |
623 | this, SLOT( search( ) ) ); | 734 | this, SLOT( search( ) ) ); |
624 | #endif | 735 | #endif |
625 | a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 ); | 736 | QAction*a = new QAction( tr( "Find Next" ), geticon( "next" ), QString::null, 0, this, 0 ); |
626 | connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) ); | 737 | connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) ); |
627 | a->addTo( searchBar ); | 738 | a->addTo( searchBar ); |
628 | 739 | ||
629 | a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); | 740 | a = new QAction( tr( "Close Find" ), geticon( "close" ), QString::null, 0, this, 0 ); |
630 | connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) ); | 741 | connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) ); |
631 | a->addTo( searchBar ); | 742 | a->addTo( searchBar ); |
632 | 743 | ||
633 | searchBar->hide(); | 744 | searchBar->hide(); |
634 | 745 | ||
635 | regBar = new QFloatBar( "Autogen", this, QMainWindow::Top, TRUE ); | 746 | regBar = new QFloatBar( "Autogen", this, QMainWindow::Top, TRUE ); |
636 | connect(regBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); | 747 | connect(regBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() )); |
637 | 748 | ||
638 | regBar->setHorizontalStretchable( TRUE ); | 749 | regBar->setHorizontalStretchable( TRUE ); |
639 | 750 | ||
640 | regEdit = new QLineEdit( regBar, "regEdit" ); | 751 | regEdit = new QLineEdit( regBar, "regEdit" ); |
641 | // regEdit->setFont( f ); | 752 | // regEdit->setFont( f ); |
642 | 753 | ||
643 | regBar->setStretchableWidget( regEdit ); | 754 | regBar->setStretchableWidget( regEdit ); |
644 | 755 | ||
645 | connect( regEdit, SIGNAL( returnPressed( ) ), | 756 | connect( regEdit, SIGNAL( returnPressed( ) ), |
646 | this, SLOT( do_regaction() ) ); | 757 | this, SLOT( do_regaction() ) ); |
647 | 758 | ||
648 | a = new QAction( tr( "Do Reg" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 ); | 759 | a = new QAction( tr( "Do Reg" ), geticon( "enter" ), QString::null, 0, this, 0 ); |
649 | connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) ); | 760 | connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) ); |
650 | a->addTo( regBar ); | 761 | a->addTo( regBar ); |
651 | 762 | ||
652 | a = new QAction( tr( "Close Edit" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); | 763 | a = new QAction( tr( "Close Edit" ), geticon( "close" ), QString::null, 0, this, 0 ); |
653 | connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) ); | 764 | connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) ); |
654 | a->addTo( regBar ); | 765 | a->addTo( regBar ); |
655 | 766 | ||
656 | regBar->hide(); | 767 | regBar->hide(); |
657 | 768 | ||
658 | m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE ); | 769 | m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE ); |
659 | 770 | ||
660 | m_fontBar->setHorizontalStretchable( TRUE ); | 771 | m_fontBar->setHorizontalStretchable( TRUE ); |
661 | 772 | ||
662 | qDebug("Font selector"); | 773 | // qDebug("Font selector"); |
663 | m_fontSelector = new QComboBox(false, m_fontBar); | 774 | m_fontSelector = new QComboBox(false, m_fontBar); |
664 | m_fontBar->setStretchableWidget( m_fontSelector ); | 775 | m_fontBar->setStretchableWidget( m_fontSelector ); |
665 | { | 776 | { |
777 | #ifndef USEQPE | ||
778 | QFontDatabase f; | ||
779 | #else | ||
666 | FontDatabase f; | 780 | FontDatabase f; |
781 | #endif | ||
667 | QStringList flist = f.families(); | 782 | QStringList flist = f.families(); |
668 | m_fontSelector->insertStringList(flist); | ||
669 | |||
670 | bool realfont = false; | 783 | bool realfont = false; |
671 | for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++) | 784 | for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++) |
672 | { | 785 | { |
673 | if (reader->m_fontname == *nm) | 786 | if (reader->m_fontname == *nm) |
674 | { | 787 | { |
675 | realfont = true; | 788 | realfont = true; |
676 | } | 789 | } |
677 | if (*nm == "courier") reader->m_fontControl.hasCourier(true); | 790 | if ((*nm).contains(FIXEDFONT,false)) reader->m_fontControl.hasCourier(true, *nm); |
678 | } | 791 | } |
679 | if (!realfont) reader->m_fontname = flist[0]; | 792 | if (!realfont) reader->m_fontname = flist[0]; |
680 | } // delete the FontDatabase!!! | 793 | } // delete the FontDatabase!!! |
681 | |||
682 | connect( m_fontSelector, SIGNAL( activated(const QString& ) ), | 794 | connect( m_fontSelector, SIGNAL( activated(const QString& ) ), |
683 | this, SLOT( do_setfont(const QString&) ) ); | 795 | this, SLOT( do_setfont(const QString&) ) ); |
796 | connect( m_fontSelector, SIGNAL( activated(int ) ), | ||
797 | this, SLOT( do_setencoding(int) ) ); | ||
684 | 798 | ||
685 | m_fontBar->hide(); | 799 | m_fontBar->hide(); |
686 | m_fontVisible = false; | 800 | m_fontVisible = false; |
687 | 801 | #ifdef USEMSGS | |
688 | connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ), | 802 | connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ), |
689 | this, SLOT( msgHandler(const QCString&, const QByteArray&) ) ); | 803 | this, SLOT( msgHandler(const QCString&, const QByteArray&) ) ); |
690 | 804 | #endif | |
691 | qDebug("Initing"); | 805 | // qDebug("Initing"); |
692 | reader->init(); | 806 | reader->init(); |
693 | qDebug("Inited"); | 807 | // qDebug("Inited"); |
694 | m_EncodingAction[reader->m_encd]->setOn(true); | 808 | // m_buttonAction[m_spaceTarget]->setOn(true); |
695 | m_buttonAction[m_spaceTarget]->setOn(true); | 809 | // qDebug("fonting"); |
696 | qDebug("fonting"); | ||
697 | do_setfont(reader->m_fontname); | 810 | do_setfont(reader->m_fontname); |
698 | if (!reader->m_lastfile.isEmpty()) | 811 | if (!reader->m_lastfile.isEmpty()) |
699 | { | 812 | { |
700 | qDebug("doclnk"); | 813 | //qDebug("doclnk"); |
701 | //doc = new DocLnk(reader->m_lastfile); | 814 | //doc = new DocLnk(reader->m_lastfile); |
702 | qDebug("doclnk done"); | 815 | //qDebug("doclnk done"); |
703 | if (pOpenlist != NULL) | 816 | if (pOpenlist != NULL) |
704 | { | 817 | { |
705 | 818 | ||
706 | /* | 819 | /* |
707 | int ind = 0; | 820 | int ind = 0; |
708 | Bkmk* p = (*pOpenlist)[ind]; | 821 | Bkmk* p = (*pOpenlist)[ind]; |
709 | while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile) | 822 | while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile) |
710 | { | 823 | { |
711 | p = (*pOpenlist)[++ind]; | 824 | p = (*pOpenlist)[++ind]; |
712 | } | 825 | } |
713 | */ | 826 | */ |
714 | Bkmk* p = NULL; | 827 | Bkmk* p = NULL; |
715 | for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++) | 828 | for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++) |
716 | { | 829 | { |
717 | p = iter.pContent(); | 830 | p = iter.pContent(); |
718 | if (toQString(CFiledata(p->anno()).name()) == reader->m_lastfile) | 831 | if (toQString(CFiledata(p->anno()).name()) == reader->m_lastfile) |
719 | { | 832 | { |
720 | break; | 833 | break; |
721 | } | 834 | } |
722 | qDebug("Item:%s", (const char*)toQString(CFiledata(p->anno()).name())); | 835 | // qDebug("Item:%s", (const char*)toQString(CFiledata(p->anno()).name())); |
723 | p = NULL; | 836 | p = NULL; |
724 | } | 837 | } |
725 | if (p != NULL) | 838 | if (p != NULL) |
726 | { | 839 | { |
727 | qDebug("openfrombkmk"); | 840 | //qDebug("openfrombkmk"); |
728 | openfrombkmk(p); | 841 | if (!openfrombkmk(p)) |
842 | showEditTools(); | ||
729 | } | 843 | } |
730 | else | 844 | else |
731 | { | 845 | { |
732 | qDebug("openfile"); | 846 | //qDebug("openfile"); |
733 | openFile( reader->m_lastfile ); | 847 | openFile( reader->m_lastfile ); |
734 | } | 848 | } |
735 | } | 849 | } |
736 | else | 850 | else |
737 | { | 851 | { |
738 | qDebug("Openfile 2"); | 852 | // qDebug("Openfile 2"); |
739 | if (!reader->m_lastfile.isNull()) | 853 | if (!reader->m_lastfile.isEmpty()) |
740 | openFile( reader->m_lastfile ); | 854 | openFile( reader->m_lastfile ); |
741 | } | 855 | } |
742 | } | 856 | } |
743 | qApp->processEvents(); | 857 | else |
858 | { | ||
859 | showEditTools(); | ||
860 | } | ||
861 | // qApp->processEvents(); | ||
744 | reader->bDoUpdates = true; | 862 | reader->bDoUpdates = true; |
745 | reader->update(); | 863 | reader->update(); |
746 | qDebug("finished update"); | 864 | config.setGroup("Version"); |
865 | int major = config.readNumEntry("Major", 0); | ||
866 | int bkmktype = config.readNumEntry("BkmkType", 0); | ||
867 | char minor = config.readNumEntry("Minor", 0); | ||
868 | if (CheckVersion(major, bkmktype, minor)) | ||
869 | { | ||
870 | config.writeEntry("Major", major); | ||
871 | config.writeEntry("BkmkType", bkmktype); | ||
872 | config.writeEntry("Minor", (int)minor); | ||
873 | } | ||
874 | // qDebug("finished update"); | ||
875 | } | ||
876 | |||
877 | void QTReaderApp::addtoolbars(Config* config) | ||
878 | { | ||
879 | config->setGroup("Toolbar"); | ||
880 | |||
881 | if (fileBar != NULL) | ||
882 | { | ||
883 | if (fileBar != menubar) | ||
884 | { | ||
885 | fileBar->clear(); | ||
886 | } | ||
887 | else | ||
888 | { | ||
889 | m_preferences_action->removeFrom( filebar() ); | ||
890 | m_open_action->removeFrom( filebar() ); | ||
891 | m_close_action->removeFrom( filebar() ); | ||
892 | m_info_action->removeFrom( filebar() ); | ||
893 | m_touch_action->removeFrom( filebar() ); | ||
894 | m_find_action->removeFrom( filebar() ); | ||
895 | } | ||
896 | } | ||
897 | |||
898 | m_preferences_action->addTo( filebar() ); | ||
899 | addfilebar(config, "Open", m_open_action); | ||
900 | addfilebar(config, "Close", m_close_action); | ||
901 | addfilebar(config, "Info", m_info_action); | ||
902 | addfilebar(config, "Two/One Touch", m_touch_action); | ||
903 | addfilebar(config, "Find", m_find_action); | ||
904 | |||
905 | if (navBar != NULL) | ||
906 | { | ||
907 | if ((navBar == fileBar) && (fileBar == menubar)) | ||
908 | { | ||
909 | m_scrollButton->removeFrom( navbar() ); | ||
910 | m_start_action->removeFrom( navbar() ); | ||
911 | m_end_action->removeFrom( navbar() ); | ||
912 | m_jump_action->removeFrom( navbar() ); | ||
913 | m_pageline_action->removeFrom( navbar() ); | ||
914 | m_pageup_action->removeFrom( navbar() ); | ||
915 | m_pagedn_action->removeFrom( navbar() ); | ||
916 | m_back_action->removeFrom( navbar() ); | ||
917 | m_home_action->removeFrom( navbar() ); | ||
918 | m_forward_action->removeFrom( navbar() ); | ||
919 | } | ||
920 | else if (navBar != fileBar) | ||
921 | { | ||
922 | navBar->clear(); | ||
923 | } | ||
924 | } | ||
925 | |||
926 | addnavbar(config, "Scroll", m_scrollButton); | ||
927 | addnavbar(config, "Goto Start", m_start_action); | ||
928 | addnavbar(config, "Goto End", m_end_action); | ||
929 | |||
930 | addnavbar(config, "Jump", m_jump_action); | ||
931 | addnavbar(config, "Page/Line Scroll", m_pageline_action); | ||
932 | |||
933 | addnavbar(config, "Page Up", m_pageup_action); | ||
934 | addnavbar(config, "Page Down", m_pagedn_action); | ||
935 | |||
936 | addnavbar(config, "Back", m_back_action); | ||
937 | addnavbar(config, "Home", m_home_action); | ||
938 | addnavbar(config, "Forward", m_forward_action); | ||
939 | |||
940 | if (viewBar != NULL) | ||
941 | { | ||
942 | if ((viewBar == fileBar) && (fileBar == menubar)) | ||
943 | { | ||
944 | m_actFullscreen->removeFrom( filebar() ); | ||
945 | m_zoomin_action->removeFrom( viewbar() ); | ||
946 | m_zoomout_action->removeFrom( viewbar() ); | ||
947 | m_setfont_action->removeFrom( viewbar() ); | ||
948 | m_setenc_action->removeFrom( viewbar() ); | ||
949 | m_setmono_action->removeFrom( viewbar() ); | ||
950 | } | ||
951 | else if (viewBar != fileBar) | ||
952 | { | ||
953 | viewBar->clear(); | ||
954 | } | ||
955 | } | ||
956 | |||
957 | addviewbar(config, "Fullscreen", m_actFullscreen); | ||
958 | addviewbar(config, "Zoom In", m_zoomin_action); | ||
959 | addviewbar(config, "Zoom Out", m_zoomout_action); | ||
960 | addviewbar(config, "Set Font", m_setfont_action); | ||
961 | addviewbar(config, "Encoding Select", m_setenc_action); | ||
962 | addviewbar(config, "Ideogram Mode", m_setmono_action); | ||
963 | |||
964 | if (markBar != NULL) | ||
965 | { | ||
966 | if ((markBar == fileBar) && (fileBar == menubar)) | ||
967 | { | ||
968 | m_mark_action->removeFrom( markbar() ); | ||
969 | m_annotate_action->removeFrom( markbar()); | ||
970 | m_goto_action->removeFrom( markbar() ); | ||
971 | m_delete_action->removeFrom( markbar() ); | ||
972 | m_autogen_action->removeFrom( markbar() ); | ||
973 | m_clear_action->removeFrom( markbar() ); | ||
974 | m_save_action->removeFrom( markbar() ); | ||
975 | m_tidy_action->removeFrom( markbar() ); | ||
976 | m_startBlock_action->removeFrom( markbar() ); | ||
977 | m_endBlock_action->removeFrom( markbar() ); | ||
978 | } | ||
979 | else if (markBar != fileBar) | ||
980 | { | ||
981 | markBar->clear(); | ||
982 | } | ||
983 | } | ||
984 | addmarkbar(config, "Mark", m_mark_action); | ||
985 | addmarkbar(config, "Annotate", m_annotate_action); | ||
986 | addmarkbar(config, "Goto", m_goto_action); | ||
987 | addmarkbar(config, "Delete", m_delete_action); | ||
988 | addmarkbar(config, "Autogen", m_autogen_action); | ||
989 | addmarkbar(config, "Clear", m_clear_action); | ||
990 | addmarkbar(config, "Save", m_save_action); | ||
991 | addmarkbar(config, "Tidy", m_tidy_action); | ||
992 | addmarkbar(config, "Start Block", m_startBlock_action); | ||
993 | addmarkbar(config, "Copy Block", m_endBlock_action); | ||
994 | if (checkbar(config, "Annotation indicator")) | ||
995 | { | ||
996 | if (m_bkmkAvail == NULL) | ||
997 | { | ||
998 | m_bkmkAvail = new QAction( tr( "Annotation" ), geticon( "find" ), QString::null, 0, this, 0 ); | ||
999 | connect( m_bkmkAvail, SIGNAL( activated() ), this, SLOT( showAnnotation() ) ); | ||
1000 | |||
1001 | m_bkmkAvail->setEnabled(false); | ||
1002 | } | ||
1003 | QLabel *spacer = new QLabel(markBar, ""); | ||
1004 | markbar()->setStretchableWidget(spacer); | ||
1005 | m_bkmkAvail->removeFrom( markbar() ); | ||
1006 | m_bkmkAvail->addTo( markbar() ); | ||
1007 | } | ||
1008 | else | ||
1009 | { | ||
1010 | if (m_bkmkAvail != NULL) | ||
1011 | { | ||
1012 | m_bkmkAvail->removeFrom( markbar() ); | ||
1013 | delete m_bkmkAvail; | ||
1014 | m_bkmkAvail = NULL; | ||
1015 | } | ||
1016 | } | ||
1017 | } | ||
1018 | |||
1019 | bool QTReaderApp::checkbar(Config* _config, const QString& key) | ||
1020 | { | ||
1021 | return _config->readBoolEntry(key, false); | ||
1022 | } | ||
1023 | |||
1024 | |||
1025 | QToolBar* QTReaderApp::filebar() | ||
1026 | { | ||
1027 | if (fileBar == NULL) | ||
1028 | { | ||
1029 | switch (m_tbpol) | ||
1030 | { | ||
1031 | case cesSingle: | ||
1032 | // qDebug("Setting filebar to menubar"); | ||
1033 | fileBar = menubar; | ||
1034 | break; | ||
1035 | default: | ||
1036 | qDebug("Incorrect toolbar policy set"); | ||
1037 | case cesMenuTool: | ||
1038 | case cesMultiple: | ||
1039 | // qDebug("Creating new file bar"); | ||
1040 | fileBar = new QToolBar("File", this, m_tbposition); | ||
1041 | break; | ||
1042 | } | ||
1043 | //fileBar->setHorizontalStretchable( true ); | ||
1044 | } | ||
1045 | return fileBar; | ||
1046 | } | ||
1047 | QToolBar* QTReaderApp::viewbar() | ||
1048 | { | ||
1049 | if (viewBar == NULL) | ||
1050 | { | ||
1051 | switch (m_tbpol) | ||
1052 | { | ||
1053 | case cesMultiple: | ||
1054 | viewBar = new QToolBar("View", this, m_tbposition); | ||
1055 | break; | ||
1056 | default: | ||
1057 | qDebug("Incorrect toolbar policy set"); | ||
1058 | case cesSingle: | ||
1059 | case cesMenuTool: | ||
1060 | viewBar = fileBar; | ||
1061 | break; | ||
1062 | } | ||
1063 | } | ||
1064 | return viewBar; | ||
1065 | } | ||
1066 | QToolBar* QTReaderApp::navbar() | ||
1067 | { | ||
1068 | if (navBar == NULL) | ||
1069 | { | ||
1070 | switch (m_tbpol) | ||
1071 | { | ||
1072 | case cesMultiple: | ||
1073 | // qDebug("Creating new nav bar"); | ||
1074 | navBar = new QToolBar("Navigation", this, m_tbposition); | ||
1075 | break; | ||
1076 | default: | ||
1077 | qDebug("Incorrect toolbar policy set"); | ||
1078 | case cesSingle: | ||
1079 | case cesMenuTool: | ||
1080 | navBar = fileBar; | ||
1081 | // qDebug("Setting navbar to filebar"); | ||
1082 | break; | ||
1083 | } | ||
1084 | } | ||
1085 | return navBar; | ||
1086 | } | ||
1087 | QToolBar* QTReaderApp::markbar() | ||
1088 | { | ||
1089 | if (markBar == NULL) | ||
1090 | { | ||
1091 | switch (m_tbpol) | ||
1092 | { | ||
1093 | case cesMultiple: | ||
1094 | markBar = new QToolBar("Marks", this, m_tbposition); | ||
1095 | break; | ||
1096 | default: | ||
1097 | qDebug("Incorrect toolbar policy set"); | ||
1098 | case cesSingle: | ||
1099 | case cesMenuTool: | ||
1100 | markBar = fileBar; | ||
1101 | break; | ||
1102 | } | ||
1103 | } | ||
1104 | return markBar; | ||
1105 | } | ||
1106 | |||
1107 | void QTReaderApp::addfilebar(Config* _config, const QString& key, QAction* a) | ||
1108 | { | ||
1109 | if (_config->readBoolEntry(key, false)) a->addTo( filebar() ); | ||
1110 | } | ||
1111 | void QTReaderApp::addnavbar(Config* _config, const QString& key, QAction* a) | ||
1112 | { | ||
1113 | if (_config->readBoolEntry(key, false)) a->addTo( navbar() ); | ||
1114 | } | ||
1115 | void QTReaderApp::addmarkbar(Config* _config, const QString& key, QAction* a) | ||
1116 | { | ||
1117 | if (_config->readBoolEntry(key, false)) a->addTo( markbar() ); | ||
1118 | } | ||
1119 | void QTReaderApp::addviewbar(Config* _config, const QString& key, QAction* a) | ||
1120 | { | ||
1121 | if (_config->readBoolEntry(key, false)) a->addTo( viewbar() ); | ||
747 | } | 1122 | } |
748 | 1123 | ||
749 | void QTReaderApp::suspend() { reader->suspend(); } | 1124 | void QTReaderApp::suspend() { reader->suspend(); } |
750 | 1125 | ||
1126 | #ifdef USEMSGS | ||
751 | void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data) | 1127 | void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data) |
752 | { | 1128 | { |
753 | QString msg = QString::fromUtf8(_msg); | 1129 | QString msg = QString::fromUtf8(_msg); |
754 | 1130 | ||
755 | // qDebug("Received:%s", (const char*)msg); | 1131 | //// qDebug("Received:%s", (const char*)msg); |
756 | 1132 | ||
757 | QDataStream stream( _data, IO_ReadOnly ); | 1133 | QDataStream stream( _data, IO_ReadOnly ); |
758 | if ( msg == "info(QString)" ) | 1134 | if ( msg == "info(QString)" ) |
759 | { | 1135 | { |
760 | QString info; | 1136 | QString info; |
761 | stream >> info; | 1137 | stream >> info; |
762 | QMessageBox::information(this, PROGNAME, info); | 1138 | QMessageBox::information(this, PROGNAME, info); |
763 | } | 1139 | } |
1140 | else if ( msg == "Update(int)" ) | ||
1141 | { | ||
1142 | int info; | ||
1143 | stream >> info; | ||
1144 | if (info) | ||
1145 | { | ||
1146 | reader->bDoUpdates = true; | ||
1147 | reader->refresh(); | ||
1148 | } | ||
1149 | else | ||
1150 | { | ||
1151 | reader->bDoUpdates = false; | ||
1152 | } | ||
1153 | } | ||
764 | else if ( msg == "warn(QString)" ) | 1154 | else if ( msg == "warn(QString)" ) |
765 | { | 1155 | { |
766 | QString info; | 1156 | QString info; |
767 | stream >> info; | 1157 | stream >> info; |
768 | QMessageBox::warning(this, PROGNAME, info); | 1158 | QMessageBox::warning(this, PROGNAME, info); |
769 | } | 1159 | } |
770 | |||
771 | |||
772 | else if ( msg == "exit()" ) | 1160 | else if ( msg == "exit()" ) |
773 | { | 1161 | { |
774 | m_dontSave = true; | 1162 | m_dontSave = true; |
775 | close(); | 1163 | close(); |
776 | } | 1164 | } |
777 | else if ( msg == "pageDown()" ) | 1165 | else if ( msg == "pageDown()" ) |
778 | { | 1166 | { |
779 | reader->dopagedn(); | 1167 | reader->dopagedn(); |
780 | } | 1168 | } |
781 | else if ( msg == "pageUp()" ) | 1169 | else if ( msg == "pageUp()" ) |
782 | { | 1170 | { |
783 | reader->dopageup(); | 1171 | reader->dopageup(); |
784 | } | 1172 | } |
785 | else if ( msg == "lineDown()" ) | 1173 | else if ( msg == "lineDown()" ) |
786 | { | 1174 | { |
787 | reader->lineDown(); | 1175 | reader->lineDown(); |
788 | } | 1176 | } |
789 | else if ( msg == "lineUp()" ) | 1177 | else if ( msg == "lineUp()" ) |
790 | { | 1178 | { |
791 | reader->lineUp(); | 1179 | reader->lineUp(); |
792 | } | 1180 | } |
793 | else if ( msg == "showText()" ) | 1181 | else if ( msg == "showText()" ) |
794 | { | 1182 | { |
795 | showEditTools(); | 1183 | showEditTools(); |
796 | } | 1184 | } |
1185 | else if ( msg == "home()" ) | ||
1186 | { | ||
1187 | reader->goHome(); | ||
1188 | } | ||
1189 | else if ( msg == "back()" ) | ||
1190 | { | ||
1191 | reader->goBack(); | ||
1192 | } | ||
1193 | else if ( msg == "forward()" ) | ||
1194 | { | ||
1195 | reader->goForward(); | ||
1196 | } | ||
797 | else if ( msg == "File/Open(QString)" ) | 1197 | else if ( msg == "File/Open(QString)" ) |
798 | { | 1198 | { |
799 | QString info; | 1199 | QString info; |
800 | stream >> info; | 1200 | stream >> info; |
801 | openFile( info ); | 1201 | openFile( info ); |
802 | } | 1202 | } |
803 | else if ( msg == "File/Info()" ) | 1203 | else if ( msg == "File/Info()" ) |
804 | { | 1204 | { |
805 | showinfo(); | 1205 | showinfo(); |
806 | } | 1206 | } |
807 | else if ( msg == "File/Start Block()" ) | 1207 | else if ( msg == "File/Action(QString)" ) |
808 | { | ||
809 | editMark(); | ||
810 | } | ||
811 | else if ( msg == "File/Copy Block()" ) | ||
812 | { | 1208 | { |
813 | editCopy(); | 1209 | QString info; |
1210 | stream >> info; | ||
1211 | m_spaceTarget = ActNameToInt(info); | ||
814 | } | 1212 | } |
815 | else if ( msg == "File/Scroll(int)" ) | 1213 | else if ( msg == "Navigation/Scroll(int)" ) |
816 | { | 1214 | { |
817 | int info; | 1215 | int info; |
818 | stream >> info; | 1216 | stream >> info; |
819 | autoScroll(info); | 1217 | autoScroll(info); |
820 | } | 1218 | } |
821 | else if ( msg == "File/Jump(int)" ) | 1219 | |
1220 | else if ( msg == "Navigation/GotoStart()" ) | ||
1221 | { | ||
1222 | gotoStart(); | ||
1223 | } | ||
1224 | else if ( msg == "Navigation/GotoEnd()" ) | ||
1225 | { | ||
1226 | gotoEnd(); | ||
1227 | } | ||
1228 | else if ( msg == "Navigation/Jump(int)" ) | ||
822 | { | 1229 | { |
823 | int info; | 1230 | int info; |
824 | stream >> info; | 1231 | stream >> info; |
825 | reader->locate(info); | 1232 | reader->locate(info); |
826 | } | 1233 | } |
827 | else if ( msg == "File/Page/Line Scroll(int)" ) | 1234 | else if ( msg == "Navigation/Page/LineScroll(int)" ) |
828 | { | 1235 | { |
829 | int info; | 1236 | int info; |
830 | stream >> info; | 1237 | stream >> info; |
831 | pagemode(info); | 1238 | pagemode(info); |
832 | } | 1239 | } |
833 | else if ( msg == "File/Set Overlap(int)" ) | 1240 | else if ( msg == "Navigation/SetOverlap(int)" ) |
834 | { | 1241 | { |
835 | int info; | 1242 | int info; |
836 | stream >> info; | 1243 | stream >> info; |
837 | reader->m_overlap = info; | 1244 | reader->m_overlap = info; |
838 | } | 1245 | } |
839 | else if ( msg == "File/Set Dictionary(QString)" ) | 1246 | else if ( msg == "Navigation/SetMargin(int)" ) |
1247 | { | ||
1248 | int info; | ||
1249 | stream >> info; | ||
1250 | do_margin(info); | ||
1251 | } | ||
1252 | else if ( msg == "File/SetDictionary(QString)" ) | ||
840 | { | 1253 | { |
841 | QString info; | 1254 | QString info; |
842 | stream >> info; | 1255 | stream >> info; |
843 | do_settarget(info); | 1256 | do_settarget(info); |
844 | } | 1257 | } |
845 | else if ( msg == "File/Two/One Touch(int)" ) | 1258 | #ifdef _SCROLLPIPE |
1259 | else if ( msg == "File/SetScrollTarget(QString)" ) | ||
1260 | { | ||
1261 | QString info; | ||
1262 | stream >> info; | ||
1263 | reader->m_pipetarget = info; | ||
1264 | } | ||
1265 | #endif | ||
1266 | else if ( msg == "File/Two/OneTouch(int)" ) | ||
846 | { | 1267 | { |
847 | int info; | 1268 | int info; |
848 | stream >> info; | 1269 | stream >> info; |
849 | setTwoTouch(info); | 1270 | setTwoTouch(info); |
850 | } | 1271 | } |
851 | else if ( msg == "Target/Annotation(int)" ) | 1272 | else if ( msg == "Target/Annotation(int)" ) |
852 | { | 1273 | { |
853 | int info; | 1274 | int info; |
854 | stream >> info; | 1275 | stream >> info; |
855 | OnAnnotation(info); | 1276 | OnAnnotation(info); |
856 | } | 1277 | } |
857 | else if ( msg == "Target/Dictionary(int)" ) | 1278 | else if ( msg == "Target/Dictionary(int)" ) |
858 | { | 1279 | { |
859 | int info; | 1280 | int info; |
860 | stream >> info; | 1281 | stream >> info; |
861 | OnDictionary(info); | 1282 | OnDictionary(info); |
862 | } | 1283 | } |
863 | else if ( msg == "Target/Clipboard(int)" ) | 1284 | else if ( msg == "Target/Clipboard(int)" ) |
864 | { | 1285 | { |
865 | int info; | 1286 | int info; |
866 | stream >> info; | 1287 | stream >> info; |
867 | OnClipboard(info); | 1288 | OnClipboard(info); |
868 | } | 1289 | } |
869 | else if ( msg == "File/Find(QString)" ) | 1290 | else if ( msg == "File/Find(QString)" ) |
870 | { | 1291 | { |
871 | QString info; | 1292 | QString info; |
872 | stream >> info; | 1293 | stream >> info; |
873 | QRegExp arg(info); | 1294 | QRegExp arg(info); |
874 | size_t pos = reader->pagelocate(); | 1295 | size_t pos = reader->pagelocate(); |
875 | size_t start = pos; | 1296 | size_t start = pos; |
876 | CDrawBuffer test(&(reader->m_fontControl)); | 1297 | CDrawBuffer test(&(reader->m_fontControl)); |
877 | reader->buffdoc.getline(&test,reader->width()); | 1298 | reader->getline(&test); |
878 | while (arg.match(toQString(test.data())) == -1) | 1299 | while (arg.match(toQString(test.data())) == -1) |
879 | { | 1300 | { |
880 | pos = reader->locate(); | 1301 | pos = reader->locate(); |
881 | if (!reader->buffdoc.getline(&test,reader->width())) | 1302 | if (!reader->getline(&test)) |
882 | { | 1303 | { |
883 | QMessageBox::information(this, PROGNAME, QString("Can't find\n")+info); | 1304 | QMessageBox::information(this, PROGNAME, QString("Can't find\n")+info); |
884 | pos = start; | 1305 | pos = start; |
885 | break; | 1306 | break; |
886 | } | 1307 | } |
887 | } | 1308 | } |
888 | reader->locate(pos); | 1309 | reader->locate(pos); |
889 | } | 1310 | } |
890 | else if ( msg == "Layout/Strip CR(int)" ) | 1311 | else if ( msg == "File/Fullscreen(int)" ) |
891 | { | 1312 | { |
892 | int info; | 1313 | int info; |
893 | stream >> info; | 1314 | stream >> info; |
894 | stripcr(info); | 1315 | setfullscreen(info); |
895 | } | 1316 | } |
896 | else if ( msg == "Layout/Single Space" ) | 1317 | else if ( msg == "File/Continuous(int)" ) |
897 | { | 1318 | { |
898 | int info; | 1319 | int info; |
899 | stream >> info; | 1320 | stream >> info; |
900 | onespace(info); | 1321 | setcontinuous(info); |
901 | } | 1322 | } |
902 | #ifdef REPALM | 1323 | else if ( msg == "Markup(QString)" ) |
903 | else if ( msg == "Layout/Repalm(int)" ) | 1324 | { |
1325 | QString info; | ||
1326 | stream >> info; | ||
1327 | if (info == "Auto") | ||
1328 | { | ||
1329 | autofmt(true); | ||
1330 | } | ||
1331 | if (info == "None") | ||
1332 | { | ||
1333 | autofmt(false); | ||
1334 | textfmt(false); | ||
1335 | striphtml(false); | ||
1336 | peanut(false); | ||
1337 | } | ||
1338 | if (info == "Text") | ||
1339 | { | ||
1340 | textfmt(true); | ||
1341 | } | ||
1342 | if (info == "HTML") | ||
1343 | { | ||
1344 | striphtml(true); | ||
1345 | } | ||
1346 | if (info == "Peanut/PML") | ||
1347 | { | ||
1348 | peanut(true); | ||
1349 | } | ||
1350 | } | ||
1351 | else if ( msg == "Layout/StripCR(int)" ) | ||
904 | { | 1352 | { |
905 | int info; | 1353 | int info; |
906 | stream >> info; | 1354 | stream >> info; |
907 | repalm(info); | 1355 | stripcr(info); |
908 | } | 1356 | } |
909 | #endif | 1357 | else if ( msg == "Layout/Dehyphen(int)" ) |
910 | else if ( msg == "Markup/Auto(int)" ) | ||
911 | { | 1358 | { |
912 | int info; | 1359 | int info; |
913 | stream >> info; | 1360 | stream >> info; |
914 | autofmt(info); | 1361 | dehyphen(info); |
915 | } | 1362 | } |
916 | else if ( msg == "Markup/Text(int)" ) | 1363 | else if ( msg == "Layout/Depluck(int)" ) |
917 | { | 1364 | { |
918 | int info; | 1365 | int info; |
919 | stream >> info; | 1366 | stream >> info; |
920 | textfmt(info); | 1367 | depluck(info); |
921 | } | 1368 | } |
922 | else if ( msg == "Markup/HTML(int)" ) | 1369 | else if ( msg == "Layout/Dejpluck(int)" ) |
923 | { | 1370 | { |
924 | int info; | 1371 | int info; |
925 | stream >> info; | 1372 | stream >> info; |
926 | striphtml(info); | 1373 | dejpluck(info); |
927 | } | 1374 | } |
928 | else if ( msg == "Markup/Peanut(int)" ) | 1375 | else if ( msg == "Layout/SingleSpace(int)" ) |
929 | { | 1376 | { |
930 | int info; | 1377 | int info; |
931 | stream >> info; | 1378 | stream >> info; |
932 | peanut(info); | 1379 | onespace(info); |
933 | } | 1380 | } |
934 | else if ( msg == "Layout/Dehyphen(int)" ) | 1381 | #ifdef REPALM |
1382 | else if ( msg == "Layout/Repalm(int)" ) | ||
935 | { | 1383 | { |
936 | int info; | 1384 | int info; |
937 | stream >> info; | 1385 | stream >> info; |
938 | dehyphen(info); | 1386 | repalm(info); |
939 | } | 1387 | } |
1388 | #endif | ||
940 | else if ( msg == "Layout/Unindent(int)" ) | 1389 | else if ( msg == "Layout/Unindent(int)" ) |
941 | { | 1390 | { |
942 | int info; | 1391 | int info; |
943 | stream >> info; | 1392 | stream >> info; |
944 | unindent(info); | 1393 | unindent(info); |
945 | } | 1394 | } |
946 | else if ( msg == "Layout/Re-paragraph(int)" ) | 1395 | else if ( msg == "Layout/Re-paragraph(int)" ) |
947 | { | 1396 | { |
948 | int info; | 1397 | int info; |
949 | stream >> info; | 1398 | stream >> info; |
950 | repara(info); | 1399 | repara(info); |
951 | } | 1400 | } |
952 | else if ( msg == "Layout/Double Space(int)" ) | 1401 | else if ( msg == "Layout/DoubleSpace(int)" ) |
953 | { | 1402 | { |
954 | int info; | 1403 | int info; |
955 | stream >> info; | 1404 | stream >> info; |
956 | dblspce(info); | 1405 | dblspce(info); |
957 | } | 1406 | } |
958 | else if ( msg == "Layout/Indent(int)" ) | 1407 | else if ( msg == "Layout/Indent(int)" ) |
959 | { | 1408 | { |
960 | int info; | 1409 | int info; |
961 | stream >> info; | 1410 | stream >> info; |
962 | reader->bindenter = info; | 1411 | reader->bindenter = info; |
963 | reader->setfilter(reader->getfilter()); | 1412 | reader->setfilter(reader->getfilter()); |
964 | } | 1413 | } |
965 | else if ( msg == "Layout/Remap(int)" ) | 1414 | else if ( msg == "Layout/Remap(int)" ) |
966 | { | 1415 | { |
967 | int info; | 1416 | int info; |
968 | stream >> info; | 1417 | stream >> info; |
969 | remap(info); | 1418 | remap(info); |
970 | } | 1419 | } |
971 | else if ( msg == "Layout/Embolden(int)" ) | 1420 | else if ( msg == "Layout/Embolden(int)" ) |
972 | { | 1421 | { |
973 | int info; | 1422 | int info; |
974 | stream >> info; | 1423 | stream >> info; |
975 | embolden(info); | 1424 | embolden(info); |
976 | } | 1425 | } |
977 | else if ( msg == "Format/Ideogram/Word(int)" ) | 1426 | else if ( msg == "Format/Ideogram/Word(int)" ) |
978 | { | 1427 | { |
979 | int info; | 1428 | int info; |
980 | stream >> info; | 1429 | stream >> info; |
981 | monospace(info); | 1430 | monospace(info); |
982 | } | 1431 | } |
983 | else if ( msg == "Format/Set width(int)" ) | 1432 | else if ( msg == "Format/SetWidth(int)" ) |
984 | { | 1433 | { |
985 | int info; | 1434 | int info; |
986 | stream >> info; | 1435 | stream >> info; |
987 | reader->m_charpc = info; | 1436 | reader->m_charpc = info; |
988 | reader->setfont(); | 1437 | reader->setfont(); |
989 | reader->refresh(); | 1438 | reader->refresh(); |
990 | } | 1439 | } |
991 | else if ( msg == "Format/Encoding(QString)" ) | 1440 | else if ( msg == "Format/SetFont(QString,int)" ) |
992 | { | ||
993 | QString info; | ||
994 | stream >> info; | ||
995 | reader->setencoding(EncNameToInt(info)); | ||
996 | } | ||
997 | else if ( msg == "Format/Set Font(QString,int)" ) | ||
998 | { | 1441 | { |
999 | QString fontname; | 1442 | QString fontname; |
1000 | int size; | 1443 | int size; |
1001 | stream >> fontname; | 1444 | stream >> fontname; |
1002 | stream >> size; | 1445 | stream >> size; |
1003 | setfontHelper(fontname, size); | 1446 | setfontHelper(fontname, size); |
1004 | } | 1447 | } |
1005 | else if ( msg == "Marks/Autogen(QString)" ) | 1448 | else if ( msg == "Marks/Autogen(QString)" ) |
1006 | { | 1449 | { |
1007 | QString info; | 1450 | QString info; |
1008 | stream >> info; | 1451 | stream >> info; |
1009 | do_autogen(info); | 1452 | do_autogen(info); |
1010 | } | 1453 | } |
1454 | else if ( msg == "File/StartBlock()" ) | ||
1455 | { | ||
1456 | editMark(); | ||
1457 | } | ||
1458 | else if ( msg == "File/CopyBlock()" ) | ||
1459 | { | ||
1460 | editCopy(); | ||
1461 | } | ||
1011 | } | 1462 | } |
1012 | 1463 | #endif | |
1013 | ActionTypes QTReaderApp::ActNameToInt(const QString& _enc) | 1464 | ActionTypes QTReaderApp::ActNameToInt(const QString& _enc) |
1014 | { | 1465 | { |
1015 | for (int i = 0; i < MAX_ACTIONS; i++) | 1466 | for (int i = 0; i < MAX_ACTIONS; i++) |
1016 | { | 1467 | { |
1017 | if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i; | 1468 | if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i; |
1018 | } | 1469 | } |
1019 | return cesAutoScroll; | 1470 | return cesAutoScroll; |
1020 | } | 1471 | } |
1021 | 1472 | ||
1022 | void QTReaderApp::setfullscreen(bool sfs) | 1473 | void QTReaderApp::setfullscreen(bool sfs) |
1023 | { | 1474 | { |
1024 | reader->bDoUpdates = false; | 1475 | reader->bDoUpdates = false; |
1025 | m_fullscreen = sfs; | 1476 | m_fullscreen = sfs; |
1026 | showEditTools(); | 1477 | showEditTools(); |
1027 | qApp->processEvents(); | 1478 | // qApp->processEvents(); |
1028 | reader->bDoUpdates = true; | 1479 | reader->bDoUpdates = true; |
1029 | reader->update(); | 1480 | reader->update(); |
1030 | } | 1481 | } |
1031 | 1482 | ||
1032 | void QTReaderApp::setcontinuous(bool sfs) | ||
1033 | { | ||
1034 | reader->setContinuous(sfs); | ||
1035 | reader->refresh(); | ||
1036 | } | ||
1037 | |||
1038 | int QTReaderApp::EncNameToInt(const QString& _enc) | ||
1039 | { | ||
1040 | for (int i = 0; i < MAX_ENCODING; i++) | ||
1041 | { | ||
1042 | if (m_EncodingAction[i]->text() == _enc) return i; | ||
1043 | } | ||
1044 | return 0; | ||
1045 | /* | ||
1046 | if (_enc == "Ascii") return 0; | ||
1047 | if (_enc == "UTF-8") return 1; | ||
1048 | if (_enc == "UCS-2(BE)") return 2; | ||
1049 | if (_enc == "USC-2(LE)") return 3; | ||
1050 | */ | ||
1051 | } | ||
1052 | |||
1053 | void QTReaderApp::encodingSelected(QAction* _a) | ||
1054 | { | ||
1055 | // qDebug("es:%x : %s", _a, (const char *)(_a->text())); | ||
1056 | reader->setencoding(EncNameToInt(_a->text())); | ||
1057 | } | ||
1058 | |||
1059 | void QTReaderApp::buttonActionSelected(QAction* _a) | 1483 | void QTReaderApp::buttonActionSelected(QAction* _a) |
1060 | { | 1484 | { |
1061 | // qDebug("es:%x : %s (%u)", _a, (const char *)(_a->text()), ActNameToInt(_a->text())); | 1485 | //// qDebug("es:%x : %s (%u)", _a, (const char *)(_a->text()), ActNameToInt(_a->text())); |
1062 | m_spaceTarget = ActNameToInt(_a->text()); | 1486 | m_spaceTarget = ActNameToInt(_a->text()); |
1063 | } | 1487 | } |
1064 | 1488 | ||
1065 | QTReaderApp::~QTReaderApp() | 1489 | QTReaderApp::~QTReaderApp() |
1066 | { | 1490 | { |
1067 | } | 1491 | } |
1068 | 1492 | ||
1069 | void QTReaderApp::autoScroll(bool _b) | 1493 | void QTReaderApp::autoScroll(bool _b) |
1070 | { | 1494 | { |
1071 | reader->setautoscroll(_b); | 1495 | reader->setautoscroll(_b); |
1072 | setScrollState(reader->m_autoScroll); | 1496 | setScrollState(reader->m_autoScroll); |
1073 | } | 1497 | } |
1074 | 1498 | ||
1075 | void QTReaderApp::zoomin() | 1499 | void QTReaderApp::zoomin() |
1076 | { | 1500 | { |
1077 | reader->zoomin(); | 1501 | reader->zoomin(); |
1078 | } | 1502 | } |
1079 | 1503 | ||
1080 | void QTReaderApp::zoomout() | 1504 | void QTReaderApp::zoomout() |
1081 | { | 1505 | { |
1082 | reader->zoomout(); | 1506 | reader->zoomout(); |
1083 | } | 1507 | } |
1084 | 1508 | ||
1085 | void QTReaderApp::clearBkmkList() | 1509 | void QTReaderApp::clearBkmkList() |
1086 | { | 1510 | { |
1087 | delete pBkmklist; | 1511 | delete pBkmklist; |
1088 | pBkmklist = NULL; | 1512 | pBkmklist = NULL; |
1089 | m_fBkmksChanged = false; | 1513 | m_fBkmksChanged = false; |
1090 | } | 1514 | } |
1091 | 1515 | ||
1092 | void QTReaderApp::fileClose() | 1516 | void QTReaderApp::fileClose() |
1093 | { | 1517 | { |
1094 | if (pOpenlist != NULL) | 1518 | CCloseDialog* cd = new CCloseDialog(reader->m_string, false, this); |
1519 | if (cd->exec()) | ||
1095 | { | 1520 | { |
1096 | int ind = 0; | 1521 | if (pOpenlist != NULL) |
1097 | Bkmk* p = (*pOpenlist)[ind]; | ||
1098 | while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile) | ||
1099 | { | ||
1100 | p = (*pOpenlist)[++ind]; | ||
1101 | } | ||
1102 | if (p != NULL) pOpenlist->erase(ind); | ||
1103 | switch (QMessageBox::information ( this , PROGNAME, "What do you want to delete?", "Nothing", "Marks", "Marks\nFile", 1, 0 )) | ||
1104 | { | 1522 | { |
1105 | case 0: | 1523 | int ind = 0; |
1106 | default: | 1524 | Bkmk* p = (*pOpenlist)[ind]; |
1107 | break; | 1525 | while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile) |
1108 | case 2: | 1526 | { |
1527 | p = (*pOpenlist)[++ind]; | ||
1528 | } | ||
1529 | if (p != NULL) pOpenlist->erase(ind); | ||
1530 | if (cd->delFile()) | ||
1531 | { | ||
1109 | unlink((const char*)reader->m_lastfile); | 1532 | unlink((const char*)reader->m_lastfile); |
1110 | case 1: | 1533 | } |
1111 | unlink((const char *)Global::applicationFileName(APPDIR, reader->m_string)); | 1534 | if (cd->delMarks()) |
1535 | { | ||
1536 | #ifndef USEQPE | ||
1537 | QDir d = QDir::home(); // "/" | ||
1538 | d.cd(APPDIR); | ||
1539 | d.remove(reader->m_string); | ||
1540 | #else /* USEQPE */ | ||
1541 | unlink((const char *)Global::applicationFileName(APPDIR,reader->m_string)); | ||
1542 | #endif /* USEQPE */ | ||
1543 | } | ||
1544 | if (cd->delConfig()) | ||
1545 | { | ||
1546 | #ifndef USEQPE | ||
1547 | QDir d = QDir::home(); // "/" | ||
1548 | d.cd(APPDIR "/configs"); | ||
1549 | d.remove(reader->m_string); | ||
1550 | #else /* USEQPE */ | ||
1551 | unlink((const char *)Global::applicationFileName(APPDIR "/configs",reader->m_string)); | ||
1552 | #endif /* USEQPE */ | ||
1553 | } | ||
1112 | } | 1554 | } |
1113 | } | ||
1114 | 1555 | ||
1115 | fileOpen2(); | 1556 | fileOpen2(); |
1557 | } | ||
1558 | delete cd; | ||
1116 | } | 1559 | } |
1117 | 1560 | ||
1118 | void QTReaderApp::updatefileinfo() | 1561 | void QTReaderApp::updatefileinfo() |
1119 | { | 1562 | { |
1120 | if (reader->m_string.isNull()) return; | 1563 | if (reader->m_string.isEmpty()) return; |
1121 | if (reader->m_lastfile.isNull()) return; | 1564 | if (reader->m_lastfile.isEmpty()) return; |
1122 | tchar* nm = fromQString(reader->m_string); | 1565 | tchar* nm = fromQString(reader->m_string); |
1123 | tchar* fl = fromQString(reader->m_lastfile); | 1566 | tchar* fl = fromQString(reader->m_lastfile); |
1124 | qDebug("Lastfile:%x", fl); | 1567 | // qDebug("Lastfile:%x", fl); |
1125 | bool notadded = true; | 1568 | bool notadded = true; |
1126 | if (pOpenlist == NULL) pOpenlist = new CList<Bkmk>; | 1569 | if (pOpenlist == NULL) pOpenlist = new CList<Bkmk>; |
1127 | else | 1570 | else |
1128 | { | 1571 | { |
1129 | for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++) | 1572 | for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++) |
1130 | { | 1573 | { |
1131 | if (ustrcmp(CFiledata(iter->anno()).name(), fl) == 0) | 1574 | if (ustrcmp(CFiledata(iter->anno()).name(), fl) == 0) |
1132 | { | 1575 | { |
1133 | iter->value(reader->pagelocate()); | 1576 | iter->value(reader->pagelocate()); |
1134 | unsigned short dlen; | 1577 | unsigned short dlen; |
1135 | unsigned char* data; | 1578 | unsigned char* data; |
1136 | CFiledata fd(iter->anno()); | 1579 | CFiledata fd(iter->anno()); |
1137 | reader->setSaveData(data, dlen, fd.content(), fd.length()); | 1580 | reader->setSaveData(data, dlen, fd.content(), fd.length()); |
1138 | qDebug("Filedata(1):%u, %u", fd.length(), dlen); | 1581 | // qDebug("Filedata(1):%u, %u", fd.length(), dlen); |
1139 | // getstate(data, dlen); | 1582 | // getstate(data, dlen); |
1140 | iter->setAnno(data, dlen); | 1583 | iter->setAnno(data, dlen); |
1141 | notadded = false; | 1584 | notadded = false; |
1142 | delete [] data; | 1585 | delete [] data; |
1143 | break; | 1586 | break; |
1144 | } | 1587 | } |
1145 | } | 1588 | } |
1146 | } | 1589 | } |
1147 | qDebug("Added?:%x", notadded); | 1590 | // qDebug("Added?:%x", notadded); |
1148 | if (notadded) | 1591 | if (notadded) |
1149 | { | 1592 | { |
1150 | struct stat fnstat; | 1593 | struct stat fnstat; |
1151 | stat((const char *)reader->m_lastfile, &fnstat); | 1594 | stat((const char *)reader->m_lastfile, &fnstat); |
1152 | CFiledata fd(fnstat.st_mtime, fl); | 1595 | CFiledata fd(fnstat.st_mtime, fl); |
1153 | unsigned short dlen; | 1596 | unsigned short dlen; |
1154 | unsigned char* data; | 1597 | unsigned char* data; |
1155 | reader->setSaveData(data, dlen, fd.content(), fd.length()); | 1598 | reader->setSaveData(data, dlen, fd.content(), fd.length()); |
1156 | pOpenlist->push_front(Bkmk(nm, data, dlen, reader->pagelocate())); | 1599 | pOpenlist->push_front(Bkmk(nm, data, dlen, reader->pagelocate())); |
1157 | qDebug("Filedata(2):%u, %u", fd.length(), dlen); | 1600 | //qDebug("Filedata(2):%u, %u", fd.length(), dlen); |
1158 | delete [] data; | 1601 | delete [] data; |
1159 | } | 1602 | } |
1160 | delete [] nm; | 1603 | delete [] nm; |
1161 | delete [] fl; | 1604 | delete [] fl; |
1162 | } | 1605 | } |
1163 | 1606 | ||
1164 | void QTReaderApp::fileOpen() | 1607 | void QTReaderApp::fileOpen() |
1165 | { | 1608 | { |
1166 | /* | 1609 | /* |
1167 | menu->hide(); | 1610 | menu->hide(); |
1168 | editBar->hide(); | 1611 | fileBar->hide(); |
1169 | if (regVisible) regBar->hide(); | 1612 | if (regVisible) regBar->hide(); |
1170 | if (searchVisible) searchBar->hide(); | 1613 | if (searchVisible) searchBar->hide(); |
1171 | */ | 1614 | */ |
1172 | qDebug("fileOpen"); | 1615 | // qDebug("fileOpen"); |
1173 | // if (!reader->m_lastfile.isEmpty()) | 1616 | // if (!reader->m_lastfile.isEmpty()) |
1174 | updatefileinfo(); | 1617 | updatefileinfo(); |
1175 | fileOpen2(); | 1618 | fileOpen2(); |
1176 | } | 1619 | } |
1177 | 1620 | ||
1178 | void QTReaderApp::fileOpen2() | 1621 | void QTReaderApp::fileOpen2() |
1179 | { | 1622 | { |
1180 | if (pBkmklist != NULL) | 1623 | if (pBkmklist != NULL) |
1181 | { | 1624 | { |
1182 | if (m_fBkmksChanged) | 1625 | if (m_fBkmksChanged) |
1183 | { | 1626 | { |
1184 | if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0) | 1627 | if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0) |
1185 | savebkmks(); | 1628 | savebkmks(); |
1186 | } | 1629 | } |
1187 | delete pBkmklist; | 1630 | delete pBkmklist; |
1188 | pBkmklist = NULL; | 1631 | pBkmklist = NULL; |
1189 | m_fBkmksChanged = false; | 1632 | m_fBkmksChanged = false; |
1190 | } | 1633 | } |
1191 | reader->disableAutoscroll(); | 1634 | reader->disableAutoscroll(); |
1192 | /* | 1635 | /* |
1193 | editorStack->raiseWidget( fileSelector ); | 1636 | editorStack->raiseWidget( fileSelector ); |
1194 | fileSelector->reread(); | 1637 | fileSelector->reread(); |
1195 | */ | 1638 | */ |
1639 | bool usebrowser = true; | ||
1196 | if (pOpenlist != NULL) | 1640 | if (pOpenlist != NULL) |
1197 | { | 1641 | { |
1198 | m_nRegAction = cOpenFile; | 1642 | m_nBkmkAction = cOpenFile; |
1199 | listbkmk(pOpenlist, "Browse"); | 1643 | if (listbkmk(pOpenlist, "Browse")) usebrowser = false; |
1200 | } | 1644 | } |
1201 | else | 1645 | if (usebrowser) |
1202 | { | 1646 | { |
1203 | QString fn = usefilebrowser(); | 1647 | QString fn = usefilebrowser(); |
1648 | //qApp->processEvents(); | ||
1204 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) | 1649 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) |
1205 | { | 1650 | { |
1206 | openFile(fn); | 1651 | openFile(fn); |
1207 | } | 1652 | } |
1208 | reader->setFocus(); | 1653 | reader->setFocus(); |
1209 | } | 1654 | } |
1655 | // reader->refresh(); | ||
1656 | // qDebug("HEIGHT:%d", reader->m_lastheight); | ||
1210 | } | 1657 | } |
1211 | 1658 | ||
1212 | QString QTReaderApp::usefilebrowser() | 1659 | QString QTReaderApp::usefilebrowser() |
1213 | { | 1660 | { |
1214 | fileBrowser* fb = new fileBrowser(this,"QTReader",TRUE, | 1661 | #ifndef USEQPE |
1662 | QString s( QFileDialog::getOpenFileName( reader->m_lastfile, QString::null, this ) ); | ||
1663 | return s; | ||
1664 | #else | ||
1665 | fileBrowser* fb = new fileBrowser(false, this,"OpieReader",!m_bFloatingDialog, | ||
1215 | 0, | 1666 | 0, |
1216 | // WStyle_Customize | WStyle_NoBorderEx, | 1667 | // WStyle_Customize | WStyle_NoBorderEx, |
1217 | "*", QFileInfo(reader->m_lastfile).dirPath(true)); | 1668 | "*", QFileInfo(reader->m_lastfile).dirPath(true)); |
1218 | 1669 | ||
1219 | 1670 | ||
1220 | QString fn; | 1671 | QString fn; |
1221 | if (fb->exec()) | 1672 | if (fb->exec()) |
1222 | { | 1673 | { |
1223 | fn = fb->fileList[0]; | 1674 | fn = fb->getCurrentFile(); |
1224 | } | 1675 | } |
1225 | qDebug("Selected %s", (const char*)fn); | 1676 | // qDebug("Selected %s", (const char*)fn); |
1226 | delete fb; | 1677 | delete fb; |
1678 | showEditTools(); | ||
1227 | return fn; | 1679 | return fn; |
1680 | #endif | ||
1228 | } | 1681 | } |
1229 | 1682 | ||
1230 | void QTReaderApp::showgraphic(QPixmap& pm) | 1683 | void QTReaderApp::showgraphic(QImage& pm) |
1231 | { | 1684 | { |
1232 | m_graphicwin->setPixmap(pm); | 1685 | QPixmap pc; |
1686 | pc.convertFromImage(pm); | ||
1687 | m_graphicwin->setPixmap(pc); | ||
1233 | editorStack->raiseWidget( m_graphicwin ); | 1688 | editorStack->raiseWidget( m_graphicwin ); |
1234 | m_graphicwin->setFocus(); | 1689 | m_graphicwin->setFocus(); |
1235 | } | 1690 | } |
1236 | 1691 | ||
1692 | |||
1693 | void QTReaderApp::showprefs() | ||
1694 | { | ||
1695 | CPrefs* prefwin = new CPrefs(!m_bFloatingDialog, this); | ||
1696 | |||
1697 | prefwin->twotouch(m_twoTouch); | ||
1698 | prefwin->propfontchange(m_propogatefontchange); | ||
1699 | prefwin->StripCR(reader->bstripcr); | ||
1700 | prefwin->Dehyphen(reader->bdehyphen); | ||
1701 | prefwin->SingleSpace(reader->bonespace); | ||
1702 | prefwin->Unindent(reader->bunindent); | ||
1703 | prefwin->Reparagraph(reader->brepara); | ||
1704 | prefwin->DoubleSpace(reader->bdblspce); | ||
1705 | prefwin->Remap(reader->bremap); | ||
1706 | prefwin->Embolden(reader->bmakebold); | ||
1707 | prefwin->FullJustify(reader->bfulljust); | ||
1708 | prefwin->ParaLead(reader->getextraspace()); | ||
1709 | prefwin->LineLead(reader->getlead()); | ||
1710 | prefwin->Margin(reader->m_border); | ||
1711 | prefwin->Indent(reader->bindenter); | ||
1712 | if (reader->bautofmt) | ||
1713 | { | ||
1714 | prefwin->Markup(0); | ||
1715 | } | ||
1716 | else if (reader->btextfmt) | ||
1717 | { | ||
1718 | prefwin->Markup(2); | ||
1719 | } | ||
1720 | else if (reader->bstriphtml) | ||
1721 | { | ||
1722 | prefwin->Markup(3); | ||
1723 | } | ||
1724 | else if (reader->bpeanut) | ||
1725 | { | ||
1726 | prefwin->Markup(4); | ||
1727 | } | ||
1728 | else | ||
1729 | { | ||
1730 | prefwin->Markup(1); | ||
1731 | } | ||
1732 | prefwin->Depluck(reader->bdepluck); | ||
1733 | prefwin->Dejpluck(reader->bdejpluck); | ||
1734 | prefwin->Continuous(reader->m_continuousDocument); | ||
1735 | |||
1736 | prefwin->dictApplication(m_targetapp); | ||
1737 | prefwin->dictMessage(m_targetmsg); | ||
1738 | |||
1739 | prefwin->spaceAction(m_spaceTarget); | ||
1740 | prefwin->escapeAction(m_escapeTarget); | ||
1741 | prefwin->returnAction(m_returnTarget); | ||
1742 | prefwin->leftAction(m_leftTarget); | ||
1743 | prefwin->rightAction(m_rightTarget); | ||
1744 | prefwin->upAction(m_upTarget); | ||
1745 | prefwin->downAction(m_downTarget); | ||
1746 | |||
1747 | prefwin->leftScroll(m_leftScroll); | ||
1748 | prefwin->rightScroll(m_rightScroll); | ||
1749 | prefwin->upScroll(m_upScroll); | ||
1750 | prefwin->downScroll(m_downScroll); | ||
1751 | |||
1752 | prefwin->miscannotation(m_doAnnotation); | ||
1753 | prefwin->miscdictionary(m_doDictionary); | ||
1754 | prefwin->miscclipboard(m_doClipboard); | ||
1755 | |||
1756 | prefwin->SwapMouse(reader->m_swapmouse); | ||
1757 | |||
1758 | prefwin->Font(reader->m_fontname); | ||
1759 | |||
1760 | prefwin->gfxsize(reader->getBaseSize()); | ||
1761 | |||
1762 | prefwin->pageoverlap(reader->m_overlap); | ||
1763 | |||
1764 | prefwin->ideogram(reader->m_bMonoSpaced); | ||
1765 | |||
1766 | prefwin->encoding(reader->m_encd); | ||
1767 | |||
1768 | prefwin->ideogramwidth(reader->m_charpc); | ||
1769 | |||
1770 | if (prefwin->exec()) | ||
1771 | { | ||
1772 | m_twoTouch = prefwin->twotouch(); | ||
1773 | reader->setTwoTouch(m_twoTouch); | ||
1774 | m_touch_action->setOn(m_twoTouch); | ||
1775 | |||
1776 | reader->bstripcr = prefwin->StripCR(); | ||
1777 | reader->bdehyphen = prefwin->Dehyphen(); | ||
1778 | reader->bonespace = prefwin->SingleSpace(); | ||
1779 | reader->bunindent = prefwin->Unindent(); | ||
1780 | reader->brepara = prefwin->Reparagraph(); | ||
1781 | reader->bdblspce = prefwin->DoubleSpace(); | ||
1782 | reader->bremap = prefwin->Remap(); | ||
1783 | reader->bmakebold = prefwin->Embolden(); | ||
1784 | reader->bfulljust = prefwin->FullJustify(); | ||
1785 | reader->setextraspace(prefwin->ParaLead()); | ||
1786 | reader->setlead(prefwin->LineLead()); | ||
1787 | reader->m_border = prefwin->Margin(); | ||
1788 | reader->bindenter = prefwin->Indent(); | ||
1789 | reader->bautofmt = reader->btextfmt = reader->bstriphtml = reader->bpeanut = false; | ||
1790 | switch (prefwin->Markup()) | ||
1791 | { | ||
1792 | case 0: | ||
1793 | reader->bautofmt = true; | ||
1794 | break; | ||
1795 | case 1: | ||
1796 | break; | ||
1797 | case 2: | ||
1798 | reader->btextfmt = true; | ||
1799 | break; | ||
1800 | case 3: | ||
1801 | reader->bstriphtml = true; | ||
1802 | break; | ||
1803 | case 4: | ||
1804 | reader->bpeanut = true; | ||
1805 | break; | ||
1806 | default: | ||
1807 | qDebug("Format out of range"); | ||
1808 | } | ||
1809 | reader->bdepluck = prefwin->Depluck(); | ||
1810 | reader->bdejpluck = prefwin->Dejpluck(); | ||
1811 | reader->setContinuous(prefwin->Continuous()); | ||
1812 | |||
1813 | m_spaceTarget = (ActionTypes)prefwin->spaceAction(); | ||
1814 | m_escapeTarget = (ActionTypes)prefwin->escapeAction(); | ||
1815 | m_returnTarget = (ActionTypes)prefwin->returnAction(); | ||
1816 | m_leftTarget = (ActionTypes)prefwin->leftAction(); | ||
1817 | m_rightTarget = (ActionTypes)prefwin->rightAction(); | ||
1818 | m_upTarget = (ActionTypes)prefwin->upAction(); | ||
1819 | m_downTarget = (ActionTypes)prefwin->downAction(); | ||
1820 | m_leftScroll = prefwin->leftScroll(); | ||
1821 | m_rightScroll = prefwin->rightScroll(); | ||
1822 | m_upScroll = prefwin->upScroll(); | ||
1823 | m_downScroll = prefwin->downScroll(); | ||
1824 | |||
1825 | m_targetapp = prefwin->dictApplication(); | ||
1826 | m_targetmsg = prefwin->dictMessage(); | ||
1827 | |||
1828 | m_doAnnotation = prefwin->miscannotation(); | ||
1829 | m_doDictionary = prefwin->miscdictionary(); | ||
1830 | m_doClipboard = prefwin->miscclipboard(); | ||
1831 | reader->m_swapmouse = prefwin->SwapMouse(); | ||
1832 | reader->setBaseSize(prefwin->gfxsize()); | ||
1833 | reader->m_overlap = prefwin->pageoverlap(); | ||
1834 | reader->m_bMonoSpaced = prefwin->ideogram(); | ||
1835 | m_setmono_action->setOn(reader->m_bMonoSpaced); | ||
1836 | reader->m_encd = prefwin->encoding(); | ||
1837 | reader->m_charpc = prefwin->ideogramwidth(); | ||
1838 | |||
1839 | if ( | ||
1840 | reader->m_fontname != prefwin->Font() | ||
1841 | || | ||
1842 | m_propogatefontchange != prefwin->propfontchange()) | ||
1843 | { | ||
1844 | m_propogatefontchange = prefwin->propfontchange(); | ||
1845 | setfontHelper(prefwin->Font()); | ||
1846 | } | ||
1847 | delete prefwin; | ||
1848 | reader->setfilter(reader->getfilter()); | ||
1849 | reader->refresh(); | ||
1850 | |||
1851 | } | ||
1852 | else | ||
1853 | { | ||
1854 | delete prefwin; | ||
1855 | } | ||
1856 | } | ||
1857 | |||
1858 | void QTReaderApp::showtoolbarprefs() | ||
1859 | { | ||
1860 | #ifdef USEQPE | ||
1861 | CBarPrefs* prefwin = new CBarPrefs(APPDIR, !m_bFloatingDialog, this); | ||
1862 | #else | ||
1863 | QFileInfo fi; | ||
1864 | QDir d = QDir::home(); // "/" | ||
1865 | if ( !d.cd(APPDIR) ) | ||
1866 | { // "/tmp" | ||
1867 | qWarning( "Cannot find the \"~/%s\" directory", APPDIR ); | ||
1868 | d = QDir::home(); | ||
1869 | d.mkdir(APPDIR); | ||
1870 | d.cd(APPDIR); | ||
1871 | } | ||
1872 | fi.setFile(d, INIFILE); | ||
1873 | CBarPrefs* prefwin = new CBarPrefs(fi.absFilePath(), !m_bFloatingDialog, this); | ||
1874 | #endif | ||
1875 | prefwin->tbpolicy(m_tbpolsave); | ||
1876 | prefwin->tbposition(m_tbposition-2); | ||
1877 | prefwin->tbmovable(m_tbmovesave); | ||
1878 | prefwin->floating(m_bFloatingDialog); | ||
1879 | if (prefwin->exec()) | ||
1880 | { | ||
1881 | m_bFloatingDialog = prefwin->floating(); | ||
1882 | if ( | ||
1883 | m_tbpolsave != (ToolbarPolicy)prefwin->tbpolicy() | ||
1884 | || | ||
1885 | m_tbposition != (ToolBarDock)(prefwin->tbposition()+2) | ||
1886 | || | ||
1887 | m_tbmovesave != prefwin->tbmovable() | ||
1888 | ) | ||
1889 | { | ||
1890 | QMessageBox::warning(this, PROGNAME, "Some changes won't take effect\nuntil the next time the\napplication is started"); | ||
1891 | } | ||
1892 | m_tbpolsave = (ToolbarPolicy)prefwin->tbpolicy(); | ||
1893 | m_tbposition = (ToolBarDock)(prefwin->tbposition()+2); | ||
1894 | m_tbmovesave = prefwin->tbmovable(); | ||
1895 | bool isChanged = prefwin->isChanged(); | ||
1896 | delete prefwin; | ||
1897 | #ifdef USEQPE | ||
1898 | Config config( APPDIR ); | ||
1899 | #else | ||
1900 | QFileInfo fi; | ||
1901 | QDir d = QDir::home(); // "/" | ||
1902 | if ( !d.cd(APPDIR) ) | ||
1903 | { // "/tmp" | ||
1904 | qWarning( "Cannot find the \"~/%s\" directory", APPDIR ); | ||
1905 | d = QDir::home(); | ||
1906 | d.mkdir(APPDIR); | ||
1907 | d.cd(APPDIR); | ||
1908 | } | ||
1909 | fi.setFile(d, INIFILE); | ||
1910 | Config config( fi.absFilePath() ); | ||
1911 | #endif | ||
1912 | if (isChanged) addtoolbars(&config); | ||
1913 | } | ||
1914 | else | ||
1915 | { | ||
1916 | delete prefwin; | ||
1917 | } | ||
1918 | } | ||
1919 | |||
1237 | void QTReaderApp::showinfo() | 1920 | void QTReaderApp::showinfo() |
1238 | { | 1921 | { |
1239 | unsigned long fs, ts, pl; | 1922 | unsigned long fs, ts, pl; |
1240 | if (reader->empty()) | 1923 | if (reader->empty()) |
1241 | { | 1924 | { |
1242 | QMessageBox::information(this, PROGNAME, "No file loaded", 1); | 1925 | QMessageBox::information(this, PROGNAME, "No file loaded", 1); |
1243 | } | 1926 | } |
1244 | else | 1927 | else |
1245 | { | 1928 | { |
1246 | reader->sizes(fs,ts); | 1929 | reader->sizes(fs,ts); |
1247 | pl = reader->pagelocate(); | 1930 | pl = reader->pagelocate(); |
1248 | m_infoWin->setFileSize(fs); | 1931 | m_infoWin->setFileSize(fs); |
1249 | m_infoWin->setTextSize(ts); | 1932 | m_infoWin->setTextSize(ts); |
1250 | m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts); | 1933 | m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts); |
1251 | m_infoWin->setLocation(pl); | 1934 | m_infoWin->setLocation(pl); |
1252 | m_infoWin->setRead((100*pl + (ts >> 1))/ts); | 1935 | m_infoWin->setRead((100*pl + (ts >> 1))/ts); |
1253 | editorStack->raiseWidget( m_infoWin ); | 1936 | editorStack->raiseWidget( m_infoWin ); |
1254 | m_infoWin->setFocus(); | 1937 | m_infoWin->setFocus(); |
1255 | } | 1938 | } |
1256 | } | 1939 | } |
1257 | 1940 | ||
1258 | void QTReaderApp::addAnno(const QString& name, const QString& text, size_t posn) | 1941 | void QTReaderApp::addAnno(const QString& name, const QString& text, size_t posn) |
1259 | { | 1942 | { |
1260 | if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; | 1943 | if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; |
1261 | #ifdef _UNICODE | 1944 | #ifdef _UNICODE |
1262 | CBuffer buff(name.length()+1); | 1945 | CBuffer buff(name.length()+1); |
1263 | int i; | 1946 | int i; |
1264 | for (i = 0; i < name.length(); i++) | 1947 | for (i = 0; i < name.length(); i++) |
1265 | { | 1948 | { |
1266 | buff[i] = name[i].unicode(); | 1949 | buff[i] = name[i].unicode(); |
1267 | } | 1950 | } |
1268 | buff[i] = 0; | 1951 | buff[i] = 0; |
1269 | CBuffer buff2(text.length()+1); | 1952 | CBuffer buff2(text.length()+1); |
1270 | for (i = 0; i < text.length(); i++) | 1953 | for (i = 0; i < text.length(); i++) |
1271 | { | 1954 | { |
1272 | buff2[i] = text[i].unicode(); | 1955 | buff2[i] = text[i].unicode(); |
1273 | } | 1956 | } |
1274 | buff2[i] = 0; | 1957 | buff2[i] = 0; |
1275 | pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn)); | 1958 | pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn)); |
1276 | #else | 1959 | #else |
1277 | pBkmklist->push_front(Bkmk((const tchar*)text,posn)); | 1960 | pBkmklist->push_front(Bkmk((const tchar*)text,posn)); |
1278 | #endif | 1961 | #endif |
1279 | m_fBkmksChanged = true; | 1962 | m_fBkmksChanged = true; |
1280 | pBkmklist->sort(); | 1963 | pBkmklist->sort(); |
1281 | } | 1964 | } |
1282 | 1965 | ||
1283 | void QTReaderApp::addAnno(const QString& name, const QString& text) | 1966 | void QTReaderApp::addAnno(const QString& name, const QString& text) |
1284 | { | 1967 | { |
1285 | if (m_annoIsEditing) | 1968 | if (m_annoIsEditing) |
1286 | { | 1969 | { |
1287 | if (name.isEmpty()) | 1970 | if (name.isEmpty()) |
1288 | { | 1971 | { |
1289 | QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nPlease try again", 1); | 1972 | QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nPlease try again", 1); |
1290 | } | 1973 | } |
1291 | else | 1974 | else |
1292 | { | 1975 | { |
1293 | addAnno(name, text, m_annoWin->getPosn()); | 1976 | addAnno(name, text, m_annoWin->getPosn()); |
1294 | } | 1977 | } |
1295 | showEditTools(); | 1978 | showEditTools(); |
1296 | } | 1979 | } |
1297 | else | 1980 | else |
1298 | { | 1981 | { |
1299 | if (m_annoWin->edited()) | 1982 | if (m_annoWin->edited()) |
1300 | { | 1983 | { |
1301 | CBuffer buff(text.length()+1); | 1984 | CBuffer buff(text.length()+1); |
1302 | int i; | 1985 | int i; |
1303 | for (i = 0; i < text.length(); i++) | 1986 | for (i = 0; i < text.length(); i++) |
1304 | { | 1987 | { |
1305 | buff[i] = text[i].unicode(); | 1988 | buff[i] = text[i].unicode(); |
1306 | } | 1989 | } |
1307 | buff[i] = 0; | 1990 | buff[i] = 0; |
1308 | m_fBkmksChanged = true; | 1991 | m_fBkmksChanged = true; |
1309 | m_anno->setAnno(buff.data()); | 1992 | m_anno->setAnno(buff.data()); |
1310 | } | 1993 | } |
1311 | bool found = findNextBookmark(m_anno->value()+1); | 1994 | bool found = findNextBookmark(m_anno->value()+1); |
1312 | if (found) | 1995 | if (found) |
1313 | { | 1996 | { |
1314 | m_annoWin->setName(toQString(m_anno->name())); | 1997 | m_annoWin->setName(toQString(m_anno->name())); |
1315 | m_annoWin->setAnno(toQString(m_anno->anno())); | 1998 | m_annoWin->setAnno(toQString(m_anno->anno())); |
1316 | } | 1999 | } |
1317 | else | 2000 | else |
1318 | { | 2001 | { |
1319 | showEditTools(); | 2002 | showEditTools(); |
1320 | } | 2003 | } |
1321 | } | 2004 | } |
1322 | } | 2005 | } |
1323 | 2006 | ||
1324 | bool QTReaderApp::findNextBookmark(size_t start) | 2007 | bool QTReaderApp::findNextBookmark(size_t start) |
1325 | { | 2008 | { |
1326 | bool found = false; | 2009 | bool found = false; |
1327 | for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++) | 2010 | for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++) |
1328 | { | 2011 | { |
1329 | if (iter->value() >= start) | 2012 | if (iter->value() >= start) |
1330 | { | 2013 | { |
1331 | if (iter->value() < reader->locate()) | 2014 | if (iter->value() < reader->locate()) |
1332 | { | 2015 | { |
1333 | found = true; | 2016 | found = true; |
1334 | m_anno = iter.pContent(); | 2017 | m_anno = iter.pContent(); |
1335 | } | 2018 | } |
1336 | break; | 2019 | break; |
1337 | } | 2020 | } |
1338 | } | 2021 | } |
1339 | return found; | 2022 | return found; |
1340 | } | 2023 | } |
1341 | 2024 | ||
1342 | void QTReaderApp::addanno() | 2025 | void QTReaderApp::addanno() |
1343 | { | 2026 | { |
1344 | if (reader->empty()) | 2027 | if (reader->empty()) |
1345 | { | 2028 | { |
1346 | QMessageBox::information(this, PROGNAME, "No file loaded", 1); | 2029 | QMessageBox::information(this, PROGNAME, "No file loaded", 1); |
1347 | } | 2030 | } |
1348 | else | 2031 | else |
1349 | { | 2032 | { |
1350 | m_annoWin->setName(""); | 2033 | m_annoWin->setName(""); |
1351 | m_annoWin->setAnno(""); | 2034 | m_annoWin->setAnno(""); |
1352 | m_annoWin->setPosn(reader->pagelocate()); | 2035 | m_annoWin->setPosn(reader->pagelocate()); |
1353 | m_annoIsEditing = true; | 2036 | m_annoIsEditing = true; |
1354 | editorStack->raiseWidget( m_annoWin ); | 2037 | editorStack->raiseWidget( m_annoWin ); |
2038 | #ifdef USEQPE | ||
1355 | Global::showInputMethod(); | 2039 | Global::showInputMethod(); |
2040 | #endif | ||
1356 | m_annoWin->setFocus(); | 2041 | m_annoWin->setFocus(); |
1357 | } | 2042 | } |
1358 | } | 2043 | } |
1359 | 2044 | ||
1360 | void QTReaderApp::infoClose() | 2045 | void QTReaderApp::infoClose() |
1361 | { | 2046 | { |
1362 | showEditTools(); | 2047 | showEditTools(); |
1363 | } | 2048 | } |
1364 | 2049 | ||
1365 | /* | 2050 | /* |
1366 | void QTReaderApp::fileRevert() | 2051 | void QTReaderApp::fileRevert() |
1367 | { | 2052 | { |
1368 | clear(); | 2053 | clear(); |
1369 | fileOpen(); | 2054 | fileOpen(); |
1370 | } | 2055 | } |
1371 | 2056 | ||
1372 | void QTReaderApp::editCut() | 2057 | void QTReaderApp::editCut() |
1373 | { | 2058 | { |
1374 | #ifndef QT_NO_CLIPBOARD | 2059 | #ifndef QT_NO_CLIPBOARD |
1375 | editor->cut(); | 2060 | editor->cut(); |
1376 | #endif | 2061 | #endif |
1377 | } | 2062 | } |
1378 | */ | 2063 | */ |
1379 | void QTReaderApp::editMark() | 2064 | void QTReaderApp::editMark() |
1380 | { | 2065 | { |
1381 | m_savedpos = reader->pagelocate(); | 2066 | m_savedpos = reader->pagelocate(); |
1382 | } | 2067 | } |
1383 | 2068 | ||
1384 | void QTReaderApp::editCopy() | 2069 | void QTReaderApp::editCopy() |
1385 | { | 2070 | { |
1386 | QClipboard* cb = QApplication::clipboard(); | 2071 | QClipboard* cb = QApplication::clipboard(); |
1387 | QString text; | 2072 | QString text; |
1388 | int ch; | 2073 | int ch; |
1389 | unsigned long currentpos = reader->pagelocate(); | 2074 | unsigned long currentpos = reader->pagelocate(); |
1390 | unsigned long endpos = reader->locate(); | 2075 | unsigned long endpos = reader->locate(); |
2076 | if (m_savedpos == 0xffffffff) | ||
2077 | { | ||
2078 | m_savedpos = currentpos; | ||
2079 | } | ||
1391 | reader->jumpto(m_savedpos); | 2080 | reader->jumpto(m_savedpos); |
1392 | while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF) | 2081 | while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF) |
1393 | { | 2082 | { |
1394 | text += ch; | 2083 | text += ch; |
1395 | } | 2084 | } |
1396 | cb->setText(text); | 2085 | cb->setText(text); |
1397 | reader->locate(currentpos); | 2086 | reader->locate(currentpos); |
2087 | m_savedpos = 0xffffffff; | ||
1398 | } | 2088 | } |
1399 | 2089 | ||
1400 | void QTReaderApp::pageup() | 2090 | void QTReaderApp::gotoStart() |
1401 | { | 2091 | { |
1402 | reader->NavUp(); | 2092 | reader->locate(reader->buffdoc.startSection()); |
1403 | } | 2093 | } |
1404 | 2094 | ||
1405 | void QTReaderApp::pagedn() | 2095 | void QTReaderApp::gotoEnd() |
1406 | { | 2096 | { |
1407 | reader->NavDown(); | 2097 | reader->dopageup(reader->buffdoc.endSection()); |
1408 | } | 2098 | } |
1409 | 2099 | ||
1410 | void QTReaderApp::stripcr(bool _b) | 2100 | void QTReaderApp::pageup() |
1411 | { | ||
1412 | reader->setstripcr(_b); | ||
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 | ||
1424 | void QTReaderApp::remap(bool _b) | ||
1425 | { | ||
1426 | reader->setremap(_b); | ||
1427 | } | ||
1428 | void QTReaderApp::peanut(bool _b) | ||
1429 | { | ||
1430 | reader->setpeanut(_b); | ||
1431 | } | ||
1432 | void QTReaderApp::embolden(bool _b) | ||
1433 | { | ||
1434 | reader->setmakebold(_b); | ||
1435 | } | ||
1436 | void QTReaderApp::autofmt(bool _b) | ||
1437 | { | ||
1438 | reader->setautofmt(_b); | ||
1439 | } | ||
1440 | void QTReaderApp::textfmt(bool _b) | ||
1441 | { | ||
1442 | reader->settextfmt(_b); | ||
1443 | } | ||
1444 | void QTReaderApp::striphtml(bool _b) | ||
1445 | { | ||
1446 | reader->setstriphtml(_b); | ||
1447 | } | ||
1448 | void QTReaderApp::dehyphen(bool _b) | ||
1449 | { | ||
1450 | reader->setdehyphen(_b); | ||
1451 | } | ||
1452 | void QTReaderApp::unindent(bool _b) | ||
1453 | { | ||
1454 | reader->setunindent(_b); | ||
1455 | } | ||
1456 | void QTReaderApp::repara(bool _b) | ||
1457 | { | 2101 | { |
1458 | reader->setrepara(_b); | 2102 | reader->NavUp(); |
1459 | } | 2103 | } |
1460 | void QTReaderApp::dblspce(bool _b) | 2104 | |
2105 | void QTReaderApp::pagedn() | ||
1461 | { | 2106 | { |
1462 | reader->setdblspce(_b); | 2107 | reader->NavDown(); |
1463 | } | 2108 | } |
2109 | |||
1464 | void QTReaderApp::pagemode(bool _b) | 2110 | void QTReaderApp::pagemode(bool _b) |
1465 | { | 2111 | { |
1466 | reader->setpagemode(_b); | 2112 | reader->setpagemode(_b); |
1467 | } | 2113 | } |
1468 | void QTReaderApp::navkeys(bool _b) | ||
1469 | { | ||
1470 | reader->m_navkeys = _b; | ||
1471 | } | ||
1472 | void QTReaderApp::monospace(bool _b) | ||
1473 | { | ||
1474 | reader->setmono(_b); | ||
1475 | } | ||
1476 | 2114 | ||
2115 | /* | ||
1477 | void QTReaderApp::setspacing() | 2116 | void QTReaderApp::setspacing() |
1478 | { | 2117 | { |
1479 | m_nRegAction = cMonoSpace; | 2118 | m_nRegAction = cMonoSpace; |
1480 | char lcn[20]; | 2119 | char lcn[20]; |
1481 | sprintf(lcn, "%lu", reader->m_charpc); | 2120 | sprintf(lcn, "%lu", reader->m_charpc); |
1482 | regEdit->setText(lcn); | 2121 | regEdit->setText(lcn); |
1483 | do_regedit(); | 2122 | do_regedit(); |
1484 | } | 2123 | } |
1485 | 2124 | */ | |
1486 | void QTReaderApp::setoverlap() | ||
1487 | { | ||
1488 | m_nRegAction = cOverlap; | ||
1489 | char lcn[20]; | ||
1490 | sprintf(lcn, "%lu", reader->m_overlap); | ||
1491 | regEdit->setText(lcn); | ||
1492 | do_regedit(); | ||
1493 | } | ||
1494 | |||
1495 | void QTReaderApp::settarget() | 2125 | void QTReaderApp::settarget() |
1496 | { | 2126 | { |
1497 | m_nRegAction = cSetTarget; | 2127 | m_nRegAction = cSetTarget; |
1498 | QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp) | 2128 | QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp) |
1499 | + "/" | 2129 | + "/" |
1500 | + ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg); | 2130 | + ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg); |
1501 | regEdit->setText(text); | 2131 | regEdit->setText(text); |
1502 | do_regedit(); | 2132 | do_regedit(); |
1503 | } | 2133 | } |
1504 | 2134 | ||
1505 | void QTReaderApp::do_overlap(const QString& lcn) | 2135 | /* |
1506 | { | ||
1507 | bool ok; | ||
1508 | unsigned long ulcn = lcn.toULong(&ok); | ||
1509 | if (ok) | ||
1510 | { | ||
1511 | reader->m_overlap = ulcn; | ||
1512 | } | ||
1513 | else | ||
1514 | QMessageBox::information(this, PROGNAME, "Must be a number"); | ||
1515 | } | ||
1516 | |||
1517 | void QTReaderApp::do_mono(const QString& lcn) | 2136 | void QTReaderApp::do_mono(const QString& lcn) |
1518 | { | 2137 | { |
1519 | bool ok; | 2138 | bool ok; |
1520 | unsigned long ulcn = lcn.toULong(&ok); | 2139 | unsigned long ulcn = lcn.toULong(&ok); |
1521 | if (ok) | 2140 | if (ok) |
1522 | { | 2141 | { |
1523 | reader->m_charpc = ulcn; | 2142 | reader->m_charpc = ulcn; |
1524 | reader->setfont(); | 2143 | reader->setfont(); |
1525 | reader->refresh(); | 2144 | reader->refresh(); |
1526 | //reader->setmono(true); | 2145 | //reader->setmono(true); |
1527 | } | 2146 | } |
1528 | else | 2147 | else |
1529 | QMessageBox::information(this, PROGNAME, "Must be a number"); | 2148 | QMessageBox::information(this, PROGNAME, "Must be a number"); |
1530 | } | 2149 | } |
1531 | 2150 | */ | |
1532 | /* | 2151 | /* |
1533 | void QTReaderApp::editPaste() | 2152 | void QTReaderApp::editPaste() |
1534 | { | 2153 | { |
1535 | #ifndef QT_NO_CLIPBOARD | 2154 | #ifndef QT_NO_CLIPBOARD |
1536 | editor->paste(); | 2155 | editor->paste(); |
1537 | #endif | 2156 | #endif |
1538 | } | 2157 | } |
1539 | */ | 2158 | */ |
1540 | 2159 | ||
1541 | void QTReaderApp::editFind() | 2160 | void QTReaderApp::editFind() |
1542 | { | 2161 | { |
1543 | searchStart = reader->pagelocate(); | 2162 | searchStart = reader->pagelocate(); |
1544 | #ifdef __ISEARCH | 2163 | #ifdef __ISEARCH |
1545 | searchStack = new QStack<searchrecord>; | 2164 | searchStack = new QStack<searchrecord>; |
1546 | #endif | 2165 | #endif |
2166 | #ifdef USEQPE | ||
1547 | Global::showInputMethod(); | 2167 | Global::showInputMethod(); |
2168 | #endif | ||
1548 | searchBar->show(); | 2169 | searchBar->show(); |
1549 | searchVisible = TRUE; | 2170 | searchVisible = TRUE; |
1550 | searchEdit->setFocus(); | 2171 | searchEdit->setFocus(); |
1551 | #ifdef __ISEARCH | 2172 | #ifdef __ISEARCH |
1552 | searchStack->push(new searchrecord("",reader->pagelocate())); | 2173 | searchStack->push(new searchrecord("",reader->pagelocate())); |
1553 | #endif | 2174 | #endif |
1554 | } | 2175 | } |
1555 | 2176 | ||
1556 | void QTReaderApp::findNext() | 2177 | void QTReaderApp::findNext() |
1557 | { | 2178 | { |
1558 | // qDebug("findNext called\n"); | 2179 | // // qDebug("findNext called\n"); |
1559 | #ifdef __ISEARCH | 2180 | #ifdef __ISEARCH |
1560 | QString arg = searchEdit->text(); | 2181 | QString arg = searchEdit->text(); |
1561 | #else | 2182 | #else |
1562 | QRegExp arg = searchEdit->text(); | 2183 | QRegExp arg = searchEdit->text(); |
1563 | #endif | 2184 | #endif |
1564 | CDrawBuffer test(&(reader->m_fontControl)); | 2185 | CDrawBuffer test(&(reader->m_fontControl)); |
1565 | size_t start = reader->pagelocate(); | 2186 | size_t start = reader->pagelocate(); |
1566 | reader->jumpto(start); | 2187 | reader->jumpto(start); |
1567 | reader->buffdoc.getline(&test,reader->width()); | 2188 | reader->getline(&test); |
1568 | dosearch(start, test, arg); | 2189 | dosearch(start, test, arg); |
1569 | } | 2190 | } |
1570 | 2191 | ||
1571 | void QTReaderApp::findClose() | 2192 | void QTReaderApp::findClose() |
1572 | { | 2193 | { |
1573 | searchVisible = FALSE; | 2194 | searchVisible = FALSE; |
1574 | searchEdit->setText(""); | 2195 | searchEdit->setText(""); |
2196 | #ifdef USEQPE | ||
1575 | Global::hideInputMethod(); | 2197 | Global::hideInputMethod(); |
2198 | #endif | ||
1576 | searchBar->hide(); | 2199 | searchBar->hide(); |
1577 | #ifdef __ISEARCH | 2200 | #ifdef __ISEARCH |
1578 | // searchStack = new QStack<searchrecord>; | 2201 | // searchStack = new QStack<searchrecord>; |
1579 | while (!searchStack->isEmpty()) | 2202 | while (!searchStack->isEmpty()) |
1580 | { | 2203 | { |
1581 | delete searchStack->pop(); | 2204 | delete searchStack->pop(); |
1582 | } | 2205 | } |
1583 | delete searchStack; | 2206 | delete searchStack; |
1584 | #endif | 2207 | #endif |
1585 | reader->setFocus(); | 2208 | reader->setFocus(); |
1586 | } | 2209 | } |
1587 | 2210 | ||
1588 | void QTReaderApp::regClose() | 2211 | void QTReaderApp::regClose() |
1589 | { | 2212 | { |
1590 | regVisible = FALSE; | 2213 | regVisible = FALSE; |
1591 | regEdit->setText(""); | 2214 | regEdit->setText(""); |
1592 | regBar->hide(); | 2215 | regBar->hide(); |
2216 | #ifdef USEQPE | ||
1593 | Global::hideInputMethod(); | 2217 | Global::hideInputMethod(); |
2218 | #endif | ||
1594 | reader->setFocus(); | 2219 | reader->setFocus(); |
1595 | } | 2220 | } |
1596 | 2221 | ||
1597 | #ifdef __ISEARCH | 2222 | #ifdef __ISEARCH |
1598 | bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QString& arg) | 2223 | bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QString& arg) |
1599 | #else | 2224 | #else |
1600 | bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg) | 2225 | bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg) |
1601 | #endif | 2226 | #endif |
1602 | { | 2227 | { |
1603 | bool ret = true; | 2228 | bool ret = true; |
1604 | unsigned long fs, ts; | 2229 | unsigned long fs, ts; |
1605 | reader->sizes(fs,ts); | 2230 | reader->sizes(fs,ts); |
1606 | size_t pos = reader->locate(); | 2231 | size_t pos = reader->locate(); |
1607 | reader->buffdoc.getline(&test,reader->width()); | 2232 | pbar->setGeometry(searchBar->x(),searchBar->y(),searchBar->width(), searchBar->height()); |
1608 | pbar->show(); | 2233 | pbar->show(); |
1609 | pbar->resize(width(), editBar->height()); | 2234 | pbar->raise(); |
1610 | pbar->reset(); | 2235 | pbar->reset(); |
2236 | int offset; | ||
1611 | int lastpc = (100*pos)/ts; | 2237 | int lastpc = (100*pos)/ts; |
1612 | pbar->setProgress(lastpc); | 2238 | pbar->setProgress(lastpc); |
1613 | qApp->processEvents(); | 2239 | // qApp->processEvents(); |
1614 | reader->setFocus(); | 2240 | if (reader->buffdoc.getpara(test) >= 0) |
2241 | { | ||
2242 | reader->setFocus(); | ||
1615 | #ifdef __ISEARCH | 2243 | #ifdef __ISEARCH |
1616 | while (strstr(test.data(),(const tchar*)arg) == NULL) | 2244 | while (strstr(test.data(),(const tchar*)arg) == NULL) |
1617 | #else | 2245 | #else |
1618 | #ifdef _UNICODE | 2246 | #ifdef _UNICODE |
1619 | while (arg.match(toQString(test.data())) == -1) | 2247 | while ((offset = arg.match(toQString(test.data()))) == -1) |
1620 | #else | 2248 | #else |
1621 | while (arg.match(test.data()) == -1) | 2249 | while (arg.match(test.data()) == -1) |
1622 | #endif | 2250 | #endif |
1623 | #endif | 2251 | #endif |
1624 | { | ||
1625 | pos = reader->locate(); | ||
1626 | unsigned int lcn = reader->locate(); | ||
1627 | int pc = (100*pos)/ts; | ||
1628 | if (pc != lastpc) | ||
1629 | { | 2252 | { |
1630 | pbar->setProgress(pc); | 2253 | pos = reader->locate(); |
1631 | qApp->processEvents(); | 2254 | int pc = (100*pos)/ts; |
1632 | reader->setFocus(); | 2255 | if (pc != lastpc) |
1633 | lastpc = pc; | 2256 | { |
2257 | pbar->setProgress(pc); | ||
2258 | qApp->processEvents(); | ||
2259 | reader->setFocus(); | ||
2260 | lastpc = pc; | ||
2261 | } | ||
2262 | |||
2263 | if (reader->buffdoc.getpara(test) < 0) | ||
2264 | { | ||
2265 | if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2) | ||
2266 | pos = searchStart; | ||
2267 | else | ||
2268 | pos = start; | ||
2269 | findClose(); | ||
2270 | pbar->hide(); | ||
2271 | reader->locate(pos); | ||
2272 | return false; | ||
2273 | } | ||
1634 | } | 2274 | } |
1635 | 2275 | // qDebug("Found it at %u:%u", pos, offset); | |
1636 | if (!reader->buffdoc.getline(&test,reader->width())) | 2276 | pbar->hide(); |
1637 | { | 2277 | // qDebug("Hid"); |
1638 | if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2) | 2278 | reader->locate(pos+offset); |
1639 | pos = searchStart; | 2279 | // qDebug("Loacted"); |
1640 | else | 2280 | // qDebug("page up"); |
1641 | pos = start; | 2281 | ret = true; |
1642 | ret = false; | 2282 | } |
1643 | findClose(); | 2283 | else |
1644 | break; | 2284 | { |
1645 | } | 2285 | if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2) |
1646 | } | 2286 | pos = searchStart; |
1647 | pbar->hide(); | 2287 | else |
1648 | reader->locate(pos); | 2288 | pos = start; |
2289 | ret = false; | ||
2290 | findClose(); | ||
2291 | } | ||
1649 | return ret; | 2292 | return ret; |
1650 | } | 2293 | } |
1651 | 2294 | ||
1652 | #ifdef __ISEARCH | 2295 | #ifdef __ISEARCH |
1653 | void QTReaderApp::search(const QString & arg) | 2296 | void QTReaderApp::search(const QString & arg) |
1654 | { | 2297 | { |
1655 | searchrecord* ss = searchStack->top(); | 2298 | searchrecord* ss = searchStack->top(); |
1656 | CBuffer test; | 2299 | CBuffer test; |
1657 | size_t start = reader->pagelocate(); | 2300 | size_t start = reader->pagelocate(); |
1658 | bool haspopped = false; | 2301 | bool haspopped = false; |
1659 | while (arg.left(ss->s.length()) != ss->s) | 2302 | while (arg.left(ss->s.length()) != ss->s) |
1660 | { | 2303 | { |
1661 | haspopped = true; | 2304 | haspopped = true; |
1662 | start = ss->pos; | 2305 | start = ss->pos; |
1663 | // reader->locate(start); | 2306 | // reader->locate(start); |
1664 | searchStack->pop(); | 2307 | searchStack->pop(); |
1665 | delete ss; | 2308 | delete ss; |
1666 | } | 2309 | } |
1667 | if (haspopped) reader->locate(start); | 2310 | if (haspopped) reader->locate(start); |
1668 | /* | 2311 | /* |
1669 | if (arg.length() < ss->len) | 2312 | if (arg.length() < ss->len) |
1670 | { | 2313 | { |
1671 | start = ss->pos; | 2314 | start = ss->pos; |
1672 | reader->locate(start); | 2315 | reader->locate(start); |
1673 | searchStack->pop(); | 2316 | searchStack->pop(); |
1674 | delete ss; | 2317 | delete ss; |
1675 | } | 2318 | } |
1676 | */ | 2319 | */ |
1677 | else | 2320 | else |
1678 | { | 2321 | { |
1679 | start = reader->pagelocate(); | 2322 | start = reader->pagelocate(); |
1680 | reader->jumpto(start); | 2323 | reader->jumpto(start); |
1681 | searchStack->push(new searchrecord(arg,start)); | 2324 | searchStack->push(new searchrecord(arg,start)); |
1682 | } | 2325 | } |
1683 | dosearch(start, test, arg); | 2326 | dosearch(start, test, arg); |
1684 | } | 2327 | } |
1685 | #else | 2328 | #else |
1686 | void QTReaderApp::search() | 2329 | void QTReaderApp::search() |
1687 | { | 2330 | { |
1688 | findNext(); | 2331 | findNext(); |
1689 | } | 2332 | } |
1690 | #endif | 2333 | #endif |
1691 | 2334 | ||
1692 | void QTReaderApp::openFile( const QString &f ) | 2335 | void QTReaderApp::openFile( const QString &f ) |
1693 | { | 2336 | { |
1694 | qDebug("File:%s", (const char*)f); | 2337 | // qDebug("File:%s", (const char*)f); |
1695 | // openFile(DocLnk(f)); | 2338 | // openFile(DocLnk(f)); |
1696 | //} | 2339 | //} |
1697 | // | 2340 | // |
1698 | //void QTReaderApp::openFile( const DocLnk &f ) | 2341 | //void QTReaderApp::openFile( const DocLnk &f ) |
1699 | //{ | 2342 | //{ |
1700 | clear(); | 2343 | clear(); |
1701 | QFileInfo fm(f); | 2344 | QFileInfo fm(f); |
1702 | if ( fm.exists() ) | 2345 | if ( fm.exists() ) |
1703 | { | 2346 | { |
1704 | // QMessageBox::information(0, "Progress", "Calling fileNew()"); | 2347 | // QMessageBox::information(0, "Progress", "Calling fileNew()"); |
1705 | 2348 | #ifdef USEQPE | |
1706 | if (fm.extension( FALSE ) == "desktop") | 2349 | if (fm.extension( FALSE ) == "desktop") |
1707 | { | 2350 | { |
1708 | DocLnk d(f); | 2351 | DocLnk d(f); |
1709 | QFileInfo fnew(d.file()); | 2352 | QFileInfo fnew(d.file()); |
1710 | fm = fnew; | 2353 | fm = fnew; |
1711 | if (!fm.exists()) return; | 2354 | if (!fm.exists()) return; |
1712 | } | 2355 | } |
1713 | 2356 | #endif | |
1714 | clear(); | 2357 | clear(); |
1715 | 2358 | ||
1716 | reader->setText(fm.baseName(), fm.absFilePath()); | 2359 | reader->setText(fm.baseName(), fm.absFilePath()); |
2360 | m_loadedconfig = readconfig(reader->m_string, false); | ||
1717 | showEditTools(); | 2361 | showEditTools(); |
1718 | readbkmks(); | 2362 | readbkmks(); |
2363 | m_savedpos = 0xffffffff; | ||
1719 | } | 2364 | } |
1720 | else | 2365 | else |
1721 | { | 2366 | { |
1722 | QMessageBox::information(this, PROGNAME, "File does not exist"); | 2367 | QMessageBox::information(this, PROGNAME, "File does not exist"); |
2368 | reader->m_lastfile = QString::null; | ||
1723 | } | 2369 | } |
1724 | 2370 | ||
1725 | } | 2371 | } |
1726 | /* | 2372 | /* |
1727 | void QTReaderApp::resizeEvent(QResizeEvent* e) | 2373 | void QTReaderApp::resizeEvent(QResizeEvent* e) |
1728 | { | 2374 | { |
1729 | if (m_fullscreen) | 2375 | if (m_fullscreen) |
1730 | { | 2376 | { |
1731 | showNormal(); | 2377 | showNormal(); |
1732 | showFullScreen(); | 2378 | showFullScreen(); |
1733 | } | 2379 | } |
1734 | } | 2380 | } |
1735 | */ | 2381 | */ |
1736 | void QTReaderApp::keyPressEvent(QKeyEvent* e) | 2382 | void QTReaderApp::handlekey(QKeyEvent* e) |
1737 | { | 2383 | { |
1738 | if (m_fullscreen) | 2384 | // qDebug("Keypress event"); |
2385 | timeb now; | ||
2386 | ftime(&now); | ||
2387 | unsigned long etime = (1000*(now.time - m_lastkeytime.time) + now.millitm)-m_lastkeytime.millitm; | ||
2388 | if (etime < m_debounce) | ||
1739 | { | 2389 | { |
1740 | switch(e->key()) | 2390 | return; |
1741 | { | 2391 | } |
1742 | case Key_Escape: | 2392 | m_lastkeytime = now; |
1743 | m_actFullscreen->setOn(false); | 2393 | switch(e->key()) |
2394 | { | ||
2395 | case Key_Escape: | ||
2396 | // qDebug("escape event"); | ||
2397 | if (m_disableesckey) | ||
2398 | { | ||
2399 | m_disableesckey = false; | ||
2400 | } | ||
2401 | else | ||
2402 | { | ||
2403 | m_bcloseDisabled = true; | ||
1744 | if (m_fullscreen) | 2404 | if (m_fullscreen) |
1745 | { | 2405 | { |
1746 | qDebug("Fullscreen already set - remove this!"); | 2406 | m_actFullscreen->setOn(false); |
2407 | e->accept(); | ||
1747 | } | 2408 | } |
1748 | else | 2409 | else |
1749 | { | 2410 | { |
1750 | m_fullscreen = false; | 2411 | // qDebug("escape action"); |
1751 | reader->bDoUpdates = false; | 2412 | doAction(m_escapeTarget, e); |
1752 | showEditTools(); | ||
1753 | qApp->processEvents(); | ||
1754 | reader->bDoUpdates = true; | ||
1755 | reader->update(); | ||
1756 | } | 2413 | } |
1757 | e->accept(); | 2414 | } |
1758 | break; | 2415 | break; |
1759 | default: | 2416 | case Key_Space: |
1760 | e->ignore(); | 2417 | { |
2418 | doAction(m_spaceTarget, e); | ||
1761 | } | 2419 | } |
1762 | } | 2420 | break; |
1763 | else | 2421 | case Key_Return: |
1764 | { | 2422 | { |
1765 | e->ignore(); | 2423 | doAction(m_returnTarget, e); |
2424 | } | ||
2425 | break; | ||
2426 | case Key_Left: | ||
2427 | { | ||
2428 | if (reader->m_autoScroll && m_leftScroll) | ||
2429 | { | ||
2430 | reader->reduceScroll(); | ||
2431 | } | ||
2432 | else | ||
2433 | { | ||
2434 | doAction(m_leftTarget, e); | ||
2435 | } | ||
2436 | } | ||
2437 | break; | ||
2438 | case Key_Right: | ||
2439 | { | ||
2440 | if (reader->m_autoScroll && m_rightScroll) | ||
2441 | { | ||
2442 | reader->increaseScroll(); | ||
2443 | } | ||
2444 | else | ||
2445 | { | ||
2446 | doAction(m_rightTarget, e); | ||
2447 | } | ||
2448 | } | ||
2449 | break; | ||
2450 | case Key_Up: | ||
2451 | { | ||
2452 | if (reader->m_autoScroll && m_upScroll) | ||
2453 | { | ||
2454 | reader->increaseScroll(); | ||
2455 | } | ||
2456 | else | ||
2457 | { | ||
2458 | doAction(m_upTarget, e); | ||
2459 | } | ||
2460 | } | ||
2461 | break; | ||
2462 | case Key_Down: | ||
2463 | { | ||
2464 | if (reader->m_autoScroll && m_downScroll) | ||
2465 | { | ||
2466 | reader->reduceScroll(); | ||
2467 | } | ||
2468 | else | ||
2469 | { | ||
2470 | doAction(m_downTarget, e); | ||
2471 | } | ||
2472 | } | ||
2473 | break; | ||
2474 | default: | ||
2475 | { | ||
2476 | e->ignore(); | ||
2477 | } | ||
2478 | |||
2479 | /* | ||
2480 | QString msg("Key press was:"); | ||
2481 | QString key; | ||
2482 | msg += key.setNum(e->key()); | ||
2483 | QMessageBox::information(this, PROGNAME, msg); | ||
2484 | */ | ||
1766 | } | 2485 | } |
1767 | } | 2486 | } |
1768 | 2487 | ||
1769 | void QTReaderApp::showEditTools() | 2488 | void QTReaderApp::showEditTools() |
1770 | { | 2489 | { |
1771 | // if ( !doc ) | 2490 | // if ( !doc ) |
1772 | //close(); | 2491 | //close(); |
1773 | if (m_fullscreen) | 2492 | if (m_fullscreen) |
1774 | { | 2493 | { |
1775 | editBar->hide(); | 2494 | if (menubar != NULL) menubar->hide(); |
2495 | if (fileBar != NULL) fileBar->hide(); | ||
2496 | if (viewBar != NULL) viewBar->hide(); | ||
2497 | if (navBar != NULL) navBar->hide(); | ||
2498 | if (markBar != NULL) markBar->hide(); | ||
1776 | searchBar->hide(); | 2499 | searchBar->hide(); |
1777 | regBar->hide(); | 2500 | regBar->hide(); |
2501 | #ifdef USEQPE | ||
1778 | Global::hideInputMethod(); | 2502 | Global::hideInputMethod(); |
2503 | #endif | ||
1779 | m_fontBar->hide(); | 2504 | m_fontBar->hide(); |
1780 | //showNormal(); | 2505 | //showNormal(); |
1781 | showFullScreen(); | 2506 | showFullScreen(); |
1782 | } | 2507 | } |
1783 | else | 2508 | else |
1784 | { | 2509 | { |
1785 | qDebug("him"); | 2510 | //qDebug("him"); |
2511 | #ifdef USEQPE | ||
1786 | Global::hideInputMethod(); | 2512 | Global::hideInputMethod(); |
1787 | qDebug("eb"); | 2513 | #endif |
1788 | editBar->show(); | 2514 | //qDebug("eb"); |
2515 | menubar->show(); | ||
2516 | if (fileBar != NULL) fileBar->show(); | ||
2517 | if (viewBar != NULL) viewBar->show(); | ||
2518 | if (navBar != NULL) navBar->show(); | ||
2519 | if (markBar != NULL) markBar->show(); | ||
2520 | mb->show(); | ||
1789 | if ( searchVisible ) | 2521 | if ( searchVisible ) |
1790 | { | 2522 | { |
2523 | #ifdef USEQPE | ||
1791 | Global::showInputMethod(); | 2524 | Global::showInputMethod(); |
1792 | searchBar->show(); | 2525 | #endif |
2526 | searchBar->show(); | ||
1793 | } | 2527 | } |
1794 | if ( regVisible ) | 2528 | if ( regVisible ) |
1795 | { | 2529 | { |
2530 | #ifdef USEQPE | ||
1796 | Global::showInputMethod(); | 2531 | Global::showInputMethod(); |
1797 | regBar->show(); | 2532 | #endif |
2533 | regBar->show(); | ||
1798 | } | 2534 | } |
1799 | if (m_fontVisible) m_fontBar->show(); | 2535 | if (m_fontVisible) m_fontBar->show(); |
1800 | qDebug("sn"); | 2536 | //qDebug("sn"); |
1801 | showNormal(); | 2537 | showNormal(); |
1802 | qDebug("sm"); | 2538 | //qDebug("sm"); |
2539 | #ifdef USEQPE | ||
1803 | showMaximized(); | 2540 | showMaximized(); |
2541 | #endif | ||
1804 | //setCentralWidget(reader); | 2542 | //setCentralWidget(reader); |
1805 | } | 2543 | } |
1806 | 2544 | ||
1807 | qDebug("uc"); | 2545 | // qDebug("uc"); |
1808 | updateCaption(); | 2546 | updateCaption(); |
1809 | qDebug("rw"); | 2547 | // qDebug("rw"); |
1810 | editorStack->raiseWidget( reader ); | 2548 | editorStack->raiseWidget( reader ); |
1811 | qDebug("sf"); | 2549 | // qDebug("sf"); |
1812 | reader->setFocus(); | 2550 | reader->setFocus(); |
2551 | reader->refresh(); | ||
1813 | } | 2552 | } |
1814 | /* | 2553 | /* |
1815 | void QTReaderApp::save() | 2554 | void QTReaderApp::save() |
1816 | { | 2555 | { |
1817 | if ( !doc ) | 2556 | if ( !doc ) |
1818 | return; | 2557 | return; |
1819 | if ( !editor->edited() ) | 2558 | if ( !editor->edited() ) |
1820 | return; | 2559 | return; |
1821 | 2560 | ||
1822 | QString rt = editor->text(); | 2561 | QString rt = editor->text(); |
1823 | QString pt = rt; | 2562 | QString pt = rt; |
1824 | 2563 | ||
1825 | if ( doc->name().isEmpty() ) { | 2564 | if ( doc->name().isEmpty() ) { |
1826 | unsigned ispace = pt.find( ' ' ); | 2565 | unsigned ispace = pt.find( ' ' ); |
1827 | unsigned ienter = pt.find( '\n' ); | 2566 | unsigned ienter = pt.find( '\n' ); |
1828 | int i = (ispace < ienter) ? ispace : ienter; | 2567 | int i = (ispace < ienter) ? ispace : ienter; |
1829 | QString docname; | 2568 | QString docname; |
1830 | if ( i == -1 ) { | 2569 | if ( i == -1 ) { |
1831 | if ( pt.isEmpty() ) | 2570 | if ( pt.isEmpty() ) |
1832 | docname = "Empty Text"; | 2571 | docname = "Empty Text"; |
1833 | else | 2572 | else |
1834 | docname = pt; | 2573 | docname = pt; |
1835 | } else { | 2574 | } else { |
1836 | docname = pt.left( i ); | 2575 | docname = pt.left( i ); |
1837 | } | 2576 | } |
1838 | doc->setName(docname); | 2577 | doc->setName(docname); |
1839 | } | 2578 | } |
1840 | FileManager fm; | 2579 | FileManager fm; |
1841 | fm.saveFile( *doc, rt ); | 2580 | fm.saveFile( *doc, rt ); |
1842 | } | 2581 | } |
1843 | */ | 2582 | */ |
1844 | 2583 | ||
1845 | void QTReaderApp::clear() | 2584 | void QTReaderApp::clear() |
1846 | { | 2585 | { |
1847 | // if (doc != 0) | 2586 | // if (doc != 0) |
1848 | // { | 2587 | // { |
1849 | // QMessageBox::information(this, PROGNAME, "Deleting doc", 1); | 2588 | // QMessageBox::information(this, PROGNAME, "Deleting doc", 1); |
1850 | //delete doc; | 2589 | //delete doc; |
1851 | // QMessageBox::information(this, PROGNAME, "Deleted doc", 1); | 2590 | // QMessageBox::information(this, PROGNAME, "Deleted doc", 1); |
1852 | //doc = 0; | 2591 | //doc = 0; |
1853 | // } | 2592 | // } |
1854 | reader->clear(); | 2593 | reader->clear(); |
1855 | } | 2594 | } |
1856 | 2595 | ||
1857 | void QTReaderApp::updateCaption() | 2596 | void QTReaderApp::updateCaption() |
1858 | { | 2597 | { |
1859 | // if ( !doc ) | 2598 | // if ( !doc ) |
1860 | //setCaption( tr("QTReader") ); | 2599 | //setCaption( tr("QTReader") ); |
1861 | // else { | 2600 | // else { |
1862 | //QString s = doc->name(); | 2601 | //QString s = doc->name(); |
1863 | //if ( s.isEmpty() ) | 2602 | //if ( s.isEmpty() ) |
1864 | // s = tr( "Unnamed" ); | 2603 | // s = tr( "Unnamed" ); |
1865 | setCaption( reader->m_string + " - " + tr(SHORTPROGNAME) ); | 2604 | setCaption( reader->m_string + " - " + tr(SHORTPROGNAME) ); |
1866 | // } | 2605 | // } |
1867 | } | 2606 | } |
1868 | 2607 | ||
1869 | void QTReaderApp::setDocument(const QString& fileref) | 2608 | void QTReaderApp::setDocument(const QString& fileref) |
1870 | { | 2609 | { |
1871 | bFromDocView = TRUE; | 2610 | bFromDocView = TRUE; |
1872 | //QMessageBox::information(0, "setDocument", fileref); | 2611 | //QMessageBox::information(0, "setDocument", fileref); |
1873 | openFile(fileref); | 2612 | openFile(fileref); |
1874 | // showEditTools(); | 2613 | // showEditTools(); |
1875 | } | 2614 | } |
1876 | 2615 | ||
1877 | void QTReaderApp::closeEvent( QCloseEvent *e ) | 2616 | void QTReaderApp::closeEvent( QCloseEvent *e ) |
1878 | { | 2617 | { |
2618 | // qDebug("Close event"); | ||
1879 | if (m_fullscreen) | 2619 | if (m_fullscreen) |
1880 | { | 2620 | { |
1881 | m_fullscreen = false; | 2621 | m_fullscreen = false; |
1882 | showEditTools(); | 2622 | showEditTools(); |
1883 | e->accept(); | 2623 | e->accept(); |
1884 | } | 2624 | } |
1885 | else if (m_dontSave) | 2625 | else if (m_dontSave) |
1886 | { | 2626 | { |
1887 | e->accept(); | 2627 | e->accept(); |
1888 | } | 2628 | } |
1889 | else | 2629 | else |
1890 | { | 2630 | { |
1891 | if (editorStack->visibleWidget() == reader) | 2631 | if (editorStack->visibleWidget() == reader) |
1892 | { | 2632 | { |
1893 | if (m_fontVisible) | 2633 | if ((m_escapeTarget != cesNone) && m_bcloseDisabled) |
1894 | { | ||
1895 | m_fontBar->hide(); | ||
1896 | m_fontVisible = false; | ||
1897 | } | ||
1898 | if (regVisible) | ||
1899 | { | ||
1900 | regBar->hide(); | ||
1901 | Global::hideInputMethod(); | ||
1902 | regVisible = false; | ||
1903 | return; | ||
1904 | } | ||
1905 | if (searchVisible) | ||
1906 | { | 2634 | { |
1907 | searchBar->hide(); | 2635 | //qDebug("Close disabled"); |
1908 | Global::hideInputMethod(); | 2636 | m_bcloseDisabled = false; |
1909 | searchVisible = false; | 2637 | e->ignore(); |
1910 | return; | ||
1911 | } | 2638 | } |
1912 | if (m_fBkmksChanged && pBkmklist != NULL) | 2639 | else |
1913 | { | 2640 | { |
1914 | if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0) | 2641 | if (m_fontVisible) |
1915 | savebkmks(); | 2642 | { |
1916 | delete pBkmklist; | 2643 | m_fontBar->hide(); |
1917 | pBkmklist = NULL; | 2644 | m_fontVisible = false; |
1918 | m_fBkmksChanged = false; | 2645 | } |
2646 | if (regVisible) | ||
2647 | { | ||
2648 | regBar->hide(); | ||
2649 | #ifdef USEQPE | ||
2650 | Global::hideInputMethod(); | ||
2651 | #endif | ||
2652 | regVisible = false; | ||
2653 | return; | ||
2654 | } | ||
2655 | if (searchVisible) | ||
2656 | { | ||
2657 | searchBar->hide(); | ||
2658 | #ifdef USEQPE | ||
2659 | Global::hideInputMethod(); | ||
2660 | #endif | ||
2661 | searchVisible = false; | ||
2662 | return; | ||
2663 | } | ||
2664 | if (m_fBkmksChanged && pBkmklist != NULL) | ||
2665 | { | ||
2666 | if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0) | ||
2667 | savebkmks(); | ||
2668 | delete pBkmklist; | ||
2669 | pBkmklist = NULL; | ||
2670 | m_fBkmksChanged = false; | ||
2671 | } | ||
2672 | bFromDocView = FALSE; | ||
2673 | updatefileinfo(); | ||
2674 | saveprefs(); | ||
2675 | e->accept(); | ||
1919 | } | 2676 | } |
1920 | bFromDocView = FALSE; | ||
1921 | updatefileinfo(); | ||
1922 | saveprefs(); | ||
1923 | e->accept(); | ||
1924 | } | 2677 | } |
1925 | else | 2678 | else |
1926 | { | 2679 | { |
1927 | showEditTools(); | 2680 | showEditTools(); |
2681 | m_disableesckey = true; | ||
1928 | } | 2682 | } |
1929 | } | 2683 | } |
1930 | } | 2684 | } |
1931 | 2685 | ||
1932 | void QTReaderApp::do_gotomark() | 2686 | void QTReaderApp::do_gotomark() |
1933 | { | 2687 | { |
1934 | m_nRegAction = cGotoBkmk; | 2688 | m_nBkmkAction = cGotoBkmk; |
1935 | listbkmk(pBkmklist); | 2689 | if (!listbkmk(pBkmklist)) |
2690 | QMessageBox::information(this, PROGNAME, "No bookmarks in memory"); | ||
1936 | } | 2691 | } |
1937 | 2692 | ||
1938 | void QTReaderApp::do_delmark() | 2693 | void QTReaderApp::do_delmark() |
1939 | { | 2694 | { |
1940 | m_nRegAction = cDelBkmk; | 2695 | m_nBkmkAction = cDelBkmk; |
1941 | listbkmk(pBkmklist); | 2696 | if (!listbkmk(pBkmklist)) |
2697 | QMessageBox::information(this, PROGNAME, "No bookmarks in memory"); | ||
1942 | } | 2698 | } |
1943 | 2699 | ||
1944 | void QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab) | 2700 | bool QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab) |
1945 | { | 2701 | { |
1946 | bkmkselector->clear(); | 2702 | bkmkselector->clear(); |
1947 | if (_lab.isNull()) | 2703 | if (_lab.isEmpty()) |
1948 | bkmkselector->setText("Cancel"); | 2704 | bkmkselector->setText("Cancel"); |
1949 | else | 2705 | else |
1950 | bkmkselector->setText(_lab); | 2706 | bkmkselector->setText(_lab); |
1951 | int cnt = 0; | 2707 | int cnt = 0; |
1952 | if (plist != NULL) | 2708 | if (plist != NULL) |
1953 | { | 2709 | { |
1954 | for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++) | 2710 | for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++) |
1955 | { | 2711 | { |
1956 | #ifdef _UNICODE | 2712 | #ifdef _UNICODE |
1957 | qDebug("Item:%s", (const char*)toQString(i->name())); | 2713 | // qDebug("Item:%s", (const char*)toQString(i->name())); |
1958 | bkmkselector->insertItem(toQString(i->name())); | 2714 | bkmkselector->insertItem(toQString(i->name())); |
1959 | #else | 2715 | #else |
1960 | bkmkselector->insertItem(i->name()); | 2716 | bkmkselector->insertItem(i->name()); |
1961 | #endif | 2717 | #endif |
1962 | cnt++; | 2718 | cnt++; |
1963 | } | 2719 | } |
1964 | } | 2720 | } |
1965 | if (cnt > 0) | 2721 | if (cnt > 0) |
1966 | { | 2722 | { |
1967 | //tjw menu->hide(); | 2723 | hidetoolbars(); |
1968 | editBar->hide(); | ||
1969 | if (m_fontVisible) m_fontBar->hide(); | ||
1970 | if (regVisible) | ||
1971 | { | ||
1972 | Global::hideInputMethod(); | ||
1973 | regBar->hide(); | ||
1974 | } | ||
1975 | if (searchVisible) | ||
1976 | { | ||
1977 | Global::hideInputMethod(); | ||
1978 | searchBar->hide(); | ||
1979 | } | ||
1980 | editorStack->raiseWidget( bkmkselector ); | 2724 | editorStack->raiseWidget( bkmkselector ); |
2725 | return true; | ||
1981 | } | 2726 | } |
1982 | else | 2727 | else |
1983 | QMessageBox::information(this, PROGNAME, "No bookmarks in memory"); | 2728 | return false; |
1984 | } | 2729 | } |
1985 | 2730 | ||
1986 | void QTReaderApp::do_autogen() | 2731 | void QTReaderApp::do_autogen() |
1987 | { | 2732 | { |
1988 | m_nRegAction = cAutoGen; | 2733 | m_nRegAction = cAutoGen; |
1989 | regEdit->setText(m_autogenstr); | 2734 | regEdit->setText(m_autogenstr); |
1990 | do_regedit(); | 2735 | do_regedit(); |
1991 | } | 2736 | } |
1992 | 2737 | ||
1993 | void QTReaderApp::do_regedit() | 2738 | void QTReaderApp::do_regedit() |
1994 | { | 2739 | { |
1995 | // editBar->hide(); | 2740 | // fileBar->hide(); |
1996 | reader->bDoUpdates = false; | 2741 | reader->bDoUpdates = false; |
1997 | qDebug("Showing regbar"); | 2742 | // qDebug("Showing regbar"); |
1998 | regBar->show(); | 2743 | regBar->show(); |
1999 | qDebug("Showing kbd"); | 2744 | // qDebug("Showing kbd"); |
2745 | #ifdef USEQPE | ||
2000 | Global::showInputMethod(); | 2746 | Global::showInputMethod(); |
2747 | #endif | ||
2001 | regVisible = true; | 2748 | regVisible = true; |
2002 | regEdit->setFocus(); | 2749 | regEdit->setFocus(); |
2003 | qApp->processEvents(); | 2750 | // qApp->processEvents(); |
2004 | reader->bDoUpdates = true; | 2751 | reader->bDoUpdates = true; |
2005 | reader->update(); | 2752 | reader->update(); |
2006 | } | 2753 | } |
2007 | 2754 | ||
2008 | bool QTReaderApp::openfrombkmk(Bkmk* bk) | 2755 | bool QTReaderApp::openfrombkmk(Bkmk* bk) |
2009 | { | 2756 | { |
2010 | QString fn = toQString( | 2757 | QString fn = toQString( |
2011 | CFiledata(bk->anno()).name() | 2758 | CFiledata(bk->anno()).name() |
2012 | ); | 2759 | ); |
2013 | qDebug("fileinfo"); | 2760 | //qDebug("fileinfo"); |
2014 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) | 2761 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) |
2015 | { | 2762 | { |
2016 | qDebug("Opening"); | 2763 | //qDebug("Opening"); |
2017 | openFile(fn); | 2764 | openFile(fn); |
2018 | struct stat fnstat; | 2765 | struct stat fnstat; |
2019 | stat((const char *)reader->m_lastfile, &fnstat); | 2766 | stat((const char *)reader->m_lastfile, &fnstat); |
2020 | 2767 | ||
2021 | if (CFiledata(bk->anno()).date() | 2768 | if (CFiledata(bk->anno()).date() |
2022 | != fnstat.st_mtime) | 2769 | != fnstat.st_mtime) |
2023 | { | 2770 | { |
2024 | CFiledata fd(bk->anno()); | 2771 | CFiledata fd(bk->anno()); |
2025 | fd.setdate(fnstat.st_mtime); | 2772 | fd.setdate(fnstat.st_mtime); |
2026 | bk->value(0); | 2773 | bk->value(0); |
2027 | } | 2774 | } |
2028 | else | 2775 | else |
2029 | { | 2776 | { |
2030 | unsigned short svlen = bk->filedatalen(); | 2777 | unsigned short svlen = bk->filedatalen(); |
2031 | unsigned char* svdata = bk->filedata(); | 2778 | unsigned char* svdata = bk->filedata(); |
2032 | reader->putSaveData(svdata, svlen); | 2779 | reader->putSaveData(svdata, svlen); |
2033 | // setstate(svdata, svlen); | 2780 | // setstate(svdata, svlen); |
2034 | if (svlen != 0) | 2781 | if (svlen != 0) |
2035 | { | 2782 | { |
2036 | QMessageBox::warning(this, PROGNAME, "Not all file data used\nNew version?"); | 2783 | QMessageBox::warning(this, PROGNAME, "Not all file data used\nNew version?"); |
2037 | } | 2784 | } |
2038 | qDebug("updating"); | 2785 | // qDebug("updating"); |
2786 | // showEditTools(); | ||
2039 | reader->locate(bk->value()); | 2787 | reader->locate(bk->value()); |
2040 | } | 2788 | } |
2041 | return true; | 2789 | return true; |
2042 | } | 2790 | } |
2043 | else | 2791 | else |
2044 | { | 2792 | { |
2045 | return false; | 2793 | return false; |
2046 | } | 2794 | } |
2047 | } | 2795 | } |
2048 | 2796 | ||
2049 | void QTReaderApp::gotobkmk(int ind) | 2797 | void QTReaderApp::gotobkmk(int ind) |
2050 | { | 2798 | { |
2051 | switch (m_nRegAction) | 2799 | showEditTools(); |
2800 | switch (m_nBkmkAction) | ||
2052 | { | 2801 | { |
2053 | case cOpenFile: | 2802 | case cOpenFile: |
2054 | { | 2803 | { |
2804 | // qApp->processEvents(); | ||
2055 | if (!openfrombkmk((*pOpenlist)[ind])) | 2805 | if (!openfrombkmk((*pOpenlist)[ind])) |
2056 | { | 2806 | { |
2057 | pOpenlist->erase(ind); | 2807 | pOpenlist->erase(ind); |
2058 | QMessageBox::information(this, PROGNAME, "Can't find file"); | 2808 | QMessageBox::information(this, PROGNAME, "Can't find file"); |
2059 | } | 2809 | } |
2060 | } | 2810 | } |
2061 | break; | 2811 | break; |
2062 | case cGotoBkmk: | 2812 | case cGotoBkmk: |
2063 | reader->locate((*pBkmklist)[ind]->value()); | 2813 | reader->locate((*pBkmklist)[ind]->value()); |
2064 | break; | 2814 | break; |
2065 | case cDelBkmk: | 2815 | case cDelBkmk: |
2066 | // qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name()); | 2816 | //// qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name()); |
2067 | pBkmklist->erase(ind); | 2817 | pBkmklist->erase(ind); |
2068 | m_fBkmksChanged = true; | 2818 | m_fBkmksChanged = true; |
2069 | // pBkmklist->sort(); | 2819 | // pBkmklist->sort(); |
2070 | break; | 2820 | break; |
2071 | case cRmBkmkFile: | 2821 | case cRmBkmkFile: |
2072 | unlink((const char *)Global::applicationFileName(APPDIR,bkmkselector->text(ind))); | 2822 | { |
2823 | #ifndef USEQPE | ||
2824 | QDir d = QDir::home(); // "/" | ||
2825 | d.cd(APPDIR); | ||
2826 | d.remove(bkmkselector->text(ind)); | ||
2827 | #else /* USEQPE */ | ||
2828 | unlink((const char *)Global::applicationFileName(APPDIR,bkmkselector->text(ind))); | ||
2829 | #endif /* USEQPE */ | ||
2830 | } | ||
2831 | break; | ||
2832 | case cLdConfig: | ||
2833 | readconfig(bkmkselector->text(ind), false); | ||
2834 | break; | ||
2835 | case cRmConfig: | ||
2836 | { | ||
2837 | #ifndef USEQPE | ||
2838 | QDir d = QDir::home(); // "/" | ||
2839 | d.cd(APPDIR "/configs"); | ||
2840 | d.remove(bkmkselector->text(ind)); | ||
2841 | #else /* USEQPE */ | ||
2842 | unlink((const char *)Global::applicationFileName(APPDIR "/configs",bkmkselector->text(ind))); | ||
2843 | #endif /* USEQPE */ | ||
2844 | } | ||
2073 | break; | 2845 | break; |
2846 | case cExportLinks: | ||
2847 | { | ||
2848 | #ifndef USEQPE | ||
2849 | QDir d = QDir::home(); // "/" | ||
2850 | d.cd(APPDIR "/urls"); | ||
2851 | QFileInfo fi(d, bkmkselector->text(ind)); | ||
2852 | if (fi.exists()) | ||
2853 | { | ||
2854 | QString outfile( QFileDialog::getSaveFileName( QString::null, QString::null, this ) ); | ||
2855 | if (!outfile.isEmpty()) | ||
2856 | { | ||
2857 | FILE* fout = fopen((const char *)outfile, "w"); | ||
2858 | if (fout != NULL) | ||
2859 | { | ||
2860 | FILE* fin = fopen((const char *)fi.absFilePath(), "r"); | ||
2861 | if (fin != NULL) | ||
2862 | { | ||
2863 | fprintf(fout, "<html><body>\n"); | ||
2864 | int ch = 0; | ||
2865 | while ((ch = fgetc(fin)) != EOF) | ||
2866 | { | ||
2867 | fputc(ch, fout); | ||
2868 | } | ||
2869 | fclose(fin); | ||
2870 | fprintf(fout, "</html></body>\n"); | ||
2871 | d.remove(bkmkselector->text(ind)); | ||
2872 | } | ||
2873 | fclose(fout); | ||
2874 | } | ||
2875 | else | ||
2876 | QMessageBox::information(this, PROGNAME, "Couldn't open output"); | ||
2877 | } | ||
2878 | } | ||
2879 | #else /* USEQPE */ | ||
2880 | FILE* fin = fopen((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind)), "r"); | ||
2881 | if (fin != NULL) | ||
2882 | { | ||
2883 | bool allok = false; | ||
2884 | fileBrowser* fb = new fileBrowser(true, this,"OpieReader",!m_bFloatingDialog, 0, "*", QString::null); | ||
2885 | if (fb->exec()) | ||
2886 | { | ||
2887 | QString outfile = fb->getCurrentFile(); | ||
2888 | FILE* fout = fopen((const char *)outfile, "w"); | ||
2889 | if (fout != NULL) | ||
2890 | { | ||
2891 | fprintf(fout, "<html><body>\n"); | ||
2892 | int ch = 0; | ||
2893 | while ((ch = fgetc(fin)) != EOF) | ||
2894 | { | ||
2895 | fputc(ch, fout); | ||
2896 | } | ||
2897 | fprintf(fout, "</html></body>\n"); | ||
2898 | fclose(fout); | ||
2899 | allok = true; | ||
2900 | } | ||
2901 | else | ||
2902 | QMessageBox::information(this, PROGNAME, "Couldn't open output"); | ||
2903 | } | ||
2904 | delete fb; | ||
2905 | fclose(fin); | ||
2906 | if (allok) unlink((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind))); | ||
2907 | } | ||
2908 | else | ||
2909 | { | ||
2910 | QMessageBox::information(this, PROGNAME, "Couldn't open input"); | ||
2911 | } | ||
2912 | |||
2913 | /* | ||
2914 | CFileSelector *f = new CFileSelector("text/html", this, NULL, !m_bFloatingDialog, TRUE, TRUE ); | ||
2915 | int ret = f->exec(); | ||
2916 | qDebug("Return:%d", ret); | ||
2917 | DocLnk* doc = f->getDoc(); | ||
2918 | if (doc != NULL) | ||
2919 | { | ||
2920 | FILE* fin = fopen((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind)), "r"); | ||
2921 | QString rt; | ||
2922 | rt = "<html><body>\n"; | ||
2923 | int ch = 0; | ||
2924 | while ((ch = fgetc(fin)) != EOF) | ||
2925 | { | ||
2926 | rt += (char)ch; | ||
2927 | } | ||
2928 | fclose(fin); | ||
2929 | rt += "</html></body>\n"; | ||
2930 | if ( doc->name().isEmpty() ) | ||
2931 | { | ||
2932 | doc->setName(bkmkselector->text(ind)); | ||
2933 | } | ||
2934 | FileManager fm; | ||
2935 | fm.saveFile( *doc, rt ); | ||
2936 | qDebug("YES"); | ||
2937 | } | ||
2938 | else | ||
2939 | { | ||
2940 | qDebug("NO"); | ||
2941 | } | ||
2942 | delete f; | ||
2943 | */ | ||
2944 | |||
2945 | #endif /* USEQPE */ | ||
2946 | } | ||
2947 | break; | ||
2074 | } | 2948 | } |
2075 | showEditTools(); | ||
2076 | } | 2949 | } |
2077 | 2950 | ||
2078 | void QTReaderApp::cancelbkmk() | 2951 | void QTReaderApp::cancelbkmk() |
2079 | { | 2952 | { |
2080 | if (m_nRegAction == cOpenFile) | 2953 | if (m_nBkmkAction == cOpenFile) |
2081 | { | 2954 | { |
2082 | QString fn = usefilebrowser(); | 2955 | QString fn = usefilebrowser(); |
2083 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn); | 2956 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn); |
2084 | } | 2957 | } |
2085 | showEditTools(); | 2958 | showEditTools(); |
2086 | } | 2959 | } |
2087 | 2960 | ||
2088 | void QTReaderApp::jump() | 2961 | void QTReaderApp::jump() |
2089 | { | 2962 | { |
2090 | m_nRegAction = cJump; | 2963 | m_nRegAction = cJump; |
2091 | char lcn[20]; | 2964 | char lcn[20]; |
2092 | sprintf(lcn, "%lu", reader->pagelocate()); | 2965 | sprintf(lcn, "%lu", reader->pagelocate()); |
2093 | regEdit->setText(lcn); | 2966 | regEdit->setText(lcn); |
2094 | do_regedit(); | 2967 | do_regedit(); |
2095 | } | 2968 | } |
2096 | 2969 | ||
2097 | void QTReaderApp::do_jump(const QString& lcn) | 2970 | void QTReaderApp::do_jump(const QString& lcn) |
2098 | { | 2971 | { |
2099 | bool ok; | 2972 | bool ok; |
2100 | unsigned long ulcn = lcn.toULong(&ok); | 2973 | unsigned long ulcn = lcn.toULong(&ok); |
2101 | if (ok) | 2974 | if (ok) |
2102 | reader->locate(ulcn); | 2975 | reader->locate(ulcn); |
2103 | else | 2976 | else |
2104 | QMessageBox::information(this, PROGNAME, "Must be a number"); | 2977 | QMessageBox::information(this, PROGNAME, "Must be a number"); |
2105 | } | 2978 | } |
2106 | 2979 | ||
2107 | void QTReaderApp::do_regaction() | 2980 | void QTReaderApp::do_regaction() |
2108 | { | 2981 | { |
2109 | reader->bDoUpdates = false; | 2982 | reader->bDoUpdates = false; |
2110 | regBar->hide(); | 2983 | regBar->hide(); |
2984 | #ifdef USEQPE | ||
2111 | Global::hideInputMethod(); | 2985 | Global::hideInputMethod(); |
2986 | #endif | ||
2112 | regVisible = false; | 2987 | regVisible = false; |
2113 | switch(m_nRegAction) | 2988 | switch(m_nRegAction) |
2114 | { | 2989 | { |
2115 | case cAutoGen: | 2990 | case cAutoGen: |
2116 | do_autogen(regEdit->text()); | 2991 | do_autogen(regEdit->text()); |
2117 | break; | 2992 | break; |
2118 | case cAddBkmk: | 2993 | case cAddBkmk: |
2119 | do_addbkmk(regEdit->text()); | 2994 | do_addbkmk(regEdit->text()); |
2120 | break; | 2995 | break; |
2121 | case cJump: | 2996 | case cJump: |
2122 | do_jump(regEdit->text()); | 2997 | do_jump(regEdit->text()); |
2123 | break; | 2998 | break; |
2999 | /* | ||
2124 | case cMonoSpace: | 3000 | case cMonoSpace: |
2125 | do_mono(regEdit->text()); | 3001 | do_mono(regEdit->text()); |
2126 | break; | 3002 | break; |
2127 | case cOverlap: | 3003 | */ |
2128 | do_overlap(regEdit->text()); | ||
2129 | break; | ||
2130 | case cSetTarget: | 3004 | case cSetTarget: |
2131 | do_settarget(regEdit->text()); | 3005 | do_settarget(regEdit->text()); |
2132 | break; | 3006 | break; |
3007 | #ifdef _SCROLLPIPE | ||
3008 | case cSetPipeTarget: | ||
3009 | do_setpipetarget(regEdit->text()); | ||
3010 | break; | ||
3011 | #endif | ||
3012 | case cSetConfigName: | ||
3013 | // qDebug("Saving config"); | ||
3014 | do_saveconfig(regEdit->text(), false); | ||
3015 | break; | ||
2133 | } | 3016 | } |
2134 | reader->restore(); | 3017 | // reader->restore(); |
2135 | // editBar->show(); | 3018 | // fileBar->show(); |
2136 | reader->setFocus(); | 3019 | reader->setFocus(); |
2137 | qApp->processEvents(); | 3020 | // qApp->processEvents(); |
2138 | reader->bDoUpdates = true; | 3021 | reader->bDoUpdates = true; |
2139 | reader->update(); | 3022 | reader->update(); |
2140 | } | 3023 | } |
2141 | 3024 | ||
2142 | void QTReaderApp::do_settarget(const QString& _txt) | 3025 | void QTReaderApp::do_settarget(const QString& _txt) |
2143 | { | 3026 | { |
2144 | int ind = _txt.find('/'); | 3027 | int ind = _txt.find('/'); |
2145 | if (ind == -1) | 3028 | if (ind == -1) |
2146 | { | 3029 | { |
2147 | m_targetapp = ""; | 3030 | m_targetapp = ""; |
2148 | m_targetmsg = ""; | 3031 | m_targetmsg = ""; |
2149 | QMessageBox::information(this, PROGNAME, "Format is\nappname/messagename"); | 3032 | QMessageBox::information(this, PROGNAME, "Format is\nappname/messagename"); |
2150 | } | 3033 | } |
2151 | else | 3034 | else |
2152 | { | 3035 | { |
2153 | m_targetapp = _txt.left(ind); | 3036 | m_targetapp = _txt.left(ind); |
2154 | m_targetmsg = _txt.right(_txt.length()-ind-1); | 3037 | m_targetmsg = _txt.right(_txt.length()-ind-1); |
2155 | } | 3038 | } |
2156 | } | 3039 | } |
2157 | 3040 | ||
3041 | void QTReaderApp::chooseencoding() | ||
3042 | { | ||
3043 | m_fontSelector->clear(); | ||
3044 | m_fontSelector->insertItem("Ascii"); | ||
3045 | m_fontSelector->insertItem("UTF-8"); | ||
3046 | m_fontSelector->insertItem("UCS-2(BE)"); | ||
3047 | m_fontSelector->insertItem("USC-2(LE)"); | ||
3048 | m_fontSelector->insertItem("Palm"); | ||
3049 | for (unicodetable::iterator iter = unicodetable::begin(); iter != unicodetable::end(); iter++) | ||
3050 | { | ||
3051 | m_fontSelector->insertItem(iter->mime); | ||
3052 | } // delete the FontDatabase!!! | ||
3053 | m_fontSelector->setCurrentItem (reader->m_encd); | ||
3054 | m_fontAction = cChooseEncoding; | ||
3055 | m_fontBar->show(); | ||
3056 | m_fontVisible = true; | ||
3057 | } | ||
3058 | |||
2158 | void QTReaderApp::setfont() | 3059 | void QTReaderApp::setfont() |
2159 | { | 3060 | { |
3061 | m_fontSelector->clear(); | ||
3062 | { | ||
3063 | #ifdef USEQPE | ||
3064 | FontDatabase f; | ||
3065 | #else | ||
3066 | QFontDatabase f; | ||
3067 | #endif | ||
3068 | QStringList flist = f.families(); | ||
3069 | m_fontSelector->insertStringList(flist); | ||
3070 | } // delete the FontDatabase!!! | ||
3071 | |||
2160 | for (int i = 1; i <= m_fontSelector->count(); i++) | 3072 | for (int i = 1; i <= m_fontSelector->count(); i++) |
2161 | { | 3073 | { |
2162 | if (m_fontSelector->text(i) == reader->m_fontname) | 3074 | if (m_fontSelector->text(i) == reader->m_fontname) |
2163 | { | 3075 | { |
2164 | m_fontSelector->setCurrentItem(i); | 3076 | m_fontSelector->setCurrentItem(i); |
2165 | break; | 3077 | break; |
2166 | } | 3078 | } |
2167 | } | 3079 | } |
3080 | m_fontAction = cChooseFont; | ||
2168 | m_fontBar->show(); | 3081 | m_fontBar->show(); |
2169 | m_fontVisible = true; | 3082 | m_fontVisible = true; |
2170 | } | 3083 | } |
2171 | 3084 | ||
2172 | void QTReaderApp::setfontHelper(const QString& lcn, int size) | 3085 | void QTReaderApp::setfontHelper(const QString& lcn, int size) |
2173 | { | 3086 | { |
2174 | if (size == 0) size = reader->m_fontControl.currentsize(); | 3087 | if (size == 0) size = reader->m_fontControl.currentsize(); |
2175 | QFont f(lcn, 10 /*, QFont::Bold*/); | 3088 | if (m_propogatefontchange) |
2176 | qDebug("bs"); | 3089 | { |
2177 | bkmkselector->setFont( f ); | 3090 | QFont f(lcn, 10); |
2178 | qDebug("re"); | 3091 | bkmkselector->setFont( f ); |
2179 | regEdit->setFont( f ); | 3092 | regEdit->setFont( f ); |
2180 | qDebug("se"); | 3093 | searchEdit->setFont( f ); |
2181 | searchEdit->setFont( f ); | 3094 | m_annoWin->setFont( f ); |
2182 | qDebug("aw"); | 3095 | } |
2183 | m_annoWin->setFont( f ); | ||
2184 | reader->m_fontname = lcn; | 3096 | reader->m_fontname = lcn; |
2185 | qDebug("cf1"); | ||
2186 | if (!reader->ChangeFont(size)) | 3097 | if (!reader->ChangeFont(size)) |
2187 | { | 3098 | { |
2188 | qDebug("cf2"); | ||
2189 | reader->ChangeFont(size); | 3099 | reader->ChangeFont(size); |
2190 | } | 3100 | } |
2191 | qDebug("ref"); | 3101 | } |
3102 | |||
3103 | void QTReaderApp::do_setencoding(int i) | ||
3104 | { | ||
3105 | // qDebug("setencoding:%d", i); | ||
3106 | if (m_fontAction == cChooseEncoding) | ||
3107 | { | ||
3108 | reader->setencoding(i); | ||
3109 | } | ||
2192 | reader->refresh(); | 3110 | reader->refresh(); |
2193 | m_fontBar->hide(); | 3111 | m_fontBar->hide(); |
2194 | m_fontVisible = false; | 3112 | m_fontVisible = false; |
2195 | qDebug("showedit"); | 3113 | // qDebug("showedit"); |
2196 | if (reader->isVisible()) showEditTools(); | 3114 | if (reader->isVisible()) showEditTools(); |
2197 | qDebug("showeditdone"); | 3115 | // qDebug("showeditdone"); |
2198 | } | 3116 | } |
2199 | 3117 | ||
2200 | void QTReaderApp::do_setfont(const QString& lcn) | 3118 | void QTReaderApp::do_setfont(const QString& lcn) |
2201 | { | 3119 | { |
2202 | setfontHelper(lcn); | 3120 | if (m_fontAction == cChooseFont) |
3121 | { | ||
3122 | setfontHelper(lcn); | ||
3123 | } | ||
3124 | reader->refresh(); | ||
3125 | m_fontBar->hide(); | ||
3126 | m_fontVisible = false; | ||
3127 | // qDebug("showedit"); | ||
3128 | //if (reader->isVisible()) | ||
3129 | showEditTools(); | ||
3130 | // qDebug("showeditdone"); | ||
2203 | } | 3131 | } |
2204 | 3132 | ||
2205 | void QTReaderApp::do_autogen(const QString& regText) | 3133 | void QTReaderApp::do_autogen(const QString& regText) |
2206 | { | 3134 | { |
2207 | unsigned long fs, ts; | 3135 | unsigned long fs, ts; |
2208 | reader->sizes(fs,ts); | 3136 | reader->sizes(fs,ts); |
2209 | // qDebug("Reg:%s\n", (const tchar*)(regEdit->text())); | 3137 | // // qDebug("Reg:%s\n", (const tchar*)(regEdit->text())); |
2210 | m_autogenstr = regText; | 3138 | m_autogenstr = regText; |
2211 | QRegExp re(regText); | 3139 | QRegExp re(regText); |
2212 | CBuffer buff; | 3140 | CBuffer buff; |
2213 | if (pBkmklist != NULL) delete pBkmklist; | 3141 | if (pBkmklist != NULL) delete pBkmklist; |
2214 | pBkmklist = new CList<Bkmk>; | 3142 | pBkmklist = new CList<Bkmk>; |
2215 | m_fBkmksChanged = true; | 3143 | m_fBkmksChanged = true; |
3144 | |||
3145 | pbar->setGeometry(regBar->x(),regBar->y(),regBar->width(), regBar->height()); | ||
2216 | pbar->show(); | 3146 | pbar->show(); |
2217 | pbar->resize(width(), editBar->height()); | 3147 | pbar->raise(); |
2218 | pbar->reset(); | 3148 | pbar->reset(); |
3149 | reader->update(); | ||
2219 | qApp->processEvents(); | 3150 | qApp->processEvents(); |
2220 | reader->setFocus(); | 3151 | reader->setFocus(); |
2221 | reader->jumpto(0); | 3152 | reader->jumpto(0); |
2222 | int lastpc = 0; | 3153 | int lastpc = 0; |
2223 | int i = 0; | 3154 | int i = 0; |
2224 | while (i >= 0) | 3155 | while (i >= 0) |
2225 | { | 3156 | { |
2226 | unsigned int lcn = reader->locate(); | 3157 | unsigned int lcn = reader->locate(); |
2227 | int pc = (100*lcn)/ts; | 3158 | int pc = (100*lcn)/ts; |
2228 | if (pc != lastpc) | 3159 | if (pc != lastpc) |
2229 | { | 3160 | { |
2230 | pbar->setProgress(pc); | 3161 | pbar->setProgress(pc); |
2231 | qApp->processEvents(); | 3162 | qApp->processEvents(); |
2232 | if (reader->locate() != lcn) reader->jumpto(lcn); | 3163 | if (reader->locate() != lcn) reader->jumpto(lcn); |
2233 | reader->setFocus(); | 3164 | reader->setFocus(); |
2234 | lastpc = pc; | 3165 | lastpc = pc; |
2235 | } | 3166 | } |
2236 | i = reader->buffdoc.getpara(buff); | 3167 | i = reader->buffdoc.getpara(buff); |
2237 | #ifdef _UNICODE | 3168 | #ifdef _UNICODE |
2238 | if (re.match(toQString(buff.data())) != -1) | 3169 | if (re.match(toQString(buff.data())) != -1) |
2239 | #else | 3170 | #else |
2240 | if (re.match(buff.data()) != -1) | 3171 | if (re.match(buff.data()) != -1) |
2241 | #endif | 3172 | #endif |
2242 | pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn)); | 3173 | pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn)); |
2243 | } | 3174 | } |
2244 | pBkmklist->sort(); | 3175 | pBkmklist->sort(); |
2245 | pbar->setProgress(100); | 3176 | pbar->setProgress(100); |
2246 | qApp->processEvents(); | 3177 | qApp->processEvents(); |
2247 | pbar->hide(); | 3178 | pbar->hide(); |
3179 | reader->refresh(); | ||
2248 | } | 3180 | } |
2249 | 3181 | ||
2250 | void QTReaderApp::saveprefs() | 3182 | void QTReaderApp::saveprefs() |
2251 | { | 3183 | { |
3184 | // qDebug("saveprefs"); | ||
2252 | // reader->saveprefs("uqtreader"); | 3185 | // reader->saveprefs("uqtreader"); |
3186 | // if (!m_loadedconfig) | ||
3187 | do_saveconfig( APPDIR, true ); | ||
3188 | |||
3189 | /* | ||
2253 | Config config( APPDIR ); | 3190 | Config config( APPDIR ); |
2254 | config.setGroup( "View" ); | 3191 | config.setGroup( "View" ); |
2255 | 3192 | ||
2256 | reader->m_lastposn = reader->pagelocate(); | 3193 | reader->m_lastposn = reader->pagelocate(); |
2257 | 3194 | ||
3195 | config.writeEntry("FloatDialogs", m_bFloatingDialog); | ||
2258 | config.writeEntry( "StripCr", reader->bstripcr ); | 3196 | config.writeEntry( "StripCr", reader->bstripcr ); |
2259 | config.writeEntry( "AutoFmt", reader->bautofmt ); | 3197 | config.writeEntry( "AutoFmt", reader->bautofmt ); |
2260 | config.writeEntry( "TextFmt", reader->btextfmt ); | 3198 | config.writeEntry( "TextFmt", reader->btextfmt ); |
2261 | config.writeEntry( "StripHtml", reader->bstriphtml ); | 3199 | config.writeEntry( "StripHtml", reader->bstriphtml ); |
2262 | config.writeEntry( "Dehyphen", reader->bdehyphen ); | 3200 | config.writeEntry( "Dehyphen", reader->bdehyphen ); |
3201 | config.writeEntry( "Depluck", reader->bdepluck ); | ||
3202 | config.writeEntry( "Dejpluck", reader->bdejpluck ); | ||
2263 | config.writeEntry( "OneSpace", reader->bonespace ); | 3203 | config.writeEntry( "OneSpace", reader->bonespace ); |
2264 | config.writeEntry( "Unindent", reader->bunindent ); | 3204 | config.writeEntry( "Unindent", reader->bunindent ); |
2265 | config.writeEntry( "Repara", reader->brepara ); | 3205 | config.writeEntry( "Repara", reader->brepara ); |
2266 | config.writeEntry( "DoubleSpace", reader->bdblspce ); | 3206 | config.writeEntry( "DoubleSpace", reader->bdblspce ); |
2267 | config.writeEntry( "Indent", reader->bindenter ); | 3207 | config.writeEntry( "Indent", reader->bindenter ); |
2268 | config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) ); | 3208 | config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) ); |
2269 | config.writeEntry( "ScrollDelay", reader->m_delay); | 3209 | config.writeEntry( "ScrollDelay", reader->m_delay); |
2270 | config.writeEntry( "LastFile", reader->m_lastfile ); | 3210 | config.writeEntry( "LastFile", reader->m_lastfile ); |
2271 | config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); | 3211 | config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); |
2272 | config.writeEntry( "PageMode", reader->m_bpagemode ); | 3212 | config.writeEntry( "PageMode", reader->m_bpagemode ); |
2273 | config.writeEntry( "CursorNavigation", reader->m_navkeys ); | ||
2274 | config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); | 3213 | config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); |
3214 | config.writeEntry( "SwapMouse", reader->m_swapmouse); | ||
2275 | config.writeEntry( "Fontname", reader->m_fontname ); | 3215 | config.writeEntry( "Fontname", reader->m_fontname ); |
2276 | config.writeEntry( "Encoding", reader->m_encd ); | 3216 | config.writeEntry( "Encoding", reader->m_encd ); |
2277 | config.writeEntry( "CharSpacing", reader->m_charpc ); | 3217 | config.writeEntry( "CharSpacing", reader->m_charpc ); |
2278 | config.writeEntry( "Overlap", (int)(reader->m_overlap) ); | 3218 | config.writeEntry( "Overlap", (int)(reader->m_overlap) ); |
3219 | config.writeEntry( "Margin", (int)reader->m_border ); | ||
2279 | config.writeEntry( "TargetApp", m_targetapp ); | 3220 | config.writeEntry( "TargetApp", m_targetapp ); |
2280 | config.writeEntry( "TargetMsg", m_targetmsg ); | 3221 | config.writeEntry( "TargetMsg", m_targetmsg ); |
3222 | #ifdef _SCROLLPIPE | ||
3223 | config.writeEntry( "PipeTarget", reader->m_pipetarget ); | ||
3224 | config.writeEntry( "PauseAfterPara", reader->m_pauseAfterEachPara ); | ||
3225 | #endif | ||
2281 | config.writeEntry( "TwoTouch", m_twoTouch ); | 3226 | config.writeEntry( "TwoTouch", m_twoTouch ); |
2282 | config.writeEntry( "Annotation", m_doAnnotation); | 3227 | config.writeEntry( "Annotation", m_doAnnotation); |
2283 | config.writeEntry( "Dictionary", m_doDictionary); | 3228 | config.writeEntry( "Dictionary", m_doDictionary); |
2284 | config.writeEntry( "Clipboard", m_doClipboard); | 3229 | config.writeEntry( "Clipboard", m_doClipboard); |
2285 | config.writeEntry( "SpaceTarget", m_spaceTarget); | 3230 | config.writeEntry( "SpaceTarget", m_spaceTarget); |
3231 | config.writeEntry( "EscapeTarget", m_escapeTarget); | ||
3232 | config.writeEntry( "ReturnTarget", m_returnTarget); | ||
3233 | config.writeEntry( "LeftTarget", m_leftTarget); | ||
3234 | config.writeEntry( "RightTarget", m_rightTarget); | ||
3235 | config.writeEntry( "UpTarget", m_upTarget); | ||
3236 | config.writeEntry( "DownTarget", m_downTarget); | ||
3237 | config.writeEntry("LeftScroll", m_leftScroll); | ||
3238 | config.writeEntry("RightScroll", m_rightScroll); | ||
3239 | config.writeEntry("UpScroll", m_upScroll); | ||
3240 | config.writeEntry("DownScroll", m_downScroll); | ||
2286 | #ifdef REPALM | 3241 | #ifdef REPALM |
2287 | config.writeEntry( "Repalm", reader->brepalm ); | 3242 | config.writeEntry( "Repalm", reader->brepalm ); |
2288 | #endif | 3243 | #endif |
2289 | config.writeEntry( "Remap", reader->bremap ); | 3244 | config.writeEntry( "Remap", reader->bremap ); |
2290 | config.writeEntry( "Peanut", reader->bpeanut ); | 3245 | config.writeEntry( "Peanut", reader->bpeanut ); |
2291 | config.writeEntry( "MakeBold", reader->bmakebold ); | 3246 | config.writeEntry( "MakeBold", reader->bmakebold ); |
2292 | config.writeEntry( "Continuous", reader->m_continuousDocument ); | 3247 | config.writeEntry( "Continuous", reader->m_continuousDocument ); |
2293 | 3248 | config.writeEntry( "FullJust", reader->bfulljust ); | |
3249 | config.writeEntry( "ExtraSpace", reader->getextraspace() ); | ||
3250 | config.writeEntry( "ExtraLead", reader->getlead() ); | ||
3251 | config.writeEntry( "Basesize", (int)reader->getBaseSize()); | ||
3252 | config.writeEntry( "RequestorFontChange", m_propogatefontchange); | ||
3253 | |||
3254 | config.setGroup( "Toolbar" ); | ||
3255 | config.writeEntry("Movable", m_tbmovesave); | ||
3256 | config.writeEntry("Policy", m_tbpolsave); | ||
3257 | config.writeEntry("Position", m_tbposition); | ||
3258 | */ | ||
2294 | savefilelist(); | 3259 | savefilelist(); |
2295 | } | 3260 | } |
2296 | 3261 | ||
2297 | void QTReaderApp::indentplus() | ||
2298 | { | ||
2299 | reader->indentplus(); | ||
2300 | } | ||
2301 | |||
2302 | void QTReaderApp::indentminus() | ||
2303 | { | ||
2304 | reader->indentminus(); | ||
2305 | } | ||
2306 | |||
2307 | /* | 3262 | /* |
2308 | void QTReaderApp::oldFile() | 3263 | void QTReaderApp::oldFile() |
2309 | { | 3264 | { |
2310 | qDebug("oldFile called"); | 3265 | // qDebug("oldFile called"); |
2311 | reader->setText(true); | 3266 | reader->setText(true); |
2312 | qDebug("settext called"); | 3267 | // qDebug("settext called"); |
2313 | showEditTools(); | 3268 | showEditTools(); |
2314 | qDebug("showedit called"); | 3269 | // qDebug("showedit called"); |
2315 | } | 3270 | } |
2316 | */ | 3271 | */ |
2317 | 3272 | ||
2318 | /* | 3273 | /* |
2319 | void info_cb(Fl_Widget* o, void* _data) | 3274 | void info_cb(Fl_Widget* o, void* _data) |
2320 | { | 3275 | { |
2321 | 3276 | ||
2322 | if (infowin == NULL) | 3277 | if (infowin == NULL) |
2323 | { | 3278 | { |
2324 | 3279 | ||
2325 | infowin = new Fl_Window(160,240); | 3280 | infowin = new Fl_Window(160,240); |
2326 | filename = new Fl_Output(45,5,110,14,"Filename"); | 3281 | filename = new Fl_Output(45,5,110,14,"Filename"); |
2327 | filesize = new Fl_Output(45,25,110,14,"Filesize"); | 3282 | filesize = new Fl_Output(45,25,110,14,"Filesize"); |
2328 | textsize = new Fl_Output(45,45,110,14,"Textsize"); | 3283 | textsize = new Fl_Output(45,45,110,14,"Textsize"); |
2329 | comprat = new CBar(45,65,110,14,"Ratio %"); | 3284 | comprat = new CBar(45,65,110,14,"Ratio %"); |
2330 | posn = new Fl_Output(45,85,110,14,"Location"); | 3285 | posn = new Fl_Output(45,85,110,14,"Location"); |
2331 | frcn = new CBar(45,105,110,14,"% Read"); | 3286 | frcn = new CBar(45,105,110,14,"% Read"); |
2332 | about = new Fl_Multiline_Output(5,125,150,90); | 3287 | about = new Fl_Multiline_Output(5,125,150,90); |
2333 | about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files"); | 3288 | about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files"); |
2334 | Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay"); | 3289 | Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay"); |
2335 | infowin->set_modal(); | 3290 | infowin->set_modal(); |
2336 | } | 3291 | } |
2337 | if (((reader_ui *)_data)->g_filename[0] != '\0') | 3292 | if (((reader_ui *)_data)->g_filename[0] != '\0') |
2338 | { | 3293 | { |
2339 | unsigned long fs,ts; | 3294 | unsigned long fs,ts; |
2340 | tchar sz[20]; | 3295 | tchar sz[20]; |
2341 | ((reader_ui *)_data)->input->sizes(fs,ts); | 3296 | ((reader_ui *)_data)->input->sizes(fs,ts); |
2342 | unsigned long pl = ((reader_ui *)_data)->input->locate(); | 3297 | unsigned long pl = ((reader_ui *)_data)->input->locate(); |
2343 | 3298 | ||
2344 | filename->value(((reader_ui *)_data)->g_filename); | 3299 | filename->value(((reader_ui *)_data)->g_filename); |
2345 | 3300 | ||
2346 | sprintf(sz,"%u",fs); | 3301 | sprintf(sz,"%u",fs); |
2347 | filesize->value(sz); | 3302 | filesize->value(sz); |
2348 | 3303 | ||
2349 | sprintf(sz,"%u",ts); | 3304 | sprintf(sz,"%u",ts); |
2350 | textsize->value(sz); | 3305 | textsize->value(sz); |
2351 | 3306 | ||
2352 | comprat->value(100-(100*fs + (ts >> 1))/ts); | 3307 | comprat->value(100-(100*fs + (ts >> 1))/ts); |
2353 | 3308 | ||
2354 | sprintf(sz,"%u",pl); | 3309 | sprintf(sz,"%u",pl); |
2355 | posn->value(sz); | 3310 | posn->value(sz); |
2356 | 3311 | ||
2357 | frcn->value((100*pl + (ts >> 1))/ts); | 3312 | frcn->value((100*pl + (ts >> 1))/ts); |
2358 | } | 3313 | } |
2359 | infowin->show(); | 3314 | infowin->show(); |
2360 | } | 3315 | } |
2361 | */ | 3316 | */ |
2362 | 3317 | ||
2363 | void QTReaderApp::savebkmks() | 3318 | void QTReaderApp::savebkmks() |
2364 | { | 3319 | { |
2365 | if (pBkmklist != NULL) | 3320 | if (pBkmklist != NULL) |
2366 | { | 3321 | { |
2367 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR, reader->m_string), true); | 3322 | #ifndef USEQPE |
3323 | QDir d = QDir::home(); // "/" | ||
3324 | d.cd(APPDIR); | ||
3325 | QFileInfo fi(d, reader->m_string); | ||
3326 | BkmkFile bf((const char *)fi.absFilePath(), true); | ||
3327 | #else /* USEQPE */ | ||
3328 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR,reader->m_string), true); | ||
3329 | #endif /* USEQPE */ | ||
2368 | bf.write(*pBkmklist); | 3330 | bf.write(*pBkmklist); |
2369 | } | 3331 | } |
2370 | m_fBkmksChanged = false; | 3332 | m_fBkmksChanged = false; |
2371 | } | 3333 | } |
2372 | 3334 | ||
2373 | void QTReaderApp::readfilelist() | 3335 | void QTReaderApp::readfilelist() |
2374 | { | 3336 | { |
2375 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR, ".openfiles")); | 3337 | #ifndef USEQPE |
2376 | qDebug("Reading open files"); | 3338 | QDir d = QDir::home(); // "/" |
3339 | d.cd(APPDIR); | ||
3340 | QFileInfo fi(d, ".openfiles"); | ||
3341 | BkmkFile bf((const char *)fi.absFilePath()); | ||
3342 | #else /* USEQPE */ | ||
3343 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR,".openfiles")); | ||
3344 | #endif /* USEQPE */ | ||
3345 | // qDebug("Reading open files"); | ||
2377 | pOpenlist = bf.readall(); | 3346 | pOpenlist = bf.readall(); |
2378 | if (pOpenlist != NULL) qDebug("...with success"); | 3347 | // if (pOpenlist != NULL) qDebug("...with success"); |
2379 | else qDebug("...without success!"); | 3348 | // else qDebug("...without success!"); |
2380 | } | 3349 | } |
2381 | 3350 | ||
2382 | void QTReaderApp::savefilelist() | 3351 | void QTReaderApp::savefilelist() |
2383 | { | 3352 | { |
2384 | if (pOpenlist != NULL) | 3353 | if (pOpenlist != NULL) |
2385 | { | 3354 | { |
2386 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR, ".openfiles"), true); | 3355 | #ifndef USEQPE |
2387 | qDebug("Writing open files"); | 3356 | QDir d = QDir::home(); // "/" |
3357 | d.cd(APPDIR); | ||
3358 | QFileInfo fi(d, ".openfiles"); | ||
3359 | BkmkFile bf((const char *)fi.absFilePath(), true); | ||
3360 | #else /* USEQPE */ | ||
3361 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR,".openfiles"), true); | ||
3362 | #endif /* USEQPE */ | ||
3363 | //qDebug("Writing open files"); | ||
2388 | bf.write(*pOpenlist); | 3364 | bf.write(*pOpenlist); |
2389 | } | 3365 | } |
2390 | } | 3366 | } |
2391 | 3367 | ||
2392 | void QTReaderApp::readbkmks() | 3368 | void QTReaderApp::readbkmks() |
2393 | { | 3369 | { |
2394 | if (pBkmklist != NULL) | 3370 | if (pBkmklist != NULL) |
2395 | { | 3371 | { |
2396 | delete pBkmklist; | 3372 | delete pBkmklist; |
2397 | } | 3373 | } |
2398 | struct stat fnstat; | 3374 | struct stat fnstat; |
2399 | struct stat bkstat; | 3375 | struct stat bkstat; |
3376 | #ifndef USEQPE | ||
3377 | QDir d = QDir::home(); // "/" | ||
3378 | d.cd(APPDIR); | ||
3379 | QFileInfo fi(d, reader->m_string); | ||
3380 | #endif /* ! USEQPE */ | ||
2400 | if ( | 3381 | if ( |
2401 | stat((const char *)reader->m_lastfile, &fnstat) == 0 | 3382 | stat((const char *)reader->m_lastfile, &fnstat) == 0 |
2402 | && | 3383 | && |
2403 | stat((const char *)Global::applicationFileName(APPDIR, reader->m_string), &bkstat) == 0 | 3384 | #ifndef USEQPE |
3385 | stat((const char *)fi.absFilePath(), &bkstat) == 0 | ||
3386 | #else /* USEQPE */ | ||
3387 | stat((const char *)Global::applicationFileName(APPDIR,reader->m_string), &bkstat) == 0 | ||
3388 | #endif /* USEQPE */ | ||
2404 | ) | 3389 | ) |
2405 | { | 3390 | { |
2406 | if (bkstat.st_mtime < fnstat.st_mtime) | 3391 | if (bkstat.st_mtime < fnstat.st_mtime) |
2407 | { | 3392 | { |
2408 | unlink((const char *)Global::applicationFileName(APPDIR, reader->m_string)); | 3393 | #ifndef USEQPE |
3394 | unlink((const char *)fi.absFilePath()); | ||
3395 | #else /* USEQPE */ | ||
3396 | unlink((const char *)Global::applicationFileName(APPDIR,reader->m_string)); | ||
3397 | #endif /* USEQPE */ | ||
2409 | } | 3398 | } |
2410 | } | 3399 | } |
2411 | 3400 | ||
2412 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR, reader->m_string)); | 3401 | #ifndef USEQPE |
3402 | BkmkFile bf((const char *)fi.absFilePath()); | ||
3403 | #else /* USEQPE */ | ||
3404 | BkmkFile bf((const char *)Global::applicationFileName(APPDIR,reader->m_string)); | ||
3405 | #endif /* USEQPE */ | ||
2413 | 3406 | ||
2414 | pBkmklist = bf.readall(); | 3407 | pBkmklist = bf.readall(); |
2415 | m_fBkmksChanged = bf.upgraded(); | 3408 | m_fBkmksChanged = bf.upgraded(); |
2416 | if (pBkmklist == NULL) | 3409 | if (pBkmklist == NULL) |
2417 | { | 3410 | { |
2418 | pBkmklist = reader->getbkmklist(); | 3411 | pBkmklist = reader->getbkmklist(); |
2419 | } | 3412 | } |
2420 | if (pBkmklist != NULL) | 3413 | if (pBkmklist != NULL) |
2421 | pBkmklist->sort(); | 3414 | pBkmklist->sort(); |
2422 | } | 3415 | } |
2423 | 3416 | ||
2424 | void QTReaderApp::addbkmk() | 3417 | void QTReaderApp::addbkmk() |
2425 | { | 3418 | { |
2426 | m_nRegAction = cAddBkmk; | 3419 | m_nRegAction = cAddBkmk; |
2427 | regEdit->setText(reader->firstword()); | 3420 | regEdit->setText(reader->firstword()); |
2428 | do_regedit(); | 3421 | do_regedit(); |
2429 | } | 3422 | } |
2430 | 3423 | ||
2431 | void QTReaderApp::do_addbkmk(const QString& text) | 3424 | void QTReaderApp::do_addbkmk(const QString& text) |
2432 | { | 3425 | { |
2433 | if (text.isEmpty()) | 3426 | if (text.isEmpty()) |
2434 | { | 3427 | { |
2435 | QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nSelect add again", 1); | 3428 | QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nSelect add again", 1); |
2436 | } | 3429 | } |
2437 | else | 3430 | else |
2438 | { | 3431 | { |
2439 | if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; | 3432 | if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>; |
2440 | #ifdef _UNICODE | 3433 | #ifdef _UNICODE |
2441 | CBuffer buff; | 3434 | CBuffer buff; |
2442 | int i = 0; | 3435 | int i = 0; |
2443 | for (i = 0; i < text.length(); i++) | 3436 | for (i = 0; i < text.length(); i++) |
2444 | { | 3437 | { |
2445 | buff[i] = text[i].unicode(); | 3438 | buff[i] = text[i].unicode(); |
2446 | } | 3439 | } |
2447 | buff[i] = 0; | 3440 | buff[i] = 0; |
2448 | pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate())); | 3441 | pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate())); |
2449 | #else | 3442 | #else |
2450 | pBkmklist->push_front(Bkmk((const tchar*)text, reader->pagelocate())); | 3443 | pBkmklist->push_front(Bkmk((const tchar*)text, reader->pagelocate())); |
2451 | #endif | 3444 | #endif |
2452 | m_fBkmksChanged = true; | 3445 | m_fBkmksChanged = true; |
2453 | pBkmklist->sort(); | 3446 | pBkmklist->sort(); |
2454 | } | 3447 | } |
2455 | } | 3448 | } |
2456 | 3449 | ||
2457 | void QTReaderApp::OnRedraw() | 3450 | void QTReaderApp::OnRedraw() |
2458 | { | 3451 | { |
2459 | if (pBkmklist != NULL) | 3452 | if ((pBkmklist != NULL) && (m_bkmkAvail != NULL)) |
2460 | { | 3453 | { |
2461 | bool found = findNextBookmark(reader->pagelocate()); | 3454 | bool found = findNextBookmark(reader->pagelocate()); |
2462 | m_bkmkAvail->setEnabled(found); | 3455 | m_bkmkAvail->setEnabled(found); |
2463 | } | 3456 | } |
2464 | } | 3457 | } |
2465 | 3458 | ||
2466 | void QTReaderApp::showAnnotation() | 3459 | void QTReaderApp::showAnnotation() |
2467 | { | 3460 | { |
2468 | m_annoWin->setName(toQString(m_anno->name())); | 3461 | m_annoWin->setName(toQString(m_anno->name())); |
2469 | m_annoWin->setAnno(toQString(m_anno->anno())); | 3462 | m_annoWin->setAnno(toQString(m_anno->anno())); |
2470 | m_annoIsEditing = false; | 3463 | m_annoIsEditing = false; |
3464 | #ifdef USEQPE | ||
2471 | Global::showInputMethod(); | 3465 | Global::showInputMethod(); |
3466 | #endif | ||
2472 | editorStack->raiseWidget( m_annoWin ); | 3467 | editorStack->raiseWidget( m_annoWin ); |
2473 | m_annoWin->setFocus(); | 3468 | m_annoWin->setFocus(); |
2474 | } | 3469 | } |
2475 | 3470 | ||
2476 | void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, const QString& line) | 3471 | void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, const QString& line) |
2477 | { | 3472 | { |
2478 | // qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd); | 3473 | //// qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd); |
2479 | 3474 | ||
2480 | if (m_doClipboard) | 3475 | if (m_doClipboard) |
2481 | { | 3476 | { |
2482 | QClipboard* cb = QApplication::clipboard(); | 3477 | QClipboard* cb = QApplication::clipboard(); |
2483 | cb->setText(wrd); | 3478 | cb->setText(wrd); |
3479 | #ifdef USEQPE | ||
2484 | if (wrd.length() > 10) | 3480 | if (wrd.length() > 10) |
2485 | { | 3481 | { |
2486 | Global::statusMessage(wrd.left(8) + ".."); | 3482 | Global::statusMessage(wrd.left(8) + ".."); |
2487 | } | 3483 | } |
2488 | else | 3484 | else |
2489 | { | 3485 | { |
2490 | Global::statusMessage(wrd); | 3486 | Global::statusMessage(wrd); |
2491 | } | 3487 | } |
3488 | #endif | ||
2492 | } | 3489 | } |
2493 | if (m_doAnnotation) | 3490 | if (m_doAnnotation) |
2494 | { | 3491 | { |
2495 | //addAnno(wrd, "Need to be able to edit this", posn); | 3492 | //addAnno(wrd, "Need to be able to edit this", posn); |
2496 | m_annoWin->setName(line); | 3493 | m_annoWin->setName(line); |
2497 | m_annoWin->setAnno(""); | 3494 | m_annoWin->setAnno(""); |
2498 | m_annoWin->setPosn(posn); | 3495 | m_annoWin->setPosn(posn); |
2499 | m_annoIsEditing = true; | 3496 | m_annoIsEditing = true; |
3497 | #ifdef USEQPE | ||
2500 | Global::showInputMethod(); | 3498 | Global::showInputMethod(); |
3499 | #endif | ||
2501 | editorStack->raiseWidget( m_annoWin ); | 3500 | editorStack->raiseWidget( m_annoWin ); |
2502 | } | 3501 | } |
3502 | #ifdef USEQPE | ||
2503 | if (m_doDictionary) | 3503 | if (m_doDictionary) |
2504 | { | 3504 | { |
2505 | if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty()) | 3505 | if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty()) |
2506 | { | 3506 | { |
2507 | QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8()); | 3507 | QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8()); |
2508 | e << wrd; | 3508 | e << wrd; |
2509 | } | 3509 | } |
2510 | } | 3510 | } |
3511 | #endif | ||
2511 | } | 3512 | } |
2512 | 3513 | ||
2513 | void QTReaderApp::OnActionPressed() | 3514 | void QTReaderApp::doAction(ActionTypes a, QKeyEvent* e) |
2514 | { | 3515 | { |
2515 | switch (m_spaceTarget) | 3516 | if (a == 0) |
2516 | { | 3517 | { |
2517 | case cesOpenFile: | 3518 | e->ignore(); |
2518 | { | 3519 | } |
2519 | fileOpen(); | 3520 | else |
2520 | } | 3521 | { |
2521 | break; | 3522 | e->accept(); |
2522 | case cesAutoScroll: | 3523 | //qDebug("Accepted"); |
2523 | { | 3524 | switch (a) |
2524 | reader->setautoscroll(!reader->m_autoScroll); | ||
2525 | setScrollState(reader->m_autoScroll); | ||
2526 | } | ||
2527 | break; | ||
2528 | case cesActionMark: | ||
2529 | { | 3525 | { |
2530 | addbkmk(); | 3526 | case cesOpenFile: |
3527 | { | ||
3528 | fileOpen(); | ||
3529 | } | ||
3530 | break; | ||
3531 | case cesAutoScroll: | ||
3532 | { | ||
3533 | reader->setautoscroll(!reader->m_autoScroll); | ||
3534 | setScrollState(reader->m_autoScroll); | ||
3535 | } | ||
3536 | break; | ||
3537 | case cesActionMark: | ||
3538 | { | ||
3539 | addbkmk(); | ||
3540 | } | ||
3541 | break; | ||
3542 | case cesFullScreen: | ||
3543 | { | ||
3544 | m_actFullscreen->setOn(!m_fullscreen); | ||
3545 | } | ||
3546 | break; | ||
3547 | case cesActionAnno: | ||
3548 | { | ||
3549 | addanno(); | ||
3550 | } | ||
3551 | break; | ||
3552 | case cesZoomIn: | ||
3553 | zoomin(); | ||
3554 | break; | ||
3555 | case cesZoomOut: | ||
3556 | zoomout(); | ||
3557 | break; | ||
3558 | case cesBack: | ||
3559 | reader->goBack(); | ||
3560 | break; | ||
3561 | case cesForward: | ||
3562 | reader->goForward(); | ||
3563 | break; | ||
3564 | case cesHome: | ||
3565 | reader->goHome(); | ||
3566 | break; | ||
3567 | case cesPageUp: | ||
3568 | reader->dopageup(); | ||
3569 | break; | ||
3570 | case cesPageDown: | ||
3571 | reader->dopagedn(); | ||
3572 | break; | ||
3573 | case cesLineUp: | ||
3574 | reader->lineUp(); | ||
3575 | break; | ||
3576 | case cesLineDown: | ||
3577 | reader->lineDown(); | ||
3578 | break; | ||
3579 | case cesStartDoc: | ||
3580 | gotoStart(); | ||
3581 | break; | ||
3582 | case cesEndDoc: | ||
3583 | gotoEnd(); | ||
3584 | break; | ||
3585 | default: | ||
3586 | qDebug("Unknown ActionType:%u", a); | ||
3587 | break; | ||
2531 | } | 3588 | } |
2532 | break; | 3589 | } |
2533 | case cesFullScreen: | 3590 | } |
3591 | |||
3592 | void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); } | ||
3593 | void QTReaderApp::restoreFocus() { reader->setFocus(); } | ||
3594 | |||
3595 | void QTReaderApp::SaveConfig() | ||
3596 | { | ||
3597 | m_nRegAction = cSetConfigName; | ||
3598 | regEdit->setText(reader->m_string); | ||
3599 | do_regedit(); | ||
3600 | } | ||
3601 | |||
3602 | void QTReaderApp::do_saveconfig(const QString& _txt, bool full) | ||
3603 | { | ||
3604 | // qDebug("do_saveconfig:%s", (const char*)_txt); | ||
3605 | #ifdef USEQPE | ||
3606 | QString configname; | ||
3607 | Config::Domain dom; | ||
3608 | |||
3609 | if (full) | ||
3610 | { | ||
3611 | configname = _txt; | ||
3612 | dom = Config::User; | ||
3613 | } | ||
3614 | else | ||
3615 | { | ||
3616 | configname = Global::applicationFileName(APPDIR "/configs", _txt); | ||
3617 | dom = Config::File; | ||
3618 | } | ||
3619 | |||
3620 | Config config(configname, dom); | ||
3621 | config.setGroup( "View" ); | ||
3622 | |||
3623 | #else | ||
3624 | QFileInfo fi; | ||
3625 | if (full) | ||
2534 | { | 3626 | { |
2535 | m_actFullscreen->setOn(true); | 3627 | // qDebug("full:%s", (const char*)_txt); |
3628 | QDir d = QDir::home(); // "/" | ||
3629 | if ( !d.cd(_txt) ) | ||
3630 | { // "/tmp" | ||
3631 | qWarning( "Cannot find the \"~/%s\" directory", (const char*)_txt ); | ||
3632 | d = QDir::home(); | ||
3633 | d.mkdir(_txt); | ||
3634 | d.cd(_txt); | ||
3635 | } | ||
3636 | fi.setFile(d, INIFILE); | ||
2536 | } | 3637 | } |
2537 | break; | 3638 | else |
2538 | default: | ||
2539 | { | 3639 | { |
2540 | qDebug("Unknown ActionType:%u", m_spaceTarget); | 3640 | QDir d = QDir::home(); // "/" |
3641 | if ( !d.cd(APPDIR) ) | ||
3642 | { // "/tmp" | ||
3643 | qWarning( "Cannot find the \"~/" APPDIR "\" directory" ); | ||
3644 | d = QDir::home(); | ||
3645 | d.mkdir(APPDIR); | ||
3646 | d.cd(APPDIR); | ||
3647 | } | ||
3648 | if ( !d.cd("configs") ) | ||
3649 | { // "/tmp" | ||
3650 | qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" ); | ||
3651 | d = QDir::home(); | ||
3652 | d.cd(APPDIR); | ||
3653 | d.mkdir("configs"); | ||
3654 | d.cd("configs"); | ||
3655 | } | ||
3656 | fi.setFile(d, _txt); | ||
2541 | } | 3657 | } |
2542 | break; | 3658 | //qDebug("Path:%s", (const char*)fi.absFilePath()); |
3659 | Config config(fi.absFilePath()); | ||
3660 | #endif | ||
3661 | |||
3662 | |||
3663 | config.writeEntry( "StripCr", reader->bstripcr ); | ||
3664 | config.writeEntry( "AutoFmt", reader->bautofmt ); | ||
3665 | config.writeEntry( "TextFmt", reader->btextfmt ); | ||
3666 | config.writeEntry( "StripHtml", reader->bstriphtml ); | ||
3667 | config.writeEntry( "Dehyphen", reader->bdehyphen ); | ||
3668 | config.writeEntry( "Depluck", reader->bdepluck ); | ||
3669 | config.writeEntry( "Dejpluck", reader->bdejpluck ); | ||
3670 | config.writeEntry( "OneSpace", reader->bonespace ); | ||
3671 | config.writeEntry( "Unindent", reader->bunindent ); | ||
3672 | config.writeEntry( "Repara", reader->brepara ); | ||
3673 | config.writeEntry( "DoubleSpace", reader->bdblspce ); | ||
3674 | config.writeEntry( "Indent", reader->bindenter ); | ||
3675 | config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) ); | ||
3676 | config.writeEntry( "ScrollDelay", reader->m_delay); | ||
3677 | if (full) | ||
3678 | { | ||
3679 | config.writeEntry("Debounce", m_debounce); | ||
3680 | config.writeEntry("FloatDialogs", m_bFloatingDialog); | ||
3681 | reader->m_lastposn = reader->pagelocate(); | ||
3682 | config.writeEntry( "LastFile", reader->m_lastfile ); | ||
3683 | config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); | ||
3684 | } | ||
3685 | config.writeEntry( "PageMode", reader->m_bpagemode ); | ||
3686 | config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); | ||
3687 | config.writeEntry( "SwapMouse", reader->m_swapmouse); | ||
3688 | config.writeEntry( "Fontname", reader->m_fontname ); | ||
3689 | config.writeEntry( "Encoding", reader->m_encd ); | ||
3690 | config.writeEntry( "CharSpacing", reader->m_charpc ); | ||
3691 | config.writeEntry( "Overlap", (int)(reader->m_overlap) ); | ||
3692 | config.writeEntry( "Margin", (int)reader->m_border ); | ||
3693 | config.writeEntry( "TargetApp", m_targetapp ); | ||
3694 | config.writeEntry( "TargetMsg", m_targetmsg ); | ||
3695 | #ifdef _SCROLLPIPE | ||
3696 | config.writeEntry( "PipeTarget", reader->m_pipetarget ); | ||
3697 | config.writeEntry( "PauseAfterPara", reader->m_pauseAfterEachPara ); | ||
3698 | #endif | ||
3699 | config.writeEntry( "TwoTouch", m_twoTouch ); | ||
3700 | config.writeEntry( "Annotation", m_doAnnotation); | ||
3701 | config.writeEntry( "Dictionary", m_doDictionary); | ||
3702 | config.writeEntry( "Clipboard", m_doClipboard); | ||
3703 | config.writeEntry( "SpaceTarget", m_spaceTarget); | ||
3704 | config.writeEntry( "EscapeTarget", m_escapeTarget); | ||
3705 | config.writeEntry( "ReturnTarget", m_returnTarget); | ||
3706 | config.writeEntry( "LeftTarget", m_leftTarget); | ||
3707 | config.writeEntry( "RightTarget", m_rightTarget); | ||
3708 | config.writeEntry( "UpTarget", m_upTarget); | ||
3709 | config.writeEntry( "DownTarget", m_downTarget); | ||
3710 | config.writeEntry("LeftScroll", m_leftScroll); | ||
3711 | config.writeEntry("RightScroll", m_rightScroll); | ||
3712 | config.writeEntry("UpScroll", m_upScroll); | ||
3713 | config.writeEntry("DownScroll", m_downScroll); | ||
3714 | #ifdef REPALM | ||
3715 | config.writeEntry( "Repalm", reader->brepalm ); | ||
3716 | #endif | ||
3717 | config.writeEntry( "Remap", reader->bremap ); | ||
3718 | config.writeEntry( "Peanut", reader->bpeanut ); | ||
3719 | config.writeEntry( "MakeBold", reader->bmakebold ); | ||
3720 | config.writeEntry( "Continuous", reader->m_continuousDocument ); | ||
3721 | config.writeEntry( "FullJust", reader->bfulljust ); | ||
3722 | config.writeEntry( "ExtraSpace", reader->getextraspace() ); | ||
3723 | config.writeEntry( "ExtraLead", reader->getlead() ); | ||
3724 | config.writeEntry( "Basesize", (int)reader->getBaseSize()); | ||
3725 | config.writeEntry( "RequestorFontChange", m_propogatefontchange); | ||
3726 | if (full) | ||
3727 | { | ||
3728 | config.setGroup( "Toolbar" ); | ||
3729 | config.writeEntry("Movable", m_tbmovesave); | ||
3730 | config.writeEntry("Policy", m_tbpolsave); | ||
3731 | config.writeEntry("Position", m_tbposition); | ||
3732 | #ifndef USEQPE | ||
3733 | config.setGroup( "Geometry" ); | ||
3734 | config.writeEntry( "x", x() ); | ||
3735 | config.writeEntry( "y", y() ); | ||
3736 | config.writeEntry( "width", width() ); | ||
3737 | config.writeEntry( "height", height() ); | ||
3738 | #endif | ||
2543 | } | 3739 | } |
2544 | } | 3740 | } |
2545 | 3741 | ||
2546 | void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); } | ||
2547 | void QTReaderApp::restoreFocus() { reader->setFocus(); } | ||
2548 | |||
2549 | /* | 3742 | /* |
2550 | void QTReaderApp::setstate(unsigned char* _sd, unsigned short _sdlen) | 3743 | void QTReaderApp::setstate(unsigned char* _sd, unsigned short _sdlen) |
2551 | { | 3744 | { |
2552 | unsigned short sdlen; | 3745 | unsigned short sdlen; |
2553 | memcpy(&sdlen, _sd, sizeof(sdlen)); | 3746 | memcpy(&sdlen, _sd, sizeof(sdlen)); |
2554 | sdlen -= sizeof(sdlen); | 3747 | sdlen -= sizeof(sdlen); |
2555 | _sd += sizeof(sdlen); | 3748 | _sd += sizeof(sdlen); |
2556 | statedata* sd; | 3749 | statedata* sd; |
2557 | char* data; | 3750 | char* data; |
2558 | if (sdlen < sizeof(statedata)+1) | 3751 | if (sdlen < sizeof(statedata)+1) |
2559 | { | 3752 | { |
2560 | sdlen = sizeof(statedata)+1; | 3753 | sdlen = sizeof(statedata)+1; |
2561 | } | 3754 | } |
2562 | data = new char[sdlen]; | 3755 | data = new char[sdlen]; |
2563 | sd = (statedata*)data; | 3756 | sd = (statedata*)data; |
2564 | memcpy(sd, _sd, sdlen); | 3757 | memcpy(sd, _sd, sdlen); |
2565 | data[sdlen] = 0; | 3758 | data[sdlen] = 0; |
2566 | reader->setstate(*sd); | 3759 | reader->setstate(*sd); |
2567 | delete [] data; | 3760 | delete [] data; |
2568 | } | 3761 | } |
2569 | 3762 | ||
2570 | void QTReaderApp::getstate(unsigned char*& data, unsigned short& len) | 3763 | void QTReaderApp::getstate(unsigned char*& data, unsigned short& len) |
2571 | { | 3764 | { |
2572 | unsigned char* olddata = data; | 3765 | unsigned char* olddata = data; |
2573 | unsigned short oldlen = len; | 3766 | unsigned short oldlen = len; |
2574 | len = oldlen+sizeof(unsigned short)+sizeof(statedata)+reader->m_fontname.length(); | 3767 | len = oldlen+sizeof(unsigned short)+sizeof(statedata)+reader->m_fontname.length(); |
2575 | data = new unsigned char[len]; | 3768 | data = new unsigned char[len]; |
2576 | memcpy(data, olddata, oldlen); | 3769 | memcpy(data, olddata, oldlen); |
2577 | delete [] olddata; | 3770 | delete [] olddata; |
2578 | memcpy(data+oldlen, &len, sizeof(len)); | 3771 | memcpy(data+oldlen, &len, sizeof(len)); |
2579 | statedata* sd = (statedata*)(data+oldlen+sizeof(unsigned short)); | 3772 | statedata* sd = (statedata*)(data+oldlen+sizeof(unsigned short)); |
2580 | 3773 | ||
2581 | sd->bstripcr = reader->bstripcr; | 3774 | sd->bstripcr = reader->bstripcr; |
2582 | sd->btextfmt = reader->btextfmt; | 3775 | sd->btextfmt = reader->btextfmt; |
2583 | sd->bautofmt = reader->bautofmt; | 3776 | sd->bautofmt = reader->bautofmt; |
2584 | sd->bstriphtml = reader->bstriphtml; | 3777 | sd->bstriphtml = reader->bstriphtml; |
2585 | sd->bpeanut = reader->bpeanut; | 3778 | sd->bpeanut = reader->bpeanut; |
2586 | sd->bdehyphen = reader->bdehyphen; | 3779 | sd->bdehyphen = reader->bdehyphen; |
3780 | sd->bdepluck = reader->bdepluck; | ||
3781 | sd->bdejpluck = reader->bdejpluck; | ||
2587 | sd->bonespace = reader->bonespace; | 3782 | sd->bonespace = reader->bonespace; |
2588 | sd->bunindent = reader->bunindent; | 3783 | sd->bunindent = reader->bunindent; |
2589 | sd->brepara = reader->brepara; | 3784 | sd->brepara = reader->brepara; |
2590 | sd->bdblspce = reader->bdblspce; | 3785 | sd->bdblspce = reader->bdblspce; |
2591 | sd->m_bpagemode = reader->m_bpagemode; | 3786 | sd->m_bpagemode = reader->m_bpagemode; |
2592 | sd->m_navkeys = reader->m_navkeys; | ||
2593 | sd->m_bMonoSpaced = reader->m_bMonoSpaced; | 3787 | sd->m_bMonoSpaced = reader->m_bMonoSpaced; |
2594 | sd->bremap = reader->bremap; | 3788 | sd->bremap = reader->bremap; |
2595 | sd->bmakebold = reader->bmakebold; | 3789 | sd->bmakebold = reader->bmakebold; |
2596 | sd->Continuous = reader->m_continuousDocument; | 3790 | sd->Continuous = reader->m_continuousDocument; |
2597 | #ifdef REPALM | 3791 | #ifdef REPALM |
2598 | sd->brepalm = reader->brepalm; | 3792 | sd->brepalm = reader->brepalm; |
2599 | #endif | 3793 | #endif |
2600 | sd->bindenter = reader->bindenter; | 3794 | sd->bindenter = reader->bindenter; |
2601 | sd->m_textsize = reader->m_textsize; //reader->m_fontControl.currentsize() | 3795 | sd->m_textsize = reader->m_textsize; //reader->m_fontControl.currentsize() |
2602 | sd->m_encd = reader->m_encd; | 3796 | sd->m_encd = reader->m_encd; |
2603 | sd->m_charpc = reader->m_charpc; | 3797 | sd->m_charpc = reader->m_charpc; |
2604 | strcpy(sd->m_fontname, reader->m_fontname.latin1()); | 3798 | strcpy(sd->m_fontname, reader->m_fontname.latin1()); |
2605 | } | 3799 | } |
2606 | */ | 3800 | */ |
3801 | #ifdef _SCRIPT | ||
3802 | void QTReaderApp::RunScript() | ||
3803 | { | ||
3804 | fileBrowser* fb = new fileBrowser(this,"OpieReader",!m_bFloatingDialog, | ||
3805 | 0, | ||
3806 | // WStyle_Customize | WStyle_NoBorderEx, | ||
3807 | "*", Global::applicationFileName(APPDIR "/scripts", "")); | ||
3808 | |||
3809 | QString fn; | ||
3810 | if (fb->exec()) | ||
3811 | { | ||
3812 | fn = fb->fileList[0]; | ||
3813 | } | ||
3814 | delete fb; | ||
3815 | if ( !fn.isEmpty() && fork() == 0 ) | ||
3816 | { | ||
3817 | execlp((const char *)fn,(const char *)fn,NULL); | ||
3818 | } | ||
3819 | } | ||
3820 | |||
3821 | void QTReaderApp::SaveScript(const char* sname) | ||
3822 | { | ||
3823 | FILE* f = fopen(sname,"w"); | ||
3824 | if (f != NULL) | ||
3825 | { | ||
3826 | #ifdef OPIE | ||
3827 | fprintf(f, "#!/bin/sh\nmsg() {\n\tqcop QPE/Application/reader \"$1\" \"$2\" \"$3\"\n}\n"); | ||
3828 | #else | ||
3829 | fprintf(f, "#!/bin/bash\nmsg() {\n\tqcop QPE/Application/uqtreader \"$1\" \"$2\" \"$3\"\n}\n"); | ||
3830 | #endif | ||
3831 | fprintf(f, "msg \"Update(int)\" 0\n"); | ||
3832 | fprintf(f, "msg \"Layout/StripCR(int)\" %d\n", (reader->bstripcr) ? 1:0); | ||
3833 | if (reader->btextfmt) fprintf(f, "msg \"Markup(QString)\" \"Text\"\n"); | ||
3834 | else if (reader->bautofmt) fprintf(f, "msg \"Markup(QString)\" \"Auto\"\n"); | ||
3835 | else if (reader->bstriphtml) fprintf(f, "msg \"Markup(QString)\" \"HTML\"\n"); | ||
3836 | else if (reader->bpeanut) fprintf(f, "msg \"Markup(QString)\" \"Peanut/PML\"\n"); | ||
3837 | else fprintf(f, "msg \"Markup(QString)\" \"None\"\n"); | ||
3838 | fprintf(f, "msg \"Layout/Dehyphen(int)\" %d\n", (reader->bdehyphen) ? 1:0); | ||
3839 | fprintf(f, "msg \"Layout/Depluck(int)\" %d\n", (reader->bdepluck) ? 1:0); | ||
3840 | fprintf(f, "msg \"Layout/Dejpluck(int)\" %d\n", (reader->bdejpluck) ? 1:0); | ||
3841 | fprintf(f, "msg \"Layout/SingleSpace(int)\" %d\n", (reader->bonespace) ? 1:0); | ||
3842 | fprintf(f, "msg \"Layout/Unindent(int)\" %d\n", (reader->bunindent) ? 1:0); | ||
3843 | fprintf(f, "msg \"Layout/Re-paragraph(int)\" %d\n", (reader->brepara) ? 1:0); | ||
3844 | fprintf(f, "msg \"Layout/DoubleSpace(int)\" %d\n", (reader->bdblspce) ? 1:0); | ||
3845 | fprintf(f, "msg \"Layout/Indent(int)\" %d\n", reader->bindenter); | ||
3846 | fprintf(f, "msg \"Format/SetFont(QString,int)\" \"%s\" %d\n", (const char*)reader->m_fontname, reader->m_textsize); | ||
3847 | fprintf(f, "msg \"Navigation/Page/LineScroll(int)\" %d\n", (reader->m_bpagemode) ? 1:0); | ||
3848 | fprintf(f, "msg \"Format/Ideogram/Word(int)\" %d\n", (reader->m_bMonoSpaced) ? 1:0); | ||
3849 | fprintf(f, "msg \"Format/Encoding(QString)\" \"%s\"\n", (const char*)m_EncodingAction[reader->m_encd]->text()); | ||
3850 | fprintf(f, "msg \"Format/SetWidth(int)\" %d\n", reader->m_charpc); | ||
3851 | fprintf(f, "msg \"Navigation/SetOverlap(int)\" %d\n", reader->m_overlap); | ||
3852 | fprintf(f, "msg \"Layout/Remap(int)\" %d\n", (reader->bremap) ? 1:0); | ||
3853 | fprintf(f, "msg \"Layout/Embolden(int)\" %d\n", (reader->bmakebold) ? 1:0); | ||
3854 | fprintf(f, "msg \"File/Continuous(int)\" %d\n", (reader->m_continuousDocument) ? 1:0); | ||
3855 | fprintf(f, "msg \"File/SetDictionary(QString)\" \"%s/%s\"\n", (const char *)m_targetapp, (const char *)m_targetmsg); | ||
3856 | #ifdef _SCROLLPIPE | ||
3857 | fprintf(f, "msg \"File/SetScrollTarget(QString)\" \"%s\"\n", (const char *)reader->m_pipetarget); | ||
3858 | #endif | ||
3859 | fprintf(f, "msg \"File/Two/OneTouch(int)\" %d\n", (m_twoTouch) ? 1:0); | ||
3860 | fprintf(f, "msg \"Target/Annotation(int)\" %d\n", (m_doAnnotation) ? 1:0); | ||
3861 | fprintf(f, "msg \"Target/Dictionary(int)\" %d\n", (m_doDictionary) ? 1:0); | ||
3862 | fprintf(f, "msg \"Target/Clipboard(int)\" %d\n", (m_doClipboard) ? 1:0); | ||
3863 | fprintf(f, "msg \"File/Action(QString)\" \"%s\"\n", (const char *)m_buttonAction[m_spaceTarget]->text()); | ||
3864 | fprintf(f, "msg \"Update(int)\" 1\n"); | ||
3865 | fprintf(f, "msg \"info(QString)\" \"All Done\"\n"); | ||
3866 | fclose(f); | ||
3867 | chmod(sname, S_IXUSR | S_IXGRP | S_IXOTH); | ||
3868 | } | ||
3869 | } | ||
3870 | |||
3871 | void QTReaderApp::SaveConfig() | ||
3872 | { | ||
3873 | m_nRegAction = cSetConfigName; | ||
3874 | regEdit->setText(""); | ||
3875 | do_regedit(); | ||
3876 | } | ||
3877 | |||
3878 | void QTReaderApp::do_saveconfig(const QString& _txt) | ||
3879 | { | ||
3880 | SaveScript(Global::applicationFileName(APPDIR "/scripts", _txt)); | ||
3881 | } | ||
3882 | #endif | ||
3883 | |||
3884 | #ifdef _SCROLLPIPE | ||
3885 | void QTReaderApp::setpipetarget() | ||
3886 | { | ||
3887 | m_nRegAction = cSetPipeTarget; | ||
3888 | QString text = (reader->m_pipetarget.isEmpty()) ? QString("") : reader->m_pipetarget; | ||
3889 | regEdit->setText(text); | ||
3890 | do_regedit(); | ||
3891 | } | ||
3892 | |||
3893 | void QTReaderApp::do_setpipetarget(const QString& _txt) | ||
3894 | { | ||
3895 | reader->m_pipetarget = _txt; | ||
3896 | } | ||
3897 | |||
3898 | void QTReaderApp::setpause(bool sfs) | ||
3899 | { | ||
3900 | reader->m_pauseAfterEachPara = sfs; | ||
3901 | } | ||
3902 | #endif | ||
3903 | |||
3904 | void QTReaderApp::monospace(bool _b) | ||
3905 | { | ||
3906 | reader->setmono(_b); | ||
3907 | } | ||
3908 | |||
3909 | bool QTReaderApp::readconfig(const QString& _txt, bool full=false) | ||
3910 | { | ||
3911 | #ifdef USEQPE | ||
3912 | QString configname; | ||
3913 | Config::Domain dom; | ||
3914 | |||
3915 | if (full) | ||
3916 | { | ||
3917 | configname = _txt; | ||
3918 | dom = Config::User; | ||
3919 | } | ||
3920 | else | ||
3921 | { | ||
3922 | configname = Global::applicationFileName(APPDIR "/configs", _txt); | ||
3923 | QFileInfo fm(configname); | ||
3924 | if ( !fm.exists() ) return false; | ||
3925 | dom = Config::File; | ||
3926 | } | ||
3927 | |||
3928 | Config config(configname, dom); | ||
3929 | config.setGroup( "View" ); | ||
3930 | |||
3931 | #else | ||
3932 | QFileInfo fi; | ||
3933 | if (full) | ||
3934 | { | ||
3935 | QDir d = QDir::home(); // "/" | ||
3936 | if ( !d.cd(_txt) ) | ||
3937 | { // "/tmp" | ||
3938 | qWarning( "Cannot find the \"~/%s\" directory", (const char*)_txt ); | ||
3939 | d = QDir::home(); | ||
3940 | d.mkdir(_txt); | ||
3941 | d.cd(_txt); | ||
3942 | } | ||
3943 | fi.setFile(d, INIFILE); | ||
3944 | } | ||
3945 | else | ||
3946 | { | ||
3947 | QDir d = QDir::home(); // "/" | ||
3948 | if ( !d.cd(APPDIR) ) | ||
3949 | { // "/tmp" | ||
3950 | qWarning( "Cannot find the \"~/" APPDIR "\" directory" ); | ||
3951 | d = QDir::home(); | ||
3952 | d.mkdir(APPDIR); | ||
3953 | d.cd(APPDIR); | ||
3954 | } | ||
3955 | if ( !d.cd("configs") ) | ||
3956 | { // "/tmp" | ||
3957 | qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" ); | ||
3958 | d = QDir::home(); | ||
3959 | d.mkdir("configs"); | ||
3960 | d.cd("configs"); | ||
3961 | } | ||
3962 | fi.setFile(d, _txt); | ||
3963 | } | ||
3964 | #ifdef _WINDOWS | ||
3965 | struct stat fnstat; | ||
3966 | if (stat((const char *)reader->m_lastfile, &fnstat) == 0) return false; // get round fileinfo bug on windows | ||
3967 | #else | ||
3968 | if (!fi.exists()) return false; | ||
3969 | #endif | ||
3970 | Config config(fi.absFilePath()); | ||
3971 | #endif | ||
3972 | if (full) | ||
3973 | { | ||
3974 | config.setGroup("Toolbar"); | ||
3975 | m_tbmovesave = m_tbmove = config.readBoolEntry("Movable", false); | ||
3976 | m_tbpolsave = m_tbpol = (ToolbarPolicy)config.readNumEntry("Policy", 1); | ||
3977 | m_tbposition = (ToolBarDock)config.readNumEntry("Position", 2); | ||
3978 | } | ||
3979 | config.setGroup( "View" ); | ||
3980 | m_bFloatingDialog = config.readBoolEntry("FloatDialogs", false); | ||
3981 | reader->bstripcr = config.readBoolEntry( "StripCr", true ); | ||
3982 | reader->bfulljust = config.readBoolEntry( "FullJust", false ); | ||
3983 | reader->setextraspace(config.readNumEntry( "ExtraSpace", 0 )); | ||
3984 | reader->setlead(config.readNumEntry( "ExtraLead", 0 )); | ||
3985 | reader->btextfmt = config.readBoolEntry( "TextFmt", false ); | ||
3986 | reader->bautofmt = config.readBoolEntry( "AutoFmt", true ); | ||
3987 | reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); | ||
3988 | reader->bpeanut = config.readBoolEntry( "Peanut", false ); | ||
3989 | reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); | ||
3990 | reader->bdepluck = config.readBoolEntry( "Depluck", false ); | ||
3991 | reader->bdejpluck = config.readBoolEntry( "Dejpluck", false ); | ||
3992 | reader->bonespace = config.readBoolEntry( "OneSpace", false ); | ||
3993 | reader->bunindent = config.readBoolEntry( "Unindent", false ); | ||
3994 | reader->brepara = config.readBoolEntry( "Repara", false ); | ||
3995 | reader->bdblspce = config.readBoolEntry( "DoubleSpace", false ); | ||
3996 | reader->bindenter = config.readNumEntry( "Indent", 0 ); | ||
3997 | reader->m_textsize = config.readNumEntry( "FontSize", 12 ); | ||
3998 | reader->m_delay = config.readNumEntry( "ScrollDelay", 5184); | ||
3999 | if (full) | ||
4000 | { | ||
4001 | reader->m_lastfile = config.readEntry( "LastFile", QString::null ); | ||
4002 | reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); | ||
4003 | } | ||
4004 | reader->m_bpagemode = config.readBoolEntry( "PageMode", true ); | ||
4005 | reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false); | ||
4006 | reader->m_swapmouse = config.readBoolEntry( "SwapMouse", false); | ||
4007 | reader->m_fontname = config.readEntry( "Fontname", "helvetica" ); | ||
4008 | reader->m_encd = config.readNumEntry( "Encoding", 0 ); | ||
4009 | reader->m_charpc = config.readNumEntry( "CharSpacing", 100 ); | ||
4010 | reader->m_overlap = config.readNumEntry( "Overlap", 0 ); | ||
4011 | reader->m_border = config.readNumEntry( "Margin", 6 ); | ||
4012 | #ifdef REPALM | ||
4013 | reader->brepalm = config.readBoolEntry( "Repalm", true ); | ||
4014 | #endif | ||
4015 | reader->bremap = config.readBoolEntry( "Remap", true ); | ||
4016 | reader->bmakebold = config.readBoolEntry( "MakeBold", false ); | ||
4017 | reader->setContinuous(config.readBoolEntry( "Continuous", true )); | ||
4018 | m_targetapp = config.readEntry( "TargetApp", QString::null ); | ||
4019 | m_targetmsg = config.readEntry( "TargetMsg", QString::null ); | ||
4020 | #ifdef _SCROLLPIPE | ||
4021 | reader->m_pipetarget = config.readEntry( "PipeTarget", QString::null ); | ||
4022 | reader->m_pauseAfterEachPara = config.readBoolEntry( "PauseAfterPara", true ); | ||
4023 | #endif | ||
4024 | m_twoTouch = config.readBoolEntry( "TwoTouch", false); | ||
4025 | m_doAnnotation = config.readBoolEntry( "Annotation", false); | ||
4026 | m_doDictionary = config.readBoolEntry( "Dictionary", false); | ||
4027 | m_doClipboard = config.readBoolEntry( "Clipboard", false); | ||
4028 | m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll); | ||
4029 | m_escapeTarget = (ActionTypes)config.readNumEntry("EscapeTarget", cesNone); | ||
4030 | m_returnTarget = (ActionTypes)config.readNumEntry("ReturnTarget", cesFullScreen); | ||
4031 | m_leftTarget = (ActionTypes)config.readNumEntry("LeftTarget", cesZoomOut); | ||
4032 | m_rightTarget = (ActionTypes)config.readNumEntry("RightTarget", cesZoomIn); | ||
4033 | m_upTarget = (ActionTypes)config.readNumEntry("UpTarget", cesPageUp); | ||
4034 | m_downTarget = (ActionTypes)config.readNumEntry("DownTarget", cesPageDown); | ||
4035 | |||
4036 | m_leftScroll = config.readBoolEntry("LeftScroll", false); | ||
4037 | m_rightScroll = config.readBoolEntry("RightScroll", false); | ||
4038 | m_upScroll = config.readBoolEntry("UpScroll", true); | ||
4039 | m_downScroll = config.readBoolEntry("DownScroll", true); | ||
4040 | m_propogatefontchange = config.readBoolEntry( "RequestorFontChange", false); | ||
4041 | reader->setBaseSize(config.readNumEntry( "Basesize", 10 )); | ||
4042 | reader->setTwoTouch(m_twoTouch); | ||
4043 | |||
4044 | m_touch_action->setOn(m_twoTouch); | ||
4045 | m_setmono_action->setOn(reader->m_bMonoSpaced); | ||
4046 | setfontHelper(reader->m_fontname); | ||
4047 | if (full) | ||
4048 | { | ||
4049 | addtoolbars(&config); | ||
4050 | } | ||
4051 | reader->setfilter(reader->getfilter()); | ||
4052 | reader->refresh(); | ||
4053 | return true; | ||
4054 | } | ||
4055 | |||
4056 | bool QTReaderApp::PopulateConfig(const char* tgtdir) | ||
4057 | { | ||
4058 | bkmkselector->clear(); | ||
4059 | bkmkselector->setText("Cancel"); | ||
4060 | #ifndef USEQPE | ||
4061 | int cnt = 0; | ||
4062 | |||
4063 | QDir d = QDir::home(); // "/" | ||
4064 | if ( !d.cd(APPDIR) ) { // "/tmp" | ||
4065 | qWarning( "Cannot find the \"~/" APPDIR "\" directory" ); | ||
4066 | d = QDir::home(); | ||
4067 | d.mkdir(APPDIR); | ||
4068 | d.cd(APPDIR); | ||
4069 | } | ||
4070 | if ( !d.cd(tgtdir) ) { // "/tmp" | ||
4071 | qWarning( "Cannot find the \"~/" APPDIR "/%s\" directory", tgtdir ); | ||
4072 | d = QDir::home(); | ||
4073 | d.mkdir(tgtdir); | ||
4074 | d.cd(tgtdir); | ||
4075 | } | ||
4076 | d.setFilter( QDir::Files | QDir::NoSymLinks ); | ||
4077 | // d.setSorting( QDir::Size | QDir::Reversed ); | ||
4078 | |||
4079 | const QFileInfoList *list = d.entryInfoList(); | ||
4080 | QFileInfoListIterator it( *list ); // create list iterator | ||
4081 | QFileInfo *fi; // pointer for traversing | ||
4082 | |||
4083 | while ( (fi=it.current()) ) { // for each file... | ||
4084 | |||
4085 | bkmkselector->insertItem(fi->fileName()); | ||
4086 | cnt++; | ||
4087 | |||
4088 | //qDebug( "%10li %s", fi->size(), fi->fileName().data() ); | ||
4089 | ++it; // goto next list element | ||
4090 | } | ||
4091 | |||
4092 | #else /* USEQPE */ | ||
4093 | int cnt = 0; | ||
4094 | DIR *d; | ||
4095 | char* finaldir; | ||
4096 | finaldir = new char[strlen(APPDIR)+1+strlen(tgtdir)+1]; | ||
4097 | strcpy(finaldir, APPDIR); | ||
4098 | strcat(finaldir, "/"); | ||
4099 | strcat(finaldir, tgtdir); | ||
4100 | d = opendir((const char *)Global::applicationFileName(finaldir,"")); | ||
4101 | |||
4102 | while(1) | ||
4103 | { | ||
4104 | struct dirent* de; | ||
4105 | struct stat buf; | ||
4106 | de = readdir(d); | ||
4107 | if (de == NULL) break; | ||
4108 | |||
4109 | if (lstat((const char *)Global::applicationFileName(finaldir,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) | ||
4110 | { | ||
4111 | bkmkselector->insertItem(de->d_name); | ||
4112 | cnt++; | ||
4113 | } | ||
4114 | } | ||
4115 | delete [] finaldir; | ||
4116 | closedir(d); | ||
4117 | #endif | ||
4118 | return (cnt > 0); | ||
4119 | } | ||
4120 | |||
4121 | void QTReaderApp::LoadConfig() | ||
4122 | { | ||
4123 | if (PopulateConfig("configs")) | ||
4124 | { | ||
4125 | editorStack->raiseWidget( bkmkselector ); | ||
4126 | hidetoolbars(); | ||
4127 | m_nBkmkAction = cLdConfig; | ||
4128 | } | ||
4129 | else | ||
4130 | QMessageBox::information(this, PROGNAME, "No config files"); | ||
4131 | } | ||
4132 | |||
4133 | void QTReaderApp::TidyConfig() | ||
4134 | { | ||
4135 | if (PopulateConfig("configs")) | ||
4136 | { | ||
4137 | editorStack->raiseWidget( bkmkselector ); | ||
4138 | hidetoolbars(); | ||
4139 | m_nBkmkAction = cRmConfig; | ||
4140 | } | ||
4141 | else | ||
4142 | QMessageBox::information(this, PROGNAME, "No config files"); | ||
4143 | } | ||
4144 | |||
4145 | void QTReaderApp::ExportLinks() | ||
4146 | { | ||
4147 | if (PopulateConfig("urls")) | ||
4148 | { | ||
4149 | editorStack->raiseWidget( bkmkselector ); | ||
4150 | hidetoolbars(); | ||
4151 | m_nBkmkAction = cExportLinks; | ||
4152 | } | ||
4153 | else | ||
4154 | QMessageBox::information(this, PROGNAME, "No url files"); | ||
4155 | } | ||
4156 | |||
4157 | void QTReaderApp::OnURLSelected(const QString& href) | ||
4158 | { | ||
4159 | CURLDialog* urld = new CURLDialog(href, false, this); | ||
4160 | urld->clipboard(m_url_clipboard); | ||
4161 | urld->localfile(m_url_localfile); | ||
4162 | urld->globalfile(m_url_globalfile); | ||
4163 | if (urld->exec()) | ||
4164 | { | ||
4165 | m_url_clipboard = urld->clipboard(); | ||
4166 | m_url_localfile = urld->localfile(); | ||
4167 | m_url_globalfile = urld->globalfile(); | ||
4168 | if (m_url_clipboard) | ||
4169 | { | ||
4170 | QClipboard* cb = QApplication::clipboard(); | ||
4171 | cb->setText(href); | ||
4172 | qDebug("<a href=\"%s\">%s</a>", (const char*)href, (const char*)href); | ||
4173 | } | ||
4174 | if (m_url_localfile) | ||
4175 | { | ||
4176 | writeUrl(reader->m_string, href); | ||
4177 | } | ||
4178 | if (m_url_globalfile) | ||
4179 | { | ||
4180 | writeUrl("GlobalURLFile", href); | ||
4181 | } | ||
4182 | } | ||
4183 | delete urld; | ||
4184 | } | ||
4185 | |||
4186 | void QTReaderApp::writeUrl(const QString& file, const QString& href) | ||
4187 | { | ||
4188 | QString filename; | ||
4189 | #ifdef USEQPE | ||
4190 | filename = Global::applicationFileName(APPDIR "/urls", file); | ||
4191 | #else | ||
4192 | QFileInfo fi; | ||
4193 | QDir d = QDir::home(); // "/" | ||
4194 | if ( !d.cd(APPDIR) ) | ||
4195 | { // "/tmp" | ||
4196 | qWarning( "Cannot find the \"~/" APPDIR "\" directory" ); | ||
4197 | d = QDir::home(); | ||
4198 | d.mkdir(APPDIR); | ||
4199 | d.cd(APPDIR); | ||
4200 | } | ||
4201 | if ( !d.cd("urls") ) | ||
4202 | { // "/tmp" | ||
4203 | qWarning( "Cannot find the \"~/" APPDIR "/urls\" directory" ); | ||
4204 | d = QDir::home(); | ||
4205 | d.cd(APPDIR); | ||
4206 | d.mkdir("urls"); | ||
4207 | d.cd("urls"); | ||
4208 | } | ||
4209 | fi.setFile(d, file); | ||
4210 | filename = fi.absFilePath(); | ||
4211 | #endif | ||
4212 | FILE* fout = fopen(filename, "a"); | ||
4213 | if (fout != NULL) | ||
4214 | { | ||
4215 | fprintf(fout, "<p><a href=\"%s\">%s</a>\n", (const char*)href, (const char*)href); | ||
4216 | fclose(fout); | ||
4217 | } | ||
4218 | else | ||
4219 | { | ||
4220 | QMessageBox::warning(this, PROGNAME, "Problem with writing URL"); | ||
4221 | } | ||
4222 | } | ||
diff --git a/noncore/apps/opie-reader/QTReaderApp.h b/noncore/apps/opie-reader/QTReaderApp.h index cb33e4a..2765d47 100644 --- a/noncore/apps/opie-reader/QTReaderApp.h +++ b/noncore/apps/opie-reader/QTReaderApp.h | |||
@@ -1,291 +1,442 @@ | |||
1 | /********************************************************************** | 1 | /********************************************************************** |
2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. | 2 | ** Copyright (C) 2000 Trolltech AS. All rights reserved. |
3 | ** | 3 | ** |
4 | ** This file is part of Qt Palmtop Environment. | 4 | ** This file is part of Qt Palmtop Environment. |
5 | ** | 5 | ** |
6 | ** This file may be distributed and/or modified under the terms of the | 6 | ** This file may be distributed and/or modified under the terms of the |
7 | ** GNU General Public License version 2 as published by the Free Software | 7 | ** GNU General Public License version 2 as published by the Free Software |
8 | ** Foundation and appearing in the file LICENSE.GPL included in the | 8 | ** Foundation and appearing in the file LICENSE.GPL included in the |
9 | ** packaging of this file. | 9 | ** packaging of this file. |
10 | ** | 10 | ** |
11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE | 11 | ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE |
12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. | 12 | ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. |
13 | ** | 13 | ** |
14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. | 14 | ** See http://www.trolltech.com/gpl/ for GPL licensing information. |
15 | ** | 15 | ** |
16 | ** Contact info@trolltech.com if any conditions of this licensing are | 16 | ** Contact info@trolltech.com if any conditions of this licensing are |
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | #ifndef __QTREADERAPP_H | 20 | #ifndef __QTREADERAPP_H |
21 | #define __QTREADERAPP_H | 21 | #define __QTREADERAPP_H |
22 | 22 | ||
23 | //#define _SCROLLPIPE | ||
23 | //#define __ISEARCH | 24 | //#define __ISEARCH |
24 | 25 | ||
25 | #define MAX_ENCODING 6 | 26 | //#define MAX_ENCODING 6 |
26 | #define MAX_ACTIONS 4 | 27 | #define MAX_ACTIONS 5 |
27 | 28 | ||
29 | #include "useqpe.h" | ||
30 | #include <sys/timeb.h> | ||
28 | #include <qmainwindow.h> | 31 | #include <qmainwindow.h> |
29 | #include "CExpander.h" | 32 | #include "CExpander.h" |
33 | #include "CEncoding.h" | ||
30 | #include <qlist.h> | 34 | #include <qlist.h> |
31 | #include <qpe/filemanager.h> | 35 | //#include <qpe/filemanager.h> |
32 | #include <qmap.h> | 36 | #include <qmap.h> |
33 | #include <qlineedit.h> | 37 | #include <qlineedit.h> |
34 | #include <qstack.h> | 38 | #include <qstack.h> |
35 | #include <qlistbox.h> | 39 | #include <qlistbox.h> |
36 | //#include "Queue.h" | 40 | //#include "Queue.h" |
37 | 41 | ||
38 | class QWidgetStack; | 42 | class QWidgetStack; |
39 | class QToolButton; | 43 | class QToolButton; |
40 | class QPopupMenu; | 44 | class QPopupMenu; |
41 | class QToolBar; | 45 | class QToolBar; |
42 | //class QPEToolBar; | 46 | #ifdef USEQPE |
47 | class QPEToolBar; | ||
48 | class QPEMenuBar; | ||
49 | #endif | ||
43 | class CBkmkSelector; | 50 | class CBkmkSelector; |
44 | class QProgressBar; | 51 | class QProgressBar; |
45 | class QAction; | 52 | class QAction; |
46 | class CAnnoEdit; | 53 | class CAnnoEdit; |
47 | class QFloatBar; | 54 | class QFloatBar; |
48 | class CDrawBuffer; | 55 | class CDrawBuffer; |
49 | class QTReader; | 56 | class QTReader; |
50 | class QPixmap; | 57 | class QImage; |
58 | class Config; | ||
51 | 59 | ||
52 | enum ActionTypes | 60 | enum ActionTypes |
53 | { | 61 | { |
54 | cesOpenFile = 0, | 62 | cesNone = 0, |
63 | cesOpenFile, | ||
55 | cesAutoScroll, | 64 | cesAutoScroll, |
56 | cesActionMark, | 65 | cesActionMark, |
57 | cesFullScreen | 66 | cesActionAnno, |
67 | cesFullScreen, | ||
68 | cesZoomIn, | ||
69 | cesZoomOut, | ||
70 | cesBack, | ||
71 | cesForward, | ||
72 | cesHome, | ||
73 | cesPageUp, | ||
74 | cesPageDown, | ||
75 | cesLineUp, | ||
76 | cesLineDown, | ||
77 | cesStartDoc, | ||
78 | cesEndDoc | ||
79 | }; | ||
80 | /* | ||
81 | *m_preferences_action, *m_close_action *m_info_action, *m_touch_action, | ||
82 | *m_find_action, *m_jump_action, *m_setfont_action *m_goto_action, | ||
83 | *m_delete_action; *m_autogen_action, *m_clear_action, *m_save_action; | ||
84 | *m_tidy_action, *m_startBlock_action, *m_endBlock_action; | ||
85 | *m_setenc_action, *m_setmono_action; | ||
86 | */ | ||
87 | enum ToolbarPolicy | ||
88 | { | ||
89 | cesSingle = 0, | ||
90 | cesMenuTool, | ||
91 | cesMultiple | ||
92 | }; | ||
93 | |||
94 | enum regedit_type | ||
95 | { | ||
96 | cAutoGen, | ||
97 | cAddBkmk, | ||
98 | cJump, | ||
99 | cMonoSpace, | ||
100 | cSetTarget, | ||
101 | #ifdef _SCROLLPIPE | ||
102 | cSetPipeTarget, | ||
103 | #endif | ||
104 | cSetConfigName, | ||
105 | cMargin, | ||
106 | cExtraSpace, | ||
107 | cExtraLead | ||
108 | }; | ||
109 | |||
110 | enum bkmk_action | ||
111 | { | ||
112 | cOpenFile, | ||
113 | cGotoBkmk, | ||
114 | cDelBkmk, | ||
115 | cRmBkmkFile, | ||
116 | cLdConfig, | ||
117 | cRmConfig, | ||
118 | cExportLinks | ||
119 | }; | ||
120 | |||
121 | enum fontselector_action | ||
122 | { | ||
123 | cChooseFont, | ||
124 | cChooseEncoding | ||
58 | }; | 125 | }; |
59 | 126 | ||
60 | #ifdef __ISEARCH | 127 | #ifdef __ISEARCH |
61 | struct searchrecord | 128 | struct searchrecord |
62 | { | 129 | { |
63 | QString s; | 130 | QString s; |
64 | size_t pos; | 131 | size_t pos; |
65 | searchrecord(const QString& _s, size_t _pos) : s(_s), pos(_pos) {} | 132 | searchrecord(const QString& _s, size_t _pos) : s(_s), pos(_pos) {} |
66 | }; | 133 | }; |
67 | #endif | 134 | #endif |
68 | 135 | ||
69 | class infowin; | 136 | class infowin; |
70 | class GraphicWin; | 137 | class GraphicWin; |
71 | 138 | ||
72 | class QTReaderApp : public QMainWindow | 139 | class QTReaderApp : public QMainWindow |
73 | { | 140 | { |
74 | Q_OBJECT | 141 | Q_OBJECT |
75 | 142 | ||
76 | unsigned long m_savedpos; | 143 | unsigned long m_savedpos; |
144 | int m_debounce; | ||
145 | timeb m_lastkeytime; | ||
77 | bool m_annoIsEditing; | 146 | bool m_annoIsEditing; |
147 | bool m_propogatefontchange, m_bFloatingDialog; | ||
148 | bool m_url_clipboard, m_url_localfile, m_url_globalfile; | ||
149 | fontselector_action m_fontAction; | ||
150 | void doAction(ActionTypes a, QKeyEvent* e); | ||
78 | 151 | ||
79 | public: | 152 | public: |
80 | QTReaderApp( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); | 153 | QTReaderApp( QWidget *parent = 0, const char *name = 0, WFlags f = 0 ); |
81 | ~QTReaderApp(); | 154 | ~QTReaderApp(); |
155 | |||
156 | void handlekey(QKeyEvent* e); | ||
157 | void hideEvent(QHideEvent*) | ||
158 | { | ||
159 | suspend(); | ||
160 | } | ||
161 | |||
82 | void suspend(); | 162 | void suspend(); |
83 | void openFile( const QString & ); | 163 | void openFile( const QString & ); |
84 | 164 | ||
85 | void setScrollState(bool _b); | 165 | void setScrollState(bool _b); |
86 | 166 | ||
87 | protected: | 167 | protected: |
88 | void setfontHelper(const QString& lcn, int size = 0); | 168 | void setfontHelper(const QString& lcn, int size = 0); |
89 | QAction* m_bkmkAvail, *m_actFullscreen; | 169 | QAction* m_bkmkAvail, *m_actFullscreen; |
90 | CAnnoEdit* m_annoWin; | 170 | CAnnoEdit* m_annoWin; |
91 | Bkmk* m_anno; | 171 | Bkmk* m_anno; |
92 | // void resizeEvent(QResizeEvent* e); | 172 | // void resizeEvent(QResizeEvent* e); |
93 | void keyPressEvent(QKeyEvent* e); | ||
94 | void closeEvent( QCloseEvent *e ); | 173 | void closeEvent( QCloseEvent *e ); |
95 | void readbkmks(); | 174 | void readbkmks(); |
96 | void do_mono(const QString&); | 175 | void do_mono(const QString&); |
97 | void do_jump(const QString&); | 176 | void do_jump(const QString&); |
98 | void do_overlap(const QString&); | ||
99 | void do_settarget(const QString&); | 177 | void do_settarget(const QString&); |
100 | int EncNameToInt(const QString&); | 178 | #ifdef _SCROLLPIPE |
179 | //void do_setpipetarget(const QString&); | ||
180 | #endif | ||
181 | void do_saveconfig(const QString&, bool); | ||
182 | bool readconfig(const QString&, bool); | ||
183 | bool PopulateConfig(const char*); | ||
101 | ActionTypes ActNameToInt(const QString&); | 184 | ActionTypes ActNameToInt(const QString&); |
102 | bool m_doAnnotation; | 185 | bool m_doAnnotation; |
103 | bool m_doDictionary; | 186 | bool m_doDictionary; |
104 | bool m_doClipboard; | 187 | bool m_doClipboard; |
105 | bool m_fullscreen; | 188 | bool m_fullscreen; |
106 | 189 | bool m_loadedconfig; | |
107 | public: | 190 | public: |
108 | void saveprefs(); | 191 | void saveprefs(); |
192 | public slots: | ||
193 | void setDocument(const QString&); | ||
109 | private slots: | 194 | private slots: |
195 | #ifdef _SCRIPT | ||
196 | // void RunScript(); | ||
197 | #endif | ||
198 | void SaveConfig(); | ||
199 | void LoadConfig(); | ||
200 | void TidyConfig(); | ||
201 | void ExportLinks(); | ||
110 | void zoomin(); | 202 | void zoomin(); |
111 | void zoomout(); | 203 | void zoomout(); |
204 | void chooseencoding(); | ||
112 | void setfullscreen(bool sfs); | 205 | void setfullscreen(bool sfs); |
113 | void setcontinuous(bool sfs); | 206 | // void setcontinuous(bool sfs); |
114 | void setTwoTouch(bool _b); | 207 | void setTwoTouch(bool _b); |
115 | void restoreFocus(); | 208 | void restoreFocus(); |
116 | void OnAnnotation(bool _b) | 209 | void OnAnnotation(bool _b) |
117 | { | 210 | { |
118 | m_doAnnotation = _b; | 211 | m_doAnnotation = _b; |
119 | } | 212 | } |
120 | void OnDictionary(bool _b) | 213 | void OnDictionary(bool _b) |
121 | { | 214 | { |
122 | m_doDictionary = _b; | 215 | m_doDictionary = _b; |
123 | } | 216 | } |
124 | void OnClipboard(bool _b) | 217 | void OnClipboard(bool _b) |
125 | { | 218 | { |
126 | m_doClipboard = _b; | 219 | m_doClipboard = _b; |
127 | } | 220 | } |
128 | void OnWordSelected(const QString&, size_t, const QString&); | 221 | void OnWordSelected(const QString&, size_t, const QString&); |
129 | void showgraphic(QPixmap&); | 222 | void OnURLSelected(const QString& href); |
223 | void showgraphic(QImage&); | ||
130 | void addAnno(const QString&, const QString&, size_t); | 224 | void addAnno(const QString&, const QString&, size_t); |
131 | void addAnno(const QString&, const QString&); | 225 | void addAnno(const QString&, const QString&); |
132 | void addanno(); | 226 | void addanno(); |
133 | void showAnnotation(); | 227 | void showAnnotation(); |
228 | void do_setencoding(int i); | ||
134 | void do_setfont(const QString&); | 229 | void do_setfont(const QString&); |
135 | void encodingSelected(QAction*); | ||
136 | void buttonActionSelected(QAction*); | 230 | void buttonActionSelected(QAction*); |
137 | void msgHandler(const QCString&, const QByteArray&); | 231 | //void msgHandler(const QCString&, const QByteArray&); |
138 | void monospace(bool); | 232 | void monospace(bool); |
139 | void jump(); | 233 | void jump(); |
140 | void setoverlap(); | ||
141 | void settarget(); | 234 | void settarget(); |
142 | void setspacing(); | 235 | #ifdef _SCROLLPIPE |
236 | //void setpipetarget(); | ||
237 | //void setpause(bool); | ||
238 | #endif | ||
239 | //void setspacing(); | ||
143 | void setfont(); | 240 | void setfont(); |
144 | void clearBkmkList(); | 241 | void clearBkmkList(); |
145 | void listBkmkFiles(); | 242 | void listBkmkFiles(); |
146 | void editMark(); | 243 | void editMark(); |
147 | void autoScroll(bool); | 244 | void autoScroll(bool); |
148 | void addbkmk(); | 245 | void addbkmk(); |
149 | void savebkmks(); | 246 | void savebkmks(); |
150 | //void importFiles(); | 247 | //void importFiles(); |
248 | void showprefs(); | ||
249 | void showtoolbarprefs(); | ||
151 | void infoClose(); | 250 | void infoClose(); |
152 | // void oldFile(); | 251 | // void oldFile(); |
153 | void showinfo(); | 252 | void showinfo(); |
154 | void setDocument(const QString&); | ||
155 | 253 | ||
156 | void indentplus(); | 254 | // void indentplus(); |
157 | void indentminus(); | 255 | // void indentminus(); |
158 | 256 | ||
159 | void fileOpen(); | 257 | void fileOpen(); |
160 | void fileClose(); | 258 | void fileClose(); |
161 | 259 | ||
162 | void editCopy(); | 260 | void editCopy(); |
163 | void editFind(); | 261 | void editFind(); |
164 | 262 | ||
263 | void gotoStart(); | ||
264 | void gotoEnd(); | ||
265 | |||
165 | void pageup(); | 266 | void pageup(); |
166 | void pagedn(); | 267 | void pagedn(); |
167 | 268 | ||
168 | void findNext(); | 269 | void findNext(); |
169 | void findClose(); | 270 | void findClose(); |
170 | 271 | ||
171 | void regClose(); | 272 | void regClose(); |
172 | 273 | ||
173 | #ifdef __ISEARCH | 274 | #ifdef __ISEARCH |
174 | // void search( const QString& ); | 275 | // void search( const QString& ); |
175 | #else | 276 | #else |
176 | void search(); | 277 | void search(); |
177 | #endif | 278 | #endif |
178 | 279 | ||
179 | void showEditTools(); | 280 | void showEditTools(); |
180 | 281 | ||
181 | void stripcr(bool); | 282 | // void stripcr(bool); |
182 | void onespace(bool); | 283 | // void setfulljust(bool); |
284 | // void onespace(bool); | ||
183 | #ifdef REPALM | 285 | #ifdef REPALM |
184 | // void repalm(bool); | 286 | // void repalm(bool); |
185 | #endif | 287 | #endif |
186 | void peanut(bool _b); | 288 | // void peanut(bool _b); |
187 | void remap(bool); | 289 | // void remap(bool); |
188 | void embolden(bool); | 290 | // void embolden(bool); |
189 | void autofmt(bool); | 291 | // void autofmt(bool); |
190 | void textfmt(bool); | 292 | // void textfmt(bool); |
191 | void striphtml(bool); | 293 | // void striphtml(bool); |
192 | void dehyphen(bool); | 294 | // void dehyphen(bool); |
193 | void unindent(bool); | 295 | // void depluck(bool); |
194 | void repara(bool); | 296 | // void dejpluck(bool); |
195 | void dblspce(bool); | 297 | // void unindent(bool); |
298 | // void repara(bool); | ||
299 | // void dblspce(bool); | ||
196 | void pagemode(bool); | 300 | void pagemode(bool); |
197 | void navkeys(bool); | ||
198 | // void gotobkmk(const QString& bm); | 301 | // void gotobkmk(const QString& bm); |
199 | void gotobkmk(int); | 302 | void gotobkmk(int); |
200 | void cancelbkmk(); | 303 | void cancelbkmk(); |
201 | void do_gotomark(); | 304 | void do_gotomark(); |
202 | void do_delmark(); | 305 | void do_delmark(); |
203 | void do_autogen(); | 306 | void do_autogen(); |
204 | void do_regaction(); | 307 | void do_regaction(); |
205 | void OnRedraw(); | 308 | void OnRedraw(); |
206 | void OnActionPressed(); | ||
207 | 309 | ||
208 | private: | 310 | private: |
311 | void writeUrl(const QString& file, const QString& href); | ||
312 | QAction *m_preferences_action, *m_open_action, *m_close_action; | ||
313 | QAction *m_info_action, *m_touch_action, *m_find_action, *m_start_action; | ||
314 | QAction *m_end_action, *m_jump_action, *m_pageline_action; | ||
315 | QAction *m_pageup_action, *m_pagedn_action, *m_back_action; | ||
316 | QAction *m_home_action, *m_forward_action, *m_zoomin_action; | ||
317 | QAction *m_zoomout_action, *m_setfont_action, *m_mark_action; | ||
318 | QAction *m_annotate_action, *m_goto_action, *m_delete_action; | ||
319 | QAction *m_autogen_action, *m_clear_action, *m_save_action; | ||
320 | QAction *m_tidy_action, *m_startBlock_action, *m_endBlock_action; | ||
321 | QAction *m_setenc_action, *m_setmono_action, *m_saveconfig_action; | ||
322 | QAction *m_loadconfig_action, *m_toolbarprefs_action, *m_tidyconfig_action; | ||
323 | QAction *m_exportlinks_action; | ||
324 | void addtoolbars(Config* config); | ||
325 | ToolbarPolicy m_tbpol, m_tbpolsave; | ||
326 | ToolBarDock m_tbposition; | ||
327 | bool m_tbmove, m_tbmovesave; | ||
328 | QToolBar* filebar(); | ||
329 | QToolBar* viewbar(); | ||
330 | QToolBar* navbar(); | ||
331 | QToolBar* markbar(); | ||
332 | void hidetoolbars(); | ||
333 | void addfilebar(Config* _config, const QString& key, QAction* a); | ||
334 | void addviewbar(Config* _config, const QString& key, QAction* a); | ||
335 | void addnavbar(Config* _config, const QString& key, QAction* a); | ||
336 | void addmarkbar(Config* _config, const QString& key, QAction* a); | ||
337 | bool checkbar(Config* _config, const QString& key); | ||
338 | #ifdef _SCRIPT | ||
339 | void SaveScript(const char* sname); | ||
340 | #endif | ||
209 | /* | 341 | /* |
210 | void setstate(unsigned char* _sd, unsigned short _sdlen); | 342 | void setstate(unsigned char* _sd, unsigned short _sdlen); |
211 | void getstate(unsigned char*& data, unsigned short& len); | 343 | void getstate(unsigned char*& data, unsigned short& len); |
212 | */ | 344 | */ |
213 | void fileOpen2(); | 345 | void fileOpen2(); |
214 | void readfilelist(); | 346 | void readfilelist(); |
215 | void savefilelist(); | 347 | void savefilelist(); |
216 | void updatefileinfo(); | 348 | void updatefileinfo(); |
217 | bool openfrombkmk(Bkmk*); | 349 | bool openfrombkmk(Bkmk*); |
218 | QString m_targetapp, m_targetmsg; | 350 | QString m_targetapp, m_targetmsg; |
219 | void listbkmk(CList<Bkmk>*, const QString& _lab = QString::null); | 351 | bool listbkmk(CList<Bkmk>*, const QString& _lab = QString::null); |
220 | QString usefilebrowser(); | 352 | QString usefilebrowser(); |
221 | void do_regedit(); | 353 | void do_regedit(); |
222 | void colorChanged( const QColor &c ); | 354 | void colorChanged( const QColor &c ); |
223 | void clear(); | 355 | void clear(); |
224 | void updateCaption(); | 356 | void updateCaption(); |
225 | void do_autogen(const QString&); | 357 | void do_autogen(const QString&); |
226 | void do_addbkmk(const QString&); | 358 | void do_addbkmk(const QString&); |
227 | bool findNextBookmark(size_t start); | 359 | bool findNextBookmark(size_t start); |
228 | 360 | ||
229 | private: | 361 | private: |
230 | 362 | ||
231 | QAction* m_scrollButton; | 363 | QAction* m_scrollButton; |
232 | 364 | ||
233 | QAction* m_EncodingAction[MAX_ENCODING]; | ||
234 | |||
235 | QAction* m_buttonAction[MAX_ACTIONS]; | 365 | QAction* m_buttonAction[MAX_ACTIONS]; |
236 | 366 | ||
237 | CBkmkSelector* bkmkselector; | 367 | CBkmkSelector* bkmkselector; |
238 | 368 | ||
239 | ActionTypes m_spaceTarget; | 369 | ActionTypes m_spaceTarget, m_escapeTarget, m_returnTarget, m_leftTarget, m_rightTarget, |
370 | m_upTarget, m_downTarget; | ||
371 | bool m_leftScroll, m_rightScroll, m_upScroll, m_downScroll; | ||
372 | bool m_bcloseDisabled, m_disableesckey; | ||
240 | size_t searchStart; | 373 | size_t searchStart; |
241 | #ifdef __ISEARCH | 374 | #ifdef __ISEARCH |
242 | QStack<searchrecord>* searchStack; | 375 | QStack<searchrecord>* searchStack; |
243 | bool dosearch(size_t start, CDrawBuffer& test, const QString& arg); | 376 | bool dosearch(size_t start, CDrawBuffer& test, const QString& arg); |
244 | #else | 377 | #else |
245 | bool dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg); | 378 | bool dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg); |
246 | #endif | 379 | #endif |
247 | QWidgetStack *editorStack; | 380 | QWidgetStack *editorStack; |
248 | QTReader* reader; | 381 | QTReader* reader; |
249 | QComboBox* m_fontSelector; | 382 | QComboBox* m_fontSelector; |
250 | // QPEToolBar /* *menu,*/ *editBar; | 383 | // QPEToolBar /* *menu,*/ *fileBar; |
251 | QToolBar /* *menu,*/ *editBar; | 384 | QToolBar *menubar, *fileBar, *navBar, *viewBar, *markBar; |
385 | #ifdef USEQPE | ||
386 | QPEMenuBar *mb; | ||
387 | #else | ||
388 | QMenuBar *mb; | ||
389 | #endif | ||
252 | QFloatBar *searchBar, *regBar/*, *m_fontBar*/; | 390 | QFloatBar *searchBar, *regBar/*, *m_fontBar*/; |
253 | QToolBar /* *searchBar, *regBar,*/ *m_fontBar; | 391 | QToolBar /* *searchBar, *regBar,*/ *m_fontBar; |
254 | QLineEdit *searchEdit, *regEdit; | 392 | QLineEdit *searchEdit, *regEdit; |
255 | bool searchVisible; | 393 | bool searchVisible; |
256 | bool regVisible; | 394 | bool regVisible; |
257 | bool m_fontVisible, m_twoTouch; | 395 | bool m_fontVisible, m_twoTouch; |
258 | bool bFromDocView; | 396 | bool bFromDocView; |
259 | static unsigned long m_uid; | 397 | static unsigned long m_uid; |
260 | long unsigned get_unique_id() { return m_uid++; } | 398 | long unsigned get_unique_id() { return m_uid++; } |
261 | /* | 399 | /* |
262 | void resizeEvent( QResizeEvent * r) | 400 | void resizeEvent( QResizeEvent * r) |
263 | { | 401 | { |
264 | qDebug("resize:(%u,%u)", r->oldSize().width(), r->oldSize().height()); | 402 | // qDebug("resize:(%u,%u)", r->oldSize().width(), r->oldSize().height()); |
265 | qDebug("resize:(%u,%u)", r->size().width(), r->size().height()); | 403 | // qDebug("resize:(%u,%u)", r->size().width(), r->size().height()); |
266 | // bgroup->move( width()-bgroup->width(), 0 ); | 404 | // bgroup->move( width()-bgroup->width(), 0 ); |
267 | } | 405 | } |
268 | */ | 406 | */ |
269 | CList<Bkmk>* pBkmklist; | 407 | CList<Bkmk>* pBkmklist; |
270 | CList<Bkmk>* pOpenlist; | 408 | CList<Bkmk>* pOpenlist; |
271 | infowin* m_infoWin; | 409 | infowin* m_infoWin; |
272 | GraphicWin* m_graphicwin; | 410 | GraphicWin* m_graphicwin; |
273 | QProgressBar* pbar; | 411 | QProgressBar* pbar; |
274 | bool m_fBkmksChanged; | 412 | bool m_fBkmksChanged; |
275 | int m_nRegAction; | 413 | // int m_nRegAction; |
414 | regedit_type m_nRegAction; | ||
415 | bkmk_action m_nBkmkAction; | ||
276 | QString m_autogenstr; | 416 | QString m_autogenstr; |
277 | bool m_dontSave; | 417 | bool m_dontSave; |
278 | }; | 418 | }; |
279 | 419 | ||
280 | const int cAutoGen = 0; | 420 | //const int cAutoGen = 0; |
281 | const int cAddBkmk = 1; | 421 | //const int cAddBkmk = 1; |
282 | const int cDelBkmk = 2; | 422 | //const int cDelBkmk = 2; |
283 | const int cGotoBkmk = 3; | 423 | //const int cGotoBkmk = 3; |
284 | const int cRmBkmkFile = 4; | 424 | //const int cRmBkmkFile = 4; |
285 | const int cJump = 5; | 425 | //const int cJump = 5; |
286 | const int cMonoSpace = 6; | 426 | //const int cMonoSpace = 6; |
287 | const int cOverlap = 7; | 427 | //const int cOverlap = 7; |
288 | const int cSetTarget = 8; | 428 | //const int cSetTarget = 8; |
289 | const int cOpenFile = 9; | 429 | //const int cOpenFile = 9; |
430 | //const int cSetPipeTarget = 10; | ||
431 | //const int cSetConfigName = 11; | ||
432 | //const int cMargin = 12; | ||
433 | //const int cExtraSpace = 14; | ||
434 | //const int cExtraLead = 15; | ||
435 | //const int cGfxSize = 16; | ||
436 | //const int cChooseFont = 2; | ||
437 | //const int cChooseEncoding = 1; | ||
290 | 438 | ||
291 | #endif | 439 | #endif |
440 | |||
441 | |||
442 | |||
diff --git a/noncore/apps/opie-reader/StateData.h b/noncore/apps/opie-reader/StateData.h index 0cb0f07..e3be778 100644 --- a/noncore/apps/opie-reader/StateData.h +++ b/noncore/apps/opie-reader/StateData.h | |||
@@ -1,32 +1,33 @@ | |||
1 | #ifndef __STATEDATA_H | 1 | #ifndef __STATEDATA_H |
2 | #define __STATEDATA_H | 2 | #define __STATEDATA_H |
3 | 3 | ||
4 | struct statedata | 4 | struct statedata |
5 | { | 5 | { |
6 | bool bstripcr/*:1*/; | 6 | bool bstripcr/*:1*/; |
7 | bool btextfmt/*:1*/; | 7 | bool btextfmt/*:1*/; |
8 | bool bautofmt/*:1*/; | 8 | bool bautofmt/*:1*/; |
9 | bool bstriphtml/*:1*/; | 9 | bool bstriphtml/*:1*/; |
10 | bool bpeanut/*:1*/; | 10 | bool bpeanut/*:1*/; |
11 | bool bdehyphen/*:1*/; | 11 | bool bdehyphen/*:1*/; |
12 | bool bdepluck/*:1*/; | ||
12 | bool bonespace/*:1*/; | 13 | bool bonespace/*:1*/; |
13 | bool bunindent/*:1*/; | 14 | bool bunindent/*:1*/; |
14 | bool brepara/*:1*/; | 15 | bool brepara/*:1*/; |
15 | bool bdblspce/*:1*/; | 16 | bool bdblspce/*:1*/; |
16 | bool m_bpagemode/*:1*/; | 17 | bool m_bpagemode/*:1*/; |
17 | bool m_navkeys/*:1*/; | 18 | bool m_navkeys/*:1*/; |
18 | bool m_bMonoSpaced/*:1*/; | 19 | bool m_bMonoSpaced/*:1*/; |
19 | bool bremap/*:1*/; | 20 | bool bremap/*:1*/; |
20 | bool bmakebold/*:1*/; | 21 | bool bmakebold/*:1*/; |
21 | bool Continuous/*:1*/; | 22 | bool Continuous/*:1*/; |
22 | #ifdef REPALM | 23 | #ifdef REPALM |
23 | bool brepalm/*:1*/; | 24 | bool brepalm/*:1*/; |
24 | #endif | 25 | #endif |
25 | int bindenter; | 26 | int bindenter; |
26 | int m_textsize; | 27 | int m_textsize; |
27 | int m_encd; | 28 | int m_encd; |
28 | int m_charpc; | 29 | int m_charpc; |
29 | char m_fontname[1]; | 30 | char m_fontname[1]; |
30 | }; | 31 | }; |
31 | 32 | ||
32 | #endif | 33 | #endif |
diff --git a/noncore/apps/opie-reader/StyleConsts.cpp b/noncore/apps/opie-reader/StyleConsts.cpp index e111dbd..9fb56b7 100644 --- a/noncore/apps/opie-reader/StyleConsts.cpp +++ b/noncore/apps/opie-reader/StyleConsts.cpp | |||
@@ -1,99 +1,94 @@ | |||
1 | 1 | ||
2 | #include <qpixmap.h> | 2 | #include <qimage.h> |
3 | #include "StyleConsts.h" | 3 | #include "StyleConsts.h" |
4 | 4 | ||
5 | GraphicLink::~GraphicLink() { delete graphic; } | 5 | GraphicLink::~GraphicLink() { delete graphic; } |
6 | 6 | ||
7 | pmstore::~pmstore() | 7 | pmstore::~pmstore() |
8 | { | 8 | { |
9 | // qDebug("Deleting image"); | 9 | //// qDebug("Deleting image"); |
10 | delete graphic; | 10 | delete graphic; |
11 | } | 11 | } |
12 | 12 | ||
13 | CStyle::~CStyle() | 13 | CStyle::~CStyle() |
14 | { | 14 | { |
15 | if (graphic != NULL) | 15 | if (graphic != NULL) |
16 | { | 16 | { |
17 | if (--(graphic->count) == 0) | 17 | if (--(graphic->count) == 0) |
18 | { | 18 | { |
19 | delete graphic; | 19 | delete graphic; |
20 | } | 20 | } |
21 | } | 21 | } |
22 | } | 22 | } |
23 | 23 | ||
24 | CStyle::CStyle(CStyle& rhs) : graphic(NULL) | ||
25 | { | ||
26 | *this = rhs; | ||
27 | } | ||
28 | |||
29 | CStyle::CStyle(const CStyle& rhs) : graphic(NULL) | 24 | CStyle::CStyle(const CStyle& rhs) : graphic(NULL) |
30 | { | 25 | { |
31 | *this = rhs; | 26 | *this = rhs; |
32 | } | 27 | } |
33 | 28 | ||
34 | CStyle& CStyle::operator=(const CStyle& rhs) | 29 | CStyle& CStyle::operator=(const CStyle& rhs) |
35 | { | 30 | { |
36 | if (rhs.graphic != NULL) | 31 | if (rhs.graphic != NULL) |
37 | { | 32 | { |
38 | (rhs.graphic->count)++; | 33 | (rhs.graphic->count)++; |
39 | if (graphic != NULL) | 34 | if (graphic != NULL) |
40 | { | 35 | { |
41 | if (--(graphic->count) == 0) | 36 | if (--(graphic->count) == 0) |
42 | { | 37 | { |
43 | delete graphic; | 38 | delete graphic; |
44 | } | 39 | } |
45 | } | 40 | } |
46 | graphic = rhs.graphic; | 41 | graphic = rhs.graphic; |
47 | } | 42 | } |
48 | else | 43 | else |
49 | { | 44 | { |
50 | if (graphic != NULL) | 45 | if (graphic != NULL) |
51 | { | 46 | { |
52 | if (--(graphic->count) == 0) | 47 | if (--(graphic->count) == 0) |
53 | { | 48 | { |
54 | delete graphic; | 49 | delete graphic; |
55 | } | 50 | } |
56 | graphic = NULL; | 51 | graphic = NULL; |
57 | } | 52 | } |
58 | } | 53 | } |
59 | sty = rhs.sty; | 54 | sty = rhs.sty; |
60 | return *this; | 55 | return *this; |
61 | } | 56 | } |
62 | 57 | ||
63 | void CStyle::clearPicture() | 58 | void CStyle::clearPicture() |
64 | { | 59 | { |
65 | if (graphic != NULL) | 60 | if (graphic != NULL) |
66 | { | 61 | { |
67 | if (--(graphic->count) == 0) | 62 | if (--(graphic->count) == 0) |
68 | { | 63 | { |
69 | delete graphic; | 64 | delete graphic; |
70 | } | 65 | } |
71 | graphic = NULL; | 66 | graphic = NULL; |
72 | } | 67 | } |
73 | } | 68 | } |
74 | 69 | ||
75 | void CStyle::unset() | 70 | void CStyle::unset() |
76 | { | 71 | { |
77 | sty.unset(); | 72 | sty.unset(); |
78 | if (graphic != NULL) | 73 | if (graphic != NULL) |
79 | { | 74 | { |
80 | if (--(graphic->count) == 0) | 75 | if (--(graphic->count) == 0) |
81 | { | 76 | { |
82 | delete graphic; | 77 | delete graphic; |
83 | } | 78 | } |
84 | graphic = NULL; | 79 | graphic = NULL; |
85 | } | 80 | } |
86 | } | 81 | } |
87 | 82 | ||
88 | void CStyle::setPicture(QPixmap* _g, bool il, unsigned long tgt) | 83 | void CStyle::setPicture(bool canScale, QImage* _g, bool il, unsigned long tgt) |
89 | { | 84 | { |
90 | if (graphic != NULL) | 85 | if (graphic != NULL) |
91 | { | 86 | { |
92 | if (--(graphic->count) == 0) | 87 | if (--(graphic->count) == 0) |
93 | { | 88 | { |
94 | delete graphic; | 89 | delete graphic; |
95 | } | 90 | } |
96 | graphic = NULL; | 91 | graphic = NULL; |
97 | } | 92 | } |
98 | if (_g != NULL) graphic = new pmstore(_g, il, tgt); | 93 | if (_g != NULL) graphic = new pmstore(canScale, _g, il, tgt); |
99 | } | 94 | } |
diff --git a/noncore/apps/opie-reader/StyleConsts.h b/noncore/apps/opie-reader/StyleConsts.h index 9701d19..29d7501 100644 --- a/noncore/apps/opie-reader/StyleConsts.h +++ b/noncore/apps/opie-reader/StyleConsts.h | |||
@@ -1,178 +1,190 @@ | |||
1 | #ifndef __STYLECONSTS_H | 1 | #ifndef __STYLECONSTS_H |
2 | #define __STYLECONSTS_H | 2 | #define __STYLECONSTS_H |
3 | 3 | ||
4 | typedef unsigned short StyleType; | 4 | typedef unsigned short StyleType; |
5 | 5 | ||
6 | #include <stdlib.h> | 6 | #ifdef _WINDOWS |
7 | #include <string.h> | 7 | #include <string.h> |
8 | #endif | ||
9 | #include <stdlib.h> | ||
8 | #include <qglobal.h> | 10 | #include <qglobal.h> |
9 | class QPixmap; | 11 | class QImage; |
10 | 12 | ||
11 | struct GraphicLink | 13 | struct GraphicLink |
12 | { | 14 | { |
13 | QPixmap* graphic; | 15 | QImage* graphic; |
14 | bool isLink; | 16 | bool isLink; |
15 | unsigned long link; | 17 | unsigned long link; |
16 | GraphicLink(QPixmap* p, bool isLnk, unsigned long tgt) : | 18 | GraphicLink(QImage* p, bool isLnk, unsigned long tgt) : |
17 | graphic(p), isLink(isLnk), link(tgt) {} | 19 | graphic(p), isLink(isLnk), link(tgt) {} |
18 | ~GraphicLink(); | 20 | ~GraphicLink(); |
19 | }; | 21 | }; |
20 | 22 | ||
21 | struct pmstore | 23 | struct pmstore |
22 | { | 24 | { |
23 | unsigned int count; | 25 | unsigned int count; |
26 | bool m_isScaleable; | ||
24 | GraphicLink* graphic; | 27 | GraphicLink* graphic; |
25 | pmstore(QPixmap* p, bool isLnk, unsigned long tgt) : count(1) | 28 | pmstore(bool _canScale, QImage* p, bool isLnk, unsigned long tgt) : count(1), m_isScaleable(_canScale) |
26 | { | 29 | { |
27 | graphic = new GraphicLink(p, isLnk, tgt); | 30 | graphic = new GraphicLink(p, isLnk, tgt); |
28 | } | 31 | } |
29 | ~pmstore(); | 32 | ~pmstore(); |
30 | }; | 33 | }; |
31 | 34 | ||
32 | enum EalignmentType | 35 | enum EalignmentType |
33 | { | 36 | { |
34 | m_AlignLeft, | 37 | m_AlignLeft, |
35 | m_AlignRight, | 38 | m_AlignRight, |
36 | m_AlignCentre, | 39 | m_AlignCentre, |
37 | m_AlignJustify | 40 | m_AlignJustify |
38 | }; | 41 | }; |
39 | 42 | ||
40 | class CBasicStyle | 43 | class CBasicStyle |
41 | { | 44 | { |
42 | friend class CStyle; | 45 | friend class CStyle; |
43 | bool m_bold, | 46 | bool m_bold, |
44 | m_italic; | 47 | m_italic; |
45 | int m_fontsize; | 48 | int m_fontsize; |
46 | EalignmentType m_align; | 49 | EalignmentType m_align; |
47 | unsigned char red, green, blue; | 50 | unsigned char red, green, blue; |
48 | unsigned long data; | 51 | unsigned long data; |
49 | bool isLink; | 52 | bool isLink; |
50 | bool m_underline; | 53 | bool m_underline; |
51 | bool m_strikethru; | 54 | bool m_strikethru; |
52 | bool m_monospaced; | 55 | bool m_monospaced; |
53 | unsigned char m_leftmargin, m_rightmargin; | 56 | unsigned char m_leftmargin, m_rightmargin; |
57 | signed char m_extraspace; | ||
58 | signed char m_voffset; | ||
54 | CBasicStyle() | 59 | CBasicStyle() |
55 | { | 60 | { |
56 | unset(); | 61 | unset(); |
57 | } | 62 | } |
58 | bool operator!=(const CBasicStyle& rhs) | 63 | bool operator!=(const CBasicStyle& rhs) |
59 | { | 64 | { |
60 | return (memcmp(this, &rhs, sizeof(CBasicStyle)) != 0); | 65 | return (memcmp(this, &rhs, sizeof(CBasicStyle)) != 0); |
61 | } | 66 | } |
62 | void unset() | 67 | void unset() |
63 | { | 68 | { |
64 | m_bold = false; | 69 | m_bold = false; |
65 | m_italic = false; | 70 | m_italic = false; |
66 | m_fontsize = 0; | 71 | m_fontsize = 0; |
67 | m_align = m_AlignLeft; | 72 | m_align = m_AlignLeft; |
68 | red = green = blue = 0; | 73 | red = green = blue = 0; |
69 | data = 0; | 74 | data = 0; |
70 | isLink = false; | 75 | isLink = false; |
71 | m_underline = false; | 76 | m_underline = false; |
72 | m_strikethru = false; | 77 | m_strikethru = false; |
73 | m_leftmargin = 0; | 78 | m_leftmargin = 0; |
74 | m_rightmargin = 0; | 79 | m_rightmargin = 0; |
75 | m_monospaced = false; | 80 | m_monospaced = false; |
81 | m_extraspace = 0; | ||
82 | m_voffset = 0; | ||
76 | } | 83 | } |
77 | }; | 84 | }; |
78 | 85 | ||
79 | class CStyle | 86 | class CStyle |
80 | { | 87 | { |
81 | CBasicStyle sty; | 88 | CBasicStyle sty; |
82 | pmstore* graphic; | 89 | pmstore* graphic; |
83 | public: | 90 | public: |
91 | signed char getVOffset() { return sty.m_voffset; } | ||
92 | void setVOffset(signed char sp) { sty.m_voffset = sp; } | ||
93 | signed char getExtraSpace() { return sty.m_extraspace; } | ||
94 | void setExtraSpace(signed char sp) { sty.m_extraspace = sp; } | ||
84 | bool getPictureLink() | 95 | bool getPictureLink() |
85 | { | 96 | { |
86 | return (graphic != NULL && graphic->graphic->isLink); | 97 | return (graphic != NULL && graphic->graphic->isLink); |
87 | } | 98 | } |
88 | unsigned long getPictureLinkData() | 99 | unsigned long getPictureLinkData() |
89 | { | 100 | { |
90 | return graphic->graphic->link; | 101 | return graphic->graphic->link; |
91 | } | 102 | } |
92 | void setLeftMargin(unsigned char m) { sty.m_leftmargin = m; } | 103 | void setLeftMargin(unsigned char m) { sty.m_leftmargin = m; } |
93 | unsigned char getLeftMargin() { return sty.m_leftmargin; } | 104 | unsigned char getLeftMargin() { return sty.m_leftmargin; } |
94 | void setRightMargin(unsigned char m) { sty.m_rightmargin = m; } | 105 | void setRightMargin(unsigned char m) { sty.m_rightmargin = m; } |
95 | unsigned char getRightMargin() { return sty.m_rightmargin; } | 106 | unsigned char getRightMargin() { return sty.m_rightmargin; } |
96 | unsigned char Red() { return sty.red; } | 107 | unsigned char Red() { return sty.red; } |
97 | unsigned char Green() { return sty.green; } | 108 | unsigned char Green() { return sty.green; } |
98 | unsigned char Blue() { return sty.blue; } | 109 | unsigned char Blue() { return sty.blue; } |
99 | void setColour(unsigned char r, unsigned char g, unsigned char b) | 110 | void setColour(unsigned char r, unsigned char g, unsigned char b) |
100 | { | 111 | { |
101 | sty.red = r; | 112 | sty.red = r; |
102 | sty.green = g; | 113 | sty.green = g; |
103 | sty.blue = b; | 114 | sty.blue = b; |
104 | } | 115 | } |
105 | CStyle() : graphic(NULL) {} | 116 | CStyle() : graphic(NULL) {} |
106 | ~CStyle(); | 117 | ~CStyle(); |
107 | CStyle(CStyle&); | 118 | // CStyle(CStyle&); |
108 | CStyle(const CStyle&); | 119 | CStyle(const CStyle&); |
109 | CStyle& operator=(const CStyle&); | 120 | CStyle& operator=(const CStyle&); |
110 | void unset(); | 121 | void unset(); |
111 | bool isPicture() { return (graphic != NULL); } | 122 | bool isPicture() { return (graphic != NULL); } |
123 | bool canScale() { return graphic->m_isScaleable; } | ||
112 | void clearPicture(); | 124 | void clearPicture(); |
113 | void setPicture(QPixmap* _g, bool il=false, unsigned long tgt=0); | 125 | void setPicture(bool canScale, QImage* _g, bool il=false, unsigned long tgt=0); |
114 | QPixmap* getPicture() | 126 | QImage* getPicture() |
115 | { | 127 | { |
116 | QPixmap* pm = ((graphic != NULL) ? graphic->graphic->graphic : NULL); | 128 | QImage* pm = ((graphic != NULL) ? graphic->graphic->graphic : NULL); |
117 | return pm; | 129 | return pm; |
118 | } | 130 | } |
119 | void setUnderline() { sty.m_underline = true; } | 131 | void setUnderline() { sty.m_underline = true; } |
120 | void unsetUnderline() { sty.m_underline = false; } | 132 | void unsetUnderline() { sty.m_underline = false; } |
121 | bool isUnderline() { return sty.m_underline; } | 133 | bool isUnderline() { return sty.m_underline; } |
122 | void setStrikethru() { sty.m_strikethru = true; } | 134 | void setStrikethru() { sty.m_strikethru = true; } |
123 | void unsetStrikethru() { sty.m_strikethru = false; } | 135 | void unsetStrikethru() { sty.m_strikethru = false; } |
124 | bool isStrikethru() { return sty.m_strikethru; } | 136 | bool isStrikethru() { return sty.m_strikethru; } |
125 | void setBold() { sty.m_bold = true; } | 137 | void setBold() { sty.m_bold = true; } |
126 | void unsetBold() { sty.m_bold = false; } | 138 | void unsetBold() { sty.m_bold = false; } |
127 | bool isBold() { return sty.m_bold; } | 139 | bool isBold() { return sty.m_bold; } |
128 | void setItalic() { sty.m_italic = true; } | 140 | void setItalic() { sty.m_italic = true; } |
129 | void unsetItalic() { sty.m_italic = false; } | 141 | void unsetItalic() { sty.m_italic = false; } |
130 | bool isItalic() { return sty.m_italic; } | 142 | bool isItalic() { return sty.m_italic; } |
131 | void setMono() { sty.m_monospaced = true; } | 143 | void setMono() { sty.m_monospaced = true; } |
132 | void unsetMono() { sty.m_monospaced = false; } | 144 | void unsetMono() { sty.m_monospaced = false; } |
133 | bool isMono() { return sty.m_monospaced; } | 145 | bool isMono() { return sty.m_monospaced; } |
134 | 146 | ||
135 | void setLeftJustify() | 147 | void setLeftJustify() |
136 | { | 148 | { |
137 | sty.m_align = m_AlignLeft; | 149 | sty.m_align = m_AlignLeft; |
138 | } | 150 | } |
139 | void setRightJustify() | 151 | void setRightJustify() |
140 | { | 152 | { |
141 | sty.m_align = m_AlignRight; | 153 | sty.m_align = m_AlignRight; |
142 | } | 154 | } |
143 | void setCentreJustify() | 155 | void setCentreJustify() |
144 | { | 156 | { |
145 | sty.m_align = m_AlignCentre; | 157 | sty.m_align = m_AlignCentre; |
146 | } | 158 | } |
147 | void setFullJustify() | 159 | void setFullJustify() |
148 | { | 160 | { |
149 | sty.m_align = m_AlignJustify; | 161 | sty.m_align = m_AlignJustify; |
150 | } | 162 | } |
151 | StyleType getJustify() | 163 | StyleType getJustify() |
152 | { | 164 | { |
153 | return sty.m_align; | 165 | return sty.m_align; |
154 | } | 166 | } |
155 | 167 | ||
156 | void setFontSize(int _fs) | 168 | void setFontSize(int _fs) |
157 | { | 169 | { |
158 | sty.m_fontsize = _fs; | 170 | sty.m_fontsize = _fs; |
159 | } | 171 | } |
160 | int getFontSize() | 172 | int getFontSize() const |
161 | { | 173 | { |
162 | return sty.m_fontsize; | 174 | return sty.m_fontsize; |
163 | } | 175 | } |
164 | bool operator!=(const CStyle& rhs) | 176 | bool operator!=(const CStyle& rhs) |
165 | { | 177 | { |
166 | return | 178 | return |
167 | ( | 179 | ( |
168 | (sty != rhs.sty) || | 180 | (sty != rhs.sty) || |
169 | (graphic != rhs.graphic) | 181 | (graphic != rhs.graphic) |
170 | ); | 182 | ); |
171 | } | 183 | } |
172 | void setLink(bool _l) { sty.isLink = _l; } | 184 | void setLink(bool _l) { sty.isLink = _l; } |
173 | bool getLink() { return sty.isLink; } | 185 | bool getLink() { return sty.isLink; } |
174 | void setData(unsigned long _d) { sty.data = _d; } | 186 | void setData(unsigned long _d) { sty.data = _d; } |
175 | unsigned long getData() { return sty.data; } | 187 | unsigned long getData() { return sty.data; } |
176 | }; | 188 | }; |
177 | 189 | ||
178 | #endif | 190 | #endif |
diff --git a/noncore/apps/opie-reader/ZText.h b/noncore/apps/opie-reader/ZText.h index 22d3733..ab81a5e 100644 --- a/noncore/apps/opie-reader/ZText.h +++ b/noncore/apps/opie-reader/ZText.h | |||
@@ -1,68 +1,85 @@ | |||
1 | #ifndef __Text_h | 1 | #ifndef __Text_h |
2 | #define __Text_h | 2 | #define __Text_h |
3 | #include <stdio.h> | 3 | #include <stdio.h> |
4 | #include "zlib/zlib.h" | 4 | #include <zlib.h> |
5 | #include <sys/stat.h> | 5 | #include <sys/stat.h> |
6 | 6 | #include "useqpe.h" | |
7 | #include "CExpander.h" | 7 | #include "CExpander.h" |
8 | 8 | ||
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() | 13 | void suspend() |
14 | { | 14 | { |
15 | #ifdef USEQPE | ||
15 | bSuspended = true; | 16 | bSuspended = true; |
16 | suspos = gztell(file); | 17 | suspos = gztell(file); |
17 | gzclose(file); | 18 | gzclose(file); |
18 | file = NULL; | 19 | file = NULL; |
19 | sustime = time(NULL); | 20 | sustime = time(NULL); |
21 | #endif | ||
20 | } | 22 | } |
21 | virtual void unsuspend() | 23 | void unsuspend() |
22 | { | 24 | { |
25 | #ifdef USEQPE | ||
23 | if (bSuspended) | 26 | if (bSuspended) |
24 | { | 27 | { |
25 | bSuspended = false; | 28 | bSuspended = false; |
26 | int delay = time(NULL) - sustime; | 29 | int delay = time(NULL) - sustime; |
27 | if (delay < 10) sleep(10-delay); | 30 | if (delay < 10) sleep(10-delay); |
28 | file = gzopen(fname, "rb"); | 31 | file = gzopen(fname, "rb"); |
29 | for (int i = 0; file == NULL && i < 5; i++) | 32 | for (int i = 0; file == NULL && i < 5; i++) |
30 | { | 33 | { |
31 | sleep(5); | 34 | sleep(5); |
32 | file = gzopen(fname, "rb"); | 35 | file = gzopen(fname, "rb"); |
33 | } | 36 | } |
34 | if (file == NULL) | 37 | if (file == NULL) |
35 | { | 38 | { |
36 | QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file"); | 39 | QMessageBox::warning(NULL, PROGNAME, "Couldn't reopen file"); |
37 | exit(0); | 40 | exit(0); |
38 | } | 41 | } |
39 | suspos = gzseek(file, suspos, SEEK_SET); | 42 | suspos = gzseek(file, suspos, SEEK_SET); |
40 | } | 43 | } |
44 | #endif | ||
41 | } | 45 | } |
42 | Text() : file(NULL) {}; | 46 | Text() : file(NULL) {}; |
43 | virtual ~Text() | 47 | virtual ~Text() |
44 | { | 48 | { |
45 | if (file != NULL) gzclose(file); | 49 | if (file != NULL) gzclose(file); |
46 | } | 50 | } |
47 | virtual int OpenFile(const char *src) | 51 | int OpenFile(const char *src) |
48 | { | 52 | { |
49 | if (file != NULL) gzclose(file); | 53 | if (file != NULL) gzclose(file); |
50 | struct stat _stat; | 54 | struct stat _stat; |
51 | stat(src,&_stat); | 55 | stat(src,&_stat); |
52 | fsize = _stat.st_size; | 56 | fsize = _stat.st_size; |
53 | return ((file = gzopen(src,"rb")) == NULL); | 57 | return ((file = gzopen(src,"rb")) == NULL); |
54 | } | 58 | } |
55 | virtual int getch() { return gzgetc(file); } | 59 | int getch() { return gzgetc(file); } |
56 | virtual unsigned int locate() { return gztell(file); } | 60 | unsigned int locate() { return gztell(file); } |
57 | virtual void locate(unsigned int n) { gzseek(file,n,SEEK_SET); } | 61 | void locate(unsigned int n) { gzseek(file,n,SEEK_SET); } |
58 | virtual bool hasrandomaccess() { return true; } | 62 | bool hasrandomaccess() { return true; } |
59 | virtual void sizes(unsigned long& _file, unsigned long& _text) | 63 | void sizes(unsigned long& _file, unsigned long& _text) |
60 | { | 64 | { |
61 | _text = _file = fsize; | 65 | _text = _file = fsize; |
66 | FILE* f = fopen(fname, "rb"); | ||
67 | if (f != NULL) | ||
68 | { | ||
69 | unsigned char mn[2]; | ||
70 | fread(mn, 1, 2, f); | ||
71 | if ((mn[0] == 31) && (mn[1] == 139)) | ||
72 | { | ||
73 | int tmp = sizeof(_text); | ||
74 | fseek(f,-tmp,SEEK_END); | ||
75 | fread(&_text, sizeof(_text), 1, f); | ||
76 | } | ||
77 | fclose(f); | ||
78 | } | ||
62 | } | 79 | } |
63 | virtual MarkupType PreferredMarkup() | 80 | MarkupType PreferredMarkup() |
64 | { | 81 | { |
65 | return cTEXT; | 82 | return cTEXT; |
66 | } | 83 | } |
67 | }; | 84 | }; |
68 | #endif | 85 | #endif |
diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp index 21c970b..9cd371d 100644 --- a/noncore/apps/opie-reader/fileBrowser.cpp +++ b/noncore/apps/opie-reader/fileBrowser.cpp | |||
@@ -1,207 +1,266 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | 2 | ||
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 <qlineedit.h> | ||
13 | #include <qpushbutton.h> | 14 | #include <qpushbutton.h> |
14 | #include <qfile.h> | 15 | #include <qfile.h> |
15 | #include <qmessagebox.h> | 16 | #include <qmessagebox.h> |
17 | #ifndef _WINDOWS | ||
16 | #include <unistd.h> | 18 | #include <unistd.h> |
19 | #endif | ||
17 | #include <qlayout.h> | 20 | #include <qlayout.h> |
21 | #ifdef _WINDOWS | ||
22 | #include <direct.h> | ||
23 | #endif | ||
18 | 24 | ||
19 | fileBrowser::fileBrowser( QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath ) | 25 | #include "opie.h" |
20 | : QDialog( parent, name, modal, fl ), filterspec(QDir::All) | 26 | |
27 | fileBrowser::fileBrowser( bool allownew, QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath ) | ||
28 | : QDialog( parent, name, true, | ||
29 | fl/* | WStyle_Customize | WStyle_Tool*/), | ||
30 | filterspec(QDir::All) | ||
21 | { | 31 | { |
22 | // showMaximized(); | 32 | // showMaximized(); |
23 | if ( !name ) | 33 | if ( !name ) |
24 | setName( "fileBrowser" ); | 34 | setName( "fileBrowser" ); |
25 | if (parent != NULL) resize( parent->width(), parent->height() ); | 35 | /* |
36 | if (parent != NULL) | ||
37 | { | ||
38 | #ifdef OPIE | ||
39 | move(0,0); | ||
40 | resize( parent->width(), parent->height() ); | ||
41 | #else | ||
42 | setGeometry(parent->x(), parent->y(), parent->width(), parent->height() ); | ||
43 | #endif | ||
44 | } | ||
45 | */ | ||
46 | // showFullScreen(); | ||
26 | setCaption(tr( "Browse for file" ) ); | 47 | setCaption(tr( "Browse for file" ) ); |
27 | filterStr=filter; | 48 | filterStr=filter; |
28 | 49 | ||
29 | buttonOk = new QPushButton( this, "buttonOk" ); | 50 | buttonOk = new QPushButton( this, "buttonOk" ); |
30 | buttonOk->setFixedSize( 25, 25 ); | 51 | buttonOk->setFixedSize( 25, 25 ); |
31 | buttonOk->setAutoDefault( false ); | 52 | buttonOk->setAutoDefault( false ); |
32 | buttonOk->setText( tr( "/" ) ); | 53 | buttonOk->setText( tr( "/" ) ); |
33 | 54 | ||
34 | buttonShowHidden = new QPushButton( this, "buttonShowHidden" ); | 55 | buttonShowHidden = new QPushButton( this, "buttonShowHidden" ); |
35 | // buttonShowHidden->setFixedSize( 50, 25 ); | 56 | // buttonShowHidden->setFixedSize( 50, 25 ); |
36 | buttonShowHidden->setText( tr( "Hidden" ) ); | 57 | buttonShowHidden->setText( tr( "Hidden" ) ); |
37 | buttonShowHidden->setAutoDefault( false ); | 58 | buttonShowHidden->setAutoDefault( false ); |
38 | buttonShowHidden->setToggleButton( true ); | 59 | buttonShowHidden->setToggleButton( true ); |
39 | buttonShowHidden->setOn( false ); | 60 | buttonShowHidden->setOn( false ); |
40 | 61 | ||
41 | dirLabel = new QLabel(this, "DirLabel"); | 62 | dirLabel = new QLabel(this, "DirLabel"); |
42 | dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak); | 63 | dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak); |
43 | dirLabel->setText(currentDir.canonicalPath()); | 64 | dirLabel->setText(currentDir.canonicalPath()); |
44 | 65 | ||
45 | ListView = new QtrListView( this, "ListView" ); | 66 | ListView = new QtrListView( this, "ListView" ); |
46 | ListView->addColumn( tr( "Name" ) ); | 67 | ListView->addColumn( tr( "Name" ) ); |
47 | ListView->setSorting( 2, FALSE); | 68 | ListView->setSorting( 2, FALSE); |
48 | ListView->addColumn( tr( "Size" ) ); | 69 | ListView->addColumn( tr( "Size" ) ); |
49 | ListView->setSelectionMode(QListView::Single); | 70 | ListView->setSelectionMode(QListView::Single); |
50 | ListView->setAllColumnsShowFocus( TRUE ); | 71 | ListView->setAllColumnsShowFocus( TRUE ); |
51 | ListView->setColumnWidthMode(0, QListView::Manual); | 72 | ListView->setColumnWidthMode(0, QListView::Manual); |
52 | ListView->setColumnWidthMode(1, QListView::Manual); | 73 | ListView->setColumnWidthMode(1, QListView::Manual); |
53 | 74 | ||
54 | // signals and slots connections | 75 | // signals and slots connections |
55 | connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) ); | 76 | connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) ); |
56 | connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) ); | 77 | connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) ); |
57 | connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) ); | 78 | connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) ); |
58 | connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); | 79 | connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); |
59 | connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); | 80 | connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); |
60 | connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); | 81 | connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); |
61 | connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) ); | 82 | connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) ); |
62 | 83 | ||
63 | QVBoxLayout* grid = new QVBoxLayout(this); | 84 | QVBoxLayout* grid = new QVBoxLayout(this); |
64 | QHBoxLayout* hgrid = new QHBoxLayout(grid); | 85 | QHBoxLayout* hgrid = new QHBoxLayout(grid); |
65 | hgrid->addWidget(dirLabel,1); | 86 | hgrid->addWidget(dirLabel,1); |
66 | hgrid->addWidget(buttonShowHidden); | 87 | hgrid->addWidget(buttonShowHidden); |
67 | hgrid->addWidget(buttonOk); | 88 | hgrid->addWidget(buttonOk); |
68 | grid->addWidget(ListView,1); | 89 | grid->addWidget(ListView,1); |
90 | if (allownew) | ||
91 | { | ||
92 | m_filename = new QLineEdit(this); | ||
93 | grid->addWidget(m_filename); | ||
94 | connect( m_filename, SIGNAL( returnPressed() ), this, SLOT( onReturn() )); | ||
95 | } | ||
96 | else | ||
97 | { | ||
98 | m_filename = NULL; | ||
99 | } | ||
69 | 100 | ||
70 | if (QFileInfo(iPath).exists()) | 101 | if (QFileInfo(iPath).exists()) |
71 | { | 102 | { |
72 | currentDir.setPath(iPath); | 103 | currentDir.setPath(iPath); |
104 | #ifdef _WINDOWS | ||
105 | _chdir(iPath.latin1()); | ||
106 | #else | ||
73 | chdir(iPath.latin1()); | 107 | chdir(iPath.latin1()); |
108 | #endif | ||
74 | } | 109 | } |
75 | else | 110 | else |
76 | { | 111 | { |
77 | currentDir.setPath(QDir::currentDirPath()); | 112 | currentDir.setPath(QDir::currentDirPath()); |
78 | chdir(QDir::currentDirPath().latin1()); | 113 | chdir(QDir::currentDirPath().latin1()); |
79 | } | 114 | } |
80 | 115 | ||
81 | populateList(); | 116 | populateList(); |
117 | |||
118 | if (modal) showMaximized(); | ||
82 | } | 119 | } |
83 | 120 | ||
84 | void fileBrowser::resizeEvent(QResizeEvent* e) | 121 | void fileBrowser::resizeEvent(QResizeEvent* e) |
85 | { | 122 | { |
86 | ListView->setColumnWidth(1,(ListView->width())/4); | 123 | ListView->setColumnWidth(1,(ListView->width())/4); |
87 | ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1)); | 124 | ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1)); |
88 | } | 125 | } |
89 | 126 | ||
90 | fileBrowser::~fileBrowser() | 127 | fileBrowser::~fileBrowser() |
91 | { | 128 | { |
92 | } | 129 | } |
93 | 130 | ||
94 | 131 | ||
95 | void fileBrowser::populateList() | 132 | void fileBrowser::populateList() |
96 | { | 133 | { |
97 | ListView->clear(); | 134 | ListView->clear(); |
98 | //qDebug(currentDir.canonicalPath()); | 135 | ////qDebug(currentDir.canonicalPath()); |
99 | // currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks ); | 136 | // currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks ); |
100 | currentDir.setFilter( filterspec ); | 137 | currentDir.setFilter( filterspec ); |
101 | currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); | 138 | currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); |
102 | currentDir.setMatchAllDirs(TRUE); | 139 | currentDir.setMatchAllDirs(TRUE); |
103 | 140 | ||
104 | currentDir.setNameFilter(filterStr); | 141 | currentDir.setNameFilter(filterStr); |
105 | // currentDir.setNameFilter("*.txt;*.etx"); | 142 | // currentDir.setNameFilter("*.txt;*.etx"); |
106 | QString fileL, fileS; | 143 | QString fileL, fileS; |
107 | const QFileInfoList *list = currentDir.entryInfoList(); | 144 | const QFileInfoList *list = currentDir.entryInfoList(); |
108 | QFileInfoListIterator it(*list); | 145 | QFileInfoListIterator it(*list); |
109 | QFileInfo *fi; | 146 | QFileInfo *fi; |
110 | while ( (fi=it.current()) ) | 147 | while ( (fi=it.current()) ) |
111 | { | 148 | { |
112 | if (fi->fileName() != ".") | 149 | if (fi->fileName() != ".") |
113 | { | 150 | { |
114 | fileS.sprintf( "%10li", fi->size() ); | 151 | fileS.sprintf( "%10li", fi->size() ); |
115 | fileL.sprintf( "%s",fi->fileName().data() ); | 152 | fileL.sprintf( "%s",fi->fileName().data() ); |
116 | if( fi->isDir() ) | 153 | if( fi->isDir() ) |
117 | { | 154 | { |
118 | fileL+="/"; | 155 | fileL+="/"; |
119 | } | 156 | } |
120 | else | 157 | else |
121 | { | 158 | { |
122 | // qDebug("Not a dir: "+currentDir.canonicalPath()+fileL); | 159 | //// qDebug("Not a dir: "+currentDir.canonicalPath()+fileL); |
123 | } | 160 | } |
124 | new QListViewItem( ListView,fileL,fileS ); | 161 | new QListViewItem( ListView,fileL,fileS ); |
125 | } | 162 | } |
126 | ++it; | 163 | ++it; |
127 | } | 164 | } |
128 | ListView->setSorting( 2, FALSE); | 165 | ListView->setSorting( 2, FALSE); |
129 | dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath()); | 166 | dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath()); |
130 | ListView->setFocus(); | 167 | ListView->setFocus(); |
131 | } | 168 | } |
132 | 169 | ||
133 | void fileBrowser::upDir() | 170 | void fileBrowser::upDir() |
134 | { | 171 | { |
135 | // qDebug(currentDir.canonicalPath()); | 172 | //// qDebug(currentDir.canonicalPath()); |
136 | } | 173 | } |
137 | 174 | ||
138 | void fileBrowser::listClicked(QListViewItem *selectedItem) | 175 | void fileBrowser::listClicked(QListViewItem *selectedItem) |
139 | { | 176 | { |
140 | if (selectedItem == NULL) return; | 177 | if (selectedItem == NULL) return; |
141 | QString strItem=selectedItem->text(0); | 178 | QString strItem=selectedItem->text(0); |
142 | 179 | ||
143 | // qDebug("%s", (const char*)strItem); | 180 | //// qDebug("%s", (const char*)strItem); |
144 | 181 | ||
145 | 182 | ||
146 | QString strSize=selectedItem->text(1); | 183 | QString strSize=selectedItem->text(1); |
147 | 184 | ||
148 | strSize.stripWhiteSpace(); | 185 | strSize.stripWhiteSpace(); |
149 | 186 | ||
150 | bool ok; | 187 | bool ok; |
151 | 188 | ||
152 | QFileInfo fi(strItem); | 189 | QFileInfo fi(strItem); |
153 | while (fi.isSymLink()) fi.setFile(fi.readLink()); | 190 | while (fi.isSymLink()) fi.setFile(fi.readLink()); |
154 | if (fi.isDir()) | 191 | if (fi.isDir()) |
155 | { | 192 | { |
156 | strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem); | 193 | strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem); |
157 | 194 | ||
158 | if(QDir(strItem).exists()) | 195 | if(QDir(strItem).exists()) |
159 | { | 196 | { |
160 | currentDir.cd(strItem, TRUE); | 197 | currentDir.cd(strItem, TRUE); |
161 | populateList(); | 198 | populateList(); |
162 | } | 199 | } |
163 | } else | 200 | } else |
201 | { | ||
202 | QListViewItem *selectedItem = ListView->selectedItem(); | ||
203 | if (selectedItem == NULL) | ||
204 | { | ||
205 | filename = ""; | ||
206 | } | ||
207 | else | ||
208 | { | ||
209 | filename = QDir::cleanDirPath(currentDir.canonicalPath()+"/"+selectedItem->text(0)); | ||
210 | } | ||
164 | OnOK(); | 211 | OnOK(); |
212 | } | ||
165 | chdir(strItem.latin1()); | 213 | chdir(strItem.latin1()); |
166 | // | 214 | // |
167 | 215 | ||
168 | } | 216 | } |
169 | 217 | ||
170 | // you may want to switch these 2 functions. I like single clicks | 218 | // you may want to switch these 2 functions. I like single clicks |
171 | void fileBrowser::listDoubleClicked(QListViewItem *selectedItem) | 219 | void fileBrowser::listDoubleClicked(QListViewItem *selectedItem) |
172 | { | 220 | { |
173 | } | 221 | } |
174 | 222 | ||
175 | void fileBrowser::OnOK() { | 223 | QString fileBrowser::getCurrentFile() |
224 | { | ||
225 | return filename; | ||
226 | } | ||
176 | 227 | ||
177 | QListViewItemIterator it1( ListView); | 228 | void fileBrowser::OnOK() |
178 | for ( ; it1.current(); ++it1 ) { | 229 | { |
179 | if ( it1.current()->isSelected() ) { | ||
180 | selectedFileName=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+it1.current()->text(0)); | ||
181 | // qDebug("selected filename is "+selectedFileName); | ||
182 | fileList.append( selectedFileName ); | ||
183 | } | ||
184 | } | ||
185 | accept(); | 230 | accept(); |
186 | } | 231 | } |
187 | 232 | ||
188 | void fileBrowser::OnRoot() | 233 | void fileBrowser::OnRoot() |
189 | { | 234 | { |
190 | currentDir.cd("/", TRUE); | 235 | currentDir.cd("/", TRUE); |
191 | populateList(); | 236 | populateList(); |
192 | chdir("/"); | 237 | chdir("/"); |
193 | } | 238 | } |
194 | 239 | ||
195 | void fileBrowser::OnCancel() | 240 | void fileBrowser::OnCancel() |
196 | { | 241 | { |
197 | reject(); | 242 | reject(); |
198 | } | 243 | } |
199 | 244 | ||
200 | void fileBrowser::setHidden(bool _hidden) | 245 | void fileBrowser::setHidden(bool _hidden) |
201 | { | 246 | { |
202 | if (_hidden) | 247 | if (_hidden) |
203 | filterspec = QDir::All | QDir::Hidden; | 248 | filterspec = QDir::All | QDir::Hidden; |
204 | else | 249 | else |
205 | filterspec = QDir::All; | 250 | filterspec = QDir::All; |
206 | populateList(); | 251 | populateList(); |
207 | } | 252 | } |
253 | |||
254 | void fileBrowser::onReturn() | ||
255 | { | ||
256 | QListViewItem *selectedItem = ListView->selectedItem(); | ||
257 | if (selectedItem == NULL) | ||
258 | { | ||
259 | filename = m_filename->text(); | ||
260 | } | ||
261 | else | ||
262 | { | ||
263 | filename = QDir::cleanDirPath(currentDir.canonicalPath()+"/"+m_filename->text()); | ||
264 | } | ||
265 | OnOK(); | ||
266 | } | ||
diff --git a/noncore/apps/opie-reader/fileBrowser.h b/noncore/apps/opie-reader/fileBrowser.h index 5521383..a5274f8 100644 --- a/noncore/apps/opie-reader/fileBrowser.h +++ b/noncore/apps/opie-reader/fileBrowser.h | |||
@@ -1,74 +1,77 @@ | |||
1 | /* | 1 | /* |
2 | Derived from the file browser published by ljp@llornkcor.com but extensively | 2 | Derived from the file browser published by ljp@llornkcor.com but extensively |
3 | modified to work in rotated views on the Zaurus | 3 | modified to work in rotated views on the Zaurus |
4 | */ | 4 | */ |
5 | 5 | ||
6 | /**************************************************************************** | 6 | /**************************************************************************** |
7 | ** Form interface generated from reading ui file 'fileBrowzer.ui' | 7 | ** Form interface generated from reading ui file 'fileBrowzer.ui' |
8 | ** | 8 | ** |
9 | ** Created: Fri Dec 14 08:16:02 2001 | 9 | ** Created: Fri Dec 14 08:16:02 2001 |
10 | ** by: The User Interface Compiler (uic) | 10 | ** by: The User Interface Compiler (uic) |
11 | ** | 11 | ** |
12 | ** WARNING! All changes made in this file will be lost! | 12 | ** WARNING! All changes made in this file will be lost! |
13 | blah,blah,blah | 13 | blah,blah,blah |
14 | ****************************************************************************/ | 14 | ****************************************************************************/ |
15 | #ifndef FILEBROWSER_H | 15 | #ifndef FILEBROWSER_H |
16 | #define FILEBROWSER_H | 16 | #define FILEBROWSER_H |
17 | 17 | ||
18 | //#include <qvariant.h> | 18 | //#include <qvariant.h> |
19 | #include <qdialog.h> | 19 | #include <qdialog.h> |
20 | #include <qfile.h> | 20 | #include <qfile.h> |
21 | #include <qdir.h> | 21 | #include <qdir.h> |
22 | #include <qstringlist.h> | 22 | #include <qstringlist.h> |
23 | #include <qlabel.h> | 23 | #include <qlabel.h> |
24 | #include <qstring.h> | 24 | #include <qstring.h> |
25 | 25 | ||
26 | class QVBoxLayout; | 26 | class QVBoxLayout; |
27 | class QHBoxLayout; | 27 | class QHBoxLayout; |
28 | class QGridLayout; | 28 | class QGridLayout; |
29 | class QtrListView; | 29 | class QtrListView; |
30 | class QListViewItem; | 30 | class QListViewItem; |
31 | class QPushButton; | 31 | class QPushButton; |
32 | class QLineEdit; | ||
32 | 33 | ||
33 | class fileBrowser : public QDialog | 34 | class fileBrowser : public QDialog |
34 | { | 35 | { |
35 | Q_OBJECT | 36 | Q_OBJECT |
36 | 37 | ||
37 | public: | 38 | public: |
38 | void populateList(); | 39 | void populateList(); |
39 | fileBrowser( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ,const QString filter=0, const QString iPath=0); | 40 | fileBrowser( bool allownew, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ,const QString filter=0, const QString iPath=0); |
40 | ~fileBrowser(); | 41 | ~fileBrowser(); |
41 | 42 | ||
42 | QPushButton* buttonOk; | 43 | QPushButton* buttonOk; |
43 | QPushButton* buttonShowHidden; | 44 | QPushButton* buttonShowHidden; |
44 | QtrListView* ListView; | 45 | QtrListView* ListView; |
45 | QPushButton* buttonCancel; | 46 | QPushButton* buttonCancel; |
46 | QLabel *dirLabel; | 47 | QLabel *dirLabel; |
47 | QString selectedFileName, filterStr; | 48 | QString selectedFileName, filterStr; |
48 | QDir currentDir; | 49 | QDir currentDir; |
49 | QFile file; | 50 | QFile file; |
50 | QStringList fileList; | 51 | QString getCurrentFile(); |
52 | QLineEdit* m_filename; | ||
51 | int filterspec; | 53 | int filterspec; |
52 | // QDir::FilterSpec filterspec; | 54 | // QDir::FilterSpec filterspec; |
53 | 55 | ||
54 | //QListViewItem * item; | 56 | //QListViewItem * item; |
55 | public slots: | 57 | public slots: |
56 | 58 | ||
57 | private: | 59 | private: |
58 | 60 | QString filename; | |
59 | private slots: | 61 | private slots: |
60 | void upDir(); | 62 | void upDir(); |
61 | void listDoubleClicked(QListViewItem *); | 63 | void listDoubleClicked(QListViewItem *); |
62 | void listClicked(QListViewItem *); | 64 | void listClicked(QListViewItem *); |
63 | void OnRoot(); | 65 | void OnRoot(); |
64 | void OnCancel(); | 66 | void OnCancel(); |
65 | void setHidden(bool); | 67 | void setHidden(bool); |
68 | void onReturn(); | ||
66 | 69 | ||
67 | protected slots: | 70 | protected slots: |
68 | 71 | ||
69 | protected: | 72 | protected: |
70 | void OnOK(); | 73 | void OnOK(); |
71 | virtual void resizeEvent(QResizeEvent* e); | 74 | virtual void resizeEvent(QResizeEvent* e); |
72 | }; | 75 | }; |
73 | 76 | ||
74 | #endif // FILEBROWSER_H | 77 | #endif // FILEBROWSER_H |
diff --git a/noncore/apps/opie-reader/infowin.cpp b/noncore/apps/opie-reader/infowin.cpp index 459b648..c52a1f0 100644 --- a/noncore/apps/opie-reader/infowin.cpp +++ b/noncore/apps/opie-reader/infowin.cpp | |||
@@ -1,43 +1,43 @@ | |||
1 | #include "name.h" | ||
2 | #include "infowin.h" | 1 | #include "infowin.h" |
3 | #include "version.h" | 2 | #include "version.h" |
4 | #include <stdio.h> | 3 | #include <stdio.h> |
4 | #include "names.h" | ||
5 | 5 | ||
6 | infowin::infowin( QWidget *parent, const char *name, WFlags f ) : | 6 | infowin::infowin( QWidget *parent, const char *name, WFlags f) : |
7 | QWidget(parent, name, f) | 7 | QWidget(parent, name, f) |
8 | { | 8 | { |
9 | grid = new QGridLayout(this, 6, 2); | 9 | grid = new QGridLayout(this, 6, 2); |
10 | QLabel* l; | 10 | QLabel* l; |
11 | l = new QLabel("Compressed file size", this); | 11 | l = new QLabel("Compressed file size", this); |
12 | grid->addWidget(l, 0, 0); | 12 | grid->addWidget(l, 0, 0); |
13 | fileSize = new QLabel("0", this); | 13 | fileSize = new QLabel("0", this); |
14 | fileSize->setAlignment( AlignVCenter | AlignRight ); | 14 | fileSize->setAlignment( AlignVCenter | AlignRight ); |
15 | grid->addWidget(fileSize, 0, 1); | 15 | grid->addWidget(fileSize, 0, 1); |
16 | l = new QLabel("Original text size", this); | 16 | l = new QLabel("Original text size", this); |
17 | grid->addWidget(l, 1, 0); | 17 | grid->addWidget(l, 1, 0); |
18 | textSize = new QLabel("0", this); | 18 | textSize = new QLabel("0", this); |
19 | textSize->setAlignment( AlignVCenter | AlignRight ); | 19 | textSize->setAlignment( AlignVCenter | AlignRight ); |
20 | grid->addWidget(textSize, 1, 1); | 20 | grid->addWidget(textSize, 1, 1); |
21 | l = new QLabel("Compression Ratio", this); | 21 | l = new QLabel("Compression Ratio", this); |
22 | grid->addWidget(l, 2, 0); | 22 | grid->addWidget(l, 2, 0); |
23 | ratio = new QLabel("0", this); | 23 | ratio = new QLabel("0", this); |
24 | grid->addWidget(ratio, 2, 1); | 24 | grid->addWidget(ratio, 2, 1); |
25 | ratio->setAlignment( AlignVCenter | AlignRight ); | 25 | ratio->setAlignment( AlignVCenter | AlignRight ); |
26 | l = new QLabel("Current location", this); | 26 | l = new QLabel("Current location", this); |
27 | grid->addWidget(l, 3, 0); | 27 | grid->addWidget(l, 3, 0); |
28 | location = new QLabel("0", this); | 28 | location = new QLabel("0", this); |
29 | location->setAlignment( AlignVCenter | AlignRight ); | 29 | location->setAlignment( AlignVCenter | AlignRight ); |
30 | grid->addWidget(location, 3, 1); | 30 | grid->addWidget(location, 3, 1); |
31 | l = new QLabel("Per centage read", this); | 31 | l = new QLabel("Per centage read", this); |
32 | grid->addWidget(l, 4, 0); | 32 | grid->addWidget(l, 4, 0); |
33 | read = new QLabel("0", this); | 33 | read = new QLabel("0", this); |
34 | read->setAlignment( AlignVCenter | AlignRight ); | 34 | read->setAlignment( AlignVCenter | AlignRight ); |
35 | grid->addWidget(read, 4, 1); | 35 | grid->addWidget(read, 4, 1); |
36 | char vstr[128]; | 36 | char vstr[128]; |
37 | sprintf(vstr, PROGNAME " v%u.%u%c (%s)\nA small e-text reader", MAJOR, BKMKTYPE, MINOR, RELEASE_TYPE); | 37 | sprintf(vstr, PROGNAME " v%u.%u%c (%s)\nA small e-text reader", MAJOR, BKMKTYPE, MINOR, RELEASE_TYPE); |
38 | l = new QLabel(vstr, this); | 38 | l = new QLabel(vstr, this); |
39 | grid->addWidget(l, 5, 0); | 39 | grid->addWidget(l, 5, 0); |
40 | QPushButton* exitbutton = new QPushButton("Cancel", this); | 40 | QPushButton* exitbutton = new QPushButton("Cancel", this); |
41 | connect( exitbutton, SIGNAL( released() ), this, SLOT( infoClose() ) ); | 41 | connect( exitbutton, SIGNAL( released() ), this, SLOT( infoClose() ) ); |
42 | grid->addWidget(exitbutton, 5, 1); | 42 | grid->addWidget(exitbutton, 5, 1); |
43 | } | 43 | } |
diff --git a/noncore/apps/opie-reader/main.cpp b/noncore/apps/opie-reader/main.cpp index 2440037..3e1f5e7 100644 --- a/noncore/apps/opie-reader/main.cpp +++ b/noncore/apps/opie-reader/main.cpp | |||
@@ -1,34 +1,50 @@ | |||
1 | #include "useqpe.h" | ||
2 | #ifdef USEQPE | ||
1 | #include <qpe/qpeapplication.h> | 3 | #include <qpe/qpeapplication.h> |
4 | #else | ||
5 | #include <qapplication.h> | ||
6 | #endif | ||
2 | #include "QTReaderApp.h" | 7 | #include "QTReaderApp.h" |
3 | 8 | ||
4 | #include "signal.h" | 9 | #include "signal.h" |
5 | #include "stdio.h" | 10 | #include "stdio.h" |
6 | #include "time.h" | 11 | #include "time.h" |
7 | 12 | ||
13 | |||
14 | #ifdef USEQPE | ||
8 | QTReaderApp* app = NULL; | 15 | QTReaderApp* app = NULL; |
9 | 16 | ||
10 | void handler(int signum) | 17 | void handler(int signum) |
11 | { | 18 | { |
12 | if (app != NULL) | 19 | if (app != NULL) |
13 | { | 20 | { |
14 | app->suspend(); | 21 | app->suspend(); |
15 | app->saveprefs(); | 22 | app->saveprefs(); |
16 | } | 23 | } |
17 | signal(signum, handler); | 24 | signal(signum, handler); |
18 | } | 25 | } |
26 | #endif | ||
19 | 27 | ||
20 | int main( int argc, char ** argv ) | 28 | int main( int argc, char ** argv ) |
21 | { | 29 | { |
22 | signal(SIGCONT, handler); | ||
23 | 30 | ||
31 | #ifdef USEQPE | ||
32 | signal(SIGCONT, handler); | ||
24 | QPEApplication a( argc, argv ); | 33 | QPEApplication a( argc, argv ); |
25 | |||
26 | QTReaderApp m; | 34 | QTReaderApp m; |
27 | |||
28 | a.showMainDocumentWidget( &m ); | 35 | a.showMainDocumentWidget( &m ); |
29 | |||
30 | app = &m; | 36 | app = &m; |
37 | #else | ||
38 | QApplication a( argc, argv ); | ||
39 | QTReaderApp m; | ||
40 | a.setMainWidget( &m ); | ||
41 | if (argc > 1) | ||
42 | { | ||
43 | m.setDocument(argv[1]); | ||
44 | } | ||
45 | #endif | ||
46 | |||
31 | 47 | ||
32 | return a.exec(); | 48 | return a.exec(); |
33 | } | 49 | } |
34 | 50 | ||
diff --git a/noncore/apps/opie-reader/opie-reader.pro b/noncore/apps/opie-reader/opie-reader.pro index b8915b3..871fa45 100644 --- a/noncore/apps/opie-reader/opie-reader.pro +++ b/noncore/apps/opie-reader/opie-reader.pro | |||
@@ -1,94 +1,112 @@ | |||
1 | TEMPLATE= app | 1 | TEMPLATE= app |
2 | CONFIG = qt warn_on release | 2 | CONFIG = qt warn_on release |
3 | HEADERS = Aportis.h \ | 3 | HEADERS = Aportis.h \ |
4 | Bkmks.h \ | 4 | Bkmks.h \ |
5 | BuffDoc.h \ | 5 | BuffDoc.h \ |
6 | CAnnoEdit.h \ | 6 | CAnnoEdit.h \ |
7 | CBuffer.h \ | 7 | CBuffer.h \ |
8 | CDrawBuffer.h \ | 8 | CDrawBuffer.h \ |
9 | CEncoding.h \ | 9 | CEncoding.h \ |
10 | CEncoding_tables.h \ | ||
10 | CExpander.h \ | 11 | CExpander.h \ |
11 | CFilter.h \ | 12 | CFilter.h \ |
13 | CloseDialog.h \ | ||
12 | Filedata.h \ | 14 | Filedata.h \ |
15 | FixedFont.h \ | ||
13 | FontControl.h \ | 16 | FontControl.h \ |
14 | GraphicWin.h \ | 17 | GraphicWin.h \ |
15 | Markups.h \ | 18 | Markups.h \ |
16 | Navigation.h \ | 19 | Navigation.h \ |
17 | Palm2QImage.h \ | 20 | Palm2QImage.h \ |
21 | Prefs.h \ | ||
18 | QFloatBar.h \ | 22 | QFloatBar.h \ |
19 | QTReader.h \ | 23 | QTReader.h \ |
20 | QTReaderApp.h \ | 24 | QTReaderApp.h \ |
21 | QtrListView.h \ | 25 | QtrListView.h \ |
22 | Queue.h \ | 26 | Queue.h \ |
23 | StateData.h \ | 27 | StateData.h \ |
24 | StyleConsts.h \ | 28 | StyleConsts.h \ |
29 | ToolbarPrefs.h \ | ||
30 | URLDialog.h \ | ||
25 | ZText.h \ | 31 | ZText.h \ |
26 | arith.h \ | 32 | arith.h \ |
27 | cbkmkselector.h \ | 33 | cbkmkselector.h \ |
28 | config.h \ | 34 | config.h \ |
29 | fileBrowser.h \ | 35 | fileBrowser.h \ |
30 | infowin.h \ | 36 | infowin.h \ |
37 | linktype.h \ | ||
31 | my_list.h \ | 38 | my_list.h \ |
32 | name.h \ | 39 | name.h \ |
40 | names.h \ | ||
33 | opie.h \ | 41 | opie.h \ |
34 | pdb.h \ | 42 | pdb.h \ |
35 | plucker.h \ | 43 | plucker.h \ |
44 | plucker_base.h \ | ||
36 | ppm.h \ | 45 | ppm.h \ |
37 | ppm_expander.h \ | 46 | ppm_expander.h \ |
38 | ustring.h \ | 47 | ustring.h \ |
48 | usenef.h \ | ||
49 | useqpe.h \ | ||
39 | utypes.h \ | 50 | utypes.h \ |
40 | version.h \ | 51 | version.h \ |
41 | ztxt.h | 52 | ztxt.h |
42 | 53 | ||
43 | SOURCES = Aportis.cpp \ | 54 | SOURCES = Aportis.cpp \ |
44 | Bkmks.cpp \ | 55 | Bkmks.cpp \ |
45 | BuffDoc.cpp \ | 56 | BuffDoc.cpp \ |
46 | CBuffer.cpp \ | 57 | CBuffer.cpp \ |
47 | CDrawBuffer.cpp \ | 58 | CDrawBuffer.cpp \ |
48 | CEncoding.cpp \ | 59 | CEncoding.cpp \ |
60 | CEncoding_tables.cpp \ | ||
49 | CFilter.cpp \ | 61 | CFilter.cpp \ |
62 | CloseDialog.cpp \ | ||
50 | FontControl.cpp \ | 63 | FontControl.cpp \ |
51 | Navigation.cpp \ | 64 | Navigation.cpp \ |
52 | Palm2QImage.cpp \ | 65 | Palm2QImage.cpp \ |
66 | Prefs.cpp \ | ||
53 | QTReader.cpp \ | 67 | QTReader.cpp \ |
54 | QTReaderApp.cpp \ | 68 | QTReaderApp.cpp \ |
55 | QtrListView.cpp \ | 69 | QtrListView.cpp \ |
56 | StyleConsts.cpp \ | 70 | StyleConsts.cpp \ |
71 | ToolbarPrefs.cpp \ | ||
72 | URLDialog.cpp \ | ||
57 | arith_d.cpp \ | 73 | arith_d.cpp \ |
58 | fileBrowser.cpp \ | 74 | fileBrowser.cpp \ |
59 | infowin.cpp \ | 75 | infowin.cpp \ |
60 | main.cpp \ | 76 | main.cpp \ |
61 | pdb.cpp \ | 77 | pdb.cpp \ |
62 | plucker.cpp \ | 78 | plucker.cpp \ |
79 | plucker_base.cpp \ | ||
63 | ppm.cpp \ | 80 | ppm.cpp \ |
64 | ppm_expander.cpp \ | 81 | ppm_expander.cpp \ |
82 | version.cpp \ | ||
65 | ztxt.cpp | 83 | ztxt.cpp |
66 | 84 | ||
67 | INTERFACES= | 85 | INTERFACES= |
68 | DESTDIR = $(OPIEDIR)/bin | 86 | DESTDIR = $(OPIEDIR)/bin |
69 | INCLUDEPATH+= $(OPIEDIR)/include | 87 | INCLUDEPATH+= $(OPIEDIR)/include |
70 | DEPENDPATH+= $(OPIEDIR)/include | 88 | DEPENDPATH+= $(OPIEDIR)/include |
71 | TARGET = reader | 89 | TARGET = reader |
72 | LIBS += -lqpe | 90 | LIBS += -lqpe |
73 | 91 | ||
74 | 92 | ||
75 | TRANSLATIONS = ../../../i18n/de/reader.ts \ | 93 | TRANSLATIONS = ../../../i18n/de/reader.ts \ |
76 | ../../../i18n/nl/reader.ts \ | 94 | ../../../i18n/nl/reader.ts \ |
77 | ../../../i18n/da/reader.ts \ | 95 | ../../../i18n/da/reader.ts \ |
78 | ../../../i18n/xx/reader.ts \ | 96 | ../../../i18n/xx/reader.ts \ |
79 | ../../../i18n/en/reader.ts \ | 97 | ../../../i18n/en/reader.ts \ |
80 | ../../../i18n/es/reader.ts \ | 98 | ../../../i18n/es/reader.ts \ |
81 | ../../../i18n/fr/reader.ts \ | 99 | ../../../i18n/fr/reader.ts \ |
82 | ../../../i18n/hu/reader.ts \ | 100 | ../../../i18n/hu/reader.ts \ |
83 | ../../../i18n/ja/reader.ts \ | 101 | ../../../i18n/ja/reader.ts \ |
84 | ../../../i18n/ko/reader.ts \ | 102 | ../../../i18n/ko/reader.ts \ |
85 | ../../../i18n/no/reader.ts \ | 103 | ../../../i18n/no/reader.ts \ |
86 | ../../../i18n/pl/reader.ts \ | 104 | ../../../i18n/pl/reader.ts \ |
87 | ../../../i18n/pt/reader.ts \ | 105 | ../../../i18n/pt/reader.ts \ |
88 | ../../../i18n/pt_BR/reader.ts \ | 106 | ../../../i18n/pt_BR/reader.ts \ |
89 | ../../../i18n/sl/reader.ts \ | 107 | ../../../i18n/sl/reader.ts \ |
90 | ../../../i18n/zh_CN/reader.ts \ | 108 | ../../../i18n/zh_CN/reader.ts \ |
91 | ../../../i18n/zh_TW/reader.ts | 109 | ../../../i18n/zh_TW/reader.ts |
92 | 110 | ||
93 | 111 | ||
94 | include ( $(OPIEDIR)/include.pro ) | 112 | include ( $(OPIEDIR)/include.pro ) |
diff --git a/noncore/apps/opie-reader/pdb.cpp b/noncore/apps/opie-reader/pdb.cpp index 3054424..dca67ff 100644 --- a/noncore/apps/opie-reader/pdb.cpp +++ b/noncore/apps/opie-reader/pdb.cpp | |||
@@ -1,63 +1,60 @@ | |||
1 | #include "pdb.h" | 1 | #include "pdb.h" |
2 | #include <sys/types.h> | 2 | #ifdef _WINDOWS |
3 | #include <sys/stat.h> | 3 | #include <winsock2.h> |
4 | #include <unistd.h> | 4 | #endif |
5 | 5 | ||
6 | size_t Cpdb::recordpos(int n) | 6 | size_t Cpdb::recordpos(int n) |
7 | { | 7 | { |
8 | UInt16 mxn = ntohs(head.recordList.numRecords); | 8 | UInt16 mxn = ntohs(head.recordList.numRecords); |
9 | if (n >= mxn) | 9 | if (n >= mxn) |
10 | { | 10 | { |
11 | return file_length; | 11 | return file_length; |
12 | } | 12 | } |
13 | else | 13 | else |
14 | { | 14 | { |
15 | size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16); | 15 | size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16); |
16 | dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n; | 16 | dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n; |
17 | fseek(fin, dataoffset, SEEK_SET); | 17 | fseek(fin, dataoffset, SEEK_SET); |
18 | RecordListType hdr; | 18 | RecordListType hdr; |
19 | fread(&hdr, 1, sizeof(hdr), fin); | 19 | fread(&hdr, 1, sizeof(hdr), fin); |
20 | return ntohl(hdr.nextRecordListID); | 20 | return ntohl(hdr.nextRecordListID); |
21 | } | 21 | } |
22 | 22 | ||
23 | } | 23 | } |
24 | 24 | ||
25 | size_t Cpdb::recordlength(int n) | 25 | size_t Cpdb::recordlength(int n) |
26 | { | 26 | { |
27 | return recordpos(n+1)-recordpos(n); | 27 | return recordpos(n+1)-recordpos(n); |
28 | } | 28 | } |
29 | 29 | ||
30 | void Cpdb::gotorecordnumber(int n) | 30 | void Cpdb::gotorecordnumber(int n) |
31 | { | 31 | { |
32 | fseek(fin, recordpos(n), SEEK_SET); | 32 | fseek(fin, recordpos(n), SEEK_SET); |
33 | } | 33 | } |
34 | 34 | ||
35 | bool Cpdb::openfile(const char *src) | 35 | bool Cpdb::openfile(const char *src) |
36 | { | 36 | { |
37 | 37 | ||
38 | // printf("In openfile\n"); | 38 | // printf("In openfile\n"); |
39 | int ret = 0; | 39 | int ret = 0; |
40 | // printf("closing fin:%x\n",fin); | 40 | // printf("closing fin:%x\n",fin); |
41 | if (fin != NULL) fclose(fin); | 41 | if (fin != NULL) fclose(fin); |
42 | // printf("opening fin\n"); | 42 | // printf("opening fin\n"); |
43 | fin = fopen(src,"rb"); | 43 | fin = fopen(src,"rb"); |
44 | 44 | ||
45 | if (fin==0) | 45 | if (fin==0) |
46 | { | 46 | { |
47 | return false; | 47 | return false; |
48 | } | 48 | } |
49 | 49 | ||
50 | // just holds the first few chars of the file | 50 | // just holds the first few chars of the file |
51 | //char buf[0x100]; | 51 | //char buf[0x100]; |
52 | struct stat buf; | 52 | fseek(fin,0,SEEK_END); |
53 | stat(src, &buf); | 53 | file_length = ftell(fin); |
54 | file_length = buf.st_size; | ||
55 | // fseek(fin,0,SEEK_END); | ||
56 | // file_length = ftell(fin); | ||
57 | 54 | ||
58 | // fseek(fin,0,SEEK_SET); | 55 | fseek(fin,0,SEEK_SET); |
59 | 56 | ||
60 | fread(&head, 1, sizeof(head), fin); | 57 | fread(&head, 1, sizeof(head), fin); |
61 | 58 | ||
62 | return true; | 59 | return true; |
63 | } | 60 | } |
diff --git a/noncore/apps/opie-reader/pdb.h b/noncore/apps/opie-reader/pdb.h index 41649bd..eac3ae6 100644 --- a/noncore/apps/opie-reader/pdb.h +++ b/noncore/apps/opie-reader/pdb.h | |||
@@ -1,91 +1,93 @@ | |||
1 | 1 | ||
2 | /* | 2 | /* |
3 | * This header file defines some structures and types normally found in the | 3 | * This header file defines some structures and types normally found in the |
4 | * Palm SDK. However, I don't want to require the presense of the SDK for a | 4 | * Palm SDK. However, I don't want to require the presense of the SDK for a |
5 | * small utility since most Palm owners won't have it. | 5 | * small utility since most Palm owners won't have it. |
6 | * | 6 | * |
7 | * $Id$ | 7 | * $Id$ |
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #ifndef __PDB_H__ | 11 | #ifndef __PDB_H__ |
12 | #define __PDB_H__ | 12 | #define __PDB_H__ |
13 | 13 | ||
14 | #ifndef _WINDOWS | ||
14 | #include <netinet/in.h> | 15 | #include <netinet/in.h> |
16 | #endif | ||
15 | #include <stdio.h> | 17 | #include <stdio.h> |
16 | 18 | ||
17 | /* Normal Palm typedefs */ | 19 | /* Normal Palm typedefs */ |
18 | typedef unsigned char UInt8; | 20 | typedef unsigned char UInt8; |
19 | typedef unsigned short UInt16; | 21 | typedef unsigned short UInt16; |
20 | typedef signed short Int16; | 22 | typedef signed short Int16; |
21 | typedef unsigned long UInt32; | 23 | typedef unsigned long UInt32; |
22 | typedef UInt32 LocalID; | 24 | typedef UInt32 LocalID; |
23 | 25 | ||
24 | /* Max length of DB name */ | 26 | /* Max length of DB name */ |
25 | #define dmDBNameLength 0x20 | 27 | #define dmDBNameLength 0x20 |
26 | 28 | ||
27 | 29 | ||
28 | /************************************************************ | 30 | /************************************************************ |
29 | * Structure of a Record entry | 31 | * Structure of a Record entry |
30 | *************************************************************/ | 32 | *************************************************************/ |
31 | typedef struct { | 33 | typedef struct { |
32 | LocalID localChunkID; // local chunkID of a record | 34 | LocalID localChunkID; // local chunkID of a record |
33 | UInt8 attributes; // record attributes; | 35 | UInt8 attributes; // record attributes; |
34 | UInt8 uniqueID[3]; // unique ID of record; should | 36 | UInt8 uniqueID[3]; // unique ID of record; should |
35 | // not be 0 for a legal record. | 37 | // not be 0 for a legal record. |
36 | } RecordEntryType; | 38 | } RecordEntryType; |
37 | 39 | ||
38 | 40 | ||
39 | /************************************************************ | 41 | /************************************************************ |
40 | * Structure of a record list extension. This is used if all | 42 | * Structure of a record list extension. This is used if all |
41 | * the database record/resource entries of a database can't fit into | 43 | * the database record/resource entries of a database can't fit into |
42 | * the database header. | 44 | * the database header. |
43 | *************************************************************/ | 45 | *************************************************************/ |
44 | typedef struct { | 46 | typedef struct { |
45 | LocalID nextRecordListID; // local chunkID of next list | 47 | LocalID nextRecordListID; // local chunkID of next list |
46 | UInt16 numRecords; // number of records in this list | 48 | UInt16 numRecords; // number of records in this list |
47 | UInt16 firstEntry; // array of Record/Rsrc entries | 49 | UInt16 firstEntry; // array of Record/Rsrc entries |
48 | // starts here | 50 | // starts here |
49 | } RecordListType; | 51 | } RecordListType; |
50 | 52 | ||
51 | 53 | ||
52 | /************************************************************ | 54 | /************************************************************ |
53 | * Structure of a Database Header | 55 | * Structure of a Database Header |
54 | *************************************************************/ | 56 | *************************************************************/ |
55 | typedef struct { | 57 | typedef struct { |
56 | UInt8 name[dmDBNameLength]; // name of database | 58 | UInt8 name[dmDBNameLength]; // name of database |
57 | UInt16 attributes; // database attributes | 59 | UInt16 attributes; // database attributes |
58 | UInt16 version; // version of database | 60 | UInt16 version; // version of database |
59 | UInt32 creationDate; // creation date of database | 61 | UInt32 creationDate; // creation date of database |
60 | UInt32 modificationDate; // latest modification date | 62 | UInt32 modificationDate; // latest modification date |
61 | UInt32 lastBackupDate; // latest backup date | 63 | UInt32 lastBackupDate; // latest backup date |
62 | UInt32 modificationNumber; // modification number of database | 64 | UInt32 modificationNumber; // modification number of database |
63 | LocalID appInfoID; // application specific info | 65 | LocalID appInfoID; // application specific info |
64 | LocalID sortInfoID; // app specific sorting info | 66 | LocalID sortInfoID; // app specific sorting info |
65 | UInt32 type; // database type | 67 | UInt32 type; // database type |
66 | UInt32 creator; // database creator | 68 | UInt32 creator; // database creator |
67 | UInt32 uniqueIDSeed; // used to generate unique IDs. | 69 | UInt32 uniqueIDSeed; // used to generate unique IDs. |
68 | // Note that only the low order | 70 | // Note that only the low order |
69 | // 3 bytes of this is used (in | 71 | // 3 bytes of this is used (in |
70 | // RecordEntryType.uniqueID). | 72 | // RecordEntryType.uniqueID). |
71 | // We are keeping 4 bytes for | 73 | // We are keeping 4 bytes for |
72 | // alignment purposes. | 74 | // alignment purposes. |
73 | RecordListType recordList; // first record list | 75 | RecordListType recordList; // first record list |
74 | } DatabaseHdrType; | 76 | } DatabaseHdrType; |
75 | 77 | ||
76 | 78 | ||
77 | class Cpdb | 79 | class Cpdb |
78 | { | 80 | { |
79 | protected: | 81 | protected: |
80 | size_t file_length; | 82 | size_t file_length; |
81 | FILE* fin; | 83 | FILE* fin; |
82 | size_t recordpos(int); | 84 | size_t recordpos(int); |
83 | size_t recordlength(int); | 85 | size_t recordlength(int); |
84 | void gotorecordnumber(int); | 86 | void gotorecordnumber(int); |
85 | DatabaseHdrType head; | 87 | DatabaseHdrType head; |
86 | bool openfile(const char* src); | 88 | bool openfile(const char* src); |
87 | Cpdb() : fin(NULL) {} | 89 | Cpdb() : fin(NULL) {} |
88 | ~Cpdb() { if (fin != NULL) fclose(fin); } | 90 | ~Cpdb() { if (fin != NULL) fclose(fin); } |
89 | }; | 91 | }; |
90 | #endif | 92 | #endif |
91 | 93 | ||
diff --git a/noncore/apps/opie-reader/plucker.cpp b/noncore/apps/opie-reader/plucker.cpp index eb039de..e49e35f 100644 --- a/noncore/apps/opie-reader/plucker.cpp +++ b/noncore/apps/opie-reader/plucker.cpp | |||
@@ -1,1241 +1,156 @@ | |||
1 | #include "useqpe.h" | ||
1 | #include <stdio.h> | 2 | #include <stdio.h> |
2 | #include <string.h> | 3 | #include <string.h> |
3 | #include <qmessagebox.h> | 4 | #include <qmessagebox.h> |
4 | #include <qpixmap.h> | 5 | #include <qpixmap.h> |
6 | #ifdef USEQPE | ||
5 | #include <qpe/qcopenvelope_qws.h> | 7 | #include <qpe/qcopenvelope_qws.h> |
8 | #endif | ||
6 | #ifdef LOCALPICTURES | 9 | #ifdef LOCALPICTURES |
7 | #include <qscrollview.h> | 10 | #include <qscrollview.h> |
8 | #endif | 11 | #endif |
12 | #ifdef USEQPE | ||
9 | #include <qpe/global.h> | 13 | #include <qpe/global.h> |
10 | #include <qclipboard.h> | ||
11 | #include <qpe/qpeapplication.h> | 14 | #include <qpe/qpeapplication.h> |
15 | #else | ||
16 | #include <qapplication.h> | ||
17 | #endif | ||
18 | #include <qclipboard.h> | ||
12 | 19 | ||
13 | #include "plucker.h" | 20 | #include "plucker.h" |
14 | #include "Aportis.h" | 21 | #include "Aportis.h" |
15 | #include "Palm2QImage.h" | 22 | #include "Palm2QImage.h" |
16 | #include "name.h" | ||
17 | 23 | ||
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);*/ } | ||
27 | 24 | ||
28 | 25 | struct CPlucker_dataRecord | |
29 | void CPlucker::Expand(UInt16 reclen, UInt8 type, UInt8* buffer, UInt16 buffersize) | ||
30 | { | 26 | { |
31 | if (type%2 == 0) | 27 | UInt16 uid; |
32 | { | 28 | UInt16 nParagraphs; |
33 | fread(buffer, reclen, sizeof(char), fin); | 29 | UInt16 size; |
34 | } | 30 | UInt8 type; |
35 | else | 31 | UInt8 reserved; |
36 | { | 32 | }; |
37 | fread(compressedtextbuffer, reclen, sizeof(char), fin); | ||
38 | switch (ntohs(hdr0.version)) | ||
39 | { | ||
40 | case 2: | ||
41 | UnZip(reclen, buffer, buffersize); | ||
42 | break; | ||
43 | case 1: | ||
44 | UnDoc(reclen, buffer, buffersize); | ||
45 | break; | ||
46 | } | ||
47 | } | ||
48 | } | ||
49 | 33 | ||
50 | int CPlucker::OpenFile(const char *src) | 34 | int CPlucker::HeaderSize() |
51 | { | 35 | { |
52 | m_lastBreak = 0; | 36 | return sizeof(CPlucker_dataRecord); |
53 | if (!Cpdb::openfile(src)) | ||
54 | { | ||
55 | return -1; | ||
56 | } | ||
57 | |||
58 | //printf("Okay %u\n", 4); | ||
59 | |||
60 | if (memcmp(&head.type, "DataPlkr", 8) != 0) return -1; | ||
61 | |||
62 | // qDebug("Cool - this IS plucker"); | ||
63 | |||
64 | EOPPhase = 0; | ||
65 | gotorecordnumber(0); | ||
66 | fread(&hdr0, 1, sizeof(hdr0), fin); | ||
67 | //printf("Okay %u\n", 5); | ||
68 | buffersize = 32*1024; | ||
69 | compressedtextbuffer = new UInt8[buffersize]; | ||
70 | expandedtextbuffer = new UInt8[buffersize]; | ||
71 | |||
72 | qDebug("Total number of records:%u", ntohs(head.recordList.numRecords)); | ||
73 | |||
74 | unsigned int nrecs = ntohs(hdr0.nRecords); | ||
75 | qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs); | ||
76 | UInt16 homerecid = 1; | ||
77 | UInt16 urlid = 0; | ||
78 | bool urlsfound = false; | ||
79 | for (unsigned int i = 0; i < nrecs; i++) | ||
80 | { | ||
81 | UInt16 id, name; | ||
82 | fread(&name, 1, sizeof(name), fin); | ||
83 | fread(&id, 1, sizeof(id), fin); | ||
84 | qDebug("N:%d, I:%d", ntohs(name), ntohs(id)); | ||
85 | if (ntohs(name) == 0) homerecid = ntohs(id); | ||
86 | if (ntohs(name) == 2) | ||
87 | { | ||
88 | urlsfound = true; | ||
89 | urlid = id; | ||
90 | qDebug("Found url index:%d", ntohs(urlid)); | ||
91 | } | ||
92 | //qDebug("%x", id); | ||
93 | } | ||
94 | |||
95 | textlength = 0; | ||
96 | for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) | ||
97 | { | ||
98 | CPlucker_dataRecord thisHdr; | ||
99 | gotorecordnumber(recptr); | ||
100 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
101 | if (ntohs(thisHdr.uid) == homerecid) | ||
102 | { | ||
103 | m_homepos = textlength; | ||
104 | qDebug("Home pos found after %u records", recptr); | ||
105 | break; | ||
106 | } | ||
107 | if (thisHdr.type < 2) textlength += ntohs(thisHdr.size); | ||
108 | } | ||
109 | textlength = 0; | ||
110 | |||
111 | if (urlsfound) | ||
112 | { | ||
113 | unsigned short recptr = finduid(ntohs(urlid)); | ||
114 | if (recptr != 0) | ||
115 | { | ||
116 | CPlucker_dataRecord thisHdr; | ||
117 | gotorecordnumber(recptr); | ||
118 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
119 | fread(&urlid, 1, sizeof(urlid), fin); | ||
120 | fread(&urlid, 1, sizeof(urlid), fin); | ||
121 | qDebug("urls are in %d", ntohs(urlid)); | ||
122 | recptr = finduid(ntohs(urlid)); | ||
123 | if (recptr != 0) | ||
124 | { | ||
125 | gotorecordnumber(recptr); | ||
126 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
127 | qDebug("Found urls:%x",thisHdr.type); | ||
128 | UInt16 reclen = recordlength(recptr) - sizeof(thisHdr); | ||
129 | gotorecordnumber(recptr); | ||
130 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
131 | urlsize = ntohs(thisHdr.size); | ||
132 | urls = new char[urlsize]; | ||
133 | Expand(reclen, thisHdr.type, (UInt8*)urls, urlsize); | ||
134 | } | ||
135 | } | ||
136 | } | ||
137 | /* | ||
138 | for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) | ||
139 | { | ||
140 | CPlucker_dataRecord thisHdr; | ||
141 | gotorecordnumber(recptr); | ||
142 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
143 | if (thisHdr.uid == urlid) | ||
144 | { | ||
145 | qDebug("Found urls:%x",thisHdr.type); | ||
146 | UInt16 reclen = recordlength(recptr) - sizeof(thisHdr); | ||
147 | gotorecordnumber(recptr); | ||
148 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
149 | urlsize = ntohs(thisHdr.size); | ||
150 | urls = new char[urlsize]; | ||
151 | Expand(reclen, thisHdr.type, (UInt8*)urls, urlsize); | ||
152 | break; | ||
153 | } | ||
154 | } | ||
155 | */ | ||
156 | home(); | ||
157 | #ifdef LOCALPICTURES | ||
158 | if (m_viewer == NULL) | ||
159 | { | ||
160 | m_viewer = new QScrollView(NULL); | ||
161 | m_picture = new QWidget(m_viewer->viewport()); | ||
162 | m_viewer->addChild(m_picture); | ||
163 | } | ||
164 | #endif | ||
165 | return 0; | ||
166 | |||
167 | } | 37 | } |
168 | 38 | ||
169 | void CPlucker::sizes(unsigned long& _file, unsigned long& _text) | 39 | void CPlucker::GetHeader(UInt16& uid, UInt16& nParagraphs, UInt32& size, UInt8& type, UInt8& reserved) |
170 | { | 40 | { |
171 | qDebug("Sizes called:%u",textlength); | 41 | CPlucker_dataRecord thishdr; |
172 | _file = file_length; | 42 | fread(&thishdr, 1, HeaderSize(), fin); |
173 | if (textlength == 0) | 43 | uid = ntohs(thishdr.uid); |
174 | { | 44 | nParagraphs = ntohs(thishdr.nParagraphs); |
175 | for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++) | 45 | size = ntohs(thishdr.size); |
176 | { | 46 | type = thishdr.type; |
177 | CPlucker_dataRecord thisHdr; | 47 | reserved = thishdr.reserved; |
178 | gotorecordnumber(recptr); | ||
179 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
180 | if (thisHdr.type < 2) textlength += ntohs(thisHdr.size); | ||
181 | } | ||
182 | } | ||
183 | _text = textlength; | ||
184 | //ntohl(hdr0.size); | ||
185 | } | 48 | } |
186 | 49 | ||
50 | CPlucker::CPlucker() | ||
51 | { /*printf("constructing:%x\n",fin);*/ } | ||
187 | 52 | ||
188 | char* CPlucker::geturl(UInt16 i) | 53 | bool CPlucker::CorrectDecoder() |
189 | { | ||
190 | if (urls == NULL) return NULL; | ||
191 | char* ptr = urls; | ||
192 | int rn = 1; | ||
193 | while (ptr - urls < urlsize) | ||
194 | { | ||
195 | if (rn == i) return ptr; | ||
196 | ptr += strlen(ptr)+1; | ||
197 | rn++; | ||
198 | } | ||
199 | return NULL; | ||
200 | } | ||
201 | |||
202 | CPlucker::~CPlucker() | ||
203 | { | 54 | { |
204 | if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; | 55 | return (memcmp(&head.type, "DataPlkr", 8) == 0); |
205 | if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; | ||
206 | if (urls != NULL) delete [] urls; | ||
207 | #ifdef LOCALPICTURES | ||
208 | if (m_viewer != NULL) delete m_viewer; | ||
209 | #endif | ||
210 | } | 56 | } |
211 | 57 | ||
212 | int CPlucker::bgetch() | 58 | int CPlucker::bgetch() |
213 | { | 59 | { |
214 | int ch = EOF; | 60 | int ch = EOF; |
215 | if (bufferpos >= buffercontent) | 61 | if (bufferpos >= buffercontent) |
216 | { | 62 | { |
217 | if (!m_continuous) return EOF; | 63 | if (!m_continuous) return EOF; |
218 | if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF; | 64 | if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF; |
219 | //qDebug("Passing through %u", currentpos); | 65 | ////qDebug("Passing through %u", currentpos); |
220 | if (!expand(bufferrec+1)) return EOF; | 66 | if (!expand(bufferrec+1)) return EOF; |
221 | mystyle.unset(); | 67 | mystyle.unset(); |
68 | if (m_ParaOffsets[m_nextParaIndex] == 0) | ||
69 | { | ||
70 | while (m_ParaOffsets[m_nextParaIndex+1] == 0) | ||
71 | { | ||
72 | // qDebug("Skipping extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7); | ||
73 | m_nextParaIndex++; | ||
74 | } | ||
75 | } | ||
76 | mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2); | ||
77 | //qDebug("Using extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7); | ||
222 | ch = 10; | 78 | ch = 10; |
223 | EOPPhase = 4; | 79 | EOPPhase = 4; |
224 | } | 80 | } |
225 | else if (bufferpos == m_nextPara) | 81 | else if (bufferpos == m_nextPara) |
226 | { | 82 | { |
227 | while (bufferpos == m_nextPara) | 83 | while (bufferpos == m_nextPara) |
228 | { | 84 | { |
229 | UInt16 attr = m_ParaAttrs[m_nextParaIndex]; | 85 | UInt16 attr = m_ParaAttrs[m_nextParaIndex]; |
230 | m_nextParaIndex++; | 86 | m_nextParaIndex++; |
87 | // qDebug("Skipping extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7); | ||
231 | if (m_nextParaIndex == m_nParas) | 88 | if (m_nextParaIndex == m_nParas) |
232 | { | 89 | { |
233 | m_nextPara = -1; | 90 | m_nextPara = -1; |
234 | } | 91 | } |
235 | else | 92 | else |
236 | { | 93 | { |
237 | m_nextPara += m_ParaOffsets[m_nextParaIndex]; | 94 | m_nextPara += m_ParaOffsets[m_nextParaIndex]; |
238 | } | 95 | } |
239 | } | 96 | } |
240 | mystyle.unset(); | 97 | mystyle.unset(); |
98 | mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2); | ||
99 | //qDebug("Using extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7); | ||
241 | if (m_lastBreak == locate()) | 100 | if (m_lastBreak == locate()) |
242 | { | 101 | { |
243 | currentpos++; | 102 | currentpos++; |
244 | ch = expandedtextbuffer[bufferpos++]; | 103 | ch = expandedtextbuffer[bufferpos++]; |
245 | } | 104 | } |
246 | else | 105 | else |
247 | { | 106 | { |
248 | ch = 10; | 107 | ch = 10; |
249 | } | 108 | } |
250 | } | 109 | } |
251 | else | 110 | else |
252 | { | 111 | { |
253 | currentpos++; | 112 | currentpos++; |
254 | ch = expandedtextbuffer[bufferpos++]; | 113 | ch = expandedtextbuffer[bufferpos++]; |
255 | } | 114 | } |
256 | return ch; | 115 | return ch; |
257 | } | 116 | } |
258 | 117 | ||
259 | int CPlucker::getch() | 118 | tchar CPlucker::getch(bool fast) |
260 | { | 119 | { |
261 | mystyle.clearPicture(); | 120 | mystyle.clearPicture(); |
262 | 121 | ||
263 | |||
264 | if (EOPPhase > 0) | 122 | if (EOPPhase > 0) |
265 | { | 123 | { |
266 | int ch = 10; | 124 | int ch = 10; |
267 | switch (EOPPhase) | 125 | switch (EOPPhase) |
268 | { | 126 | { |
269 | case 4: | 127 | case 4: |
270 | mystyle.setPicture(hRule(100,5)); | 128 | if (!fast) mystyle.setPicture(false, hRule(100,5)); |
271 | mystyle.setCentreJustify(); | 129 | mystyle.setCentreJustify(); |
272 | ch = '#'; | 130 | ch = '#'; |
273 | break; | 131 | break; |
274 | case 3: | 132 | case 3: |
275 | mystyle.setFontSize(3); | 133 | mystyle.setFontSize(3); |
276 | ch = 10; | 134 | ch = 10; |
277 | break; | 135 | break; |
278 | case 2: | 136 | case 2: |
279 | ch = 10; | 137 | ch = 10; |
280 | break; | 138 | break; |
281 | case 1: | 139 | case 1: |
282 | mystyle.unset(); | 140 | mystyle.unset(); |
283 | default: | 141 | default: |
284 | ch = 10; | 142 | ch = 10; |
285 | } | 143 | } |
286 | EOPPhase--; | 144 | EOPPhase--; |
287 | return ch; | 145 | return ch; |
288 | } | 146 | } |
289 | 147 | ||
290 | 148 | return getch_base(fast); | |
291 | int ch = bgetch(); | ||
292 | while (ch == 0) | ||
293 | { | ||
294 | ch = bgetch(); | ||
295 | //qDebug("Function:%x", ch); | ||
296 | switch (ch) | ||
297 | { | ||
298 | case 0x38: | ||
299 | // qDebug("Break:%u", locate()); | ||
300 | if (m_lastBreak == locate()) | ||
301 | { | ||
302 | ch = bgetch(); | ||
303 | } | ||
304 | else | ||
305 | { | ||
306 | ch = 10; | ||
307 | } | ||
308 | m_lastBreak = locate(); | ||
309 | break; | ||
310 | case 0x0a: | ||
311 | case 0x0c: | ||
312 | { | ||
313 | unsigned long ln = 0; | ||
314 | int skip = ch & 7; | ||
315 | for (int i = 0; i < 2; i++) | ||
316 | { | ||
317 | int ch = bgetch(); | ||
318 | ln = (ln << 8) + ch; | ||
319 | // qDebug("ch:%d, ln:%u", ch, ln); | ||
320 | } | ||
321 | if (skip == 2) | ||
322 | { | ||
323 | ln <<= 16; | ||
324 | } | ||
325 | else | ||
326 | { | ||
327 | for (int i = 0; i < 2; i++) | ||
328 | { | ||
329 | int ch = bgetch(); | ||
330 | ln = (ln << 8) + ch; | ||
331 | // qDebug("ch:%d, ln:%u", ch, ln); | ||
332 | } | ||
333 | } | ||
334 | // qDebug("ln:%u", ln); | ||
335 | mystyle.setLink(true); | ||
336 | mystyle.setData(ln); | ||
337 | // mystyle.setColour(255, 0, 0); | ||
338 | bool hasseen = false; | ||
339 | for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++) | ||
340 | { | ||
341 | if (*it == ln) | ||
342 | { | ||
343 | hasseen = true; | ||
344 | break; | ||
345 | } | ||
346 | } | ||
347 | if (hasseen) | ||
348 | { | ||
349 | mystyle.setStrikethru(); | ||
350 | } | ||
351 | else | ||
352 | { | ||
353 | mystyle.setUnderline(); | ||
354 | } | ||
355 | ch = bgetch(); | ||
356 | } | ||
357 | break; | ||
358 | case 0x08: | ||
359 | ch = bgetch(); | ||
360 | // mystyle.setColour(0, 0, 0); | ||
361 | mystyle.unsetUnderline(); | ||
362 | mystyle.unsetStrikethru(); | ||
363 | mystyle.setLink(false); | ||
364 | mystyle.setData(0); | ||
365 | break; | ||
366 | case 0x40: | ||
367 | mystyle.setItalic(); | ||
368 | ch = bgetch(); | ||
369 | break; | ||
370 | case 0x48: | ||
371 | mystyle.unsetItalic(); | ||
372 | ch = bgetch(); | ||
373 | break; | ||
374 | case 0x11: | ||
375 | { | ||
376 | ch = bgetch(); | ||
377 | // qDebug("Font:%d",ch); | ||
378 | switch (ch) | ||
379 | { | ||
380 | case 0: | ||
381 | mystyle.unsetMono(); | ||
382 | mystyle.unsetBold(); | ||
383 | mystyle.setFontSize(0); | ||
384 | break; | ||
385 | case 1: | ||
386 | mystyle.unsetMono(); | ||
387 | mystyle.setBold(); | ||
388 | mystyle.setFontSize(3); | ||
389 | break; | ||
390 | case 2: | ||
391 | mystyle.unsetMono(); | ||
392 | mystyle.setBold(); | ||
393 | mystyle.setFontSize(2); | ||
394 | break; | ||
395 | case 3: | ||
396 | mystyle.unsetMono(); | ||
397 | mystyle.setBold(); | ||
398 | // mystyle.unsetBold(); | ||
399 | mystyle.setFontSize(1); | ||
400 | break; | ||
401 | case 4: | ||
402 | mystyle.unsetMono(); | ||
403 | mystyle.setBold(); | ||
404 | // mystyle.unsetBold(); | ||
405 | mystyle.setFontSize(0); | ||
406 | break; | ||
407 | case 5: | ||
408 | mystyle.unsetMono(); | ||
409 | mystyle.setBold(); | ||
410 | mystyle.setFontSize(0); | ||
411 | break; | ||
412 | case 6: | ||
413 | mystyle.unsetMono(); | ||
414 | mystyle.setBold(); | ||
415 | mystyle.setFontSize(0); | ||
416 | break; | ||
417 | case 7: | ||
418 | mystyle.unsetMono(); | ||
419 | mystyle.setBold(); | ||
420 | mystyle.setFontSize(0); | ||
421 | break; | ||
422 | case 8: // should be fixed width | ||
423 | qDebug("Trying fixed width"); | ||
424 | mystyle.unsetBold(); | ||
425 | mystyle.setFontSize(0); | ||
426 | mystyle.setMono(); | ||
427 | break; | ||
428 | default: | ||
429 | mystyle.unsetBold(); | ||
430 | mystyle.unsetMono(); | ||
431 | mystyle.setFontSize(0); | ||
432 | break; | ||
433 | } | ||
434 | ch = bgetch(); | ||
435 | } | ||
436 | break; | ||
437 | case 0x29: | ||
438 | ch = bgetch(); | ||
439 | switch (ch) | ||
440 | { | ||
441 | case 0: | ||
442 | mystyle.setLeftJustify(); | ||
443 | // qDebug("left"); | ||
444 | break; | ||
445 | case 1: | ||
446 | mystyle.setRightJustify(); | ||
447 | // qDebug("right"); | ||
448 | break; | ||
449 | case 2: | ||
450 | mystyle.setCentreJustify(); | ||
451 | // qDebug("centre"); | ||
452 | break; | ||
453 | case 3: | ||
454 | mystyle.setFullJustify(); | ||
455 | // qDebug("full"); | ||
456 | break; | ||
457 | |||
458 | } | ||
459 | ch = bgetch(); | ||
460 | break; | ||
461 | case 0x53: | ||
462 | { | ||
463 | int r = bgetch(); | ||
464 | int g = bgetch(); | ||
465 | int b = bgetch(); | ||
466 | mystyle.setColour(r,g,b); | ||
467 | ch = bgetch(); | ||
468 | } | ||
469 | break; | ||
470 | case 0x1a: | ||
471 | case 0x5c: | ||
472 | { | ||
473 | bool hasalternate = (ch == 0x5c); | ||
474 | UInt16 ir = bgetch(); | ||
475 | ir = (ir << 8) + bgetch(); | ||
476 | if (hasalternate) | ||
477 | { | ||
478 | qDebug("Alternate image:%x", ir); | ||
479 | UInt16 ir2 = bgetch(); | ||
480 | ir2 = (ir2 << 8) + bgetch(); | ||
481 | mystyle.setPicture(expandimg(ir2, true), true, ir); | ||
482 | #ifdef LOCALPICTURES | ||
483 | UInt32 ln = ir; | ||
484 | ln <<= 16; | ||
485 | mystyle.setLink(true); | ||
486 | mystyle.setData(ln); | ||
487 | #endif | ||
488 | } | ||
489 | else | ||
490 | { | ||
491 | mystyle.setPicture(expandimg(ir)); | ||
492 | } | ||
493 | if (mystyle.getLink()) qDebug("Picture link!"); | ||
494 | ch = '#'; | ||
495 | } | ||
496 | // ch = bgetch(); | ||
497 | break; | ||
498 | case 0x33: | ||
499 | { | ||
500 | UInt8 h = bgetch(); | ||
501 | UInt8 wc = bgetch(); | ||
502 | UInt8 pc = bgetch(); | ||
503 | UInt16 w = wc; | ||
504 | // qDebug("h,w,pc [%u, %u, %u]", h, w, pc); | ||
505 | if (w == 0) | ||
506 | { | ||
507 | w = (240*(unsigned long)pc)/100; | ||
508 | } | ||
509 | if (w == 0) w = 320; | ||
510 | mystyle.setPicture(hRule(w,h,mystyle.Red(),mystyle.Green(),mystyle.Blue())); | ||
511 | // if (mystyle.getLink()) qDebug("hRule link!"); | ||
512 | ch = '#'; | ||
513 | } | ||
514 | break; | ||
515 | case 0x60: | ||
516 | mystyle.setUnderline(); | ||
517 | ch = bgetch(); | ||
518 | break; | ||
519 | case 0x68: | ||
520 | mystyle.unsetUnderline(); | ||
521 | ch = bgetch(); | ||
522 | break; | ||
523 | case 0x22: | ||
524 | ch = bgetch(); | ||
525 | mystyle.setLeftMargin(ch); | ||
526 | // qDebug("Left margin:%d", ch); | ||
527 | ch = bgetch(); | ||
528 | mystyle.setRightMargin(ch); | ||
529 | // qDebug("Right margin:%d", ch); | ||
530 | ch = bgetch(); | ||
531 | break; | ||
532 | case 0x70: | ||
533 | mystyle.setStrikethru(); | ||
534 | ch = bgetch(); | ||
535 | break; | ||
536 | case 0x78: | ||
537 | mystyle.unsetStrikethru(); | ||
538 | ch = bgetch(); | ||
539 | break; | ||
540 | case 0x83: | ||
541 | case 0x85: | ||
542 | default: | ||
543 | qDebug("Function:%x NOT IMPLEMENTED", ch); | ||
544 | { | ||
545 | int skip = ch & 7; | ||
546 | for (int i = 0; i < skip; i++) | ||
547 | { | ||
548 | ch = bgetch(); | ||
549 | // qDebug("Arg %d, %d", i, ch); | ||
550 | } | ||
551 | ch = bgetch(); | ||
552 | } | ||
553 | } | ||
554 | } | ||
555 | |||
556 | if (m_lastIsBreak && !mystyle.isMono()) | ||
557 | { | ||
558 | while (ch == ' ') | ||
559 | { | ||
560 | ch = getch(); | ||
561 | } | ||
562 | } | ||
563 | |||
564 | m_lastIsBreak = (ch == 10); | ||
565 | |||
566 | return ch; | ||
567 | } | ||
568 | |||
569 | void CPlucker::getch(int& ch, CStyle& sty) | ||
570 | { | ||
571 | ch = getch(); | ||
572 | sty = mystyle; | ||
573 | } | ||
574 | |||
575 | unsigned int CPlucker::locate() | ||
576 | { | ||
577 | return currentpos; | ||
578 | /* | ||
579 | UInt16 thisrec = 1; | ||
580 | unsigned long locpos = 0; | ||
581 | gotorecordnumber(thisrec); | ||
582 | CPlucker_dataRecord thisHdr; | ||
583 | while (thisrec < bufferrec) | ||
584 | { | ||
585 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
586 | if (thisHdr.type < 2) locpos += ntohs(thisHdr.size); | ||
587 | thisrec++; | ||
588 | gotorecordnumber(thisrec); | ||
589 | } | ||
590 | return locpos+bufferpos; | ||
591 | */ | ||
592 | } | ||
593 | |||
594 | void CPlucker::locate(unsigned int n) | ||
595 | { | ||
596 | UInt16 thisrec = 0; | ||
597 | unsigned long locpos = 0; | ||
598 | unsigned long bs = 0; | ||
599 | CPlucker_dataRecord thisHdr; | ||
600 | do | ||
601 | { | ||
602 | thisrec++; | ||
603 | locpos += bs; | ||
604 | gotorecordnumber(thisrec); | ||
605 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
606 | if (thisHdr.type < 2) | ||
607 | { | ||
608 | bs = ntohs(thisHdr.size); | ||
609 | } | ||
610 | else | ||
611 | { | ||
612 | bs = 0; | ||
613 | } | ||
614 | } while (locpos + bs <= n); | ||
615 | currentpos = locpos; | ||
616 | expand(thisrec); | ||
617 | #ifdef _FAST | ||
618 | while (currentpos < n && bufferpos < buffercontent) bgetch(); | ||
619 | #else | ||
620 | while (currentpos < n && bufferpos < buffercontent) getch(); | ||
621 | #endif | ||
622 | } | 149 | } |
623 | 150 | ||
624 | bool CPlucker::hyperlink(unsigned int n) | 151 | QImage* CPlucker::imagefromdata(UInt8* imgbuffer, UInt32 imgsize) |
625 | { | 152 | { |
626 | visited.push_front(n); | ||
627 | UInt16 tuid = (n >> 16); | ||
628 | n &= 0xffff; | ||
629 | // qDebug("Hyper:<%u,%u>", tuid, n); | ||
630 | UInt16 thisrec = 1; | ||
631 | currentpos = 0; | ||
632 | gotorecordnumber(thisrec); | ||
633 | CPlucker_dataRecord thisHdr; | ||
634 | while (1) | ||
635 | { | ||
636 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
637 | if (tuid == ntohs(thisHdr.uid)) break; | ||
638 | if (thisHdr.type < 2) currentpos += ntohs(thisHdr.size); | ||
639 | //qDebug("hyper-cp:%u", currentpos); | ||
640 | thisrec++; | ||
641 | if (thisrec >= ntohs(head.recordList.numRecords)) | ||
642 | { | ||
643 | if (urls == NULL) | ||
644 | { | ||
645 | QMessageBox::information(NULL, | ||
646 | PROGNAME, | ||
647 | QString("No external links\nin this pluck") | ||
648 | ); | ||
649 | } | ||
650 | else | ||
651 | { | ||
652 | char *turl = geturl(tuid); | ||
653 | if (turl == NULL) | ||
654 | { | ||
655 | QMessageBox::information(NULL, | ||
656 | PROGNAME, | ||
657 | QString("Couldn't find link") | ||
658 | ); | ||
659 | } | ||
660 | else | ||
661 | { | ||
662 | QString wrd(turl); | ||
663 | QClipboard* cb = QApplication::clipboard(); | ||
664 | cb->setText(wrd); | ||
665 | if (wrd.length() > 10) | ||
666 | { | ||
667 | Global::statusMessage(wrd.left(8) + ".."); | ||
668 | } | ||
669 | } | ||
670 | } | ||
671 | return false; | ||
672 | } | ||
673 | gotorecordnumber(thisrec); | ||
674 | } | ||
675 | if (thisHdr.type > 1) | ||
676 | { | ||
677 | if (thisHdr.type == 4) | ||
678 | { | ||
679 | QMessageBox::information(NULL, | ||
680 | PROGNAME, | ||
681 | QString("Mailto links\nnot yet supported (2)")); | ||
682 | } | ||
683 | else | ||
684 | { | ||
685 | #ifdef LOCALPICTURES | ||
686 | if (thisHdr.type > 3) | ||
687 | { | ||
688 | #endif | ||
689 | QMessageBox::information(NULL, | ||
690 | PROGNAME, | ||
691 | QString("External links\nnot yet supported (2)") | ||
692 | ); | ||
693 | #ifdef LOCALPICTURES | ||
694 | } | ||
695 | else | ||
696 | { | ||
697 | showimg(tuid); | ||
698 | } | ||
699 | #endif | ||
700 | } | ||
701 | return false; | ||
702 | } | ||
703 | /* | ||
704 | if (thisHdr.type == 2 || thisHdr.type == 3) | ||
705 | { | ||
706 | expandimg(thisrec); | ||
707 | |||
708 | } | ||
709 | */ | ||
710 | else | ||
711 | { | ||
712 | expand(thisrec); | ||
713 | if (n != 0) | ||
714 | { | ||
715 | if (n >= m_nParas) | ||
716 | { | ||
717 | QMessageBox::information(NULL, | ||
718 | PROGNAME, | ||
719 | QString("Error in link\nPara # too big") | ||
720 | ); | ||
721 | return false; | ||
722 | } | ||
723 | unsigned int noff = 0; | ||
724 | for (int i = 0; i < n; i++) noff += m_ParaOffsets[i]; | ||
725 | n = noff; | ||
726 | } | ||
727 | if (n > ntohs(thisHdr.size)) | ||
728 | { | ||
729 | QMessageBox::information(NULL, | ||
730 | PROGNAME, | ||
731 | QString("Error in link\nOffset too big") | ||
732 | ); | ||
733 | return false; | ||
734 | } | ||
735 | qDebug("Hyper:<%u,%u>", tuid, n); | ||
736 | while (bufferpos < n && bufferpos < buffercontent) getch(); | ||
737 | } | ||
738 | return true; | ||
739 | } | ||
740 | /* | ||
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); | ||
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 | */ | ||
851 | bool CPlucker::expand(int thisrec) | ||
852 | { | ||
853 | mystyle.unset(); | ||
854 | size_t reclen = recordlength(thisrec); | ||
855 | gotorecordnumber(thisrec); | ||
856 | CPlucker_dataRecord thisHdr; | ||
857 | while (1) | ||
858 | { | ||
859 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
860 | //qDebug("This (%d) type is %d, uid is %u", thisrec, thisHdr.type, ntohs(thisHdr.uid)); | ||
861 | if (thisHdr.type < 2) break; | ||
862 | qDebug("Skipping paragraph of type %d", thisHdr.type); | ||
863 | if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false; | ||
864 | reclen = recordlength(thisrec); | ||
865 | gotorecordnumber(thisrec); | ||
866 | } | ||
867 | m_nParas = ntohs(thisHdr.nParagraphs); | ||
868 | //qDebug("It has %u paragraphs and is %u bytes", ntohs(thisHdr.nParagraphs), ntohs(thisHdr.size)); | ||
869 | uid = ntohs(thisHdr.uid); | ||
870 | for (int i = 0; i < m_nParas; i++) | ||
871 | { | ||
872 | UInt16 ubytes, attrs; | ||
873 | fread(&ubytes, 1, sizeof(ubytes), fin); | ||
874 | fread(&attrs, 1, sizeof(attrs), fin); | ||
875 | m_ParaOffsets[i] = ntohs(ubytes); | ||
876 | m_ParaAttrs[i] = ntohs(attrs); | ||
877 | //qDebug("Bytes %u, Attr %x", ntohs(ubytes), attrs); | ||
878 | } | ||
879 | if (m_nParas > 0) | ||
880 | { | ||
881 | m_nextPara = m_ParaOffsets[0]; | ||
882 | //qDebug("First offset = %u", m_nextPara); | ||
883 | m_nextParaIndex = 0; | ||
884 | } | ||
885 | else | ||
886 | { | ||
887 | m_nextPara = -1; | ||
888 | } | ||
889 | |||
890 | reclen -= sizeof(thisHdr)+4*m_nParas; | ||
891 | |||
892 | buffercontent = ntohs(thisHdr.size); | ||
893 | |||
894 | Expand(reclen, thisHdr.type, expandedtextbuffer, buffercontent); | ||
895 | bufferpos = 0; | ||
896 | bufferrec = thisrec; | ||
897 | // qDebug("BC:%u, HS:%u", buffercontent, ntohs(thisHdr.size)); | ||
898 | return true; | ||
899 | } | ||
900 | |||
901 | void CPlucker::UnZip(size_t reclen, UInt8* tgtbuffer, UInt16 bsize) | ||
902 | { | ||
903 | z_stream zstream; | ||
904 | memset(&zstream,sizeof(zstream),0); | ||
905 | zstream.next_in = compressedtextbuffer; | ||
906 | zstream.next_out = tgtbuffer; | ||
907 | zstream.avail_out = bsize; | ||
908 | zstream.avail_in = reclen; | ||
909 | |||
910 | int keylen = 0; | ||
911 | |||
912 | zstream.zalloc = Z_NULL; | ||
913 | zstream.zfree = Z_NULL; | ||
914 | zstream.opaque = Z_NULL; | ||
915 | |||
916 | // printf("Initialising\n"); | ||
917 | |||
918 | inflateInit(&zstream); | ||
919 | int err = 0; | ||
920 | do { | ||
921 | if ( zstream.avail_in == 0 && 0 < keylen ) { | ||
922 | zstream.next_in = compressedtextbuffer + keylen; | ||
923 | zstream.avail_in = reclen - keylen; | ||
924 | keylen = 0; | ||
925 | } | ||
926 | zstream.next_out = tgtbuffer; | ||
927 | zstream.avail_out = bsize; | ||
928 | |||
929 | err = inflate( &zstream, Z_SYNC_FLUSH ); | ||
930 | |||
931 | //qDebug("err:%d - %u", err, zstream.avail_in); | ||
932 | |||
933 | } while ( err == Z_OK ); | ||
934 | |||
935 | inflateEnd(&zstream); | ||
936 | } | ||
937 | |||
938 | void CPlucker::UnDoc(size_t reclen, UInt8* tgtbuffer, UInt16 bsize) | ||
939 | { | ||
940 | // UInt16 headerSize; | ||
941 | UInt16 docSize; | ||
942 | UInt16 i; | ||
943 | UInt16 j; | ||
944 | UInt16 k; | ||
945 | |||
946 | UInt8 *inBuf = compressedtextbuffer; | ||
947 | UInt8 *outBuf = tgtbuffer; | ||
948 | |||
949 | // headerSize = sizeof( Header ) + record->paragraphs * sizeof( Paragraph ); | ||
950 | docSize = reclen; | ||
951 | |||
952 | j = 0; | ||
953 | k = 0; | ||
954 | while ( j < docSize ) { | ||
955 | i = 0; | ||
956 | while ( i < bsize && j < docSize ) { | ||
957 | UInt16 c; | ||
958 | |||
959 | c = (UInt16) inBuf[ j++ ]; | ||
960 | if ( 0 < c && c < 9 ) { | ||
961 | while ( 0 < c-- ) | ||
962 | outBuf[ i++ ] = inBuf[ j++ ]; | ||
963 | } | ||
964 | else if ( c < 0x80 ) | ||
965 | outBuf[ i++ ] = c; | ||
966 | else if ( 0xc0 <= c ) { | ||
967 | outBuf[ i++ ] = ' '; | ||
968 | outBuf[ i++ ] = c ^ 0x80; | ||
969 | } | ||
970 | else { | ||
971 | Int16 m; | ||
972 | Int16 n; | ||
973 | |||
974 | c <<= 8; | ||
975 | c += inBuf[ j++ ]; | ||
976 | |||
977 | m = ( c & 0x3fff ) >> COUNT_BITS; | ||
978 | n = c & ( ( 1 << COUNT_BITS ) - 1 ); | ||
979 | n += 2; | ||
980 | |||
981 | do { | ||
982 | outBuf[ i ] = outBuf[ i - m ]; | ||
983 | i++; | ||
984 | } while ( 0 < n-- ); | ||
985 | } | ||
986 | } | ||
987 | k += bsize; | ||
988 | } | ||
989 | } | ||
990 | |||
991 | void CPlucker::home() | ||
992 | { | ||
993 | currentpos = 0; | ||
994 | expand(1); | ||
995 | } | ||
996 | |||
997 | CList<Bkmk>* CPlucker::getbkmklist() | ||
998 | { | ||
999 | /* | ||
1000 | CPlucker_dataRecord thisHdr; | ||
1001 | |||
1002 | for (int i = 1; i < ntohs(head.recordList.numRecords); i++) | ||
1003 | { | ||
1004 | gotorecordnumber(i); | ||
1005 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
1006 | if (thisHdr.type == 8) | ||
1007 | { | ||
1008 | UInt16 n; | ||
1009 | fread(&n, 1, sizeof(n), fin); | ||
1010 | n = ntohs(n); | ||
1011 | qDebug("Found %u bookmarks", n); | ||
1012 | } | ||
1013 | qDebug("Found:%d, %u", i , thisHdr.type); | ||
1014 | } | ||
1015 | */ | ||
1016 | return NULL; | ||
1017 | } | ||
1018 | |||
1019 | QImage* CPlucker::getimg(UInt16 tgt) | ||
1020 | { | ||
1021 | // static int imageno; | ||
1022 | // char* file = "tmp1"; | ||
1023 | // sprintf(file, "image%04u.tbmp", imageno++); | ||
1024 | // qDebug("Image:%u", tgt); | ||
1025 | CPlucker_dataRecord thisHdr; | ||
1026 | size_t reclen; | ||
1027 | UInt16 thisrec = finduid(tgt); | ||
1028 | reclen = recordlength(thisrec); | ||
1029 | gotorecordnumber(thisrec); | ||
1030 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
1031 | /* | ||
1032 | UInt16 thisrec = 0; | ||
1033 | do | ||
1034 | { | ||
1035 | hthisrec++; | ||
1036 | reclen = recordlength(thisrec); | ||
1037 | gotorecordnumber(thisrec); | ||
1038 | //qDebug("thisrec:%u.%u", ftell(fin),thisrec); | ||
1039 | fread(&thisHdr, 1, sizeof(thisHdr), fin); | ||
1040 | } | ||
1041 | while (ntohs(thisHdr.uid) != tgt); | ||
1042 | */ | ||
1043 | reclen -= sizeof(thisHdr); | ||
1044 | |||
1045 | UInt16 imgsize = ntohs(thisHdr.size); | ||
1046 | UInt8* imgbuffer = new UInt8[imgsize]; | ||
1047 | |||
1048 | // qDebug("type:%u", thisHdr.type); | ||
1049 | Expand(reclen, thisHdr.type, imgbuffer, imgsize); | ||
1050 | |||
1051 | QImage* qimage = Palm2QImage(imgbuffer, imgsize); | 153 | QImage* qimage = Palm2QImage(imgbuffer, imgsize); |
1052 | |||
1053 | delete [] imgbuffer; | 154 | delete [] imgbuffer; |
1054 | |||
1055 | return qimage; | 155 | return qimage; |
1056 | } | 156 | } |
1057 | |||
1058 | #include <qnamespace.h> | ||
1059 | |||
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) | ||
1070 | { | ||
1071 | ret = new QPixmap(image->width()+4, image->height()+4); | ||
1072 | ret->fill(Qt::red); | ||
1073 | bitBlt(ret, 2, 2, image, 0, 0, -1, -1);//, Qt::RasterOp::CopyROP); | ||
1074 | delete image; | ||
1075 | } | ||
1076 | else | ||
1077 | { | ||
1078 | ret = image; | ||
1079 | } | ||
1080 | return ret; | ||
1081 | } | ||
1082 | |||
1083 | #ifdef _BUFFERPICS | ||
1084 | #include <qmap.h> | ||
1085 | #endif | ||
1086 | |||
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()) | ||
1093 | { | ||
1094 | pix[tgt] = *expandimg(tgt); | ||
1095 | return &pix[tgt]; | ||
1096 | } | ||
1097 | else | ||
1098 | return &(t.data()); | ||
1099 | #else | ||
1100 | return expandimg(tgt); | ||
1101 | #endif | ||
1102 | } | ||
1103 | |||
1104 | #ifdef LOCALPICTURES | ||
1105 | #include <unistd.h> | ||
1106 | #include <qpe/global.h> | ||
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! | ||
1241 | } | ||
diff --git a/noncore/apps/opie-reader/plucker.h b/noncore/apps/opie-reader/plucker.h index 083eac6..6d62195 100644 --- a/noncore/apps/opie-reader/plucker.h +++ b/noncore/apps/opie-reader/plucker.h | |||
@@ -1,123 +1,36 @@ | |||
1 | #ifndef __plucker_h | 1 | #ifndef __plucker_h |
2 | #define __plucker_h | 2 | #define __plucker_h |
3 | 3 | ||
4 | #include "CExpander.h" | 4 | #include "plucker_base.h" |
5 | #include "zlib/zlib.h" | ||
6 | #include "ztxt.h" | ||
7 | #include "pdb.h" | ||
8 | #include "CBuffer.h" | ||
9 | #include "Navigation.h" | ||
10 | #include "my_list.h" | ||
11 | 5 | ||
12 | #ifdef LOCALPICTURES | 6 | #ifdef LOCALPICTURES |
13 | class QScrollView; | 7 | class QScrollView; |
14 | class QWidget; | 8 | class QWidget; |
15 | #endif | 9 | #endif |
16 | 10 | ||
17 | struct CPlucker_dataRecord | 11 | class CPlucker : public CPlucker_base |
18 | { | 12 | { |
19 | UInt16 uid; | 13 | void start2endSection() |
20 | UInt16 nParagraphs; | 14 | { |
21 | UInt16 size; | 15 | m_currentstart = currentpos-bufferpos; |
22 | UInt8 type; | 16 | m_currentend = m_currentstart+buffercontent; |
23 | UInt8 reserved; | 17 | } |
24 | }; | 18 | void setbuffersize() |
25 | 19 | { | |
26 | struct CPlucker_record0 | 20 | compressedbuffersize = buffersize = 32*1024; |
27 | { | 21 | } |
28 | UInt16 uid; | 22 | int HeaderSize(); |
29 | UInt16 version; | 23 | void GetHeader(UInt16& uid, UInt16& nParagraphs, UInt32& size, UInt8& type, UInt8& reserved); |
30 | UInt16 nRecords; | 24 | int bgetch(); |
31 | }; | 25 | tchar getch(bool fast); |
26 | UInt8 EOPPhase; | ||
32 | 27 | ||
33 | struct CPluckerbkmk | ||
34 | { | ||
35 | UInt32 offset; | ||
36 | tchar title[MAX_BMRK_LENGTH]; | ||
37 | }; | ||
38 | 28 | ||
39 | const UInt32 CPLUCKER_ID = 0x5458547a; | ||
40 | 29 | ||
41 | class CPlucker : public CExpander, Cpdb | 30 | bool CorrectDecoder(); // Virtual |
42 | { | 31 | void setlink(QString&, const QString&); // Virtual |
43 | unsigned short finduid(unsigned short); | 32 | QImage* imagefromdata(UInt8*, UInt32); // virtual |
44 | char* geturl(UInt16); | ||
45 | void Expand(UInt16, UInt8, UInt8*, UInt16); | ||
46 | CList<unsigned long> visited; | ||
47 | bool m_lastIsBreak; | ||
48 | #ifdef LOCALPICTURES | ||
49 | QScrollView* m_viewer; | ||
50 | QWidget* m_picture; | ||
51 | #endif | ||
52 | size_t textlength, m_lastBreak; | ||
53 | UInt16 uid; | ||
54 | UInt8 EOPPhase; | ||
55 | int m_nextPara, m_nextParaIndex; | ||
56 | CBufferFace<UInt16> m_ParaOffsets; | ||
57 | CBufferFace<UInt16> m_ParaAttrs; | ||
58 | UInt16 m_nParas; | ||
59 | CStyle mystyle; | ||
60 | // bool bInit; | ||
61 | UInt32 buffersize; | ||
62 | UInt32 buffercontent; | ||
63 | UInt8* expandedtextbuffer; | ||
64 | UInt8* compressedtextbuffer; | ||
65 | char* urls; | ||
66 | size_t urlsize; | ||
67 | size_t bufferpos; | ||
68 | UInt16 bufferrec; | ||
69 | CPlucker_record0 hdr0; | ||
70 | size_t currentpos; | ||
71 | bool expand(int); | ||
72 | void UnZip(size_t, UInt8*, UInt16); | ||
73 | void UnDoc(size_t, UInt8*, UInt16); | ||
74 | #ifdef LOCALPICTURES | ||
75 | void showimg(UInt16 tgt); | ||
76 | #endif | ||
77 | QImage* getimg(UInt16 tgt); | ||
78 | QPixmap* expandimg(UInt16 tgt, bool border=false); | ||
79 | void home(); | ||
80 | int bgetch(); | ||
81 | CNavigation m_nav; | ||
82 | public: | 33 | public: |
83 | virtual void suspend() | ||
84 | { | ||
85 | CExpander::suspend(fin); | ||
86 | } | ||
87 | virtual void unsuspend() | ||
88 | { | ||
89 | CExpander::unsuspend(fin); | ||
90 | } | ||
91 | virtual QPixmap* getPicture(unsigned long tgt); | ||
92 | virtual void sizes(unsigned long& _file, unsigned long& _text); | ||
93 | virtual bool hasrandomaccess() { return true; } | ||
94 | virtual ~CPlucker(); | ||
95 | CPlucker(); | 34 | CPlucker(); |
96 | virtual int OpenFile(const char *src); | ||
97 | virtual int getch(); | ||
98 | virtual void getch(int&, CStyle&); | ||
99 | virtual unsigned int locate(); | ||
100 | virtual void locate(unsigned int n); | ||
101 | virtual CList<Bkmk>* getbkmklist(); | ||
102 | virtual bool hyperlink(unsigned int n); | ||
103 | virtual MarkupType PreferredMarkup() | ||
104 | { | ||
105 | return cNONE; | ||
106 | } | ||
107 | void saveposn(size_t posn) { m_nav.saveposn(posn); } | ||
108 | bool forward(size_t& loc) { return m_nav.forward(loc); } | ||
109 | bool back(size_t& loc) { return m_nav.back(loc); } | ||
110 | bool hasnavigation() { return true; } | ||
111 | unsigned long startSection() | ||
112 | { | ||
113 | return currentpos-bufferpos; | ||
114 | } | ||
115 | unsigned long endSection() | ||
116 | { | ||
117 | return startSection()+buffercontent; | ||
118 | } | ||
119 | void setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen); | ||
120 | void putSaveData(unsigned char*& src, unsigned short& srclen); | ||
121 | }; | 35 | }; |
122 | |||
123 | #endif | 36 | #endif |
diff --git a/noncore/apps/opie-reader/ppm_expander.h b/noncore/apps/opie-reader/ppm_expander.h index 4278c82..002de86 100644 --- a/noncore/apps/opie-reader/ppm_expander.h +++ b/noncore/apps/opie-reader/ppm_expander.h | |||
@@ -1,58 +1,61 @@ | |||
1 | #ifndef __ppm_expander_h | 1 | #ifndef __ppm_expander_h |
2 | #define __ppm_expander_h | 2 | #define __ppm_expander_h |
3 | 3 | ||
4 | #include "useqpe.h" | ||
4 | #include "CExpander.h" | 5 | #include "CExpander.h" |
5 | #include <sys/stat.h> | 6 | #include <sys/stat.h> |
6 | 7 | ||
7 | 8 | ||
8 | #include "utypes.h" | 9 | #include "utypes.h" |
9 | #include "ppm.h" | 10 | #include "ppm.h" |
10 | #include "arith.h" | 11 | #include "arith.h" |
11 | 12 | ||
12 | 13 | ||
13 | #define SYM_EOF 256 | 14 | #define SYM_EOF 256 |
14 | 15 | ||
15 | class ppm_expander : public CExpander { | 16 | class ppm_expander : public CExpander { |
16 | UCHAR *buf_in,*buf_out; | 17 | UCHAR *buf_in,*buf_out; |
17 | unsigned int bufsize; | 18 | unsigned int bufsize; |
18 | unsigned int outbytes; | 19 | unsigned int outbytes; |
19 | unsigned long blocksize; | 20 | unsigned long blocksize; |
20 | unsigned short numblocks; | 21 | unsigned short numblocks; |
21 | unsigned short curblock; | 22 | unsigned short curblock; |
22 | unsigned short maxnode; | 23 | unsigned short maxnode; |
23 | bool needppmend; | 24 | bool needppmend; |
24 | int home(); | 25 | int home(); |
25 | FILE* my_file_in; | 26 | FILE* my_file_in; |
26 | PPM_ReadBuf* my_read_buf; | 27 | PPM_ReadBuf* my_read_buf; |
27 | ppm_worker ppm; | 28 | ppm_worker ppm; |
28 | public: | 29 | public: |
29 | virtual void suspend() | 30 | #ifdef USEQPE |
31 | void suspend() | ||
30 | { | 32 | { |
31 | CExpander::suspend(my_file_in); | 33 | CExpander::suspend(my_file_in); |
32 | } | 34 | } |
33 | virtual void unsuspend() | 35 | void unsuspend() |
34 | { | 36 | { |
35 | CExpander::unsuspend(my_file_in); | 37 | CExpander::unsuspend(my_file_in); |
36 | } | 38 | } |
39 | #endif | ||
37 | ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL) | 40 | ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL) |
38 | { | 41 | { |
39 | bufsize = 1024; | 42 | bufsize = 1024; |
40 | buf_in = new UCHAR[bufsize]; | 43 | buf_in = new UCHAR[bufsize]; |
41 | buf_out = new UCHAR[bufsize]; | 44 | buf_out = new UCHAR[bufsize]; |
42 | outbytes = 0; | 45 | outbytes = 0; |
43 | } | 46 | } |
44 | virtual int OpenFile(const char* infile); | 47 | int OpenFile(const char* infile); |
45 | virtual int getch(); | 48 | int getch(); |
46 | int locate(unsigned short block, unsigned int n); | 49 | int locate(unsigned short block, unsigned int n); |
47 | virtual ~ppm_expander(); | 50 | virtual ~ppm_expander(); |
48 | virtual unsigned int locate() { return outbytes; } | 51 | unsigned int locate() { return outbytes; } |
49 | virtual void locate(unsigned int n); | 52 | void locate(unsigned int n); |
50 | virtual bool hasrandomaccess() { return (numblocks > 1); } | 53 | bool hasrandomaccess() { return (numblocks > 1); } |
51 | virtual void sizes(unsigned long& file, unsigned long& text); | 54 | void sizes(unsigned long& file, unsigned long& text); |
52 | virtual MarkupType PreferredMarkup() | 55 | MarkupType PreferredMarkup() |
53 | { | 56 | { |
54 | return cTEXT; | 57 | return cTEXT; |
55 | } | 58 | } |
56 | }; | 59 | }; |
57 | 60 | ||
58 | #endif | 61 | #endif |
diff --git a/noncore/apps/opie-reader/ustring.h b/noncore/apps/opie-reader/ustring.h index a3ef8df..95da26b 100644 --- a/noncore/apps/opie-reader/ustring.h +++ b/noncore/apps/opie-reader/ustring.h | |||
@@ -1,83 +1,93 @@ | |||
1 | #include <qstring.h> | 1 | #include <qstring.h> |
2 | 2 | ||
3 | #ifdef _UNICODE | 3 | #ifdef _UNICODE |
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 | #ifdef _WINDOWS | ||
64 | //ret.fill(' ', len); | ||
65 | for (i = 0; i < len; i++) | ||
66 | { | ||
67 | if (p[i] == 0) break; | ||
68 | ret.at((uint)i) = p[i]; | ||
69 | } | ||
70 | // while (*p != 0 && i < len) ret.at((uint)i++) = (tchar)(*(p++)); | ||
71 | #else | ||
63 | while (*p != 0 && i < len) ret[i++] = *(p++); | 72 | while (*p != 0 && i < len) ret[i++] = *(p++); |
73 | #endif | ||
64 | return ret; | 74 | return ret; |
65 | } | 75 | } |
66 | 76 | ||
67 | inline tchar* fromQString(const QString& qs) | 77 | inline tchar* fromQString(const QString& qs) |
68 | { | 78 | { |
69 | int len = qs.length(); | 79 | int len = qs.length(); |
70 | tchar* ret = new tchar[len+1]; | 80 | tchar* ret = new tchar[len+1]; |
71 | for (int i = 0; i < len; i++) | 81 | for (int i = 0; i < len; i++) |
72 | { | 82 | { |
73 | ret[i] = qs[i].unicode(); | 83 | ret[i] = qs[i].unicode(); |
74 | } | 84 | } |
75 | ret[len] = 0; | 85 | ret[len] = 0; |
76 | return ret; | 86 | return ret; |
77 | } | 87 | } |
78 | #else | 88 | #else |
79 | 89 | ||
80 | inline size_t ustrlen(const tchar* _p) { return strlen(_p); } | 90 | inline size_t ustrlen(const tchar* _p) { return strlen(_p); } |
81 | inline int ustrcmp(const tchar* _p1, const tchar* _p2) { return strcmp(_p1, _p2); } | 91 | inline int ustrcmp(const tchar* _p1, const tchar* _p2) { return strcmp(_p1, _p2); } |
82 | 92 | ||
83 | #endif | 93 | #endif |
diff --git a/noncore/apps/opie-reader/version.h b/noncore/apps/opie-reader/version.h index 003e9db..85d35a4 100644 --- a/noncore/apps/opie-reader/version.h +++ b/noncore/apps/opie-reader/version.h | |||
@@ -1,5 +1,9 @@ | |||
1 | #ifndef __VERSION_H | ||
2 | #define __VERSION_H | ||
1 | 3 | ||
2 | #define MAJOR 0 | 4 | #define MAJOR 0 |
3 | #define BKMKTYPE 6 | 5 | #define BKMKTYPE 6 |
4 | #define MINOR 'a' | 6 | #define MINOR 'j' |
5 | #define RELEASE_TYPE "beta" | 7 | #define RELEASE_TYPE "beta" |
8 | |||
9 | #endif | ||
diff --git a/noncore/apps/opie-reader/ztxt.h b/noncore/apps/opie-reader/ztxt.h index d7cb96a..709a055 100644 --- a/noncore/apps/opie-reader/ztxt.h +++ b/noncore/apps/opie-reader/ztxt.h | |||
@@ -1,113 +1,120 @@ | |||
1 | #ifndef __ztxt_h | 1 | #ifndef __ztxt_h |
2 | #define __ztxt_h | 2 | #define __ztxt_h |
3 | 3 | ||
4 | #include "useqpe.h" | ||
4 | #include "CExpander.h" | 5 | #include "CExpander.h" |
5 | #include "zlib/zlib.h" | 6 | #include <zlib.h> |
6 | #include "pdb.h" | 7 | #include "pdb.h" |
8 | #ifdef _WINDOWS | ||
9 | #include <winsock.h> | ||
10 | #endif | ||
11 | |||
7 | /* | 12 | /* |
8 | * Stuff common to both Weasel Reader and makeztxt | 13 | * Stuff common to both Weasel Reader and makeztxt |
9 | * | 14 | * |
10 | * $Id$ | 15 | * $Id$ |
11 | * | 16 | * |
12 | */ | 17 | */ |
13 | 18 | ||
14 | #ifndef _WEASEL_COMMON_H_ | 19 | #ifndef _WEASEL_COMMON_H_ |
15 | #define _WEASEL_COMMON_H_ 1 | 20 | #define _WEASEL_COMMON_H_ 1 |
16 | 21 | ||
17 | 22 | ||
18 | /* Padding is no good */ | 23 | /* Padding is no good */ |
19 | #if defined(__GNUC__) && defined(__UNIX__) | 24 | #if defined(__GNUC__) && defined(__UNIX__) |
20 | # pragma pack(2) | 25 | # pragma pack(2) |
21 | #endif | 26 | #endif |
22 | 27 | ||
23 | /* The default creator is Weasel Reader 'GPlm' */ | 28 | /* The default creator is Weasel Reader 'GPlm' */ |
24 | #define GPLM_CREATOR_ID "GPlm" | 29 | #define GPLM_CREATOR_ID "GPlm" |
25 | /* Databases of type 'zTXT' */ | 30 | /* Databases of type 'zTXT' */ |
26 | #define ZTXT_TYPE_ID "zTXT" | 31 | #define ZTXT_TYPE_ID "zTXT" |
27 | /* Size of one database record */ | 32 | /* Size of one database record */ |
28 | #define RECORD_SIZE 8192 | 33 | #define RECORD_SIZE 8192 |
29 | /* Allow largest WBIT size for data. Lower with command line options | 34 | /* Allow largest WBIT size for data. Lower with command line options |
30 | in makeztxt */ | 35 | in makeztxt */ |
31 | #define MAXWBITS 15 | 36 | #define MAXWBITS 15 |
32 | /* Max length for a bookmark/annotation title */ | 37 | /* Max length for a bookmark/annotation title */ |
33 | #define MAX_BMRK_LENGTH 20 | 38 | #define MAX_BMRK_LENGTH 20 |
34 | 39 | ||
35 | 40 | ||
36 | /***************************************************** | 41 | /***************************************************** |
37 | * This is the zTXT document header (record #0) * | 42 | * This is the zTXT document header (record #0) * |
38 | * ----zTXT version 1.42---- * | 43 | * ----zTXT version 1.42---- * |
39 | *****************************************************/ | 44 | *****************************************************/ |
40 | typedef struct zTXT_record0Type { | 45 | typedef struct zTXT_record0Type { |
41 | UInt16 version; /* zTXT format version */ | 46 | UInt16 version; /* zTXT format version */ |
42 | UInt16 numRecords; /* Number of data (TEXT) records */ | 47 | UInt16 numRecords; /* Number of data (TEXT) records */ |
43 | UInt32 size; /* Size in bytes of uncomp. data */ | 48 | UInt32 size; /* Size in bytes of uncomp. data */ |
44 | UInt16 recordSize; /* Size of a single data record */ | 49 | UInt16 recordSize; /* Size of a single data record */ |
45 | UInt16 numBookmarks; /* Number of bookmarks in DB */ | 50 | UInt16 numBookmarks; /* Number of bookmarks in DB */ |
46 | UInt16 bookmarkRecord; /* Record containing bookmarks */ | 51 | UInt16 bookmarkRecord; /* Record containing bookmarks */ |
47 | UInt16 numAnnotations; /* Number of annotation records */ | 52 | UInt16 numAnnotations; /* Number of annotation records */ |
48 | UInt16 annotationRecord; /* Record # of annotation index */ | 53 | UInt16 annotationRecord; /* Record # of annotation index */ |
49 | UInt8 randomAccess; /* 1 if compressed w/Z_FULL_FLUSH */ | 54 | UInt8 randomAccess; /* 1 if compressed w/Z_FULL_FLUSH */ |
50 | UInt8 padding[0x20 - 19]; /* Pad to a size of 0x20 bytes */ | 55 | UInt8 padding[0x20 - 19]; /* Pad to a size of 0x20 bytes */ |
51 | } zTXT_record0; | 56 | } zTXT_record0; |
52 | 57 | ||
53 | struct zTXTbkmk | 58 | struct zTXTbkmk |
54 | { | 59 | { |
55 | UInt32 offset; | 60 | UInt32 offset; |
56 | tchar title[MAX_BMRK_LENGTH]; | 61 | tchar title[MAX_BMRK_LENGTH]; |
57 | }; | 62 | }; |
58 | 63 | ||
59 | #endif | 64 | #endif |
60 | 65 | ||
61 | 66 | ||
62 | const UInt32 ZTXT_ID = 0x5458547a; | 67 | const UInt32 ZTXT_ID = 0x5458547a; |
63 | 68 | ||
64 | class ztxt : public CExpander, Cpdb | 69 | class ztxt : public CExpander, Cpdb |
65 | { | 70 | { |
66 | bool bInit; | 71 | bool bInit; |
67 | UInt32 buffersize; | 72 | UInt32 buffersize; |
68 | UInt32 buffercontent; | 73 | UInt32 buffercontent; |
69 | UInt8* expandedtextbuffer; | 74 | UInt8* expandedtextbuffer; |
70 | UInt8* compressedtextbuffer; | 75 | UInt8* compressedtextbuffer; |
71 | z_stream zstream; | 76 | z_stream zstream; |
72 | size_t bufferpos; | 77 | size_t bufferpos; |
73 | UInt16 bufferrec; | 78 | UInt16 bufferrec; |
74 | zTXT_record0 hdr0; | 79 | zTXT_record0 hdr0; |
75 | size_t currentpos; | 80 | size_t currentpos; |
76 | void home(); | 81 | void home(); |
77 | public: | 82 | public: |
78 | virtual void suspend() | 83 | #ifdef USEQPE |
84 | void suspend() | ||
79 | { | 85 | { |
80 | CExpander::suspend(fin); | 86 | CExpander::suspend(fin); |
81 | } | 87 | } |
82 | virtual void unsuspend() | 88 | void unsuspend() |
83 | { | 89 | { |
84 | CExpander::unsuspend(fin); | 90 | CExpander::unsuspend(fin); |
85 | } | 91 | } |
86 | virtual void sizes(unsigned long& _file, unsigned long& _text) | 92 | #endif |
93 | void sizes(unsigned long& _file, unsigned long& _text) | ||
87 | { | 94 | { |
88 | _file = file_length; | 95 | _file = file_length; |
89 | _text = ntohl(hdr0.size); | 96 | _text = ntohl(hdr0.size); |
90 | } | 97 | } |
91 | virtual bool hasrandomaccess() { return (hdr0.randomAccess != 0); } | 98 | bool hasrandomaccess() { return (hdr0.randomAccess != 0); } |
92 | virtual ~ztxt() | 99 | virtual ~ztxt() |
93 | { | 100 | { |
94 | if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; | 101 | if (expandedtextbuffer != NULL) delete [] expandedtextbuffer; |
95 | if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; | 102 | if (compressedtextbuffer != NULL) delete [] compressedtextbuffer; |
96 | if (bInit) | 103 | if (bInit) |
97 | { | 104 | { |
98 | inflateEnd(&zstream); | 105 | inflateEnd(&zstream); |
99 | } | 106 | } |
100 | } | 107 | } |
101 | ztxt(); | 108 | ztxt(); |
102 | virtual int OpenFile(const char *src); | 109 | int OpenFile(const char *src); |
103 | virtual int getch(); | 110 | int getch(); |
104 | virtual unsigned int locate(); | 111 | unsigned int locate(); |
105 | virtual void locate(unsigned int n); | 112 | void locate(unsigned int n); |
106 | virtual CList<Bkmk>* getbkmklist(); | 113 | CList<Bkmk>* getbkmklist(); |
107 | virtual MarkupType PreferredMarkup() | 114 | MarkupType PreferredMarkup() |
108 | { | 115 | { |
109 | return cTEXT; | 116 | return cTEXT; |
110 | } | 117 | } |
111 | }; | 118 | }; |
112 | 119 | ||
113 | #endif | 120 | #endif |