summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-07-08 23:23:40 (UTC)
committer llornkcor <llornkcor>2002-07-08 23:23:40 (UTC)
commit647a6c7ec282ea9b0b45baf8935b8eefc3ff8269 (patch) (unidiff)
treea3b5b8f5d0f53b1adcb52623c34152472911f3f9
parent40a1b5f7519c70b5335937573e3425bbc9d0f690 (diff)
downloadopie-647a6c7ec282ea9b0b45baf8935b8eefc3ff8269.zip
opie-647a6c7ec282ea9b0b45baf8935b8eefc3ff8269.tar.gz
opie-647a6c7ec282ea9b0b45baf8935b8eefc3ff8269.tar.bz2
fixed by patch sent by Tim. Also fixed version in control file
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/QTReader.cpp766
-rw-r--r--noncore/apps/opie-reader/opie-reader.control4
2 files changed, 385 insertions, 385 deletions
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp
index 6251812..fc9cffb 100644
--- a/noncore/apps/opie-reader/QTReader.cpp
+++ b/noncore/apps/opie-reader/QTReader.cpp
@@ -18,1017 +18,1017 @@
18#include <qpe/config.h> 18#include <qpe/config.h>
19#include <qpe/applnk.h> 19#include <qpe/applnk.h>
20#include <qfontdatabase.h> 20#include <qfontdatabase.h>
21#include <qpe/global.h> 21#include <qpe/global.h>
22#include <qpe/qcopenvelope_qws.h> 22#include <qpe/qcopenvelope_qws.h>
23 23
24#ifdef _UNICODE 24#ifdef _UNICODE
25const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; 25const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 };
26#else 26#else
27const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 }; 27const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 };
28#endif 28#endif
29//const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; 29//const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 };
30 30
31//const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 }; 31//const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 };
32//const int QTReader::fontsizes[] = {10,16,17,22,0}; 32//const int QTReader::fontsizes[] = {10,16,17,22,0};
33//const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 }; 33//const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 };
34//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}; 34//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};
35 35
36QTReader::QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0) : 36QTReader::QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0) :
37 QWidget(parent, name, f), 37 QWidget(parent, name, f),
38 m_delay(100), 38 m_delay(100),
39 m_scrolldy(0), 39 m_scrolldy(0),
40 m_autoScroll(false), 40 m_autoScroll(false),
41 textarray(NULL), 41 textarray(NULL),
42 locnarray(NULL), 42 locnarray(NULL),
43 numlines(0), 43 numlines(0),
44 m_fontname("unifont"), 44 m_fontname("unifont"),
45 m_fm(NULL) 45 m_fm(NULL)
46{ 46{
47 m_overlap = 1; 47 m_overlap = 1;
48 fontsizes = NULL; 48 fontsizes = NULL;
49// init(); 49// init();
50} 50}
51/* 51/*
52QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0) : 52QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0) :
53 QWidget(parent, name, f), 53 QWidget(parent, name, f),
54 m_textfont(0), 54 m_textfont(0),
55 m_textsize(1), 55 m_textsize(1),
56 textarray(NULL), 56 textarray(NULL),
57 numlines(0), 57 numlines(0),
58 bstripcr(true), 58 bstripcr(true),
59 bunindent(false), 59 bunindent(false),
60 brepara(false), 60 brepara(false),
61 bdblspce(false), 61 bdblspce(false),
62 btight(false), 62 btight(false),
63 bindenter(0), 63 bindenter(0),
64 m_fm(NULL) 64 m_fm(NULL)
65{ 65{
66 init(); 66 init();
67 // qDebug("Load_file(1)"); 67 // qDebug("Load_file(1)");
68 load_file((const tchar*)filename); 68 load_file((const tchar*)filename);
69} 69}
70*/ 70*/
71 71
72long QTReader::real_delay() 72long QTReader::real_delay()
73{ 73{
74 return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing ); 74 return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing );
75} 75}
76 76
77void QTReader::mouseReleaseEvent( QMouseEvent* _e ) 77void QTReader::mouseReleaseEvent( QMouseEvent* _e )
78//void QTReader::mouseDoubleClickEvent( QMouseEvent* _e ) 78//void QTReader::mouseDoubleClickEvent( QMouseEvent* _e )
79{ 79{
80 if (textarray != NULL) 80 if (textarray != NULL)
81 { 81 {
82 //printf("(%u, %u)\n", _e->x(), _e->y()); 82// printf("(%u, %u)\n", _e->x(), _e->y());
83 QString wrd = QString::null; 83 QString wrd = QString::null;
84 int lineno = _e->y()/m_linespacing; 84 int lineno = _e->y()/m_linespacing;
85 if (m_bMonoSpaced) 85 if (m_bMonoSpaced)
86 { 86 {
87 int chno = _e->x()/m_charWidth; 87 int chno = _e->x()/m_charWidth;
88 if (chno < ustrlen(textarray[lineno]->data())) 88 if (chno < ustrlen(textarray[lineno]->data()))
89 { 89 {
90 wrd[0] = textarray[lineno]->data()[chno]; 90 wrd[0] = textarray[lineno]->data()[chno];
91 } 91 }
92 } 92 }
93 else 93 else
94 { 94 {
95 CBuffer* t = textarray[lineno]; 95 CBuffer* t = textarray[lineno];
96 int first = 0; 96 int first = 0;
97 while (1) 97 while (1)
98 { 98 {
99 int i = first+1; 99 int i = first+1;
100 // while ((*t)[i] != ' ' && (*t)[i] != 0) i++; 100// while ((*t)[i] != ' ' && (*t)[i] != 0) i++;
101 while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; 101 while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
102 if (m_fm->width(toQString(t->data()), i) > _e->x()) 102 if (m_fm->width(toQString(t->data()), i) > _e->x())
103 { 103 {
104 wrd = toQString(t->data()+first, i - first); 104 wrd = toQString(t->data()+first, i - first);
105 break; 105 break;
106 } 106 }
107 // while ((*t)[i] == ' ' && (*t)[i] != 0) i++; 107// while ((*t)[i] == ' ' && (*t)[i] != 0) i++;
108 while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++; 108 while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
109 if ((*t)[i] == 0) break; 109 if ((*t)[i] == 0) break;
110 first = i; 110 first = i;
111 } 111 }
112 } 112 }
113 if (!wrd.isEmpty()) 113 if (!wrd.isEmpty())
114 { 114 {
115 QClipboard* cb = QApplication::clipboard(); 115 QClipboard* cb = QApplication::clipboard();
116 cb->setText(wrd); 116 cb->setText(wrd);
117 Global::statusMessage(wrd); 117 Global::statusMessage(wrd);
118 if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty()) 118 if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty())
119 { 119 {
120 QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8()); 120 QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8());
121 e << wrd; 121 e << wrd;
122 } 122 }
123 } 123 }
124 } 124 }
125} 125}
126 126
127void QTReader::focusInEvent(QFocusEvent* e) 127void QTReader::focusInEvent(QFocusEvent* e)
128{ 128{
129 if (m_autoScroll) timer->start(real_delay(), false); 129 if (m_autoScroll) timer->start(real_delay(), false);
130 update(); 130 update();
131} 131}
132 132
133void QTReader::focusOutEvent(QFocusEvent* e) 133void QTReader::focusOutEvent(QFocusEvent* e)
134{ 134{
135 if (m_autoScroll) 135 if (m_autoScroll)
136 { 136 {
137 timer->stop(); 137 timer->stop();
138 m_scrolldy = 0; 138 m_scrolldy = 0;
139 } 139 }
140} 140}
141 141
142#include <qapplication.h> 142#include <qapplication.h>
143#include <qdrawutil.h> 143#include <qdrawutil.h>
144#include <unistd.h> 144#include <unistd.h>
145 145
146void QTReader::goDown() 146void QTReader::goDown()
147{ 147{
148 if (m_bpagemode) 148 if (m_bpagemode)
149 { 149 {
150 dopagedn(); 150 dopagedn();
151 } 151 }
152 else 152 else
153 { 153 {
154 lineDown(); 154 lineDown();
155 } 155 }
156} 156}
157 157
158void QTReader::goUp() 158void QTReader::goUp()
159{ 159{
160 if (m_bpagemode) 160 if (m_bpagemode)
161 { 161 {
162 dopageup(); 162 dopageup();
163 } 163 }
164 else 164 else
165 { 165 {
166 lineUp(); 166 lineUp();
167 } 167 }
168} 168}
169 169
170void QTReader::keyPressEvent(QKeyEvent* e) 170void QTReader::keyPressEvent(QKeyEvent* e)
171{ 171{
172 switch (e->key()) 172 switch (e->key())
173 { 173 {
174 case Key_Down: 174 case Key_Down:
175 { 175 {
176 e->accept(); 176 e->accept();
177 if (m_autoScroll) 177 if (m_autoScroll)
178 { 178 {
179 if (m_delay < 59049) 179 if (m_delay < 59049)
180 { 180 {
181 m_delay = (3*m_delay)/2; 181 m_delay = (3*m_delay)/2;
182 timer->changeInterval(real_delay()); 182 timer->changeInterval(real_delay());
183 } 183 }
184 else 184 else
185 { 185 {
186 m_delay = 59049; 186 m_delay = 59049;
187 } 187 }
188 } 188 }
189 else 189 else
190 { 190 {
191 goDown(); 191 goDown();
192 } 192 }
193 } 193 }
194 break; 194 break;
195 case Key_Up: 195 case Key_Up:
196 { 196 {
197 e->accept(); 197 e->accept();
198 if (m_autoScroll) 198 if (m_autoScroll)
199 { 199 {
200 if (m_delay > 1024) 200 if (m_delay > 1024)
201 { 201 {
202 m_delay = (2*m_delay)/3; 202 m_delay = (2*m_delay)/3;
203 timer->changeInterval(real_delay()); 203 timer->changeInterval(real_delay());
204 } 204 }
205 else 205 else
206 { 206 {
207 m_delay = 1024; 207 m_delay = 1024;
208 } 208 }
209 } 209 }
210 else 210 else
211 { 211 {
212 goUp(); 212 goUp();
213 } 213 }
214 } 214 }
215 break; 215 break;
216 /* 216 /*
217 case Key_Left: 217 case Key_Left:
218 { 218 {
219 e->accept(); 219 e->accept();
220 if (m_textfont > 0) 220 if (m_textfont > 0)
221 { 221 {
222 m_textfont--; 222 m_textfont--;
223 setfont(NULL); 223 setfont(NULL);
224 locate(pagelocate()); 224 locate(pagelocate());
225 update(); 225 update();
226 } 226 }
227 } 227 }
228 break; 228 break;
229 case Key_Right: 229 case Key_Right:
230 { 230 {
231 e->accept(); 231 e->accept();
232 if (fonts[++m_textfont] == 0) 232 if (fonts[++m_textfont] == 0)
233 { 233 {
234 m_textfont--; 234 m_textfont--;
235 } 235 }
236 else 236 else
237 { 237 {
238 setfont(NULL); 238 setfont(NULL);
239 locate(pagelocate()); 239 locate(pagelocate());
240 update(); 240 update();
241 } 241 }
242 } 242 }
243 break; 243 break;
244 */ 244 */
245 case Key_Right: 245 case Key_Right:
246 { 246 {
247 e->accept(); 247 e->accept();
248 if (fontsizes[++m_textsize] == 0) 248 if (fontsizes[++m_textsize] == 0)
249 { 249 {
250 m_textsize--; 250 m_textsize--;
251 } 251 }
252 else 252 else
253 { 253 {
254 bool sc = m_autoScroll; 254 bool sc = m_autoScroll;
255 m_autoScroll = false; 255 m_autoScroll = false;
256 setfont(NULL); 256 setfont(NULL);
257 locate(pagelocate()); 257 locate(pagelocate());
258 update(); 258 update();
259 m_autoScroll = sc; 259 m_autoScroll = sc;
260 if (m_autoScroll) autoscroll(); 260 if (m_autoScroll) autoscroll();
261 } 261 }
262 } 262 }
263 break; 263 break;
264 case Key_Left: 264 case Key_Left:
265 { 265 {
266 e->accept(); 266 e->accept();
267 if (m_textsize > 0) 267 if (m_textsize > 0)
268 { 268 {
269 bool sc = m_autoScroll; 269 bool sc = m_autoScroll;
270 m_autoScroll = false; 270 m_autoScroll = false;
271 m_textsize--; 271 m_textsize--;
272 setfont(NULL); 272 setfont(NULL);
273 locate(pagelocate()); 273 locate(pagelocate());
274 update(); 274 update();
275 m_autoScroll = sc; 275 m_autoScroll = sc;
276 if (m_autoScroll) autoscroll(); 276 if (m_autoScroll) autoscroll();
277 } 277 }
278 } 278 }
279 break; 279 break;
280 case Key_Space: 280 case Key_Space:
281 //case Key_Enter: 281// case Key_Enter:
282 case Key_Return: 282 case Key_Return:
283 { 283 {
284 e->accept(); 284 e->accept();
285 setautoscroll(!m_autoScroll); 285 setautoscroll(!m_autoScroll);
286 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); 286 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
287 } 287 }
288 break; 288 break;
289 default: 289 default:
290 e->ignore(); 290 e->ignore();
291 } 291 }
292} 292}
293 293
294void QTReader::setautoscroll(bool _sc) 294void QTReader::setautoscroll(bool _sc)
295{ 295{
296 if (_sc == m_autoScroll) return; 296 if (_sc == m_autoScroll) return;
297 if (m_autoScroll) 297 if (m_autoScroll)
298 { 298 {
299 m_autoScroll = false; 299 m_autoScroll = false;
300 } 300 }
301 else 301 else
302 { 302 {
303 m_autoScroll = true; 303 m_autoScroll = true;
304 autoscroll(); 304 autoscroll();
305 } 305 }
306} 306}
307 307
308bool QTReader::getline(CBuffer *buff) 308bool QTReader::getline(CBuffer *buff)
309{ 309{
310 if (m_bMonoSpaced) 310 if (m_bMonoSpaced)
311 { 311 {
312 return buffdoc.getline(buff ,width(), m_charWidth); 312 return buffdoc.getline(buff ,width(), m_charWidth);
313 } 313 }
314 else 314 else
315 { 315 {
316 return buffdoc.getline(buff, width()); 316 return buffdoc.getline(buff, width());
317 } 317 }
318} 318}
319 319
320void QTReader::doscroll() 320void QTReader::doscroll()
321{ 321{
322 if (!m_autoScroll) 322 if (!m_autoScroll)
323 { 323 {
324 timer->stop(); 324 timer->stop();
325 return; 325 return;
326 } 326 }
327// timer->changeInterval(real_delay()); 327// timer->changeInterval(real_delay());
328 QPainter p( this ); 328 QPainter p( this );
329 QBrush b( white); 329 QBrush b( white);
330 bitBlt(this,0,0,this,0,1,width(),-1); 330 bitBlt(this,0,0,this,0,1,width(),-1);
331 qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b); 331 qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b);
332 332
333 if (++m_scrolldy == m_linespacing) 333 if (++m_scrolldy == m_linespacing)
334 { 334 {
335 setfont(&p); 335 setfont(&p);
336 m_scrolldy = 0; 336 m_scrolldy = 0;
337 // qDrawPlainRect(&p,0,height() - m_linespacing,width(),m_linespacing,white,1,&b); 337// qDrawPlainRect(&p,0,height() - m_linespacing,width(),m_linespacing,white,1,&b);
338 pagepos = locnarray[1]; 338 pagepos = locnarray[1];
339 CBuffer* buff = textarray[0]; 339 CBuffer* buff = textarray[0];
340 for (int i = 1; i < numlines; i++) 340 for (int i = 1; i < numlines; i++)
341 { 341 {
342 textarray[i-1] = textarray[i]; 342 textarray[i-1] = textarray[i];
343 locnarray[i-1] = locnarray[i]; 343 locnarray[i-1] = locnarray[i];
344 } 344 }
345 locnarray[numlines-1] = locate(); 345 locnarray[numlines-1] = locate();
346 if (getline(buff)) 346 if (getline(buff))
347 { 347 {
348 textarray[numlines-1] = buff; 348 textarray[numlines-1] = buff;
349 drawText( p, 0, height() - m_descent - 2, buff->data()); 349 drawText( p, 0, height() - m_descent - 2, buff->data());
350 mylastpos = locate(); 350 mylastpos = locate();
351 } 351 }
352 else 352 else
353 { 353 {
354 // (*buff)[0] = '\0'; 354// (*buff)[0] = '\0';
355 textarray[numlines-1] = buff; 355 textarray[numlines-1] = buff;
356 m_autoScroll = false; 356 m_autoScroll = false;
357 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); 357 ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
358 } 358 }
359 } 359 }
360} 360}
361 361
362void QTReader::drawText(QPainter& p, int x, int y, tchar* _text) 362void QTReader::drawText(QPainter& p, int x, int y, tchar* _text)
363{ 363{
364 QString text = toQString(_text); 364 QString text = toQString(_text);
365 if (m_bMonoSpaced) 365 if (m_bMonoSpaced)
366 { 366 {
367 for (int i = 0; i < text.length(); i++) 367 for (int i = 0; i < text.length(); i++)
368 { 368 {
369 p.drawText( x+i*m_charWidth, y, QString(text[i]) ); 369 p.drawText( x+i*m_charWidth, y, QString(text[i]) );
370 } 370 }
371 } 371 }
372 else 372 else
373 { 373 {
374 p.drawText( x, y, text ); 374 p.drawText( x, y, text );
375 } 375 }
376} 376}
377 377
378void QTReader::autoscroll() 378void QTReader::autoscroll()
379{ 379{
380 timer->start(real_delay(), false); 380 timer->start(real_delay(), false);
381} 381}
382 382
383void QTReader::setfont(QPainter* p) 383void QTReader::setfont(QPainter* p)
384{ 384{
385 // qDebug("Fontsize = %u",fontsizes[m_textsize]); 385 // qDebug("Fontsize = %u",fontsizes[m_textsize]);
386 // qDebug("SetFont %x",p); 386 // qDebug("SetFont %x",p);
387 QFont font(m_fontname, fontsizes[m_textsize], (m_bBold) ? QFont::Bold : QFont::Normal ); 387 QFont font(m_fontname, fontsizes[m_textsize], (m_bBold) ? QFont::Bold : QFont::Normal );
388 m_charWidth = (m_charpc*fontsizes[m_textsize])/100; 388 m_charWidth = (m_charpc*fontsizes[m_textsize])/100;
389 if (m_charWidth <= 0) m_charWidth = 1; 389 if (m_charWidth <= 0) m_charWidth = 1;
390// font.setFixedPitch(m_bMonoSpaced); 390// font.setFixedPitch(m_bMonoSpaced);
391// qDebug("Raw name = %s", (const char*)font.rawName()); 391// qDebug("Raw name = %s", (const char*)font.rawName());
392 if (p != NULL) p->setFont( font ); 392 if (p != NULL) p->setFont( font );
393 if (m_fm == NULL) 393 if (m_fm == NULL)
394 { 394 {
395 m_fm = new QFontMetrics(font); 395 m_fm = new QFontMetrics(font);
396 buffdoc.setfm(m_fm); 396 buffdoc.setfm(m_fm);
397 } 397 }
398 else 398 else
399 { 399 {
400 *m_fm = QFontMetrics(font); 400 *m_fm = QFontMetrics(font);
401 } 401 }
402 m_ascent = m_fm->ascent(); 402 m_ascent = m_fm->ascent();
403 m_descent = m_fm->descent(); 403 m_descent = m_fm->descent();
404 m_linespacing = m_fm->lineSpacing(); 404 m_linespacing = m_fm->lineSpacing();
405} 405}
406 406
407void QTReader::drawFonts( QPainter *p ) 407void QTReader::drawFonts( QPainter *p )
408{ 408{
409 setfont(p); 409 setfont(p);
410 if (m_lastwidth != width()) 410 if (m_lastwidth != width())
411 { 411 {
412 m_lastwidth = width(); 412 m_lastwidth = width();
413 locate(pagepos); 413 locate(pagepos);
414 } 414 }
415 else 415 else
416 { 416 {
417 int sl = screenlines(); 417 int sl = screenlines();
418 if (sl < numlines) 418 if (sl < numlines)
419 { 419 {
420 //qDebug("df:<%u,%u>",sl,numlines); 420// qDebug("df:<%u,%u>",sl,numlines);
421 421
422 size_t newpos = locnarray[sl]; 422 size_t newpos = locnarray[sl];
423 CBuffer** nta = new CBuffer*[sl]; 423 CBuffer** nta = new CBuffer*[sl];
424 size_t* nla = new size_t[sl]; 424 size_t* nla = new size_t[sl];
425 for (int i = 0; i < sl; i++) 425 for (int i = 0; i < sl; i++)
426 { 426 {
427 nta[i] = textarray[i]; 427 nta[i] = textarray[i];
428 nla[i] = locnarray[i]; 428 nla[i] = locnarray[i];
429 } 429 }
430 for (int i = sl; i < numlines; i++) delete textarray[i]; 430 for (int i = sl; i < numlines; i++) delete textarray[i];
431 delete [] textarray; 431 delete [] textarray;
432 delete [] locnarray; 432 delete [] locnarray;
433 textarray = nta; 433 textarray = nta;
434 locnarray = nla; 434 locnarray = nla;
435 numlines = sl; 435 numlines = sl;
436 jumpto(mylastpos = newpos); 436 jumpto(mylastpos = newpos);
437 //locate(pagepos); 437// locate(pagepos);
438 } 438 }
439 if (sl > numlines) 439 if (sl > numlines)
440 { 440 {
441 //qDebug("df:<%u,%u>",sl,numlines); 441// qDebug("df:<%u,%u>",sl,numlines);
442 CBuffer** nta = new CBuffer*[sl]; 442 CBuffer** nta = new CBuffer*[sl];
443 size_t* nla = new size_t[sl]; 443 size_t* nla = new size_t[sl];
444 for (int i = 0; i < numlines; i++) 444 for (int i = 0; i < numlines; i++)
445 { 445 {
446 nta[i] = textarray[i]; 446 nta[i] = textarray[i];
447 nla[i] = locnarray[i]; 447 nla[i] = locnarray[i];
448 } 448 }
449 if (locate() != mylastpos) jumpto(mylastpos); 449 if (locate() != mylastpos) jumpto(mylastpos);
450 for (int i = numlines; i < sl; i++) 450 for (int i = numlines; i < sl; i++)
451 { 451 {
452 nta[i] = new CBuffer; 452 nta[i] = new CBuffer;
453 nla[i] = locate(); 453 nla[i] = locate();
454 getline(nta[i]); 454 getline(nta[i]);
455 } 455 }
456 mylastpos = locate(); 456 mylastpos = locate();
457 delete [] textarray; 457 delete [] textarray;
458 delete [] locnarray; 458 delete [] locnarray;
459 textarray = nta; 459 textarray = nta;
460 locnarray = nla; 460 locnarray = nla;
461 numlines = sl; 461 numlines = sl;
462 } 462 }
463 int ypos = (btight) ? 0 : m_ascent-m_linespacing; 463 int ypos = (btight) ? 0 : m_ascent-m_linespacing;
464 // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; 464 // int linespacing = (tight) ? m_ascent : m_ascent+m_descent;
465 for (int i = 0; i < numlines; i++) 465 for (int i = 0; i < numlines; i++)
466 { 466 {
467 drawText( *p, 0, ypos += m_linespacing, textarray[i]->data()); 467 drawText( *p, 0, ypos += m_linespacing, textarray[i]->data());
468 } 468 }
469 /* 469 /*
470 470
471 471
472 472
473 int nlines = height()/(fontmetric.ascent()+fontmetric.descent()); 473 int nlines = height()/(fontmetric.ascent()+fontmetric.descent());
474 tchar buffer[1024]; 474 tchar buffer[1024];
475 for (int i = 0; i < nlines; i++) 475 for (int i = 0; i < nlines; i++)
476 { 476 {
477 y += fontmetric.ascent(); 477 y += fontmetric.ascent();
478 sprintf(buffer, "%d:%d:%s[%d]:Lines %d:%s", i+1, m_textfont, fonts[m_textfont], m_fs, nlines, (const tchar*)m_string); 478 sprintf(buffer, "%d:%d:%s[%d]:Lines %d:%s", i+1, m_textfont, fonts[m_textfont], m_fs, nlines, (const tchar*)m_string);
479 drawText( *p, 0, y, buffer ); 479 drawText( *p, 0, y, buffer );
480 y += fontmetric.descent(); 480 y += fontmetric.descent();
481 } 481 }
482 */ 482 */
483 } 483 }
484 m_scrolldy = 0; 484 m_scrolldy = 0;
485} 485}
486 486
487QString QTReader::firstword() 487QString QTReader::firstword()
488{ 488{
489 if (m_bMonoSpaced) 489 if (m_bMonoSpaced)
490 { 490 {
491 return toQString(textarray[0]->data()); 491 return toQString(textarray[0]->data());
492 } 492 }
493 else 493 else
494 { 494 {
495 int start, end, len, j; 495 int start, end, len, j;
496 for (j = 0; j < numlines; j++) 496 for (j = 0; j < numlines; j++)
497 { 497 {
498 len = textarray[j]->length(); 498 len = textarray[j]->length();
499 for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++); 499 for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++);
500 if (start < len) break; 500 if (start < len) break;
501 } 501 }
502 if (j < numlines) 502 if (j < numlines)
503 { 503 {
504 QString ret = ""; 504 QString ret = "";
505 for (end = start; end < len && isalpha((*textarray[j])[end]); end++) 505 for (end = start; end < len && isalpha((*textarray[j])[end]); end++)
506 ret += (*textarray[j])[end]; 506 ret += (*textarray[j])[end];
507 if (ret.isEmpty()) ret = "Current position"; 507 if (ret.isEmpty()) ret = "Current position";
508 return ret; 508 return ret;
509 } 509 }
510 else 510 else
511 return "Current position"; 511 return "Current position";
512 } 512 }
513} 513}
514 514
515// 515//
516// Construct the QTReader with buttons. 516// Construct the QTReader with buttons.
517// 517//
518 518
519void QTReader::ChangeFont(int tgt) 519void QTReader::ChangeFont(int tgt)
520{ 520{
521 521
522 QValueList<int>::Iterator it; 522 QValueList<int>::Iterator it;
523 523
524// QValueList<int> sizes = QFontDatabase::pointSizes(m_fontname, (m_bBold) ? QFont::Bold : QFont::Normal); 524// QValueList<int> sizes = QFontDatabase::pointSizes(m_fontname, (m_bBold) ? QFont::Bold : QFont::Normal);
525 QFontDatabase fdb; 525 QFontDatabase fdb;
526/* 526/*
527 QStringList styles = fdb.styles(m_fontname); 527 QStringList styles = fdb.styles(m_fontname);
528 for ( QStringList::Iterator it = styles.begin(); it != styles.end(); ++it ) 528 for ( QStringList::Iterator it = styles.begin(); it != styles.end(); ++it )
529 { 529 {
530 printf( "%s \n", (*it).latin1() ); 530 printf( "%s \n", (*it).latin1() );
531 } 531 }
532*/ 532*/
533 QValueList<int> sizes = fdb.pointSizes(m_fontname, (m_bBold) ? QString("Bold") : QString::null); 533 QValueList<int> sizes = fdb.pointSizes(m_fontname, (m_bBold) ? QString("Bold") : QString::null);
534 uint n = sizes.count(); 534 uint n = sizes.count();
535 if (fontsizes != NULL) delete [] fontsizes; 535 if (fontsizes != NULL) delete [] fontsizes;
536 fontsizes = new unsigned int[n+1]; 536 fontsizes = new unsigned int[n+1];
537 uint i = 0; 537 uint i = 0;
538 uint best = 0; 538 uint best = 0;
539 for (it = sizes.begin(); it != sizes.end(); it++) 539 for (it = sizes.begin(); it != sizes.end(); it++)
540 { 540 {
541 fontsizes[i] = (*it)/10; 541 fontsizes[i] = (*it)/10;
542 if (abs(tgt-fontsizes[i]) < abs(tgt-fontsizes[best])) 542 if (abs(tgt-fontsizes[i]) < abs(tgt-fontsizes[best]))
543 { 543 {
544 best = i; 544 best = i;
545 } 545 }
546 i++; 546 i++;
547 } 547 }
548 m_textsize = best; 548 m_textsize = best;
549 fontsizes[i] = 0; 549 fontsizes[i] = 0;
550 setfont(NULL); 550 setfont(NULL);
551 QFont font(m_fontname, fontsizes[m_textsize], (m_bBold) ? QFont::Bold : QFont::Normal ); 551 QFont font(m_fontname, fontsizes[m_textsize], (m_bBold) ? QFont::Bold : QFont::Normal );
552 if (m_fm == NULL) 552 if (m_fm == NULL)
553 { 553 {
554 m_fm = new QFontMetrics(font); 554 m_fm = new QFontMetrics(font);
555 buffdoc.setfm(m_fm); 555 buffdoc.setfm(m_fm);
556 } 556 }
557} 557}
558 558
559void QTReader::init() 559void QTReader::init()
560{ 560{
561 // setCaption( "Qt Draw Demo Application" ); 561 // setCaption( "Qt Draw Demo Application" );
562 562
563 setBackgroundColor( white ); 563 setBackgroundColor( white );
564// QPainter p(this); 564// QPainter p(this);
565// p.setBackgroundMode( Qt::OpaqueMode ); 565// p.setBackgroundMode( Qt::OpaqueMode );
566 buffdoc.setfilter(getfilter()); 566 buffdoc.setfilter(getfilter());
567 ChangeFont(m_textsize); 567 ChangeFont(m_textsize);
568 // setFocusPolicy(QWidget::StrongFocus); 568 // setFocusPolicy(QWidget::StrongFocus);
569 // resize( 240, 320 ); 569 // resize( 240, 320 );
570 //setFocus(); 570 //setFocus();
571 timer = new QTimer(this); 571 timer = new QTimer(this);
572 connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); 572 connect(timer, SIGNAL(timeout()), this, SLOT(doscroll()));
573// QMessageBox::information(this, "init", m_lastfile, 1); 573// QMessageBox::information(this, "init", m_lastfile, 1);
574 m_lastwidth = width(); 574 m_lastwidth = width();
575 if (!m_lastfile.isEmpty()) 575 if (!m_lastfile.isEmpty())
576 { 576 {
577 m_string = DocLnk(m_lastfile).name(); 577 m_string = DocLnk(m_lastfile).name();
578 load_file(m_lastfile); 578 load_file(m_lastfile);
579 } 579 }
580} 580}
581 581
582// 582//
583// Clean up 583// Clean up
584// 584//
585QTReader::~QTReader() 585QTReader::~QTReader()
586{ 586{
587 if (fontsizes != NULL) delete [] fontsizes; 587 if (fontsizes != NULL) delete [] fontsizes;
588#ifndef QT_NO_PRINTER 588#ifndef QT_NO_PRINTER
589 // delete printer; 589 // delete printer;
590#endif 590#endif
591} 591}
592 592
593// 593//
594// Calls the drawing function as specified by the radio buttons. 594// Calls the drawing function as specified by the radio buttons.
595// 595//
596 596
597void QTReader::drawIt( QPainter *p ) 597void QTReader::drawIt( QPainter *p )
598{ 598{
599 drawFonts(p); 599 drawFonts(p);
600} 600}
601 601
602// 602//
603// Called when the print button is clicked. 603// Called when the print button is clicked.
604// 604//
605/* 605/*
606void QTReader::printIt() 606void QTReader::printIt()
607{ 607{
608#ifndef QT_NO_PRINTER 608#ifndef QT_NO_PRINTER
609 if ( printer->setup( this ) ) { 609 if ( printer->setup( this ) ) {
610 QPainter paint; 610 QPainter paint;
611 if ( !paint.begin( printer ) ) 611 if ( !paint.begin( printer ) )
612 return; 612 return;
613 drawIt( &paint ); 613 drawIt( &paint );
614 } 614 }
615#endif 615#endif
616} 616}
617*/ 617*/
618// 618//
619// Called when the widget needs to be updated. 619// Called when the widget needs to be updated.
620// 620//
621 621
622void QTReader::paintEvent( QPaintEvent * ) 622void QTReader::paintEvent( QPaintEvent * )
623{ 623{
624 QPainter paint( this ); 624 QPainter paint( this );
625 drawIt( &paint ); 625 drawIt( &paint );
626} 626}
627 627
628// 628//
629// Called when the widget has been resized. 629// Called when the widget has been resized.
630// Moves the button group to the upper right corner 630// Moves the button group to the upper right corner
631// of the widget. 631// of the widget.
632 632
633/* 633/*
634void QTReader::resizeEvent( QResizeEvent * ) 634void QTReader::resizeEvent( QResizeEvent * )
635{ 635{
636 // qDebug("resize:(%u,%u)", width(), height()); 636 // qDebug("resize:(%u,%u)", width(), height());
637 // bgroup->move( width()-bgroup->width(), 0 ); 637 // bgroup->move( width()-bgroup->width(), 0 );
638} 638}
639*/ 639*/
640 640
641// 641//
642// Create and display our widget. 642// Create and display our widget.
643// 643//
644/* 644/*
645int main( int argc, tchar **argv ) 645int main( int argc, tchar **argv )
646{ 646{
647 QApplication app( argc, argv ); 647 QApplication app( argc, argv );
648 QTReader draw; 648 QTReader draw;
649 app.setMainWidget( &draw ); 649 app.setMainWidget( &draw );
650 draw.setCaption("Qt Example - Drawdemo"); 650 draw.setCaption("Qt Example - Drawdemo");
651 draw.show(); 651 draw.show();
652 return app.exec(); 652 return app.exec();
653} 653}
654*/ 654*/
655 655
656 656
657bool QTReader::locate(unsigned long n) { 657bool QTReader::locate(unsigned long n) {
658 //printf("Locate\n"); 658 //printf("Locate\n");
659 buffdoc.locate(n); 659 buffdoc.locate(n);
660 // qDebug("&buffdoc.located"); 660 // qDebug("&buffdoc.located");
661 fillbuffer(); 661 fillbuffer();
662 // qDebug("&Buffer filled"); 662 // qDebug("&Buffer filled");
663 update(); 663 update();
664 // qDebug("&Located"); 664 // qDebug("&Located");
665 return true; 665 return true;
666} 666}
667 667
668unsigned int QTReader::screenlines() 668unsigned int QTReader::screenlines()
669{ 669{
670 // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; 670 // int linespacing = (tight) ? m_ascent : m_ascent+m_descent;
671 // return (height()-m_descent)/(m_linespacing); 671 // return (height()-m_descent)/(m_linespacing);
672 return (height()-2)/(m_linespacing); 672 return (height()-2)/(m_linespacing);
673}; 673};
674 674
675bool QTReader::fillbuffer() { 675bool QTReader::fillbuffer() {
676 //printf("Fillbuffer\n"); 676 //printf("Fillbuffer\n");
677 m_scrolldy = 0; 677 m_scrolldy = 0;
678 int ch; 678 int ch;
679 bool ret = false; 679 bool ret = false;
680 int delta = screenlines(); 680 int delta = screenlines();
681 // qDebug("fillbuffer:%u-%u",delta,numlines); 681 // qDebug("fillbuffer:%u-%u",delta,numlines);
682 if (delta != numlines) 682 if (delta != numlines)
683 { 683 {
684 if (textarray != NULL) 684 if (textarray != NULL)
685 { 685 {
686 for (int i = 0; i < numlines; i++) delete textarray[i]; 686 for (int i = 0; i < numlines; i++) delete textarray[i];
687 delete [] textarray; 687 delete [] textarray;
688 delete [] locnarray; 688 delete [] locnarray;
689 } 689 }
690 numlines = delta; 690 numlines = delta;
691 textarray = new CBuffer*[numlines]; 691 textarray = new CBuffer*[numlines];
692 locnarray = new size_t[numlines]; 692 locnarray = new size_t[numlines];
693 for (int i = 0; i < numlines; i++) textarray[i] = new CBuffer; 693 for (int i = 0; i < numlines; i++) textarray[i] = new CBuffer;
694 } 694 }
695 // qDebug("fillbuffer:pagepos:%u",pagepos); 695 // qDebug("fillbuffer:pagepos:%u",pagepos);
696 unsigned int oldpagepos = pagepos; 696 unsigned int oldpagepos = pagepos;
697// if (textarray != NULL) 697// if (textarray != NULL)
698// pagepos = locnarray[0]; 698// pagepos = locnarray[0];
699// else 699// else
700 pagepos = locate(); 700 pagepos = locate();
701 for (int i = 0; i < delta; i++) 701 for (int i = 0; i < delta; i++)
702 { 702 {
703 locnarray[i] = locate(); 703 locnarray[i] = locate();
704 ch = getline(textarray[i]); 704 ch = getline(textarray[i]);
705 // if (ch == EOF) { 705 // if (ch == EOF) {
706 if (!ch) 706 if (!ch)
707 { 707 {
708 if (i == 0) 708 if (i == 0)
709 { 709 {
710 pagepos = oldpagepos; 710 locate(oldpagepos);
711 return false; 711 return false;
712 } 712 }
713 else 713 else
714 { 714 {
715 ret = true; 715 ret = true;
716 for (int j = i+1; j < delta; j++) 716 for (int j = i+1; j < delta; j++)
717 { 717 {
718 locnarray[j] = locnarray[j-1]; 718 locnarray[j] = locnarray[j-1];
719 (*(textarray[j]))[0] = '\0'; 719 (*(textarray[j]))[0] = '\0';
720 } 720 }
721 break; 721 break;
722 } 722 }
723 } 723 }
724 if (ch == '\012') ret = true; 724 if (ch == '\012') ret = true;
725 } 725 }
726 mylastpos = locate(); 726 mylastpos = locate();
727 // qDebug("fillbuffer:lastpos:%u",mylastpos); 727 // qDebug("fillbuffer:lastpos:%u",mylastpos);
728 return true; 728 return true;
729} 729}
730 730
731 731
732void QTReader::dopagedn() 732void QTReader::dopagedn()
733{ 733{
734 if (m_overlap == 0) 734 if (m_overlap == 0)
735 { 735 {
736 if (locate() != mylastpos) jumpto(mylastpos); 736 if (locate() != mylastpos) jumpto(mylastpos);
737 } 737 }
738 else 738 else
739 { 739 {
740 if (m_overlap >= screenlines()) m_overlap = screenlines()/2; 740 if (m_overlap >= screenlines()) m_overlap = screenlines()/2;
741 jumpto(locnarray[screenlines()-m_overlap]); 741 jumpto(locnarray[screenlines()-m_overlap]);
742 } 742 }
743 if (fillbuffer()) 743 if (fillbuffer())
744 { 744 {
745 update(); 745 update();
746 } 746 }
747} 747}
748 748
749void QTReader::dopageup() 749void QTReader::dopageup()
750{ 750{
751 CBuffer** buff = textarray; 751 CBuffer** buff = textarray;
752 unsigned int *loc = new unsigned int[numlines]; 752 unsigned int *loc = new unsigned int[numlines];
753 int cbptr = 0; 753 int cbptr = 0;
754 if (locate() != mylastpos) jumpto(mylastpos); 754 if (locate() != mylastpos) jumpto(mylastpos);
755 if (m_overlap >= screenlines()) m_overlap = screenlines()/2; 755 if (m_overlap >= screenlines()) m_overlap = screenlines()/2;
756 unsigned int target = locnarray[m_overlap]; 756 unsigned int target = locnarray[m_overlap];
757 if (buffdoc.hasrandomaccess()) 757 if (buffdoc.hasrandomaccess())
758 { 758 {
759 unsigned int delta = locate()-pagelocate(); 759 unsigned int delta = locate()-pagelocate();
760 if (delta < 64) delta = 64; 760 if (delta < 64) delta = 64;
761 if (delta % 2 != 0) delta++; 761 if (delta % 2 != 0) delta++;
762 if (target % 2 != 0) target++; 762 if (target % 2 != 0) target++;
763 do 763 do
764 { 764 {
765 delta <<= 1; 765 delta <<= 1;
766 if (delta >= target) 766 if (delta >= target)
767 { 767 {
768 delta = target; 768 delta = target;
769 jumpto(0); 769 jumpto(0);
770 for (int i = 0; i < numlines; i++) 770 for (int i = 0; i < numlines; i++)
771 { 771 {
772 loc[i] = locate(); 772 loc[i] = locate();
773 getline(buff[i]); 773 getline(buff[i]);
774 } 774 }
775 break; 775 break;
776 } 776 }
777 jumpto(target-delta); 777 jumpto(target-delta);
778 do 778 do
779 { 779 {
780 getline(buff[0]); 780 getline(buff[0]);
781#ifdef WS 781#ifdef WS
782 //printf("Trying:%s\n",buff[0]); 782 //printf("Trying:%s\n",buff[0]);
783#endif 783#endif
784 if (locate() > target) continue; 784 if (locate() > target) continue;
785 } 785 }
786 while (!buffdoc.iseol()); 786 while (!buffdoc.iseol());
787 for (int i = 0; i < numlines; i++) 787 for (int i = 0; i < numlines; i++)
788 { 788 {
789 loc[i] = locate(); 789 loc[i] = locate();
790 getline(buff[i]); 790 getline(buff[i]);
791#ifdef WS 791#ifdef WS
792 //printf("Filling:%s\n",buff[i]); 792 //printf("Filling:%s\n",buff[i]);
793#endif 793#endif
794 } 794 }
795 } 795 }
796 while (locate() >= target && delta < 4096); 796 while (locate() >= target && delta < 4096);
797#ifdef WS 797#ifdef WS
798 //printf("Delta:%u\n",delta); 798 //printf("Delta:%u\n",delta);
799#endif 799#endif
800 } 800 }
801 else 801 else
802 { 802 {
803 jumpto(0); 803 jumpto(0);
804 for (int i = 0; i < numlines; i++) 804 for (int i = 0; i < numlines; i++)
805 { 805 {
806 loc[i] = locate(); 806 loc[i] = locate();
807 getline(buff[i]); 807 getline(buff[i]);
808 } 808 }
809 } 809 }
810 cbptr = 0; 810 cbptr = 0;
811 while (locate() < target) 811 while (locate() < target)
812 { 812 {
813 loc[cbptr] = locate(); 813 loc[cbptr] = locate();
814 getline(buff[cbptr]); 814 getline(buff[cbptr]);
815#ifdef WS 815#ifdef WS
816 //printf("Adding:%s\n",buff[cbptr]->data()); 816 //printf("Adding:%s\n",buff[cbptr]->data());
817#endif 817#endif
818 cbptr = (cbptr+1) % numlines; 818 cbptr = (cbptr+1) % numlines;
819 } 819 }
820 pagepos = loc[cbptr]; 820 pagepos = loc[cbptr];
821 textarray = new CBuffer*[numlines]; 821 textarray = new CBuffer*[numlines];
822 for (int i = 0; i < numlines; i++) 822 for (int i = 0; i < numlines; i++)
823 { 823 {
824 int j = (cbptr+i)%numlines; 824 int j = (cbptr+i)%numlines;
825 textarray[i] = buff[j]; 825 textarray[i] = buff[j];
826 locnarray[i] = loc[j]; 826 locnarray[i] = loc[j];
827 } 827 }
828 delete [] buff; 828 delete [] buff;
829 delete [] loc; 829 delete [] loc;
830 mylastpos = locate(); 830 mylastpos = locate();
831 update(); 831 update();
832} 832}
833 833
834bool QTReader::load_file(const char *newfile, unsigned int _lcn) 834bool QTReader::load_file(const char *newfile, unsigned int _lcn)
835{ 835{
836// QMessageBox::information(this, "Name", name, 1); 836// QMessageBox::information(this, "Name", name, 1);
837// QMessageBox::information(this, "load_file", newfile, 1); 837// QMessageBox::information(this, "load_file", newfile, 1);
838 838
839 bool bRC = false; 839 bool bRC = false;
840 unsigned int lcn = _lcn; 840 unsigned int lcn = _lcn;
841 if (m_lastfile == newfile) 841 if (m_lastfile == newfile)
842 { 842 {
843 lcn = m_lastposn; 843 lcn = m_lastposn;
844 } 844 }
845 m_lastfile = newfile; 845 m_lastfile = newfile;
846 // QMessageBox::information(0, "Opening...", newfile); 846 // QMessageBox::information(0, "Opening...", newfile);
847 if (buffdoc.openfile(this,newfile) == 0) 847 if (buffdoc.openfile(this,newfile) == 0)
848 { 848 {
849 bRC = true; 849 bRC = true;
850 // qDebug("buffdoc.openfile done"); 850 // qDebug("buffdoc.openfile done");
851 locate(lcn); 851 locate(lcn);
852 // qDebug("buffdoc.locate done"); 852 // qDebug("buffdoc.locate done");
853 } 853 }
854 update(); 854 update();
855 // qDebug("Updated"); 855 // qDebug("Updated");
856 return bRC; 856 return bRC;
857} 857}
858 858
859void QTReader::lineDown() 859void QTReader::lineDown()
860{ 860{
861 pagepos = locnarray[1]; 861 pagepos = locnarray[1];
862 CBuffer* buff = textarray[0]; 862 CBuffer* buff = textarray[0];
863 for (int i = 1; i < numlines; i++) 863 for (int i = 1; i < numlines; i++)
864 { 864 {
865 textarray[i-1] = textarray[i]; 865 textarray[i-1] = textarray[i];
866 locnarray[i-1] = locnarray[i]; 866 locnarray[i-1] = locnarray[i];
867 } 867 }
868 locnarray[numlines-1] = locate(); 868 locnarray[numlines-1] = locate();
869 if (getline(buff)) 869 if (getline(buff))
870 { 870 {
871 textarray[numlines-1] = buff; 871 textarray[numlines-1] = buff;
872 mylastpos = locate(); 872 mylastpos = locate();
873 } 873 }
874 else 874 else
875 { 875 {
876 textarray[numlines-1] = buff; 876 textarray[numlines-1] = buff;
877 } 877 }
878 update(); 878 update();
879} 879}
880/* 880/*
881void QTReader::lineUp() 881void QTReader::lineUp()
882{ 882{
883 CBuffer** buff = textarray; 883 CBuffer** buff = textarray;
884 unsigned int *loc = new unsigned int[numlines]; 884 unsigned int *loc = new unsigned int[numlines];
885 int cbptr = 0; 885 int cbptr = 0;
886 if (locate() != mylastpos) jumpto(mylastpos); 886 if (locate() != mylastpos) jumpto(mylastpos);
887 unsigned int target = locnarray[numlines-1]; 887 unsigned int target = locnarray[numlines-1];
888 if (buffdoc.hasrandomaccess()) 888 if (buffdoc.hasrandomaccess())
889 { 889 {
890 unsigned int delta = locate()-pagelocate(); 890 unsigned int delta = locate()-pagelocate();
891 if (delta < 64) delta = 64; 891 if (delta < 64) delta = 64;
892 do 892 do
893 { 893 {
894 delta <<= 1; 894 delta <<= 1;
895 if (delta >= target) 895 if (delta >= target)
896 { 896 {
897 delta = target; 897 delta = target;
898 jumpto(0); 898 jumpto(0);
899 for (int i = 0; i < numlines; i++) 899 for (int i = 0; i < numlines; i++)
900 { 900 {
901 loc[i] = locate(); 901 loc[i] = locate();
902 getline(buff[i]); 902 getline(buff[i]);
903 } 903 }
904 break; 904 break;
905 } 905 }
906 jumpto(target-delta); 906 jumpto(target-delta);
907 do 907 do
908 { 908 {
909 buffdoc.getline(buff[0],width()); 909 buffdoc.getline(buff[0],width());
910#ifdef WS 910#ifdef WS
911 //printf("Trying:%s\n",buff[0]); 911 //printf("Trying:%s\n",buff[0]);
912#endif 912#endif
913 if (locate() > target) continue; 913 if (locate() > target) continue;
914 } 914 }
915 while (!buffdoc.iseol()); 915 while (!buffdoc.iseol());
916 for (int i = 0; i < numlines; i++) 916 for (int i = 0; i < numlines; i++)
917 { 917 {
918 loc[i] = locate(); 918 loc[i] = locate();
919 buffdoc.getline(buff[i],width()); 919 buffdoc.getline(buff[i],width());
920#ifdef WS 920#ifdef WS
921 //printf("Filling:%s\n",buff[i]); 921 //printf("Filling:%s\n",buff[i]);
922#endif 922#endif
923 } 923 }
924 } 924 }
925 while (locate() >= target && delta < 4096); 925 while (locate() >= target && delta < 4096);
926#ifdef WS 926#ifdef WS
927 //printf("Delta:%u\n",delta); 927 //printf("Delta:%u\n",delta);
928#endif 928#endif
929 } 929 }
930 else 930 else
931 { 931 {
932 jumpto(0); 932 jumpto(0);
933 for (int i = 0; i < numlines; i++) 933 for (int i = 0; i < numlines; i++)
934 { 934 {
935 loc[i] = locate(); 935 loc[i] = locate();
936 buffdoc.getline(buff[i],width()); 936 buffdoc.getline(buff[i],width());
937 } 937 }
938 } 938 }
939 cbptr = 0; 939 cbptr = 0;
940 while (locate() < target) 940 while (locate() < target)
941 { 941 {
942 loc[cbptr] = locate(); 942 loc[cbptr] = locate();
943 buffdoc.getline(buff[cbptr], width()); 943 buffdoc.getline(buff[cbptr], width());
944#ifdef WS 944#ifdef WS
945 //printf("Adding:%s\n",buff[cbptr]->data()); 945 //printf("Adding:%s\n",buff[cbptr]->data());
946#endif 946#endif
947 cbptr = (cbptr+1) % numlines; 947 cbptr = (cbptr+1) % numlines;
948 } 948 }
949 pagepos = loc[cbptr]; 949 pagepos = loc[cbptr];
950 textarray = new CBuffer*[numlines]; 950 textarray = new CBuffer*[numlines];
951 for (int i = 0; i < numlines; i++) 951 for (int i = 0; i < numlines; i++)
952 { 952 {
953 int j = (cbptr+i)%numlines; 953 int j = (cbptr+i)%numlines;
954 textarray[i] = buff[j]; 954 textarray[i] = buff[j];
955 locnarray[i] = loc[j]; 955 locnarray[i] = loc[j];
956 } 956 }
957 delete [] buff; 957 delete [] buff;
958 delete [] loc; 958 delete [] loc;
959 mylastpos = locate(); 959 mylastpos = locate();
960 update(); 960 update();
961} 961}
962*/ 962*/
963void QTReader::lineUp() 963void QTReader::lineUp()
964{ 964{
965 CBuffer* buff = textarray[numlines-1]; 965 CBuffer* buff = textarray[numlines-1];
966 unsigned int loc; 966 unsigned int loc;
967 unsigned int end = locnarray[numlines-1]; 967 unsigned int end = locnarray[numlines-1];
968 int cbptr = 0; 968 int cbptr = 0;
969 if (locate() != mylastpos) jumpto(mylastpos); 969 if (locate() != mylastpos) jumpto(mylastpos);
970 unsigned int target = locnarray[0]; 970 unsigned int target = locnarray[0];
971 if (buffdoc.hasrandomaccess()) 971 if (buffdoc.hasrandomaccess())
972 { 972 {
973 unsigned int delta = locate()-pagelocate(); 973 unsigned int delta = locate()-pagelocate();
974 if (delta < 64) delta = 64; 974 if (delta < 64) delta = 64;
975 do 975 do
976 { 976 {
977 delta <<= 1; 977 delta <<= 1;
978 if (delta >= target) 978 if (delta >= target)
979 { 979 {
980 delta = target; 980 delta = target;
981 jumpto(0); 981 jumpto(0);
982 for (int i = 0; i < numlines; i++) 982 for (int i = 0; i < numlines; i++)
983 { 983 {
984 loc = locate(); 984 loc = locate();
985 getline(buff); 985 getline(buff);
986 } 986 }
987 break; 987 break;
988 } 988 }
989 jumpto(target-delta); 989 jumpto(target-delta);
990 do 990 do
991 { 991 {
992 getline(buff); 992 getline(buff);
993#ifdef WS 993#ifdef WS
994 //printf("Trying:%s\n",buff[0]); 994 //printf("Trying:%s\n",buff[0]);
995#endif 995#endif
996 if (locate() > target) continue; 996 if (locate() > target) continue;
997 } 997 }
998 while (!buffdoc.iseol()); 998 while (!buffdoc.iseol());
999 loc = locate(); 999 loc = locate();
1000 getline(buff); 1000 getline(buff);
1001 } 1001 }
1002 while (locate() >= target && delta < 4096); 1002 while (locate() >= target && delta < 4096);
1003 } 1003 }
1004 else 1004 else
1005 { 1005 {
1006 jumpto(0); 1006 jumpto(0);
1007 loc = locate(); 1007 loc = locate();
1008 getline(buff); 1008 getline(buff);
1009 } 1009 }
1010 cbptr = 0; 1010 cbptr = 0;
1011 while (locate() < target) 1011 while (locate() < target)
1012 { 1012 {
1013 loc = locate(); 1013 loc = locate();
1014 getline(buff); 1014 getline(buff);
1015 } 1015 }
1016 pagepos = loc; 1016 pagepos = loc;
1017 for (int i = numlines-1; i > 0; i--) 1017 for (int i = numlines-1; i > 0; i--)
1018 { 1018 {
1019 textarray[i] = textarray[i-1]; 1019 textarray[i] = textarray[i-1];
1020 locnarray[i] = locnarray[i-1]; 1020 locnarray[i] = locnarray[i-1];
1021 } 1021 }
1022 textarray[0] = buff; 1022 textarray[0] = buff;
1023 locnarray[0] = loc; 1023 locnarray[0] = loc;
1024// delete [] buff; 1024// delete [] buff;
1025// delete [] loc; 1025// delete [] loc;
1026 mylastpos = locate(); 1026 mylastpos = locate();
1027 jumpto(end); 1027 jumpto(end);
1028 update(); 1028 update();
1029} 1029}
1030 1030
1031bool QTReader::empty() 1031bool QTReader::empty()
1032{ 1032{
1033 return buffdoc.empty(); 1033 return buffdoc.empty();
1034} 1034}
diff --git a/noncore/apps/opie-reader/opie-reader.control b/noncore/apps/opie-reader/opie-reader.control
index e8c98bb..1c28648 100644
--- a/noncore/apps/opie-reader/opie-reader.control
+++ b/noncore/apps/opie-reader/opie-reader.control
@@ -1,9 +1,9 @@
1Files: bin/uqtreader apps/Applications/uqtreader.desktop pics/uqtreader.png pics/panel-arrow-down.png 1Files: bin/uqtreader apps/Applications/uqtreader.desktop pics/uqtreader.png pics/panel-arrow-down.png
2Priority: optional 2Priority: optional
3Section: applications 3Section: applications
4Maintainer: Tim Wentford <timwentford@hotmail.com> 4Maintainer: Tim Wentford <timwentford@hotmail.com>
5Architecture: arm 5Architecture: arm
6Version: 0_3r_beta_UTF8 6Version: $QPE_VERSION-$SUB_VERSION
7Depends: 7Depends: zlib
8License: GPL 8License: GPL
9Description: E-Book reader 9Description: E-Book reader