summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/QTReader.cpp
Side-by-side diff
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;
#include <qdir.h>
+#include "TableDialog.h"
+#include "outputcodec.h"
+/*
#ifdef _UNICODE
@@ -40,2 +43,3 @@ const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 };
#endif
+*/
//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',' ','>'
-
QTReader::QTReader( QWidget *parent, const char *name, WFlags f) :
- QWidget(parent, name, f),
+ QWidget(parent, name, f | WRepaintNoErase | WResizeNoErase),
+ m_outofdate(true),
m_default_fg(0,0,0),
@@ -91,12 +95,8 @@ QTReader::QTReader( QWidget *parent, const char *name, WFlags f) :
{
+ m_output = NULL;
m_overlap = 1;
setKeyCompression ( true );
-#ifdef DOUBLEBUFFER
- dbuff = new QPixmap();
- dbp = new QPainter();
- // if (painter->isActive()) painter->end();
- // painter->begin(frame);
-#endif
-// init();
+ dbuff = NULL;
+ dbp = NULL;
}
@@ -119,3 +119,3 @@ QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *nam
init();
-// // qDebug("Load_file(1)");
+// // qDeb2ug("Load_file(1)");
load_file((const tchar*)filename);
@@ -140,3 +140,4 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
{
- buffdoc.unsuspend();
+ m_drageligible = false;
+ qDebug("Mouse pressed at (%u, %u)", _e->x(), _e->y());
int x, y, ht, wh;
@@ -156,2 +157,4 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
}
+ if (x >= m_left_border && x <= wh - m_right_border && y >= m_topmargin && y <= ht-m_bottommargin)
+ {
if (_e->button() == RightButton)
@@ -170,5 +173,5 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
*/
- size_t startpos, startoffset, tgt, tgtoffset, pictgt;
+ size_t startpos, startoffset, tgt, tgtoffset, pictgt, tabtgt;
QImage* img;
- getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img);
+ getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img, tabtgt);
processmousewordevent(startpos, startoffset, _e, lineno);
@@ -176,2 +179,3 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
else
+ {
processmousepositionevent(_e);
@@ -179,2 +183,143 @@ void QTReader::mousePressEvent( QMouseEvent* _e )
}
+ }
+ else
+ {
+ int ln = -1;
+ int mp;
+ int sectionsize = (buffdoc.endSection()-buffdoc.startSection());
+ switch (m_scrollpos)
+ {
+ case 1:
+ {
+ if (m_rotated)
+ {
+ if (_e->x() < m_bottommargin)
+ {
+ ln = height();
+ mp = _e->y();
+ }
+ }
+ else
+ {
+ if (_e->y() > height()-m_bottommargin)
+ {
+ ln = width();
+ mp = _e->x();
+ }
+ }
+ }
+ break;
+ case 2:
+ {
+ if (m_rotated)
+ {
+ if (_e->y() > height() - m_right_border)
+ {
+ ln = width();
+ mp = width()-_e->x();
+ }
+ }
+ else
+ {
+ if (_e->x() > width() - m_right_border)
+ {
+ ln = height();
+ mp = _e->y();
+ }
+ }
+ }
+ break;
+ case 3:
+ {
+ if (m_rotated)
+ {
+ if (_e->y() < m_left_border)
+ {
+ ln = width();
+ mp = width()-_e->x();
+ }
+ }
+ else
+ {
+ if (_e->x() < m_left_border)
+ {
+ ln = height();
+ mp = _e->y();
+ }
+ }
+ }
+ break;
+ case 0:
+ default:
+ ln = -1;
+ break;
+ }
+ if (ln >= 0)
+ {
+ int dp = (sectionsize*mp+ln/2)/ln + buffdoc.startSection();
+ int winsize = locnarray[numlines]-locnarray[0];
+ int slidersize = 10*(sectionsize+ln/2)/ln;
+ if (slidersize > winsize)
+ {
+ int mid = (locnarray[0] + locnarray[numlines])/2;
+ slidersize /= 2;
+ if (dp < mid-slidersize)
+ {
+ dopageup();
+ }
+ else if (dp > mid+slidersize)
+ {
+ dopagedn();
+ }
+ //if (mid-slidersize < dp && dp < mid+slidersize)
+ else
+ {
+ m_drageligible = true;
+ }
+ }
+ else
+ {
+ if (dp < locnarray[0])
+ {
+ dopageup();
+ }
+ else if (dp > locnarray[numlines])
+ {
+ dopagedn();
+ }
+ //if (locnarray[0] < dp && dp < locnarray[numlines])
+ else
+ {
+ m_drageligible = true;
+ }
+ }
+ qDebug("Drag eligible:%s", (m_drageligible) ? "true" : "false");
+ }
+ else
+ {
+ if (m_scrollpos == 1)
+ {
+ if (x < m_left_border)
+ {
+ lineUp();
+ }
+ if (y > ht - m_bottommargin)
+ {
+ lineDown();
+ }
+ }
+ else if (m_scrollpos != 0)
+ {
+ if (y < m_topmargin)
+ {
+ lineUp();
+ }
+ if (y > ht - m_bottommargin)
+ {
+ lineDown();
+ }
+ }
+ }
+ }
+}
@@ -297,3 +442,3 @@ void QTReader::goForward()
-linkType 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)
+linkType 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)
{
@@ -342,3 +487,3 @@ linkType QTReader::getcurrentpos(int x, int y, int w, int h, int& lineno, size_t
}
- return textarray[lineno]->getLinkType(offset, tgt, tgtoffset, pictgt, img);
+ return textarray[lineno]->getLinkType(offset, tgt, tgtoffset, pictgt, img, tabtgt);
}
@@ -356,2 +501,34 @@ void QTReader::suspend()
+void QTReader::setDoubleBuffer(bool _b)
+{
+ m_doubleBuffered = _b;
+ if (_b || m_rotated)
+ {
+ if (dbuff == NULL)
+ {
+ dbuff = new QPixmap();
+ dbp = new QPainter();
+ }
+ if (m_rotated)
+ {
+ dbuff->resize(height(), width());
+ }
+ else
+ {
+ dbuff->resize(width(), height());
+ }
+ m_outofdate = true;
+ }
+ else
+ {
+ if (dbuff != NULL)
+ {
+ delete dbuff;
+ delete dbp;
+ }
+ dbuff = NULL;
+ dbp = NULL;
+ }
+}
+
void QTReader::setTwoTouch(bool _b)
@@ -364,3 +541,2 @@ void QTReader::setContinuous(bool _b)
{
- buffdoc.unsuspend();
buffdoc.setContinuous(m_continuousDocument = _b);
@@ -457,3 +633,3 @@ void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouse
{
- qDebug("Selecteed:%s", (const char*)wrd);
+ qDebug("Selected:%s", (const char*)wrd);
if (m_twotouch)
@@ -470,5 +646,118 @@ void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouse
+#ifdef USETIMER
+void QTReader::actionDrag()
+{
+ if (m_drageligible)
+ {
+ int fivepages = 5*((2*width()+m_textsize/2)/m_textsize)*((height()+m_textsize/2)/m_textsize);
+ if (m_dragtarget > fivepages && locnarray[numlines] < m_dragtarget - fivepages)
+ {
+ int tgt = m_dragtarget - fivepages/2;
+ //qDebug("Jumping to %u (%u)", tgt, fivepages);
+ if (tgt < buffdoc.startSection())
+ {
+ tgt = buffdoc.startSection();
+ }
+ locate(tgt);
+ drawFonts();
+ }
+ else if (locnarray[0] > m_dragtarget+fivepages)
+ {
+ int tgt = m_dragtarget + fivepages/2;
+ //qDebug("Jumping to %u (%u)", tgt, fivepages);
+ if (tgt > buffdoc.endSection())
+ {
+ dopageup();
+ }
+ else
+ {
+ locate(tgt);
+ drawFonts();
+ }
+ }
+ else if (locnarray[numlines] <= m_dragtarget)
+ {
+ dopagedn();
+ }
+ else if (locnarray[0] > m_dragtarget)
+ {
+ dopageup();
+ }
+ }
+ else
+ {
+ m_dragtimer->stop();
+ }
+}
+#endif
+
+void QTReader::mouseMoveEvent( QMouseEvent* _e )
+{
+ if (m_drageligible)
+ {
+ int ht;
+ int mp;
+ int sectionsize = (buffdoc.endSection()-buffdoc.startSection());
+ //qDebug("Mouse moved to (%u, %u)", _e->x(), _e->y());
+ switch (m_scrollpos)
+ {
+ case 1:
+ {
+ if (m_rotated)
+ {
+ ht = height();
+ mp = _e->y();
+ }
+ else
+ {
+ ht = width();
+ mp = _e->x();
+ }
+ }
+ break;
+ case 2:
+ case 3:
+ {
+ if (m_rotated)
+ {
+ ht = width();
+ mp = width()-_e->x();
+ }
+ else
+ {
+ ht = height();
+ mp = _e->y();
+ }
+ }
+ break;
+ case 0:
+ default:
+ ht = -1;
+ break;
+ }
+ if (ht >= 0)
+ {
+#ifdef USETIMER
+ m_dragtarget = (sectionsize*mp+ht/2)/ht + buffdoc.startSection();
+ if (!m_dragtimer->isActive())
+ {
+ m_dragtimer->start(0, false);
+ }
+#else
+ int dp = (sectionsize*mp+ht/2)/ht + buffdoc.startSection();
+ locate(dp);
+#endif
+ }
+ }
+}
+
void QTReader::mouseReleaseEvent( QMouseEvent* _e )
{
- buffdoc.unsuspend();
+ qDebug("Mouse released at (%u, %u)", _e->x(), _e->y());
+ if (m_drageligible)
+ {
+ m_drageligible = false;
+ }
+ else
+ {
int x, y, ht, wh;
@@ -493,2 +782,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
// qDebug("MouseRelease");
+ /*
switch(m_scrollpos)
@@ -520,2 +810,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
}
+ */
if (textarray[0] != NULL)
@@ -532,3 +823,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
*/
- size_t startpos, startoffset, tgt, tgtoffset, pictgt;
+ size_t startpos, startoffset, tgt, tgtoffset, pictgt, tabtgt;
QImage* img;
@@ -541,3 +832,17 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
}
- linkType glt = getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img);
+ linkType glt = getcurrentpos(x, y, wh, ht, lineno, startpos, startoffset, tgt, tgtoffset, pictgt, img, tabtgt);
+ if (bNoInlineTables && ((glt & eTable) != 0))
+ {
+ size_t currentpos = locate();
+ QString tabtext = buffdoc.getTableAsHtml(tabtgt);
+ qDebug("TABLE:%u:%u:%s", currentpos, tabtgt, (const char*)tabtext);
+ QFont f(m_fontname, m_fontControl.currentsize());
+#ifdef USEQPE
+ CTableDialog td(f, tabtext, true, this);
+#else
+ CTableDialog td(f, tabtext, false, this);
+#endif
+ td.exec();
+ jumpto(currentpos);
+ }
if ((glt & eLink) != 0)
@@ -581,3 +886,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
{
- if (!buffdoc.getFile(href))
+ if (!buffdoc.getFile(href, nm))
{
@@ -587,4 +892,8 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
{
+ qDebug("BEFORE:%u", pagelocate());
+ buffdoc.resetPos();
ResetScroll();
fillbuffer();
+ qDebug("AFTER:%u", pagelocate());
+ m_outofdate = true;
update();
@@ -597,3 +906,5 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
{
+ buffdoc.resetPos();
fillbuffer();
+ m_outofdate = true;
update();
@@ -614,2 +925,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
fillbuffer();
+ m_outofdate = true;
update();
@@ -635,3 +947,2 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
}
- locate(pagelocate());
}
@@ -650,3 +961,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
{
- locate(pagelocate());
+ update();
}
@@ -671,2 +982,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
}
+}
@@ -674,3 +986,3 @@ void QTReader::focusInEvent(QFocusEvent* e)
{
- if (m_autoScroll) timer->start(real_delay(), false);
+ if (m_autoScroll && (m_scrolltype != 4)) timer->start(real_delay(), false);
update();
@@ -682,3 +994,10 @@ void QTReader::focusOutEvent(QFocusEvent* e)
{
+ if (m_scrolltype != 4)
+ {
timer->stop();
+ }
+ else
+ {
+ m_autoScroll = false;
+ }
// m_scrolldy1 = m_scrolldy2 = 0;
@@ -719,3 +1038,2 @@ void QTReader::NavUp()
{
- buffdoc.unsuspend();
if (buffdoc.hasnavigation())
@@ -739,3 +1057,2 @@ void QTReader::NavDown()
{
- buffdoc.unsuspend();
if (buffdoc.hasnavigation())
@@ -764,4 +1081,3 @@ void QTReader::zoomin()
setfont();
- locate(pagelocate());
- repaint();
+ refresh();
setautoscroll(sc);
@@ -777,4 +1093,3 @@ void QTReader::zoomout()
setfont();
- locate(pagelocate());
- repaint();
+ refresh();
setautoscroll(sc);
@@ -811,3 +1126,2 @@ void QTReader::keyPressEvent(QKeyEvent* e)
{
- buffdoc.unsuspend();
@@ -908,2 +1222,3 @@ void QTReader::setautoscroll(bool _sc)
{
+ m_outofdate = true;
if (_sc == m_autoScroll) return;
@@ -929,2 +1244,5 @@ void QTReader::setautoscroll(bool _sc)
if (reusebuffer == NULL || reusebuffer->eof()) return;
+#ifndef __STATIC
+ if ((m_scrolltype == 4) && !checkoutput()) return;
+#endif
m_autoScroll = true;
@@ -949,3 +1267,2 @@ bool QTReader::getline(CDrawBuffer *buff)
{
- buffdoc.unsuspend();
bool bRet;
@@ -1067,20 +1384,2 @@ void QTReader::doinplacescroll()
{
- /*
- if (m_rotated)
- {
- blitRot2(0,0,height(),width()-m_scrolldy,NULL);
-// blitRot2(0,0,0,height(),width()-m_scrolldy,NULL);
- }
- else
- {
- if (m_bgpm.isNull())
- {
- p.fillRect(0,m_scrolldy,width(),height()-m_scrolldy,m_bg);
- }
- else
- {
- bitBlt(this, 0, m_scrolldy, dbuff, 0, m_scrolldy, width(), height()-m_scrolldy);
- }
- }
- */
m_scrolldy = m_topmargin;
@@ -1101,3 +1400,2 @@ void QTReader::doinplacescroll()
#endif
- //((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
emit SetScrollState(m_autoScroll);
@@ -1496,6 +1794,17 @@ void QTReader::autoscroll()
{
- drawBackground();
+ if (m_scrolltype == 4)
+ {
+ readAloud();
+ }
+ else
+ {
+ if (dbuff != NULL)
+ {
+ dbp->begin(dbuff);
+ drawBackground(dbp);
dbp->end();
+ }
timer->start(real_delay(), false);
}
+}
@@ -1559,4 +1868,6 @@ void QTReader::redrawall()
{
-#ifdef DOUBLEBUFFER
- drawBackground();
+ if (dbuff != NULL)
+ {
+ dbp->begin(dbuff);
+ drawBackground(dbp);
DrawStraight(dbp, height(), width());
@@ -1568,8 +1879,10 @@ void QTReader::redrawall()
bitBlt(this, 0,0,&rp,0,0,-1,-1);
-#else
+ }
+ else
+ {
+ qDebug("This shouldn't happen but it doesn't matter if it does (rotated == double buffered)");
QPixmap dbuff(height(), width());
QPainter dbp(&dbuff);
- // dbp.setBackgroundMode(OpaqueMode);
- dbp.fillRect(dbuff.rect(), m_bg);
+ drawBackground(&dbp);
DrawStraight(&dbp, height(), width());
@@ -1580,3 +1893,3 @@ void QTReader::redrawall()
bitBlt(this, 0,0,&rp,0,0,-1,-1);
-#endif
+ }
}
@@ -1584,4 +1897,6 @@ void QTReader::redrawall()
{
-#ifdef DOUBLEBUFFER
- drawBackground();
+ if (dbuff != NULL)
+ {
+ dbp->begin(dbuff);
+ drawBackground(dbp);
DrawStraight(dbp, width(), height());
@@ -1589,5 +1904,9 @@ void QTReader::redrawall()
bitBlt(this, 0,0,dbuff,0,0,-1,-1);
-#else
- DrawStraight(p, width(), height());
-#endif
+ }
+ else
+ {
+ QPainter p(this);
+ drawBackground(&p);
+ DrawStraight(&p, width(), height());
+ }
}
@@ -1602,15 +1921,9 @@ void QTReader::drawFonts()
// qDebug("How refreshing...");
- if (buffdoc.empty()) return;
- setfont();
- // if (!m_autoScroll) m_scrolldy1 = 0;
-#ifdef ROTATION_ENABLED
- if (m_lastwidth != ((m_rotated) ? height() : width()))
+ if (buffdoc.empty())
{
- m_scrolldy = m_topmargin;
- // qDebug("Not Optimised %d", m_lastwidth);
- m_lastwidth = ((m_rotated) ? height() : width());
- m_lastheight = ((m_rotated) ? width() : height());
- buffdoc.setwidth(m_lastwidth-(m_left_border+m_right_border));
- locate(pagelocate());
- // qDebug("Not Optimised %d", m_lastwidth);
+ if (dbuff != NULL)
+ {
+ dbp->begin(dbuff);
+ drawBackground(dbp);
+ dbp->end();
}
@@ -1618,45 +1931,32 @@ void QTReader::drawFonts()
{
- int newht = ((m_rotated) ? width() : height());
- if (m_lastheight > newht)
- {
- // qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht);
- m_scrolldy = m_topmargin;
- int ypos = m_scrolldy1+m_topmargin;
- for (int i = 0; i < numlines; i++)
- {
- if ((ypos += textarray[i]->lineSpacing()) > newht - hmargin)
- {
- numlines = i;
- jumpto(mylastpos = locnarray[i+1]);
- break;
- }
+ QPainter p(this);
+ drawBackground(&p);
}
- // qDebug("Optimised < %d", numlines);
- m_lastheight = newht;
+ return;
}
- else if (m_lastheight < newht)
+ setfont();
+ // if (!m_autoScroll) m_scrolldy1 = 0;
+ if (dbuff != NULL && (dbuff->width() != width() || dbuff->height() != height()))
{
- m_scrolldy = m_topmargin;
- // qDebug("Optimised > %d", numlines);
- int ypos = m_scrolldy1+m_topmargin;
- for (int i = 0; i <= numlines; i++)
+ qDebug("Oh no! A resize event was missed...");
+ if (m_rotated)
{
- ypos += textarray[i]->lineSpacing();
- }
- fillbuffer(numlines+1, ypos, newht);
- // qDebug("Optimised > %d", numlines);
+ dbuff->resize(height(), width());
}
- if (numlines > 0)
+ else
{
- redrawall();
+ dbuff->resize(width(), height());
}
+ m_lastwidth = 0;
}
-#else
- if (m_lastwidth != width())
+ if (m_lastwidth != ((m_rotated) ? height() : width()))
{
+ m_scrolldy = m_topmargin;
// qDebug("Not Optimised %d", m_lastwidth);
- m_lastwidth = width();
- m_lastheight = height();
+ m_lastwidth = ((m_rotated) ? height() : width());
+ m_lastheight = ((m_rotated) ? width() : height());
buffdoc.setwidth(m_lastwidth-(m_left_border+m_right_border));
- locate(pagelocate());
+ buffdoc.locate(pagelocate());
+ fillbuffer();
+ redrawall();
// qDebug("Not Optimised %d", m_lastwidth);
@@ -1665,3 +1965,3 @@ void QTReader::drawFonts()
{
- int newht = height();
+ int newht = ((m_rotated) ? width() : height());
if (m_lastheight > newht)
@@ -1669,3 +1969,4 @@ void QTReader::drawFonts()
// qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht);
- int ypos = m_topmargin;
+ m_scrolldy = m_topmargin;
+ int ypos = m_scrolldy1+m_topmargin;
for (int i = 0; i < numlines; i++)
@@ -1684,4 +1985,5 @@ void QTReader::drawFonts()
{
+ m_scrolldy = m_topmargin;
// qDebug("Optimised > %d", numlines);
- int ypos = m_topmargin;
+ int ypos = m_scrolldy1+m_topmargin;
for (int i = 0; i <= numlines; i++)
@@ -1695,17 +1997,5 @@ void QTReader::drawFonts()
{
- int ypos = textarray[0]->ascent()+m_topmargin;
- textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_left_border, m_right_border, m_bg, height()-m_topmargin-m_bottommargin);
-// int last = (m_showlast) ? numlines : numlines-1;
-// for (int i = 1; i <= last; i++)
- for (int i = 1; i < numlines; i++)
- {
-// ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2;
- ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+
- (textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2;
- textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_left_border, m_right_border, m_bg, height()-m_topmargin-m_bottommargin);
- }
-// mylastpos = locate();
+ redrawall();
}
}
-#endif
emitRedraw();
@@ -1930,3 +2220,2 @@ void QTReader::init()
{
- buffdoc.unsuspend();
setBackgroundColor( m_bg );
@@ -1937,2 +2226,6 @@ void QTReader::init()
connect(timer, SIGNAL(timeout()), this, SLOT(doscroll()));
+#ifdef USETIMER
+ m_dragtimer = new QTimer(this);
+ connect(m_dragtimer, SIGNAL(timeout()), this, SLOT(actionDrag()));
+#endif
// QMessageBox::information(this, "init", m_lastfile, 1);
@@ -1946,6 +2239,11 @@ QTReader::~QTReader()
{
-#ifdef DOUBLEBUFFER
+ if (m_output != NULL)
+ {
+ delete m_output;
+ }
+ if (dbuff != NULL)
+ {
delete dbuff;
delete dbp;
-#endif
+ }
#ifdef USEQPE
@@ -1984,3 +2282,39 @@ void QTReader::printIt()
-void QTReader::paintEvent( QPaintEvent * )
+void QTReader::paintEvent( QPaintEvent * p )
+{
+ if ((dbuff != NULL) && !m_outofdate)
+ {
+ if (m_rotated)
+ {
+ if ((p->rect().width() != width()) || (p->rect().height() != height()))
+ {
+ qDebug("Partial paint");
+ QRect r;
+ r.setTop(width()-p->rect().right()-1);
+ r.setLeft(p->rect().top());
+ r.setHeight(p->rect().width());
+ r.setWidth(p->rect().height());
+ QPixmap p1(r.width(), r.height());
+ bitBlt(&p1, QPoint(0, 0), dbuff, r);
+ QWMatrix m;
+ m.rotate(90);
+ QPixmap p2 = p1.xForm(m);
+ bitBlt(this, p->rect().left(), p->rect().top(), &p2, 0, 0, -1, -1);
+ }
+ else
+ {
+ qDebug("Full paint");
+ QWMatrix m;
+ m.rotate(90);
+ QPixmap rp = dbuff->xForm(m);
+ bitBlt(this, 0,0,&rp,0,0,-1,-1);
+ }
+ }
+ else
+ {
+ //bitBlt(this, 0,0,dbuff,0,0,-1,-1);
+ bitBlt(this,p->rect().topLeft(),dbuff,p->rect());
+ }
+ }
+ else
{
@@ -1988,2 +2322,4 @@ void QTReader::paintEvent( QPaintEvent * )
}
+ m_outofdate = false;
+}
@@ -2018,5 +2354,14 @@ int main( int argc, tchar **argv )
+bool QTReader::locate(unsigned long n)
+{
+ m_outofdate = true;
+ m_lastwidth = 0;
+ locnarray[0] = n;
+ ResetScroll();
+ update();
+ return true;
+}
+/*
bool QTReader::locate(unsigned long n) {
//printf("Locate\n");
- buffdoc.unsuspend();
buffdoc.locate(n);
@@ -2025,2 +2370,3 @@ bool QTReader::locate(unsigned long n) {
fillbuffer();
+ m_outofdate = true;
// // qDebug("&Buffer filled");
@@ -2031,3 +2377,3 @@ bool QTReader::locate(unsigned long n) {
}
-
+*/
unsigned int QTReader::screenlines()
@@ -2041,3 +2387,2 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht)
{
- buffdoc.unsuspend();
int hmargin = ((m_scrollpos == 1) ? _SBARHEIGHT : 0);
@@ -2065,2 +2410,8 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht)
ypos += textarray[numlines]->lineSpacing();
+ /*
+ QString tmp = toQString(textarray[numlines]->data());
+ printf("[%u, %u, %u](%s):%s\n", lastypos, m_lastheight-hmargin, ypos,
+ ((textarray[numlines]->showPartial()) ? "TRUE" : "FALSE"),
+ (const char*)tmp);
+ */
numlines++;
@@ -2071,3 +2422,6 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht)
qDebug("FALSE");
+ if (oldpagepos < buffdoc.endSection())
locate(oldpagepos);
+ else
+ dopageup(buffdoc.endSection());
return false;
@@ -2103,3 +2457,2 @@ void QTReader::dopagedn()
// qDebug("HEIGHT(2):%d", m_lastheight);
- buffdoc.unsuspend();
ResetScroll();
@@ -2152,4 +2505,6 @@ bool QTReader::synch(size_t start, size_t end)
if (ch == 10) return true;
- if (ch == UEOF) return false;
- if (ch == 6) return false;
+ if ((ch == UEOF) || (ch == 6))
+ {
+ return false;
+ }
}
@@ -2160,3 +2515,2 @@ void QTReader::dopageup(unsigned int target)
{
- buffdoc.unsuspend();
ResetScroll();
@@ -2164,4 +2518,4 @@ void QTReader::dopageup(unsigned int target)
CBufferFace<size_t> loc;
-
size_t delta, guess = 2*(locate()-pagelocate()), lastdelta = 0;
+ qDebug("dopageup:: locate():%u pagelocate():%u guess:%u", locate(), pagelocate(), guess);
bool ch = true;
@@ -2182,2 +2536,3 @@ void QTReader::dopageup(unsigned int target)
delta = 0; // 0 is a flag to say don't guess any more
+ qDebug("Jumping to startsection:%d", buffdoc.startSection());
jumpto(buffdoc.startSection());
@@ -2295,4 +2650,5 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn)
unsigned int lcn = _lcn;
+ bDoUpdates = false;
ResetScroll();
- if (m_lastfile == newfile)
+ if (m_lastfile == newfile && lcn == 0)
{
@@ -2318,4 +2674,2 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn)
qDebug("buffdoc.openfile done");
- locate(lcn);
- qDebug("buffdoc.locate done");
}
@@ -2323,2 +2677,4 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn)
qDebug("Updated");
+ bDoUpdates = true;
+ locate(lcn);
return bRC;
@@ -2360,2 +2716,3 @@ void QTReader::lineDown()
mylastpos = locate();
+ m_outofdate = true;
update();
@@ -2574,5 +2931,9 @@ MarkupType QTReader::PreferredMarkup()
}
-#ifdef DOUBLEBUFFER
+
void QTReader::resizeEvent( QResizeEvent * p )
{
+ qDebug("Resizing");
+ m_outofdate = true;
+ if (dbuff != NULL)
+ {
if (m_rotated)
@@ -2585,2 +2946,3 @@ void QTReader::resizeEvent( QResizeEvent * p )
}
+ }
m_bgIsScaled = false;
@@ -2607,10 +2969,10 @@ void QTReader::resizeEvent( QResizeEvent * p )
m_right_border = (w*m_absright_border+500)/1000;
-
- qDebug("Top margin:%u", m_topmargin );
- qDebug("Bottom margin:%u", m_bottommargin );
- qDebug("Left margin:%u", m_left_border );
- qDebug("Right margin:%u", m_right_border );
+ }
+ if (dbuff != NULL && buffdoc.empty())
+ {
+ dbp->begin(dbuff);
+ drawBackground(dbp);
+ dbp->end();
}
}
-#endif
@@ -2618,14 +2980,8 @@ void QTReader::setrotated(bool sfs)
{
+ qDebug("Rotating");
m_rotated = sfs;
-#ifdef DOUBLEBUFFER
- if (m_rotated)
- {
- dbuff->resize(height(), width());
- }
- else
- {
- dbuff->resize(width(), height());
- }
+ setDoubleBuffer(m_doubleBuffered);
m_bgIsScaled = false;
-#endif
+ m_outofdate = true;
+ /*
int h, w;
@@ -2650,13 +3006,27 @@ void QTReader::setrotated(bool sfs)
qDebug("Right margin:%u", m_right_border );
+ */
}
-void QTReader::drawBackground()
+void QTReader::drawBackground(QPainter *p)
{
- dbp->begin(dbuff);
- // dbp->setBackgroundMode(OpaqueMode);
- dbp->setBackgroundColor(m_bg);
- dbp->eraseRect(dbuff->rect());
+ // p->setBackgroundMode(OpaqueMode);
+ p->setBackgroundColor(m_bg);
+ if (dbuff != NULL)
+ {
+ p->eraseRect(dbuff->rect());
+ }
+ else
+ {
+ if (m_rotated)
+ {
+ p->eraseRect(0,0,height(),width());
+ }
+ else
+ {
+ p->eraseRect(rect());
+ }
+ }
if (!m_bgpm.isNull())
{
- // dbp->setBackgroundMode(TransparentMode);
+ // p->setBackgroundMode(TransparentMode);
switch (m_bgtype)
@@ -2665,5 +3035,12 @@ void QTReader::drawBackground()
{
+ if (dbuff == NULL)
+ {
+ p->drawPixmap(width(),height(),m_bgpm);
+ }
+ else
+ {
int w = (dbuff->rect().width()-m_bgpm.width())/2;
int h = (dbuff->rect().height()-m_bgpm.height())/2;
- dbp->drawPixmap(w,h,m_bgpm);
+ p->drawPixmap(w,h,m_bgpm);
+ }
}
@@ -2672,12 +3049,10 @@ void QTReader::drawBackground()
{
- dbp->drawTiledPixmap(0,0,dbuff->rect().width(),dbuff->rect().height(),m_bgpm);
- /*
- for (int h = 0; h < dbuff->rect().height(); h += m_bgpm.height())
- {
- for (int w = 0; w < dbuff->rect().width(); w += m_bgpm.width())
+ if (dbuff == NULL)
{
- dbp->drawPixmap(w,h,m_bgpm);
+ p->drawTiledPixmap(0,0,width(),height(),m_bgpm);
}
+ else
+ {
+ p->drawTiledPixmap(0,0,dbuff->rect().width(),dbuff->rect().height(),m_bgpm);
}
- */
}
@@ -2690,5 +3065,12 @@ void QTReader::drawBackground()
QImage im = m_bgpm.convertToImage();
+ if (dbuff == NULL)
+ {
+ m_bgpm.convertFromImage(im.smoothScale(width(),height()));
+ }
+ else
+ {
m_bgpm.convertFromImage(im.smoothScale(dbuff->rect().width(), dbuff->rect().height()));
}
- dbp->drawPixmap(0,0,m_bgpm);
+ }
+ p->drawPixmap(0,0,m_bgpm);
}
@@ -2698,3 +3080,3 @@ void QTReader::drawBackground()
}
- // dbp->setBackgroundMode(OpaqueMode);
+ // p->setBackgroundMode(OpaqueMode);
}
@@ -2761,3 +3143,8 @@ QString QTReader::about()
{
- return QString("QTReader widget (c) Tim Wentford\n")+buffdoc.about() + "\nMini-scrollbar by Markus Gritsch\nNavigation History fixes by Frantisek Dufka";
+ QString ab = QString("QTReader widget (c) Tim Wentford\n")+buffdoc.about() + "\nMini-scrollbar by Markus Gritsch\nNavigation History fixes by Frantisek Dufka";
+ if (m_output != NULL)
+ {
+ ab += QString("\n") + m_output->about();
+ }
+ return ab;
}
@@ -2899,3 +3286,3 @@ void QTReader::gotoLink()
{
- if (!buffdoc.getFile(href))
+ if (!buffdoc.getFile(href, nm))
{
@@ -2907,2 +3294,3 @@ void QTReader::gotoLink()
fillbuffer();
+ m_outofdate = true;
update();
@@ -2915,3 +3303,5 @@ void QTReader::gotoLink()
{
+ buffdoc.resetPos();
fillbuffer();
+ m_outofdate = true;
update();
@@ -2932,2 +3322,3 @@ void QTReader::gotoLink()
fillbuffer();
+ m_outofdate = true;
update();
@@ -2951,5 +3342,5 @@ void QTReader::gotoLink()
emit OnURLSelected(href, tgt);
+ refresh();
}
}
- locate(pagelocate());
}
@@ -2962,2 +3353,3 @@ void QTReader::refresh(bool full)
{
+ qDebug("Refreshing");
int h, w;
@@ -2983,3 +3375,118 @@ void QTReader::refresh(bool full)
if (full && m_highlightfilter) m_highlightfilter->refresh(pagelocate());
+ m_outofdate = true;
locate(pagelocate());
}
+
+#include "striphtml.h"
+
+CFilterChain* QTReader::getfilter()
+{
+ CFilterChain * filt = new CFilterChain(getencoding());
+ if (bstripcr) filt->addfilter(new stripcr);
+
+ if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt);
+ if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter);
+ // if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml(m_lastfile));
+
+#ifdef __STATIC
+ if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml(m_lastfile));
+ if (bautofmt && (PreferredMarkup() == cCHM))
+ {
+ striphtml* f = new striphtml(m_lastfile);
+ f->setchm(true);
+ filt->addfilter(f);
+ }
+#else
+ if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new ExternFilter("HTMLfilter", m_lastfile));
+ if (bautofmt && (PreferredMarkup() == cCHM))
+ {
+ ExternFilter* f = new ExternFilter("HTMLfilter",m_lastfile);
+ ((striphtml*)f->filter())->setchm(true);
+ filt->addfilter(f);
+ }
+#endif
+ m_highlightfilter = new HighlightFilter(this);
+ filt->addfilter(m_highlightfilter);
+
+ if (bdehyphen) filt->addfilter(new dehyphen);
+ if (bunindent) filt->addfilter(new unindent);
+ if (brepara) filt->addfilter(new repara(m_reparastring));
+ if (bonespace) filt->addfilter(new OnePara);
+ if (bindenter) filt->addfilter(new indenter(bindenter));
+ if (bdblspce) filt->addfilter(new dblspce);
+ if (bdepluck) filt->addfilter(new DePluck(pluckernextpart));
+ if (bdejpluck) filt->addfilter(new DePluck(jplucknextpart));
+ if (brepalm) filt->addfilter(new repalm);
+ if (bunderlineLink) filt->addfilter(new underlineLink);
+ if (bkern) filt->addfilter(new kern);
+ if (bremap) filt->addfilter(new remap);
+ if (bmakebold) filt->addfilter(new embolden);
+ if (bfulljust) filt->addfilter(new FullJust);
+ int r,g,b;
+ m_default_bg.rgb(&r, &g, &b);
+ if (r != 255 || g != 255 || b != 255)
+ filt->addfilter(new setbg(r,g,b));
+ m_default_fg.rgb(&r, &g, &b);
+ if (r != 0 || g != 0 || b != 0)
+ filt->addfilter(new setfg(r,g,b));
+ // if (bNegative) filt->addfilter(new makeNegative);
+ if (bInverse) filt->addfilter(new makeInverse);
+ if (bNoInlineTables) filt->addfilter(new tableLink);
+ return filt;
+}
+
+void QTReader::readAloud()
+{
+#ifdef __STATIC
+ return;
+#else
+ CBuffer para;
+ jumpto(pagelocate());
+ while (m_autoScroll && (buffdoc.getpara(para) != -1))
+ {
+ if (para.length() > 0)
+ {
+ unsigned long lastpos = buffdoc.explocate();
+ while (lastpos > mylastpos)
+ {
+ dopagedn();
+ qApp->processEvents();
+ }
+ jumpto(lastpos);
+ QString txt = toQString(para.data());
+
+ doOutput(txt);
+ }
+ qApp->processEvents();
+ }
+#endif
+}
+
+bool QTReader::doOutput(const QString& wrd)
+{
+ if (m_output != NULL)
+ {
+ m_output->output(wrd);
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+bool QTReader::checkoutput()
+{
+ if (m_output == NULL)
+ {
+ m_output = new outputcodec(m_outputName);
+ if (reinterpret_cast<outputcodec*>(m_output)->getStatus() != 0)
+ {
+ delete m_output;
+ m_output = NULL;
+ QMessageBox::warning(this, PROGNAME, QString("Couldn't find output codec\n")+m_outputName);
+ return false;
+ }
+ }
+ return true;
+}