summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/QTReader.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-reader/QTReader.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-reader/QTReader.cpp855
1 files changed, 681 insertions, 174 deletions
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp
index 33884a0..0c56dd4 100644
--- a/noncore/apps/opie-reader/QTReader.cpp
+++ b/noncore/apps/opie-reader/QTReader.cpp
@@ -34,3 +34,6 @@ const int _SBARHEIGHT = 3;
34#include <qdir.h> 34#include <qdir.h>
35#include "TableDialog.h"
36#include "outputcodec.h"
35 37
38/*
36#ifdef _UNICODE 39#ifdef _UNICODE
@@ -40,2 +43,3 @@ const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 };
40#endif 43#endif
44*/
41//const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 }; 45//const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 };
@@ -51,5 +55,5 @@ tchar QTReader::jplucknextpart[] = { 'N','e','x','t',' ','P','a','r','t',' ','>'
51 55
52
53QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : 56QTReader::QTReader( QWidget *parent, const char *name, WFlags f) :
54 QWidget(parent, name, f), 57 QWidget(parent, name, f | WRepaintNoErase | WResizeNoErase),
58 m_outofdate(true),
55 m_default_fg(0,0,0), 59 m_default_fg(0,0,0),
@@ -91,12 +95,8 @@ QTReader::QTReader( QWidget *parent, const char *name, WFlags f) :
91{ 95{
96 m_output = NULL;
92 m_overlap = 1; 97 m_overlap = 1;
93 setKeyCompression ( true ); 98 setKeyCompression ( true );
94#ifdef DOUBLEBUFFER
95 dbuff = new QPixmap();
96 dbp = new QPainter();
97 // if (painter->isActive()) painter->end();
98 // painter->begin(frame);
99#endif
100// init();
101 99
100 dbuff = NULL;
101 dbp = NULL;
102} 102}
@@ -119,3 +119,3 @@ QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *nam
119 init(); 119 init();
120// // qDebug("Load_file(1)"); 120// // qDeb2ug("Load_file(1)");
121 load_file((const tchar*)filename); 121 load_file((const tchar*)filename);
@@ -140,3 +140,4 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
140{ 140{
141 buffdoc.unsuspend(); 141 m_drageligible = false;
142 qDebug("Mouse pressed at (%u, %u)", _e->x(), _e->y());
142 int x, y, ht, wh; 143 int x, y, ht, wh;
@@ -156,2 +157,4 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
156 } 157 }
158 if (x >= m_left_border && x <= wh - m_right_border && y >= m_topmargin && y <= ht-m_bottommargin)
159 {
157 if (_e->button() == RightButton) 160 if (_e->button() == RightButton)
@@ -170,5 +173,5 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
170 */ 173 */
171 size_t startpos, startoffset, tgt, tgtoffset, pictgt; 174 size_t startpos, startoffset, tgt, tgtoffset, pictgt, tabtgt;
172 QImage* img; 175 QImage* img;
173 getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img); 176 getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img, tabtgt);
174 processmousewordevent(startpos, startoffset, _e, lineno); 177 processmousewordevent(startpos, startoffset, _e, lineno);
@@ -176,2 +179,3 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
176 else 179 else
180 {
177 processmousepositionevent(_e); 181 processmousepositionevent(_e);
@@ -179,2 +183,143 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
179} 183}
184 }
185 else
186 {
187 int ln = -1;
188 int mp;
189 int sectionsize = (buffdoc.endSection()-buffdoc.startSection());
190 switch (m_scrollpos)
191 {
192 case 1:
193 {
194 if (m_rotated)
195 {
196 if (_e->x() < m_bottommargin)
197 {
198 ln = height();
199 mp = _e->y();
200 }
201 }
202 else
203 {
204 if (_e->y() > height()-m_bottommargin)
205 {
206 ln = width();
207 mp = _e->x();
208 }
209 }
210 }
211 break;
212 case 2:
213 {
214 if (m_rotated)
215 {
216 if (_e->y() > height() - m_right_border)
217 {
218 ln = width();
219 mp = width()-_e->x();
220 }
221 }
222 else
223 {
224 if (_e->x() > width() - m_right_border)
225 {
226 ln = height();
227 mp = _e->y();
228 }
229 }
230 }
231 break;
232 case 3:
233 {
234 if (m_rotated)
235 {
236 if (_e->y() < m_left_border)
237 {
238 ln = width();
239 mp = width()-_e->x();
240 }
241 }
242 else
243 {
244 if (_e->x() < m_left_border)
245 {
246 ln = height();
247 mp = _e->y();
248 }
249 }
250 }
251 break;
252 case 0:
253 default:
254 ln = -1;
255 break;
256 }
257 if (ln >= 0)
258 {
259 int dp = (sectionsize*mp+ln/2)/ln + buffdoc.startSection();
260 int winsize = locnarray[numlines]-locnarray[0];
261 int slidersize = 10*(sectionsize+ln/2)/ln;
262 if (slidersize > winsize)
263 {
264 int mid = (locnarray[0] + locnarray[numlines])/2;
265 slidersize /= 2;
266 if (dp < mid-slidersize)
267 {
268 dopageup();
269 }
270 else if (dp > mid+slidersize)
271 {
272 dopagedn();
273 }
274 //if (mid-slidersize < dp && dp < mid+slidersize)
275 else
276 {
277 m_drageligible = true;
278 }
279 }
280 else
281 {
282 if (dp < locnarray[0])
283 {
284 dopageup();
285 }
286 else if (dp > locnarray[numlines])
287 {
288 dopagedn();
289 }
290 //if (locnarray[0] < dp && dp < locnarray[numlines])
291 else
292 {
293 m_drageligible = true;
294 }
295 }
296 qDebug("Drag eligible:%s", (m_drageligible) ? "true" : "false");
297 }
298 else
299 {
300 if (m_scrollpos == 1)
301 {
302 if (x < m_left_border)
303 {
304 lineUp();
305 }
306 if (y > ht - m_bottommargin)
307 {
308 lineDown();
309 }
310 }
311 else if (m_scrollpos != 0)
312 {
313 if (y < m_topmargin)
314 {
315 lineUp();
316 }
317 if (y > ht - m_bottommargin)
318 {
319 lineDown();
320 }
321 }
322 }
323 }
324}
180 325
@@ -297,3 +442,3 @@ void QTReader::goForward()
297 442
298linkType QTReader::getcurrentpos(int x, int y, int w, int h, int& lineno, size_t& start, size_t& offset, size_t& tgt, size_t& tgtoffset, size_t& pictgt, QImage*& img) 443linkType QTReader::getcurrentpos(int x, int y, int w, int h, int& lineno, size_t& start, size_t& offset, size_t& tgt, size_t& tgtoffset, size_t& pictgt, QImage*& img, size_t& tabtgt)
299{ 444{
@@ -342,3 +487,3 @@ linkType QTReader::getcurrentpos(int x, int y, int w, int h, int& lineno, size_t
342 } 487 }
343 return textarray[lineno]->getLinkType(offset, tgt, tgtoffset, pictgt, img); 488 return textarray[lineno]->getLinkType(offset, tgt, tgtoffset, pictgt, img, tabtgt);
344} 489}
@@ -356,2 +501,34 @@ void QTReader::suspend()
356 501
502void QTReader::setDoubleBuffer(bool _b)
503{
504 m_doubleBuffered = _b;
505 if (_b || m_rotated)
506 {
507 if (dbuff == NULL)
508 {
509 dbuff = new QPixmap();
510 dbp = new QPainter();
511 }
512 if (m_rotated)
513 {
514 dbuff->resize(height(), width());
515 }
516 else
517 {
518 dbuff->resize(width(), height());
519 }
520 m_outofdate = true;
521 }
522 else
523 {
524 if (dbuff != NULL)
525 {
526 delete dbuff;
527 delete dbp;
528 }
529 dbuff = NULL;
530 dbp = NULL;
531 }
532}
533
357void QTReader::setTwoTouch(bool _b) 534void QTReader::setTwoTouch(bool _b)
@@ -364,3 +541,2 @@ void QTReader::setContinuous(bool _b)
364{ 541{
365 buffdoc.unsuspend();
366 buffdoc.setContinuous(m_continuousDocument = _b); 542 buffdoc.setContinuous(m_continuousDocument = _b);
@@ -457,3 +633,3 @@ void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouse
457 { 633 {
458 qDebug("Selecteed:%s", (const char*)wrd); 634 qDebug("Selected:%s", (const char*)wrd);
459 if (m_twotouch) 635 if (m_twotouch)
@@ -470,5 +646,118 @@ void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouse
470 646
647#ifdef USETIMER
648void QTReader::actionDrag()
649{
650 if (m_drageligible)
651 {
652 int fivepages = 5*((2*width()+m_textsize/2)/m_textsize)*((height()+m_textsize/2)/m_textsize);
653 if (m_dragtarget > fivepages && locnarray[numlines] < m_dragtarget - fivepages)
654 {
655 int tgt = m_dragtarget - fivepages/2;
656 //qDebug("Jumping to %u (%u)", tgt, fivepages);
657 if (tgt < buffdoc.startSection())
658 {
659 tgt = buffdoc.startSection();
660 }
661 locate(tgt);
662 drawFonts();
663 }
664 else if (locnarray[0] > m_dragtarget+fivepages)
665 {
666 int tgt = m_dragtarget + fivepages/2;
667 //qDebug("Jumping to %u (%u)", tgt, fivepages);
668 if (tgt > buffdoc.endSection())
669 {
670 dopageup();
671 }
672 else
673 {
674 locate(tgt);
675 drawFonts();
676 }
677 }
678 else if (locnarray[numlines] <= m_dragtarget)
679 {
680 dopagedn();
681 }
682 else if (locnarray[0] > m_dragtarget)
683 {
684 dopageup();
685 }
686 }
687 else
688 {
689 m_dragtimer->stop();
690 }
691}
692#endif
693
694void QTReader::mouseMoveEvent( QMouseEvent* _e )
695{
696 if (m_drageligible)
697 {
698 int ht;
699 int mp;
700 int sectionsize = (buffdoc.endSection()-buffdoc.startSection());
701 //qDebug("Mouse moved to (%u, %u)", _e->x(), _e->y());
702 switch (m_scrollpos)
703 {
704 case 1:
705 {
706 if (m_rotated)
707 {
708 ht = height();
709 mp = _e->y();
710 }
711 else
712 {
713 ht = width();
714 mp = _e->x();
715 }
716 }
717 break;
718 case 2:
719 case 3:
720 {
721 if (m_rotated)
722 {
723 ht = width();
724 mp = width()-_e->x();
725 }
726 else
727 {
728 ht = height();
729 mp = _e->y();
730 }
731 }
732 break;
733 case 0:
734 default:
735 ht = -1;
736 break;
737 }
738 if (ht >= 0)
739 {
740#ifdef USETIMER
741 m_dragtarget = (sectionsize*mp+ht/2)/ht + buffdoc.startSection();
742 if (!m_dragtimer->isActive())
743 {
744 m_dragtimer->start(0, false);
745 }
746#else
747 int dp = (sectionsize*mp+ht/2)/ht + buffdoc.startSection();
748 locate(dp);
749#endif
750 }
751 }
752}
753
471void QTReader::mouseReleaseEvent( QMouseEvent* _e ) 754void QTReader::mouseReleaseEvent( QMouseEvent* _e )
472{ 755{
473 buffdoc.unsuspend(); 756 qDebug("Mouse released at (%u, %u)", _e->x(), _e->y());
757 if (m_drageligible)
758 {
759 m_drageligible = false;
760 }
761 else
762 {
474 int x, y, ht, wh; 763 int x, y, ht, wh;
@@ -493,2 +782,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
493 // qDebug("MouseRelease"); 782 // qDebug("MouseRelease");
783 /*
494 switch(m_scrollpos) 784 switch(m_scrollpos)
@@ -520,2 +810,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
520 } 810 }
811 */
521 if (textarray[0] != NULL) 812 if (textarray[0] != NULL)
@@ -532,3 +823,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
532 */ 823 */
533 size_t startpos, startoffset, tgt, tgtoffset, pictgt; 824 size_t startpos, startoffset, tgt, tgtoffset, pictgt, tabtgt;
534 QImage* img; 825 QImage* img;
@@ -541,3 +832,17 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
541 } 832 }
542 linkType glt = getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img); 833 linkType glt = getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img, tabtgt);
834 if (bNoInlineTables && ((glt & eTable) != 0))
835 {
836 size_t currentpos = locate();
837 QString tabtext = buffdoc.getTableAsHtml(tabtgt);
838 qDebug("TABLE:%u:%u:%s", currentpos, tabtgt, (const char*)tabtext);
839 QFont f(m_fontname, m_fontControl.currentsize());
840#ifdef USEQPE
841 CTableDialog td(f, tabtext, true, this);
842#else
843 CTableDialog td(f, tabtext, false, this);
844#endif
845 td.exec();
846 jumpto(currentpos);
847 }
543 if ((glt & eLink) != 0) 848 if ((glt & eLink) != 0)
@@ -581,3 +886,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
581 { 886 {
582 if (!buffdoc.getFile(href)) 887 if (!buffdoc.getFile(href, nm))
583 { 888 {
@@ -587,4 +892,8 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
587 { 892 {
893 qDebug("BEFORE:%u", pagelocate());
894 buffdoc.resetPos();
588 ResetScroll(); 895 ResetScroll();
589 fillbuffer(); 896 fillbuffer();
897 qDebug("AFTER:%u", pagelocate());
898 m_outofdate = true;
590 update(); 899 update();
@@ -597,3 +906,5 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
597 { 906 {
907 buffdoc.resetPos();
598 fillbuffer(); 908 fillbuffer();
909 m_outofdate = true;
599 update(); 910 update();
@@ -614,2 +925,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
614 fillbuffer(); 925 fillbuffer();
926 m_outofdate = true;
615 update(); 927 update();
@@ -635,3 +947,2 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
635 } 947 }
636 locate(pagelocate());
637 } 948 }
@@ -650,3 +961,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
650 { 961 {
651 locate(pagelocate()); 962 update();
652 } 963 }
@@ -671,2 +982,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
671} 982}
983}
672 984
@@ -674,3 +986,3 @@ void QTReader::focusInEvent(QFocusEvent* e)
674{ 986{
675 if (m_autoScroll) timer->start(real_delay(), false); 987 if (m_autoScroll && (m_scrolltype != 4)) timer->start(real_delay(), false);
676 update(); 988 update();
@@ -682,3 +994,10 @@ void QTReader::focusOutEvent(QFocusEvent* e)
682 { 994 {
995 if (m_scrolltype != 4)
996 {
683 timer->stop(); 997 timer->stop();
998 }
999 else
1000 {
1001 m_autoScroll = false;
1002 }
684 //m_scrolldy1 = m_scrolldy2 = 0; 1003 //m_scrolldy1 = m_scrolldy2 = 0;
@@ -719,3 +1038,2 @@ void QTReader::NavUp()
719{ 1038{
720 buffdoc.unsuspend();
721 if (buffdoc.hasnavigation()) 1039 if (buffdoc.hasnavigation())
@@ -739,3 +1057,2 @@ void QTReader::NavDown()
739{ 1057{
740 buffdoc.unsuspend();
741 if (buffdoc.hasnavigation()) 1058 if (buffdoc.hasnavigation())
@@ -764,4 +1081,3 @@ void QTReader::zoomin()
764 setfont(); 1081 setfont();
765 locate(pagelocate()); 1082 refresh();
766 repaint();
767 setautoscroll(sc); 1083 setautoscroll(sc);
@@ -777,4 +1093,3 @@ void QTReader::zoomout()
777 setfont(); 1093 setfont();
778 locate(pagelocate()); 1094 refresh();
779 repaint();
780 setautoscroll(sc); 1095 setautoscroll(sc);
@@ -811,3 +1126,2 @@ void QTReader::keyPressEvent(QKeyEvent* e)
811{ 1126{
812 buffdoc.unsuspend();
813 1127
@@ -908,2 +1222,3 @@ void QTReader::setautoscroll(bool _sc)
908{ 1222{
1223 m_outofdate = true;
909 if (_sc == m_autoScroll) return; 1224 if (_sc == m_autoScroll) return;
@@ -929,2 +1244,5 @@ void QTReader::setautoscroll(bool _sc)
929 if (reusebuffer == NULL || reusebuffer->eof()) return; 1244 if (reusebuffer == NULL || reusebuffer->eof()) return;
1245#ifndef __STATIC
1246 if ((m_scrolltype == 4) && !checkoutput()) return;
1247#endif
930 m_autoScroll = true; 1248 m_autoScroll = true;
@@ -949,3 +1267,2 @@ bool QTReader::getline(CDrawBuffer *buff)
949{ 1267{
950 buffdoc.unsuspend();
951 bool bRet; 1268 bool bRet;
@@ -1067,20 +1384,2 @@ void QTReader::doinplacescroll()
1067 { 1384 {
1068 /*
1069 if (m_rotated)
1070 {
1071 blitRot2(0,0,height(),width()-m_scrolldy,NULL);
1072 // blitRot2(0,0,0,height(),width()-m_scrolldy,NULL);
1073 }
1074 else
1075 {
1076 if (m_bgpm.isNull())
1077 {
1078 p.fillRect(0,m_scrolldy,width(),height()-m_scrolldy,m_bg);
1079 }
1080 else
1081 {
1082 bitBlt(this, 0, m_scrolldy, dbuff, 0, m_scrolldy, width(), height()-m_scrolldy);
1083 }
1084 }
1085 */
1086 m_scrolldy = m_topmargin; 1385 m_scrolldy = m_topmargin;
@@ -1101,3 +1400,2 @@ void QTReader::doinplacescroll()
1101#endif 1400#endif
1102 //((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
1103 emit SetScrollState(m_autoScroll); 1401 emit SetScrollState(m_autoScroll);
@@ -1496,6 +1794,17 @@ void QTReader::autoscroll()
1496{ 1794{
1497 drawBackground(); 1795 if (m_scrolltype == 4)
1796 {
1797 readAloud();
1798 }
1799 else
1800 {
1801 if (dbuff != NULL)
1802 {
1803 dbp->begin(dbuff);
1804 drawBackground(dbp);
1498 dbp->end(); 1805 dbp->end();
1806 }
1499 timer->start(real_delay(), false); 1807 timer->start(real_delay(), false);
1500} 1808}
1809}
1501 1810
@@ -1559,4 +1868,6 @@ void QTReader::redrawall()
1559 { 1868 {
1560#ifdef DOUBLEBUFFER 1869 if (dbuff != NULL)
1561 drawBackground(); 1870 {
1871 dbp->begin(dbuff);
1872 drawBackground(dbp);
1562 DrawStraight(dbp, height(), width()); 1873 DrawStraight(dbp, height(), width());
@@ -1568,8 +1879,10 @@ void QTReader::redrawall()
1568 bitBlt(this, 0,0,&rp,0,0,-1,-1); 1879 bitBlt(this, 0,0,&rp,0,0,-1,-1);
1569#else 1880 }
1881 else
1882 {
1883 qDebug("This shouldn't happen but it doesn't matter if it does (rotated == double buffered)");
1570 QPixmap dbuff(height(), width()); 1884 QPixmap dbuff(height(), width());
1571 QPainter dbp(&dbuff); 1885 QPainter dbp(&dbuff);
1572 // dbp.setBackgroundMode(OpaqueMode);
1573 dbp.fillRect(dbuff.rect(), m_bg);
1574 1886
1887 drawBackground(&dbp);
1575 DrawStraight(&dbp, height(), width()); 1888 DrawStraight(&dbp, height(), width());
@@ -1580,3 +1893,3 @@ void QTReader::redrawall()
1580 bitBlt(this, 0,0,&rp,0,0,-1,-1); 1893 bitBlt(this, 0,0,&rp,0,0,-1,-1);
1581#endif 1894 }
1582 } 1895 }
@@ -1584,4 +1897,6 @@ void QTReader::redrawall()
1584 { 1897 {
1585#ifdef DOUBLEBUFFER 1898 if (dbuff != NULL)
1586 drawBackground(); 1899 {
1900 dbp->begin(dbuff);
1901 drawBackground(dbp);
1587 DrawStraight(dbp, width(), height()); 1902 DrawStraight(dbp, width(), height());
@@ -1589,5 +1904,9 @@ void QTReader::redrawall()
1589 bitBlt(this, 0,0,dbuff,0,0,-1,-1); 1904 bitBlt(this, 0,0,dbuff,0,0,-1,-1);
1590#else 1905 }
1591 DrawStraight(p, width(), height()); 1906 else
1592#endif 1907 {
1908 QPainter p(this);
1909 drawBackground(&p);
1910 DrawStraight(&p, width(), height());
1911 }
1593 } 1912 }
@@ -1602,15 +1921,9 @@ void QTReader::drawFonts()
1602 //qDebug("How refreshing..."); 1921 //qDebug("How refreshing...");
1603 if (buffdoc.empty()) return; 1922 if (buffdoc.empty())
1604 setfont();
1605 //if (!m_autoScroll) m_scrolldy1 = 0;
1606#ifdef ROTATION_ENABLED
1607 if (m_lastwidth != ((m_rotated) ? height() : width()))
1608 { 1923 {
1609 m_scrolldy = m_topmargin; 1924 if (dbuff != NULL)
1610 // qDebug("Not Optimised %d", m_lastwidth); 1925 {
1611 m_lastwidth = ((m_rotated) ? height() : width()); 1926 dbp->begin(dbuff);
1612 m_lastheight = ((m_rotated) ? width() : height()); 1927 drawBackground(dbp);
1613 buffdoc.setwidth(m_lastwidth-(m_left_border+m_right_border)); 1928 dbp->end();
1614 locate(pagelocate());
1615 // qDebug("Not Optimised %d", m_lastwidth);
1616 } 1929 }
@@ -1618,45 +1931,32 @@ void QTReader::drawFonts()
1618 { 1931 {
1619 int newht = ((m_rotated) ? width() : height()); 1932 QPainter p(this);
1620 if (m_lastheight > newht) 1933 drawBackground(&p);
1621 {
1622 // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht);
1623 m_scrolldy = m_topmargin;
1624 int ypos = m_scrolldy1+m_topmargin;
1625 for (int i = 0; i < numlines; i++)
1626 {
1627 if ((ypos += textarray[i]->lineSpacing()) > newht - hmargin)
1628 {
1629 numlines = i;
1630 jumpto(mylastpos = locnarray[i+1]);
1631 break;
1632 }
1633 } 1934 }
1634 // qDebug("Optimised < %d", numlines); 1935 return;
1635 m_lastheight = newht;
1636 } 1936 }
1637 else if (m_lastheight < newht) 1937 setfont();
1938 //if (!m_autoScroll) m_scrolldy1 = 0;
1939 if (dbuff != NULL && (dbuff->width() != width() || dbuff->height() != height()))
1638 { 1940 {
1639 m_scrolldy = m_topmargin; 1941 qDebug("Oh no! A resize event was missed...");
1640 // qDebug("Optimised > %d", numlines); 1942 if (m_rotated)
1641 int ypos = m_scrolldy1+m_topmargin;
1642 for (int i = 0; i <= numlines; i++)
1643 { 1943 {
1644 ypos += textarray[i]->lineSpacing(); 1944 dbuff->resize(height(), width());
1645 }
1646 fillbuffer(numlines+1, ypos, newht);
1647 // qDebug("Optimised > %d", numlines);
1648 } 1945 }
1649 if (numlines > 0) 1946 else
1650 { 1947 {
1651 redrawall(); 1948 dbuff->resize(width(), height());
1652 } 1949 }
1950 m_lastwidth = 0;
1653 } 1951 }
1654#else 1952 if (m_lastwidth != ((m_rotated) ? height() : width()))
1655 if (m_lastwidth != width())
1656 { 1953 {
1954 m_scrolldy = m_topmargin;
1657 // qDebug("Not Optimised %d", m_lastwidth); 1955 // qDebug("Not Optimised %d", m_lastwidth);
1658 m_lastwidth = width(); 1956 m_lastwidth = ((m_rotated) ? height() : width());
1659 m_lastheight = height(); 1957 m_lastheight = ((m_rotated) ? width() : height());
1660 buffdoc.setwidth(m_lastwidth-(m_left_border+m_right_border)); 1958 buffdoc.setwidth(m_lastwidth-(m_left_border+m_right_border));
1661 locate(pagelocate()); 1959 buffdoc.locate(pagelocate());
1960 fillbuffer();
1961 redrawall();
1662 // qDebug("Not Optimised %d", m_lastwidth); 1962 // qDebug("Not Optimised %d", m_lastwidth);
@@ -1665,3 +1965,3 @@ void QTReader::drawFonts()
1665 { 1965 {
1666 int newht = height(); 1966 int newht = ((m_rotated) ? width() : height());
1667 if (m_lastheight > newht) 1967 if (m_lastheight > newht)
@@ -1669,3 +1969,4 @@ void QTReader::drawFonts()
1669 // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht); 1969 // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht);
1670 int ypos = m_topmargin; 1970 m_scrolldy = m_topmargin;
1971 int ypos = m_scrolldy1+m_topmargin;
1671 for (int i = 0; i < numlines; i++) 1972 for (int i = 0; i < numlines; i++)
@@ -1684,4 +1985,5 @@ void QTReader::drawFonts()
1684 { 1985 {
1986 m_scrolldy = m_topmargin;
1685 // qDebug("Optimised > %d", numlines); 1987 // qDebug("Optimised > %d", numlines);
1686 int ypos = m_topmargin; 1988 int ypos = m_scrolldy1+m_topmargin;
1687 for (int i = 0; i <= numlines; i++) 1989 for (int i = 0; i <= numlines; i++)
@@ -1695,17 +1997,5 @@ void QTReader::drawFonts()
1695 { 1997 {
1696 int ypos = textarray[0]->ascent()+m_topmargin; 1998 redrawall();
1697 textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_left_border, m_right_border, m_bg, height()-m_topmargin-m_bottommargin);
1698 // int last = (m_showlast) ? numlines : numlines-1;
1699 // for (int i = 1; i <= last; i++)
1700 for (int i = 1; i < numlines; i++)
1701 {
1702 // ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2;
1703 ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+
1704 (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2;
1705 textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_left_border, m_right_border, m_bg, height()-m_topmargin-m_bottommargin);
1706 }
1707// mylastpos = locate();
1708 } 1999 }
1709 } 2000 }
1710#endif
1711 emitRedraw(); 2001 emitRedraw();
@@ -1930,3 +2220,2 @@ void QTReader::init()
1930{ 2220{
1931 buffdoc.unsuspend();
1932 setBackgroundColor( m_bg ); 2221 setBackgroundColor( m_bg );
@@ -1937,2 +2226,6 @@ void QTReader::init()
1937 connect(timer, SIGNAL(timeout()), this, SLOT(doscroll())); 2226 connect(timer, SIGNAL(timeout()), this, SLOT(doscroll()));
2227#ifdef USETIMER
2228 m_dragtimer = new QTimer(this);
2229 connect(m_dragtimer, SIGNAL(timeout()), this, SLOT(actionDrag()));
2230#endif
1938 // QMessageBox::information(this, "init", m_lastfile, 1); 2231 // QMessageBox::information(this, "init", m_lastfile, 1);
@@ -1946,6 +2239,11 @@ QTReader::~QTReader()
1946{ 2239{
1947#ifdef DOUBLEBUFFER 2240 if (m_output != NULL)
2241 {
2242 delete m_output;
2243 }
2244 if (dbuff != NULL)
2245 {
1948 delete dbuff; 2246 delete dbuff;
1949 delete dbp; 2247 delete dbp;
1950#endif 2248 }
1951#ifdef USEQPE 2249#ifdef USEQPE
@@ -1984,3 +2282,39 @@ void QTReader::printIt()
1984 2282
1985void QTReader::paintEvent( QPaintEvent * ) 2283void QTReader::paintEvent( QPaintEvent * p )
2284{
2285 if ((dbuff != NULL) && !m_outofdate)
2286 {
2287 if (m_rotated)
2288 {
2289 if ((p->rect().width() != width()) || (p->rect().height() != height()))
2290 {
2291 qDebug("Partial paint");
2292 QRect r;
2293 r.setTop(width()-p->rect().right()-1);
2294 r.setLeft(p->rect().top());
2295 r.setHeight(p->rect().width());
2296 r.setWidth(p->rect().height());
2297 QPixmap p1(r.width(), r.height());
2298 bitBlt(&p1, QPoint(0, 0), dbuff, r);
2299 QWMatrix m;
2300 m.rotate(90);
2301 QPixmap p2 = p1.xForm(m);
2302 bitBlt(this, p->rect().left(), p->rect().top(), &p2, 0, 0, -1, -1);
2303 }
2304 else
2305 {
2306 qDebug("Full paint");
2307 QWMatrix m;
2308 m.rotate(90);
2309 QPixmap rp = dbuff->xForm(m);
2310 bitBlt(this, 0,0,&rp,0,0,-1,-1);
2311 }
2312 }
2313 else
2314 {
2315 //bitBlt(this, 0,0,dbuff,0,0,-1,-1);
2316 bitBlt(this,p->rect().topLeft(),dbuff,p->rect());
2317 }
2318 }
2319 else
1986{ 2320{
@@ -1988,2 +2322,4 @@ void QTReader::paintEvent( QPaintEvent * )
1988} 2322}
2323 m_outofdate = false;
2324}
1989 2325
@@ -2018,5 +2354,14 @@ int main( int argc, tchar **argv )
2018 2354
2355bool QTReader::locate(unsigned long n)
2356{
2357 m_outofdate = true;
2358 m_lastwidth = 0;
2359 locnarray[0] = n;
2360 ResetScroll();
2361 update();
2362 return true;
2363}
2364/*
2019bool QTReader::locate(unsigned long n) { 2365bool QTReader::locate(unsigned long n) {
2020 //printf("Locate\n"); 2366 //printf("Locate\n");
2021 buffdoc.unsuspend();
2022 buffdoc.locate(n); 2367 buffdoc.locate(n);
@@ -2025,2 +2370,3 @@ bool QTReader::locate(unsigned long n) {
2025 fillbuffer(); 2370 fillbuffer();
2371 m_outofdate = true;
2026// // qDebug("&Buffer filled"); 2372// // qDebug("&Buffer filled");
@@ -2031,3 +2377,3 @@ bool QTReader::locate(unsigned long n) {
2031} 2377}
2032 2378*/
2033unsigned int QTReader::screenlines() 2379unsigned int QTReader::screenlines()
@@ -2041,3 +2387,2 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht)
2041{ 2387{
2042 buffdoc.unsuspend();
2043 int hmargin = ((m_scrollpos == 1) ? _SBARHEIGHT : 0); 2388 int hmargin = ((m_scrollpos == 1) ? _SBARHEIGHT : 0);
@@ -2065,2 +2410,8 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht)
2065 ypos += textarray[numlines]->lineSpacing(); 2410 ypos += textarray[numlines]->lineSpacing();
2411 /*
2412 QString tmp = toQString(textarray[numlines]->data());
2413 printf("[%u, %u, %u](%s):%s\n", lastypos, m_lastheight-hmargin, ypos,
2414 ((textarray[numlines]->showPartial()) ? "TRUE" : "FALSE"),
2415 (const char*)tmp);
2416 */
2066 numlines++; 2417 numlines++;
@@ -2071,3 +2422,6 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht)
2071 qDebug("FALSE"); 2422 qDebug("FALSE");
2423 if (oldpagepos < buffdoc.endSection())
2072 locate(oldpagepos); 2424 locate(oldpagepos);
2425 else
2426 dopageup(buffdoc.endSection());
2073 return false; 2427 return false;
@@ -2103,3 +2457,2 @@ void QTReader::dopagedn()
2103// qDebug("HEIGHT(2):%d", m_lastheight); 2457// qDebug("HEIGHT(2):%d", m_lastheight);
2104 buffdoc.unsuspend();
2105 ResetScroll(); 2458 ResetScroll();
@@ -2152,4 +2505,6 @@ bool QTReader::synch(size_t start, size_t end)
2152 if (ch == 10) return true; 2505 if (ch == 10) return true;
2153 if (ch == UEOF) return false; 2506 if ((ch == UEOF) || (ch == 6))
2154 if (ch == 6) return false; 2507 {
2508 return false;
2509 }
2155 } 2510 }
@@ -2160,3 +2515,2 @@ void QTReader::dopageup(unsigned int target)
2160{ 2515{
2161 buffdoc.unsuspend();
2162 ResetScroll(); 2516 ResetScroll();
@@ -2164,4 +2518,4 @@ void QTReader::dopageup(unsigned int target)
2164 CBufferFace<size_t> loc; 2518 CBufferFace<size_t> loc;
2165
2166 size_t delta, guess = 2*(locate()-pagelocate()), lastdelta = 0; 2519 size_t delta, guess = 2*(locate()-pagelocate()), lastdelta = 0;
2520 qDebug("dopageup:: locate():%u pagelocate():%u guess:%u", locate(), pagelocate(), guess);
2167 bool ch = true; 2521 bool ch = true;
@@ -2182,2 +2536,3 @@ void QTReader::dopageup(unsigned int target)
2182 delta = 0; // 0 is a flag to say don't guess any more 2536 delta = 0; // 0 is a flag to say don't guess any more
2537 qDebug("Jumping to startsection:%d", buffdoc.startSection());
2183 jumpto(buffdoc.startSection()); 2538 jumpto(buffdoc.startSection());
@@ -2295,4 +2650,5 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn)
2295 unsigned int lcn = _lcn; 2650 unsigned int lcn = _lcn;
2651 bDoUpdates = false;
2296 ResetScroll(); 2652 ResetScroll();
2297 if (m_lastfile == newfile) 2653 if (m_lastfile == newfile && lcn == 0)
2298 { 2654 {
@@ -2318,4 +2674,2 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn)
2318 qDebug("buffdoc.openfile done"); 2674 qDebug("buffdoc.openfile done");
2319 locate(lcn);
2320 qDebug("buffdoc.locate done");
2321 } 2675 }
@@ -2323,2 +2677,4 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn)
2323 qDebug("Updated"); 2677 qDebug("Updated");
2678 bDoUpdates = true;
2679 locate(lcn);
2324 return bRC; 2680 return bRC;
@@ -2360,2 +2716,3 @@ void QTReader::lineDown()
2360 mylastpos = locate(); 2716 mylastpos = locate();
2717 m_outofdate = true;
2361 update(); 2718 update();
@@ -2574,5 +2931,9 @@ MarkupType QTReader::PreferredMarkup()
2574} 2931}
2575#ifdef DOUBLEBUFFER 2932
2576void QTReader::resizeEvent( QResizeEvent * p ) 2933void QTReader::resizeEvent( QResizeEvent * p )
2577{ 2934{
2935 qDebug("Resizing");
2936 m_outofdate = true;
2937 if (dbuff != NULL)
2938 {
2578 if (m_rotated) 2939 if (m_rotated)
@@ -2585,2 +2946,3 @@ void QTReader::resizeEvent( QResizeEvent * p )
2585 } 2946 }
2947 }
2586 m_bgIsScaled = false; 2948 m_bgIsScaled = false;
@@ -2607,10 +2969,10 @@ void QTReader::resizeEvent( QResizeEvent * p )
2607 m_right_border = (w*m_absright_border+500)/1000; 2969 m_right_border = (w*m_absright_border+500)/1000;
2608 2970 }
2609 qDebug("Top margin:%u", m_topmargin ); 2971 if (dbuff != NULL && buffdoc.empty())
2610 qDebug("Bottom margin:%u", m_bottommargin ); 2972 {
2611 qDebug("Left margin:%u", m_left_border ); 2973 dbp->begin(dbuff);
2612 qDebug("Right margin:%u", m_right_border ); 2974 drawBackground(dbp);
2975 dbp->end();
2613 } 2976 }
2614} 2977}
2615#endif
2616 2978
@@ -2618,14 +2980,8 @@ void QTReader::setrotated(bool sfs)
2618{ 2980{
2981 qDebug("Rotating");
2619 m_rotated = sfs; 2982 m_rotated = sfs;
2620#ifdef DOUBLEBUFFER 2983 setDoubleBuffer(m_doubleBuffered);
2621 if (m_rotated)
2622 {
2623 dbuff->resize(height(), width());
2624 }
2625 else
2626 {
2627 dbuff->resize(width(), height());
2628 }
2629 m_bgIsScaled = false; 2984 m_bgIsScaled = false;
2630#endif 2985 m_outofdate = true;
2986 /*
2631 int h, w; 2987 int h, w;
@@ -2650,13 +3006,27 @@ void QTReader::setrotated(bool sfs)
2650 qDebug("Right margin:%u", m_right_border ); 3006 qDebug("Right margin:%u", m_right_border );
3007 */
2651} 3008}
2652 3009
2653void QTReader::drawBackground() 3010void QTReader::drawBackground(QPainter *p)
2654{ 3011{
2655 dbp->begin(dbuff); 3012 // p->setBackgroundMode(OpaqueMode);
2656 // dbp->setBackgroundMode(OpaqueMode); 3013 p->setBackgroundColor(m_bg);
2657 dbp->setBackgroundColor(m_bg); 3014 if (dbuff != NULL)
2658 dbp->eraseRect(dbuff->rect()); 3015 {
3016 p->eraseRect(dbuff->rect());
3017 }
3018 else
3019 {
3020 if (m_rotated)
3021 {
3022 p->eraseRect(0,0,height(),width());
3023 }
3024 else
3025 {
3026 p->eraseRect(rect());
3027 }
3028 }
2659 if (!m_bgpm.isNull()) 3029 if (!m_bgpm.isNull())
2660 { 3030 {
2661 // dbp->setBackgroundMode(TransparentMode); 3031 // p->setBackgroundMode(TransparentMode);
2662 switch (m_bgtype) 3032 switch (m_bgtype)
@@ -2665,5 +3035,12 @@ void QTReader::drawBackground()
2665 { 3035 {
3036 if (dbuff == NULL)
3037 {
3038 p->drawPixmap(width(),height(),m_bgpm);
3039 }
3040 else
3041 {
2666 int w = (dbuff->rect().width()-m_bgpm.width())/2; 3042 int w = (dbuff->rect().width()-m_bgpm.width())/2;
2667 int h = (dbuff->rect().height()-m_bgpm.height())/2; 3043 int h = (dbuff->rect().height()-m_bgpm.height())/2;
2668 dbp->drawPixmap(w,h,m_bgpm); 3044 p->drawPixmap(w,h,m_bgpm);
3045 }
2669 } 3046 }
@@ -2672,12 +3049,10 @@ void QTReader::drawBackground()
2672 { 3049 {
2673 dbp->drawTiledPixmap(0,0,dbuff->rect().width(),dbuff->rect().height(),m_bgpm); 3050 if (dbuff == NULL)
2674 /*
2675 for (int h = 0; h < dbuff->rect().height(); h += m_bgpm.height())
2676 {
2677 for (int w = 0; w < dbuff->rect().width(); w += m_bgpm.width())
2678 { 3051 {
2679 dbp->drawPixmap(w,h,m_bgpm); 3052 p->drawTiledPixmap(0,0,width(),height(),m_bgpm);
2680 } 3053 }
3054 else
3055 {
3056 p->drawTiledPixmap(0,0,dbuff->rect().width(),dbuff->rect().height(),m_bgpm);
2681 } 3057 }
2682 */
2683 } 3058 }
@@ -2690,5 +3065,12 @@ void QTReader::drawBackground()
2690 QImage im = m_bgpm.convertToImage(); 3065 QImage im = m_bgpm.convertToImage();
3066 if (dbuff == NULL)
3067 {
3068 m_bgpm.convertFromImage(im.smoothScale(width(),height()));
3069 }
3070 else
3071 {
2691 m_bgpm.convertFromImage(im.smoothScale(dbuff->rect().width(), dbuff->rect().height())); 3072 m_bgpm.convertFromImage(im.smoothScale(dbuff->rect().width(), dbuff->rect().height()));
2692 } 3073 }
2693 dbp->drawPixmap(0,0,m_bgpm); 3074 }
3075 p->drawPixmap(0,0,m_bgpm);
2694 } 3076 }
@@ -2698,3 +3080,3 @@ void QTReader::drawBackground()
2698 } 3080 }
2699 // dbp->setBackgroundMode(OpaqueMode); 3081 // p->setBackgroundMode(OpaqueMode);
2700 } 3082 }
@@ -2761,3 +3143,8 @@ QString QTReader::about()
2761{ 3143{
2762 return QString("QTReader widget (c) Tim Wentford\n")+buffdoc.about() + "\nMini-scrollbar by Markus Gritsch\nNavigation History fixes by Frantisek Dufka"; 3144 QString ab = QString("QTReader widget (c) Tim Wentford\n")+buffdoc.about() + "\nMini-scrollbar by Markus Gritsch\nNavigation History fixes by Frantisek Dufka";
3145 if (m_output != NULL)
3146 {
3147 ab += QString("\n") + m_output->about();
3148 }
3149 return ab;
2763} 3150}
@@ -2899,3 +3286,3 @@ void QTReader::gotoLink()
2899 { 3286 {
2900 if (!buffdoc.getFile(href)) 3287 if (!buffdoc.getFile(href, nm))
2901 { 3288 {
@@ -2907,2 +3294,3 @@ void QTReader::gotoLink()
2907 fillbuffer(); 3294 fillbuffer();
3295 m_outofdate = true;
2908 update(); 3296 update();
@@ -2915,3 +3303,5 @@ void QTReader::gotoLink()
2915 { 3303 {
3304 buffdoc.resetPos();
2916 fillbuffer(); 3305 fillbuffer();
3306 m_outofdate = true;
2917 update(); 3307 update();
@@ -2932,2 +3322,3 @@ void QTReader::gotoLink()
2932 fillbuffer(); 3322 fillbuffer();
3323 m_outofdate = true;
2933 update(); 3324 update();
@@ -2951,5 +3342,5 @@ void QTReader::gotoLink()
2951 emit OnURLSelected(href, tgt); 3342 emit OnURLSelected(href, tgt);
3343 refresh();
2952 } 3344 }
2953 } 3345 }
2954 locate(pagelocate());
2955 } 3346 }
@@ -2962,2 +3353,3 @@ void QTReader::refresh(bool full)
2962{ 3353{
3354 qDebug("Refreshing");
2963 int h, w; 3355 int h, w;
@@ -2983,3 +3375,118 @@ void QTReader::refresh(bool full)
2983 if (full && m_highlightfilter) m_highlightfilter->refresh(pagelocate()); 3375 if (full && m_highlightfilter) m_highlightfilter->refresh(pagelocate());
3376 m_outofdate = true;
2984 locate(pagelocate()); 3377 locate(pagelocate());
2985} 3378}
3379
3380#include "striphtml.h"
3381
3382CFilterChain* QTReader::getfilter()
3383{
3384 CFilterChain * filt = new CFilterChain(getencoding());
3385 if (bstripcr) filt->addfilter(new stripcr);
3386
3387 if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt);
3388 if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter);
3389 // if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml(m_lastfile));
3390
3391#ifdef __STATIC
3392 if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml(m_lastfile));
3393 if (bautofmt && (PreferredMarkup() == cCHM))
3394 {
3395 striphtml* f = new striphtml(m_lastfile);
3396 f->setchm(true);
3397 filt->addfilter(f);
3398 }
3399#else
3400 if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new ExternFilter("HTMLfilter", m_lastfile));
3401 if (bautofmt && (PreferredMarkup() == cCHM))
3402 {
3403 ExternFilter* f = new ExternFilter("HTMLfilter",m_lastfile);
3404 ((striphtml*)f->filter())->setchm(true);
3405 filt->addfilter(f);
3406 }
3407#endif
3408 m_highlightfilter = new HighlightFilter(this);
3409 filt->addfilter(m_highlightfilter);
3410
3411 if (bdehyphen) filt->addfilter(new dehyphen);
3412 if (bunindent) filt->addfilter(new unindent);
3413 if (brepara) filt->addfilter(new repara(m_reparastring));
3414 if (bonespace) filt->addfilter(new OnePara);
3415 if (bindenter) filt->addfilter(new indenter(bindenter));
3416 if (bdblspce) filt->addfilter(new dblspce);
3417 if (bdepluck) filt->addfilter(new DePluck(pluckernextpart));
3418 if (bdejpluck) filt->addfilter(new DePluck(jplucknextpart));
3419 if (brepalm) filt->addfilter(new repalm);
3420 if (bunderlineLink) filt->addfilter(new underlineLink);
3421 if (bkern) filt->addfilter(new kern);
3422 if (bremap) filt->addfilter(new remap);
3423 if (bmakebold) filt->addfilter(new embolden);
3424 if (bfulljust) filt->addfilter(new FullJust);
3425 int r,g,b;
3426 m_default_bg.rgb(&r, &g, &b);
3427 if (r != 255 || g != 255 || b != 255)
3428 filt->addfilter(new setbg(r,g,b));
3429 m_default_fg.rgb(&r, &g, &b);
3430 if (r != 0 || g != 0 || b != 0)
3431 filt->addfilter(new setfg(r,g,b));
3432 // if (bNegative) filt->addfilter(new makeNegative);
3433 if (bInverse) filt->addfilter(new makeInverse);
3434 if (bNoInlineTables) filt->addfilter(new tableLink);
3435 return filt;
3436}
3437
3438void QTReader::readAloud()
3439{
3440#ifdef __STATIC
3441 return;
3442#else
3443 CBuffer para;
3444 jumpto(pagelocate());
3445 while (m_autoScroll && (buffdoc.getpara(para) != -1))
3446 {
3447 if (para.length() > 0)
3448 {
3449 unsigned long lastpos = buffdoc.explocate();
3450 while (lastpos > mylastpos)
3451 {
3452 dopagedn();
3453 qApp->processEvents();
3454 }
3455 jumpto(lastpos);
3456 QString txt = toQString(para.data());
3457
3458 doOutput(txt);
3459 }
3460 qApp->processEvents();
3461 }
3462#endif
3463}
3464
3465bool QTReader::doOutput(const QString& wrd)
3466{
3467 if (m_output != NULL)
3468 {
3469 m_output->output(wrd);
3470 return true;
3471 }
3472 else
3473 {
3474 return false;
3475 }
3476}
3477
3478bool QTReader::checkoutput()
3479{
3480 if (m_output == NULL)
3481 {
3482 m_output = new outputcodec(m_outputName);
3483 if (reinterpret_cast<outputcodec*>(m_output)->getStatus() != 0)
3484 {
3485 delete m_output;
3486 m_output = NULL;
3487 QMessageBox::warning(this, PROGNAME, QString("Couldn't find output codec\n")+m_outputName);
3488 return false;
3489 }
3490 }
3491 return true;
3492}