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.cpp632
1 files changed, 353 insertions, 279 deletions
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp
index 6335ea2..e7bfc28 100644
--- a/noncore/apps/opie-reader/QTReader.cpp
+++ b/noncore/apps/opie-reader/QTReader.cpp
@@ -10,2 +10,3 @@
+#include <qpainter.h>
#include "config.h"
@@ -13,2 +14,3 @@
#include "QTReaderApp.h"
+#include "CDrawBuffer.h"
#include <qpe/qpeapplication.h>
@@ -38,12 +40,15 @@ QTReader::QTReader( QWidget *parent=0, const char *name=0, WFlags f = 0) :
m_delay(100),
- m_scrolldy(0),
+ m_scrolldy1(0),
+ m_scrolldy2(0),
m_autoScroll(false),
- textarray(NULL),
- locnarray(NULL),
+ //textarray(NULL),
+ //locnarray(NULL),
numlines(0),
m_fontname("unifont"),
- m_fm(NULL)
+ m_fm(NULL),
+ mouseUpOn(true),
+ m_twotouch(true),
+ m_touchone(true)
{
m_overlap = 1;
- fontsizes = NULL;
// init();
@@ -76,12 +81,125 @@ long QTReader::real_delay()
-void QTReader::mouseReleaseEvent( QMouseEvent* _e )
-//void QTReader::mouseDoubleClickEvent( QMouseEvent* _e )
+void QTReader::mousePressEvent( QMouseEvent* _e )
+{
+ if (_e->button() == RightButton)
+ {
+ mouseUpOn = false;
+ if (_e->y() > height()/2)
+ {
+ goDown();
+ }
+ else
+ {
+ goUp();
+ }
+ }
+}
+
+bool QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt)
{
- if (textarray != NULL)
+ int lineno = 0;
+ int ht = textarray[0]->lineSpacing();
+ while ((ht < y) && (lineno < numlines))
{
-// printf("(%u, %u)\n", _e->x(), _e->y());
- QString wrd = QString::null;
- int lineno = _e->y()/m_linespacing;
+ ht += textarray[++lineno]->lineSpacing();
+ }
+ start = locnarray[lineno];
if (m_bMonoSpaced)
{
+ offset = x/m_charWidth;
+ }
+ else
+ {
+ int i;
+ CDrawBuffer* t = textarray[lineno];
+ for (i = t->length(); t->width(i) > x; i--);
+ offset = i;
+ }
+ return textarray[lineno]->isLink(offset, tgt);
+}
+
+void QTReader::setTwoTouch(bool _b)
+{
+ setBackgroundColor( white );
+ m_twotouch = m_touchone = _b;
+}
+
+void QTReader::mouseReleaseEvent( QMouseEvent* _e )
+{
+ if (_e->button() == LeftButton)
+ {
+ if (mouseUpOn)
+ {
+ if (textarray[0] != NULL)
+ {
+ QString wrd, line;
+// int lineno = _e->y()/m_linespacing;
+ int lineno = 0;
+ int ht = textarray[0]->lineSpacing();
+ while ((ht < _e->y()) && (lineno < numlines))
+ {
+ ht += textarray[++lineno]->lineSpacing();
+ }
+ size_t startpos, startoffset, tgt;
+ if (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt))
+ {
+ if (buffdoc.hyperlink(tgt))
+ {
+ fillbuffer();
+ update();
+ }
+ else
+ {
+ locate(pagelocate());
+ }
+ return;
+ }
+ if (m_twotouch)
+ {
+ if (m_touchone)
+ {
+ m_touchone = false;
+ m_startpos = startpos;
+ m_startoffset = startoffset;
+ setBackgroundColor( lightGray );
+ }
+ else
+ {
+ m_touchone = true;
+ setBackgroundColor( white );
+ size_t endpos, endoffset;
+ endpos = startpos;
+ endoffset = startoffset;
+ size_t currentpos = locate();
+ if (endpos >= m_startpos)
+ {
+ jumpto(m_startpos);
+ for (int i = 0; i < m_startoffset; i++)
+ {
+ getch();
+ }
+ if (m_startpos == endpos)
+ {
+ for (int i = m_startoffset; i <= endoffset; i++)
+ {
+ wrd += QChar(getch());
+ }
+ }
+ else
+ {
+ while (buffdoc.explocate() <= endpos)
+ {
+ wrd += QChar(getch());
+ }
+ for (int i = 0; i < endoffset; i++)
+ {
+ wrd += QChar(getch());
+ }
+ }
+ jumpto(currentpos);
+ }
+ }
+ }
+ else if (m_bMonoSpaced)
+ {
int chno = _e->x()/m_charWidth;
@@ -94,3 +212,3 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
{
- CBuffer* t = textarray[lineno];
+ CDrawBuffer* t = textarray[lineno];
int first = 0;
@@ -99,5 +217,4 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
int i = first+1;
-// while ((*t)[i] != ' ' && (*t)[i] != 0) i++;
while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
- if (m_fm->width(toQString(t->data()), i) > _e->x())
+ if (t->width(i) > _e->x())
{
@@ -106,3 +223,2 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
}
-// while ((*t)[i] == ' ' && (*t)[i] != 0) i++;
while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
@@ -114,10 +230,9 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e )
{
- QClipboard* cb = QApplication::clipboard();
- cb->setText(wrd);
- Global::statusMessage(wrd);
- if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty())
- {
- QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8());
- e << wrd;
+ emit OnWordSelected(wrd, locnarray[lineno], (m_twotouch) ? wrd : toQString(textarray[lineno]->data()));
+ }
+ }
}
+ else
+ {
+ mouseUpOn = true;
}
@@ -137,3 +252,3 @@ void QTReader::focusOutEvent(QFocusEvent* e)
timer->stop();
- m_scrolldy = 0;
+ m_scrolldy1 = m_scrolldy2 = 0;
}
@@ -247,11 +362,7 @@ void QTReader::keyPressEvent(QKeyEvent* e)
e->accept();
- if (fontsizes[++m_textsize] == 0)
- {
- m_textsize--;
- }
- else
+ if (m_fontControl.increasesize())
{
bool sc = m_autoScroll;
+ setfont();
m_autoScroll = false;
- setfont(NULL);
locate(pagelocate());
@@ -266,3 +377,3 @@ void QTReader::keyPressEvent(QKeyEvent* e)
e->accept();
- if (m_textsize > 0)
+ if (m_fontControl.decreasesize())
{
@@ -270,4 +381,3 @@ void QTReader::keyPressEvent(QKeyEvent* e)
m_autoScroll = false;
- m_textsize--;
- setfont(NULL);
+ setfont();
locate(pagelocate());
@@ -280,3 +390,2 @@ void QTReader::keyPressEvent(QKeyEvent* e)
case Key_Space:
-// case Key_Enter:
case Key_Return:
@@ -284,4 +393,3 @@ void QTReader::keyPressEvent(QKeyEvent* e)
e->accept();
- setautoscroll(!m_autoScroll);
- ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
+ emit OnActionPressed();
}
@@ -299,2 +407,3 @@ void QTReader::setautoscroll(bool _sc)
m_autoScroll = false;
+ QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
}
@@ -304,2 +413,3 @@ void QTReader::setautoscroll(bool _sc)
autoscroll();
+ QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed
}
@@ -307,3 +417,3 @@ void QTReader::setautoscroll(bool _sc)
-bool QTReader::getline(CBuffer *buff)
+bool QTReader::getline(CDrawBuffer *buff)
{
@@ -332,10 +442,6 @@ void QTReader::doscroll()
- if (++m_scrolldy == m_linespacing)
+ if (++m_scrolldy1 == textarray[0]->lineSpacing())
{
- setfont(&p);
- m_scrolldy = 0;
-// qDrawPlainRect(&p,0,height() - m_linespacing,width(),m_linespacing,white,1,&b);
- pagepos = locnarray[1];
- CBuffer* buff = textarray[0];
- for (int i = 1; i < numlines; i++)
+ CDrawBuffer* buff = textarray[0];
+ for (int i = 1; i <= numlines; i++)
{
@@ -344,32 +450,26 @@ void QTReader::doscroll()
}
- locnarray[numlines-1] = locate();
- if (getline(buff))
- {
- textarray[numlines-1] = buff;
- drawText( p, 0, height() - m_descent - 2, buff->data());
- mylastpos = locate();
+ textarray[numlines] = buff;
+ --numlines;
+ m_scrolldy1 = 0;
}
- else
+ if (++m_scrolldy2 == textarray[numlines]->lineSpacing())
{
-// (*buff)[0] = '\0';
- textarray[numlines-1] = buff;
- m_autoScroll = false;
- ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
- }
- }
-}
+ m_scrolldy2 = 0;
+ numlines++;
-void QTReader::drawText(QPainter& p, int x, int y, tchar* _text)
-{
- QString text = toQString(_text);
- if (m_bMonoSpaced)
- {
- for (int i = 0; i < text.length(); i++)
+ if (textarray[numlines] == NULL)
{
- p.drawText( x+i*m_charWidth, y, QString(text[i]) );
+ textarray[numlines] = new CDrawBuffer;
}
- }
- else
+ locnarray[numlines] = locate();
+ int ch = getline(textarray[numlines]);
+ textarray[numlines-1]->render(&p, height() - textarray[numlines]->descent() - 2, m_bMonoSpaced, m_charWidth, width());
+ mylastpos = locate();
+ if (!ch)
{
- p.drawText( x, y, text );
+ m_autoScroll = false;
+ ((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
+ emit OnRedraw();
+ }
+ emit OnRedraw();
}
@@ -382,24 +482,10 @@ void QTReader::autoscroll()
-void QTReader::setfont(QPainter* p)
+void QTReader::setfont()
{
- // qDebug("Fontsize = %u",fontsizes[m_textsize]);
- // qDebug("SetFont %x",p);
- QFont font(m_fontname, fontsizes[m_textsize], (m_bBold) ? QFont::Bold : QFont::Normal );
- m_charWidth = (m_charpc*fontsizes[m_textsize])/100;
+// m_fontControl.Change
+ m_charWidth = (m_charpc*m_fontControl.currentsize())/100;
if (m_charWidth <= 0) m_charWidth = 1;
-// font.setFixedPitch(m_bMonoSpaced);
-// qDebug("Raw name = %s", (const char*)font.rawName());
- if (p != NULL) p->setFont( font );
- if (m_fm == NULL)
- {
- m_fm = new QFontMetrics(font);
- buffdoc.setfm(m_fm);
- }
- else
- {
- *m_fm = QFontMetrics(font);
- }
- m_ascent = m_fm->ascent();
- m_descent = m_fm->descent();
- m_linespacing = m_fm->lineSpacing();
+ m_ascent = m_fontControl.ascent();
+ m_descent = m_fontControl.descent();
+ m_linespacing = m_fontControl.lineSpacing();
}
@@ -408,7 +494,8 @@ void QTReader::drawFonts( QPainter *p )
{
- setfont(p);
- if (m_lastwidth != width())
+ setfont();
+ if (m_lastwidth != width() || m_lastheight != height())
{
m_lastwidth = width();
- locate(pagepos);
+ m_lastheight = height();
+ locate(pagelocate());
}
@@ -416,2 +503,4 @@ void QTReader::drawFonts( QPainter *p )
{
+
+/*
int sl = screenlines();
@@ -422,3 +511,3 @@ void QTReader::drawFonts( QPainter *p )
size_t newpos = locnarray[sl];
- CBuffer** nta = new CBuffer*[sl];
+ CDrawBuffer** nta = new CDrawBuffer*[sl];
size_t* nla = new size_t[sl];
@@ -430,4 +519,4 @@ void QTReader::drawFonts( QPainter *p )
for (int i = sl; i < numlines; i++) delete textarray[i];
- delete [] textarray;
delete [] locnarray;
+ delete [] textarray;
textarray = nta;
@@ -436,3 +525,2 @@ void QTReader::drawFonts( QPainter *p )
jumpto(mylastpos = newpos);
-// locate(pagepos);
}
@@ -441,3 +529,3 @@ void QTReader::drawFonts( QPainter *p )
// qDebug("df:<%u,%u>",sl,numlines);
- CBuffer** nta = new CBuffer*[sl];
+ CDrawBuffer** nta = new CDrawBuffer*[sl];
size_t* nla = new size_t[sl];
@@ -451,3 +539,3 @@ void QTReader::drawFonts( QPainter *p )
{
- nta[i] = new CBuffer;
+ nta[i] = new CDrawBuffer(&m_fontControl);
nla[i] = locate();
@@ -456,4 +544,4 @@ void QTReader::drawFonts( QPainter *p )
mylastpos = locate();
- delete [] textarray;
delete [] locnarray;
+ delete [] textarray;
textarray = nta;
@@ -462,24 +550,18 @@ void QTReader::drawFonts( QPainter *p )
}
- int ypos = (btight) ? 0 : m_ascent-m_linespacing;
- // int linespacing = (tight) ? m_ascent : m_ascent+m_descent;
- for (int i = 0; i < numlines; i++)
+*/
+ if (numlines > 0)
{
- drawText( *p, 0, ypos += m_linespacing, textarray[i]->data());
- }
- /*
-
-
-
- int nlines = height()/(fontmetric.ascent()+fontmetric.descent());
- tchar buffer[1024];
- for (int i = 0; i < nlines; i++)
+ int ypos = textarray[0]->ascent();
+ textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width());
+ for (int i = 1; i < numlines; i++)
{
- y += fontmetric.ascent();
- sprintf(buffer, "%d:%d:%s[%d]:Lines %d:%s", i+1, m_textfont, fonts[m_textfont], m_fs, nlines, (const tchar*)m_string);
- drawText( *p, 0, y, buffer );
- y += fontmetric.descent();
+ ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2;
+ textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width());
+
+ }
+// mylastpos = locate();
}
- */
}
- m_scrolldy = 0;
+ m_scrolldy1 = m_scrolldy2 = 0;
+ emit OnRedraw();
}
@@ -518,40 +600,5 @@ QString QTReader::firstword()
-void QTReader::ChangeFont(int tgt)
+bool QTReader::ChangeFont(int tgt)
{
-
- QValueList<int>::Iterator it;
-
-// QValueList<int> sizes = QFontDatabase::pointSizes(m_fontname, (m_bBold) ? QFont::Bold : QFont::Normal);
- QFontDatabase fdb;
-/*
- QStringList styles = fdb.styles(m_fontname);
- for ( QStringList::Iterator it = styles.begin(); it != styles.end(); ++it )
- {
- printf( "%s \n", (*it).latin1() );
- }
-*/
- QValueList<int> sizes = fdb.pointSizes(m_fontname, (m_bBold) ? QString("Bold") : QString::null);
- uint n = sizes.count();
- if (fontsizes != NULL) delete [] fontsizes;
- fontsizes = new unsigned int[n+1];
- uint i = 0;
- uint best = 0;
- for (it = sizes.begin(); it != sizes.end(); it++)
- {
- fontsizes[i] = (*it)/10;
- if (abs(tgt-fontsizes[i]) < abs(tgt-fontsizes[best]))
- {
- best = i;
- }
- i++;
- }
- m_textsize = best;
- fontsizes[i] = 0;
- setfont(NULL);
- QFont font(m_fontname, fontsizes[m_textsize], (m_bBold) ? QFont::Bold : QFont::Normal );
- if (m_fm == NULL)
- {
- m_fm = new QFontMetrics(font);
- buffdoc.setfm(m_fm);
- }
+ return m_fontControl.ChangeFont(m_fontname, tgt);
}
@@ -567,3 +614,3 @@ void QTReader::init()
ChangeFont(m_textsize);
- // setFocusPolicy(QWidget::StrongFocus);
+ setFocusPolicy(QWidget::StrongFocus);
// resize( 240, 320 );
@@ -574,2 +621,4 @@ void QTReader::init()
m_lastwidth = width();
+ m_lastheight = height();
+ setfont();
if (!m_lastfile.isEmpty())
@@ -586,6 +635,2 @@ QTReader::~QTReader()
{
- if (fontsizes != NULL) delete [] fontsizes;
-#ifndef QT_NO_PRINTER
- // delete printer;
-#endif
}
@@ -674,37 +719,24 @@ unsigned int QTReader::screenlines()
-bool QTReader::fillbuffer() {
+bool QTReader::fillbuffer(int reuse, int ht)
+{
if (buffdoc.empty()) return false;
- //printf("Fillbuffer\n");
- m_scrolldy = 0;
+ m_scrolldy1 = m_scrolldy2 = 0;
int ch;
bool ret = false;
- int delta = screenlines();
- // qDebug("fillbuffer:%u-%u",delta,numlines);
- if (delta != numlines)
+ unsigned int oldpagepos = locnarray[reuse];
+ int ypos = ht;
+ numlines = reuse;
+ while (ypos < height())
{
- if (textarray != NULL)
+ if (textarray[numlines] == NULL)
{
- for (int i = 0; i < numlines; i++) delete textarray[i];
- delete [] textarray;
- delete [] locnarray;
+ textarray[numlines] = new CDrawBuffer(&m_fontControl);
}
- numlines = delta;
- textarray = new CBuffer*[numlines];
- locnarray = new size_t[numlines];
- for (int i = 0; i < numlines; i++) textarray[i] = new CBuffer;
- }
- // qDebug("fillbuffer:pagepos:%u",pagepos);
- unsigned int oldpagepos = pagepos;
-// if (textarray != NULL)
-// pagepos = locnarray[0];
-// else
- pagepos = locate();
- for (int i = 0; i < delta; i++)
- {
- locnarray[i] = locate();
- ch = getline(textarray[i]);
- // if (ch == EOF) {
+ locnarray[numlines] = locate();
+ int ch = getline(textarray[numlines]);
+ ypos += textarray[numlines]->lineSpacing();
+ numlines++;
if (!ch)
{
- if (i == 0)
+ if (numlines - reuse == 1/* && locnarray[0] == buffdoc.locate()*/)
{
@@ -715,15 +747,12 @@ bool QTReader::fillbuffer() {
{
- ret = true;
- for (int j = i+1; j < delta; j++)
- {
- locnarray[j] = locnarray[j-1];
- (*(textarray[j]))[0] = '\0';
- }
- break;
+ --numlines;
+ mylastpos = locate();
+ return true;
}
}
- if (ch == '\012') ret = true;
}
+
+ --numlines;
mylastpos = locate();
- // qDebug("fillbuffer:lastpos:%u",mylastpos);
+
return true;
@@ -734,12 +763,25 @@ void QTReader::dopagedn()
{
- if (m_overlap == 0)
+ int skip = 0, ypos = 0;
+ if (locate() != mylastpos)
{
- if (locate() != mylastpos) jumpto(mylastpos);
+// qDebug("Jumping to %u", mylastpos);
+ jumpto(mylastpos);
}
- else
+ CDrawBuffer* reusebuffer = textarray[numlines];
+ if (reusebuffer != NULL)
+ {
+ for (int i = 0; i <= m_overlap; i++)
{
- if (m_overlap >= screenlines()) m_overlap = screenlines()/2;
- jumpto(locnarray[screenlines()-m_overlap]);
+ int offset = numlines - m_overlap + i;
+ reusebuffer = textarray[offset];
+ size_t reuselocn = locnarray[offset];
+ textarray[offset] = textarray[i];
+ textarray[i] = reusebuffer;
+ locnarray[offset] = locnarray[i];
+ locnarray[i] = reuselocn;
+ ypos += textarray[i]->lineSpacing();
+ skip++;
}
- if (fillbuffer())
+ }
+ if (fillbuffer(skip, ypos))
{
@@ -751,18 +793,8 @@ void QTReader::dopageup()
{
- CBuffer** buff = textarray;
- unsigned int *loc = new unsigned int[numlines];
- int cbptr = 0;
- if (locate() != mylastpos) jumpto(mylastpos);
- if (m_overlap >= screenlines()) m_overlap = screenlines()/2;
- unsigned int target = locnarray[m_overlap];
- if (buffdoc.hasrandomaccess())
- {
- unsigned int delta = locate()-pagelocate();
- if (delta < 64) delta = 64;
- if (delta % 2 != 0) delta++;
- if (target % 2 != 0) target++;
- do
- {
- delta <<= 1;
- if (delta >= target)
+ CBufferFace<CDrawBuffer*> buff;
+ CBufferFace<size_t> loc;
+ unsigned int target = locnarray[(m_overlap < numlines) ? m_overlap : numlines/2];
+
+ size_t delta;
+ if (target < 2048)
{
@@ -770,16 +802,16 @@ void QTReader::dopageup()
jumpto(0);
- for (int i = 0; i < numlines; i++)
- {
- loc[i] = locate();
- getline(buff[i]);
- }
- break;
}
+ else
+ {
+ delta = 2048;
+
jumpto(target-delta);
+
+ buff[0] = new CDrawBuffer(&m_fontControl);
+
do
{
- getline(buff[0]);
-#ifdef WS
- //printf("Trying:%s\n",buff[0]);
-#endif
+
+ if (!getline(buff[0])) break;
+
if (locate() > target) continue;
@@ -787,46 +819,52 @@ void QTReader::dopageup()
while (!buffdoc.iseol());
- for (int i = 0; i < numlines; i++)
- {
- loc[i] = locate();
- getline(buff[i]);
-#ifdef WS
- //printf("Filling:%s\n",buff[i]);
-#endif
- }
}
- while (locate() >= target && delta < 4096);
-#ifdef WS
- //printf("Delta:%u\n",delta);
-#endif
+ int nbfl = 0;
+
+ bool ch = true;
+ int ypos = 0;
+ while (locate() < target)
+ {
+ if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl);
+ loc[nbfl] = locate();
+ ch = getline(buff[nbfl]);
+ ypos += buff[nbfl]->lineSpacing();
+ nbfl++;
+ if (!ch) break;
}
- else
+ if (ypos < height())
{
- jumpto(0);
- for (int i = 0; i < numlines; i++)
+ locate(0);
+ return;
+ }
+ if (ch)
{
- loc[i] = locate();
- getline(buff[i]);
+ if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl);
+ loc[nbfl] = locate();
+ int ch = getline(buff[nbfl]);
+ nbfl++;
}
+ ypos = 0;
+ numlines = 0;
+ while (ypos < height() && numlines <= nbfl-2)
+ {
+ ypos += buff[nbfl - numlines - 2]->lineSpacing();
+ numlines++;
}
- cbptr = 0;
- while (locate() < target)
+ --numlines;
+ int offset = nbfl;
+ offset -= numlines+1;
+ for (int i = 0; i <= numlines; i++)
{
- loc[cbptr] = locate();
- getline(buff[cbptr]);
-#ifdef WS
- //printf("Adding:%s\n",buff[cbptr]->data());
-#endif
- cbptr = (cbptr+1) % numlines;
+ delete textarray[i];
+ textarray[i] = buff[offset+i];
+ locnarray[i] = loc[offset + i];
}
- pagepos = loc[cbptr];
- textarray = new CBuffer*[numlines];
- for (int i = 0; i < numlines; i++)
+ for (int i = 0; i < nbfl - numlines - 1; i++)
{
- int j = (cbptr+i)%numlines;
- textarray[i] = buff[j];
- locnarray[i] = loc[j];
+ delete buff[i];
}
- delete [] buff;
- delete [] loc;
+
+// --numlines;
mylastpos = locate();
+
update();
@@ -854,2 +892,3 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn)
}
+ setfilter(getfilter());
update();
@@ -861,19 +900,29 @@ void QTReader::lineDown()
{
- pagepos = locnarray[1];
- CBuffer* buff = textarray[0];
- for (int i = 1; i < numlines; i++)
+ int ypos = 0;
+ int offset = numlines;
+
+ for (int i = 0; i <= numlines; i++)
{
- textarray[i-1] = textarray[i];
- locnarray[i-1] = locnarray[i];
+ if ((ypos += textarray[numlines-i]->lineSpacing()) > height())
+ {
+ offset = i-1;
+ break;
+ }
}
- locnarray[numlines-1] = locate();
- if (getline(buff))
+ offset = numlines - offset;
+ for (int i = offset; i <= numlines; i++)
{
- textarray[numlines-1] = buff;
- mylastpos = locate();
+ CDrawBuffer* buff = textarray[i-offset];
+ textarray[i-offset] = textarray[i];
+ locnarray[i-offset] = locnarray[i];
+ textarray[i] = buff;
}
- else
+ numlines = numlines - offset + 1;
+ locnarray[numlines] = locate();
+ if (textarray[numlines] == NULL)
{
- textarray[numlines-1] = buff;
+ textarray[numlines] = new CDrawBuffer(&m_fontControl);
}
+ getline(textarray[numlines]);
+ mylastpos = locate();
update();
@@ -965,5 +1014,5 @@ void QTReader::lineUp()
{
- CBuffer* buff = textarray[numlines-1];
+ CDrawBuffer* buff = textarray[numlines];
unsigned int loc;
- unsigned int end = locnarray[numlines-1];
+ unsigned int end = locnarray[numlines];
int cbptr = 0;
@@ -971,2 +1020,3 @@ void QTReader::lineUp()
unsigned int target = locnarray[0];
+ if (target == 0) return;
if (buffdoc.hasrandomaccess())
@@ -982,7 +1032,4 @@ void QTReader::lineUp()
jumpto(0);
- for (int i = 0; i < numlines; i++)
- {
loc = locate();
getline(buff);
- }
break;
@@ -1016,4 +1063,3 @@ void QTReader::lineUp()
}
- pagepos = loc;
- for (int i = numlines-1; i > 0; i--)
+ for (int i = numlines; i > 0; i--)
{
@@ -1024,6 +1070,16 @@ void QTReader::lineUp()
locnarray[0] = loc;
-// delete [] buff;
-// delete [] loc;
- mylastpos = locate();
- jumpto(end);
+ int start = numlines;
+ int ypos = 0;
+ for (int i = 0; i <= numlines; i++)
+ {
+ ypos += textarray[i]->lineSpacing();
+ if (ypos > height())
+ {
+ start = i;
+ ypos -= textarray[i]->lineSpacing();
+ break;
+ }
+ }
+ jumpto(locnarray[start]);
+ fillbuffer(start, ypos);
update();
@@ -1035 +1091,19 @@ bool QTReader::empty()
}
+
+MarkupType QTReader::PreferredMarkup()
+{
+ MarkupType m = buffdoc.PreferredMarkup();
+ if (m == cTEXT)
+ {
+ int ext = m_lastfile.findRev('.');
+ if (ext >= 0)
+ {
+ QString ft = m_lastfile.right(m_lastfile.length()-ext-1).upper();
+ if (ft.left(3) == "HTM")
+ {
+ m = cHTML;
+ }
+ }
+ }
+ return m;
+}