author | pohly <pohly> | 2005-05-05 14:39:33 (UTC) |
---|---|---|
committer | pohly <pohly> | 2005-05-05 14:39:33 (UTC) |
commit | 39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91 (patch) (unidiff) | |
tree | 96e66fdc18dca4d4ab8611133e072f57dea224b9 | |
parent | 279fc4fd1986074acbadd3a8e86fcf3968a8dd5c (diff) | |
download | opie-39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91.zip opie-39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91.tar.gz opie-39fbfd5eb7e45d73d38e8a2ce9437a3d7e1b8e91.tar.bz2 |
new opie-reader sources with support for ArriereGo, Reb input and flite output plugins
94 files changed, 4630 insertions, 1068 deletions
diff --git a/noncore/apps/opie-reader/Aportis.cpp b/noncore/apps/opie-reader/Aportis.cpp index 353996c..37dcc99 100644 --- a/noncore/apps/opie-reader/Aportis.cpp +++ b/noncore/apps/opie-reader/Aportis.cpp | |||
@@ -54,6 +54,7 @@ CList<Bkmk>* Aportis::getbkmklist() | |||
54 | */ | 54 | */ |
55 | if (bCompressed != 4) return NULL; | 55 | if (bCompressed != 4) return NULL; |
56 | CList<Bkmk>* t = new CList<Bkmk>; | 56 | CList<Bkmk>* t = new CList<Bkmk>; |
57 | unsuspend(); | ||
57 | size_t cur = ftell(fin); | 58 | size_t cur = ftell(fin); |
58 | for (int i = 0; i < nRecs2; i++) | 59 | for (int i = 0; i < nRecs2; i++) |
59 | { | 60 | { |
@@ -246,6 +247,7 @@ int Aportis::getch() | |||
246 | if ((dwRecLen == 0) && !refreshbuffer()) return EOF; | 247 | if ((dwRecLen == 0) && !refreshbuffer()) return EOF; |
247 | else | 248 | else |
248 | { | 249 | { |
250 | unsuspend(); | ||
249 | int c = getc(fin); | 251 | int c = getc(fin); |
250 | dePeanut(c); | 252 | dePeanut(c); |
251 | dwRecLen--; | 253 | dwRecLen--; |
@@ -263,6 +265,7 @@ int Aportis::getch() | |||
263 | int c; | 265 | int c; |
264 | 266 | ||
265 | // take a char from the input buffer | 267 | // take a char from the input buffer |
268 | unsuspend(); | ||
266 | c = getc(fin); | 269 | c = getc(fin); |
267 | dePeanut(c); | 270 | dePeanut(c); |
268 | dwRecLen--; | 271 | dwRecLen--; |
@@ -320,7 +323,7 @@ unsigned int Aportis::GetBS(unsigned int bn) | |||
320 | { | 323 | { |
321 | DWORD dwPos; | 324 | DWORD dwPos; |
322 | WORD fs; | 325 | WORD fs; |
323 | 326 | unsuspend(); | |
324 | fseek(fin, 0x56 + 8*bn, SEEK_SET); | 327 | fseek(fin, 0x56 + 8*bn, SEEK_SET); |
325 | fread(&dwPos, 4, 1, fin); | 328 | fread(&dwPos, 4, 1, fin); |
326 | dwPos = SwapLong(dwPos); | 329 | dwPos = SwapLong(dwPos); |
@@ -343,6 +346,7 @@ unsigned int Aportis::locate() | |||
343 | { | 346 | { |
344 | if (bCompressed == 4) | 347 | if (bCompressed == 4) |
345 | { | 348 | { |
349 | unsuspend(); | ||
346 | size_t cur = ftell(fin); | 350 | size_t cur = ftell(fin); |
347 | unsigned int clen = 0; | 351 | unsigned int clen = 0; |
348 | for (unsigned int i = 0; i < currentrec-1; i++) | 352 | for (unsigned int i = 0; i < currentrec-1; i++) |
@@ -401,6 +405,7 @@ bool Aportis::refreshbuffer() | |||
401 | if (bCompressed == 4) | 405 | if (bCompressed == 4) |
402 | { | 406 | { |
403 | unsigned char t[3]; | 407 | unsigned char t[3]; |
408 | unsuspend(); | ||
404 | fread(t,1,3,fin); | 409 | fread(t,1,3,fin); |
405 | if (t[0] != 241) | 410 | if (t[0] != 241) |
406 | { | 411 | { |
@@ -430,6 +435,7 @@ bool Aportis::refreshbuffer() | |||
430 | 435 | ||
431 | QImage* Aportis::getPicture(unsigned long tgt) | 436 | QImage* Aportis::getPicture(unsigned long tgt) |
432 | { | 437 | { |
438 | unsuspend(); | ||
433 | unsigned short tgtrec = tgt+mobiimagerec; | 439 | unsigned short tgtrec = tgt+mobiimagerec; |
434 | if (tgtrec > nRecs2) return NULL; | 440 | if (tgtrec > nRecs2) return NULL; |
435 | size_t cur = ftell(fin); | 441 | size_t cur = ftell(fin); |
diff --git a/noncore/apps/opie-reader/ArriereCodec/.cvsignore b/noncore/apps/opie-reader/ArriereCodec/.cvsignore new file mode 100644 index 0000000..1810ee0 --- a/dev/null +++ b/noncore/apps/opie-reader/ArriereCodec/.cvsignore | |||
@@ -0,0 +1,5 @@ | |||
1 | Makefile | ||
2 | config.in | ||
3 | moc_* | ||
4 | .moc | ||
5 | .obj | ||
diff --git a/noncore/apps/opie-reader/ArriereCodec/ArriereCodec.pro b/noncore/apps/opie-reader/ArriereCodec/ArriereCodec.pro new file mode 100644 index 0000000..8d820d6 --- a/dev/null +++ b/noncore/apps/opie-reader/ArriereCodec/ArriereCodec.pro | |||
@@ -0,0 +1,16 @@ | |||
1 | DEFINES += OPIE USEQPE | ||
2 | VPATH = .. | ||
3 | TEMPLATE= lib | ||
4 | CONFIG = qt warn_on release dll | ||
5 | HEADERS = arrierego.h | ||
6 | |||
7 | SOURCES = arrierego.cpp | ||
8 | |||
9 | INTERFACES= | ||
10 | DESTDIR = $(OPIEDIR)/plugins/reader/codecs | ||
11 | TARGET = ArriereGo | ||
12 | LIBS += -L$(OPIEDIR)/lib -lreader_pdb -lreader_pluckerbase -lreader_codec | ||
13 | |||
14 | INCLUDEPATH+= $(OPIEDIR)/include | ||
15 | DEPENDPATH += $(OPIEDIR)/include | ||
16 | DEFINES += USENEF | ||
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp index 1f0a524..355d14d 100644 --- a/noncore/apps/opie-reader/BuffDoc.cpp +++ b/noncore/apps/opie-reader/BuffDoc.cpp | |||
@@ -3,7 +3,6 @@ | |||
3 | #define NEWLINEBREAK | 3 | #define NEWLINEBREAK |
4 | #define INCREMENTALWIDTH | 4 | #define INCREMENTALWIDTH |
5 | 5 | ||
6 | #include "usenef.h" | ||
7 | #include "BuffDoc.h" | 6 | #include "BuffDoc.h" |
8 | #include "config.h" | 7 | #include "config.h" |
9 | #include "CDrawBuffer.h" | 8 | #include "CDrawBuffer.h" |
@@ -21,6 +20,7 @@ | |||
21 | #include "arrierego.h" | 20 | #include "arrierego.h" |
22 | #endif | 21 | #endif |
23 | #include "iSilo.h" | 22 | #include "iSilo.h" |
23 | #include "Reb.h" | ||
24 | #endif | 24 | #endif |
25 | 25 | ||
26 | 26 | ||
@@ -60,6 +60,18 @@ void BuffDoc::locate(unsigned int n) | |||
60 | // //qDebug("BuffDoc:Located"); | 60 | // //qDebug("BuffDoc:Located"); |
61 | } | 61 | } |
62 | 62 | ||
63 | void BuffDoc::resetPos() | ||
64 | { | ||
65 | // //qDebug("BuffDoc:locating:%u",n); | ||
66 | lastword.empty(); | ||
67 | lastsizes[0] = laststartline = exp->locate(); | ||
68 | #ifdef NEWLINEBREAK | ||
69 | lastispara = false; | ||
70 | #else | ||
71 | lastispara = false; | ||
72 | #endif | ||
73 | } | ||
74 | |||
63 | static bool isletter(unsigned short c) | 75 | static bool isletter(unsigned short c) |
64 | { | 76 | { |
65 | if ('a' <= c && c <= 'z') return true; | 77 | if ('a' <= c && c <= 'z') return true; |
@@ -635,6 +647,13 @@ int BuffDoc::openfile(QWidget* _parent, const char *src) | |||
635 | { | 647 | { |
636 | delete exp; | 648 | delete exp; |
637 | //qDebug("Trying ppms"); | 649 | //qDebug("Trying ppms"); |
650 | exp = new CReb; | ||
651 | ret = exp->openfile(src); | ||
652 | } | ||
653 | if (ret != 0) | ||
654 | { | ||
655 | delete exp; | ||
656 | //qDebug("Trying ppms"); | ||
638 | exp = new ppm_expander; | 657 | exp = new ppm_expander; |
639 | ret = exp->openfile(src); | 658 | ret = exp->openfile(src); |
640 | } | 659 | } |
@@ -655,7 +674,17 @@ int BuffDoc::openfile(QWidget* _parent, const char *src) | |||
655 | } | 674 | } |
656 | // //qDebug("Doing final open:%x:%x",exp,filt); | 675 | // //qDebug("Doing final open:%x:%x",exp,filt); |
657 | #else | 676 | #else |
658 | QString codecpath(QTReaderUtil::getPluginPath()); | 677 | #ifdef USEQPE |
678 | #ifdef OPIE | ||
679 | QString codecpath(getenv("OPIEDIR")); | ||
680 | #else | ||
681 | QString codecpath(getenv("QTDIR")); | ||
682 | #endif | ||
683 | codecpath += "/plugins/reader/codecs"; | ||
684 | #else | ||
685 | QString codecpath(getenv("READERDIR")); | ||
686 | codecpath += "/codecs"; | ||
687 | #endif | ||
659 | QDir d(codecpath, "*.so"); | 688 | QDir d(codecpath, "*.so"); |
660 | 689 | ||
661 | if (d.exists()) | 690 | if (d.exists()) |
@@ -706,3 +735,25 @@ QString BuffDoc::about() | |||
706 | { | 735 | { |
707 | return QString("Buffered Decompressor (c) Tim Wentford\nHyphenation algorithm (c) Tim Wentford\n (Cyrillic support by Konstantin Isakov\n")+filt->about(); | 736 | return QString("Buffered Decompressor (c) Tim Wentford\nHyphenation algorithm (c) Tim Wentford\n (Cyrillic support by Konstantin Isakov\n")+filt->about(); |
708 | } | 737 | } |
738 | |||
739 | int BuffDoc::getsentence(CBuffer& buff) | ||
740 | { | ||
741 | tchar ch; | ||
742 | int i = 0; | ||
743 | bool intext = false; | ||
744 | while ((ch = getch()) != 10 && ch != UEOF) | ||
745 | { | ||
746 | buff[i++] = ch; | ||
747 | if (ch == '"' || ch == '\'' || ch == 0x2018 || ch == 0x2019 || | ||
748 | ch == 0x201a || ch == 0x201b || ch == 0x201c || ch == 0x201d) | ||
749 | { | ||
750 | intext = !intext; | ||
751 | } | ||
752 | if (!intext && (ch == '.' || ch == '!' || ch == '?')) break; | ||
753 | } | ||
754 | |||
755 | buff[i] = '\0'; | ||
756 | if (i == 0 && ch == UEOF) i = -1; | ||
757 | laststartline = exp->locate(); | ||
758 | return i; | ||
759 | } | ||
diff --git a/noncore/apps/opie-reader/BuffDoc.h b/noncore/apps/opie-reader/BuffDoc.h index 2b4fb57..d6bfd99 100644 --- a/noncore/apps/opie-reader/BuffDoc.h +++ b/noncore/apps/opie-reader/BuffDoc.h | |||
@@ -47,10 +47,8 @@ class BuffDoc | |||
47 | } | 47 | } |
48 | #ifdef USEQPE | 48 | #ifdef USEQPE |
49 | void suspend() { if (exp != NULL) exp->suspend(); } | 49 | void suspend() { if (exp != NULL) exp->suspend(); } |
50 | void unsuspend() { if (exp != NULL) exp->unsuspend(); } | ||
51 | #else | 50 | #else |
52 | void suspend() {} | 51 | void suspend() {} |
53 | void unsuspend() {} | ||
54 | #endif | 52 | #endif |
55 | ~BuffDoc() | 53 | ~BuffDoc() |
56 | { | 54 | { |
@@ -95,10 +93,22 @@ class BuffDoc | |||
95 | else | 93 | else |
96 | ch = UEOF; | 94 | ch = UEOF; |
97 | } | 95 | } |
96 | /* | ||
97 | void rawgetch(tchar& ch, CStyle& sty, unsigned long& pos) | ||
98 | { | ||
99 | if (exp != NULL) | ||
100 | { | ||
101 | filt->rawgetch(ch, sty, pos); | ||
102 | } | ||
103 | else | ||
104 | ch = UEOF; | ||
105 | } | ||
106 | */ | ||
98 | void setwidth(int w) { if (exp != NULL) exp->setwidth(w); } | 107 | void setwidth(int w) { if (exp != NULL) exp->setwidth(w); } |
99 | QImage* getPicture(unsigned long tgt) { return (exp == NULL) ? NULL : exp->getPicture(tgt); } | 108 | QImage* getPicture(unsigned long tgt) { return (exp == NULL) ? NULL : exp->getPicture(tgt); } |
100 | unsigned int startSection() { return (exp == NULL) ? 0 : exp->startSection(); } | 109 | unsigned int startSection() { return (exp == NULL) ? 0 : exp->startSection(); } |
101 | unsigned int endSection() { return (exp == NULL) ? 0 : exp->endSection(); } | 110 | unsigned int endSection() { return (exp == NULL) ? 0 : exp->endSection(); } |
111 | void resetPos(); | ||
102 | unsigned int locate() { return (exp == NULL) ? 0 : laststartline; } | 112 | unsigned int locate() { return (exp == NULL) ? 0 : laststartline; } |
103 | unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); } | 113 | unsigned int explocate() { return (exp == NULL) ? 0 : exp->locate(); } |
104 | void setContinuous(bool _b) { if (exp != NULL) exp->setContinuous(_b); } | 114 | void setContinuous(bool _b) { if (exp != NULL) exp->setContinuous(_b); } |
@@ -129,14 +139,19 @@ class BuffDoc | |||
129 | laststartline = exp->locate(); | 139 | laststartline = exp->locate(); |
130 | return i; | 140 | return i; |
131 | } | 141 | } |
142 | int getsentence(CBuffer& buff); | ||
132 | void saveposn(const QString& f, size_t posn) { filt->saveposn(f, posn); } | 143 | void saveposn(const QString& f, size_t posn) { filt->saveposn(f, posn); } |
133 | void writeposn(const QString& f, size_t posn) { filt->writeposn(f, posn); } | 144 | void writeposn(const QString& f, size_t posn) { filt->writeposn(f, posn); } |
134 | linkType forward(QString& f, size_t& loc) { return filt->forward(f, loc); } | 145 | linkType forward(QString& f, size_t& loc) { return filt->forward(f, loc); } |
135 | linkType back(QString& f, size_t& loc) { return filt->back(f, loc); } | 146 | linkType back(QString& f, size_t& loc) { return filt->back(f, loc); } |
136 | bool hasnavigation() { return filt->hasnavigation(); } | 147 | bool hasnavigation() { return (exp == NULL) ? false : filt->hasnavigation(); } |
137 | bool getFile(QString href) | 148 | bool getFile(const QString& href, QString& nm) |
149 | { | ||
150 | return (exp == NULL) ? false : exp->getFile(href, nm); | ||
151 | } | ||
152 | QString getTableAsHtml(unsigned long loc) | ||
138 | { | 153 | { |
139 | return (exp == NULL) ? false : exp->getFile(href); | 154 | return (exp != NULL) ? filt->getTableAsHtml(loc) : QString(""); |
140 | } | 155 | } |
141 | }; | 156 | }; |
142 | 157 | ||
diff --git a/noncore/apps/opie-reader/ButtonPrefs.cpp b/noncore/apps/opie-reader/ButtonPrefs.cpp index 50365a8..762de55 100644 --- a/noncore/apps/opie-reader/ButtonPrefs.cpp +++ b/noncore/apps/opie-reader/ButtonPrefs.cpp | |||
@@ -152,6 +152,10 @@ CButtonPrefs::CButtonPrefs( QMap<orKey, int>* _kmap, QWidget* parent, const cha | |||
152 | debounce = new QSpinBox( this, "Debounce" ); | 152 | debounce = new QSpinBox( this, "Debounce" ); |
153 | debounce->setRange(0,1000); | 153 | debounce->setRange(0,1000); |
154 | lo->addWidget(debounce); | 154 | lo->addWidget(debounce); |
155 | /* | ||
156 | QPushButton* assignClose = new QPushButton("Assign\nCancel", this); | ||
157 | lo->addWidget(assignClose); | ||
158 | */ | ||
155 | lo->addStretch(1); | 159 | lo->addStretch(1); |
156 | QPushButton* delButton = new QPushButton("Delete", this); | 160 | QPushButton* delButton = new QPushButton("Delete", this); |
157 | connect(delButton, SIGNAL( clicked() ), this, SLOT( erasemapping() )); | 161 | connect(delButton, SIGNAL( clicked() ), this, SLOT( erasemapping() )); |
diff --git a/noncore/apps/opie-reader/CDrawBuffer.cpp b/noncore/apps/opie-reader/CDrawBuffer.cpp index bfb3027..227f0f6 100644 --- a/noncore/apps/opie-reader/CDrawBuffer.cpp +++ b/noncore/apps/opie-reader/CDrawBuffer.cpp | |||
@@ -364,6 +364,7 @@ int CDrawBuffer::offset(int scwidth, unsigned short _lborder, unsigned short _rb | |||
364 | break; | 364 | break; |
365 | case m_AlignJustify: | 365 | case m_AlignJustify: |
366 | case m_AlignLeft: | 366 | case m_AlignLeft: |
367 | case m_AlignNone: | ||
367 | currentx = _lborder + leftMargin(); | 368 | currentx = _lborder + leftMargin(); |
368 | break; | 369 | break; |
369 | } | 370 | } |
@@ -484,7 +485,7 @@ void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int | |||
484 | _p->setFont(f); | 485 | _p->setFont(f); |
485 | QString str = text.mid(textstart->start, end-textstart->start); | 486 | QString str = text.mid(textstart->start, end-textstart->start); |
486 | #if defined(OPIE) || !defined(USEQPE) | 487 | #if defined(OPIE) || !defined(USEQPE) |
487 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100)); | 488 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10/*0*/)); |
488 | #else | 489 | #else |
489 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10)); | 490 | _p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10)); |
490 | #endif | 491 | #endif |
@@ -658,7 +659,7 @@ CStyle CDrawBuffer::firststyle() | |||
658 | return segs.first().style; | 659 | return segs.first().style; |
659 | } | 660 | } |
660 | 661 | ||
661 | linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt, size_t& offset, size_t& pictgt, QImage*& img) | 662 | linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt, size_t& offset, size_t& pictgt, QImage*& img, size_t& tabletgt) |
662 | { | 663 | { |
663 | linkType ret = eNone; | 664 | linkType ret = eNone; |
664 | int end = 0; | 665 | int end = 0; |
@@ -690,6 +691,11 @@ linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt, size_t& offset, siz | |||
690 | offset = currentstyle.getOffset(); | 691 | offset = currentstyle.getOffset(); |
691 | ret |= eLink; | 692 | ret |= eLink; |
692 | } | 693 | } |
694 | if (currentstyle.isTable()) | ||
695 | { | ||
696 | tabletgt = currentstyle.getTable(); | ||
697 | ret |= eTable; | ||
698 | } | ||
693 | return ret; | 699 | return ret; |
694 | } | 700 | } |
695 | 701 | ||
@@ -716,7 +722,7 @@ void CDrawBuffer::resize(int availht) | |||
716 | } | 722 | } |
717 | if (m_hastext) | 723 | if (m_hastext) |
718 | { | 724 | { |
719 | 725 | int p_linespacing = 0; | |
720 | for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= len; ) | 726 | for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= len; ) |
721 | { | 727 | { |
722 | CList<textsegment>::iterator next = iter; | 728 | CList<textsegment>::iterator next = iter; |
@@ -756,6 +762,17 @@ void CDrawBuffer::resize(int availht) | |||
756 | descent = ((gzoom*_style.getPicture()->height())/100-ascent)/2; | 762 | descent = ((gzoom*_style.getPicture()->height())/100-ascent)/2; |
757 | ascent = ((gzoom*_style.getPicture()->height())/100+ascent)/2; | 763 | ascent = ((gzoom*_style.getPicture()->height())/100+ascent)/2; |
758 | } | 764 | } |
765 | else | ||
766 | { | ||
767 | descent = (_style.getPicture()->height()-ascent)/2; | ||
768 | ascent = (_style.getPicture()->height()+ascent)/2; | ||
769 | } | ||
770 | int lineSpacing = ascent+descent; | ||
771 | if (lineSpacing > p_linespacing) | ||
772 | { | ||
773 | p_linespacing = lineSpacing; | ||
774 | } | ||
775 | extra = 0; | ||
759 | } | 776 | } |
760 | 777 | ||
761 | /* | 778 | /* |
@@ -772,7 +789,7 @@ void CDrawBuffer::resize(int availht) | |||
772 | if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra; | 789 | if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra; |
773 | m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing; | 790 | m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing; |
774 | } | 791 | } |
775 | m_showPartial = (m_lineSpacing > t_lineSpacing); | 792 | m_showPartial = (p_linespacing > t_lineSpacing); |
776 | int lead = fc->getlead(); | 793 | int lead = fc->getlead(); |
777 | if (lead != 0) | 794 | if (lead != 0) |
778 | { | 795 | { |
diff --git a/noncore/apps/opie-reader/CDrawBuffer.h b/noncore/apps/opie-reader/CDrawBuffer.h index 2625a72..1782cf8 100644 --- a/noncore/apps/opie-reader/CDrawBuffer.h +++ b/noncore/apps/opie-reader/CDrawBuffer.h | |||
@@ -78,7 +78,7 @@ class CDrawBuffer : public CBuffer | |||
78 | int lineExtraSpacing() { return m_lineExtraSpacing; } | 78 | int lineExtraSpacing() { return m_lineExtraSpacing; } |
79 | 79 | ||
80 | // void frig(); | 80 | // void frig(); |
81 | linkType getLinkType(int numchars, size_t& tgt, size_t& offset, size_t& pictgt, QImage*&); | 81 | linkType getLinkType(int numchars, size_t& tgt, size_t& offset, size_t& pictgt, QImage*&, size_t&); |
82 | void resize(int); | 82 | void resize(int); |
83 | bool showPartial() { return m_showPartial; } | 83 | bool showPartial() { return m_showPartial; } |
84 | CStyle* getNextLink(int&); | 84 | CStyle* getNextLink(int&); |
diff --git a/noncore/apps/opie-reader/CEncoding.h b/noncore/apps/opie-reader/CEncoding.h index 1dfd74d..76cbfae 100644 --- a/noncore/apps/opie-reader/CEncoding.h +++ b/noncore/apps/opie-reader/CEncoding.h | |||
@@ -12,11 +12,19 @@ class CEncoding : public CCharacterSource | |||
12 | CExpander_Interface* parent; | 12 | CExpander_Interface* parent; |
13 | linkType hyperlink(unsigned int n, unsigned int noff, QString& t, QString& nm) { return parent->hyperlink(n, noff, t, nm); } | 13 | linkType hyperlink(unsigned int n, unsigned int noff, QString& t, QString& nm) { return parent->hyperlink(n, noff, t, nm); } |
14 | public: | 14 | public: |
15 | virtual QString getTableAsHtml(unsigned long loc) | ||
16 | { | ||
17 | qDebug("CEncoding::getTableAsHtml()"); | ||
18 | return parent->getTableAsHtml(loc); | ||
19 | } | ||
15 | CEncoding() : parent(NULL) {} | 20 | CEncoding() : parent(NULL) {} |
16 | void setparent(CExpander_Interface* p) { parent = p; } | 21 | void setparent(CExpander_Interface* p) { parent = p; } |
17 | virtual ~CEncoding() {}; | 22 | virtual ~CEncoding() {}; |
18 | void locate(unsigned int n) { parent->locate(n); } | 23 | void locate(unsigned int n) { parent->locate(n); } |
19 | bool findanchor(const QString& nm) { return false; } | 24 | bool findanchor(const QString& nm) |
25 | { | ||
26 | return parent->findanchor(nm); | ||
27 | } | ||
20 | void saveposn(const QString& f, size_t posn) { parent->saveposn(posn); } | 28 | void saveposn(const QString& f, size_t posn) { parent->saveposn(posn); } |
21 | void writeposn(const QString& f, size_t posn) { parent->writeposn(posn); } | 29 | void writeposn(const QString& f, size_t posn) { parent->writeposn(posn); } |
22 | linkType forward(QString& f, size_t& loc) { return parent->forward(loc); } | 30 | linkType forward(QString& f, size_t& loc) { return parent->forward(loc); } |
@@ -25,9 +33,8 @@ public: | |||
25 | virtual int getwidth() { return parent->getwidth(); } | 33 | virtual int getwidth() { return parent->getwidth(); } |
26 | QImage* getPicture(unsigned long tgt) { return parent->getPicture(tgt); } | 34 | QImage* getPicture(unsigned long tgt) { return parent->getPicture(tgt); } |
27 | QImage* getPicture(const QString& href) { return parent->getPicture(href); } | 35 | QImage* getPicture(const QString& href) { return parent->getPicture(href); } |
28 | bool getFile(const QString& href) { qDebug("Encoding Get File"); return parent->getFile(href);} | 36 | bool getFile(const QString& href, const QString& nm) { qDebug("Encoding Get File"); return parent->getFile(href, nm);} |
29 | 37 | unsigned long startSection() { return parent->startSection(); } | |
30 | |||
31 | }; | 38 | }; |
32 | 39 | ||
33 | class CUtf8 : public CEncoding | 40 | class CUtf8 : public CEncoding |
diff --git a/noncore/apps/opie-reader/CExpander.cpp b/noncore/apps/opie-reader/CExpander.cpp index e398d86..1158a7a 100644 --- a/noncore/apps/opie-reader/CExpander.cpp +++ b/noncore/apps/opie-reader/CExpander.cpp | |||
@@ -1,4 +1,7 @@ | |||
1 | #include "CExpander.h" | 1 | #include "CExpander.h" |
2 | #ifdef USEQPE | ||
3 | #include <qpe/global.h> | ||
4 | #endif | ||
2 | 5 | ||
3 | size_t CExpander::getHome() { return m_homepos; } | 6 | size_t CExpander::getHome() { return m_homepos; } |
4 | 7 | ||
@@ -70,10 +73,15 @@ void CExpander::unsuspend(FILE*& fin) | |||
70 | { | 73 | { |
71 | bSuspended = false; | 74 | bSuspended = false; |
72 | int delay = time(NULL) - sustime; | 75 | int delay = time(NULL) - sustime; |
73 | if (delay < 10) sleep(10-delay); | 76 | if (delay < 10) |
77 | { | ||
78 | Global::statusMessage("Stalling"); | ||
79 | sleep(10-delay); | ||
80 | } | ||
74 | fin = fopen(fname, "rb"); | 81 | fin = fopen(fname, "rb"); |
75 | for (int i = 0; fin == NULL && i < 5; i++) | 82 | for (int i = 0; fin == NULL && i < 5; i++) |
76 | { | 83 | { |
84 | Global::statusMessage("Stalling"); | ||
77 | sleep(5); | 85 | sleep(5); |
78 | fin = fopen(fname, "rb"); | 86 | fin = fopen(fname, "rb"); |
79 | } | 87 | } |
diff --git a/noncore/apps/opie-reader/CExpander.h b/noncore/apps/opie-reader/CExpander.h index 7fa84f9..24c317d 100644 --- a/noncore/apps/opie-reader/CExpander.h +++ b/noncore/apps/opie-reader/CExpander.h | |||
@@ -24,6 +24,7 @@ class CList; | |||
24 | class CCharacterSource | 24 | class CCharacterSource |
25 | { | 25 | { |
26 | public: | 26 | public: |
27 | virtual QString getTableAsHtml(unsigned long loc) = 0; | ||
27 | virtual void getch(tchar&, CStyle&, unsigned long&) = 0; | 28 | virtual void getch(tchar&, CStyle&, unsigned long&) = 0; |
28 | virtual linkType hyperlink(unsigned int n, unsigned int noff, QString&, QString& nm) = 0; | 29 | virtual linkType hyperlink(unsigned int n, unsigned int noff, QString&, QString& nm) = 0; |
29 | virtual void locate(unsigned int n) = 0; | 30 | virtual void locate(unsigned int n) = 0; |
@@ -36,8 +37,9 @@ class CCharacterSource | |||
36 | virtual int getwidth() = 0; | 37 | virtual int getwidth() = 0; |
37 | virtual QImage* getPicture(unsigned long) = 0; | 38 | virtual QImage* getPicture(unsigned long) = 0; |
38 | virtual QImage* getPicture(const QString& href) = 0; | 39 | virtual QImage* getPicture(const QString& href) = 0; |
39 | virtual bool getFile(const QString& href) = 0; | 40 | virtual bool getFile(const QString& href, const QString& nm) = 0; |
40 | virtual QString about() = 0; | 41 | virtual QString about() = 0; |
42 | virtual unsigned long startSection() = 0; | ||
41 | }; | 43 | }; |
42 | 44 | ||
43 | class CExpander_Interface | 45 | class CExpander_Interface |
@@ -83,7 +85,9 @@ class CExpander_Interface | |||
83 | // int getpara(CBuffer& buff); | 85 | // int getpara(CBuffer& buff); |
84 | virtual int getwidth() = 0; | 86 | virtual int getwidth() = 0; |
85 | virtual QImage* getPicture(const QString& href) = 0; | 87 | virtual QImage* getPicture(const QString& href) = 0; |
86 | virtual bool getFile(const QString& href) = 0; | 88 | virtual bool getFile(const QString& href, const QString& nm) = 0; |
89 | virtual bool findanchor(const QString& nm) = 0; | ||
90 | virtual QString getTableAsHtml(unsigned long loc) { return QString(""); } | ||
87 | }; | 91 | }; |
88 | 92 | ||
89 | class CExpander : public CExpander_Interface | 93 | class CExpander : public CExpander_Interface |
@@ -143,6 +147,10 @@ class CExpander : public CExpander_Interface | |||
143 | // bool findstring(const QString& info); | 147 | // bool findstring(const QString& info); |
144 | // int getpara(CBuffer& buff); | 148 | // int getpara(CBuffer& buff); |
145 | virtual QImage* getPicture(const QString& href) { return NULL; } | 149 | virtual QImage* getPicture(const QString& href) { return NULL; } |
146 | virtual bool getFile(const QString& href) { return false; } | 150 | virtual bool getFile(const QString& href, const QString& nm) { return false; } |
151 | virtual bool findanchor(const QString& nm) | ||
152 | { | ||
153 | return false; | ||
154 | } | ||
147 | }; | 155 | }; |
148 | #endif | 156 | #endif |
diff --git a/noncore/apps/opie-reader/CFilter.cpp b/noncore/apps/opie-reader/CFilter.cpp index ab98829..25cdfae 100644 --- a/noncore/apps/opie-reader/CFilter.cpp +++ b/noncore/apps/opie-reader/CFilter.cpp | |||
@@ -2,13 +2,13 @@ | |||
2 | #include <qfileinfo.h> | 2 | #include <qfileinfo.h> |
3 | #include <qtextstream.h> | 3 | #include <qtextstream.h> |
4 | #include <qdir.h> | 4 | #include <qdir.h> |
5 | |||
5 | #ifdef USEQPE | 6 | #ifdef USEQPE |
6 | #include <qpe/global.h> | 7 | #include <qpe/global.h> |
7 | #endif | 8 | #endif |
8 | #include "CDrawBuffer.h" | 9 | #include "CDrawBuffer.h" |
9 | #include "CFilter.h" | 10 | #include "CFilter.h" |
10 | #include "hrule.h" | 11 | #include "hrule.h" |
11 | #include "util.h" | ||
12 | 12 | ||
13 | #include <qregexp.h> | 13 | #include <qregexp.h> |
14 | #include <qimage.h> | 14 | #include <qimage.h> |
@@ -665,8 +665,17 @@ class ErrorFilter : public CFilter | |||
665 | #ifndef __STATIC | 665 | #ifndef __STATIC |
666 | ExternFilter::ExternFilter(const QString& nm, const QString& optional) : filt(NULL), handle(NULL) | 666 | ExternFilter::ExternFilter(const QString& nm, const QString& optional) : filt(NULL), handle(NULL) |
667 | { | 667 | { |
668 | QString filterpath(QTReaderUtil::getPluginPath("filters")); | 668 | #ifdef USEQPE |
669 | filterpath += "/lib"; | 669 | #ifdef OPIE |
670 | QString filterpath(getenv("OPIEDIR")); | ||
671 | #else | ||
672 | QString filterpath(getenv("QTDIR")); | ||
673 | #endif | ||
674 | filterpath += "/plugins/reader/filters/lib"; | ||
675 | #else | ||
676 | QString filterpath(getenv("READERDIR")); | ||
677 | filterpath += "/filters/lib"; | ||
678 | #endif | ||
670 | filterpath += nm; | 679 | filterpath += nm; |
671 | filterpath += ".so"; | 680 | filterpath += ".so"; |
672 | if (QFile::exists(filterpath)) | 681 | if (QFile::exists(filterpath)) |
@@ -692,7 +701,7 @@ ExternFilter::ExternFilter(const QString& nm, const QString& optional) : filt(NU | |||
692 | } | 701 | } |
693 | else | 702 | else |
694 | { | 703 | { |
695 | qDebug("No filter path"); | 704 | qDebug("No filter path:%s", (const char*)filterpath); |
696 | filt = new ErrorFilter(QString("No filter plugins installed:")+nm); | 705 | filt = new ErrorFilter(QString("No filter plugins installed:")+nm); |
697 | } | 706 | } |
698 | if (filt == NULL) | 707 | if (filt == NULL) |
@@ -813,3 +822,40 @@ void repara::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
813 | */ | 822 | */ |
814 | return; | 823 | return; |
815 | } | 824 | } |
825 | |||
826 | void tableLink::getch(tchar& ch, CStyle& sty, unsigned long& pos) | ||
827 | { | ||
828 | if (offset >= (int)text.length()) | ||
829 | { | ||
830 | offset = -1; | ||
831 | sty.setColour(m_r, m_g, m_b); | ||
832 | do | ||
833 | { | ||
834 | parent->getch(ch, sty, pos); | ||
835 | } | ||
836 | while (sty.isTable()); | ||
837 | return; | ||
838 | } | ||
839 | if (offset >= 0) | ||
840 | { | ||
841 | ch = text[offset++].unicode(); | ||
842 | return; | ||
843 | } | ||
844 | parent->getch(ch, sty, pos); | ||
845 | if (sty.isTable()) | ||
846 | { | ||
847 | offset = 1; | ||
848 | ch = text[0].unicode(); | ||
849 | m_r = sty.Red(), m_g = sty.Green(), m_b = sty.Blue(); | ||
850 | sty.setColour(255, 0, 0); | ||
851 | } | ||
852 | return; | ||
853 | } | ||
854 | |||
855 | void underlineLink::getch(tchar& ch, CStyle& sty, unsigned long& pos) | ||
856 | { | ||
857 | parent->getch(ch, sty, pos); | ||
858 | if (sty.getLink()) sty.setUnderline(); | ||
859 | //if (isLink && !sty.getLink()) sty.unsetUnderline(); | ||
860 | //isLink = sty.getLink(); | ||
861 | } | ||
diff --git a/noncore/apps/opie-reader/CFilter.h b/noncore/apps/opie-reader/CFilter.h index 174e6b4..594b606 100644 --- a/noncore/apps/opie-reader/CFilter.h +++ b/noncore/apps/opie-reader/CFilter.h | |||
@@ -19,6 +19,7 @@ class CFilter_IFace : public CCharacterSource | |||
19 | virtual bool hasnavigation() = 0; | 19 | virtual bool hasnavigation() = 0; |
20 | virtual int getwidth() = 0; | 20 | virtual int getwidth() = 0; |
21 | virtual CCharacterSource* getparent() = 0; | 21 | virtual CCharacterSource* getparent() = 0; |
22 | virtual unsigned long startSection() = 0; | ||
22 | }; | 23 | }; |
23 | 24 | ||
24 | class CFilter : public CFilter_IFace | 25 | class CFilter : public CFilter_IFace |
@@ -26,6 +27,11 @@ class CFilter : public CFilter_IFace | |||
26 | protected: | 27 | protected: |
27 | CCharacterSource* parent; | 28 | CCharacterSource* parent; |
28 | public: | 29 | public: |
30 | virtual QString getTableAsHtml(unsigned long loc) | ||
31 | { | ||
32 | qDebug("CFilter::getTableAsHtml()"); | ||
33 | return parent->getTableAsHtml(loc); | ||
34 | } | ||
29 | virtual linkType hyperlink(unsigned int n, unsigned int noff, QString& w, QString& nm) | 35 | virtual linkType hyperlink(unsigned int n, unsigned int noff, QString& w, QString& nm) |
30 | { | 36 | { |
31 | return parent->hyperlink(n,noff,w,nm); | 37 | return parent->hyperlink(n,noff,w,nm); |
@@ -50,7 +56,8 @@ class CFilter : public CFilter_IFace | |||
50 | virtual int getwidth() { return parent->getwidth(); } | 56 | virtual int getwidth() { return parent->getwidth(); } |
51 | QImage* getPicture(unsigned long tgt) { return parent->getPicture(tgt); } | 57 | QImage* getPicture(unsigned long tgt) { return parent->getPicture(tgt); } |
52 | QImage* getPicture(const QString& href) { return parent->getPicture(href); } | 58 | QImage* getPicture(const QString& href) { return parent->getPicture(href); } |
53 | bool getFile(const QString& href) { return parent->getFile(href); } | 59 | bool getFile(const QString& href, const QString& nm) { return parent->getFile(href, nm); } |
60 | virtual unsigned long startSection() { return parent->startSection(); } | ||
54 | }; | 61 | }; |
55 | 62 | ||
56 | class CFilterChain | 63 | class CFilterChain |
@@ -76,6 +83,10 @@ class CFilterChain | |||
76 | { | 83 | { |
77 | return front->hyperlink(n, noff, wrd, nm); | 84 | return front->hyperlink(n, noff, wrd, nm); |
78 | } | 85 | } |
86 | QString getTableAsHtml(unsigned long loc) | ||
87 | { | ||
88 | return front->getTableAsHtml(loc); | ||
89 | } | ||
79 | void locate(unsigned int n) | 90 | void locate(unsigned int n) |
80 | { | 91 | { |
81 | front->locate(n); | 92 | front->locate(n); |
@@ -84,6 +95,12 @@ class CFilterChain | |||
84 | { | 95 | { |
85 | front->getch(ch, sty, pos); | 96 | front->getch(ch, sty, pos); |
86 | } | 97 | } |
98 | /* | ||
99 | void rawgetch(tchar& ch, CStyle& sty, unsigned long& pos) | ||
100 | { | ||
101 | encoder->getch(ch, sty, pos); | ||
102 | } | ||
103 | */ | ||
87 | void addfilter(CFilter_IFace* p) | 104 | void addfilter(CFilter_IFace* p) |
88 | { | 105 | { |
89 | if (first == NULL) | 106 | if (first == NULL) |
@@ -403,6 +420,11 @@ class ExternFilter : public CFilter_IFace | |||
403 | { | 420 | { |
404 | return filt->hyperlink(n, noff, w, nm); | 421 | return filt->hyperlink(n, noff, w, nm); |
405 | } | 422 | } |
423 | QString getTableAsHtml(unsigned long loc) | ||
424 | { | ||
425 | qDebug("ExternFilter::getTableAsHtml()"); | ||
426 | return filt->getTableAsHtml(loc); | ||
427 | } | ||
406 | void setparent(CCharacterSource* p) { filt->setparent(p); } | 428 | void setparent(CCharacterSource* p) { filt->setparent(p); } |
407 | ExternFilter(const QString& nm, const QString& optional); | 429 | ExternFilter(const QString& nm, const QString& optional); |
408 | ~ExternFilter() | 430 | ~ExternFilter() |
@@ -411,7 +433,10 @@ class ExternFilter : public CFilter_IFace | |||
411 | if (handle != NULL) dlclose(handle); | 433 | if (handle != NULL) dlclose(handle); |
412 | } | 434 | } |
413 | void locate(unsigned int n) { filt->locate(n); } | 435 | void locate(unsigned int n) { filt->locate(n); } |
414 | bool findanchor(const QString& nm) { return filt->findanchor(nm); } | 436 | bool findanchor(const QString& nm) |
437 | { | ||
438 | return filt->findanchor(nm); | ||
439 | } | ||
415 | void saveposn(const QString& f, size_t posn) { filt->saveposn(f, posn); } | 440 | void saveposn(const QString& f, size_t posn) { filt->saveposn(f, posn); } |
416 | void writeposn(const QString& f, size_t posn) { filt->writeposn(f, posn); } | 441 | void writeposn(const QString& f, size_t posn) { filt->writeposn(f, posn); } |
417 | linkType forward(QString& f, size_t& loc) { return filt->forward(f, loc); } | 442 | linkType forward(QString& f, size_t& loc) { return filt->forward(f, loc); } |
@@ -423,8 +448,9 @@ class ExternFilter : public CFilter_IFace | |||
423 | QImage* getPicture(unsigned long tgt) { return filt->getPicture(tgt); } | 448 | QImage* getPicture(unsigned long tgt) { return filt->getPicture(tgt); } |
424 | CFilter* filter() { return filt; } | 449 | CFilter* filter() { return filt; } |
425 | QImage* getPicture(const QString& href) { return filt->getPicture(href); } | 450 | QImage* getPicture(const QString& href) { return filt->getPicture(href); } |
426 | bool getFile(const QString& href) { return filt->getFile(href); } | 451 | bool getFile(const QString& href, const QString& nm) { return filt->getFile(href, nm); } |
427 | QString about() { return QString("Filter plug-in (c) Tim Wentford\n")+filt->about(); } | 452 | QString about() { return QString("Filter plug-in (c) Tim Wentford\n")+filt->about(); } |
453 | unsigned long startSection() { return filt->startSection(); } | ||
428 | }; | 454 | }; |
429 | #endif | 455 | #endif |
430 | 456 | ||
@@ -471,4 +497,27 @@ class setfg : public CFilter | |||
471 | QString about() { return QString("Foreground colour filter (c) Tim Wentford\n")+parent->about(); } | 497 | QString about() { return QString("Foreground colour filter (c) Tim Wentford\n")+parent->about(); } |
472 | }; | 498 | }; |
473 | 499 | ||
500 | class tableLink : public CFilter | ||
501 | { | ||
502 | QString text; | ||
503 | int offset; | ||
504 | int m_r, m_g, m_b; | ||
505 | public: | ||
506 | tableLink() : text( "See Table" ), offset(-1) | ||
507 | { | ||
508 | } | ||
509 | void getch(tchar& ch, CStyle& sty, unsigned long& pos); | ||
510 | QString about() { return QString("Table link filter (c) Tim Wentford\n")+parent->about(); } | ||
511 | }; | ||
512 | |||
513 | class underlineLink : public CFilter | ||
514 | { | ||
515 | bool isLink; | ||
516 | public: | ||
517 | underlineLink() : isLink(false) {} | ||
518 | ~underlineLink() {} | ||
519 | void getch(tchar& ch, CStyle& sty, unsigned long& pos); | ||
520 | QString about() { return QString("Link underlining filter (c) Tim Wentford\n")+parent->about(); } | ||
521 | }; | ||
522 | |||
474 | #endif | 523 | #endif |
diff --git a/noncore/apps/opie-reader/CHM.cpp b/noncore/apps/opie-reader/CHM.cpp index 88d53bf..ace5abc 100644 --- a/noncore/apps/opie-reader/CHM.cpp +++ b/noncore/apps/opie-reader/CHM.cpp | |||
@@ -5,6 +5,9 @@ | |||
5 | #include <stdio.h> | 5 | #include <stdio.h> |
6 | #include <qimage.h> | 6 | #include <qimage.h> |
7 | #include <qpixmap.h> | 7 | #include <qpixmap.h> |
8 | #ifdef USEQPE | ||
9 | #include <qpe/global.h> | ||
10 | #endif | ||
8 | 11 | ||
9 | #ifndef __STATIC | 12 | #ifndef __STATIC |
10 | extern "C" | 13 | extern "C" |
@@ -66,9 +69,13 @@ void CHM::unsuspend() { | |||
66 | bSuspended = false; | 69 | bSuspended = false; |
67 | int delay = time(NULL) - sustime; | 70 | int delay = time(NULL) - sustime; |
68 | if (delay < 10) | 71 | if (delay < 10) |
72 | { | ||
73 | Global::statusMessage("Stalling"); | ||
69 | sleep(10-delay); | 74 | sleep(10-delay); |
75 | } | ||
70 | chmFile = chm_open(fname); | 76 | chmFile = chm_open(fname); |
71 | for (int i = 0; chmFile == NULL && i < 5; i++) { | 77 | for (int i = 0; chmFile == NULL && i < 5; i++) { |
78 | Global::statusMessage("Stalling"); | ||
72 | sleep(5); | 79 | sleep(5); |
73 | chmFile = chm_open(fname); | 80 | chmFile = chm_open(fname); |
74 | } | 81 | } |
@@ -86,6 +93,7 @@ void CHM::addContent(QString content) { | |||
86 | } | 93 | } |
87 | 94 | ||
88 | void CHM::FillHomeContent() { | 95 | void CHM::FillHomeContent() { |
96 | unsuspend(); | ||
89 | if (chmHHCPath != "") { | 97 | if (chmHHCPath != "") { |
90 | const char *ext; | 98 | const char *ext; |
91 | char buffer[65536]; | 99 | char buffer[65536]; |
@@ -162,6 +170,7 @@ void CHM::FillHomeContent() { | |||
162 | 170 | ||
163 | bool CHM::FillBuffer() | 171 | bool CHM::FillBuffer() |
164 | { | 172 | { |
173 | unsuspend(); | ||
165 | bool bRetVal = false; | 174 | bool bRetVal = false; |
166 | char buffer[65536]; | 175 | char buffer[65536]; |
167 | int swath, offset; | 176 | int swath, offset; |
@@ -196,6 +205,7 @@ bool CHM::FillBuffer() | |||
196 | } | 205 | } |
197 | 206 | ||
198 | bool CHM::FillContent() { | 207 | bool CHM::FillContent() { |
208 | unsuspend(); | ||
199 | bool bRetVal = false; | 209 | bool bRetVal = false; |
200 | if (chmPath != "") { | 210 | if (chmPath != "") { |
201 | /* try to find the file */ | 211 | /* try to find the file */ |
@@ -239,7 +249,8 @@ bool CHM::FillContent() { | |||
239 | return bRetVal; | 249 | return bRetVal; |
240 | } | 250 | } |
241 | 251 | ||
242 | bool CHM::getFile(const QString& href) { | 252 | bool CHM::getFile(const QString& _href, const QString& ) { |
253 | QString href = "/" + _href; | ||
243 | qDebug("Got:%s", (const char*)href); | 254 | qDebug("Got:%s", (const char*)href); |
244 | bool bRetVal = false; | 255 | bool bRetVal = false; |
245 | QString temp = chmPath; | 256 | QString temp = chmPath; |
diff --git a/noncore/apps/opie-reader/CHM.h b/noncore/apps/opie-reader/CHM.h index 001f7fc..291818d 100644 --- a/noncore/apps/opie-reader/CHM.h +++ b/noncore/apps/opie-reader/CHM.h | |||
@@ -56,7 +56,7 @@ public: | |||
56 | MarkupType PreferredMarkup() { | 56 | MarkupType PreferredMarkup() { |
57 | return cCHM; | 57 | return cCHM; |
58 | } | 58 | } |
59 | bool getFile(const QString& href); | 59 | bool getFile(const QString& href, const QString& nm); |
60 | QImage *getPicture(const QString& href); | 60 | QImage *getPicture(const QString& href); |
61 | QString about() { return QString("CHM codec (c) Bob Griffin\nchm_lib (c) Jed Wing\nLZX code (c) Stuart Cale"); } | 61 | QString about() { return QString("CHM codec (c) Bob Griffin\nchm_lib (c) Jed Wing\nLZX code (c) Stuart Cale"); } |
62 | private : | 62 | private : |
diff --git a/noncore/apps/opie-reader/CRegExp.cpp b/noncore/apps/opie-reader/CRegExp.cpp index 77dc2dc..6318d28 100644 --- a/noncore/apps/opie-reader/CRegExp.cpp +++ b/noncore/apps/opie-reader/CRegExp.cpp | |||
diff --git a/noncore/apps/opie-reader/CSource.h b/noncore/apps/opie-reader/CSource.h new file mode 100644 index 0000000..2885f72 --- a/dev/null +++ b/noncore/apps/opie-reader/CSource.h | |||
@@ -0,0 +1,62 @@ | |||
1 | #ifndef __CSOURCE_H | ||
2 | #define __CSOURCE_H | ||
3 | |||
4 | class CInfo | ||
5 | { | ||
6 | public: | ||
7 | virtual unsigned long size() = 0; | ||
8 | }; | ||
9 | |||
10 | class CSource : public CInfo | ||
11 | { | ||
12 | public: | ||
13 | virtual int get() = 0; | ||
14 | }; | ||
15 | |||
16 | class CSink : public CInfo | ||
17 | { | ||
18 | public: | ||
19 | virtual void put(unsigned char c) = 0; | ||
20 | }; | ||
21 | |||
22 | class CMemSource : public CSource | ||
23 | { | ||
24 | unsigned long m_total_size; | ||
25 | unsigned long m_current; | ||
26 | unsigned char* m_buffer; | ||
27 | public: | ||
28 | CMemSource(unsigned char* _buffer, unsigned long _size) | ||
29 | : | ||
30 | m_total_size(_size), | ||
31 | m_current(0), | ||
32 | m_buffer(_buffer) | ||
33 | {} | ||
34 | unsigned long size() { return m_current; } | ||
35 | int get() | ||
36 | { | ||
37 | return ((m_current < m_total_size) ? m_buffer[m_current++] : -1); | ||
38 | } | ||
39 | }; | ||
40 | |||
41 | class CMemSink : public CSink | ||
42 | { | ||
43 | unsigned long m_total_size; | ||
44 | unsigned long m_current; | ||
45 | unsigned char* m_buffer; | ||
46 | public: | ||
47 | CMemSink(unsigned char* _buffer, unsigned long _size) | ||
48 | : | ||
49 | m_total_size(_size), | ||
50 | m_current(0), | ||
51 | m_buffer(_buffer) | ||
52 | {} | ||
53 | unsigned long size() { return m_current; } | ||
54 | void put(unsigned char c) | ||
55 | { | ||
56 | if (m_current < m_total_size) | ||
57 | { | ||
58 | m_buffer[m_current++] = c; | ||
59 | } | ||
60 | } | ||
61 | }; | ||
62 | #endif | ||
diff --git a/noncore/apps/opie-reader/Coder.h b/noncore/apps/opie-reader/Coder.h new file mode 100644 index 0000000..64587cf --- a/dev/null +++ b/noncore/apps/opie-reader/Coder.h | |||
@@ -0,0 +1,113 @@ | |||
1 | #include "CSource.h" | ||
2 | /**************************************************************************** | ||
3 | * This file is part of PPMd project * | ||
4 | * Contents: 'Carryless rangecoder' by Dmitry Subbotin * | ||
5 | * Comments: this implementation is claimed to be a public domain * | ||
6 | ****************************************************************************/ | ||
7 | /********************** Original text ************************************* | ||
8 | //////// Carryless rangecoder (c) 1999 by Dmitry Subbotin //////// | ||
9 | |||
10 | typedef unsigned int uint; | ||
11 | typedef unsigned char uc; | ||
12 | |||
13 | #define DO(n) for (int _=0; _<n; _++) | ||
14 | #define TOP (1<<24) | ||
15 | #define BOT (1<<16) | ||
16 | |||
17 | |||
18 | class RangeCoder | ||
19 | { | ||
20 | uint low, code, range, passed; | ||
21 | FILE *f; | ||
22 | |||
23 | void OutByte (uc c) { passed++; fputc(c,f); } | ||
24 | uc InByte () { passed++; return fgetc(f); } | ||
25 | |||
26 | public: | ||
27 | |||
28 | uint GetPassed () { return passed; } | ||
29 | void StartEncode (FILE *F) { f=F; passed=low=0; range= (uint) -1; } | ||
30 | void FinishEncode () { DO(4) OutByte(low>>24), low<<=8; } | ||
31 | void StartDecode (FILE *F) { passed=low=code=0; range= (uint) -1; | ||
32 | f=F; DO(4) code= code<<8 | InByte(); | ||
33 | } | ||
34 | |||
35 | void Encode (uint cumFreq, uint freq, uint totFreq) { | ||
36 | assert(cumFreq+freq<totFreq && freq && totFreq<=BOT); | ||
37 | low += cumFreq * (range/= totFreq); | ||
38 | range*= freq; | ||
39 | while ((low ^ low+range)<TOP || range<BOT && ((range= -low & BOT-1),1)) | ||
40 | OutByte(low>>24), range<<=8, low<<=8; | ||
41 | } | ||
42 | |||
43 | uint GetFreq (uint totFreq) { | ||
44 | uint tmp= (code-low) / (range/= totFreq); | ||
45 | if (tmp >= totFreq) throw ("Input data corrupt"); // or force it to return | ||
46 | return tmp; // a valid value :) | ||
47 | } | ||
48 | |||
49 | void Decode (uint cumFreq, uint freq, uint totFreq) { | ||
50 | assert(cumFreq+freq<totFreq && freq && totFreq<=BOT); | ||
51 | low += cumFreq*range; | ||
52 | range*= freq; | ||
53 | while ((low ^ low+range)<TOP || range<BOT && ((range= -low & BOT-1),1)) | ||
54 | code= code<<8 | InByte(), range<<=8, low<<=8; | ||
55 | } | ||
56 | }; | ||
57 | *****************************************************************************/ | ||
58 | |||
59 | static struct SUBRANGE { | ||
60 | DWORD LowCount, HighCount, scale; | ||
61 | } SubRange; | ||
62 | enum { TOP=1 << 24, BOT=1 << 15 }; | ||
63 | static DWORD low, code, range; | ||
64 | |||
65 | inline void ariInitEncoder() | ||
66 | { | ||
67 | low=0; range=DWORD(-1); | ||
68 | } | ||
69 | #define ARI_ENC_NORMALIZE(stream) { \ | ||
70 | while ((low ^ (low+range)) < TOP || range < BOT && \ | ||
71 | ((range= -low & (BOT-1)),1)) { \ | ||
72 | _PPMD_E_PUTC(low >> 24,stream); \ | ||
73 | range <<= 8; low <<= 8; \ | ||
74 | } \ | ||
75 | } | ||
76 | inline void ariEncodeSymbol() | ||
77 | { | ||
78 | low += SubRange.LowCount*(range /= SubRange.scale); | ||
79 | range *= SubRange.HighCount-SubRange.LowCount; | ||
80 | } | ||
81 | inline void ariShiftEncodeSymbol(UINT SHIFT) | ||
82 | { | ||
83 | low += SubRange.LowCount*(range >>= SHIFT); | ||
84 | range *= SubRange.HighCount-SubRange.LowCount; | ||
85 | } | ||
86 | #define ARI_FLUSH_ENCODER(stream) { \ | ||
87 | for (UINT i=0;i < 4;i++) { \ | ||
88 | _PPMD_E_PUTC(low >> 24,stream); low <<= 8; \ | ||
89 | } \ | ||
90 | } | ||
91 | #define ARI_INIT_DECODER(stream) { \ | ||
92 | low=code=0; range=DWORD(-1); \ | ||
93 | for (UINT i=0;i < 4;i++) \ | ||
94 | code=(code << 8) | _PPMD_D_GETC(stream); \ | ||
95 | } | ||
96 | #define ARI_DEC_NORMALIZE(stream) { \ | ||
97 | while ((low ^ (low+range)) < TOP || range < BOT && \ | ||
98 | ((range= -low & (BOT-1)),1)) { \ | ||
99 | code=(code << 8) | _PPMD_D_GETC(stream); \ | ||
100 | range <<= 8; low <<= 8; \ | ||
101 | } \ | ||
102 | } | ||
103 | inline UINT ariGetCurrentCount() { | ||
104 | return (code-low)/(range /= SubRange.scale); | ||
105 | } | ||
106 | inline UINT ariGetCurrentShiftCount(UINT SHIFT) { | ||
107 | return (code-low)/(range >>= SHIFT); | ||
108 | } | ||
109 | inline void ariRemoveSubrange() | ||
110 | { | ||
111 | low += range*SubRange.LowCount; | ||
112 | range *= SubRange.HighCount-SubRange.LowCount; | ||
113 | } | ||
diff --git a/noncore/apps/opie-reader/FliteCmd/.cvsignore b/noncore/apps/opie-reader/FliteCmd/.cvsignore new file mode 100644 index 0000000..1810ee0 --- a/dev/null +++ b/noncore/apps/opie-reader/FliteCmd/.cvsignore | |||
@@ -0,0 +1,5 @@ | |||
1 | Makefile | ||
2 | config.in | ||
3 | moc_* | ||
4 | .moc | ||
5 | .obj | ||
diff --git a/noncore/apps/opie-reader/FliteCmd/FliteCmd.pro b/noncore/apps/opie-reader/FliteCmd/FliteCmd.pro new file mode 100644 index 0000000..0e1a782 --- a/dev/null +++ b/noncore/apps/opie-reader/FliteCmd/FliteCmd.pro | |||
@@ -0,0 +1,18 @@ | |||
1 | DEFINES += OPIE USEQPE | ||
2 | VPATH = .. | ||
3 | TEMPLATE= lib | ||
4 | CONFIG = qt warn_on release dll | ||
5 | HEADERS = flitecmd.h | ||
6 | |||
7 | SOURCES = flitecmd.cpp | ||
8 | |||
9 | |||
10 | INTERFACES= | ||
11 | DESTDIR = $(OPIEDIR)/plugins/reader/outcodecs | ||
12 | TARGET = flitecmd | ||
13 | |||
14 | |||
15 | INCLUDEPATH+= $(OPIEDIR)/include | ||
16 | DEPENDPATH += $(OPIEDIR)/include | ||
17 | |||
18 | include( $(OPIEDIR)/include.pro ) | ||
diff --git a/noncore/apps/opie-reader/FliteDyn/.cvsignore b/noncore/apps/opie-reader/FliteDyn/.cvsignore new file mode 100644 index 0000000..1810ee0 --- a/dev/null +++ b/noncore/apps/opie-reader/FliteDyn/.cvsignore | |||
@@ -0,0 +1,5 @@ | |||
1 | Makefile | ||
2 | config.in | ||
3 | moc_* | ||
4 | .moc | ||
5 | .obj | ||
diff --git a/noncore/apps/opie-reader/FliteDyn/FliteDyn.pro b/noncore/apps/opie-reader/FliteDyn/FliteDyn.pro new file mode 100644 index 0000000..a949209 --- a/dev/null +++ b/noncore/apps/opie-reader/FliteDyn/FliteDyn.pro | |||
@@ -0,0 +1,18 @@ | |||
1 | DEFINES += OPIE USEQPE | ||
2 | VPATH = .. | ||
3 | TEMPLATE= lib | ||
4 | CONFIG = qt warn_on release dll | ||
5 | HEADERS = flitedyn.h | ||
6 | |||
7 | SOURCES = flitedyn.cpp | ||
8 | |||
9 | |||
10 | INTERFACES= | ||
11 | DESTDIR = $(OPIEDIR)/plugins/reader/outcodecs | ||
12 | TARGET = flitedyn | ||
13 | LIBS += -L/home/tim/flite/flite-1.2-release/lib -lflite_cmu_us_kal -lflite_usenglish -lflite_cmulex -lflite | ||
14 | |||
15 | INCLUDEPATH+= /home/tim/flite/flite-1.2-release/include $(OPIEDIR)/include | ||
16 | DEPENDPATH += /home/tim/flite/flite-1.2-release/include $(OPIEDIR)/include | ||
17 | |||
18 | include( $(OPIEDIR)/include.pro ) | ||
diff --git a/noncore/apps/opie-reader/FliteDyn16/.cvsignore b/noncore/apps/opie-reader/FliteDyn16/.cvsignore new file mode 100644 index 0000000..1810ee0 --- a/dev/null +++ b/noncore/apps/opie-reader/FliteDyn16/.cvsignore | |||
@@ -0,0 +1,5 @@ | |||
1 | Makefile | ||
2 | config.in | ||
3 | moc_* | ||
4 | .moc | ||
5 | .obj | ||
diff --git a/noncore/apps/opie-reader/FliteDyn16/FliteDyn16.pro b/noncore/apps/opie-reader/FliteDyn16/FliteDyn16.pro new file mode 100644 index 0000000..49c2c42 --- a/dev/null +++ b/noncore/apps/opie-reader/FliteDyn16/FliteDyn16.pro | |||
@@ -0,0 +1,18 @@ | |||
1 | DEFINES += OPIE USEQPE | ||
2 | VPATH = .. | ||
3 | TEMPLATE= lib | ||
4 | CONFIG = qt warn_on release dll | ||
5 | HEADERS = flitedyn.h | ||
6 | |||
7 | SOURCES = flitedyn.cpp | ||
8 | |||
9 | |||
10 | INTERFACES= | ||
11 | DESTDIR = $(OPIEDIR)/plugins/reader/outcodecs | ||
12 | TARGET = flitedyn | ||
13 | LIBS += -L/home/tim/flite/flite-1.2-release/lib -lflite_cmu_us_kal16 -lflite_usenglish -lflite_cmulex -lflite | ||
14 | |||
15 | INCLUDEPATH+= /home/tim/flite/flite-1.2-release/include $(OPIEDIR)/include | ||
16 | DEPENDPATH += /home/tim/flite/flite-1.2-release/include $(OPIEDIR)/include | ||
17 | |||
18 | include( $(OPIEDIR)/include.pro ) | ||
diff --git a/noncore/apps/opie-reader/FontControl.cpp b/noncore/apps/opie-reader/FontControl.cpp index 9bb3bc0..08b8c52 100644 --- a/noncore/apps/opie-reader/FontControl.cpp +++ b/noncore/apps/opie-reader/FontControl.cpp | |||
@@ -1,4 +1,5 @@ | |||
1 | #include <qfontdatabase.h> | 1 | #include <qfontdatabase.h> |
2 | |||
2 | #include "FontControl.h" | 3 | #include "FontControl.h" |
3 | 4 | ||
4 | int FontControl::gzoom() | 5 | int FontControl::gzoom() |
diff --git a/noncore/apps/opie-reader/FontControl.h b/noncore/apps/opie-reader/FontControl.h index 90d39b2..563e1a8 100644 --- a/noncore/apps/opie-reader/FontControl.h +++ b/noncore/apps/opie-reader/FontControl.h | |||
@@ -61,7 +61,7 @@ class FontControl | |||
61 | { | 61 | { |
62 | tgt = m_maxsize - 1; | 62 | tgt = m_maxsize - 1; |
63 | } | 63 | } |
64 | return m_fontsizes[tgt]; | 64 | return tgt >= 0 ? m_fontsizes[tgt] : 12; |
65 | } | 65 | } |
66 | int ascent() | 66 | int ascent() |
67 | { | 67 | { |
diff --git a/noncore/apps/opie-reader/Model.cpp b/noncore/apps/opie-reader/Model.cpp new file mode 100644 index 0000000..6b61fa0 --- a/dev/null +++ b/noncore/apps/opie-reader/Model.cpp | |||
@@ -0,0 +1,721 @@ | |||
1 | /**************************************************************************** | ||
2 | * This file is part of PPMd project * | ||
3 | * Written and distributed to public domain by Dmitry Shkarin 1997, * | ||
4 | * 1999-2001 * | ||
5 | * Contents: PPMII model description and encoding/decoding routines * | ||
6 | ****************************************************************************/ | ||
7 | #include <string.h> | ||
8 | #include "PPMd.h" | ||
9 | #pragma hdrstop | ||
10 | #include "Coder.h" | ||
11 | #include "SubAlloc.h" | ||
12 | |||
13 | enum { UP_FREQ=5, INT_BITS=7, PERIOD_BITS=7, TOT_BITS=INT_BITS+PERIOD_BITS, | ||
14 | INTERVAL=1 << INT_BITS, BIN_SCALE=1 << TOT_BITS, MAX_FREQ=124, O_BOUND=9 }; | ||
15 | |||
16 | #pragma pack(1) | ||
17 | static struct SEE2_CONTEXT { // SEE-contexts for PPM-contexts with masked symbols | ||
18 | WORD Summ; | ||
19 | BYTE Shift, Count; | ||
20 | void init(UINT InitVal) { Summ=InitVal << (Shift=PERIOD_BITS-4); Count=7; } | ||
21 | UINT getMean() { | ||
22 | UINT RetVal=(Summ >> Shift); Summ -= RetVal; | ||
23 | return RetVal+(RetVal == 0); | ||
24 | } | ||
25 | void update() { | ||
26 | if (Shift < PERIOD_BITS && --Count == 0) { | ||
27 | Summ += Summ; Count=3 << Shift++; | ||
28 | } | ||
29 | } | ||
30 | } _PACK_ATTR SEE2Cont[24][32], DummySEE2Cont; | ||
31 | static struct PPM_CONTEXT { // Notes: | ||
32 | BYTE NumStats, Flags; // 1. NumStats & NumMasked contain | ||
33 | WORD SummFreq; // number of symbols minus 1 | ||
34 | struct STATE { // 2. sizeof(WORD) > sizeof(BYTE) | ||
35 | BYTE Symbol, Freq; // 3. contexts example: | ||
36 | PPM_CONTEXT* Successor; // MaxOrder: | ||
37 | } _PACK_ATTR * Stats; // ABCD context | ||
38 | PPM_CONTEXT* Suffix; // BCD suffix | ||
39 | inline void encodeBinSymbol(int symbol);// BCDE successor | ||
40 | inline void encodeSymbol1(int symbol);// other orders: | ||
41 | inline void encodeSymbol2(int symbol);// BCD context | ||
42 | inline void decodeBinSymbol();// CD suffix | ||
43 | inline void decodeSymbol1();// BCDE successor | ||
44 | inline void decodeSymbol2(); | ||
45 | inline void update1(STATE* p); | ||
46 | inline void update2(STATE* p); | ||
47 | inline SEE2_CONTEXT* makeEscFreq2(); | ||
48 | void rescale(); | ||
49 | void refresh(int OldNU,BOOL Scale); | ||
50 | PPM_CONTEXT* cutOff(int Order); | ||
51 | PPM_CONTEXT* removeBinConts(int Order); | ||
52 | STATE& oneState() const { return (STATE&) SummFreq; } | ||
53 | } _PACK_ATTR* MaxContext; | ||
54 | #pragma pack() | ||
55 | |||
56 | static BYTE NS2BSIndx[256], QTable[260]; // constants | ||
57 | static PPM_CONTEXT::STATE* FoundState; // found next state transition | ||
58 | static int InitEsc, OrderFall, RunLength, InitRL, MaxOrder; | ||
59 | static BYTE CharMask[256], NumMasked, PrevSuccess, EscCount, PrintCount; | ||
60 | static WORD BinSumm[25][64]; // binary SEE-contexts | ||
61 | static MR_METHOD MRMethod; | ||
62 | |||
63 | inline void SWAP(PPM_CONTEXT::STATE& s1,PPM_CONTEXT::STATE& s2) | ||
64 | { | ||
65 | /* | ||
66 | WORD t1=(WORD&) s1; PPM_CONTEXT* t2=s1.Successor; | ||
67 | (WORD&) s1 = (WORD&) s2; s1.Successor=s2.Successor; | ||
68 | (WORD&) s2 = t1; s2.Successor=t2; | ||
69 | */ | ||
70 | PPM_CONTEXT::STATE t = s1; | ||
71 | s1 = s2; | ||
72 | s2 = t; | ||
73 | } | ||
74 | inline void StateCpy(PPM_CONTEXT::STATE& s1,const PPM_CONTEXT::STATE& s2) | ||
75 | { | ||
76 | // (WORD&) s1=(WORD&) s2; s1.Successor=s2.Successor; | ||
77 | s1 = s2; | ||
78 | } | ||
79 | struct PPMD_STARTUP { inline PPMD_STARTUP(); } PPMd_StartUp; | ||
80 | inline PPMD_STARTUP::PPMD_STARTUP() // constants initialization | ||
81 | { | ||
82 | UINT i, k, m, Step; | ||
83 | for (i=0,k=1;i < N1 ;i++,k += 1) Indx2Units[i]=k; | ||
84 | for (k++;i < N1+N2 ;i++,k += 2) Indx2Units[i]=k; | ||
85 | for (k++;i < N1+N2+N3 ;i++,k += 3) Indx2Units[i]=k; | ||
86 | for (k++;i < N1+N2+N3+N4;i++,k += 4) Indx2Units[i]=k; | ||
87 | for (k=i=0;k < 128;k++) { | ||
88 | i += (Indx2Units[i] < k+1); Units2Indx[k]=i; | ||
89 | } | ||
90 | NS2BSIndx[0]=2*0; NS2BSIndx[1]=2*1; | ||
91 | memset(NS2BSIndx+2,2*2,9); memset(NS2BSIndx+11,2*3,256-11); | ||
92 | for (i=0;i < UP_FREQ;i++) QTable[i]=i; | ||
93 | for (m=i=UP_FREQ, k=Step=1;i < 260;i++) { | ||
94 | QTable[i]=m; | ||
95 | if ( !--k ) { k = ++Step; m++; } | ||
96 | } | ||
97 | (DWORD&) DummySEE2Cont=PPMdSignature; | ||
98 | } | ||
99 | static void _STDCALL StartModelRare(int MaxOrder,MR_METHOD MRMethod) | ||
100 | { | ||
101 | UINT i, k, m; | ||
102 | memset(CharMask,0,sizeof(CharMask)); EscCount=PrintCount=1; | ||
103 | if (MaxOrder < 2) { // we are in solid mode | ||
104 | OrderFall=::MaxOrder; | ||
105 | for (PPM_CONTEXT* pc=MaxContext;pc->Suffix != NULL;pc=pc->Suffix) | ||
106 | OrderFall--; | ||
107 | return; | ||
108 | } | ||
109 | OrderFall=::MaxOrder=MaxOrder; ::MRMethod=MRMethod; | ||
110 | InitSubAllocator(); | ||
111 | RunLength=InitRL=-((MaxOrder < 12)?MaxOrder:12)-1; | ||
112 | MaxContext = (PPM_CONTEXT*) AllocContext(); | ||
113 | MaxContext->Suffix=NULL; | ||
114 | MaxContext->SummFreq=(MaxContext->NumStats=255)+2; | ||
115 | MaxContext->Stats = (PPM_CONTEXT::STATE*) AllocUnits(256/2); | ||
116 | for (PrevSuccess=i=0;i < 256;i++) { | ||
117 | MaxContext->Stats[i].Symbol=i; MaxContext->Stats[i].Freq=1; | ||
118 | MaxContext->Stats[i].Successor=NULL; | ||
119 | } | ||
120 | static const WORD InitBinEsc[]={0x3CDD,0x1F3F,0x59BF,0x48F3,0x64A1,0x5ABC,0x6632,0x6051}; | ||
121 | for (i=m=0;m < 25;m++) { | ||
122 | while (QTable[i] == m) i++; | ||
123 | for (k=0;k < 8;k++) | ||
124 | BinSumm[m][k]=BIN_SCALE-InitBinEsc[k]/(i+1); | ||
125 | for (k=8;k < 64;k += 8) | ||
126 | memcpy(BinSumm[m]+k,BinSumm[m],8*sizeof(WORD)); | ||
127 | } | ||
128 | for (i=m=0;m < 24;m++) { | ||
129 | while (QTable[i+3] == m+3) i++; | ||
130 | SEE2Cont[m][0].init(2*i+5); | ||
131 | for (k=1;k < 32;k++) SEE2Cont[m][k]=SEE2Cont[m][0]; | ||
132 | } | ||
133 | } | ||
134 | void PPM_CONTEXT::refresh(int OldNU,BOOL Scale) | ||
135 | { | ||
136 | int i=NumStats, EscFreq; | ||
137 | STATE* p = Stats = (STATE*) ShrinkUnits(Stats,OldNU,(i+2) >> 1); | ||
138 | Flags=(Flags & (0x10+0x04*Scale))+0x08*(p->Symbol >= 0x40); | ||
139 | EscFreq=SummFreq-p->Freq; | ||
140 | SummFreq = (p->Freq=(p->Freq+Scale) >> Scale); | ||
141 | do { | ||
142 | EscFreq -= (++p)->Freq; | ||
143 | SummFreq += (p->Freq=(p->Freq+Scale) >> Scale); | ||
144 | Flags |= 0x08*(p->Symbol >= 0x40); | ||
145 | } while ( --i ); | ||
146 | SummFreq += (EscFreq=(EscFreq+Scale) >> Scale); | ||
147 | } | ||
148 | #define P_CALL(F) ( PrefetchData(p->Successor), \ | ||
149 | p->Successor=p->Successor->F(Order+1)) | ||
150 | PPM_CONTEXT* PPM_CONTEXT::cutOff(int Order) | ||
151 | { | ||
152 | int i, tmp; | ||
153 | STATE* p; | ||
154 | if ( !NumStats ) { | ||
155 | if ((BYTE*) (p=&oneState())->Successor >= UnitsStart) { | ||
156 | if (Order < MaxOrder) P_CALL(cutOff); | ||
157 | else p->Successor=NULL; | ||
158 | if (!p->Successor && Order > O_BOUND) | ||
159 | goto REMOVE; | ||
160 | return this; | ||
161 | } else { | ||
162 | REMOVE: SpecialFreeUnit(this); return NULL; | ||
163 | } | ||
164 | } | ||
165 | PrefetchData(Stats); | ||
166 | Stats = (STATE*) MoveUnitsUp(Stats,tmp=(NumStats+2) >> 1); | ||
167 | for (p=Stats+(i=NumStats);p >= Stats;p--) | ||
168 | if ((BYTE*) p->Successor < UnitsStart) { | ||
169 | p->Successor=NULL; SWAP(*p,Stats[i--]); | ||
170 | } else if (Order < MaxOrder) P_CALL(cutOff); | ||
171 | else p->Successor=NULL; | ||
172 | if (i != NumStats && Order) { | ||
173 | NumStats=i; p=Stats; | ||
174 | if (i < 0) { FreeUnits(p,tmp); goto REMOVE; } | ||
175 | else if (i == 0) { | ||
176 | Flags=(Flags & 0x10)+0x08*(p->Symbol >= 0x40); | ||
177 | StateCpy(oneState(),*p); FreeUnits(p,tmp); | ||
178 | oneState().Freq=(oneState().Freq+11) >> 3; | ||
179 | } else refresh(tmp,SummFreq > 16*i); | ||
180 | } | ||
181 | return this; | ||
182 | } | ||
183 | PPM_CONTEXT* PPM_CONTEXT::removeBinConts(int Order) | ||
184 | { | ||
185 | STATE* p; | ||
186 | if ( !NumStats ) { | ||
187 | p=&oneState(); | ||
188 | if ((BYTE*) p->Successor >= UnitsStart && Order < MaxOrder) | ||
189 | P_CALL(removeBinConts); | ||
190 | else p->Successor=NULL; | ||
191 | if (!p->Successor && (!Suffix->NumStats || Suffix->Flags == 0xFF)) { | ||
192 | FreeUnits(this,1); return NULL; | ||
193 | } else return this; | ||
194 | } | ||
195 | PrefetchData(Stats); | ||
196 | for (p=Stats+NumStats;p >= Stats;p--) | ||
197 | if ((BYTE*) p->Successor >= UnitsStart && Order < MaxOrder) | ||
198 | P_CALL(removeBinConts); | ||
199 | else p->Successor=NULL; | ||
200 | return this; | ||
201 | } | ||
202 | static void RestoreModelRare(PPM_CONTEXT* pc1,PPM_CONTEXT* MinContext, | ||
203 | PPM_CONTEXT* FSuccessor) | ||
204 | { | ||
205 | PPM_CONTEXT* pc; | ||
206 | PPM_CONTEXT::STATE* p; | ||
207 | for (pc=MaxContext, pText=HeapStart;pc != pc1;pc=pc->Suffix) | ||
208 | if (--(pc->NumStats) == 0) { | ||
209 | pc->Flags=(pc->Flags & 0x10)+0x08*(pc->Stats->Symbol >= 0x40); | ||
210 | p=pc->Stats; StateCpy(pc->oneState(),*p); | ||
211 | SpecialFreeUnit(p); | ||
212 | pc->oneState().Freq=(pc->oneState().Freq+11) >> 3; | ||
213 | } else | ||
214 | pc->refresh((pc->NumStats+3) >> 1,FALSE); | ||
215 | for ( ;pc != MinContext;pc=pc->Suffix) | ||
216 | if ( !pc->NumStats ) | ||
217 | pc->oneState().Freq -= pc->oneState().Freq >> 1; | ||
218 | else if ((pc->SummFreq += 4) > 128+4*pc->NumStats) | ||
219 | pc->refresh((pc->NumStats+2) >> 1,TRUE); | ||
220 | if (MRMethod > MRM_FREEZE) { | ||
221 | MaxContext=FSuccessor; GlueCount += !(BList[1].Stamp & 1); | ||
222 | } else if (MRMethod == MRM_FREEZE) { | ||
223 | while ( MaxContext->Suffix ) MaxContext=MaxContext->Suffix; | ||
224 | MaxContext->removeBinConts(0); MRMethod=MR_METHOD(MRMethod+1); | ||
225 | GlueCount=0; OrderFall=MaxOrder; | ||
226 | } else if (MRMethod == MRM_RESTART || GetUsedMemory() < (SubAllocatorSize >> 1)) { | ||
227 | StartModelRare(MaxOrder,MRMethod); | ||
228 | EscCount=0; PrintCount=0xFF; | ||
229 | } else { | ||
230 | while ( MaxContext->Suffix ) MaxContext=MaxContext->Suffix; | ||
231 | do { | ||
232 | MaxContext->cutOff(0); ExpandTextArea(); | ||
233 | } while (GetUsedMemory() > 3*(SubAllocatorSize >> 2)); | ||
234 | GlueCount=0; OrderFall=MaxOrder; | ||
235 | } | ||
236 | } | ||
237 | static PPM_CONTEXT* _FASTCALL CreateSuccessors(BOOL Skip,PPM_CONTEXT::STATE* p, | ||
238 | PPM_CONTEXT* pc); | ||
239 | static PPM_CONTEXT* _FASTCALL ReduceOrder(PPM_CONTEXT::STATE* p,PPM_CONTEXT* pc) | ||
240 | { | ||
241 | PPM_CONTEXT::STATE* p1, * ps[MAX_O], ** pps=ps; | ||
242 | PPM_CONTEXT* pc1=pc, * UpBranch = (PPM_CONTEXT*) pText; | ||
243 | BYTE tmp, sym=FoundState->Symbol; | ||
244 | *pps++ = FoundState; FoundState->Successor=UpBranch; | ||
245 | OrderFall++; | ||
246 | if ( p ) { pc=pc->Suffix; goto LOOP_ENTRY; } | ||
247 | for ( ; ; ) { | ||
248 | if ( !pc->Suffix ) { | ||
249 | if (MRMethod > MRM_FREEZE) { | ||
250 | FROZEN: do { (*--pps)->Successor = pc; } while (pps != ps); | ||
251 | pText=HeapStart+1; OrderFall=1; | ||
252 | } | ||
253 | return pc; | ||
254 | } | ||
255 | pc=pc->Suffix; | ||
256 | if ( pc->NumStats ) { | ||
257 | if ((p=pc->Stats)->Symbol != sym) | ||
258 | do { tmp=p[1].Symbol; p++; } while (tmp != sym); | ||
259 | tmp=2*(p->Freq < MAX_FREQ-9); | ||
260 | p->Freq += tmp; pc->SummFreq += tmp; | ||
261 | } else { p=&(pc->oneState()); p->Freq += (p->Freq < 32); } | ||
262 | LOOP_ENTRY: | ||
263 | if ( p->Successor ) break; | ||
264 | *pps++ = p; p->Successor=UpBranch; | ||
265 | OrderFall++; | ||
266 | } | ||
267 | if (MRMethod > MRM_FREEZE) { | ||
268 | pc = p->Successor; goto FROZEN; | ||
269 | } else if (p->Successor <= UpBranch) { | ||
270 | p1=FoundState; FoundState=p; | ||
271 | p->Successor=CreateSuccessors(FALSE,NULL,pc); | ||
272 | FoundState=p1; | ||
273 | } | ||
274 | if (OrderFall == 1 && pc1 == MaxContext) { | ||
275 | FoundState->Successor=p->Successor; pText--; | ||
276 | } | ||
277 | return p->Successor; | ||
278 | } | ||
279 | void PPM_CONTEXT::rescale() | ||
280 | { | ||
281 | UINT OldNU, Adder, EscFreq, i=NumStats; | ||
282 | STATE tmp, * p1, * p; | ||
283 | for (p=FoundState;p != Stats;p--) SWAP(p[0],p[-1]); | ||
284 | p->Freq += 4; SummFreq += 4; | ||
285 | EscFreq=SummFreq-p->Freq; | ||
286 | Adder=(OrderFall != 0 || MRMethod > MRM_FREEZE); | ||
287 | SummFreq = (p->Freq=(p->Freq+Adder) >> 1); | ||
288 | do { | ||
289 | EscFreq -= (++p)->Freq; | ||
290 | SummFreq += (p->Freq=(p->Freq+Adder) >> 1); | ||
291 | if (p[0].Freq > p[-1].Freq) { | ||
292 | StateCpy(tmp,*(p1=p)); | ||
293 | do StateCpy(p1[0],p1[-1]); while (tmp.Freq > (--p1)[-1].Freq); | ||
294 | StateCpy(*p1,tmp); | ||
295 | } | ||
296 | } while ( --i ); | ||
297 | if (p->Freq == 0) { | ||
298 | do { i++; } while ((--p)->Freq == 0); | ||
299 | EscFreq += i; OldNU=(NumStats+2) >> 1; | ||
300 | if ((NumStats -= i) == 0) { | ||
301 | StateCpy(tmp,*Stats); | ||
302 | tmp.Freq=(2*tmp.Freq+EscFreq-1)/EscFreq; | ||
303 | if (tmp.Freq > MAX_FREQ/3) tmp.Freq=MAX_FREQ/3; | ||
304 | FreeUnits(Stats,OldNU); StateCpy(oneState(),tmp); | ||
305 | Flags=(Flags & 0x10)+0x08*(tmp.Symbol >= 0x40); | ||
306 | FoundState=&oneState(); return; | ||
307 | } | ||
308 | Stats = (STATE*) ShrinkUnits(Stats,OldNU,(NumStats+2) >> 1); | ||
309 | Flags &= ~0x08; i=NumStats; | ||
310 | Flags |= 0x08*((p=Stats)->Symbol >= 0x40); | ||
311 | do { Flags |= 0x08*((++p)->Symbol >= 0x40); } while ( --i ); | ||
312 | } | ||
313 | SummFreq += (EscFreq -= (EscFreq >> 1)); | ||
314 | Flags |= 0x04; FoundState=Stats; | ||
315 | } | ||
316 | static PPM_CONTEXT* _FASTCALL CreateSuccessors(BOOL Skip,PPM_CONTEXT::STATE* p, | ||
317 | PPM_CONTEXT* pc) | ||
318 | { | ||
319 | PPM_CONTEXT ct, * UpBranch=FoundState->Successor; | ||
320 | PPM_CONTEXT::STATE* ps[MAX_O], ** pps=ps; | ||
321 | UINT cf, s0; | ||
322 | BYTE tmp, sym=FoundState->Symbol; | ||
323 | if ( !Skip ) { | ||
324 | *pps++ = FoundState; | ||
325 | if ( !pc->Suffix ) goto NO_LOOP; | ||
326 | } | ||
327 | if ( p ) { pc=pc->Suffix; goto LOOP_ENTRY; } | ||
328 | do { | ||
329 | pc=pc->Suffix; | ||
330 | if ( pc->NumStats ) { | ||
331 | if ((p=pc->Stats)->Symbol != sym) | ||
332 | do { tmp=p[1].Symbol; p++; } while (tmp != sym); | ||
333 | tmp=(p->Freq < MAX_FREQ-9); | ||
334 | p->Freq += tmp; pc->SummFreq += tmp; | ||
335 | } else { | ||
336 | p=&(pc->oneState()); | ||
337 | p->Freq += (!pc->Suffix->NumStats & (p->Freq < 24)); | ||
338 | } | ||
339 | LOOP_ENTRY: | ||
340 | if (p->Successor != UpBranch) { | ||
341 | pc=p->Successor; break; | ||
342 | } | ||
343 | *pps++ = p; | ||
344 | } while ( pc->Suffix ); | ||
345 | NO_LOOP: | ||
346 | if (pps == ps) return pc; | ||
347 | ct.NumStats=0; ct.Flags=0x10*(sym >= 0x40); | ||
348 | ct.oneState().Symbol=sym=*(BYTE*) UpBranch; | ||
349 | ct.oneState().Successor=(PPM_CONTEXT*) (((BYTE*) UpBranch)+1); | ||
350 | ct.Flags |= 0x08*(sym >= 0x40); | ||
351 | if ( pc->NumStats ) { | ||
352 | if ((p=pc->Stats)->Symbol != sym) | ||
353 | do { tmp=p[1].Symbol; p++; } while (tmp != sym); | ||
354 | s0=pc->SummFreq-pc->NumStats-(cf=p->Freq-1); | ||
355 | ct.oneState().Freq=1+((2*cf <= s0)?(5*cf > s0):((cf+2*s0-3)/s0)); | ||
356 | } else | ||
357 | ct.oneState().Freq=pc->oneState().Freq; | ||
358 | do { | ||
359 | PPM_CONTEXT* pc1 = (PPM_CONTEXT*) AllocContext(); | ||
360 | if ( !pc1 ) return NULL; | ||
361 | ((DWORD*) pc1)[0] = ((DWORD*) &ct)[0]; | ||
362 | ((DWORD*) pc1)[1] = ((DWORD*) &ct)[1]; | ||
363 | pc1->Suffix=pc; (*--pps)->Successor=pc=pc1; | ||
364 | } while (pps != ps); | ||
365 | return pc; | ||
366 | } | ||
367 | static inline void UpdateModel(PPM_CONTEXT* MinContext) | ||
368 | { | ||
369 | PPM_CONTEXT::STATE* p=NULL; | ||
370 | PPM_CONTEXT* Successor, * FSuccessor, * pc, * pc1=MaxContext; | ||
371 | UINT ns1, ns, cf, sf, s0, FFreq=FoundState->Freq; | ||
372 | BYTE Flag, sym, FSymbol=FoundState->Symbol; | ||
373 | FSuccessor=FoundState->Successor; pc=MinContext->Suffix; | ||
374 | if (FFreq < MAX_FREQ/4 && pc) { | ||
375 | if ( pc->NumStats ) { | ||
376 | if ((p=pc->Stats)->Symbol != FSymbol) { | ||
377 | do { sym=p[1].Symbol; p++; } while (sym != FSymbol); | ||
378 | if (p[0].Freq >= p[-1].Freq) { | ||
379 | SWAP(p[0],p[-1]); p--; | ||
380 | } | ||
381 | } | ||
382 | cf=2*(p->Freq < MAX_FREQ-9); | ||
383 | p->Freq += cf; pc->SummFreq += cf; | ||
384 | } else { p=&(pc->oneState()); p->Freq += (p->Freq < 32); } | ||
385 | } | ||
386 | if (!OrderFall && FSuccessor) { | ||
387 | FoundState->Successor=CreateSuccessors(TRUE,p,MinContext); | ||
388 | if ( !FoundState->Successor ) goto RESTART_MODEL; | ||
389 | MaxContext=FoundState->Successor; return; | ||
390 | } | ||
391 | *pText++ = FSymbol; Successor = (PPM_CONTEXT*) pText; | ||
392 | if (pText >= UnitsStart) goto RESTART_MODEL; | ||
393 | if ( FSuccessor ) { | ||
394 | if ((BYTE*) FSuccessor < UnitsStart) | ||
395 | FSuccessor=CreateSuccessors(FALSE,p,MinContext); | ||
396 | } else | ||
397 | FSuccessor=ReduceOrder(p,MinContext); | ||
398 | if ( !FSuccessor ) goto RESTART_MODEL; | ||
399 | if ( !--OrderFall ) { | ||
400 | Successor=FSuccessor; pText -= (MaxContext != MinContext); | ||
401 | } else if (MRMethod > MRM_FREEZE) { | ||
402 | Successor=FSuccessor; pText=HeapStart; | ||
403 | OrderFall=0; | ||
404 | } | ||
405 | s0=MinContext->SummFreq-(ns=MinContext->NumStats)-FFreq; | ||
406 | for (Flag=0x08*(FSymbol >= 0x40);pc1 != MinContext;pc1=pc1->Suffix) { | ||
407 | if ((ns1=pc1->NumStats) != 0) { | ||
408 | if ((ns1 & 1) != 0) { | ||
409 | p=(PPM_CONTEXT::STATE*) ExpandUnits(pc1->Stats,(ns1+1) >> 1); | ||
410 | if ( !p ) goto RESTART_MODEL; | ||
411 | pc1->Stats=p; | ||
412 | } | ||
413 | pc1->SummFreq += (3*ns1+1 < ns); | ||
414 | } else { | ||
415 | p=(PPM_CONTEXT::STATE*) AllocUnits(1); | ||
416 | if ( !p ) goto RESTART_MODEL; | ||
417 | StateCpy(*p,pc1->oneState()); pc1->Stats=p; | ||
418 | if (p->Freq < MAX_FREQ/4-1) p->Freq += p->Freq; | ||
419 | else p->Freq = MAX_FREQ-4; | ||
420 | pc1->SummFreq=p->Freq+InitEsc+(ns > 2); | ||
421 | } | ||
422 | cf=2*FFreq*(pc1->SummFreq+6); sf=s0+pc1->SummFreq; | ||
423 | if (cf < 6*sf) { | ||
424 | cf=1+(cf > sf)+(cf >= 4*sf); | ||
425 | pc1->SummFreq += 4; | ||
426 | } else { | ||
427 | cf=4+(cf > 9*sf)+(cf > 12*sf)+(cf > 15*sf); | ||
428 | pc1->SummFreq += cf; | ||
429 | } | ||
430 | p=pc1->Stats+(++pc1->NumStats); p->Successor=Successor; | ||
431 | p->Symbol = FSymbol; p->Freq = cf; | ||
432 | pc1->Flags |= Flag; | ||
433 | } | ||
434 | MaxContext=FSuccessor; return; | ||
435 | RESTART_MODEL: | ||
436 | RestoreModelRare(pc1,MinContext,FSuccessor); | ||
437 | } | ||
438 | // Tabulated escapes for exponential symbol distribution | ||
439 | static const BYTE ExpEscape[16]={ 25,14, 9, 7, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2 }; | ||
440 | #define GET_MEAN(SUMM,SHIFT,ROUND) ((SUMM+(1 << (SHIFT-ROUND))) >> (SHIFT)) | ||
441 | inline void PPM_CONTEXT::encodeBinSymbol(int symbol) | ||
442 | { | ||
443 | BYTE indx=NS2BSIndx[Suffix->NumStats]+PrevSuccess+Flags; | ||
444 | STATE& rs=oneState(); | ||
445 | WORD& bs=BinSumm[QTable[rs.Freq-1]][indx+((RunLength >> 26) & 0x20)]; | ||
446 | if (rs.Symbol == symbol) { | ||
447 | FoundState=&rs; rs.Freq += (rs.Freq < 196); | ||
448 | SubRange.LowCount=0; SubRange.HighCount=bs; | ||
449 | bs += INTERVAL-GET_MEAN(bs,PERIOD_BITS,2); | ||
450 | PrevSuccess=1; RunLength++; | ||
451 | } else { | ||
452 | SubRange.LowCount=bs; bs -= GET_MEAN(bs,PERIOD_BITS,2); | ||
453 | SubRange.HighCount=BIN_SCALE; InitEsc=ExpEscape[bs >> 10]; | ||
454 | CharMask[rs.Symbol]=EscCount; | ||
455 | NumMasked=PrevSuccess=0; FoundState=NULL; | ||
456 | } | ||
457 | } | ||
458 | inline void PPM_CONTEXT::decodeBinSymbol() | ||
459 | { | ||
460 | BYTE indx=NS2BSIndx[Suffix->NumStats]+PrevSuccess+Flags; | ||
461 | STATE& rs=oneState(); | ||
462 | WORD& bs=BinSumm[QTable[rs.Freq-1]][indx+((RunLength >> 26) & 0x20)]; | ||
463 | if (ariGetCurrentShiftCount(TOT_BITS) < bs) { | ||
464 | FoundState=&rs; rs.Freq += (rs.Freq < 196); | ||
465 | SubRange.LowCount=0; SubRange.HighCount=bs; | ||
466 | bs += INTERVAL-GET_MEAN(bs,PERIOD_BITS,2); | ||
467 | PrevSuccess=1; RunLength++; | ||
468 | } else { | ||
469 | SubRange.LowCount=bs; bs -= GET_MEAN(bs,PERIOD_BITS,2); | ||
470 | SubRange.HighCount=BIN_SCALE; InitEsc=ExpEscape[bs >> 10]; | ||
471 | CharMask[rs.Symbol]=EscCount; | ||
472 | NumMasked=PrevSuccess=0; FoundState=NULL; | ||
473 | } | ||
474 | } | ||
475 | inline void PPM_CONTEXT::update1(STATE* p) | ||
476 | { | ||
477 | (FoundState=p)->Freq += 4; SummFreq += 4; | ||
478 | if (p[0].Freq > p[-1].Freq) { | ||
479 | SWAP(p[0],p[-1]); FoundState=--p; | ||
480 | if (p->Freq > MAX_FREQ) rescale(); | ||
481 | } | ||
482 | } | ||
483 | inline void PPM_CONTEXT::encodeSymbol1(int symbol) | ||
484 | { | ||
485 | UINT LoCnt, i=Stats->Symbol; | ||
486 | STATE* p=Stats; SubRange.scale=SummFreq; | ||
487 | if (i == symbol) { | ||
488 | PrevSuccess=(2*(SubRange.HighCount=p->Freq) >= SubRange.scale); | ||
489 | (FoundState=p)->Freq += 4; SummFreq += 4; | ||
490 | RunLength += PrevSuccess; | ||
491 | if (p->Freq > MAX_FREQ) rescale(); | ||
492 | SubRange.LowCount=0; return; | ||
493 | } | ||
494 | LoCnt=p->Freq; | ||
495 | i=NumStats; PrevSuccess=0; | ||
496 | while ((++p)->Symbol != symbol) { | ||
497 | LoCnt += p->Freq; | ||
498 | if (--i == 0) { | ||
499 | if ( Suffix ) PrefetchData(Suffix); | ||
500 | SubRange.LowCount=LoCnt; CharMask[p->Symbol]=EscCount; | ||
501 | i=NumMasked=NumStats; FoundState=NULL; | ||
502 | do { CharMask[(--p)->Symbol]=EscCount; } while ( --i ); | ||
503 | SubRange.HighCount=SubRange.scale; | ||
504 | return; | ||
505 | } | ||
506 | } | ||
507 | SubRange.HighCount=(SubRange.LowCount=LoCnt)+p->Freq; | ||
508 | update1(p); | ||
509 | } | ||
510 | inline void PPM_CONTEXT::decodeSymbol1() | ||
511 | { | ||
512 | UINT i, count, HiCnt=Stats->Freq; | ||
513 | STATE* p=Stats; SubRange.scale=SummFreq; | ||
514 | if ((count=ariGetCurrentCount()) < HiCnt) { | ||
515 | PrevSuccess=(2*(SubRange.HighCount=HiCnt) >= SubRange.scale); | ||
516 | (FoundState=p)->Freq=(HiCnt += 4); SummFreq += 4; | ||
517 | RunLength += PrevSuccess; | ||
518 | if (HiCnt > MAX_FREQ) rescale(); | ||
519 | SubRange.LowCount=0; return; | ||
520 | } | ||
521 | i=NumStats; PrevSuccess=0; | ||
522 | while ((HiCnt += (++p)->Freq) <= count) | ||
523 | if (--i == 0) { | ||
524 | if ( Suffix ) PrefetchData(Suffix); | ||
525 | SubRange.LowCount=HiCnt; CharMask[p->Symbol]=EscCount; | ||
526 | i=NumMasked=NumStats; FoundState=NULL; | ||
527 | do { CharMask[(--p)->Symbol]=EscCount; } while ( --i ); | ||
528 | SubRange.HighCount=SubRange.scale; | ||
529 | return; | ||
530 | } | ||
531 | SubRange.LowCount=(SubRange.HighCount=HiCnt)-p->Freq; | ||
532 | update1(p); | ||
533 | } | ||
534 | inline void PPM_CONTEXT::update2(STATE* p) | ||
535 | { | ||
536 | (FoundState=p)->Freq += 4; SummFreq += 4; | ||
537 | if (p->Freq > MAX_FREQ) rescale(); | ||
538 | EscCount++; RunLength=InitRL; | ||
539 | } | ||
540 | inline SEE2_CONTEXT* PPM_CONTEXT::makeEscFreq2() | ||
541 | { | ||
542 | BYTE* pb=(BYTE*) Stats; UINT t=2*NumStats; | ||
543 | PrefetchData(pb); PrefetchData(pb+t); | ||
544 | PrefetchData(pb += 2*t); PrefetchData(pb+t); | ||
545 | SEE2_CONTEXT* psee2c; | ||
546 | if (NumStats != 0xFF) { | ||
547 | t=Suffix->NumStats; | ||
548 | psee2c=SEE2Cont[QTable[NumStats+2]-3]+(SummFreq > 11*(NumStats+1)); | ||
549 | psee2c += 2*(2*NumStats < t+NumMasked)+Flags; | ||
550 | SubRange.scale=psee2c->getMean(); | ||
551 | } else { | ||
552 | psee2c=&DummySEE2Cont; SubRange.scale=1; | ||
553 | } | ||
554 | return psee2c; | ||
555 | } | ||
556 | inline void PPM_CONTEXT::encodeSymbol2(int symbol) | ||
557 | { | ||
558 | SEE2_CONTEXT* psee2c=makeEscFreq2(); | ||
559 | UINT Sym, LoCnt=0, i=NumStats-NumMasked; | ||
560 | STATE* p1, * p=Stats-1; | ||
561 | do { | ||
562 | do { Sym=p[1].Symbol; p++; } while (CharMask[Sym] == EscCount); | ||
563 | CharMask[Sym]=EscCount; | ||
564 | if (Sym == symbol) goto SYMBOL_FOUND; | ||
565 | LoCnt += p->Freq; | ||
566 | } while ( --i ); | ||
567 | SubRange.HighCount=(SubRange.scale += (SubRange.LowCount=LoCnt)); | ||
568 | psee2c->Summ += SubRange.scale; NumMasked = NumStats; | ||
569 | return; | ||
570 | SYMBOL_FOUND: | ||
571 | SubRange.LowCount=LoCnt; SubRange.HighCount=(LoCnt+=p->Freq); | ||
572 | for (p1=p; --i ; ) { | ||
573 | do { Sym=p1[1].Symbol; p1++; } while (CharMask[Sym] == EscCount); | ||
574 | LoCnt += p1->Freq; | ||
575 | } | ||
576 | SubRange.scale += LoCnt; | ||
577 | psee2c->update(); update2(p); | ||
578 | } | ||
579 | inline void PPM_CONTEXT::decodeSymbol2() | ||
580 | { | ||
581 | SEE2_CONTEXT* psee2c=makeEscFreq2(); | ||
582 | UINT Sym, count, HiCnt=0, i=NumStats-NumMasked; | ||
583 | STATE* ps[256], ** pps=ps, * p=Stats-1; | ||
584 | do { | ||
585 | do { Sym=p[1].Symbol; p++; } while (CharMask[Sym] == EscCount); | ||
586 | HiCnt += p->Freq; *pps++ = p; | ||
587 | } while ( --i ); | ||
588 | SubRange.scale += HiCnt; count=ariGetCurrentCount(); | ||
589 | p=*(pps=ps); | ||
590 | if (count < HiCnt) { | ||
591 | HiCnt=0; | ||
592 | while ((HiCnt += p->Freq) <= count) p=*++pps; | ||
593 | SubRange.LowCount = (SubRange.HighCount=HiCnt)-p->Freq; | ||
594 | psee2c->update(); update2(p); | ||
595 | } else { | ||
596 | SubRange.LowCount=HiCnt; SubRange.HighCount=SubRange.scale; | ||
597 | i=NumStats-NumMasked; NumMasked = NumStats; | ||
598 | do { CharMask[(*pps)->Symbol]=EscCount; pps++; } while ( --i ); | ||
599 | psee2c->Summ += SubRange.scale; | ||
600 | } | ||
601 | } | ||
602 | inline void ClearMask(CInfo* EncodedFile, CInfo* DecodedFile) | ||
603 | { | ||
604 | EscCount=1; memset(CharMask,0,sizeof(CharMask)); | ||
605 | // if (++PrintCount == 0) PrintInfo(DecodedFile,EncodedFile); | ||
606 | } | ||
607 | void _STDCALL EncodeFile(CSink* EncodedFile, CSource* DecodedFile, | ||
608 | int MaxOrder,MR_METHOD MRMethod) | ||
609 | { | ||
610 | ariInitEncoder(); StartModelRare(MaxOrder,MRMethod); | ||
611 | for (PPM_CONTEXT* MinContext; ; ) { | ||
612 | BYTE ns=(MinContext=MaxContext)->NumStats; | ||
613 | int c = _PPMD_E_GETC(DecodedFile); | ||
614 | if ( ns ) { | ||
615 | MinContext->encodeSymbol1(c); ariEncodeSymbol(); | ||
616 | } else { | ||
617 | MinContext->encodeBinSymbol(c); ariShiftEncodeSymbol(TOT_BITS); | ||
618 | } | ||
619 | while ( !FoundState ) { | ||
620 | ARI_ENC_NORMALIZE(EncodedFile); | ||
621 | do { | ||
622 | OrderFall++; MinContext=MinContext->Suffix; | ||
623 | if ( !MinContext ) goto STOP_ENCODING; | ||
624 | } while (MinContext->NumStats == NumMasked); | ||
625 | MinContext->encodeSymbol2(c); ariEncodeSymbol(); | ||
626 | } | ||
627 | if (!OrderFall && (BYTE*) FoundState->Successor >= UnitsStart) | ||
628 | PrefetchData(MaxContext=FoundState->Successor); | ||
629 | else { | ||
630 | UpdateModel(MinContext); PrefetchData(MaxContext); | ||
631 | if (EscCount == 0) ClearMask(EncodedFile,DecodedFile); | ||
632 | } | ||
633 | ARI_ENC_NORMALIZE(EncodedFile); | ||
634 | } | ||
635 | STOP_ENCODING: | ||
636 | ARI_FLUSH_ENCODER(EncodedFile); //PrintInfo(DecodedFile,EncodedFile); | ||
637 | } | ||
638 | void _STDCALL DecodeFile(CSink* DecodedFile, CSource* EncodedFile, | ||
639 | int MaxOrder,MR_METHOD MRMethod) | ||
640 | { | ||
641 | ARI_INIT_DECODER(EncodedFile); StartModelRare(MaxOrder,MRMethod); | ||
642 | PPM_CONTEXT* MinContext=MaxContext; | ||
643 | for (BYTE ns=MinContext->NumStats; ; ) { | ||
644 | ( ns )?(MinContext->decodeSymbol1()):(MinContext->decodeBinSymbol()); | ||
645 | ariRemoveSubrange(); | ||
646 | while ( !FoundState ) { | ||
647 | ARI_DEC_NORMALIZE(EncodedFile); | ||
648 | do { | ||
649 | OrderFall++; MinContext=MinContext->Suffix; | ||
650 | if ( !MinContext ) goto STOP_DECODING; | ||
651 | } while (MinContext->NumStats == NumMasked); | ||
652 | MinContext->decodeSymbol2(); ariRemoveSubrange(); | ||
653 | } | ||
654 | _PPMD_D_PUTC(FoundState->Symbol,DecodedFile); | ||
655 | if (!OrderFall && (BYTE*) FoundState->Successor >= UnitsStart) | ||
656 | PrefetchData(MaxContext=FoundState->Successor); | ||
657 | else { | ||
658 | UpdateModel(MinContext); PrefetchData(MaxContext); | ||
659 | if (EscCount == 0) ClearMask(EncodedFile,DecodedFile); | ||
660 | } | ||
661 | ns=(MinContext=MaxContext)->NumStats; | ||
662 | ARI_DEC_NORMALIZE(EncodedFile); | ||
663 | } | ||
664 | STOP_DECODING: | ||
665 | // PrintInfo(DecodedFile,EncodedFile); | ||
666 | return; | ||
667 | } | ||
668 | |||
669 | |||
670 | |||
671 | #include "PPMd.h" | ||
672 | #include "CSource.h" | ||
673 | |||
674 | size_t UnPPM(bool extra, unsigned char* readbuffer, size_t reclen, unsigned char* buffer, size_t buffersize) | ||
675 | { | ||
676 | unsigned short order, mem, offset = 1; | ||
677 | int type = 0; | ||
678 | if (extra) | ||
679 | { | ||
680 | order = readbuffer[1]; | ||
681 | mem = readbuffer[0]; | ||
682 | type = order >> 6; | ||
683 | order = (order & 63) + 2; | ||
684 | offset = 2; | ||
685 | } | ||
686 | else | ||
687 | { | ||
688 | order = readbuffer[0]; | ||
689 | mem = order >> 4; | ||
690 | order = (order & 15) + 2; | ||
691 | } | ||
692 | mem++; | ||
693 | // qDebug("Mem:%u Order:%u Type:%u\n", mem, order, type); | ||
694 | StartSubAllocator(mem); | ||
695 | CMemSink sink(buffer, buffersize); | ||
696 | CMemSource source(readbuffer+offset, reclen-offset); | ||
697 | DecodeFile(&sink,&source,order,(MR_METHOD)type); | ||
698 | StopSubAllocator(); | ||
699 | return sink.size(); | ||
700 | } | ||
701 | |||
702 | |||
703 | extern "C" | ||
704 | { | ||
705 | |||
706 | size_t PluckerDecompress3(unsigned char* a, size_t b, unsigned char* c, size_t d) | ||
707 | { | ||
708 | return UnPPM(false, a, b, c, d); | ||
709 | } | ||
710 | |||
711 | size_t PluckerDecompress4(unsigned char* a, size_t b, unsigned char* c, size_t d) | ||
712 | { | ||
713 | return UnPPM(true, a, b, c, d); | ||
714 | } | ||
715 | |||
716 | size_t RebDecompress(unsigned char* a, size_t b, unsigned char* c, size_t d) | ||
717 | { | ||
718 | return UnPPM(true, a, b, c, d); | ||
719 | } | ||
720 | |||
721 | } | ||
diff --git a/noncore/apps/opie-reader/Model.h b/noncore/apps/opie-reader/Model.h new file mode 100644 index 0000000..f3f5274 --- a/dev/null +++ b/noncore/apps/opie-reader/Model.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __MODEL_H | ||
2 | #define __MODEL_H | ||
3 | |||
4 | extern "C" | ||
5 | { | ||
6 | size_t PluckerDecompress3(unsigned char* a, size_t b, unsigned char* c, size_t d); | ||
7 | size_t PluckerDecompress4(unsigned char* a, size_t b, unsigned char* c, size_t d); | ||
8 | size_t RebDecompress(unsigned char* a, size_t b, unsigned char* c, size_t d); | ||
9 | } | ||
10 | |||
11 | #endif | ||
diff --git a/noncore/apps/opie-reader/Palm2QImage.cpp b/noncore/apps/opie-reader/Palm2QImage.cpp index c6907eb..361755f 100644 --- a/noncore/apps/opie-reader/Palm2QImage.cpp +++ b/noncore/apps/opie-reader/Palm2QImage.cpp | |||
@@ -1,4 +1,5 @@ | |||
1 | /* -*- mode: c; indent-tabs-mode: nil; -*- */ | 1 | /* -*- mode: c; indent-tabs-mode: nil; -*- */ |
2 | |||
2 | #include <stdio.h> | 3 | #include <stdio.h> |
3 | #include <stdlib.h> | 4 | #include <stdlib.h> |
4 | #include <string.h> | 5 | #include <string.h> |
diff --git a/noncore/apps/opie-reader/Prefs.cpp b/noncore/apps/opie-reader/Prefs.cpp index 2733faa..6c4d45b 100644 --- a/noncore/apps/opie-reader/Prefs.cpp +++ b/noncore/apps/opie-reader/Prefs.cpp | |||
@@ -8,6 +8,8 @@ | |||
8 | ****************************************************************************/ | 8 | ****************************************************************************/ |
9 | #include "Prefs.h" | 9 | #include "Prefs.h" |
10 | 10 | ||
11 | #include <stdlib.h> | ||
12 | |||
11 | #include <qcheckbox.h> | 13 | #include <qcheckbox.h> |
12 | #include <qlabel.h> | 14 | #include <qlabel.h> |
13 | #include <qpushbutton.h> | 15 | #include <qpushbutton.h> |
@@ -18,6 +20,7 @@ | |||
18 | #include <qwhatsthis.h> | 20 | #include <qwhatsthis.h> |
19 | #include <qbuttongroup.h> | 21 | #include <qbuttongroup.h> |
20 | #include <qlineedit.h> | 22 | #include <qlineedit.h> |
23 | #include <qdir.h> | ||
21 | #ifdef USECOMBO | 24 | #ifdef USECOMBO |
22 | #include <qcombobox.h> | 25 | #include <qcombobox.h> |
23 | #else | 26 | #else |
@@ -102,6 +105,11 @@ CLayoutPrefs::CLayoutPrefs( QWidget* parent, const char* name, WFlags fl ) | |||
102 | pkern = new QCheckBox( bg ); | 105 | pkern = new QCheckBox( bg ); |
103 | pkern->setText( tr( "Kern" ) ); | 106 | pkern->setText( tr( "Kern" ) ); |
104 | 107 | ||
108 | InlineTables = new QCheckBox( bg ); | ||
109 | InlineTables->setText( tr( "Inline Tables" ) ); | ||
110 | |||
111 | Underlinelinks = new QCheckBox( bg ); | ||
112 | Underlinelinks->setText( tr( "Underline Links" ) ); | ||
105 | /* | 113 | /* |
106 | Negative = new QCheckBox( bg ); | 114 | Negative = new QCheckBox( bg ); |
107 | Negative->setText( tr( "Negative" ) ); | 115 | Negative->setText( tr( "Negative" ) ); |
@@ -562,6 +570,9 @@ CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl ) | |||
562 | clipboard = new QCheckBox( bg ); | 570 | clipboard = new QCheckBox( bg ); |
563 | clipboard->setText( tr( "Clipboard" ) ); | 571 | clipboard->setText( tr( "Clipboard" ) ); |
564 | 572 | ||
573 | QCheckBox* outcodec = new QCheckBox( bg ); | ||
574 | outcodec->setText( tr( "Output" ) ); | ||
575 | |||
565 | } | 576 | } |
566 | 577 | ||
567 | CMiscPrefs::~CMiscPrefs() | 578 | CMiscPrefs::~CMiscPrefs() |
@@ -593,6 +604,9 @@ CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl ) | |||
593 | clipboard = new QCheckBox( gb ); | 604 | clipboard = new QCheckBox( gb ); |
594 | clipboard->setText( tr( "Clipboard" ) ); | 605 | clipboard->setText( tr( "Clipboard" ) ); |
595 | 606 | ||
607 | boutput = new QCheckBox( gb ); | ||
608 | boutput->setText( tr( "Output" ) ); | ||
609 | |||
596 | QButtonGroup* bg = new QButtonGroup(1, Qt::Horizontal, "Plucker", this); | 610 | QButtonGroup* bg = new QButtonGroup(1, Qt::Horizontal, "Plucker", this); |
597 | hl->addWidget( bg ); | 611 | hl->addWidget( bg ); |
598 | 612 | ||
@@ -604,33 +618,55 @@ CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl ) | |||
604 | 618 | ||
605 | Continuous = new QCheckBox( bg ); | 619 | Continuous = new QCheckBox( bg ); |
606 | Continuous->setText( tr( "Continuous" ) ); | 620 | Continuous->setText( tr( "Continuous" ) ); |
607 | 621 | bg = new QButtonGroup(2, Qt::Horizontal, "Background", this); | |
608 | bg = new QButtonGroup(2, Qt::Horizontal, "Scroll", this); | ||
609 | vl->addWidget( bg ); | 622 | vl->addWidget( bg ); |
610 | 623 | ||
611 | // scrollinplace = new QCheckBox( bg ); | 624 | // QLabel* TextLabel = new QLabel( bg ); |
612 | // scrollinplace->setText( tr( "In Place" ) ); | 625 | // TextLabel->setText( tr( "Copy an image to \"background\" in\n~/Applications/uqtreader/Theme/" ) ); |
626 | |||
613 | #ifdef USECOMBO | 627 | #ifdef USECOMBO |
614 | scrolltype = new QComboBox( bg ); | 628 | bgtype = new QComboBox( bg ); |
615 | #else | 629 | #else |
616 | scrolltype = new MenuButton( this); | 630 | bgtype = new MenuButton( this); |
617 | #endif | 631 | #endif |
618 | scrolltype->insertItem("In Place"); | 632 | bgtype->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); |
619 | scrolltype->insertItem("Rolling (moving bg)"); | 633 | |
620 | scrolltype->insertItem("Rolling (window)"); | 634 | bgtype->insertItem( tr("Centred") ); |
621 | scrolltype->insertItem("Rolling (static bg)"); | 635 | bgtype->insertItem( tr("Tiled") ); |
622 | scrolltype->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); | 636 | bgtype->insertItem( tr("Fitted") ); |
623 | 637 | ||
638 | DoubleBuffer = new QCheckBox( bg ); | ||
639 | DoubleBuffer->setText( tr( "Double Buffer" ) ); | ||
624 | 640 | ||
641 | QLabel* TextLabel = new QLabel( bg ); | ||
642 | TextLabel->setText( tr( "Minibar Colour" ) ); | ||
625 | #ifdef USECOMBO | 643 | #ifdef USECOMBO |
626 | scrollcolor = new QComboBox( bg ); | 644 | minibarcol = new QComboBox( bg ); |
627 | #else | 645 | #else |
628 | scrollcolor = new MenuButton( this); | 646 | minibarcol = new MenuButton( this); |
629 | #endif | 647 | #endif |
630 | populate_colours(scrollcolor); | 648 | populate_colours(minibarcol); |
631 | scrollcolor->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); | 649 | minibarcol->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); |
650 | } | ||
651 | |||
652 | CMiscPrefs::~CMiscPrefs() | ||
653 | { | ||
654 | // no need to delete child widgets, Qt does it all for us | ||
655 | } | ||
656 | |||
657 | CScrollPrefs::CScrollPrefs( QWidget* parent, const char* name, WFlags fl ) | ||
658 | : QWidget( parent, name, fl ) | ||
659 | { | ||
660 | |||
661 | QHBoxLayout* hl = new QHBoxLayout(this); | ||
632 | 662 | ||
663 | hl->setMargin( 0 ); | ||
664 | |||
665 | QButtonGroup* bg = new QButtonGroup(2, Qt::Horizontal, "Scroll", this); | ||
666 | hl->addWidget( bg ); | ||
633 | 667 | ||
668 | // scrollinplace = new QCheckBox( bg ); | ||
669 | // scrollinplace->setText( tr( "In Place" ) ); | ||
634 | QLabel* TextLabel = new QLabel( bg ); | 670 | QLabel* TextLabel = new QLabel( bg ); |
635 | TextLabel->setText( tr( "Scroll step" ) ); | 671 | TextLabel->setText( tr( "Scroll step" ) ); |
636 | // gl->addWidget(TextLabel, 2, 0); | 672 | // gl->addWidget(TextLabel, 2, 0); |
@@ -639,51 +675,78 @@ CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl ) | |||
639 | scrollstep->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); | 675 | scrollstep->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); |
640 | 676 | ||
641 | TextLabel = new QLabel( bg ); | 677 | TextLabel = new QLabel( bg ); |
642 | TextLabel->setText( tr( "Minibar Colour" ) ); | 678 | TextLabel->setText( tr( "Scroll type" ) ); |
643 | #ifdef USECOMBO | 679 | #ifdef USECOMBO |
644 | minibarcol = new QComboBox( bg ); | 680 | scrolltype = new QComboBox( bg ); |
645 | #else | 681 | #else |
646 | minibarcol = new MenuButton( this); | 682 | scrolltype = new MenuButton( this); |
647 | #endif | 683 | #endif |
648 | populate_colours(minibarcol); | 684 | scrolltype->insertItem("In Place"); |
649 | minibarcol->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); | 685 | scrolltype->insertItem("Rolling (moving bg)"); |
686 | scrolltype->insertItem("Rolling (window)"); | ||
687 | scrolltype->insertItem("Rolling (static bg)"); | ||
688 | scrolltype->insertItem("Send to output"); | ||
689 | scrolltype->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); | ||
650 | 690 | ||
691 | TextLabel = new QLabel( bg ); | ||
692 | TextLabel->setText( tr( "Colour of scroll\nprogress indicator" ) ); | ||
651 | 693 | ||
652 | bg = new QButtonGroup(2, Qt::Vertical, "Background", this); | 694 | #ifdef USECOMBO |
653 | vl->addWidget( bg ); | 695 | scrollcolor = new QComboBox( bg ); |
696 | #else | ||
697 | scrollcolor = new MenuButton( this); | ||
698 | #endif | ||
699 | populate_colours(scrollcolor); | ||
700 | scrollcolor->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); | ||
654 | 701 | ||
655 | // QLabel* TextLabel = new QLabel( bg ); | 702 | TextLabel = new QLabel( bg ); |
656 | // TextLabel->setText( tr( "Copy an image to \"background\" in\n~/Applications/uqtreader/Theme/" ) ); | 703 | TextLabel->setText( tr( "Output" ) ); |
657 | 704 | ||
658 | #ifdef USECOMBO | 705 | #ifdef USECOMBO |
659 | bgtype = new QComboBox( bg ); | 706 | outcodec = new QComboBox( bg ); |
660 | #else | 707 | #else |
661 | bgtype = new MenuButton( this); | 708 | outcodec = new MenuButton( this); |
662 | #endif | 709 | #endif |
663 | bgtype->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); | 710 | #ifdef USEQPE |
664 | 711 | #ifdef OPIE | |
665 | bgtype->insertItem( tr("Centred") ); | 712 | QString codecpath(getenv("OPIEDIR")); |
666 | bgtype->insertItem( tr("Tiled") ); | 713 | #else |
667 | bgtype->insertItem( tr("Fitted") ); | 714 | QString codecpath(getenv("QTDIR")); |
715 | #endif | ||
716 | codecpath += "/plugins/reader/outcodecs"; | ||
717 | #else | ||
718 | QString codecpath(getenv("READERDIR")); | ||
719 | codecpath += "/outcodecs"; | ||
720 | #endif | ||
721 | QDir ocd(codecpath, "lib*.so"); | ||
722 | for (int i = 0; i < ocd.count(); ++i) | ||
723 | { | ||
724 | QString tmp(ocd[i]); | ||
725 | outcodec->insertItem(tmp.mid(3,tmp.length()-6)); | ||
726 | } | ||
727 | outcodec->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); | ||
668 | } | 728 | } |
669 | 729 | ||
670 | CMiscPrefs::~CMiscPrefs() | 730 | CScrollPrefs::~CScrollPrefs() |
671 | { | 731 | { |
672 | // no need to delete child widgets, Qt does it all for us | 732 | // no need to delete child widgets, Qt does it all for us |
673 | } | 733 | } |
674 | 734 | ||
735 | |||
675 | CPrefs::CPrefs( int w, bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true) | 736 | CPrefs::CPrefs( int w, bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true) |
676 | { | 737 | { |
677 | setCaption(tr( "OpieReader Settings" ) ); | 738 | setCaption(tr( "OpieReader Settings" ) ); |
678 | QTabWidget* td = new QTabWidget(this); | 739 | QTabWidget* td = new QTabWidget(this); |
679 | layout = new CLayoutPrefs(this); | 740 | layout = new CLayoutPrefs(this); |
680 | layout2 = new CLayoutPrefs2(w, this); | 741 | layout2 = new CLayoutPrefs2(w, this); |
742 | scroll = new CScrollPrefs(this); | ||
681 | misc = new CMiscPrefs(this); | 743 | misc = new CMiscPrefs(this); |
682 | // button = new CButtonPrefs(kmap, this); | 744 | // button = new CButtonPrefs(kmap, this); |
683 | inter = new CInterPrefs(this); | 745 | inter = new CInterPrefs(this); |
684 | td->addTab(layout, tr("Layout")); | 746 | td->addTab(layout, tr("Layout")); |
685 | td->addTab(layout2, tr("Layout(2)")); | 747 | td->addTab(layout2, tr("Layout(2)")); |
686 | td->addTab(inter, tr("Locale")); | 748 | td->addTab(inter, tr("Locale")); |
749 | td->addTab(scroll, tr("Scroll")); | ||
687 | td->addTab(misc, tr("Misc")); | 750 | td->addTab(misc, tr("Misc")); |
688 | // td->addTab(button, tr("Buttons")); | 751 | // td->addTab(button, tr("Buttons")); |
689 | QVBoxLayout* v = new QVBoxLayout(this); | 752 | QVBoxLayout* v = new QVBoxLayout(this); |
diff --git a/noncore/apps/opie-reader/Prefs.h b/noncore/apps/opie-reader/Prefs.h index cf12b70..103484e 100644 --- a/noncore/apps/opie-reader/Prefs.h +++ b/noncore/apps/opie-reader/Prefs.h | |||
@@ -61,6 +61,8 @@ public: | |||
61 | QCheckBox* pkern; | 61 | QCheckBox* pkern; |
62 | // QCheckBox* Inverse; | 62 | // QCheckBox* Inverse; |
63 | // QCheckBox* Negative; | 63 | // QCheckBox* Negative; |
64 | QCheckBox* InlineTables; | ||
65 | QCheckBox* Underlinelinks; | ||
64 | }; | 66 | }; |
65 | 67 | ||
66 | class CLayoutPrefs2 : public QWidget | 68 | class CLayoutPrefs2 : public QWidget |
@@ -98,6 +100,7 @@ public: | |||
98 | QCheckBox* Depluck; | 100 | QCheckBox* Depluck; |
99 | QCheckBox* Dejpluck; | 101 | QCheckBox* Dejpluck; |
100 | QCheckBox* Continuous; | 102 | QCheckBox* Continuous; |
103 | QCheckBox* DoubleBuffer; | ||
101 | protected: | 104 | protected: |
102 | 105 | ||
103 | QHBoxLayout* Layout5; | 106 | QHBoxLayout* Layout5; |
@@ -116,22 +119,39 @@ public: | |||
116 | CMiscPrefs( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); | 119 | CMiscPrefs( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); |
117 | ~CMiscPrefs(); | 120 | ~CMiscPrefs(); |
118 | 121 | ||
119 | QCheckBox *annotation, *dictionary, *clipboard; | 122 | QCheckBox *annotation, *dictionary, *clipboard, *boutput; |
120 | QCheckBox *Depluck, *Dejpluck, *Continuous; | 123 | QCheckBox *Depluck, *Dejpluck, *Continuous, *DoubleBuffer; |
124 | |||
125 | #ifdef USECOMBO | ||
126 | QComboBox *bgtype, *minibarcol; | ||
127 | #else | ||
128 | MenuButton *bgtype, *minibarcol; | ||
129 | #endif | ||
130 | }; | ||
131 | |||
132 | class CScrollPrefs : public QWidget | ||
133 | { | ||
134 | |||
135 | public: | ||
136 | |||
137 | friend class CPrefs; | ||
138 | |||
139 | CScrollPrefs( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); | ||
140 | ~CScrollPrefs(); | ||
121 | 141 | ||
122 | QSpinBox *scrollstep; | 142 | QSpinBox *scrollstep; |
123 | 143 | ||
124 | #ifdef USECOMBO | 144 | #ifdef USECOMBO |
125 | QComboBox *scrollcolor, *bgtype, *scrolltype, *minibarcol; | 145 | QComboBox *scrollcolor, *scrolltype, *outcodec; |
126 | #else | 146 | #else |
127 | MenuButton *scrollcolor, *bgtype, *scrolltype, *minibarcol; | 147 | MenuButton *scrollcolor, *scrolltype, *outcodec; |
128 | #endif | 148 | #endif |
129 | }; | 149 | }; |
130 | /* | 150 | /* |
131 | class QListView; | 151 | class QListView; |
132 | class QListViewItem; | 152 | class QListViewItem; |
133 | 153 | ||
134 | class CButtonPrefs : public QWidget | 154 | sclass CButtonPrefs : public QWidget |
135 | { | 155 | { |
136 | Q_OBJECT | 156 | Q_OBJECT |
137 | QMap<orKey, int> *kmap; | 157 | QMap<orKey, int> *kmap; |
@@ -189,7 +209,7 @@ Q_OBJECT | |||
189 | CLayoutPrefs* layout; | 209 | CLayoutPrefs* layout; |
190 | CLayoutPrefs2* layout2; | 210 | CLayoutPrefs2* layout2; |
191 | CMiscPrefs* misc; | 211 | CMiscPrefs* misc; |
192 | // CButtonPrefs* button; | 212 | CScrollPrefs* scroll; |
193 | CInterPrefs* inter; | 213 | CInterPrefs* inter; |
194 | 214 | ||
195 | void keyPressEvent(QKeyEvent* e) | 215 | void keyPressEvent(QKeyEvent* e) |
@@ -221,7 +241,9 @@ Q_OBJECT | |||
221 | void customhyphen(bool _v) { layout->customhyphen->setChecked(_v); } | 241 | void customhyphen(bool _v) { layout->customhyphen->setChecked(_v); } |
222 | */ | 242 | */ |
223 | bool StripCR() { return layout->StripCR->isChecked(); } | 243 | bool StripCR() { return layout->StripCR->isChecked(); } |
244 | bool InlineTables() { return layout->InlineTables->isChecked(); } | ||
224 | bool repalm() { return layout->prepalm->isChecked(); } | 245 | bool repalm() { return layout->prepalm->isChecked(); } |
246 | bool UnderlineLink() { return layout->Underlinelinks->isChecked(); } | ||
225 | bool kern() { return layout->pkern->isChecked(); } | 247 | bool kern() { return layout->pkern->isChecked(); } |
226 | bool Dehyphen() { return layout->Dehyphen->isChecked(); } | 248 | bool Dehyphen() { return layout->Dehyphen->isChecked(); } |
227 | bool SingleSpace() { return layout->SingleSpace->isChecked(); } | 249 | bool SingleSpace() { return layout->SingleSpace->isChecked(); } |
@@ -246,7 +268,9 @@ Q_OBJECT | |||
246 | 268 | ||
247 | 269 | ||
248 | void StripCR(bool v) { layout->StripCR->setChecked(v); } | 270 | void StripCR(bool v) { layout->StripCR->setChecked(v); } |
271 | void InlineTables(bool v) { layout->InlineTables->setChecked(v); } | ||
249 | void repalm(bool v) { layout->prepalm->setChecked(v); } | 272 | void repalm(bool v) { layout->prepalm->setChecked(v); } |
273 | void UnderlineLink(bool v) { layout->Underlinelinks->setChecked(v); } | ||
250 | void kern(bool v) { layout->pkern->setChecked(v); } | 274 | void kern(bool v) { layout->pkern->setChecked(v); } |
251 | void Dehyphen(bool v) { layout->Dehyphen->setChecked(v); } | 275 | void Dehyphen(bool v) { layout->Dehyphen->setChecked(v); } |
252 | void SingleSpace(bool v) { layout->SingleSpace->setChecked(v); } | 276 | void SingleSpace(bool v) { layout->SingleSpace->setChecked(v); } |
@@ -273,15 +297,15 @@ Q_OBJECT | |||
273 | #endif | 297 | #endif |
274 | #ifdef USECOMBO | 298 | #ifdef USECOMBO |
275 | void bgtype(int v) { misc->bgtype->setCurrentItem(v); } | 299 | void bgtype(int v) { misc->bgtype->setCurrentItem(v); } |
276 | void scrollcolor(int v) { misc->scrollcolor->setCurrentItem(v); } | 300 | void scrollcolor(int v) { scroll->scrollcolor->setCurrentItem(v); } |
277 | void minibarcol(int v) { misc->minibarcol->setCurrentItem(v); } | 301 | void minibarcol(int v) { misc->minibarcol->setCurrentItem(v); } |
278 | #else | 302 | #else |
279 | void bgtype(int v) { misc->bgtype->select(v); } | 303 | void bgtype(int v) { misc->bgtype->select(v); } |
280 | void scrollcolor(int v) { misc->scrollcolor->select(v); } | 304 | void scrollcolor(int v) { scroll->scrollcolor->select(v); } |
281 | void minibarcol(int v) { misc->minibarcol->select(v); } | 305 | void minibarcol(int v) { misc->minibarcol->select(v); } |
282 | #endif | 306 | #endif |
283 | int bgtype() { return misc->bgtype->currentItem(); } | 307 | int bgtype() { return misc->bgtype->currentItem(); } |
284 | int scrollcolor() { return misc->scrollcolor->currentItem(); } | 308 | int scrollcolor() { return scroll->scrollcolor->currentItem(); } |
285 | int minibarcol() { return misc->minibarcol->currentItem(); } | 309 | int minibarcol() { return misc->minibarcol->currentItem(); } |
286 | 310 | ||
287 | 311 | ||
@@ -300,7 +324,6 @@ Q_OBJECT | |||
300 | int background() { return layout2->bgsel->currentItem(); } | 324 | int background() { return layout2->bgsel->currentItem(); } |
301 | 325 | ||
302 | 326 | ||
303 | |||
304 | #ifdef USECOMBO | 327 | #ifdef USECOMBO |
305 | void Font(QString& s) | 328 | void Font(QString& s) |
306 | { | 329 | { |
@@ -317,12 +340,34 @@ Q_OBJECT | |||
317 | void Font(QString& s) { layout2->fontselector->select(s); } | 340 | void Font(QString& s) { layout2->fontselector->select(s); } |
318 | #endif | 341 | #endif |
319 | 342 | ||
343 | #ifdef USECOMBO | ||
344 | void outcodec(QString& s) | ||
345 | { | ||
346 | for (int i = 1; i <= scroll->outcodec->count(); i++) | ||
347 | { | ||
348 | if (scroll->outcodec->text(i) == s) | ||
349 | { | ||
350 | scroll->outcodec->setCurrentItem(i); | ||
351 | break; | ||
352 | } | ||
353 | } | ||
354 | } | ||
355 | #else | ||
356 | void outcodec(QString& s) { scroll->outcodec->select(s); } | ||
357 | #endif | ||
358 | QString outcodec() { return scroll->outcodec->currentText(); } | ||
359 | |||
360 | void miscoutput(bool v) { return misc->boutput->setChecked(v); } | ||
361 | bool miscoutput() { return misc->boutput->isChecked(); } | ||
362 | |||
320 | bool Depluck() { return misc->Depluck->isChecked(); } | 363 | bool Depluck() { return misc->Depluck->isChecked(); } |
321 | void Depluck(bool v) { misc->Depluck->setChecked(v); } | 364 | void Depluck(bool v) { misc->Depluck->setChecked(v); } |
322 | bool Dejpluck() { return misc->Dejpluck->isChecked(); } | 365 | bool Dejpluck() { return misc->Dejpluck->isChecked(); } |
323 | void Dejpluck(bool v) { misc->Dejpluck->setChecked(v); } | 366 | void Dejpluck(bool v) { misc->Dejpluck->setChecked(v); } |
324 | bool Continuous() { return misc->Continuous->isChecked(); } | 367 | bool Continuous() { return misc->Continuous->isChecked(); } |
325 | void Continuous(bool v) { misc->Continuous->setChecked(v); } | 368 | void Continuous(bool v) { misc->Continuous->setChecked(v); } |
369 | bool DoubleBuffer() { return misc->DoubleBuffer->isChecked(); } | ||
370 | void DoubleBuffer(bool v) { misc->DoubleBuffer->setChecked(v); } | ||
326 | bool SwapMouse() { return inter->SwapMouse->isChecked(); } | 371 | bool SwapMouse() { return inter->SwapMouse->isChecked(); } |
327 | void SwapMouse(bool v) { inter->SwapMouse->setChecked(v); } | 372 | void SwapMouse(bool v) { inter->SwapMouse->setChecked(v); } |
328 | 373 | ||
@@ -371,15 +416,15 @@ Q_OBJECT | |||
371 | void propfontchange(bool v) { inter->propfontchange->setChecked(v); } | 416 | void propfontchange(bool v) { inter->propfontchange->setChecked(v); } |
372 | 417 | ||
373 | int encoding() { return inter->encoding->currentItem(); } | 418 | int encoding() { return inter->encoding->currentItem(); } |
374 | int scrolltype() { return misc->scrolltype->currentItem(); } | 419 | int scrolltype() { return scroll->scrolltype->currentItem(); } |
375 | #ifdef USECOMBO | 420 | #ifdef USECOMBO |
376 | void encoding(int v) { inter->encoding->setCurrentItem(v); } | 421 | void encoding(int v) { inter->encoding->setCurrentItem(v); } |
377 | void scrolltype(int v) { misc->scrolltype->setCurrentItem(v); } | 422 | void scrolltype(int v) { scroll->scrolltype->setCurrentItem(v); } |
378 | #else | 423 | #else |
379 | void encoding(int v) { inter->encoding->select(v); } | 424 | void encoding(int v) { inter->encoding->select(v); } |
380 | void scrolltype(int v) { misc->scrolltype->select(v); } | 425 | void scrolltype(int v) { scroll->scrolltype->select(v); } |
381 | #endif | 426 | #endif |
382 | void scrollstep(int v) { misc->scrollstep->setValue(v); } | 427 | void scrollstep(int v) { scroll->scrollstep->setValue(v); } |
383 | int scrollstep() { return misc->scrollstep->value(); } | 428 | int scrollstep() { return scroll->scrollstep->value(); } |
384 | }; | 429 | }; |
385 | #endif // CPREFS_H | 430 | #endif // CPREFS_H |
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 | |||
@@ -32,12 +32,16 @@ const int _SBARHEIGHT = 3; | |||
32 | #endif | 32 | #endif |
33 | #include <qfileinfo.h> | 33 | #include <qfileinfo.h> |
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 |
37 | const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; | 40 | const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 }; |
38 | #else | 41 | #else |
39 | const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 }; | 42 | 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 }; |
42 | 46 | ||
43 | //const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 }; | 47 | //const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 }; |
@@ -49,9 +53,9 @@ tchar QTReader::pluckernextpart[] = { 'C','l','i','c','k',' ','h','e','r','e',' | |||
49 | tchar QTReader::jplucknextpart[] = { 'N','e','x','t',' ','P','a','r','t',' ','>','>',0 }; | 53 | tchar QTReader::jplucknextpart[] = { 'N','e','x','t',' ','P','a','r','t',' ','>','>',0 }; |
50 | //tchar QTReader::jplucknextpart[] = { 10,'#',10,'N','e','x','t',' ','P','a','r','t',' ','>','>',0 }; | 54 | //tchar QTReader::jplucknextpart[] = { 10,'#',10,'N','e','x','t',' ','P','a','r','t',' ','>','>',0 }; |
51 | 55 | ||
52 | |||
53 | QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : | 56 | QTReader::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), |
56 | m_default_bg(255,255,255), | 60 | m_default_bg(255,255,255), |
57 | m_bg(255,255,255), | 61 | m_bg(255,255,255), |
@@ -89,16 +93,12 @@ QTReader::QTReader( QWidget *parent, const char *name, WFlags f) : | |||
89 | m_currentlinkoffset(-1), | 93 | m_currentlinkoffset(-1), |
90 | m_currentlink(-1) | 94 | m_currentlink(-1) |
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 | } |
103 | 103 | ||
104 | /* | 104 | /* |
@@ -117,7 +117,7 @@ QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *nam | |||
117 | m_fm(NULL) | 117 | m_fm(NULL) |
118 | { | 118 | { |
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); |
122 | } | 122 | } |
123 | */ | 123 | */ |
@@ -138,7 +138,8 @@ long QTReader::real_delay() | |||
138 | 138 | ||
139 | void QTReader::mousePressEvent( QMouseEvent* _e ) | 139 | 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; |
143 | if (m_rotated) | 144 | if (m_rotated) |
144 | { | 145 | { |
@@ -154,6 +155,8 @@ void QTReader::mousePressEvent( QMouseEvent* _e ) | |||
154 | ht = height(); | 155 | ht = height(); |
155 | wh = width(); | 156 | wh = width(); |
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) |
158 | { | 161 | { |
159 | //qDebug("MousePress"); | 162 | //qDebug("MousePress"); |
@@ -168,15 +171,157 @@ void QTReader::mousePressEvent( QMouseEvent* _e ) | |||
168 | hgt += textarray[++lineno]->lineSpacing(); | 171 | hgt += textarray[++lineno]->lineSpacing(); |
169 | } | 172 | } |
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); |
175 | } | 178 | } |
176 | else | 179 | else |
180 | { | ||
177 | processmousepositionevent(_e); | 181 | processmousepositionevent(_e); |
178 | } | 182 | } |
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 | ||
181 | void QTReader::processmousepositionevent( QMouseEvent* _e ) | 326 | void QTReader::processmousepositionevent( QMouseEvent* _e ) |
182 | { | 327 | { |
@@ -295,7 +440,7 @@ void QTReader::goForward() | |||
295 | } | 440 | } |
296 | } | 441 | } |
297 | 442 | ||
298 | 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) | 443 | 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) |
299 | { | 444 | { |
300 | int ht; | 445 | int ht; |
301 | if (m_scrolldy == m_topmargin) | 446 | if (m_scrolldy == m_topmargin) |
@@ -340,7 +485,7 @@ linkType QTReader::getcurrentpos(int x, int y, int w, int h, int& lineno, size_t | |||
340 | for (i = t->length(); i > 0 && t->width(availht, i, true, w, m_left_border, m_right_border) > x; i--); | 485 | for (i = t->length(); i > 0 && t->width(availht, i, true, w, m_left_border, m_right_border) > x; i--); |
341 | offset = i; | 486 | offset = i; |
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 | } |
345 | 490 | ||
346 | void QTReader::suspend() | 491 | void QTReader::suspend() |
@@ -354,6 +499,38 @@ void QTReader::suspend() | |||
354 | */ | 499 | */ |
355 | } | 500 | } |
356 | 501 | ||
502 | void 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 | |||
357 | void QTReader::setTwoTouch(bool _b) | 534 | void QTReader::setTwoTouch(bool _b) |
358 | { | 535 | { |
359 | setBackgroundColor( m_bg ); | 536 | setBackgroundColor( m_bg ); |
@@ -362,7 +539,6 @@ void QTReader::setTwoTouch(bool _b) | |||
362 | 539 | ||
363 | void QTReader::setContinuous(bool _b) | 540 | void QTReader::setContinuous(bool _b) |
364 | { | 541 | { |
365 | buffdoc.unsuspend(); | ||
366 | buffdoc.setContinuous(m_continuousDocument = _b); | 542 | buffdoc.setContinuous(m_continuousDocument = _b); |
367 | } | 543 | } |
368 | 544 | ||
@@ -455,7 +631,7 @@ void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouse | |||
455 | } | 631 | } |
456 | if (!wrd.isEmpty()) | 632 | if (!wrd.isEmpty()) |
457 | { | 633 | { |
458 | qDebug("Selecteed:%s", (const char*)wrd); | 634 | qDebug("Selected:%s", (const char*)wrd); |
459 | if (m_twotouch) | 635 | if (m_twotouch) |
460 | { | 636 | { |
461 | emit OnWordSelected(wrd, wrdstart, wrdend, wrd); | 637 | emit OnWordSelected(wrd, wrdstart, wrdend, wrd); |
@@ -468,9 +644,122 @@ void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouse | |||
468 | } | 644 | } |
469 | } | 645 | } |
470 | 646 | ||
647 | #ifdef USETIMER | ||
648 | void 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 | |||
694 | void 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 | |||
471 | void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | 754 | void 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; |
475 | if (m_rotated) | 764 | if (m_rotated) |
476 | { | 765 | { |
@@ -491,6 +780,7 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
491 | if (mouseUpOn) | 780 | if (mouseUpOn) |
492 | { | 781 | { |
493 | // qDebug("MouseRelease"); | 782 | // qDebug("MouseRelease"); |
783 | /* | ||
494 | switch(m_scrollpos) | 784 | switch(m_scrollpos) |
495 | { | 785 | { |
496 | case 1: // Bottom | 786 | case 1: // Bottom |
@@ -518,6 +808,7 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
518 | default: | 808 | default: |
519 | break; | 809 | break; |
520 | } | 810 | } |
811 | */ | ||
521 | if (textarray[0] != NULL) | 812 | if (textarray[0] != NULL) |
522 | { | 813 | { |
523 | QString line; | 814 | QString line; |
@@ -530,7 +821,7 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
530 | ht += textarray[++lineno]->lineSpacing(); | 821 | ht += textarray[++lineno]->lineSpacing(); |
531 | } | 822 | } |
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; |
535 | if (m_currentlinkstyle != NULL) | 826 | if (m_currentlinkstyle != NULL) |
536 | { | 827 | { |
@@ -539,7 +830,21 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
539 | m_currentlink = -1; | 830 | m_currentlink = -1; |
540 | m_currentlinkoffset = -1; | 831 | m_currentlinkoffset = -1; |
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) |
544 | { | 849 | { |
545 | if ((glt & ePicture) != 0) | 850 | if ((glt & ePicture) != 0) |
@@ -579,14 +884,18 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
579 | ResetScroll(); | 884 | ResetScroll(); |
580 | if (!href.isEmpty()) | 885 | if (!href.isEmpty()) |
581 | { | 886 | { |
582 | if (!buffdoc.getFile(href)) | 887 | if (!buffdoc.getFile(href, nm)) |
583 | { | 888 | { |
584 | emit NewFileRequest(href); | 889 | emit NewFileRequest(href); |
585 | } | 890 | } |
586 | else | 891 | else |
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(); |
591 | } | 900 | } |
592 | } | 901 | } |
@@ -595,7 +904,9 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
595 | qDebug("QTReader:Finding %s", (const char*)nm); | 904 | qDebug("QTReader:Finding %s", (const char*)nm); |
596 | if (buffdoc.findanchor(nm)) | 905 | if (buffdoc.findanchor(nm)) |
597 | { | 906 | { |
907 | buffdoc.resetPos(); | ||
598 | fillbuffer(); | 908 | fillbuffer(); |
909 | m_outofdate = true; | ||
599 | update(); | 910 | update(); |
600 | } | 911 | } |
601 | } | 912 | } |
@@ -612,6 +923,7 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
612 | buffdoc.saveposn(m_lastfile, saveposn); | 923 | buffdoc.saveposn(m_lastfile, saveposn); |
613 | ResetScroll(); | 924 | ResetScroll(); |
614 | fillbuffer(); | 925 | fillbuffer(); |
926 | m_outofdate = true; | ||
615 | update(); | 927 | update(); |
616 | } | 928 | } |
617 | else | 929 | else |
@@ -633,7 +945,6 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
633 | emit OnURLSelected(href, tgt); | 945 | emit OnURLSelected(href, tgt); |
634 | } | 946 | } |
635 | } | 947 | } |
636 | locate(pagelocate()); | ||
637 | } | 948 | } |
638 | return; | 949 | return; |
639 | } | 950 | } |
@@ -648,7 +959,7 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
648 | } | 959 | } |
649 | else | 960 | else |
650 | { | 961 | { |
651 | locate(pagelocate()); | 962 | update(); |
652 | } | 963 | } |
653 | return; | 964 | return; |
654 | } | 965 | } |
@@ -669,10 +980,11 @@ void QTReader::mouseReleaseEvent( QMouseEvent* _e ) | |||
669 | } | 980 | } |
670 | } | 981 | } |
671 | } | 982 | } |
983 | } | ||
672 | 984 | ||
673 | void QTReader::focusInEvent(QFocusEvent* e) | 985 | 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(); |
677 | } | 989 | } |
678 | 990 | ||
@@ -680,7 +992,14 @@ void QTReader::focusOutEvent(QFocusEvent* e) | |||
680 | { | 992 | { |
681 | if (m_autoScroll) | 993 | if (m_autoScroll) |
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; |
685 | } | 1004 | } |
686 | } | 1005 | } |
@@ -717,7 +1036,6 @@ void QTReader::goUp() | |||
717 | 1036 | ||
718 | void QTReader::NavUp() | 1037 | void QTReader::NavUp() |
719 | { | 1038 | { |
720 | buffdoc.unsuspend(); | ||
721 | if (buffdoc.hasnavigation()) | 1039 | if (buffdoc.hasnavigation()) |
722 | { | 1040 | { |
723 | /* | 1041 | /* |
@@ -737,7 +1055,6 @@ void QTReader::NavUp() | |||
737 | 1055 | ||
738 | void QTReader::NavDown() | 1056 | void QTReader::NavDown() |
739 | { | 1057 | { |
740 | buffdoc.unsuspend(); | ||
741 | if (buffdoc.hasnavigation()) | 1058 | if (buffdoc.hasnavigation()) |
742 | { | 1059 | { |
743 | /* | 1060 | /* |
@@ -762,8 +1079,7 @@ void QTReader::zoomin() | |||
762 | bool sc = m_autoScroll; | 1079 | bool sc = m_autoScroll; |
763 | setautoscroll(false); | 1080 | setautoscroll(false); |
764 | setfont(); | 1081 | setfont(); |
765 | locate(pagelocate()); | 1082 | refresh(); |
766 | repaint(); | ||
767 | setautoscroll(sc); | 1083 | setautoscroll(sc); |
768 | } | 1084 | } |
769 | } | 1085 | } |
@@ -775,8 +1091,7 @@ void QTReader::zoomout() | |||
775 | bool sc = m_autoScroll; | 1091 | bool sc = m_autoScroll; |
776 | setautoscroll(false); | 1092 | setautoscroll(false); |
777 | setfont(); | 1093 | setfont(); |
778 | locate(pagelocate()); | 1094 | refresh(); |
779 | repaint(); | ||
780 | setautoscroll(sc); | 1095 | setautoscroll(sc); |
781 | } | 1096 | } |
782 | } | 1097 | } |
@@ -809,7 +1124,6 @@ void QTReader::increaseScroll() | |||
809 | 1124 | ||
810 | void QTReader::keyPressEvent(QKeyEvent* e) | 1125 | void QTReader::keyPressEvent(QKeyEvent* e) |
811 | { | 1126 | { |
812 | buffdoc.unsuspend(); | ||
813 | 1127 | ||
814 | //((QTReaderApp*)parent()->parent())->handlekey(e); | 1128 | //((QTReaderApp*)parent()->parent())->handlekey(e); |
815 | emit HandleKeyRequest(e); | 1129 | emit HandleKeyRequest(e); |
@@ -906,6 +1220,7 @@ void QTReader::CalculateScrollParameters() | |||
906 | 1220 | ||
907 | void QTReader::setautoscroll(bool _sc) | 1221 | void QTReader::setautoscroll(bool _sc) |
908 | { | 1222 | { |
1223 | m_outofdate = true; | ||
909 | if (_sc == m_autoScroll) return; | 1224 | if (_sc == m_autoScroll) return; |
910 | if (m_autoScroll) | 1225 | if (m_autoScroll) |
911 | { | 1226 | { |
@@ -927,6 +1242,9 @@ void QTReader::setautoscroll(bool _sc) | |||
927 | { | 1242 | { |
928 | CDrawBuffer* reusebuffer = textarray[numlines]; | 1243 | CDrawBuffer* reusebuffer = textarray[numlines]; |
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; |
931 | CalculateScrollParameters(); | 1249 | CalculateScrollParameters(); |
932 | 1250 | ||
@@ -947,7 +1265,6 @@ void QTReader::setautoscroll(bool _sc) | |||
947 | 1265 | ||
948 | bool QTReader::getline(CDrawBuffer *buff) | 1266 | bool QTReader::getline(CDrawBuffer *buff) |
949 | { | 1267 | { |
950 | buffdoc.unsuspend(); | ||
951 | bool bRet; | 1268 | bool bRet; |
952 | int availht = ((m_rotated) ? width() : height()) - m_topmargin - m_bottommargin; | 1269 | int availht = ((m_rotated) ? width() : height()) - m_topmargin - m_bottommargin; |
953 | if (m_bMonoSpaced) | 1270 | if (m_bMonoSpaced) |
@@ -1065,24 +1382,6 @@ void QTReader::doinplacescroll() | |||
1065 | mylastpos = locate(); | 1382 | mylastpos = locate(); |
1066 | if (!ch) | 1383 | if (!ch) |
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; |
1087 | m_autoScroll = false; | 1386 | m_autoScroll = false; |
1088 | #ifdef _SCROLLPIPE | 1387 | #ifdef _SCROLLPIPE |
@@ -1099,7 +1398,6 @@ void QTReader::doinplacescroll() | |||
1099 | } | 1398 | } |
1100 | } | 1399 | } |
1101 | #endif | 1400 | #endif |
1102 | //((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll); | ||
1103 | emit SetScrollState(m_autoScroll); | 1401 | emit SetScrollState(m_autoScroll); |
1104 | #ifdef USEQPE | 1402 | #ifdef USEQPE |
1105 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; | 1403 | QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; |
@@ -1494,10 +1792,21 @@ void QTReader::redrawScroll(QPainter* p) | |||
1494 | 1792 | ||
1495 | void QTReader::autoscroll() | 1793 | 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 | ||
1502 | void QTReader::setfont() | 1811 | void QTReader::setfont() |
1503 | { | 1812 | { |
@@ -1557,8 +1866,10 @@ void QTReader::redrawall() | |||
1557 | { | 1866 | { |
1558 | if (m_rotated) | 1867 | if (m_rotated) |
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()); |
1563 | dbp->end(); | 1874 | dbp->end(); |
1564 | 1875 | ||
@@ -1566,30 +1877,38 @@ void QTReader::redrawall() | |||
1566 | m.rotate(90); | 1877 | m.rotate(90); |
1567 | QPixmap rp = dbuff->xForm(m); | 1878 | QPixmap rp = dbuff->xForm(m); |
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()); |
1576 | 1889 | ||
1577 | QWMatrix m; | 1890 | QWMatrix m; |
1578 | m.rotate(90); | 1891 | m.rotate(90); |
1579 | QPixmap rp = dbuff.xForm(m); | 1892 | QPixmap rp = dbuff.xForm(m); |
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 | } |
1583 | else | 1896 | else |
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()); |
1588 | dbp->end(); | 1903 | dbp->end(); |
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 | } |
1594 | } | 1913 | } |
1595 | 1914 | ||
@@ -1600,74 +1919,56 @@ void QTReader::drawFonts() | |||
1600 | int hmargin = ((m_scrollpos == 1) ? _SBARHEIGHT : 0); | 1919 | int hmargin = ((m_scrollpos == 1) ? _SBARHEIGHT : 0); |
1601 | if (hmargin < m_bottommargin) hmargin = m_bottommargin; | 1920 | if (hmargin < m_bottommargin) hmargin = m_bottommargin; |
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 | } |
1617 | else | 1930 | else |
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); |
1663 | } | 1963 | } |
1664 | else | 1964 | else |
1665 | { | 1965 | { |
1666 | int newht = height(); | 1966 | int newht = ((m_rotated) ? width() : height()); |
1667 | if (m_lastheight > newht) | 1967 | if (m_lastheight > newht) |
1668 | { | 1968 | { |
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++) |
1672 | { | 1973 | { |
1673 | if ((ypos += textarray[i]->lineSpacing()) > newht - hmargin) | 1974 | if ((ypos += textarray[i]->lineSpacing()) > newht - hmargin) |
@@ -1682,8 +1983,9 @@ void QTReader::drawFonts() | |||
1682 | } | 1983 | } |
1683 | else if (m_lastheight < newht) | 1984 | else if (m_lastheight < newht) |
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++) |
1688 | { | 1990 | { |
1689 | ypos += textarray[i]->lineSpacing(); | 1991 | ypos += textarray[i]->lineSpacing(); |
@@ -1693,21 +1995,9 @@ void QTReader::drawFonts() | |||
1693 | } | 1995 | } |
1694 | if (numlines > 0) | 1996 | if (numlines > 0) |
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(); |
1712 | } | 2002 | } |
1713 | /* | 2003 | /* |
@@ -1928,13 +2218,16 @@ bool QTReader::ChangeFont(int tgt) | |||
1928 | 2218 | ||
1929 | void QTReader::init() | 2219 | void QTReader::init() |
1930 | { | 2220 | { |
1931 | buffdoc.unsuspend(); | ||
1932 | setBackgroundColor( m_bg ); | 2221 | setBackgroundColor( m_bg ); |
1933 | buffdoc.setfilter(getfilter()); | 2222 | buffdoc.setfilter(getfilter()); |
1934 | ChangeFont(m_textsize); | 2223 | ChangeFont(m_textsize); |
1935 | setFocusPolicy(QWidget::StrongFocus); | 2224 | setFocusPolicy(QWidget::StrongFocus); |
1936 | timer = new QTimer(this); | 2225 | timer = new QTimer(this); |
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); |
1939 | setfont(); | 2232 | setfont(); |
1940 | } | 2233 | } |
@@ -1944,10 +2237,15 @@ void QTReader::init() | |||
1944 | // | 2237 | // |
1945 | QTReader::~QTReader() | 2238 | 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 |
1952 | if (m_autoScroll) | 2250 | if (m_autoScroll) |
1953 | { | 2251 | { |
@@ -1982,10 +2280,48 @@ void QTReader::printIt() | |||
1982 | // Called when the widget needs to be updated. | 2280 | // Called when the widget needs to be updated. |
1983 | // | 2281 | // |
1984 | 2282 | ||
1985 | void QTReader::paintEvent( QPaintEvent * ) | 2283 | void 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 | { |
1987 | drawFonts(); | 2321 | drawFonts(); |
1988 | } | 2322 | } |
2323 | m_outofdate = false; | ||
2324 | } | ||
1989 | 2325 | ||
1990 | // | 2326 | // |
1991 | // Called when the widget has been resized. | 2327 | // Called when the widget has been resized. |
@@ -2016,20 +2352,30 @@ int main( int argc, tchar **argv ) | |||
2016 | */ | 2352 | */ |
2017 | 2353 | ||
2018 | 2354 | ||
2355 | bool 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 | /* | ||
2019 | bool QTReader::locate(unsigned long n) { | 2365 | bool QTReader::locate(unsigned long n) { |
2020 | //printf("Locate\n"); | 2366 | //printf("Locate\n"); |
2021 | buffdoc.unsuspend(); | ||
2022 | buffdoc.locate(n); | 2367 | buffdoc.locate(n); |
2023 | // // qDebug("&buffdoc.located"); | 2368 | // // qDebug("&buffdoc.located"); |
2024 | ResetScroll(); | 2369 | ResetScroll(); |
2025 | fillbuffer(); | 2370 | fillbuffer(); |
2371 | m_outofdate = true; | ||
2026 | // // qDebug("&Buffer filled"); | 2372 | // // qDebug("&Buffer filled"); |
2027 | update(); | 2373 | update(); |
2028 | // // qDebug("&Located"); | 2374 | // // qDebug("&Located"); |
2029 | emitRedraw(); | 2375 | emitRedraw(); |
2030 | return true; | 2376 | return true; |
2031 | } | 2377 | } |
2032 | 2378 | */ | |
2033 | unsigned int QTReader::screenlines() | 2379 | unsigned int QTReader::screenlines() |
2034 | { | 2380 | { |
2035 | // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; | 2381 | // int linespacing = (tight) ? m_ascent : m_ascent+m_descent; |
@@ -2039,7 +2385,6 @@ unsigned int QTReader::screenlines() | |||
2039 | 2385 | ||
2040 | bool QTReader::fillbuffer(int reuse, int ht, int newht) | 2386 | 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); |
2044 | if (hmargin < m_bottommargin) hmargin = m_bottommargin; | 2389 | if (hmargin < m_bottommargin) hmargin = m_bottommargin; |
2045 | if (ht < 0) ht = m_topmargin; | 2390 | if (ht < 0) ht = m_topmargin; |
@@ -2063,13 +2408,22 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht) | |||
2063 | locnarray[numlines] = locate(); | 2408 | locnarray[numlines] = locate(); |
2064 | int ch = getline(textarray[numlines]); | 2409 | int ch = getline(textarray[numlines]); |
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++; |
2067 | if (!ch) | 2418 | if (!ch) |
2068 | { | 2419 | { |
2069 | if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/) | 2420 | if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/) |
2070 | { | 2421 | { |
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; |
2074 | } | 2428 | } |
2075 | else | 2429 | else |
@@ -2101,7 +2455,6 @@ bool QTReader::fillbuffer(int reuse, int ht, int newht) | |||
2101 | void QTReader::dopagedn() | 2455 | void QTReader::dopagedn() |
2102 | { | 2456 | { |
2103 | // qDebug("HEIGHT(2):%d", m_lastheight); | 2457 | // qDebug("HEIGHT(2):%d", m_lastheight); |
2104 | buffdoc.unsuspend(); | ||
2105 | ResetScroll(); | 2458 | ResetScroll(); |
2106 | int skip = 0, ypos = m_topmargin; | 2459 | int skip = 0, ypos = m_topmargin; |
2107 | if (locate() != mylastpos) | 2460 | if (locate() != mylastpos) |
@@ -2150,20 +2503,21 @@ bool QTReader::synch(size_t start, size_t end) | |||
2150 | { | 2503 | { |
2151 | tchar ch = getch(); | 2504 | tchar ch = getch(); |
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 | } |
2156 | return false; | 2511 | return false; |
2157 | } | 2512 | } |
2158 | 2513 | ||
2159 | void QTReader::dopageup(unsigned int target) | 2514 | void QTReader::dopageup(unsigned int target) |
2160 | { | 2515 | { |
2161 | buffdoc.unsuspend(); | ||
2162 | ResetScroll(); | 2516 | ResetScroll(); |
2163 | CBufferFace<CDrawBuffer*> buff; | 2517 | CBufferFace<CDrawBuffer*> buff; |
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; |
2168 | int nbfl, ypos = m_topmargin; | 2522 | int nbfl, ypos = m_topmargin; |
2169 | if (guess < 128) guess = 128; | 2523 | if (guess < 128) guess = 128; |
@@ -2180,6 +2534,7 @@ void QTReader::dopageup(unsigned int target) | |||
2180 | else if (!m_continuousDocument && (target - guess < buffdoc.startSection())) | 2534 | else if (!m_continuousDocument && (target - guess < buffdoc.startSection())) |
2181 | { | 2535 | { |
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()); |
2184 | } | 2539 | } |
2185 | else | 2540 | else |
@@ -2293,8 +2648,9 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn) | |||
2293 | int prog = 0; | 2648 | int prog = 0; |
2294 | bool bRC = false; | 2649 | bool bRC = false; |
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 | { |
2299 | lcn = m_lastposn; | 2655 | lcn = m_lastposn; |
2300 | } | 2656 | } |
@@ -2316,11 +2672,11 @@ bool QTReader::load_file(const char *newfile, unsigned int _lcn) | |||
2316 | bRC = true; | 2672 | bRC = true; |
2317 | buffdoc.setContinuous(m_continuousDocument); | 2673 | buffdoc.setContinuous(m_continuousDocument); |
2318 | qDebug("buffdoc.openfile done"); | 2674 | qDebug("buffdoc.openfile done"); |
2319 | locate(lcn); | ||
2320 | qDebug("buffdoc.locate done"); | ||
2321 | } | 2675 | } |
2322 | setfilter(getfilter()); | 2676 | setfilter(getfilter()); |
2323 | qDebug("Updated"); | 2677 | qDebug("Updated"); |
2678 | bDoUpdates = true; | ||
2679 | locate(lcn); | ||
2324 | return bRC; | 2680 | return bRC; |
2325 | } | 2681 | } |
2326 | 2682 | ||
@@ -2358,6 +2714,7 @@ void QTReader::lineDown() | |||
2358 | } | 2714 | } |
2359 | getline(textarray[numlines]); | 2715 | getline(textarray[numlines]); |
2360 | mylastpos = locate(); | 2716 | mylastpos = locate(); |
2717 | m_outofdate = true; | ||
2361 | update(); | 2718 | update(); |
2362 | } | 2719 | } |
2363 | /* | 2720 | /* |
@@ -2572,9 +2929,13 @@ MarkupType QTReader::PreferredMarkup() | |||
2572 | } | 2929 | } |
2573 | return m; | 2930 | return m; |
2574 | } | 2931 | } |
2575 | #ifdef DOUBLEBUFFER | 2932 | |
2576 | void QTReader::resizeEvent( QResizeEvent * p ) | 2933 | void 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) |
2579 | { | 2940 | { |
2580 | dbuff->resize(p->size().height(),p->size().width()); | 2941 | dbuff->resize(p->size().height(),p->size().width()); |
@@ -2583,6 +2944,7 @@ void QTReader::resizeEvent( QResizeEvent * p ) | |||
2583 | { | 2944 | { |
2584 | dbuff->resize(p->size()); | 2945 | dbuff->resize(p->size()); |
2585 | } | 2946 | } |
2947 | } | ||
2586 | m_bgIsScaled = false; | 2948 | m_bgIsScaled = false; |
2587 | if (m_bgtype == bgStretched) | 2949 | if (m_bgtype == bgStretched) |
2588 | { | 2950 | { |
@@ -2605,29 +2967,23 @@ void QTReader::resizeEvent( QResizeEvent * p ) | |||
2605 | m_bottommargin = (h*m_absbottommargin+500)/1000; | 2967 | m_bottommargin = (h*m_absbottommargin+500)/1000; |
2606 | m_left_border = (w*m_absleft_border+500)/1000; | 2968 | m_left_border = (w*m_absleft_border+500)/1000; |
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 | ||
2617 | void QTReader::setrotated(bool sfs) | 2979 | 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; |
2632 | if (m_rotated) | 2988 | if (m_rotated) |
2633 | { | 2989 | { |
@@ -2648,38 +3004,57 @@ void QTReader::setrotated(bool sfs) | |||
2648 | qDebug("Bottom margin:%u", m_bottommargin ); | 3004 | qDebug("Bottom margin:%u", m_bottommargin ); |
2649 | qDebug("Left margin:%u", m_left_border ); | 3005 | qDebug("Left margin:%u", m_left_border ); |
2650 | qDebug("Right margin:%u", m_right_border ); | 3006 | qDebug("Right margin:%u", m_right_border ); |
3007 | */ | ||
2651 | } | 3008 | } |
2652 | 3009 | ||
2653 | void QTReader::drawBackground() | 3010 | void 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) |
2663 | { | 3033 | { |
2664 | case bgCentred: | 3034 | case bgCentred: |
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 | } |
2670 | break; | 3047 | break; |
2671 | case bgTiled: | 3048 | case bgTiled: |
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 | } |
2684 | break; | 3059 | break; |
2685 | case bgStretched: | 3060 | case bgStretched: |
@@ -2688,15 +3063,22 @@ void QTReader::drawBackground() | |||
2688 | { | 3063 | { |
2689 | m_bgIsScaled = true; | 3064 | m_bgIsScaled = true; |
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 | } |
2695 | break; | 3077 | break; |
2696 | default: | 3078 | default: |
2697 | qDebug("Unknown background type"); | 3079 | qDebug("Unknown background type"); |
2698 | } | 3080 | } |
2699 | // dbp->setBackgroundMode(OpaqueMode); | 3081 | // p->setBackgroundMode(OpaqueMode); |
2700 | } | 3082 | } |
2701 | } | 3083 | } |
2702 | 3084 | ||
@@ -2759,7 +3141,12 @@ void QTReader::blitRot(int dx, int dy, int sw, int sh, CDrawBuffer* txt) | |||
2759 | 3141 | ||
2760 | QString QTReader::about() | 3142 | 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 | } |
2764 | 3151 | ||
2765 | void QTReader::getNextLink() | 3152 | void QTReader::getNextLink() |
@@ -2897,7 +3284,7 @@ void QTReader::gotoLink() | |||
2897 | ResetScroll(); | 3284 | ResetScroll(); |
2898 | if (!href.isEmpty()) | 3285 | if (!href.isEmpty()) |
2899 | { | 3286 | { |
2900 | if (!buffdoc.getFile(href)) | 3287 | if (!buffdoc.getFile(href, nm)) |
2901 | { | 3288 | { |
2902 | emit NewFileRequest(href); | 3289 | emit NewFileRequest(href); |
2903 | } | 3290 | } |
@@ -2905,6 +3292,7 @@ void QTReader::gotoLink() | |||
2905 | { | 3292 | { |
2906 | ResetScroll(); | 3293 | ResetScroll(); |
2907 | fillbuffer(); | 3294 | fillbuffer(); |
3295 | m_outofdate = true; | ||
2908 | update(); | 3296 | update(); |
2909 | } | 3297 | } |
2910 | } | 3298 | } |
@@ -2913,7 +3301,9 @@ void QTReader::gotoLink() | |||
2913 | qDebug("QTReader:Finding %s", (const char*)nm); | 3301 | qDebug("QTReader:Finding %s", (const char*)nm); |
2914 | if (buffdoc.findanchor(nm)) | 3302 | if (buffdoc.findanchor(nm)) |
2915 | { | 3303 | { |
3304 | buffdoc.resetPos(); | ||
2916 | fillbuffer(); | 3305 | fillbuffer(); |
3306 | m_outofdate = true; | ||
2917 | update(); | 3307 | update(); |
2918 | } | 3308 | } |
2919 | } | 3309 | } |
@@ -2930,6 +3320,7 @@ void QTReader::gotoLink() | |||
2930 | buffdoc.saveposn(m_lastfile, saveposn); | 3320 | buffdoc.saveposn(m_lastfile, saveposn); |
2931 | ResetScroll(); | 3321 | ResetScroll(); |
2932 | fillbuffer(); | 3322 | fillbuffer(); |
3323 | m_outofdate = true; | ||
2933 | update(); | 3324 | update(); |
2934 | } | 3325 | } |
2935 | else | 3326 | else |
@@ -2949,9 +3340,9 @@ void QTReader::gotoLink() | |||
2949 | if (!href.isEmpty()) | 3340 | if (!href.isEmpty()) |
2950 | { | 3341 | { |
2951 | emit OnURLSelected(href, tgt); | 3342 | emit OnURLSelected(href, tgt); |
3343 | refresh(); | ||
2952 | } | 3344 | } |
2953 | } | 3345 | } |
2954 | locate(pagelocate()); | ||
2955 | } | 3346 | } |
2956 | m_currentlinkstyle = NULL; | 3347 | m_currentlinkstyle = NULL; |
2957 | m_currentlink = -1; | 3348 | m_currentlink = -1; |
@@ -2960,6 +3351,7 @@ void QTReader::gotoLink() | |||
2960 | 3351 | ||
2961 | void QTReader::refresh(bool full) | 3352 | void QTReader::refresh(bool full) |
2962 | { | 3353 | { |
3354 | qDebug("Refreshing"); | ||
2963 | int h, w; | 3355 | int h, w; |
2964 | if (m_rotated) | 3356 | if (m_rotated) |
2965 | { | 3357 | { |
@@ -2981,5 +3373,120 @@ void QTReader::refresh(bool full) | |||
2981 | qDebug("Left margin:%u", m_left_border ); | 3373 | qDebug("Left margin:%u", m_left_border ); |
2982 | qDebug("Right margin:%u", m_right_border ); | 3374 | qDebug("Right margin:%u", m_right_border ); |
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 | |||
3382 | CFilterChain* 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 | |||
3438 | void 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 | |||
3465 | bool 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 | |||
3478 | bool 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 | } | ||
diff --git a/noncore/apps/opie-reader/QTReader.h b/noncore/apps/opie-reader/QTReader.h index 3bcdde4..9daa07a 100644 --- a/noncore/apps/opie-reader/QTReader.h +++ b/noncore/apps/opie-reader/QTReader.h | |||
@@ -18,25 +18,28 @@ class QTimer; | |||
18 | class QImage; | 18 | class QImage; |
19 | 19 | ||
20 | #include "BGType.h" | 20 | #include "BGType.h" |
21 | #include "striphtml.h" | ||
22 | 21 | ||
23 | #define ROTATION_ENABLED | ||
24 | #define SPECIALSCROLL | 22 | #define SPECIALSCROLL |
25 | #define DOUBLEBUFFER | 23 | |
26 | #ifdef DOUBLEBUFFER | ||
27 | class QPainter; | 24 | class QPainter; |
28 | #endif | 25 | class COutput; |
29 | 26 | ||
30 | class CStyle; | 27 | class CStyle; |
28 | #define USETIMER | ||
31 | 29 | ||
32 | class QTReader : public QWidget | 30 | class QTReader : public QWidget |
33 | { | 31 | { |
34 | Q_OBJECT | 32 | Q_OBJECT |
35 | friend class QTReaderApp; | 33 | friend class QTReaderApp; |
36 | #ifdef DOUBLEBUFFER | 34 | #ifdef USETIMER |
35 | QTimer* m_dragtimer; | ||
36 | unsigned long m_dragtarget; | ||
37 | #endif | ||
38 | COutput* m_output; | ||
39 | bool checkoutput(); | ||
40 | bool m_outofdate, m_drageligible; | ||
37 | QPixmap *dbuff; | 41 | QPixmap *dbuff; |
38 | QPainter* dbp; | 42 | QPainter* dbp; |
39 | #endif | ||
40 | void drawSingleLine(int lineno); | 43 | void drawSingleLine(int lineno); |
41 | void gotoLink(); | 44 | void gotoLink(); |
42 | void emitRedraw(); | 45 | void emitRedraw(); |
@@ -74,11 +77,9 @@ class QTReader : public QWidget | |||
74 | int m_delay, m_scrolltype; | 77 | int m_delay, m_scrolltype; |
75 | unsigned int m_overlap; | 78 | unsigned int m_overlap; |
76 | bool m_autoScroll, m_swapmouse; | 79 | bool m_autoScroll, m_swapmouse; |
77 | void drawBackground(); | 80 | void drawBackground(QPainter*); |
78 | #ifdef ROTATION_ENABLED | ||
79 | bool m_rotated; | 81 | bool m_rotated; |
80 | void setrotated(bool); | 82 | void setrotated(bool); |
81 | #endif | ||
82 | void autoscroll(); | 83 | void autoscroll(); |
83 | QTimer* timer; | 84 | QTimer* timer; |
84 | int m_scrolldy1, m_scrolldy2, m_encd, m_scrollpart, m_totalscroll; | 85 | int m_scrolldy1, m_scrolldy2, m_encd, m_scrollpart, m_totalscroll; |
@@ -95,6 +96,7 @@ class QTReader : public QWidget | |||
95 | FontControl m_fontControl; | 96 | FontControl m_fontControl; |
96 | void setBaseSize(unsigned char _s) { m_fontControl.setBaseSize(_s); } | 97 | void setBaseSize(unsigned char _s) { m_fontControl.setBaseSize(_s); } |
97 | unsigned char getBaseSize() { return m_fontControl.getBaseSize(); } | 98 | unsigned char getBaseSize() { return m_fontControl.getBaseSize(); } |
99 | QString m_outputName; | ||
98 | #ifdef _SCROLLPIPE | 100 | #ifdef _SCROLLPIPE |
99 | FILE* m_pipeout; | 101 | FILE* m_pipeout; |
100 | QString m_pipetarget; | 102 | QString m_pipetarget; |
@@ -106,6 +108,7 @@ public: | |||
106 | // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0); | 108 | // QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0); |
107 | ~QTReader(); | 109 | ~QTReader(); |
108 | QString about(); | 110 | QString about(); |
111 | void readAloud(); | ||
109 | CList<Bkmk>* Bkmklist() { return pBkmklist; } | 112 | CList<Bkmk>* Bkmklist() { return pBkmklist; } |
110 | void setBackground(const QColor& _c) | 113 | void setBackground(const QColor& _c) |
111 | { | 114 | { |
@@ -153,7 +156,7 @@ public: | |||
153 | */ | 156 | */ |
154 | }; | 157 | }; |
155 | void clear() {}; | 158 | void clear() {}; |
156 | void setText(const QString& n, const QString& s) { m_string = n; load_file((const char*)s); }; | 159 | void setText(const QString& n, const QString& s, unsigned int lcn = 0) { m_string = n; load_file((const char*)s, lcn); }; |
157 | /* | 160 | /* |
158 | void setText(bool oldfile) | 161 | void setText(bool oldfile) |
159 | { | 162 | { |
@@ -225,60 +228,12 @@ public: | |||
225 | } | 228 | } |
226 | } | 229 | } |
227 | HighlightFilter* m_highlightfilter; | 230 | HighlightFilter* m_highlightfilter; |
228 | CFilterChain* getfilter() | 231 | CFilterChain* getfilter(); |
229 | { | ||
230 | CFilterChain * filt = new CFilterChain(getencoding()); | ||
231 | if (bstripcr) filt->addfilter(new stripcr); | ||
232 | |||
233 | if (btextfmt || (bautofmt && (PreferredMarkup() == cTEXT))) filt->addfilter(new textfmt); | ||
234 | if (bpeanut || (bautofmt && (PreferredMarkup() == cPML))) filt->addfilter(new PeanutFormatter); | ||
235 | // if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml(m_lastfile)); | ||
236 | |||
237 | #ifdef __STATIC | ||
238 | if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new striphtml(m_lastfile)); | ||
239 | if (bautofmt && (PreferredMarkup() == cCHM)) | ||
240 | { | ||
241 | filt->addfilter(new striphtml(m_lastfile)); | ||
242 | } | ||
243 | #else | ||
244 | if (bstriphtml || (bautofmt && (PreferredMarkup() == cHTML))) filt->addfilter(new ExternFilter("HTMLfilter", m_lastfile)); | ||
245 | if (bautofmt && (PreferredMarkup() == cCHM)) | ||
246 | { | ||
247 | ExternFilter* f = new ExternFilter("HTMLfilter",m_lastfile); | ||
248 | ((striphtml*)f->filter())->setchm(true); | ||
249 | filt->addfilter(f); | ||
250 | } | ||
251 | #endif | ||
252 | m_highlightfilter = new HighlightFilter(this); | ||
253 | filt->addfilter(m_highlightfilter); | ||
254 | |||
255 | if (bdehyphen) filt->addfilter(new dehyphen); | ||
256 | if (bunindent) filt->addfilter(new unindent); | ||
257 | if (brepara) filt->addfilter(new repara(m_reparastring)); | ||
258 | if (bonespace) filt->addfilter(new OnePara); | ||
259 | if (bindenter) filt->addfilter(new indenter(bindenter)); | ||
260 | if (bdblspce) filt->addfilter(new dblspce); | ||
261 | if (bdepluck) filt->addfilter(new DePluck(pluckernextpart)); | ||
262 | if (bdejpluck) filt->addfilter(new DePluck(jplucknextpart)); | ||
263 | if (brepalm) filt->addfilter(new repalm); | ||
264 | if (bkern) filt->addfilter(new kern); | ||
265 | if (bremap) filt->addfilter(new remap); | ||
266 | if (bmakebold) filt->addfilter(new embolden); | ||
267 | if (bfulljust) filt->addfilter(new FullJust); | ||
268 | int r,g,b; | ||
269 | m_default_bg.rgb(&r, &g, &b); | ||
270 | if (r != 255 || g != 255 || b != 255) | ||
271 | filt->addfilter(new setbg(r,g,b)); | ||
272 | m_default_fg.rgb(&r, &g, &b); | ||
273 | if (r != 0 || g != 0 || b != 0) | ||
274 | filt->addfilter(new setfg(r,g,b)); | ||
275 | // if (bNegative) filt->addfilter(new makeNegative); | ||
276 | if (bInverse) filt->addfilter(new makeInverse); | ||
277 | return filt; | ||
278 | } | ||
279 | |||
280 | 232 | ||
281 | private slots: | 233 | private slots: |
234 | #ifdef USETIMER | ||
235 | void actionDrag(); | ||
236 | #endif | ||
282 | void dopageup(); | 237 | void dopageup(); |
283 | void lineDown(); | 238 | void lineDown(); |
284 | void lineUp(); | 239 | void lineUp(); |
@@ -288,9 +243,9 @@ private slots: | |||
288 | void goForward(); | 243 | void goForward(); |
289 | void doscroll(); | 244 | void doscroll(); |
290 | void paintEvent( QPaintEvent * ); | 245 | void paintEvent( QPaintEvent * ); |
291 | #ifdef DOUBLEBUFFER | 246 | |
292 | void resizeEvent( QResizeEvent * p ); | 247 | void resizeEvent( QResizeEvent * p ); |
293 | #endif | 248 | |
294 | void keyPressEvent(QKeyEvent*); | 249 | void keyPressEvent(QKeyEvent*); |
295 | private: | 250 | private: |
296 | // void drawIt( QPainter * ); | 251 | // void drawIt( QPainter * ); |
@@ -300,18 +255,22 @@ private slots: | |||
300 | QColor m_scrollcolor, m_scrollbarcolor; | 255 | QColor m_scrollcolor, m_scrollbarcolor; |
301 | void setTwoTouch(bool _b); | 256 | void setTwoTouch(bool _b); |
302 | void init(); | 257 | void init(); |
258 | void mouseMoveEvent( QMouseEvent* ); | ||
303 | void mousePressEvent( QMouseEvent* ); | 259 | void mousePressEvent( QMouseEvent* ); |
304 | void mouseReleaseEvent( QMouseEvent* ); | 260 | void mouseReleaseEvent( QMouseEvent* ); |
305 | // void mouseDoubleClickEvent( QMouseEvent* ); | 261 | // void mouseDoubleClickEvent( QMouseEvent* ); |
306 | QString m_string, m_fontname, m_reparastring; | 262 | QString m_string, m_fontname, m_reparastring; |
307 | void setfont(); | 263 | void setfont(); |
264 | bool m_doubleBuffered; | ||
265 | |||
266 | void setDoubleBuffer(bool _b); | ||
308 | //myoutput stuff | 267 | //myoutput stuff |
309 | private: | 268 | private: |
310 | #ifdef SPECIALSCROLL | 269 | #ifdef SPECIALSCROLL |
311 | int m_scrolldy; | 270 | int m_scrolldy; |
312 | #endif | 271 | #endif |
313 | bool mouseUpOn; | 272 | bool mouseUpOn; |
314 | linkType 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*&); | 273 | linkType 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*&, size_t&); |
315 | bool m_twotouch, m_touchone; | 274 | bool m_twotouch, m_touchone; |
316 | size_t m_startpos, m_startoffset; | 275 | size_t m_startpos, m_startoffset; |
317 | void dopageup(unsigned int); | 276 | void dopageup(unsigned int); |
@@ -322,14 +281,15 @@ private slots: | |||
322 | CBufferFace<size_t> locnarray; | 281 | CBufferFace<size_t> locnarray; |
323 | unsigned int numlines; | 282 | unsigned int numlines; |
324 | // bool m_showlast; | 283 | // bool m_showlast; |
325 | bool bstripcr, btextfmt, bstriphtml, bdehyphen, bdepluck, bdejpluck, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt, bonespace, bfulljust, /*bNegative,*/ bInverse; | 284 | bool bstripcr, btextfmt, bstriphtml, bdehyphen, bdepluck, bdejpluck, bunindent, brepara, bdblspce, btight, bmakebold, bremap, bpeanut, bautofmt, bonespace, bfulljust, /*bNegative,*/ bInverse, bNoInlineTables; |
326 | bool bkern, brepalm; | 285 | bool bkern, brepalm, bunderlineLink; |
327 | bool m_bpagemode, m_bMonoSpaced, m_continuousDocument; | 286 | bool m_bpagemode, m_bMonoSpaced, m_continuousDocument; |
328 | unsigned char bindenter; | 287 | unsigned char bindenter; |
329 | QString m_lastfile; | 288 | QString m_lastfile; |
330 | size_t m_lastposn; | 289 | size_t m_lastposn; |
331 | bool bDoUpdates; | 290 | bool bDoUpdates; |
332 | public: | 291 | public: |
292 | bool doOutput(const QString& wrd); | ||
333 | void setDoUpdates(bool b) { bDoUpdates = b; } | 293 | void setDoUpdates(bool b) { bDoUpdates = b; } |
334 | void setStripCR(bool b) { bstripcr = b; } | 294 | void setStripCR(bool b) { bstripcr = b; } |
335 | void NavUp(); | 295 | void NavUp(); |
diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp index 876b65a..6753698 100644 --- a/noncore/apps/opie-reader/QTReaderApp.cpp +++ b/noncore/apps/opie-reader/QTReaderApp.cpp | |||
@@ -17,6 +17,7 @@ | |||
17 | ** not clear to you. | 17 | ** not clear to you. |
18 | ** | 18 | ** |
19 | **********************************************************************/ | 19 | **********************************************************************/ |
20 | |||
20 | #include <qregexp.h> | 21 | #include <qregexp.h> |
21 | #include <qclipboard.h> | 22 | #include <qclipboard.h> |
22 | #include <qwidgetstack.h> | 23 | #include <qwidgetstack.h> |
@@ -66,16 +67,21 @@ | |||
66 | #include "URLDialog.h" | 67 | #include "URLDialog.h" |
67 | #include "util.h" | 68 | #include "util.h" |
68 | #include <qfontdatabase.h> | 69 | #include <qfontdatabase.h> |
70 | |||
69 | #ifdef USEQPE | 71 | #ifdef USEQPE |
70 | #include <qpe/resource.h> | 72 | #include <qpe/resource.h> |
71 | #ifdef OPIE | 73 | #ifdef OPIE |
72 | //#include <qpe/applnk.h> | 74 | #if defined(OPIEFILEDIALOG) |
75 | #include <qpe/applnk.h> | ||
73 | #include <opie2/ofiledialog.h> | 76 | #include <opie2/ofiledialog.h> |
74 | using namespace Opie::Ui; | 77 | using namespace Opie::Ui; |
75 | #else | 78 | #else |
76 | #include "fileBrowser.h" | 79 | #include "fileBrowser.h" |
77 | #endif | 80 | #endif |
78 | #else | 81 | #else |
82 | #include "fileBrowser.h" | ||
83 | #endif | ||
84 | #else | ||
79 | #include "qfiledialog.h" | 85 | #include "qfiledialog.h" |
80 | #endif | 86 | #endif |
81 | 87 | ||
@@ -88,7 +94,7 @@ using namespace Opie::Ui; | |||
88 | 94 | ||
89 | #include "ButtonPrefs.h" | 95 | #include "ButtonPrefs.h" |
90 | 96 | ||
91 | bool CheckVersion(int&, int&, char&); | 97 | bool CheckVersion(int&, int&, char&, QWidget*); |
92 | 98 | ||
93 | #ifdef _WINDOWS | 99 | #ifdef _WINDOWS |
94 | #define PICDIR "c:\\uqtreader\\pics\\" | 100 | #define PICDIR "c:\\uqtreader\\pics\\" |
@@ -153,11 +159,9 @@ void QTReaderApp::listBkmkFiles() | |||
153 | const QFileInfoList *list = d.entryInfoList(); | 159 | const QFileInfoList *list = d.entryInfoList(); |
154 | QFileInfoListIterator it( *list ); // create list iterator | 160 | QFileInfoListIterator it( *list ); // create list iterator |
155 | QFileInfo *fi; // pointer for traversing | 161 | QFileInfo *fi; // pointer for traversing |
156 | |||
157 | while ( (fi=it.current()) ) { // for each file... | 162 | while ( (fi=it.current()) ) { // for each file... |
158 | 163 | ||
159 | bkmkselector->insertItem(fi->fileName()); | 164 | bkmkselector->insertItem(fi->fileName(), cnt++); |
160 | cnt++; | ||
161 | 165 | ||
162 | //qDebug( "%10li %s", fi->size(), fi->fileName().data() ); | 166 | //qDebug( "%10li %s", fi->size(), fi->fileName().data() ); |
163 | ++it; // goto next list element | 167 | ++it; // goto next list element |
@@ -177,8 +181,7 @@ void QTReaderApp::listBkmkFiles() | |||
177 | 181 | ||
178 | if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) | 182 | if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode)) |
179 | { | 183 | { |
180 | bkmkselector->insertItem(de->d_name); | 184 | bkmkselector->insertItem(de->d_name, cnt++); |
181 | cnt++; | ||
182 | } | 185 | } |
183 | } | 186 | } |
184 | 187 | ||
@@ -202,7 +205,7 @@ void QTReaderApp::hidetoolbars() | |||
202 | if (m_scrollbar != NULL) m_scrollbar->hide(); | 205 | if (m_scrollbar != NULL) m_scrollbar->hide(); |
203 | if (m_prog != NULL) m_prog->hide(); | 206 | if (m_prog != NULL) m_prog->hide(); |
204 | 207 | ||
205 | #ifdef USEQPE | 208 | #if defined(USEQPE) |
206 | menubar->hide(); | 209 | menubar->hide(); |
207 | #endif | 210 | #endif |
208 | 211 | ||
@@ -333,14 +336,14 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
333 | // QToolBar* navBar = new QToolBar("File", this); | 336 | // QToolBar* navBar = new QToolBar("File", this); |
334 | // QToolBar* markBar = new QToolBar("File", this); | 337 | // QToolBar* markBar = new QToolBar("File", this); |
335 | 338 | ||
336 | #ifdef USEQPE | 339 | #if defined(USEQPE) |
337 | menubar = new QToolBar("Menus", this, m_tbposition); | 340 | menubar = new QToolBar("Menus", this, m_tbposition); |
338 | mb = new QPEMenuBar( menubar ); | 341 | mb = new QPEMenuBar( menubar ); |
339 | #else | 342 | #else |
340 | mb = new QMenuBar( this ); | 343 | mb = new QMenuBar( this ); |
341 | #endif | 344 | #endif |
342 | 345 | ||
343 | #ifdef USEQPE | 346 | #if defined(USEQPE) |
344 | QPopupMenu* tmp = new QPopupMenu(mb); | 347 | QPopupMenu* tmp = new QPopupMenu(mb); |
345 | mb->insertItem( geticon( "AppsIcon" ), tmp ); | 348 | mb->insertItem( geticon( "AppsIcon" ), tmp ); |
346 | #else | 349 | #else |
@@ -436,6 +439,9 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
436 | // qDebug("Reading config"); | 439 | // qDebug("Reading config"); |
437 | // Config config( APPDIR ); | 440 | // Config config( APPDIR ); |
438 | config.setGroup( "View" ); | 441 | config.setGroup( "View" ); |
442 | #if defined(USEQPE) && defined(USENEWFULLSCREEN) | ||
443 | m_usenewfullscreen = config.readBoolEntry("NewFullScreen", false); | ||
444 | #endif | ||
439 | m_debounce = config.readNumEntry("Debounce", 0); | 445 | m_debounce = config.readNumEntry("Debounce", 0); |
440 | m_buttonprefs->Debounce(m_debounce); | 446 | m_buttonprefs->Debounce(m_debounce); |
441 | #ifdef USEQPE | 447 | #ifdef USEQPE |
@@ -456,6 +462,7 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
456 | reader->btextfmt = config.readBoolEntry( "TextFmt", false ); | 462 | reader->btextfmt = config.readBoolEntry( "TextFmt", false ); |
457 | reader->bautofmt = config.readBoolEntry( "AutoFmt", true ); | 463 | reader->bautofmt = config.readBoolEntry( "AutoFmt", true ); |
458 | reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); | 464 | reader->bstriphtml = config.readBoolEntry( "StripHtml", false ); |
465 | reader->bNoInlineTables = config.readBoolEntry( "NoInlineTables", false ); | ||
459 | reader->bpeanut = config.readBoolEntry( "Peanut", false ); | 466 | reader->bpeanut = config.readBoolEntry( "Peanut", false ); |
460 | reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); | 467 | reader->bdehyphen = config.readBoolEntry( "Dehyphen", false ); |
461 | reader->bdepluck = config.readBoolEntry( "Depluck", false ); | 468 | reader->bdepluck = config.readBoolEntry( "Depluck", false ); |
@@ -471,6 +478,8 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
471 | reader->m_textsize = config.readNumEntry( "FontSize", 12 ); | 478 | reader->m_textsize = config.readNumEntry( "FontSize", 12 ); |
472 | reader->m_delay = config.readNumEntry( "ScrollDelay", 5184); | 479 | reader->m_delay = config.readNumEntry( "ScrollDelay", 5184); |
473 | reader->m_scrollstep = config.readNumEntry( "ScrollStep", 1); | 480 | reader->m_scrollstep = config.readNumEntry( "ScrollStep", 1); |
481 | reader->m_outputName = config.readEntry( "OutputCodec", ""); | ||
482 | |||
474 | 483 | ||
475 | reader->m_lastfile = config.readEntry( "LastFile", QString::null ); | 484 | reader->m_lastfile = config.readEntry( "LastFile", QString::null ); |
476 | reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); | 485 | reader->m_lastposn = config.readNumEntry( "LastPosn", 0 ); |
@@ -500,12 +509,15 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
500 | reader->m_absright_border = config.readNumEntry( "Right Margin", 100 ); | 509 | reader->m_absright_border = config.readNumEntry( "Right Margin", 100 ); |
501 | 510 | ||
502 | m_scrollishidden = config.readBoolEntry( "HideScrollBar", false ); | 511 | m_scrollishidden = config.readBoolEntry( "HideScrollBar", false ); |
512 | m_hidebars = config.readBoolEntry( "HideToolBar", false ); | ||
503 | 513 | ||
504 | reader->brepalm = config.readBoolEntry( "Repalm", false ); | 514 | reader->brepalm = config.readBoolEntry( "Repalm", false ); |
515 | reader->bunderlineLink = config.readBoolEntry( "UnderlineLink", true ); | ||
505 | reader->bkern = config.readBoolEntry( "Kern", false ); | 516 | reader->bkern = config.readBoolEntry( "Kern", false ); |
506 | reader->bremap = config.readBoolEntry( "Remap", true ); | 517 | reader->bremap = config.readBoolEntry( "Remap", true ); |
507 | reader->bmakebold = config.readBoolEntry( "MakeBold", false ); | 518 | reader->bmakebold = config.readBoolEntry( "MakeBold", false ); |
508 | reader->setContinuous(config.readBoolEntry( "Continuous", true )); | 519 | reader->setContinuous(config.readBoolEntry( "Continuous", true )); |
520 | reader->setDoubleBuffer(config.readBoolEntry("DoubleBuffer", true)); | ||
509 | m_targetapp = config.readEntry( "TargetApp", QString::null ); | 521 | m_targetapp = config.readEntry( "TargetApp", QString::null ); |
510 | m_targetmsg = config.readEntry( "TargetMsg", QString::null ); | 522 | m_targetmsg = config.readEntry( "TargetMsg", QString::null ); |
511 | #ifdef _SCROLLPIPE | 523 | #ifdef _SCROLLPIPE |
@@ -516,6 +528,7 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
516 | m_doAnnotation = config.readBoolEntry( "Annotation", false); | 528 | m_doAnnotation = config.readBoolEntry( "Annotation", false); |
517 | m_doDictionary = config.readBoolEntry( "Dictionary", false); | 529 | m_doDictionary = config.readBoolEntry( "Dictionary", false); |
518 | m_doClipboard = config.readBoolEntry( "Clipboard", false); | 530 | m_doClipboard = config.readBoolEntry( "Clipboard", false); |
531 | m_doOutput = config.readBoolEntry( "OutputTgt", false); | ||
519 | /* | 532 | /* |
520 | m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll); | 533 | m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll); |
521 | m_escapeTarget = (ActionTypes)config.readNumEntry("EscapeTarget", cesNone); | 534 | m_escapeTarget = (ActionTypes)config.readNumEntry("EscapeTarget", cesNone); |
@@ -842,6 +855,18 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
842 | 855 | ||
843 | setToolBarsMovable(m_tbmove); | 856 | setToolBarsMovable(m_tbmove); |
844 | addtoolbars(&config); | 857 | addtoolbars(&config); |
858 | if (m_hidebars) | ||
859 | { | ||
860 | #if defined(USEQPE) | ||
861 | menubar->hide(); | ||
862 | #endif | ||
863 | if (fileBar != NULL) fileBar->hide(); | ||
864 | if (viewBar != NULL) viewBar->hide(); | ||
865 | if (navBar != NULL) navBar->hide(); | ||
866 | if (markBar != NULL) markBar->hide(); | ||
867 | mb->hide(); | ||
868 | } | ||
869 | |||
845 | 870 | ||
846 | pbar = new QProgressBar(this); | 871 | pbar = new QProgressBar(this); |
847 | pbar->hide(); | 872 | pbar->hide(); |
@@ -972,6 +997,7 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
972 | QFont progfont(reader->m_fontname, reader->m_fontControl.getsize(0)); | 997 | QFont progfont(reader->m_fontname, reader->m_fontControl.getsize(0)); |
973 | m_prog->setFont( progfont ); | 998 | m_prog->setFont( progfont ); |
974 | if (m_statusishidden) m_prog->hide(); | 999 | if (m_statusishidden) m_prog->hide(); |
1000 | showEditTools(); | ||
975 | if (!reader->m_lastfile.isEmpty()) | 1001 | if (!reader->m_lastfile.isEmpty()) |
976 | { | 1002 | { |
977 | //qDebug("doclnk"); | 1003 | //qDebug("doclnk"); |
@@ -1032,13 +1058,13 @@ QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f ) | |||
1032 | { | 1058 | { |
1033 | reader->m_scrollpos = (m_qtscroll == 0) ? m_localscroll : 0; | 1059 | reader->m_scrollpos = (m_qtscroll == 0) ? m_localscroll : 0; |
1034 | } | 1060 | } |
1035 | reader->bDoUpdates = true; | 1061 | // reader->bDoUpdates = true; |
1036 | reader->update(); | 1062 | // reader->update(); |
1037 | config.setGroup("Version"); | 1063 | config.setGroup("Version"); |
1038 | int major = config.readNumEntry("Major", 0); | 1064 | int major = config.readNumEntry("Major", 0); |
1039 | int bkmktype = config.readNumEntry("BkmkType", 0); | 1065 | int bkmktype = config.readNumEntry("BkmkType", 0); |
1040 | char minor = config.readNumEntry("Minor", 0); | 1066 | char minor = config.readNumEntry("Minor", 0); |
1041 | if (CheckVersion(major, bkmktype, minor)) | 1067 | if (CheckVersion(major, bkmktype, minor, this)) |
1042 | { | 1068 | { |
1043 | config.writeEntry("Major", major); | 1069 | config.writeEntry("Major", major); |
1044 | config.writeEntry("BkmkType", bkmktype); | 1070 | config.writeEntry("BkmkType", bkmktype); |
@@ -1065,7 +1091,7 @@ void QTReaderApp::addtoolbars(Config* config) | |||
1065 | 1091 | ||
1066 | if (fileBar != NULL) | 1092 | if (fileBar != NULL) |
1067 | { | 1093 | { |
1068 | #ifdef USEQPE | 1094 | #if defined(USEQPE) |
1069 | if (fileBar != menubar) | 1095 | if (fileBar != menubar) |
1070 | { | 1096 | { |
1071 | fileBar->clear(); | 1097 | fileBar->clear(); |
@@ -1093,7 +1119,7 @@ void QTReaderApp::addtoolbars(Config* config) | |||
1093 | 1119 | ||
1094 | if (navBar != NULL) | 1120 | if (navBar != NULL) |
1095 | { | 1121 | { |
1096 | #ifdef USEQPE | 1122 | #if defined(USEQPE) |
1097 | if ((navBar == fileBar) && (fileBar == menubar)) | 1123 | if ((navBar == fileBar) && (fileBar == menubar)) |
1098 | #else | 1124 | #else |
1099 | if (navBar == fileBar) | 1125 | if (navBar == fileBar) |
@@ -1132,7 +1158,7 @@ void QTReaderApp::addtoolbars(Config* config) | |||
1132 | 1158 | ||
1133 | if (viewBar != NULL) | 1159 | if (viewBar != NULL) |
1134 | { | 1160 | { |
1135 | #ifdef USEQPE | 1161 | #if defined(USEQPE) |
1136 | if ((viewBar == fileBar) && (fileBar == menubar)) | 1162 | if ((viewBar == fileBar) && (fileBar == menubar)) |
1137 | #else | 1163 | #else |
1138 | if (viewBar == fileBar) | 1164 | if (viewBar == fileBar) |
@@ -1164,7 +1190,7 @@ void QTReaderApp::addtoolbars(Config* config) | |||
1164 | 1190 | ||
1165 | if (markBar != NULL) | 1191 | if (markBar != NULL) |
1166 | { | 1192 | { |
1167 | #ifdef USEQPE | 1193 | #if defined(USEQPE) |
1168 | if ((markBar == fileBar) && (fileBar == menubar)) | 1194 | if ((markBar == fileBar) && (fileBar == menubar)) |
1169 | #else | 1195 | #else |
1170 | if (markBar == fileBar) | 1196 | if (markBar == fileBar) |
@@ -1233,7 +1259,7 @@ QToolBar* QTReaderApp::filebar() | |||
1233 | { | 1259 | { |
1234 | switch (m_tbpol) | 1260 | switch (m_tbpol) |
1235 | { | 1261 | { |
1236 | #ifdef USEQPE | 1262 | #if defined(USEQPE) |
1237 | case cesSingle: | 1263 | case cesSingle: |
1238 | // qDebug("Setting filebar to menubar"); | 1264 | // qDebug("Setting filebar to menubar"); |
1239 | fileBar = menubar; | 1265 | fileBar = menubar; |
@@ -1717,7 +1743,6 @@ void QTReaderApp::setrotated(bool sfs) | |||
1717 | connect(scrollbar, SIGNAL(sliderMoved(int)), this, SLOT(actionscroll(int)) ); | 1743 | connect(scrollbar, SIGNAL(sliderMoved(int)), this, SLOT(actionscroll(int)) ); |
1718 | } | 1744 | } |
1719 | //reader->repaint(0, reader->m_left_border, reader->width(), reader->height()-2*reader->m_border); | 1745 | //reader->repaint(0, reader->m_left_border, reader->width(), reader->height()-2*reader->m_border); |
1720 | reader->repaint(); | ||
1721 | } | 1746 | } |
1722 | else | 1747 | else |
1723 | { | 1748 | { |
@@ -1733,9 +1758,8 @@ void QTReaderApp::setrotated(bool sfs) | |||
1733 | connect(scrollbar, SIGNAL(sliderMoved(int)), this, SLOT(actionscroll(int)) ); | 1758 | connect(scrollbar, SIGNAL(sliderMoved(int)), this, SLOT(actionscroll(int)) ); |
1734 | } | 1759 | } |
1735 | //reader->repaint(reader->m_border, 0, reader->width()-2*reader->m_border, reader->height()); | 1760 | //reader->repaint(reader->m_border, 0, reader->width()-2*reader->m_border, reader->height()); |
1736 | reader->repaint(); | ||
1737 | } | 1761 | } |
1738 | // reader->update(); | 1762 | reader->refresh(); |
1739 | } | 1763 | } |
1740 | 1764 | ||
1741 | void QTReaderApp::setgrab(bool sfs) | 1765 | void QTReaderApp::setgrab(bool sfs) |
@@ -1928,7 +1952,7 @@ void QTReaderApp::fileOpen2() | |||
1928 | if (pOpenlist != NULL) | 1952 | if (pOpenlist != NULL) |
1929 | { | 1953 | { |
1930 | m_nBkmkAction = cOpenFile; | 1954 | m_nBkmkAction = cOpenFile; |
1931 | if (listbkmk(pOpenlist, "Browse")) usebrowser = false; | 1955 | if (listbkmk(pOpenlist, "Browse", true)) usebrowser = false; |
1932 | } | 1956 | } |
1933 | if (usebrowser) | 1957 | if (usebrowser) |
1934 | { | 1958 | { |
@@ -1951,7 +1975,7 @@ QString QTReaderApp::usefilebrowser() | |||
1951 | return s; | 1975 | return s; |
1952 | #else | 1976 | #else |
1953 | QString fn; | 1977 | QString fn; |
1954 | #ifdef OPIE | 1978 | #if defined(OPIE) && defined(OPIEFILEDIALOG) |
1955 | QMap<QString, QStringList> mimeTypes; | 1979 | QMap<QString, QStringList> mimeTypes; |
1956 | QStringList etypes; | 1980 | QStringList etypes; |
1957 | etypes << "etext/*"; | 1981 | etypes << "etext/*"; |
@@ -2003,6 +2027,7 @@ void QTReaderApp::showprefs() | |||
2003 | // prefwin->Debounce(m_debounce); | 2027 | // prefwin->Debounce(m_debounce); |
2004 | prefwin->bgtype(m_bgtype); | 2028 | prefwin->bgtype(m_bgtype); |
2005 | prefwin->repalm(reader->brepalm); | 2029 | prefwin->repalm(reader->brepalm); |
2030 | prefwin->UnderlineLink(reader->bunderlineLink); | ||
2006 | prefwin->kern(reader->bkern); | 2031 | prefwin->kern(reader->bkern); |
2007 | prefwin->hyphenate(reader->hyphenate); | 2032 | prefwin->hyphenate(reader->hyphenate); |
2008 | // prefwin->customhyphen(reader->buffdoc.getCustomHyphen()); | 2033 | // prefwin->customhyphen(reader->buffdoc.getCustomHyphen()); |
@@ -2015,6 +2040,7 @@ void QTReaderApp::showprefs() | |||
2015 | prefwin->twotouch(m_twoTouch); | 2040 | prefwin->twotouch(m_twoTouch); |
2016 | prefwin->propfontchange(m_propogatefontchange); | 2041 | prefwin->propfontchange(m_propogatefontchange); |
2017 | prefwin->StripCR(reader->bstripcr); | 2042 | prefwin->StripCR(reader->bstripcr); |
2043 | prefwin->InlineTables(!reader->bNoInlineTables); | ||
2018 | prefwin->Dehyphen(reader->bdehyphen); | 2044 | prefwin->Dehyphen(reader->bdehyphen); |
2019 | prefwin->SingleSpace(reader->bonespace); | 2045 | prefwin->SingleSpace(reader->bonespace); |
2020 | prefwin->Unindent(reader->bunindent); | 2046 | prefwin->Unindent(reader->bunindent); |
@@ -2056,6 +2082,7 @@ void QTReaderApp::showprefs() | |||
2056 | prefwin->Depluck(reader->bdepluck); | 2082 | prefwin->Depluck(reader->bdepluck); |
2057 | prefwin->Dejpluck(reader->bdejpluck); | 2083 | prefwin->Dejpluck(reader->bdejpluck); |
2058 | prefwin->Continuous(reader->m_continuousDocument); | 2084 | prefwin->Continuous(reader->m_continuousDocument); |
2085 | prefwin->DoubleBuffer(reader->m_doubleBuffered); | ||
2059 | 2086 | ||
2060 | prefwin->dictApplication(m_targetapp); | 2087 | prefwin->dictApplication(m_targetapp); |
2061 | prefwin->dictMessage(m_targetmsg); | 2088 | prefwin->dictMessage(m_targetmsg); |
@@ -2070,6 +2097,7 @@ void QTReaderApp::showprefs() | |||
2070 | prefwin->miscannotation(m_doAnnotation); | 2097 | prefwin->miscannotation(m_doAnnotation); |
2071 | prefwin->miscdictionary(m_doDictionary); | 2098 | prefwin->miscdictionary(m_doDictionary); |
2072 | prefwin->miscclipboard(m_doClipboard); | 2099 | prefwin->miscclipboard(m_doClipboard); |
2100 | prefwin->miscoutput(m_doOutput); | ||
2073 | 2101 | ||
2074 | prefwin->SwapMouse(reader->m_swapmouse); | 2102 | prefwin->SwapMouse(reader->m_swapmouse); |
2075 | 2103 | ||
@@ -2085,10 +2113,14 @@ void QTReaderApp::showprefs() | |||
2085 | 2113 | ||
2086 | prefwin->ideogramwidth(reader->m_charpc); | 2114 | prefwin->ideogramwidth(reader->m_charpc); |
2087 | 2115 | ||
2116 | prefwin->outcodec(reader->m_outputName); | ||
2117 | |||
2088 | if (prefwin->exec()) | 2118 | if (prefwin->exec()) |
2089 | { | 2119 | { |
2090 | // m_debounce = prefwin->Debounce(); | 2120 | // m_debounce = prefwin->Debounce(); |
2091 | reader->brepalm = prefwin->repalm(); | 2121 | reader->brepalm = prefwin->repalm(); |
2122 | reader->bunderlineLink = prefwin->UnderlineLink(); | ||
2123 | |||
2092 | reader->bkern = prefwin->kern(); | 2124 | reader->bkern = prefwin->kern(); |
2093 | reader->hyphenate = prefwin->hyphenate(); | 2125 | reader->hyphenate = prefwin->hyphenate(); |
2094 | // reader->buffdoc.setCustomHyphen(prefwin->customhyphen()); | 2126 | // reader->buffdoc.setCustomHyphen(prefwin->customhyphen()); |
@@ -2107,6 +2139,7 @@ void QTReaderApp::showprefs() | |||
2107 | m_touch_action->setOn(m_twoTouch); | 2139 | m_touch_action->setOn(m_twoTouch); |
2108 | 2140 | ||
2109 | reader->bstripcr = prefwin->StripCR(); | 2141 | reader->bstripcr = prefwin->StripCR(); |
2142 | reader->bNoInlineTables = !prefwin->InlineTables(); | ||
2110 | reader->bdehyphen = prefwin->Dehyphen(); | 2143 | reader->bdehyphen = prefwin->Dehyphen(); |
2111 | reader->bonespace = prefwin->SingleSpace(); | 2144 | reader->bonespace = prefwin->SingleSpace(); |
2112 | reader->bunindent = prefwin->Unindent(); | 2145 | reader->bunindent = prefwin->Unindent(); |
@@ -2149,6 +2182,7 @@ void QTReaderApp::showprefs() | |||
2149 | reader->bdepluck = prefwin->Depluck(); | 2182 | reader->bdepluck = prefwin->Depluck(); |
2150 | reader->bdejpluck = prefwin->Dejpluck(); | 2183 | reader->bdejpluck = prefwin->Dejpluck(); |
2151 | reader->setContinuous(prefwin->Continuous()); | 2184 | reader->setContinuous(prefwin->Continuous()); |
2185 | reader->setDoubleBuffer(prefwin->DoubleBuffer()); | ||
2152 | 2186 | ||
2153 | /* | 2187 | /* |
2154 | m_leftScroll = prefwin->leftScroll(); | 2188 | m_leftScroll = prefwin->leftScroll(); |
@@ -2162,6 +2196,7 @@ void QTReaderApp::showprefs() | |||
2162 | m_doAnnotation = prefwin->miscannotation(); | 2196 | m_doAnnotation = prefwin->miscannotation(); |
2163 | m_doDictionary = prefwin->miscdictionary(); | 2197 | m_doDictionary = prefwin->miscdictionary(); |
2164 | m_doClipboard = prefwin->miscclipboard(); | 2198 | m_doClipboard = prefwin->miscclipboard(); |
2199 | m_doOutput = prefwin->miscoutput(); | ||
2165 | reader->m_swapmouse = prefwin->SwapMouse(); | 2200 | reader->m_swapmouse = prefwin->SwapMouse(); |
2166 | reader->setBaseSize(prefwin->gfxsize()); | 2201 | reader->setBaseSize(prefwin->gfxsize()); |
2167 | reader->m_overlap = prefwin->pageoverlap(); | 2202 | reader->m_overlap = prefwin->pageoverlap(); |
@@ -2183,6 +2218,15 @@ void QTReaderApp::showprefs() | |||
2183 | m_bgtype = (bground)prefwin->bgtype(); | 2218 | m_bgtype = (bground)prefwin->bgtype(); |
2184 | setBackgroundBitmap(); | 2219 | setBackgroundBitmap(); |
2185 | } | 2220 | } |
2221 | qDebug("OutCodec:%s", (const char*)prefwin->outcodec()); | ||
2222 | if (reader->m_outputName != prefwin->outcodec()) | ||
2223 | { | ||
2224 | if (reader->m_output != NULL) | ||
2225 | { | ||
2226 | QMessageBox::warning(this, PROGNAME, "Change of output codec\nrequires a restart"); | ||
2227 | } | ||
2228 | reader->m_outputName = prefwin->outcodec(); | ||
2229 | } | ||
2186 | delete prefwin; | 2230 | delete prefwin; |
2187 | reader->setfilter(reader->getfilter()); | 2231 | reader->setfilter(reader->getfilter()); |
2188 | reader->refresh(); | 2232 | reader->refresh(); |
@@ -2290,12 +2334,36 @@ void QTReaderApp::showinfo() | |||
2290 | dl = pl - reader->buffdoc.startSection(); | 2334 | dl = pl - reader->buffdoc.startSection(); |
2291 | m_infoWin->setFileSize(fs); | 2335 | m_infoWin->setFileSize(fs); |
2292 | m_infoWin->setTextSize(ts); | 2336 | m_infoWin->setTextSize(ts); |
2337 | if (fs > UINT_MAX/100) | ||
2338 | { | ||
2339 | unsigned long t1 = (ts+50)/100; | ||
2340 | m_infoWin->setRatio(100-(fs + (t1 >> 1))/t1); | ||
2341 | } | ||
2342 | else | ||
2343 | { | ||
2293 | m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts); | 2344 | m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts); |
2345 | } | ||
2294 | m_infoWin->setLocation(pl); | 2346 | m_infoWin->setLocation(pl); |
2347 | if (pl > UINT_MAX/100) | ||
2348 | { | ||
2349 | unsigned long t1 = (ts+50)/100; | ||
2350 | m_infoWin->setRead((pl + (t1 >> 1))/t1); | ||
2351 | } | ||
2352 | else | ||
2353 | { | ||
2295 | m_infoWin->setRead((100*pl + (ts >> 1))/ts); | 2354 | m_infoWin->setRead((100*pl + (ts >> 1))/ts); |
2355 | } | ||
2296 | m_infoWin->setDocSize(ds); | 2356 | m_infoWin->setDocSize(ds); |
2297 | m_infoWin->setDocLocation(dl); | 2357 | m_infoWin->setDocLocation(dl); |
2358 | if (dl > UINT_MAX/100) | ||
2359 | { | ||
2360 | unsigned long d1 = (ds+50)/100; | ||
2361 | m_infoWin->setDocRead((dl + (d1 >> 1))/d1); | ||
2362 | } | ||
2363 | else | ||
2364 | { | ||
2298 | m_infoWin->setDocRead((100*dl + (ds >> 1))/ds); | 2365 | m_infoWin->setDocRead((100*dl + (ds >> 1))/ds); |
2366 | } | ||
2299 | m_infoWin->setZoom(reader->m_fontControl.currentsize()*10); | 2367 | m_infoWin->setZoom(reader->m_fontControl.currentsize()*10); |
2300 | m_infoWin->setAbout(QString("\nApplication (c) Tim Wentford\n")+reader->about()); | 2368 | m_infoWin->setAbout(QString("\nApplication (c) Tim Wentford\n")+reader->about()); |
2301 | editorStack->raiseWidget( m_infoWin ); | 2369 | editorStack->raiseWidget( m_infoWin ); |
@@ -2742,7 +2810,7 @@ void QTReaderApp::search() | |||
2742 | } | 2810 | } |
2743 | #endif | 2811 | #endif |
2744 | 2812 | ||
2745 | void QTReaderApp::openFile( const QString &f ) | 2813 | void QTReaderApp::openFile( const QString &f, unsigned int loc ) |
2746 | { | 2814 | { |
2747 | // qDebug("File:%s", (const char*)f); | 2815 | // qDebug("File:%s", (const char*)f); |
2748 | // openFile(DocLnk(f)); | 2816 | // openFile(DocLnk(f)); |
@@ -2765,7 +2833,7 @@ void QTReaderApp::openFile( const QString &f ) | |||
2765 | } | 2833 | } |
2766 | #endif | 2834 | #endif |
2767 | clear(); | 2835 | clear(); |
2768 | reader->setText(fm.baseName(), fm.absFilePath()); | 2836 | reader->setText(fm.baseName(), fm.absFilePath(), loc); |
2769 | m_loadedconfig = readconfig(APPDIR "/configs", reader->m_string, false); | 2837 | m_loadedconfig = readconfig(APPDIR "/configs", reader->m_string, false); |
2770 | qDebug("Showing tools"); | 2838 | qDebug("Showing tools"); |
2771 | showEditTools(); | 2839 | showEditTools(); |
@@ -2806,7 +2874,7 @@ void QTReaderApp::handlekey(QKeyEvent* e) | |||
2806 | switch(e->key()) | 2874 | switch(e->key()) |
2807 | { | 2875 | { |
2808 | case Key_Escape: | 2876 | case Key_Escape: |
2809 | // qDebug("escape event"); | 2877 | qDebug("escape event"); |
2810 | if (m_disableesckey) | 2878 | if (m_disableesckey) |
2811 | { | 2879 | { |
2812 | m_disableesckey = false; | 2880 | m_disableesckey = false; |
@@ -2891,29 +2959,30 @@ void QTReaderApp::handlekey(QKeyEvent* e) | |||
2891 | ftime(&m_lastkeytime); | 2959 | ftime(&m_lastkeytime); |
2892 | } | 2960 | } |
2893 | 2961 | ||
2894 | #ifdef NEWFULLSCREEN | 2962 | #if defined(USEQPE) && defined(USENEWFULLSCREEN) |
2895 | void QTReaderApp::enableFullscreen() | 2963 | void QTReaderApp::focusInEvent(QFocusEvent *) |
2896 | { | ||
2897 | setFixedSize(qApp->desktop()->size()); | ||
2898 | showNormal(); | ||
2899 | reparent(0, WStyle_Customize | WStyle_NoBorder, QPoint(0,0)); | ||
2900 | showFullScreen(); | ||
2901 | } | ||
2902 | |||
2903 | void QTReaderApp::resizeEvent(QResizeEvent *) | ||
2904 | { | 2964 | { |
2905 | if (m_fullscreen && (size() != qApp->desktop()->size())) | 2965 | if (m_usenewfullscreen && m_fullscreen && (editorStack->visibleWidget() == reader)) |
2906 | { | 2966 | { |
2907 | enableFullscreen(); | 2967 | m_usenewfullscreen = false; |
2968 | reader->bDoUpdates = false; | ||
2969 | showEditTools(); | ||
2970 | reader->bDoUpdates = true; | ||
2971 | reader->update(); | ||
2972 | m_usenewfullscreen = true; | ||
2908 | } | 2973 | } |
2909 | } | 2974 | } |
2910 | 2975 | ||
2911 | void QTReaderApp::focusInEvent(QFocusEvent*) | 2976 | void QTReaderApp::resizeEvent(QResizeEvent *) |
2912 | { | 2977 | { |
2913 | if (m_fullscreen) | 2978 | if (m_usenewfullscreen && m_fullscreen && (editorStack->visibleWidget() == reader)) |
2914 | { | 2979 | { |
2915 | enableFullscreen(); | 2980 | m_usenewfullscreen = false; |
2916 | raise(); | 2981 | reader->bDoUpdates = false; |
2982 | showEditTools(); | ||
2983 | reader->bDoUpdates = true; | ||
2984 | reader->update(); | ||
2985 | m_usenewfullscreen = true; | ||
2917 | } | 2986 | } |
2918 | } | 2987 | } |
2919 | #endif | 2988 | #endif |
@@ -2924,7 +2993,7 @@ void QTReaderApp::showEditTools() | |||
2924 | //close(); | 2993 | //close(); |
2925 | if (m_fullscreen) | 2994 | if (m_fullscreen) |
2926 | { | 2995 | { |
2927 | #ifdef USEQPE | 2996 | #if defined(USEQPE) |
2928 | if (menubar != NULL) menubar->hide(); | 2997 | if (menubar != NULL) menubar->hide(); |
2929 | #endif | 2998 | #endif |
2930 | if (fileBar != NULL) fileBar->hide(); | 2999 | if (fileBar != NULL) fileBar->hide(); |
@@ -2944,11 +3013,7 @@ void QTReaderApp::showEditTools() | |||
2944 | if (m_scrollbar != NULL) m_scrollbar->hide(); | 3013 | if (m_scrollbar != NULL) m_scrollbar->hide(); |
2945 | m_fontBar->hide(); | 3014 | m_fontBar->hide(); |
2946 | //showNormal(); | 3015 | //showNormal(); |
2947 | #ifdef NEWFULLSCREEN | ||
2948 | enableFullscreen(); | ||
2949 | #else | ||
2950 | showFullScreen(); | 3016 | showFullScreen(); |
2951 | #endif | ||
2952 | } | 3017 | } |
2953 | else | 3018 | else |
2954 | { | 3019 | { |
@@ -2970,7 +3035,7 @@ void QTReaderApp::showEditTools() | |||
2970 | } | 3035 | } |
2971 | if (!m_hidebars) | 3036 | if (!m_hidebars) |
2972 | { | 3037 | { |
2973 | #ifdef USEQPE | 3038 | #if defined(USEQPE) |
2974 | menubar->show(); | 3039 | menubar->show(); |
2975 | #endif | 3040 | #endif |
2976 | if (fileBar != NULL) fileBar->show(); | 3041 | if (fileBar != NULL) fileBar->show(); |
@@ -3004,7 +3069,7 @@ void QTReaderApp::showEditTools() | |||
3004 | //qDebug("sn"); | 3069 | //qDebug("sn"); |
3005 | showNormal(); | 3070 | showNormal(); |
3006 | //qDebug("sm"); | 3071 | //qDebug("sm"); |
3007 | #ifdef USEQPE | 3072 | #if defined(USEQPE) && !defined(SIMPAD) |
3008 | showMaximized(); | 3073 | showMaximized(); |
3009 | #endif | 3074 | #endif |
3010 | //setCentralWidget(reader); | 3075 | //setCentralWidget(reader); |
@@ -3017,7 +3082,7 @@ void QTReaderApp::showEditTools() | |||
3017 | // qDebug("sf"); | 3082 | // qDebug("sf"); |
3018 | reader->setFocus(); | 3083 | reader->setFocus(); |
3019 | // qDebug("ref"); | 3084 | // qDebug("ref"); |
3020 | reader->refresh(true); | 3085 | //reader->refresh(true); |
3021 | // qDebug("done"); | 3086 | // qDebug("done"); |
3022 | } | 3087 | } |
3023 | /* | 3088 | /* |
@@ -3174,7 +3239,7 @@ void QTReaderApp::do_delmark() | |||
3174 | QMessageBox::information(this, PROGNAME, "No bookmarks in memory"); | 3239 | QMessageBox::information(this, PROGNAME, "No bookmarks in memory"); |
3175 | } | 3240 | } |
3176 | 3241 | ||
3177 | bool QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab) | 3242 | bool QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab, bool presel) |
3178 | { | 3243 | { |
3179 | bkmkselector->clear(); | 3244 | bkmkselector->clear(); |
3180 | if (_lab.isEmpty()) | 3245 | if (_lab.isEmpty()) |
@@ -3182,23 +3247,33 @@ bool QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab) | |||
3182 | else | 3247 | else |
3183 | bkmkselector->setText(_lab); | 3248 | bkmkselector->setText(_lab); |
3184 | int cnt = 0; | 3249 | int cnt = 0; |
3250 | int slt = -1; | ||
3185 | if (plist != NULL) | 3251 | if (plist != NULL) |
3186 | { | 3252 | { |
3187 | for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++) | 3253 | for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++) |
3188 | { | 3254 | { |
3255 | if (presel) | ||
3256 | { | ||
3257 | Bkmk* p = i.pContent(); | ||
3258 | if (toQString(CFiledata(p->anno()).name()) == reader->m_lastfile) | ||
3259 | { | ||
3260 | slt = cnt; | ||
3261 | } | ||
3262 | } | ||
3189 | #ifdef _UNICODE | 3263 | #ifdef _UNICODE |
3190 | // qDebug("Item:%s", (const char*)toQString(i->name())); | 3264 | // qDebug("Item:%s", (const char*)toQString(i->name())); |
3191 | bkmkselector->insertItem(toQString(i->name())); | 3265 | bkmkselector->insertItem(toQString(i->name()), cnt++); |
3192 | #else | 3266 | #else |
3193 | bkmkselector->insertItem(i->name()); | 3267 | bkmkselector->insertItem(i->name(), cnt++); |
3194 | #endif | 3268 | #endif |
3195 | cnt++; | 3269 | |
3196 | } | 3270 | } |
3197 | } | 3271 | } |
3198 | if (cnt > 0) | 3272 | if (cnt > 0) |
3199 | { | 3273 | { |
3200 | hidetoolbars(); | 3274 | hidetoolbars(); |
3201 | editorStack->raiseWidget( bkmkselector ); | 3275 | editorStack->raiseWidget( bkmkselector ); |
3276 | if (slt != -1) bkmkselector->setCurrentItem(slt); | ||
3202 | return true; | 3277 | return true; |
3203 | } | 3278 | } |
3204 | else | 3279 | else |
@@ -3238,9 +3313,8 @@ bool QTReaderApp::openfrombkmk(Bkmk* bk) | |||
3238 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) | 3313 | if (!fn.isEmpty() && QFileInfo(fn).isFile()) |
3239 | { | 3314 | { |
3240 | //qDebug("Opening"); | 3315 | //qDebug("Opening"); |
3241 | openFile(fn); | ||
3242 | struct stat fnstat; | 3316 | struct stat fnstat; |
3243 | stat((const char *)reader->m_lastfile, &fnstat); | 3317 | stat((const char *)fn, &fnstat); |
3244 | 3318 | ||
3245 | if (CFiledata(bk->anno()).date() | 3319 | if (CFiledata(bk->anno()).date() |
3246 | != fnstat.st_mtime) | 3320 | != fnstat.st_mtime) |
@@ -3248,11 +3322,14 @@ bool QTReaderApp::openfrombkmk(Bkmk* bk) | |||
3248 | CFiledata fd(bk->anno()); | 3322 | CFiledata fd(bk->anno()); |
3249 | fd.setdate(fnstat.st_mtime); | 3323 | fd.setdate(fnstat.st_mtime); |
3250 | bk->value(0); | 3324 | bk->value(0); |
3325 | reader->m_lastposn = 0; | ||
3326 | openFile(fn); | ||
3251 | } | 3327 | } |
3252 | else | 3328 | else |
3253 | { | 3329 | { |
3254 | unsigned short svlen = bk->filedatalen(); | 3330 | unsigned short svlen = bk->filedatalen(); |
3255 | unsigned char* svdata = bk->filedata(); | 3331 | unsigned char* svdata = bk->filedata(); |
3332 | openFile(fn, bk->value()); | ||
3256 | reader->putSaveData(svdata, svlen); | 3333 | reader->putSaveData(svdata, svlen); |
3257 | // setstate(svdata, svlen); | 3334 | // setstate(svdata, svlen); |
3258 | if (svlen != 0) | 3335 | if (svlen != 0) |
@@ -3261,7 +3338,6 @@ bool QTReaderApp::openfrombkmk(Bkmk* bk) | |||
3261 | } | 3338 | } |
3262 | // qDebug("updating"); | 3339 | // qDebug("updating"); |
3263 | // showEditTools(); | 3340 | // showEditTools(); |
3264 | reader->locate(bk->value()); | ||
3265 | } | 3341 | } |
3266 | return true; | 3342 | return true; |
3267 | } | 3343 | } |
@@ -3366,7 +3442,7 @@ void QTReaderApp::gotobkmk(int ind) | |||
3366 | if (fin != NULL) | 3442 | if (fin != NULL) |
3367 | { | 3443 | { |
3368 | bool allok = false; | 3444 | bool allok = false; |
3369 | #ifdef OPIE | 3445 | #if defined(OPIE) && defined(OPIEFILEDIALOG) |
3370 | QString outfile = OFileDialog::getSaveFileName(OFileSelector::EXTENDED_ALL, QString::null, QString::null, MimeTypes(), 0, "OpieReader"); | 3446 | QString outfile = OFileDialog::getSaveFileName(OFileSelector::EXTENDED_ALL, QString::null, QString::null, MimeTypes(), 0, "OpieReader"); |
3371 | if (!outfile.isEmpty()) | 3447 | if (!outfile.isEmpty()) |
3372 | { | 3448 | { |
@@ -3703,9 +3779,10 @@ void QTReaderApp::do_autogen(const QString& regText) | |||
3703 | reader->jumpto(0); | 3779 | reader->jumpto(0); |
3704 | int lastpc = 0; | 3780 | int lastpc = 0; |
3705 | int i = 0; | 3781 | int i = 0; |
3782 | unsigned int llcn = reader->locate(); | ||
3706 | while (i >= 0) | 3783 | while (i >= 0) |
3707 | { | 3784 | { |
3708 | unsigned int lcn = reader->locate(); | 3785 | unsigned int lcn = llcn; |
3709 | int pc = (100*lcn)/ts; | 3786 | int pc = (100*lcn)/ts; |
3710 | if (pc != lastpc) | 3787 | if (pc != lastpc) |
3711 | { | 3788 | { |
@@ -3722,6 +3799,14 @@ void QTReaderApp::do_autogen(const QString& regText) | |||
3722 | if (re.match(buff.data()) != -1) | 3799 | if (re.match(buff.data()) != -1) |
3723 | #endif | 3800 | #endif |
3724 | pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn)); | 3801 | pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn)); |
3802 | /* | ||
3803 | llcn = reader->locate(); | ||
3804 | if ((i == 0) && (llcn+1 < ts)) | ||
3805 | { | ||
3806 | reader->jumpto(++llcn); | ||
3807 | i = 1; | ||
3808 | } | ||
3809 | */ | ||
3725 | } | 3810 | } |
3726 | pBkmklist->sort(); | 3811 | pBkmklist->sort(); |
3727 | pbar->setProgress(100); | 3812 | pbar->setProgress(100); |
@@ -4032,6 +4117,10 @@ void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, size_t posn2, | |||
4032 | { | 4117 | { |
4033 | //// qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd); | 4118 | //// qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd); |
4034 | 4119 | ||
4120 | if (m_doOutput && reader->checkoutput()) | ||
4121 | { | ||
4122 | reader->doOutput(wrd); | ||
4123 | } | ||
4035 | if (m_doClipboard) | 4124 | if (m_doClipboard) |
4036 | { | 4125 | { |
4037 | QClipboard* cb = QApplication::clipboard(); | 4126 | QClipboard* cb = QApplication::clipboard(); |
@@ -4116,7 +4205,7 @@ void QTReaderApp::doAction(QKeyEvent* e) | |||
4116 | m_hidebars = !m_hidebars; | 4205 | m_hidebars = !m_hidebars; |
4117 | if (m_hidebars) | 4206 | if (m_hidebars) |
4118 | { | 4207 | { |
4119 | #ifdef USEQPE | 4208 | #if defined(USEQPE) |
4120 | menubar->hide(); | 4209 | menubar->hide(); |
4121 | #endif | 4210 | #endif |
4122 | if (fileBar != NULL) fileBar->hide(); | 4211 | if (fileBar != NULL) fileBar->hide(); |
@@ -4127,7 +4216,7 @@ void QTReaderApp::doAction(QKeyEvent* e) | |||
4127 | } | 4216 | } |
4128 | else | 4217 | else |
4129 | { | 4218 | { |
4130 | #ifdef USEQPE | 4219 | #if defined(USEQPE) |
4131 | menubar->show(); | 4220 | menubar->show(); |
4132 | #endif | 4221 | #endif |
4133 | if (fileBar != NULL) fileBar->show(); | 4222 | if (fileBar != NULL) fileBar->show(); |
@@ -4340,6 +4429,7 @@ void QTReaderApp::do_saveconfig(const QString& _txt, bool full) | |||
4340 | 4429 | ||
4341 | 4430 | ||
4342 | config.writeEntry( "StripCr", reader->bstripcr ); | 4431 | config.writeEntry( "StripCr", reader->bstripcr ); |
4432 | config.writeEntry( "NoInlineTables", reader->bNoInlineTables ); | ||
4343 | config.writeEntry( "AutoFmt", reader->bautofmt ); | 4433 | config.writeEntry( "AutoFmt", reader->bautofmt ); |
4344 | config.writeEntry( "TextFmt", reader->btextfmt ); | 4434 | config.writeEntry( "TextFmt", reader->btextfmt ); |
4345 | config.writeEntry( "StripHtml", reader->bstriphtml ); | 4435 | config.writeEntry( "StripHtml", reader->bstriphtml ); |
@@ -4365,6 +4455,7 @@ void QTReaderApp::do_saveconfig(const QString& _txt, bool full) | |||
4365 | reader->m_lastposn = reader->pagelocate(); | 4455 | reader->m_lastposn = reader->pagelocate(); |
4366 | config.writeEntry( "LastFile", reader->m_lastfile ); | 4456 | config.writeEntry( "LastFile", reader->m_lastfile ); |
4367 | config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); | 4457 | config.writeEntry( "LastPosn", (int)(reader->pagelocate()) ); |
4458 | config.writeEntry( "OutputCodec", reader->m_outputName); | ||
4368 | } | 4459 | } |
4369 | config.writeEntry( "PageMode", reader->m_bpagemode ); | 4460 | config.writeEntry( "PageMode", reader->m_bpagemode ); |
4370 | config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); | 4461 | config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced ); |
@@ -4396,6 +4487,7 @@ void QTReaderApp::do_saveconfig(const QString& _txt, bool full) | |||
4396 | config.writeEntry( "Annotation", m_doAnnotation); | 4487 | config.writeEntry( "Annotation", m_doAnnotation); |
4397 | config.writeEntry( "Dictionary", m_doDictionary); | 4488 | config.writeEntry( "Dictionary", m_doDictionary); |
4398 | config.writeEntry( "Clipboard", m_doClipboard); | 4489 | config.writeEntry( "Clipboard", m_doClipboard); |
4490 | config.writeEntry( "OutputTgt", m_doOutput); | ||
4399 | /* | 4491 | /* |
4400 | config.writeEntry( "SpaceTarget", m_spaceTarget); | 4492 | config.writeEntry( "SpaceTarget", m_spaceTarget); |
4401 | config.writeEntry( "EscapeTarget", m_escapeTarget); | 4493 | config.writeEntry( "EscapeTarget", m_escapeTarget); |
@@ -4410,12 +4502,15 @@ void QTReaderApp::do_saveconfig(const QString& _txt, bool full) | |||
4410 | config.writeEntry("DownScroll", m_downScroll); | 4502 | config.writeEntry("DownScroll", m_downScroll); |
4411 | */ | 4503 | */ |
4412 | config.writeEntry( "Repalm", reader->brepalm ); | 4504 | config.writeEntry( "Repalm", reader->brepalm ); |
4505 | config.writeEntry( "UnderlineLink", reader->bunderlineLink ); | ||
4413 | config.writeEntry( "HideScrollBar", m_scrollishidden ); | 4506 | config.writeEntry( "HideScrollBar", m_scrollishidden ); |
4507 | config.writeEntry( "HideToolBar", m_hidebars ); | ||
4414 | config.writeEntry( "Kern", reader->bkern ); | 4508 | config.writeEntry( "Kern", reader->bkern ); |
4415 | config.writeEntry( "Remap", reader->bremap ); | 4509 | config.writeEntry( "Remap", reader->bremap ); |
4416 | config.writeEntry( "Peanut", reader->bpeanut ); | 4510 | config.writeEntry( "Peanut", reader->bpeanut ); |
4417 | config.writeEntry( "MakeBold", reader->bmakebold ); | 4511 | config.writeEntry( "MakeBold", reader->bmakebold ); |
4418 | config.writeEntry( "Continuous", reader->m_continuousDocument ); | 4512 | config.writeEntry( "Continuous", reader->m_continuousDocument ); |
4513 | config.writeEntry( "DoubleBuffer", reader->m_doubleBuffered); | ||
4419 | config.writeEntry( "FullJust", reader->bfulljust ); | 4514 | config.writeEntry( "FullJust", reader->bfulljust ); |
4420 | // config.writeEntry( "Negative", reader->bNegative ); | 4515 | // config.writeEntry( "Negative", reader->bNegative ); |
4421 | config.writeEntry( "Inverse", reader->bInverse ); | 4516 | config.writeEntry( "Inverse", reader->bInverse ); |
@@ -4519,6 +4614,7 @@ bool QTReaderApp::readconfig(const QString& dirname, const QString& _txt, bool f | |||
4519 | config.setGroup( "View" ); | 4614 | config.setGroup( "View" ); |
4520 | m_bFloatingDialog = config.readBoolEntry("FloatDialogs", m_bFloatingDialog); | 4615 | m_bFloatingDialog = config.readBoolEntry("FloatDialogs", m_bFloatingDialog); |
4521 | reader->bstripcr = config.readBoolEntry( "StripCr", reader->bstripcr ); | 4616 | reader->bstripcr = config.readBoolEntry( "StripCr", reader->bstripcr ); |
4617 | reader->bNoInlineTables = config.readBoolEntry( "NoInlineTables", reader->bNoInlineTables ); | ||
4522 | reader->bfulljust = config.readBoolEntry( "FullJust", reader->bfulljust ); | 4618 | reader->bfulljust = config.readBoolEntry( "FullJust", reader->bfulljust ); |
4523 | reader->bInverse = config.readBoolEntry( "Inverse", reader->bInverse ); | 4619 | reader->bInverse = config.readBoolEntry( "Inverse", reader->bInverse ); |
4524 | // reader->bNegative = config.readBoolEntry( "Negative", false ); | 4620 | // reader->bNegative = config.readBoolEntry( "Negative", false ); |
@@ -4574,11 +4670,14 @@ bool QTReaderApp::readconfig(const QString& dirname, const QString& _txt, bool f | |||
4574 | reader->m_absleft_border = config.readNumEntry( "Left Margin", reader->m_absleft_border ); | 4670 | reader->m_absleft_border = config.readNumEntry( "Left Margin", reader->m_absleft_border ); |
4575 | reader->m_absright_border = config.readNumEntry( "Right Margin", reader->m_absright_border ); | 4671 | reader->m_absright_border = config.readNumEntry( "Right Margin", reader->m_absright_border ); |
4576 | m_scrollishidden = config.readBoolEntry( "HideScrollBar", m_scrollishidden ); | 4672 | m_scrollishidden = config.readBoolEntry( "HideScrollBar", m_scrollishidden ); |
4673 | m_hidebars = config.readBoolEntry( "HideToolBar", m_hidebars ); | ||
4577 | reader->brepalm = config.readBoolEntry( "Repalm", reader->brepalm ); | 4674 | reader->brepalm = config.readBoolEntry( "Repalm", reader->brepalm ); |
4675 | reader->bunderlineLink = config.readBoolEntry( "UnderlineLink", reader->bunderlineLink ); | ||
4578 | reader->bkern = config.readBoolEntry( "Kern", reader->bkern ); | 4676 | reader->bkern = config.readBoolEntry( "Kern", reader->bkern ); |
4579 | reader->bremap = config.readBoolEntry( "Remap", reader->bremap ); | 4677 | reader->bremap = config.readBoolEntry( "Remap", reader->bremap ); |
4580 | reader->bmakebold = config.readBoolEntry( "MakeBold", reader->bmakebold ); | 4678 | reader->bmakebold = config.readBoolEntry( "MakeBold", reader->bmakebold ); |
4581 | reader->setContinuous(config.readBoolEntry( "Continuous", reader->m_continuousDocument )); | 4679 | reader->setContinuous(config.readBoolEntry( "Continuous", reader->m_continuousDocument )); |
4680 | reader->setDoubleBuffer(config.readBoolEntry("DoubleBuffer", reader->m_doubleBuffered)); | ||
4582 | m_targetapp = config.readEntry( "TargetApp", m_targetapp ); | 4681 | m_targetapp = config.readEntry( "TargetApp", m_targetapp ); |
4583 | m_targetmsg = config.readEntry( "TargetMsg", m_targetmsg ); | 4682 | m_targetmsg = config.readEntry( "TargetMsg", m_targetmsg ); |
4584 | #ifdef _SCROLLPIPE | 4683 | #ifdef _SCROLLPIPE |
@@ -4589,6 +4688,7 @@ bool QTReaderApp::readconfig(const QString& dirname, const QString& _txt, bool f | |||
4589 | m_doAnnotation = config.readBoolEntry( "Annotation", m_doAnnotation); | 4688 | m_doAnnotation = config.readBoolEntry( "Annotation", m_doAnnotation); |
4590 | m_doDictionary = config.readBoolEntry( "Dictionary", m_doDictionary); | 4689 | m_doDictionary = config.readBoolEntry( "Dictionary", m_doDictionary); |
4591 | m_doClipboard = config.readBoolEntry( "Clipboard", m_doClipboard); | 4690 | m_doClipboard = config.readBoolEntry( "Clipboard", m_doClipboard); |
4691 | m_doOutput = config.readBoolEntry( "OutputTgt", m_doOutput); | ||
4592 | #ifdef USEQPE | 4692 | #ifdef USEQPE |
4593 | m_grabkeyboard = config.readBoolEntry( "GrabKeyboard", m_grabkeyboard); | 4693 | m_grabkeyboard = config.readBoolEntry( "GrabKeyboard", m_grabkeyboard); |
4594 | #endif | 4694 | #endif |
@@ -4596,6 +4696,8 @@ bool QTReaderApp::readconfig(const QString& dirname, const QString& _txt, bool f | |||
4596 | reader->setBaseSize(config.readNumEntry( "Basesize", reader->getBaseSize() )); | 4696 | reader->setBaseSize(config.readNumEntry( "Basesize", reader->getBaseSize() )); |
4597 | reader->setTwoTouch(m_twoTouch); | 4697 | reader->setTwoTouch(m_twoTouch); |
4598 | 4698 | ||
4699 | reader->m_outputName = config.readEntry( "OutputCodec", reader->m_outputName); | ||
4700 | |||
4599 | m_touch_action->setOn(m_twoTouch); | 4701 | m_touch_action->setOn(m_twoTouch); |
4600 | m_setmono_action->setOn(reader->m_bMonoSpaced); | 4702 | m_setmono_action->setOn(reader->m_bMonoSpaced); |
4601 | setfontHelper(reader->m_fontname); | 4703 | setfontHelper(reader->m_fontname); |
@@ -4637,8 +4739,7 @@ bool QTReaderApp::PopulateConfig(const char* tgtdir, bool usedirs) | |||
4637 | 4739 | ||
4638 | while ( (fi=it.current()) ) { // for each file... | 4740 | while ( (fi=it.current()) ) { // for each file... |
4639 | 4741 | ||
4640 | bkmkselector->insertItem(fi->fileName()); | 4742 | bkmkselector->insertItem(fi->fileName(), cnt++); |
4641 | cnt++; | ||
4642 | 4743 | ||
4643 | //qDebug( "%10li %s", fi->size(), fi->fileName().data() ); | 4744 | //qDebug( "%10li %s", fi->size(), fi->fileName().data() ); |
4644 | ++it; // goto next list element | 4745 | ++it; // goto next list element |
@@ -4663,8 +4764,7 @@ bool QTReaderApp::PopulateConfig(const char* tgtdir, bool usedirs) | |||
4663 | 4764 | ||
4664 | if (lstat((const char *)Global::applicationFileName(finaldir,de->d_name),&buf) == 0 && ((usedirs && S_ISDIR(buf.st_mode)) || (!usedirs && S_ISREG(buf.st_mode)))) | 4765 | if (lstat((const char *)Global::applicationFileName(finaldir,de->d_name),&buf) == 0 && ((usedirs && S_ISDIR(buf.st_mode)) || (!usedirs && S_ISREG(buf.st_mode)))) |
4665 | { | 4766 | { |
4666 | bkmkselector->insertItem(de->d_name); | 4767 | bkmkselector->insertItem(de->d_name, cnt++); |
4667 | cnt++; | ||
4668 | } | 4768 | } |
4669 | } | 4769 | } |
4670 | delete [] finaldir; | 4770 | delete [] finaldir; |
@@ -4735,6 +4835,8 @@ void QTReaderApp::OnURLSelected(const QString& href, const size_t tgt) | |||
4735 | { | 4835 | { |
4736 | qDebug("No type"); | 4836 | qDebug("No type"); |
4737 | } | 4837 | } |
4838 | QString msg = "External URL\n" + href; | ||
4839 | QMessageBox::information(this, PROGNAME, msg); | ||
4738 | #else | 4840 | #else |
4739 | if (href.isEmpty()) | 4841 | if (href.isEmpty()) |
4740 | { | 4842 | { |
@@ -4901,7 +5003,7 @@ void QTReaderApp::forceopen(const QString& filename) | |||
4901 | fi = QFileInfo(filename); | 5003 | fi = QFileInfo(filename); |
4902 | QString flnm = fi.absFilePath(); | 5004 | QString flnm = fi.absFilePath(); |
4903 | */ | 5005 | */ |
4904 | if (!filename.isEmpty()) | 5006 | if (!filename.isEmpty() && QFileInfo(filename).exists()) |
4905 | { | 5007 | { |
4906 | updatefileinfo(); | 5008 | updatefileinfo(); |
4907 | if (pBkmklist != NULL) | 5009 | if (pBkmklist != NULL) |
@@ -4918,6 +5020,10 @@ void QTReaderApp::forceopen(const QString& filename) | |||
4918 | openFile(filename); | 5020 | openFile(filename); |
4919 | reader->setFocus(); | 5021 | reader->setFocus(); |
4920 | } | 5022 | } |
5023 | else | ||
5024 | { | ||
5025 | OnURLSelected(filename, 0); | ||
5026 | } | ||
4921 | } | 5027 | } |
4922 | 5028 | ||
4923 | void QTReaderApp::actionscroll(int v) | 5029 | void QTReaderApp::actionscroll(int v) |
diff --git a/noncore/apps/opie-reader/QTReaderApp.h b/noncore/apps/opie-reader/QTReaderApp.h index ad47fc9..ab1b7ad 100644 --- a/noncore/apps/opie-reader/QTReaderApp.h +++ b/noncore/apps/opie-reader/QTReaderApp.h | |||
@@ -175,7 +175,7 @@ class QTReaderApp : public QMainWindow | |||
175 | } | 175 | } |
176 | #endif | 176 | #endif |
177 | void suspend(); | 177 | void suspend(); |
178 | void openFile( const QString & ); | 178 | void openFile( const QString &, unsigned int loc = 0 ); |
179 | 179 | ||
180 | 180 | ||
181 | protected: | 181 | protected: |
@@ -186,10 +186,10 @@ class QTReaderApp : public QMainWindow | |||
186 | int m_scrollcolor, m_scrollbarcolor, m_background, m_foreground; | 186 | int m_scrollcolor, m_scrollbarcolor, m_background, m_foreground; |
187 | // void resizeEvent(QResizeEvent* e); | 187 | // void resizeEvent(QResizeEvent* e); |
188 | void closeEvent( QCloseEvent *e ); | 188 | void closeEvent( QCloseEvent *e ); |
189 | #ifdef NEWFULLSCREEN | 189 | #if defined(USEQPE) && defined(USENEWFULLSCREEN) |
190 | bool m_usenewfullscreen; | ||
190 | void resizeEvent(QResizeEvent *); | 191 | void resizeEvent(QResizeEvent *); |
191 | void focusInEvent(QFocusEvent*); | 192 | void focusInEvent(QFocusEvent*); |
192 | void enableFullscreen(); | ||
193 | #endif | 193 | #endif |
194 | void readbkmks(); | 194 | void readbkmks(); |
195 | void do_mono(const QString&); | 195 | void do_mono(const QString&); |
@@ -208,6 +208,7 @@ class QTReaderApp : public QMainWindow | |||
208 | #endif | 208 | #endif |
209 | bool m_doAnnotation; | 209 | bool m_doAnnotation; |
210 | bool m_doDictionary; | 210 | bool m_doDictionary; |
211 | bool m_doOutput; | ||
211 | bool m_doClipboard; | 212 | bool m_doClipboard; |
212 | bool m_fullscreen; | 213 | bool m_fullscreen; |
213 | bool m_loadedconfig; | 214 | bool m_loadedconfig; |
@@ -388,7 +389,7 @@ private slots: | |||
388 | void updatefileinfo(); | 389 | void updatefileinfo(); |
389 | bool openfrombkmk(Bkmk*); | 390 | bool openfrombkmk(Bkmk*); |
390 | QString m_targetapp, m_targetmsg, m_statusstring, m_themename; | 391 | QString m_targetapp, m_targetmsg, m_statusstring, m_themename; |
391 | bool listbkmk(CList<Bkmk>*, const QString& _lab = QString::null); | 392 | bool listbkmk(CList<Bkmk>*, const QString& _lab = QString::null, bool presel=false); |
392 | QString usefilebrowser(); | 393 | QString usefilebrowser(); |
393 | void do_regedit(); | 394 | void do_regedit(); |
394 | void colorChanged( const QColor &c ); | 395 | void colorChanged( const QColor &c ); |
@@ -421,11 +422,11 @@ private slots: | |||
421 | QTReader* reader; | 422 | QTReader* reader; |
422 | QComboBox* m_fontSelector; | 423 | QComboBox* m_fontSelector; |
423 | // QPEToolBar /* *menu,*/ *fileBar; | 424 | // QPEToolBar /* *menu,*/ *fileBar; |
424 | #ifdef USEQPE | 425 | #if defined(USEQPE) |
425 | QToolBar *menubar; | 426 | QToolBar *menubar; |
426 | #endif | 427 | #endif |
427 | QToolBar *fileBar, *navBar, *viewBar, *markBar; | 428 | QToolBar *fileBar, *navBar, *viewBar, *markBar; |
428 | #ifdef USEQPE | 429 | #if defined(USEQPE) |
429 | QPEMenuBar *mb; | 430 | QPEMenuBar *mb; |
430 | #else | 431 | #else |
431 | QMenuBar *mb; | 432 | QMenuBar *mb; |
diff --git a/noncore/apps/opie-reader/Reb.cpp b/noncore/apps/opie-reader/Reb.cpp new file mode 100644 index 0000000..2e6c1fc --- a/dev/null +++ b/noncore/apps/opie-reader/Reb.cpp | |||
@@ -0,0 +1,789 @@ | |||
1 | #include <stdio.h> | ||
2 | #include <string.h> | ||
3 | #include <qimage.h> | ||
4 | #include "decompress.h" | ||
5 | #include "Reb.h" | ||
6 | #include "my_list.h" | ||
7 | #include "Bkmks.h" | ||
8 | #include "Model.h" | ||
9 | /* | ||
10 | #ifdef offsetof | ||
11 | #define OffsetOf(type, field) ((int) offsetof(type, field)) | ||
12 | #else | ||
13 | #define OffsetOf(type, field) ((int) ((char *) &((type *) 0)->field)) | ||
14 | #endif | ||
15 | |||
16 | template<class T> | ||
17 | UInt32 binarychop(T* data, UInt32 n, T val) | ||
18 | { | ||
19 | UInt32 jl = 0,jh = n-1,jm = (jl+jh)/2; | ||
20 | while (jh > jl+1) | ||
21 | { | ||
22 | if (data[jm] > val) | ||
23 | { | ||
24 | jh = jm; | ||
25 | } | ||
26 | else | ||
27 | { | ||
28 | jl = jm; | ||
29 | } | ||
30 | jm = (jl+jh)/2; | ||
31 | } | ||
32 | return jl; | ||
33 | } | ||
34 | |||
35 | template<class T, class D> | ||
36 | UInt32 binarychop(D* data, UInt32 n, T val, UInt32 offset) | ||
37 | { | ||
38 | UInt32 jl = 0,jh = n-1,jm = (jl+jh)/2; | ||
39 | while (jh > jl+1) | ||
40 | { | ||
41 | T* d = reinterpret_cast<T*>(reinterpret_cast<char*>(data+jm)+offset); | ||
42 | if (*d > val) | ||
43 | { | ||
44 | jh = jm; | ||
45 | } | ||
46 | else | ||
47 | { | ||
48 | jl = jm; | ||
49 | } | ||
50 | jm = (jl+jh)/2; | ||
51 | } | ||
52 | return jl; | ||
53 | } | ||
54 | */ | ||
55 | |||
56 | CReb::CReb() | ||
57 | : | ||
58 | fin(NULL), m_indexpages(NULL), m_pagedetails(NULL),tagoffset(0), | ||
59 | tags(NULL), paras(NULL), noparas(0), joins(NULL), nojoins(0) | ||
60 | { | ||
61 | } | ||
62 | |||
63 | CReb::~CReb() | ||
64 | { | ||
65 | if (fin != NULL) fclose(fin); | ||
66 | if (m_indexpages != NULL) delete [] m_indexpages; | ||
67 | if (m_pagedetails != NULL) delete [] m_pagedetails; | ||
68 | if (tags != NULL) delete [] tags; | ||
69 | if (paras != NULL) delete [] paras; | ||
70 | if (joins != NULL) delete [] joins; | ||
71 | } | ||
72 | |||
73 | unsigned int CReb::locate() | ||
74 | { | ||
75 | return m_pagedetails[currentpage.pageno()].pagestart+currentpage.offset(); | ||
76 | } | ||
77 | |||
78 | void CReb::locate(unsigned int n) | ||
79 | { | ||
80 | /* | ||
81 | UInt32 cp = nopages-1; | ||
82 | for (int i = 0; i < nopages; ++i) | ||
83 | { | ||
84 | if (m_pagedetails[i].pagestart > n) | ||
85 | { | ||
86 | cp = i-1; | ||
87 | break; | ||
88 | } | ||
89 | } | ||
90 | qDebug("Requesting %u from page %u [%u]", n, cp, n - m_pagedetails[cp].pagestart); | ||
91 | */ | ||
92 | //UInt32 jl = binarychop<UInt32, Page_detail>(m_pagedetails, nopages, n, OffsetOf(Page_detail, pagestart)); | ||
93 | |||
94 | UInt32 jl = 0,jh = nopages-1,jm = (jl+jh)/2; | ||
95 | while (jh > jl+1) | ||
96 | { | ||
97 | if (m_pagedetails[jm].pagestart > n) | ||
98 | { | ||
99 | jh = jm; | ||
100 | } | ||
101 | else | ||
102 | { | ||
103 | jl = jm; | ||
104 | } | ||
105 | jm = (jl+jh)/2; | ||
106 | } | ||
107 | |||
108 | unsuspend(); | ||
109 | Page_detail rs = m_pagedetails[jl]; | ||
110 | UInt32 val = n - rs.pagestart; | ||
111 | if (jl != currentpage.pageno()) readindex(jl); | ||
112 | currentpage.setoffset(page2pos(jl), jl, ((rs.flags & 8) != 0), rs.len, val); | ||
113 | if (noparas > 0) | ||
114 | { | ||
115 | //jl = binarychop<int, ParaRef>(paras, noparas, val, OffsetOf(ParaRef, pos)); | ||
116 | |||
117 | UInt32 jl = 0,jh = noparas-1,jm = (jl+jh)/2; | ||
118 | while (jh > jl+1) | ||
119 | { | ||
120 | if (paras[jm].pos > val) | ||
121 | { | ||
122 | jh = jm; | ||
123 | } | ||
124 | else | ||
125 | { | ||
126 | jl = jm; | ||
127 | } | ||
128 | jm = (jl+jh)/2; | ||
129 | } | ||
130 | |||
131 | qDebug("TAGS:%s", (const char*)tags[paras[jl].tag]); | ||
132 | tagstring = tags[paras[jl].tag]+"<br>"; // Add br to set extra space to 0 | ||
133 | tagoffset = 0; | ||
134 | } | ||
135 | unsigned long current = locate(); | ||
136 | if (m_currentstart > current || current > m_currentend) | ||
137 | { | ||
138 | start2endSection(); | ||
139 | } | ||
140 | if (current != n) qDebug("ERROR:Ended up at %u", current); | ||
141 | } | ||
142 | |||
143 | bool CReb::getFile(const QString& href, const QString& nm) | ||
144 | { | ||
145 | qDebug("File:%s, Name:%s", (const char*)href, (const char*)nm); | ||
146 | QMap<QString, UInt32>::Iterator iter = m_index.find(href); | ||
147 | if (iter != m_index.end()) | ||
148 | { | ||
149 | qDebug("REB:BEFORE:%u", locate()); | ||
150 | startpage(iter.data()); | ||
151 | qDebug("REB:AFTER:%u", locate()); | ||
152 | return true; | ||
153 | } | ||
154 | else | ||
155 | { | ||
156 | return false; | ||
157 | } | ||
158 | } | ||
159 | |||
160 | QImage* CReb::getPicture(const QString& ref) | ||
161 | { | ||
162 | QMap<QString, UInt32>::Iterator iter = m_index.find(ref); | ||
163 | if (iter != m_index.end()) | ||
164 | { | ||
165 | unsuspend(); | ||
166 | Page_detail rs = m_pagedetails[iter.data()]; | ||
167 | char* imgbuffer = new char[rs.len]; | ||
168 | fseek(fin, page2pos(iter.data()), SEEK_SET); | ||
169 | fread(imgbuffer, rs.len, 1, fin); | ||
170 | QByteArray arr; | ||
171 | arr.assign((const char*)imgbuffer, rs.len); | ||
172 | QImage* qimage = new QImage(arr); | ||
173 | return qimage; | ||
174 | } | ||
175 | else | ||
176 | { | ||
177 | return NULL; | ||
178 | } | ||
179 | } | ||
180 | |||
181 | CList<Bkmk>* CReb::getbkmklist() { return NULL; } | ||
182 | |||
183 | void CReb::home() | ||
184 | { | ||
185 | startpage(m_homepage); | ||
186 | } | ||
187 | |||
188 | int CReb::OpenFile(const char *src) | ||
189 | { | ||
190 | m_binary = false; | ||
191 | if (fin != NULL) fclose(fin); | ||
192 | fin = fopen(src, "r"); | ||
193 | if (fin == NULL) | ||
194 | { | ||
195 | return -1; | ||
196 | } | ||
197 | UInt32 type; | ||
198 | fseek(fin, 6, SEEK_SET); | ||
199 | fread(&type, 1, sizeof(type), fin); | ||
200 | qDebug("CREB:Okay %x", type); | ||
201 | |||
202 | if (type == 0x4f56554e || type == 0x574d4954 || type == 0x576d6954) | ||
203 | { | ||
204 | struct stat _stat; | ||
205 | stat(src, &_stat); | ||
206 | file_length = _stat.st_size; | ||
207 | fread(&m_blocksize, 1, sizeof(m_blocksize), fin); | ||
208 | if (type == 0x574d4954 || type == 0x576d6954) | ||
209 | { | ||
210 | if (type == 0x576d6954) m_binary = true; | ||
211 | qDebug("Blocksize(1) %x", m_blocksize); | ||
212 | unsigned char ct = (m_blocksize >> 24) & 0xff; | ||
213 | qDebug("Compress type:%x", ct); | ||
214 | switch (ct) | ||
215 | { | ||
216 | case 0: | ||
217 | m_decompress = UnZip; | ||
218 | break; | ||
219 | case 3: | ||
220 | m_decompress = getdecompressor("PluckerDecompress3"); | ||
221 | break; | ||
222 | case 4: | ||
223 | m_decompress = getdecompressor("PluckerDecompress4"); | ||
224 | break; | ||
225 | } | ||
226 | if (m_decompress == NULL) return -1; | ||
227 | m_blocksize = 1024*(m_blocksize & 0xffffff); | ||
228 | } | ||
229 | else | ||
230 | { | ||
231 | m_blocksize = 4096; | ||
232 | m_decompress = UnZip; | ||
233 | } | ||
234 | qDebug("Blocksize %u", m_blocksize); | ||
235 | currentpage.init(fin, m_blocksize, m_decompress); | ||
236 | qDebug("Its a REB!!!!"); | ||
237 | fseek(fin, 0x18, SEEK_SET); | ||
238 | fread(&toc, 1, sizeof(toc), fin); | ||
239 | qDebug("Expect this to be 128 or 20:%x", toc); | ||
240 | fread(&type, 1, sizeof(type), fin); | ||
241 | qDebug("File length:%u", type); | ||
242 | fseek(fin, toc, SEEK_SET); | ||
243 | fread(&nopages, 1, sizeof(nopages), fin); | ||
244 | m_indexpages = new UInt32[nopages]; | ||
245 | m_pagedetails = new Page_detail[nopages]; | ||
246 | qDebug("There are %u pages", nopages); | ||
247 | UInt32 loc = 0; | ||
248 | UInt32 homeguess = nopages-1; | ||
249 | QString homeurl; | ||
250 | for (int i = 0; i < nopages; ++i) | ||
251 | { | ||
252 | char name[32]; | ||
253 | UInt32 len, pos, flags; | ||
254 | fread(name, 1, 32, fin); | ||
255 | fread(&len, 1, 4, fin); | ||
256 | fread(&pos, 1, 4, fin); | ||
257 | fread(&flags, 1, 4, fin); | ||
258 | //qDebug("Page %u (%s) is %u bytes at %u (%u) of type %u", i, name, len, pos, loc, flags); | ||
259 | m_index[name] = i; | ||
260 | m_pagedetails[i] = Page_detail(loc, len, flags); | ||
261 | |||
262 | if (QString(name).find(".htm", 0, false) >= 0) | ||
263 | { | ||
264 | if (homeguess > i) homeguess = i; | ||
265 | if ((flags & 8) != 0) | ||
266 | { | ||
267 | UInt32 lastpos = ftell(fin); | ||
268 | loc += pagelength(i); | ||
269 | fseek(fin, lastpos, SEEK_SET); | ||
270 | } | ||
271 | else | ||
272 | { | ||
273 | loc += len; | ||
274 | } | ||
275 | } | ||
276 | if ((flags & 2) != 0) | ||
277 | { | ||
278 | UInt32 lastpos = ftell(fin); | ||
279 | RBPage* idx = new RBPage(); | ||
280 | idx->init(fin, m_blocksize, m_decompress); | ||
281 | idx->startpage(page2pos(i), i, ((flags & 8) != 0), len); | ||
282 | int c = 0; | ||
283 | while (c != EOF) | ||
284 | { | ||
285 | QString s(""); | ||
286 | while (1) | ||
287 | { | ||
288 | c = idx->getch(this); | ||
289 | if (c == 10 || c == EOF) break; | ||
290 | s += c; | ||
291 | } | ||
292 | if (s.left(5) == "BODY=") | ||
293 | { | ||
294 | homeurl = s.right(s.length()-5); | ||
295 | qDebug("Home:%s", (const char*)homeurl); | ||
296 | } | ||
297 | else | ||
298 | { | ||
299 | qDebug("Info:%s", (const char*)s); | ||
300 | } | ||
301 | } | ||
302 | delete idx; | ||
303 | fseek(fin, lastpos, SEEK_SET); | ||
304 | } | ||
305 | } | ||
306 | text_length = loc; | ||
307 | qDebug("Looking for homepage"); | ||
308 | if (homeurl.isEmpty()) | ||
309 | { | ||
310 | m_homepage = homeguess; | ||
311 | } | ||
312 | else | ||
313 | { | ||
314 | QMap<QString, UInt32>::Iterator iter = m_index.find(homeurl); | ||
315 | if (iter != m_index.end()) | ||
316 | { | ||
317 | m_homepage = iter.data(); | ||
318 | } | ||
319 | else | ||
320 | { | ||
321 | m_homepage = homeguess; | ||
322 | } | ||
323 | } | ||
324 | m_homepos = m_pagedetails[m_homepage].pagestart; | ||
325 | qDebug("Finding indices"); | ||
326 | for (QMap<QString, UInt32>::Iterator iter = m_index.begin(); iter != m_index.end(); ++iter) | ||
327 | { | ||
328 | QString href = iter.key(); | ||
329 | if (href.find(".htm", 0, false) >= 0) | ||
330 | { | ||
331 | QString hind = href.left(href.find(".htm", 0, false))+".hidx"; | ||
332 | //qDebug("Index is %s", (const char*)hind); | ||
333 | QMap<QString, UInt32>::Iterator iter2 = m_index.find(hind); | ||
334 | if (iter2 != m_index.end()) | ||
335 | { | ||
336 | m_indexpages[iter.data()] = iter2.data(); | ||
337 | } | ||
338 | } | ||
339 | } | ||
340 | qDebug("Going home"); | ||
341 | home(); | ||
342 | return 0; | ||
343 | } | ||
344 | else | ||
345 | { | ||
346 | char * tmp = (char*)(&type); | ||
347 | for (int i = 0; i < 4; ++i) qDebug("%d:%c", i, tmp[i]); | ||
348 | return -1; | ||
349 | } | ||
350 | } | ||
351 | |||
352 | UInt32 CReb::page2pos(UInt32 page) | ||
353 | { | ||
354 | fseek(fin, toc+40+44*page, SEEK_SET); | ||
355 | UInt32 pos; | ||
356 | fread(&pos, 1, 4, fin); | ||
357 | return pos; | ||
358 | } | ||
359 | |||
360 | UInt32 CReb::pagelength(UInt32 pagenum) | ||
361 | { | ||
362 | fseek(fin, toc+40+44*pagenum, SEEK_SET); | ||
363 | UInt32 pos; | ||
364 | fread(&pos, 1, 4, fin); | ||
365 | fseek(fin, pos+4, SEEK_SET); | ||
366 | UInt32 len; | ||
367 | fread(&len, 1, sizeof(len), fin); | ||
368 | return len; | ||
369 | } | ||
370 | |||
371 | void CReb::readindex(UInt32 cp) | ||
372 | { | ||
373 | if (joins != NULL) | ||
374 | { | ||
375 | delete [] joins; | ||
376 | joins = NULL; | ||
377 | } | ||
378 | if (tags != NULL) | ||
379 | { | ||
380 | delete [] tags; | ||
381 | tags = NULL; | ||
382 | } | ||
383 | if (paras != NULL) | ||
384 | { | ||
385 | delete [] paras; | ||
386 | paras = NULL; | ||
387 | } | ||
388 | noparas = 0; | ||
389 | nojoins = 0; | ||
390 | names.clear(); | ||
391 | |||
392 | UInt32 rspage = m_indexpages[cp]; | ||
393 | if (rspage != 0) | ||
394 | { | ||
395 | Page_detail rs = m_pagedetails[rspage]; | ||
396 | int count = 0; | ||
397 | RBPage* idx = new RBPage(); | ||
398 | idx->init(fin, m_blocksize, m_decompress); | ||
399 | idx->startpage(page2pos(rspage), rspage, ((rs.flags & 8) != 0), rs.len); | ||
400 | int c = 0; | ||
401 | int phase = 0; | ||
402 | int i; | ||
403 | if (m_binary) | ||
404 | { | ||
405 | count = idx->getuint(this); | ||
406 | qDebug("tag count:%d", count); | ||
407 | tags = new QString[count]; | ||
408 | for (int i = 0; i < count; ++i) | ||
409 | { | ||
410 | QString s; | ||
411 | while (1) | ||
412 | { | ||
413 | c = idx->getch(this); | ||
414 | if (c == 0 || c == EOF) break; | ||
415 | s += c; | ||
416 | } | ||
417 | unsigned short val = idx->getuint(this); | ||
418 | if (val != 0xffff) | ||
419 | { | ||
420 | tags[i] = tags[val]+s; | ||
421 | } | ||
422 | else | ||
423 | { | ||
424 | tags[i] = s; | ||
425 | } | ||
426 | //qDebug("tags[%d](%d) = %s", i, val, (const char*)tags[i]); | ||
427 | } | ||
428 | noparas = idx->getint(this); | ||
429 | qDebug("Para count %d", noparas); | ||
430 | paras = new ParaRef[noparas]; | ||
431 | for (int i = 0; i < noparas; ++i) | ||
432 | { | ||
433 | paras[i] = ParaRef(idx->getint(this), idx->getuint(this)); | ||
434 | } | ||
435 | count = idx->getint(this); | ||
436 | qDebug("Name count %d", count); | ||
437 | for (int i = 0; i < count; ++i) | ||
438 | { | ||
439 | QString s; | ||
440 | while (1) | ||
441 | { | ||
442 | c = idx->getch(this); | ||
443 | if (c == 0 || c == EOF) break; | ||
444 | s += c; | ||
445 | } | ||
446 | int val = idx->getint(this); | ||
447 | names[s.mid(1,s.length()-2)] = val; | ||
448 | qDebug("names[%s] = %d", (const char*)s, val); | ||
449 | } | ||
450 | count = idx->getint(this); | ||
451 | qDebug("Join count %d", count); | ||
452 | if (count > 0) | ||
453 | { | ||
454 | nojoins = count+2; | ||
455 | joins = new UInt32[count+2]; | ||
456 | joins[0] = 0; | ||
457 | joins[count+1] = currentpage.length(); | ||
458 | for (int i = 1; i < count+1; ++i) | ||
459 | { | ||
460 | joins[i] = idx->getint(this); | ||
461 | } | ||
462 | } | ||
463 | } | ||
464 | else | ||
465 | { | ||
466 | while (c != EOF) | ||
467 | { | ||
468 | QString s(""); | ||
469 | while (1) | ||
470 | { | ||
471 | c = idx->getch(this); | ||
472 | if (c == 10 || c == EOF) break; | ||
473 | s += c; | ||
474 | } | ||
475 | //qDebug("%s", (const char*)s); | ||
476 | if (count > 0) | ||
477 | { | ||
478 | --count; | ||
479 | int sp = s.findRev(' '); | ||
480 | QString l = s.left(sp); | ||
481 | int val = s.right(s.length()-sp).toInt(); | ||
482 | switch (phase) | ||
483 | { | ||
484 | case 4: | ||
485 | //qDebug("Join %d is at offset %d", i, val); | ||
486 | joins[i++] = val; | ||
487 | break; | ||
488 | case 3: | ||
489 | //qDebug("Name %s is at offset %d", (const char*)l.mid(1,l.length()-2), val+m_pagedetails[cp].pagestart); | ||
490 | names[l.mid(1,l.length()-2)] = val; | ||
491 | break; | ||
492 | case 1: | ||
493 | //qDebug("%s:%d [%d]", (const char*)l, val, i); | ||
494 | if (val >= 0) | ||
495 | { | ||
496 | tags[i++] = tags[val]+l; | ||
497 | } | ||
498 | else | ||
499 | { | ||
500 | tags[i++] = l; | ||
501 | } | ||
502 | //qDebug("TAG:%s", (const char*)tags[i-1]); | ||
503 | break; | ||
504 | case 2: | ||
505 | paras[i++] = ParaRef(QString(l).toInt(), val); | ||
506 | //qDebug("Para:%u - %u (%s)", QString(l).toInt(), val, (const char*)s); | ||
507 | break; | ||
508 | default: | ||
509 | qDebug("%s:%d", (const char*)l, val); | ||
510 | break; | ||
511 | } | ||
512 | } | ||
513 | else | ||
514 | { | ||
515 | QString key = "[tags "; | ||
516 | if (s.left(key.length()) == key) | ||
517 | { | ||
518 | phase = 1; | ||
519 | i = 0; | ||
520 | count = s.mid(key.length(),s.length()-key.length()-1).toInt(); | ||
521 | qDebug("%s:%s:%d", (const char*)key, (const char*)s, count); | ||
522 | tags = new QString[count]; | ||
523 | } | ||
524 | key = "[paragraphs "; | ||
525 | if (s.left(key.length()) == key) | ||
526 | { | ||
527 | phase = 2; | ||
528 | i = 0; | ||
529 | count = s.mid(key.length(),s.length()-key.length()-1).toInt(); | ||
530 | qDebug("%s:%s:%d", (const char*)key, (const char*)s, count); | ||
531 | paras = new ParaRef[count]; | ||
532 | noparas = count; | ||
533 | } | ||
534 | key = "[names "; | ||
535 | if (s.left(key.length()) == key) | ||
536 | { | ||
537 | phase = 3; | ||
538 | count = s.mid(key.length(),s.length()-key.length()-1).toInt(); | ||
539 | qDebug("%s:%s:%d", (const char*)key, (const char*)s, count); | ||
540 | } | ||
541 | key = "[joins "; | ||
542 | if (s.left(key.length()) == key) | ||
543 | { | ||
544 | phase = 4; | ||
545 | count = s.mid(key.length(),s.length()-key.length()-1).toInt(); | ||
546 | qDebug("%s:%s:%d", (const char*)key, (const char*)s, count); | ||
547 | nojoins = count+2; | ||
548 | i = 1; | ||
549 | joins = new UInt32[count+2]; | ||
550 | joins[0] = 0; | ||
551 | joins[count+1] = currentpage.length(); | ||
552 | qDebug("%s:%s:%d", (const char*)key, (const char*)s, count); | ||
553 | } | ||
554 | qDebug("ZC:%s", (const char*)s); | ||
555 | } | ||
556 | } | ||
557 | } | ||
558 | // for (int i = 0; i < nojoins; ++i) qDebug("JOINS:%u %u", i, joins[i]); | ||
559 | delete idx; | ||
560 | } | ||
561 | } | ||
562 | |||
563 | bool CReb::findanchor(const QString& _info) | ||
564 | { | ||
565 | QMap<QString, int>::Iterator iter = names.find(_info); | ||
566 | if (iter != names.end()) | ||
567 | { | ||
568 | locate(iter.data()+m_pagedetails[currentpage.pageno()].pagestart); | ||
569 | return true; | ||
570 | } | ||
571 | return false; | ||
572 | } | ||
573 | |||
574 | #ifdef USEQPE | ||
575 | void CReb::suspend() | ||
576 | { | ||
577 | CExpander::suspend(fin); | ||
578 | } | ||
579 | void CReb::unsuspend() | ||
580 | { | ||
581 | CExpander::unsuspend(fin); | ||
582 | } | ||
583 | #endif | ||
584 | |||
585 | #ifndef __STATIC | ||
586 | extern "C" | ||
587 | { | ||
588 | CExpander* newcodec() { return new CReb; } | ||
589 | } | ||
590 | #endif | ||
591 | |||
592 | void CReb::startpage(UInt32 pgno) | ||
593 | { | ||
594 | Page_detail rs = m_pagedetails[pgno]; | ||
595 | unsuspend(); | ||
596 | readindex(pgno); | ||
597 | currentpage.startpage(page2pos(pgno), pgno, ((rs.flags & 8) != 0), rs.len); | ||
598 | } | ||
599 | |||
600 | void CReb::startpage(UInt32 _cp, bool _isCompressed, UInt32 _len) | ||
601 | { | ||
602 | unsuspend(); | ||
603 | readindex(_cp); | ||
604 | currentpage.startpage(page2pos(_cp), _cp, _isCompressed, _len); | ||
605 | } | ||
606 | |||
607 | void RBPage::initpage(UInt32 pos, size_t _cp, bool _isCompressed, UInt32 _len) | ||
608 | { | ||
609 | filepos = pos; | ||
610 | m_pageno = _cp; | ||
611 | m_Compressed = _isCompressed; | ||
612 | m_pagelen = _len; | ||
613 | currentchunk = 0; | ||
614 | pageoffset = 0; | ||
615 | |||
616 | if (chunklist != NULL) delete [] chunklist; | ||
617 | |||
618 | fseek(fin, filepos, SEEK_SET); | ||
619 | if (m_Compressed) | ||
620 | { | ||
621 | fread(&nochunks, 1, sizeof(nochunks), fin); | ||
622 | fread(&m_pagelen, 1, sizeof(m_pagelen), fin); | ||
623 | chunklist = new UInt32[nochunks]; | ||
624 | fread(chunklist, nochunks, 4, fin); | ||
625 | } | ||
626 | else | ||
627 | { | ||
628 | chunklist = NULL; | ||
629 | nochunks = (_len+m_blocksize-1)/m_blocksize; | ||
630 | } | ||
631 | m_startoff = 0; | ||
632 | m_endoff = m_pagelen; | ||
633 | chunkpos = ftell(fin); | ||
634 | qDebug("Compressed:%u Expanded:%u", _len, m_pagelen); | ||
635 | } | ||
636 | |||
637 | void RBPage::startpage(UInt32 pos, UInt32 _cp, bool _isCompressed, UInt32 _len) | ||
638 | { | ||
639 | initpage(pos, _cp, _isCompressed, _len); | ||
640 | readchunk(); | ||
641 | } | ||
642 | |||
643 | int CReb::getch() | ||
644 | { | ||
645 | if (tagoffset < tagstring.length()) | ||
646 | return tagstring[tagoffset++].unicode(); | ||
647 | else | ||
648 | return currentpage.getch(this); | ||
649 | } | ||
650 | |||
651 | int RBPage::getch(CReb* parent) | ||
652 | { | ||
653 | if (chunkoffset >= chunklen) | ||
654 | { | ||
655 | if (++currentchunk >= nochunks) | ||
656 | { | ||
657 | --currentchunk; | ||
658 | return EOF; | ||
659 | } | ||
660 | pageoffset += chunklen; | ||
661 | parent->unsuspend(); | ||
662 | readchunk(); | ||
663 | } | ||
664 | if (offset() == m_endoff) return EOF; | ||
665 | return chunk[chunkoffset++]; | ||
666 | } | ||
667 | |||
668 | unsigned short int RBPage::getuint(CReb* parent) | ||
669 | { | ||
670 | unsigned short int ret = 0; | ||
671 | char *buffer = (char*)(&ret); | ||
672 | for (int i = 0; i < 2; ++i) | ||
673 | { | ||
674 | int ch = getch(parent); | ||
675 | if (ch == EOF) return 0; | ||
676 | buffer[i] = ch; | ||
677 | } | ||
678 | return ret; | ||
679 | } | ||
680 | |||
681 | int RBPage::getint(CReb* parent) | ||
682 | { | ||
683 | int ret = 0; | ||
684 | char *buffer = (char*)(&ret); | ||
685 | for (int i = 0; i < 4; ++i) | ||
686 | { | ||
687 | int ch = getch(parent); | ||
688 | if (ch == EOF) return 0; | ||
689 | buffer[i] = ch; | ||
690 | } | ||
691 | return ret; | ||
692 | } | ||
693 | |||
694 | void RBPage::readchunk() | ||
695 | { | ||
696 | if (m_Compressed) | ||
697 | { | ||
698 | chunkoffset = 0; | ||
699 | fseek(fin, chunkpos, SEEK_SET); | ||
700 | UInt8* inbuf = new UInt8[chunklist[currentchunk]]; | ||
701 | fread(inbuf, 1, chunklist[currentchunk], fin); | ||
702 | chunklen = (*m_decompress)(inbuf, chunklist[currentchunk], chunk, m_blocksize); | ||
703 | delete [] inbuf; | ||
704 | chunkpos = ftell(fin); | ||
705 | } | ||
706 | else | ||
707 | { | ||
708 | chunkoffset = 0; | ||
709 | chunklen = m_blocksize; | ||
710 | if (m_blocksize*(currentchunk+1) > m_pagelen) | ||
711 | { | ||
712 | chunklen = m_pagelen - currentchunk*m_blocksize; | ||
713 | } | ||
714 | fseek(fin, chunkpos, SEEK_SET); | ||
715 | chunklen = fread(chunk, 1, chunklen, fin); | ||
716 | chunkpos = ftell(fin); | ||
717 | } | ||
718 | } | ||
719 | |||
720 | void RBPage::setoffset(UInt32 pos, size_t _cp, bool _isCompressed, UInt32 _len, UInt32 _offset) | ||
721 | { | ||
722 | if (m_pageno != _cp) | ||
723 | { | ||
724 | initpage(pos, _cp, _isCompressed, _len); | ||
725 | } | ||
726 | else | ||
727 | { | ||
728 | if (m_Compressed) | ||
729 | { | ||
730 | chunkpos = filepos + sizeof(nochunks) + sizeof(m_pagelen) + 4*nochunks; | ||
731 | } | ||
732 | else | ||
733 | { | ||
734 | chunkpos = filepos; | ||
735 | } | ||
736 | } | ||
737 | |||
738 | currentchunk = _offset/m_blocksize; | ||
739 | pageoffset = m_blocksize*currentchunk; | ||
740 | if (m_Compressed) | ||
741 | { | ||
742 | for (int i = 0; i < currentchunk; ++i) | ||
743 | { | ||
744 | chunkpos += chunklist[i]; | ||
745 | } | ||
746 | } | ||
747 | else | ||
748 | { | ||
749 | chunkpos += pageoffset; | ||
750 | } | ||
751 | readchunk(); | ||
752 | chunkoffset = _offset - pageoffset; | ||
753 | } | ||
754 | |||
755 | void CReb::start2endSection() | ||
756 | { | ||
757 | if (m_pagedetails != NULL) | ||
758 | { | ||
759 | if (nojoins > 0) | ||
760 | { | ||
761 | //UInt32 jl = binarychop<UInt32>(joins, nojoins, currentpage.offset()); | ||
762 | |||
763 | UInt32 jl = 0,jh = nojoins-1,jm = (jl+jh)/2; | ||
764 | while (jh > jl+1) | ||
765 | { | ||
766 | if (joins[jm] > currentpage.offset()) | ||
767 | { | ||
768 | jh = jm; | ||
769 | } | ||
770 | else | ||
771 | { | ||
772 | jl = jm; | ||
773 | } | ||
774 | jm = (jl+jh)/2; | ||
775 | } | ||
776 | |||
777 | currentpage.m_startoff = joins[jl]; | ||
778 | currentpage.m_endoff = joins[jl+1]-1; | ||
779 | //currentpage.m_endoff = joins[jh]-1; | ||
780 | } | ||
781 | m_currentstart = m_pagedetails[currentpage.pageno()].pagestart+currentpage.m_startoff; | ||
782 | m_currentend = m_pagedetails[currentpage.pageno()].pagestart+currentpage.m_endoff; | ||
783 | } | ||
784 | else | ||
785 | { | ||
786 | m_currentstart = m_currentend = 0; | ||
787 | } | ||
788 | qDebug("s2e:[%u, %u, %u]", m_currentstart, locate(), m_currentend); | ||
789 | } | ||
diff --git a/noncore/apps/opie-reader/Reb.h b/noncore/apps/opie-reader/Reb.h new file mode 100644 index 0000000..f268eb0 --- a/dev/null +++ b/noncore/apps/opie-reader/Reb.h | |||
@@ -0,0 +1,157 @@ | |||
1 | #ifndef __REB_H | ||
2 | #define __REB_H | ||
3 | #include <stdio.h> | ||
4 | #include <zlib.h> | ||
5 | #include <sys/stat.h> | ||
6 | #ifdef USEQPE | ||
7 | #include <qpe/global.h> | ||
8 | #endif | ||
9 | #include <qmap.h> | ||
10 | |||
11 | #include "CExpander.h" | ||
12 | #include <zlib.h> | ||
13 | |||
14 | #ifdef _WINDOWS | ||
15 | #include <winsock.h> | ||
16 | #endif | ||
17 | |||
18 | #include "mytypes.h" | ||
19 | |||
20 | /* | ||
21 | struct Reb_Segment | ||
22 | { | ||
23 | UInt32 len, page, flags; | ||
24 | Reb_Segment(UInt32 _len = 0, UInt32 _page = 0, UInt32 _flags = 0) | ||
25 | : | ||
26 | len(_len), page(_page), flags(_flags) | ||
27 | {} | ||
28 | }; | ||
29 | */ | ||
30 | |||
31 | class CReb; | ||
32 | |||
33 | class RBPage | ||
34 | { | ||
35 | UInt32 filepos; | ||
36 | UInt32 pageoffset; | ||
37 | UInt32 nochunks, currentchunk, chunkpos, chunklen, chunkoffset; | ||
38 | UInt32 m_pagelen, m_blocksize; | ||
39 | bool m_Compressed; | ||
40 | void readchunk(); | ||
41 | UInt32* chunklist; | ||
42 | UInt8* chunk; | ||
43 | FILE* fin; | ||
44 | UInt32 m_pageno; | ||
45 | void initpage(UInt32 pos, size_t _cp, bool _isCompressed, UInt32 _len); | ||
46 | size_t (*m_decompress)(UInt8*, size_t, UInt8*, size_t); | ||
47 | public: | ||
48 | RBPage() : pageoffset(0), nochunks(0), currentchunk(0), chunkpos(0), chunkoffset(0), m_pagelen(0), m_Compressed(false), chunklist(NULL), chunk(NULL) {} | ||
49 | ~RBPage() | ||
50 | { | ||
51 | if (chunk != NULL) delete [] chunk; | ||
52 | if (chunklist != NULL) delete [] chunklist; | ||
53 | } | ||
54 | int getch(CReb*); | ||
55 | unsigned short int getuint(CReb*); | ||
56 | int getint(CReb*); | ||
57 | void startpage(UInt32, UInt32, bool, UInt32); | ||
58 | UInt32 pageno() { return m_pageno; } | ||
59 | UInt32 offset() { return pageoffset+chunkoffset; } | ||
60 | void setoffset(UInt32, size_t, bool, UInt32, UInt32); | ||
61 | void init(FILE* _f, UInt32 _bs, size_t (*_decompress)(UInt8*, size_t, UInt8*, size_t)) | ||
62 | { | ||
63 | fin = _f; | ||
64 | m_blocksize = _bs; | ||
65 | chunk = new UInt8[m_blocksize]; | ||
66 | m_decompress = _decompress; | ||
67 | } | ||
68 | UInt32 length() { return m_pagelen; } | ||
69 | UInt32 m_startoff, m_endoff; | ||
70 | }; | ||
71 | |||
72 | struct Page_detail | ||
73 | { | ||
74 | UInt32 pagestart, len, flags; | ||
75 | Page_detail(UInt32 _ps = 0, UInt32 _l = 0, UInt32 _f = 0) | ||
76 | : | ||
77 | pagestart(_ps), len(_l), flags(_f) | ||
78 | { | ||
79 | } | ||
80 | }; | ||
81 | |||
82 | struct ParaRef | ||
83 | { | ||
84 | int pos, tag; | ||
85 | ParaRef(int _pos = 0, int _tag = 0) : pos(_pos), tag(_tag) | ||
86 | { | ||
87 | //qDebug("New PARAREF:%d, %d", pos, tag); | ||
88 | } | ||
89 | }; | ||
90 | |||
91 | class CReb : public CExpander | ||
92 | { | ||
93 | //friend class RBPage; | ||
94 | size_t (*m_decompress)(UInt8*, size_t, UInt8*, size_t); | ||
95 | RBPage currentpage; | ||
96 | UInt32 nopages, m_homepage, m_blocksize; | ||
97 | |||
98 | QMap<QString, UInt32> m_index; | ||
99 | |||
100 | size_t file_length, text_length; | ||
101 | UInt32 toc; | ||
102 | FILE* fin; | ||
103 | void home(); | ||
104 | void startpage(UInt32); | ||
105 | void startpage(UInt32, bool, UInt32); | ||
106 | void readchunk(); | ||
107 | QString tagstring; | ||
108 | UInt32 tagoffset; | ||
109 | UInt32 pagelength(UInt32); | ||
110 | QImage* getPicture(const QString& ref); | ||
111 | UInt32 page2pos(UInt32); | ||
112 | //UInt32 m_pagelen; | ||
113 | UInt32* m_indexpages; | ||
114 | Page_detail* m_pagedetails; | ||
115 | // void UnZip(size_t bsize); | ||
116 | QMap<QString, int> names; | ||
117 | QString* tags; | ||
118 | ParaRef* paras; | ||
119 | UInt32* joins; | ||
120 | UInt32 nojoins; | ||
121 | UInt32 noparas; | ||
122 | bool m_binary; | ||
123 | void readindex(UInt32); | ||
124 | public: | ||
125 | bool findanchor(const QString& _info); | ||
126 | QString about() { return QString("REB codec (c) Tim Wentford"); } | ||
127 | bool getFile(const QString& href, const QString& nm); | ||
128 | void start2endSection(); | ||
129 | void sizes(unsigned long& _file, unsigned long& _text) | ||
130 | { | ||
131 | _file = file_length; | ||
132 | _text = text_length; | ||
133 | } | ||
134 | bool hasrandomaccess() { return true; } | ||
135 | virtual ~CReb(); | ||
136 | CReb(); | ||
137 | int OpenFile(const char *src); | ||
138 | int getch(); | ||
139 | unsigned int locate(); | ||
140 | void locate(unsigned int n); | ||
141 | CList<Bkmk>* getbkmklist(); | ||
142 | MarkupType PreferredMarkup() | ||
143 | { | ||
144 | return cCHM; | ||
145 | } | ||
146 | #ifdef USEQPE | ||
147 | void suspend(); | ||
148 | void unsuspend(); | ||
149 | #else | ||
150 | void suspend() {} | ||
151 | void unsuspend() {} | ||
152 | #endif | ||
153 | }; | ||
154 | |||
155 | #endif | ||
156 | |||
157 | |||
diff --git a/noncore/apps/opie-reader/RebCodec/.cvsignore b/noncore/apps/opie-reader/RebCodec/.cvsignore new file mode 100644 index 0000000..1810ee0 --- a/dev/null +++ b/noncore/apps/opie-reader/RebCodec/.cvsignore | |||
@@ -0,0 +1,5 @@ | |||
1 | Makefile | ||
2 | config.in | ||
3 | moc_* | ||
4 | .moc | ||
5 | .obj | ||
diff --git a/noncore/apps/opie-reader/RebCodec/RebCodec.pro b/noncore/apps/opie-reader/RebCodec/RebCodec.pro new file mode 100644 index 0000000..2d6410a --- a/dev/null +++ b/noncore/apps/opie-reader/RebCodec/RebCodec.pro | |||
@@ -0,0 +1,21 @@ | |||
1 | DEFINES += OPIE USEQPE | ||
2 | VPATH = .. | ||
3 | TEMPLATE= lib | ||
4 | CONFIG = qt warn_on release dll | ||
5 | HEADERS = Reb.h | ||
6 | |||
7 | SOURCES = Reb.cpp \ | ||
8 | decompress.cpp | ||
9 | |||
10 | |||
11 | INTERFACES= | ||
12 | DESTDIR = $(OPIEDIR)/plugins/reader/codecs | ||
13 | TARGET = Reb | ||
14 | LIBS += -L$(OPIEDIR)/lib -lreader_codec | ||
15 | |||
16 | |||
17 | INCLUDEPATH+= $(OPIEDIR)/include | ||
18 | DEPENDPATH += $(OPIEDIR)/include | ||
19 | |||
20 | include( $(OPIEDIR)/include.pro ) | ||
21 | |||
diff --git a/noncore/apps/opie-reader/StyleConsts.h b/noncore/apps/opie-reader/StyleConsts.h index 8e23c6f..4b7ff4b 100644 --- a/noncore/apps/opie-reader/StyleConsts.h +++ b/noncore/apps/opie-reader/StyleConsts.h | |||
@@ -38,7 +38,8 @@ enum EalignmentType | |||
38 | m_AlignLeft, | 38 | m_AlignLeft, |
39 | m_AlignRight, | 39 | m_AlignRight, |
40 | m_AlignCentre, | 40 | m_AlignCentre, |
41 | m_AlignJustify | 41 | m_AlignJustify, |
42 | m_AlignNone | ||
42 | }; | 43 | }; |
43 | 44 | ||
44 | class CBasicStyle | 45 | class CBasicStyle |
@@ -46,6 +47,7 @@ class CBasicStyle | |||
46 | friend class CStyle; | 47 | friend class CStyle; |
47 | bool m_bold, | 48 | bool m_bold, |
48 | m_italic; | 49 | m_italic; |
50 | unsigned long m_table; | ||
49 | int m_fontsize; | 51 | int m_fontsize; |
50 | EalignmentType m_align; | 52 | EalignmentType m_align; |
51 | unsigned char red, green, blue; | 53 | unsigned char red, green, blue; |
@@ -64,6 +66,7 @@ class CBasicStyle | |||
64 | CBasicStyle() | 66 | CBasicStyle() |
65 | { | 67 | { |
66 | unset(); | 68 | unset(); |
69 | m_table = 0xffffffff; | ||
67 | } | 70 | } |
68 | bool operator!=(const CBasicStyle& rhs) | 71 | bool operator!=(const CBasicStyle& rhs) |
69 | { | 72 | { |
@@ -146,6 +149,9 @@ class CStyle | |||
146 | CStyle(const CStyle&); | 149 | CStyle(const CStyle&); |
147 | CStyle& operator=(const CStyle&); | 150 | CStyle& operator=(const CStyle&); |
148 | void unset(); | 151 | void unset(); |
152 | bool isTable() const { return (sty.m_table != 0xffffffff); } | ||
153 | void setTable(unsigned long _b) { sty.m_table = _b; } | ||
154 | unsigned long getTable() { return sty.m_table; } | ||
149 | bool isPicture() const { return (graphic != NULL); } | 155 | bool isPicture() const { return (graphic != NULL); } |
150 | bool canScale() const { return graphic->m_isScaleable; } | 156 | bool canScale() const { return graphic->m_isScaleable; } |
151 | void clearPicture(); | 157 | void clearPicture(); |
@@ -187,6 +193,10 @@ class CStyle | |||
187 | { | 193 | { |
188 | sty.m_align = m_AlignJustify; | 194 | sty.m_align = m_AlignJustify; |
189 | } | 195 | } |
196 | void setNoJustify() | ||
197 | { | ||
198 | sty.m_align = m_AlignNone; | ||
199 | } | ||
190 | StyleType getJustify() | 200 | StyleType getJustify() |
191 | { | 201 | { |
192 | return sty.m_align; | 202 | return sty.m_align; |
diff --git a/noncore/apps/opie-reader/SubAlloc.h b/noncore/apps/opie-reader/SubAlloc.h new file mode 100644 index 0000000..ded2b73 --- a/dev/null +++ b/noncore/apps/opie-reader/SubAlloc.h | |||
@@ -0,0 +1,201 @@ | |||
1 | /**************************************************************************** | ||
2 | * This file is part of PPMd project * | ||
3 | * Written and distributed to public domain by Dmitry Shkarin 1997, * | ||
4 | * 1999-2001 * | ||
5 | * Contents: memory allocation routines * | ||
6 | ****************************************************************************/ | ||
7 | |||
8 | enum { UNIT_SIZE=12, N1=4, N2=4, N3=4, N4=(128+3-1*N1-2*N2-3*N3)/4, | ||
9 | N_INDEXES=N1+N2+N3+N4 }; | ||
10 | |||
11 | #pragma pack(1) | ||
12 | struct BLK_NODE { | ||
13 | DWORD Stamp; | ||
14 | BLK_NODE* next; | ||
15 | BOOL avail() const { return (next != NULL); } | ||
16 | void link(BLK_NODE* p) { p->next=next; next=p; } | ||
17 | void unlink() { next=next->next; } | ||
18 | void* remove() { | ||
19 | BLK_NODE* p=next; unlink(); | ||
20 | Stamp--; return p; | ||
21 | } | ||
22 | inline void insert(void* pv,int NU); | ||
23 | } BList[N_INDEXES]; | ||
24 | struct MEM_BLK: public BLK_NODE { DWORD NU; } _PACK_ATTR; | ||
25 | #pragma pack() | ||
26 | |||
27 | static BYTE Indx2Units[N_INDEXES], Units2Indx[128]; // constants | ||
28 | static DWORD GlueCount, SubAllocatorSize=0; | ||
29 | static BYTE* HeapStart, * pText, * UnitsStart, * LoUnit, * HiUnit; | ||
30 | |||
31 | inline void PrefetchData(void* Addr) | ||
32 | { | ||
33 | #if defined(_USE_PREFETCHING) | ||
34 | BYTE PrefetchByte = *(volatile BYTE*) Addr; | ||
35 | #endif /* defined(_USE_PREFETCHING) */ | ||
36 | } | ||
37 | inline void BLK_NODE::insert(void* pv,int NU) { | ||
38 | MEM_BLK* p=(MEM_BLK*) pv; link(p); | ||
39 | p->Stamp=~0UL; p->NU=NU; | ||
40 | Stamp++; | ||
41 | } | ||
42 | inline UINT U2B(UINT NU) { return 8*NU+4*NU; } | ||
43 | inline void SplitBlock(void* pv,UINT OldIndx,UINT NewIndx) | ||
44 | { | ||
45 | UINT i, k, UDiff=Indx2Units[OldIndx]-Indx2Units[NewIndx]; | ||
46 | BYTE* p=((BYTE*) pv)+U2B(Indx2Units[NewIndx]); | ||
47 | if (Indx2Units[i=Units2Indx[UDiff-1]] != UDiff) { | ||
48 | k=Indx2Units[--i]; BList[i].insert(p,k); | ||
49 | p += U2B(k); UDiff -= k; | ||
50 | } | ||
51 | BList[Units2Indx[UDiff-1]].insert(p,UDiff); | ||
52 | } | ||
53 | DWORD _STDCALL GetUsedMemory() | ||
54 | { | ||
55 | DWORD i, RetVal=SubAllocatorSize-(HiUnit-LoUnit)-(UnitsStart-pText); | ||
56 | for (i=0;i < N_INDEXES;i++) | ||
57 | RetVal -= UNIT_SIZE*Indx2Units[i]*BList[i].Stamp; | ||
58 | return RetVal; | ||
59 | } | ||
60 | void _STDCALL StopSubAllocator() { | ||
61 | if ( SubAllocatorSize ) { | ||
62 | SubAllocatorSize=0; delete[] HeapStart; | ||
63 | } | ||
64 | } | ||
65 | BOOL _STDCALL StartSubAllocator(UINT SASize) | ||
66 | { | ||
67 | DWORD t=SASize << 19U; | ||
68 | if (SubAllocatorSize == t) return TRUE; | ||
69 | StopSubAllocator(); | ||
70 | if ((HeapStart=new BYTE[t]) == NULL) return FALSE; | ||
71 | SubAllocatorSize=t; return TRUE; | ||
72 | } | ||
73 | static inline void InitSubAllocator() | ||
74 | { | ||
75 | memset(BList,0,sizeof(BList)); | ||
76 | HiUnit=(pText=HeapStart)+SubAllocatorSize; | ||
77 | UINT Diff=UNIT_SIZE*(SubAllocatorSize/8/UNIT_SIZE*7); | ||
78 | LoUnit=UnitsStart=HiUnit-Diff; GlueCount=0; | ||
79 | } | ||
80 | static void GlueFreeBlocks() | ||
81 | { | ||
82 | UINT i, k, sz; | ||
83 | MEM_BLK s0, * p, * p0, * p1; | ||
84 | if (LoUnit != HiUnit) *LoUnit=0; | ||
85 | for (i=0, (p0=&s0)->next=NULL;i < N_INDEXES;i++) | ||
86 | while ( BList[i].avail() ) { | ||
87 | p=(MEM_BLK*) BList[i].remove(); | ||
88 | if ( !p->NU ) continue; | ||
89 | while ((p1=p+p->NU)->Stamp == ~0UL) { | ||
90 | p->NU += p1->NU; p1->NU=0; | ||
91 | } | ||
92 | p0->link(p); p0=p; | ||
93 | } | ||
94 | while ( s0.avail() ) { | ||
95 | p=(MEM_BLK*) s0.remove(); sz=p->NU; | ||
96 | if ( !sz ) continue; | ||
97 | for ( ;sz > 128;sz -= 128, p += 128) | ||
98 | BList[N_INDEXES-1].insert(p,128); | ||
99 | if (Indx2Units[i=Units2Indx[sz-1]] != sz) { | ||
100 | k=sz-Indx2Units[--i]; BList[k-1].insert(p+(sz-k),k); | ||
101 | } | ||
102 | BList[i].insert(p,Indx2Units[i]); | ||
103 | } | ||
104 | GlueCount=1 << 13; | ||
105 | } | ||
106 | static void* _STDCALL AllocUnitsRare(UINT indx) | ||
107 | { | ||
108 | UINT i=indx; | ||
109 | if ( !GlueCount ) { | ||
110 | GlueFreeBlocks(); | ||
111 | if ( BList[i].avail() ) return BList[i].remove(); | ||
112 | } | ||
113 | do { | ||
114 | if (++i == N_INDEXES) { | ||
115 | GlueCount--; i=U2B(Indx2Units[indx]); | ||
116 | return (UnitsStart-pText > i)?(UnitsStart -= i):(NULL); | ||
117 | } | ||
118 | } while ( !BList[i].avail() ); | ||
119 | void* RetVal=BList[i].remove(); SplitBlock(RetVal,i,indx); | ||
120 | return RetVal; | ||
121 | } | ||
122 | inline void* AllocUnits(UINT NU) | ||
123 | { | ||
124 | UINT indx=Units2Indx[NU-1]; | ||
125 | if ( BList[indx].avail() ) return BList[indx].remove(); | ||
126 | void* RetVal=LoUnit; LoUnit += U2B(Indx2Units[indx]); | ||
127 | if (LoUnit <= HiUnit) return RetVal; | ||
128 | LoUnit -= U2B(Indx2Units[indx]); return AllocUnitsRare(indx); | ||
129 | } | ||
130 | inline void* AllocContext() | ||
131 | { | ||
132 | if (HiUnit != LoUnit) return (HiUnit -= UNIT_SIZE); | ||
133 | else if ( BList->avail() ) return BList->remove(); | ||
134 | else return AllocUnitsRare(0); | ||
135 | } | ||
136 | inline void UnitsCpy(void* Dest,void* Src,UINT NU) | ||
137 | { | ||
138 | DWORD* p1=(DWORD*) Dest, * p2=(DWORD*) Src; | ||
139 | do { | ||
140 | p1[0]=p2[0]; p1[1]=p2[1]; | ||
141 | p1[2]=p2[2]; | ||
142 | p1 += 3; p2 += 3; | ||
143 | } while ( --NU ); | ||
144 | } | ||
145 | inline void* ExpandUnits(void* OldPtr,UINT OldNU) | ||
146 | { | ||
147 | UINT i0=Units2Indx[OldNU-1], i1=Units2Indx[OldNU-1+1]; | ||
148 | if (i0 == i1) return OldPtr; | ||
149 | void* ptr=AllocUnits(OldNU+1); | ||
150 | if ( ptr ) { | ||
151 | UnitsCpy(ptr,OldPtr,OldNU); BList[i0].insert(OldPtr,OldNU); | ||
152 | } | ||
153 | return ptr; | ||
154 | } | ||
155 | inline void* ShrinkUnits(void* OldPtr,UINT OldNU,UINT NewNU) | ||
156 | { | ||
157 | UINT i0=Units2Indx[OldNU-1], i1=Units2Indx[NewNU-1]; | ||
158 | if (i0 == i1) return OldPtr; | ||
159 | if ( BList[i1].avail() ) { | ||
160 | void* ptr=BList[i1].remove(); UnitsCpy(ptr,OldPtr,NewNU); | ||
161 | BList[i0].insert(OldPtr,Indx2Units[i0]); | ||
162 | return ptr; | ||
163 | } else { | ||
164 | SplitBlock(OldPtr,i0,i1); return OldPtr; | ||
165 | } | ||
166 | } | ||
167 | inline void FreeUnits(void* ptr,UINT NU) { | ||
168 | UINT indx=Units2Indx[NU-1]; | ||
169 | BList[indx].insert(ptr,Indx2Units[indx]); | ||
170 | } | ||
171 | inline void SpecialFreeUnit(void* ptr) | ||
172 | { | ||
173 | if ((BYTE*) ptr != UnitsStart) BList->insert(ptr,1); | ||
174 | else { *(DWORD*) ptr=~0UL; UnitsStart += UNIT_SIZE; } | ||
175 | } | ||
176 | inline void* MoveUnitsUp(void* OldPtr,UINT NU) | ||
177 | { | ||
178 | UINT indx=Units2Indx[NU-1]; | ||
179 | if ((BYTE*) OldPtr > UnitsStart+16*1024 || (BLK_NODE*) OldPtr > BList[indx].next) | ||
180 | return OldPtr; | ||
181 | void* ptr=BList[indx].remove(); | ||
182 | UnitsCpy(ptr,OldPtr,NU); NU=Indx2Units[indx]; | ||
183 | if ((BYTE*) OldPtr != UnitsStart) BList[indx].insert(OldPtr,NU); | ||
184 | else UnitsStart += U2B(NU); | ||
185 | return ptr; | ||
186 | } | ||
187 | static inline void ExpandTextArea() | ||
188 | { | ||
189 | BLK_NODE* p; | ||
190 | UINT Count[N_INDEXES]; memset(Count,0,sizeof(Count)); | ||
191 | while ((p=(BLK_NODE*) UnitsStart)->Stamp == ~0UL) { | ||
192 | MEM_BLK* pm=(MEM_BLK*) p; UnitsStart=(BYTE*) (pm+pm->NU); | ||
193 | Count[Units2Indx[pm->NU-1]]++; pm->Stamp=0; | ||
194 | } | ||
195 | for (UINT i=0;i < N_INDEXES;i++) | ||
196 | for (p=BList+i;Count[i] != 0;p=p->next) | ||
197 | while ( !p->next->Stamp ) { | ||
198 | p->unlink(); BList[i].Stamp--; | ||
199 | if ( !--Count[i] ) break; | ||
200 | } | ||
201 | } | ||
diff --git a/noncore/apps/opie-reader/TableDialog.cpp b/noncore/apps/opie-reader/TableDialog.cpp new file mode 100644 index 0000000..b67d534 --- a/dev/null +++ b/noncore/apps/opie-reader/TableDialog.cpp | |||
@@ -0,0 +1,17 @@ | |||
1 | #include "TableDialog.h" | ||
2 | |||
3 | CTableDialog::CTableDialog(const QFont& f, const QString& tabtext, bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true) | ||
4 | { | ||
5 | setCaption("Table View"); | ||
6 | QVBoxLayout *tmp = new QVBoxLayout(this); | ||
7 | QTextView* qtv = new QTextView(this); | ||
8 | qtv->setFont(f); | ||
9 | tmp->addWidget(qtv); | ||
10 | qtv->setText(tabtext); | ||
11 | if (fs) showMaximized(); | ||
12 | else if (parent != NULL) | ||
13 | { | ||
14 | resize(parent->size()); | ||
15 | move(parent->pos()); | ||
16 | } | ||
17 | } | ||
diff --git a/noncore/apps/opie-reader/TableDialog.h b/noncore/apps/opie-reader/TableDialog.h new file mode 100644 index 0000000..2257a81 --- a/dev/null +++ b/noncore/apps/opie-reader/TableDialog.h | |||
@@ -0,0 +1,34 @@ | |||
1 | #ifndef __TABLEDIALOG_H | ||
2 | #define __TABLEDIALOG_H | ||
3 | |||
4 | #include <qdialog.h> | ||
5 | #include <qtextview.h> | ||
6 | #include <qlayout.h> | ||
7 | |||
8 | class CTableDialog : public QDialog | ||
9 | { | ||
10 | Q_OBJECT | ||
11 | #ifndef USEQPE | ||
12 | void keyPressEvent(QKeyEvent* e) | ||
13 | { | ||
14 | switch (e->key()) | ||
15 | { | ||
16 | case Key_Escape: | ||
17 | e->accept(); | ||
18 | reject(); | ||
19 | break; | ||
20 | case Key_Space: | ||
21 | case Key_Return: | ||
22 | e->accept(); | ||
23 | accept(); | ||
24 | break; | ||
25 | default: | ||
26 | QWidget::keyPressEvent(e); | ||
27 | } | ||
28 | } | ||
29 | #endif | ||
30 | public: | ||
31 | CTableDialog(const QFont& f, const QString& tabtext, bool fs = true, QWidget* parent = 0, const char* name = 0); | ||
32 | ~CTableDialog() {} | ||
33 | }; | ||
34 | #endif // CPREFS_H | ||
diff --git a/noncore/apps/opie-reader/ToolbarPrefs.h b/noncore/apps/opie-reader/ToolbarPrefs.h index 0bdae6b..9df8940 100644 --- a/noncore/apps/opie-reader/ToolbarPrefs.h +++ b/noncore/apps/opie-reader/ToolbarPrefs.h | |||
@@ -8,6 +8,7 @@ | |||
8 | ****************************************************************************/ | 8 | ****************************************************************************/ |
9 | #ifndef CTOOLBARPREFS_H | 9 | #ifndef CTOOLBARPREFS_H |
10 | #define CTOOLBARPREFS_H | 10 | #define CTOOLBARPREFS_H |
11 | |||
11 | #include <qvariant.h> | 12 | #include <qvariant.h> |
12 | #include <qwidget.h> | 13 | #include <qwidget.h> |
13 | #include <qtabdialog.h> | 14 | #include <qtabdialog.h> |
@@ -22,9 +23,7 @@ | |||
22 | #else | 23 | #else |
23 | #include "preferences.h" | 24 | #include "preferences.h" |
24 | #endif | 25 | #endif |
25 | //#ifdef OPIE | ||
26 | #define USECOMBO | 26 | #define USECOMBO |
27 | //#endif | ||
28 | 27 | ||
29 | class QVBoxLayout; | 28 | class QVBoxLayout; |
30 | class QHBoxLayout; | 29 | class QHBoxLayout; |
diff --git a/noncore/apps/opie-reader/ZText.h b/noncore/apps/opie-reader/ZText.h index 199c7da..40b0f0a 100644 --- a/noncore/apps/opie-reader/ZText.h +++ b/noncore/apps/opie-reader/ZText.h | |||
@@ -3,6 +3,10 @@ | |||
3 | #include <stdio.h> | 3 | #include <stdio.h> |
4 | #include <zlib.h> | 4 | #include <zlib.h> |
5 | #include <sys/stat.h> | 5 | #include <sys/stat.h> |
6 | #ifdef USEQPE | ||
7 | #include <qpe/global.h> | ||
8 | #endif | ||
9 | |||
6 | #include "CExpander.h" | 10 | #include "CExpander.h" |
7 | 11 | ||
8 | class Text: public CExpander { | 12 | class Text: public CExpander { |
@@ -31,11 +35,16 @@ public: | |||
31 | if (sustime != ((time_t)-1)) | 35 | if (sustime != ((time_t)-1)) |
32 | { | 36 | { |
33 | int delay = time(NULL) - sustime; | 37 | int delay = time(NULL) - sustime; |
34 | if (delay < 10) sleep(10-delay); | 38 | if (delay < 10) |
39 | { | ||
40 | Global::statusMessage("Stalling"); | ||
41 | sleep(10-delay); | ||
42 | } | ||
35 | } | 43 | } |
36 | file = gzopen(fname, "rb"); | 44 | file = gzopen(fname, "rb"); |
37 | for (int i = 0; file == NULL && i < 5; i++) | 45 | for (int i = 0; file == NULL && i < 5; i++) |
38 | { | 46 | { |
47 | Global::statusMessage("Stalling"); | ||
39 | sleep(5); | 48 | sleep(5); |
40 | file = gzopen(fname, "rb"); | 49 | file = gzopen(fname, "rb"); |
41 | } | 50 | } |
diff --git a/noncore/apps/opie-reader/arith.h b/noncore/apps/opie-reader/arith.h index 19ca646..59b2ea9 100644 --- a/noncore/apps/opie-reader/arith.h +++ b/noncore/apps/opie-reader/arith.h | |||
@@ -9,17 +9,15 @@ | |||
9 | #include "utypes.h" | 9 | #include "utypes.h" |
10 | #include <stdio.h> | 10 | #include <stdio.h> |
11 | 11 | ||
12 | class ppm_expander; | ||
13 | |||
12 | class PPM_ReadBuf | 14 | class PPM_ReadBuf |
13 | { | 15 | { |
14 | FILE *my_file_in; | 16 | FILE *my_file_in; |
17 | ppm_expander* parent; | ||
15 | public: | 18 | public: |
16 | PPM_ReadBuf(FILE* f) : my_file_in(f) {} | 19 | PPM_ReadBuf(FILE* f, ppm_expander* _parent) : my_file_in(f), parent(_parent) {} |
17 | UINT readbuf(UCHAR *buf,UINT len) | 20 | UINT readbuf(UCHAR *buf,UINT len); |
18 | { | ||
19 | UINT len1; | ||
20 | len1=fread(buf,1,len,my_file_in); | ||
21 | return len1; | ||
22 | } | ||
23 | }; | 21 | }; |
24 | 22 | ||
25 | class ArithClass | 23 | class ArithClass |
diff --git a/noncore/apps/opie-reader/arrierego.cpp b/noncore/apps/opie-reader/arrierego.cpp new file mode 100644 index 0000000..be2a3fa --- a/dev/null +++ b/noncore/apps/opie-reader/arrierego.cpp | |||
@@ -0,0 +1,188 @@ | |||
1 | #ifdef USENEF | ||
2 | #include <qimage.h> | ||
3 | #include "arrierego.h" | ||
4 | |||
5 | struct CArriere_dataRecord | ||
6 | { | ||
7 | UInt16 uid; | ||
8 | UInt16 nParagraphs; | ||
9 | UInt32 size; | ||
10 | UInt8 type; | ||
11 | UInt8 reserved; | ||
12 | }; | ||
13 | |||
14 | int CArriere::HeaderSize() | ||
15 | { | ||
16 | return 10; | ||
17 | } | ||
18 | |||
19 | void CArriere::GetHeader(UInt16& uid, UInt16& nParagraphs, UInt32& size, UInt8& type, UInt8& reserved) | ||
20 | { | ||
21 | CArriere_dataRecord thishdr; | ||
22 | unsuspend(); | ||
23 | fread(&thishdr, 1, HeaderSize(), fin); | ||
24 | uid = ntohs(thishdr.uid); | ||
25 | nParagraphs = ntohs(thishdr.nParagraphs); | ||
26 | size = ntohl(thishdr.size); | ||
27 | type = thishdr.type; | ||
28 | reserved = thishdr.reserved; | ||
29 | // qDebug("UID:%u Paras:%u Size:%u Type:%u Reserved:%u", uid, nParagraphs, size, (unsigned int)type, (unsigned int)reserved); | ||
30 | // for (int i = 0; i < sizeof(thishdr); i++) | ||
31 | //printf("%d %x\n", i, (int)(((char *)(&thishdr))[i])); | ||
32 | } | ||
33 | |||
34 | bool CArriere::CorrectDecoder() | ||
35 | { | ||
36 | char * type = (char*)(&(head.type)); | ||
37 | for (int i = 0; i < 8; ++i) qDebug("%c", type[i]); | ||
38 | return (memcmp(&head.type, "ArriereG", 8) == 0); | ||
39 | } | ||
40 | |||
41 | int CArriere::bgetch() | ||
42 | { | ||
43 | int ch = EOF; | ||
44 | if (bufferpos >= buffercontent) | ||
45 | { | ||
46 | if (bufferrec >= ntohs(head.recordList.numRecords) - 1) | ||
47 | { | ||
48 | return EOF; | ||
49 | } | ||
50 | if (isEndOfSection(bufferrec)) | ||
51 | { | ||
52 | return EOF; | ||
53 | } | ||
54 | if (!expand(bufferrec+1)) | ||
55 | { | ||
56 | return EOF; | ||
57 | } | ||
58 | mystyle.unset(); | ||
59 | if (m_ParaOffsets[m_nextParaIndex] == 0) | ||
60 | { | ||
61 | while (m_ParaOffsets[m_nextParaIndex+1] == 0) | ||
62 | { | ||
63 | m_nextParaIndex++; | ||
64 | } | ||
65 | } | ||
66 | mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2); | ||
67 | } | ||
68 | if (bufferpos == m_nextPara) | ||
69 | { | ||
70 | while (bufferpos == m_nextPara) | ||
71 | { | ||
72 | m_nextParaIndex++; | ||
73 | if (m_nextParaIndex == m_nParas) | ||
74 | { | ||
75 | m_nextPara = -1; | ||
76 | } | ||
77 | else | ||
78 | { | ||
79 | m_nextPara += m_ParaOffsets[m_nextParaIndex]; | ||
80 | } | ||
81 | } | ||
82 | mystyle.unset(); | ||
83 | mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2); | ||
84 | if (m_lastBreak == locate()) | ||
85 | { | ||
86 | currentpos++; | ||
87 | ch = expandedtextbuffer[bufferpos++]; | ||
88 | } | ||
89 | else | ||
90 | { | ||
91 | ch = 10; | ||
92 | } | ||
93 | } | ||
94 | else | ||
95 | { | ||
96 | currentpos++; | ||
97 | ch = expandedtextbuffer[bufferpos++]; | ||
98 | } | ||
99 | return ch; | ||
100 | } | ||
101 | |||
102 | tchar CArriere::getch(bool fast) | ||
103 | { | ||
104 | mystyle.clearPicture(); | ||
105 | return getch_base(fast); | ||
106 | } | ||
107 | |||
108 | /* | ||
109 | void CArriere::setlink(QString& fn, const QString& wrd) | ||
110 | { | ||
111 | fn = wrd; | ||
112 | } | ||
113 | */ | ||
114 | |||
115 | QImage* CArriere::imagefromdata(UInt8* imgbuffer, UInt32 imgsize) | ||
116 | { | ||
117 | QByteArray arr; | ||
118 | arr.assign((const char*)imgbuffer, imgsize); | ||
119 | |||
120 | QImage* qimage = new QImage(arr); | ||
121 | |||
122 | return qimage; | ||
123 | } | ||
124 | |||
125 | void CArriere::start2endSection() | ||
126 | { | ||
127 | m_currentstart = NEFstartSection(); | ||
128 | m_currentend = NEFendSection(); | ||
129 | } | ||
130 | |||
131 | unsigned long CArriere::NEFstartSection() | ||
132 | { | ||
133 | //inefficient - Should calc start/end of section on entry to section? | ||
134 | UInt16 thishdr_uid, thishdr_nParagraphs; | ||
135 | UInt32 thishdr_size; | ||
136 | UInt8 thishdr_type, thishdr_reserved; | ||
137 | unsigned long textlength = currentpos-bufferpos; | ||
138 | for (UInt16 recptr = bufferrec-1; recptr >= 1; recptr--) | ||
139 | { | ||
140 | gotorecordnumber(recptr); | ||
141 | //qDebug("recptr:%u", recptr); | ||
142 | GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); | ||
143 | if (thishdr_type < 2) | ||
144 | { | ||
145 | if ((thishdr_reserved && continuation_bit) == 0) break; | ||
146 | textlength -= thishdr_size; | ||
147 | //qDebug("Textlength:%u, reserved:%u, recptr:%u", textlength, thishdr_reserved, recptr); | ||
148 | } | ||
149 | } | ||
150 | return textlength; | ||
151 | } | ||
152 | |||
153 | unsigned long CArriere::NEFendSection() | ||
154 | { | ||
155 | //inefficient - Should calc start/end of section on entry to section? | ||
156 | unsigned long textlength = currentpos-bufferpos+buffercontent; | ||
157 | gotorecordnumber(bufferrec); | ||
158 | UInt16 thishdr_uid, thishdr_nParagraphs; | ||
159 | UInt32 thishdr_size; | ||
160 | UInt8 thishdr_type, thishdr_reserved; | ||
161 | GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); | ||
162 | if ((thishdr_reserved && continuation_bit) != 0) | ||
163 | { | ||
164 | for (UInt16 recptr = bufferrec+1; recptr < ntohs(head.recordList.numRecords); recptr++) | ||
165 | { | ||
166 | gotorecordnumber(recptr); | ||
167 | UInt16 thishdr_uid, thishdr_nParagraphs; | ||
168 | UInt32 thishdr_size; | ||
169 | UInt8 thishdr_type, thishdr_reserved; | ||
170 | GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); | ||
171 | //qDebug("recptr %u bufferrec %u type %u m_reserved %u", recptr, bufferrec, typ | ||
172 | if (thishdr_type < 2) | ||
173 | { | ||
174 | textlength += thishdr_size; | ||
175 | if ((thishdr_reserved && continuation_bit) == 0) break; | ||
176 | } | ||
177 | } | ||
178 | } | ||
179 | return textlength; | ||
180 | } | ||
181 | |||
182 | #ifndef __STATIC | ||
183 | extern "C" | ||
184 | { | ||
185 | CExpander* newcodec() { return new CArriere; } | ||
186 | } | ||
187 | #endif | ||
188 | #endif | ||
diff --git a/noncore/apps/opie-reader/arrierego.h b/noncore/apps/opie-reader/arrierego.h new file mode 100644 index 0000000..5d6e2d0 --- a/dev/null +++ b/noncore/apps/opie-reader/arrierego.h | |||
@@ -0,0 +1,37 @@ | |||
1 | #if (!defined(__ARRIEREGO_H)) && defined(USENEF) | ||
2 | #define __ARRIEREGO_H | ||
3 | #include "plucker_base.h" | ||
4 | |||
5 | #ifdef LOCALPICTURES | ||
6 | class QScrollView; | ||
7 | class QWidget; | ||
8 | #endif | ||
9 | |||
10 | class CArriere : public CPlucker_base | ||
11 | { | ||
12 | protected: | ||
13 | bool isEndOfSection(int thisrec) | ||
14 | { | ||
15 | return !m_bufferisreserved; | ||
16 | } | ||
17 | unsigned long NEFstartSection(); | ||
18 | unsigned long NEFendSection(); | ||
19 | void setbuffersize() | ||
20 | { | ||
21 | compressedbuffersize = buffersize = 64*1024; | ||
22 | } | ||
23 | void GetHeader(UInt16&, UInt16&, UInt32&, UInt8&, UInt8&); | ||
24 | int HeaderSize(); | ||
25 | int bgetch(); | ||
26 | tchar getch(bool); | ||
27 | |||
28 | bool CorrectDecoder(); | ||
29 | // void setlink(QString&, const QString&); | ||
30 | QImage* imagefromdata(UInt8*, UInt32); | ||
31 | unsigned char m_reserved; | ||
32 | public: | ||
33 | void start2endSection(); | ||
34 | QString about() { return CPlucker_base::about()+QString("\nArriereGo codec (c) Tim Wentford"); } | ||
35 | }; | ||
36 | |||
37 | #endif | ||
diff --git a/noncore/apps/opie-reader/cbkmkselector.h b/noncore/apps/opie-reader/cbkmkselector.h index 42951e5..ec0c6e8 100644 --- a/noncore/apps/opie-reader/cbkmkselector.h +++ b/noncore/apps/opie-reader/cbkmkselector.h | |||
@@ -3,6 +3,16 @@ | |||
3 | #include <qpushbutton.h> | 3 | #include <qpushbutton.h> |
4 | #include <qlayout.h> | 4 | #include <qlayout.h> |
5 | 5 | ||
6 | class CBkmkSelectorItem : public QListBoxText | ||
7 | { | ||
8 | int m_ref; | ||
9 | public: | ||
10 | CBkmkSelectorItem(const QString& _t, int ref) : QListBoxText(_t), m_ref(ref) | ||
11 | { | ||
12 | } | ||
13 | int reference() { return m_ref; } | ||
14 | }; | ||
15 | |||
6 | class CBkmkSelector : public QWidget | 16 | class CBkmkSelector : public QWidget |
7 | { | 17 | { |
8 | 18 | ||
@@ -10,14 +20,40 @@ class CBkmkSelector : public QWidget | |||
10 | 20 | ||
11 | QListBox* bkmkselector; | 21 | QListBox* bkmkselector; |
12 | QPushButton* exitButton; | 22 | QPushButton* exitButton; |
13 | 23 | /* | |
24 | void keyPressEvent ( QKeyEvent * e ) | ||
25 | { | ||
26 | if ((e->key() == Key_Return) || (e->key() == Key_Space)) | ||
27 | { | ||
28 | emit selected(reinterpret_cast<CBkmkSelectorItem*>(bkmkselector->item(bkmkselector->currentItem()))->reference()); | ||
29 | e->accept(); | ||
30 | } | ||
31 | else | ||
32 | { | ||
33 | e->ignore(); | ||
34 | } | ||
35 | } | ||
36 | */ | ||
14 | signals: | 37 | signals: |
15 | void selected(int i); | 38 | void selected(int i); |
16 | void cancelled(); | 39 | void cancelled(); |
17 | private slots: | 40 | private slots: |
18 | void slotSelected(QListBoxItem* t) { emit selected(bkmkselector->index(t)); } | 41 | void slotSelected(QListBoxItem* t) |
19 | void slotSelected(int t) { emit selected(t); } | 42 | { |
43 | if (t != NULL) | ||
44 | { | ||
45 | emit selected(reinterpret_cast<CBkmkSelectorItem*>(t)->reference()); | ||
46 | } | ||
47 | } | ||
48 | //void slotSelected(int t) { emit selected(t); } | ||
20 | void slotCancel() { emit cancelled(); } | 49 | void slotCancel() { emit cancelled(); } |
50 | void slotSort() | ||
51 | { | ||
52 | bkmkselector->sort(); | ||
53 | #ifdef USEQPE | ||
54 | setCurrentItem(bkmkselector->currentItem()); | ||
55 | #endif | ||
56 | } | ||
21 | public: | 57 | public: |
22 | CBkmkSelector( QWidget *parent=0, const char *name=0, WFlags f = 0) : | 58 | CBkmkSelector( QWidget *parent=0, const char *name=0, WFlags f = 0) : |
23 | QWidget(parent, name, f) | 59 | QWidget(parent, name, f) |
@@ -27,17 +63,27 @@ public: | |||
27 | // setFont( f ); | 63 | // setFont( f ); |
28 | 64 | ||
29 | QVBoxLayout* grid = new QVBoxLayout(this); | 65 | QVBoxLayout* grid = new QVBoxLayout(this); |
30 | bkmkselector = new QListBox(this, "Bookmarks"); | 66 | QHBoxLayout* hgrid = new QHBoxLayout(); |
31 | exitButton = new QPushButton("Cancel", this); | 67 | bkmkselector = new QListBox(this, tr("Bookmarks")); |
32 | connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( slotSelected(int) ) ); | 68 | QPushButton* _sort = new QPushButton(tr("Sort"), this); |
69 | connect(_sort, SIGNAL(clicked()), this, SLOT( slotSort() ) ); | ||
70 | exitButton = new QPushButton(tr("Cancel"), this); | ||
71 | // connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( slotSelected(int) ) ); | ||
33 | connect(bkmkselector, SIGNAL( clicked(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) ); | 72 | connect(bkmkselector, SIGNAL( clicked(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) ); |
73 | connect(bkmkselector, SIGNAL( returnPressed(QListBoxItem*) ), this, SLOT( slotSelected(QListBoxItem*) ) ); | ||
34 | connect(exitButton, SIGNAL( clicked() ), this, SLOT( slotCancel() ) ); | 74 | connect(exitButton, SIGNAL( clicked() ), this, SLOT( slotCancel() ) ); |
35 | grid->addWidget(bkmkselector,1); | 75 | grid->addWidget(bkmkselector,1); |
36 | grid->addWidget(exitButton); | 76 | grid->addLayout(hgrid); |
77 | hgrid->addWidget(_sort); | ||
78 | hgrid->addWidget(exitButton); | ||
37 | } | 79 | } |
38 | void clear() { bkmkselector->clear(); } | 80 | void clear() { bkmkselector->clear(); } |
39 | void insertItem(const QString& item) { bkmkselector->insertItem(item); } | 81 | void insertItem(const QString& _item, int ref) |
82 | { | ||
83 | CBkmkSelectorItem* item = new CBkmkSelectorItem(_item, ref); | ||
84 | bkmkselector->insertItem(item); | ||
85 | } | ||
40 | QString text(int index) const { return bkmkselector->text(index); } | 86 | QString text(int index) const { return bkmkselector->text(index); } |
41 | void setText(const QString& _l) { exitButton->setText(_l); } | 87 | void setText(const QString& _l) { exitButton->setText(_l); } |
88 | void setCurrentItem(int _i) { bkmkselector->setCurrentItem(_i); } | ||
42 | }; | 89 | }; |
43 | |||
diff --git a/noncore/apps/opie-reader/config.in b/noncore/apps/opie-reader/config.in index 9f80a93..04ff2f1 100644 --- a/noncore/apps/opie-reader/config.in +++ b/noncore/apps/opie-reader/config.in | |||
@@ -2,3 +2,7 @@ | |||
2 | boolean "opie-reader (E-Text reader)" | 2 | boolean "opie-reader (E-Text reader)" |
3 | default "y" | 3 | default "y" |
4 | depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBOPIE2UI | 4 | depends ( LIBQPE || LIBQPE-X11 ) && LIBOPIE2CORE && LIBOPIE2UI |
5 | |||
6 | source noncore/apps/opie-reader/FliteDyn/config.in | ||
7 | source noncore/apps/opie-reader/FliteDyn16/config.in | ||
8 | |||
diff --git a/noncore/apps/opie-reader/decompress.cpp b/noncore/apps/opie-reader/decompress.cpp new file mode 100644 index 0000000..9bfec49 --- a/dev/null +++ b/noncore/apps/opie-reader/decompress.cpp | |||
@@ -0,0 +1,95 @@ | |||
1 | #include <string.h> | ||
2 | #include "decompress.h" | ||
3 | #include <zlib.h> | ||
4 | #include <stdlib.h> | ||
5 | |||
6 | size_t UnZip(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize) | ||
7 | { | ||
8 | z_stream zstream; | ||
9 | memset(&zstream,sizeof(zstream),0); | ||
10 | zstream.next_in = compressedbuffer; | ||
11 | zstream.next_out = tgtbuffer; | ||
12 | zstream.avail_out = bsize; | ||
13 | zstream.avail_in = reclen; | ||
14 | |||
15 | int keylen = 0; | ||
16 | |||
17 | zstream.zalloc = Z_NULL; | ||
18 | zstream.zfree = Z_NULL; | ||
19 | zstream.opaque = Z_NULL; | ||
20 | |||
21 | // printf("Initialising\n"); | ||
22 | |||
23 | inflateInit(&zstream); | ||
24 | int err = 0; | ||
25 | do { | ||
26 | if ( zstream.avail_in == 0 && 0 < keylen ) { | ||
27 | zstream.next_in = compressedbuffer + keylen; | ||
28 | zstream.avail_in = reclen - keylen; | ||
29 | keylen = 0; | ||
30 | } | ||
31 | zstream.next_out = tgtbuffer; | ||
32 | zstream.avail_out = bsize; | ||
33 | |||
34 | err = inflate( &zstream, Z_SYNC_FLUSH ); | ||
35 | |||
36 | ////qDebug("err:%d - %u", err, zstream.avail_in); | ||
37 | |||
38 | } while ( err == Z_OK ); | ||
39 | |||
40 | inflateEnd(&zstream); | ||
41 | return zstream.total_out; | ||
42 | } | ||
43 | |||
44 | #if defined(__STATIC) && defined(USENEF) | ||
45 | #include "Model.h" | ||
46 | size_t (*getdecompressor(char* _s))(UInt8*, size_t, UInt8*, size_t) | ||
47 | { | ||
48 | if (strcmp(_s, "PluckerDecompress3") == 0) | ||
49 | { | ||
50 | return PluckerDecompress3; | ||
51 | } | ||
52 | if (strcmp(_s, "PluckerDecompress4") == 0) | ||
53 | { | ||
54 | return PluckerDecompress4; | ||
55 | } | ||
56 | if (strcmp(_s, "RebDecompress") == 0) | ||
57 | { | ||
58 | return RebDecompress; | ||
59 | } | ||
60 | return NULL; | ||
61 | } | ||
62 | #else | ||
63 | |||
64 | #include "qfileinfo.h" | ||
65 | |||
66 | #include <dlfcn.h> | ||
67 | |||
68 | size_t (*getdecompressor(char* _s))(UInt8*, size_t, UInt8*, size_t) | ||
69 | { | ||
70 | #ifdef USEQPE | ||
71 | #ifdef OPIE | ||
72 | QString codecpath(getenv("OPIEDIR")); | ||
73 | #else | ||
74 | QString codecpath(getenv("QTDIR")); | ||
75 | #endif | ||
76 | codecpath += "/plugins/reader/support/libpluckerdecompress.so"; | ||
77 | #else | ||
78 | QString codecpath(getenv("READERDIR")); | ||
79 | codecpath += "/support/libpluckerdecompress.so"; | ||
80 | #endif | ||
81 | qDebug("Codec:%s", (const char*)codecpath); | ||
82 | if (QFile::exists(codecpath)) | ||
83 | { | ||
84 | qDebug("Codec:%s", (const char*)codecpath); | ||
85 | void* handle = dlopen(codecpath, RTLD_LAZY); | ||
86 | if (handle == 0) | ||
87 | { | ||
88 | qDebug("Can't find codec:%s", dlerror()); | ||
89 | return NULL; | ||
90 | } | ||
91 | return (size_t (*)(UInt8*, size_t, UInt8*, size_t))dlsym(handle, _s); | ||
92 | } | ||
93 | return NULL; | ||
94 | } | ||
95 | #endif | ||
diff --git a/noncore/apps/opie-reader/decompress.h b/noncore/apps/opie-reader/decompress.h new file mode 100644 index 0000000..400685f --- a/dev/null +++ b/noncore/apps/opie-reader/decompress.h | |||
@@ -0,0 +1,5 @@ | |||
1 | #include "mytypes.h" | ||
2 | |||
3 | size_t UnZip(UInt8* compressedbuffer,size_t reclen,UInt8* tgtbuffer,size_t bsize); | ||
4 | |||
5 | size_t (*getdecompressor(char* _s))(UInt8*, size_t, UInt8*, size_t); | ||
diff --git a/noncore/apps/opie-reader/ebookcodec.h b/noncore/apps/opie-reader/ebookcodec.h index f6e2daf..4229fb9 100644 --- a/noncore/apps/opie-reader/ebookcodec.h +++ b/noncore/apps/opie-reader/ebookcodec.h | |||
@@ -7,8 +7,6 @@ | |||
7 | #include <qpe/global.h> | 7 | #include <qpe/global.h> |
8 | #endif | 8 | #endif |
9 | 9 | ||
10 | #include "util.h" | ||
11 | |||
12 | #ifndef __STATIC | 10 | #ifndef __STATIC |
13 | #include <dlfcn.h> | 11 | #include <dlfcn.h> |
14 | class ebookcodec : public CExpander_Interface | 12 | class ebookcodec : public CExpander_Interface |
@@ -17,13 +15,24 @@ class ebookcodec : public CExpander_Interface | |||
17 | void *handle; | 15 | void *handle; |
18 | int status; | 16 | int status; |
19 | public: | 17 | public: |
18 | QString getTableAsHtml(unsigned long loc) { return codec->getTableAsHtml(loc); } | ||
20 | QString about() | 19 | QString about() |
21 | { | 20 | { |
22 | return QString("Plug-in ebook codec interface (c) Tim Wentford\n")+codec->about(); | 21 | return QString("Plug-in ebook codec interface (c) Tim Wentford\n")+codec->about(); |
23 | } | 22 | } |
24 | ebookcodec(const QString& _s) : codec(NULL), handle(NULL), status(0) | 23 | ebookcodec(const QString& _s) : codec(NULL), handle(NULL), status(0) |
25 | { | 24 | { |
26 | QString codecpath(QTReaderUtil::getPluginPath()); | 25 | #ifdef USEQPE |
26 | #ifdef OPIE | ||
27 | QString codecpath(getenv("OPIEDIR")); | ||
28 | #else | ||
29 | QString codecpath(getenv("QTDIR")); | ||
30 | #endif | ||
31 | codecpath += "/plugins/reader/codecs/"; | ||
32 | #else | ||
33 | QString codecpath(getenv("READERDIR")); | ||
34 | codecpath += "/codecs/"; | ||
35 | #endif | ||
27 | codecpath += _s; | 36 | codecpath += _s; |
28 | if (QFile::exists(codecpath)) | 37 | if (QFile::exists(codecpath)) |
29 | { | 38 | { |
@@ -113,6 +122,10 @@ class ebookcodec : public CExpander_Interface | |||
113 | } | 122 | } |
114 | int getwidth() { return codec->getwidth(); } | 123 | int getwidth() { return codec->getwidth(); } |
115 | QImage* getPicture(const QString& href) { return codec->getPicture(href); } | 124 | QImage* getPicture(const QString& href) { return codec->getPicture(href); } |
116 | bool getFile(const QString& href) { return codec->getFile(href); } | 125 | bool getFile(const QString& href, const QString& nm) { return codec->getFile(href, nm); } |
126 | bool findanchor(const QString& nm) | ||
127 | { | ||
128 | return codec->findanchor(nm); | ||
129 | } | ||
117 | }; | 130 | }; |
118 | #endif | 131 | #endif |
diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp index 2291c85..c8c371a 100644 --- a/noncore/apps/opie-reader/fileBrowser.cpp +++ b/noncore/apps/opie-reader/fileBrowser.cpp | |||
@@ -55,7 +55,7 @@ fileBrowser::fileBrowser( bool allownew, QWidget* parent, const char* name, boo | |||
55 | ListView->addColumn( tr( "Size" ) ); | 55 | ListView->addColumn( tr( "Size" ) ); |
56 | ListView->setSelectionMode(QListView::Single); | 56 | ListView->setSelectionMode(QListView::Single); |
57 | ListView->setAllColumnsShowFocus( TRUE ); | 57 | ListView->setAllColumnsShowFocus( TRUE ); |
58 | ListView->setColumnWidthMode(0, QListView::Manual); | 58 | ListView->setColumnWidthMode(0, ((modal) ? QListView::Manual : QListView::Maximum)); |
59 | ListView->setColumnWidthMode(1, QListView::Manual); | 59 | ListView->setColumnWidthMode(1, QListView::Manual); |
60 | 60 | ||
61 | // signals and slots connections | 61 | // signals and slots connections |
diff --git a/noncore/apps/opie-reader/flitecmd.cpp b/noncore/apps/opie-reader/flitecmd.cpp new file mode 100644 index 0000000..bb7e303 --- a/dev/null +++ b/noncore/apps/opie-reader/flitecmd.cpp | |||
@@ -0,0 +1,43 @@ | |||
1 | #include <unistd.h> | ||
2 | #include <sys/types.h> | ||
3 | #include <sys/wait.h> | ||
4 | #include <errno.h> | ||
5 | #include "flitecmd.h" | ||
6 | |||
7 | void CFliteCmd::output(const QString& txt) | ||
8 | { | ||
9 | pid_t pid; | ||
10 | if ((pid = fork()) <0) | ||
11 | { | ||
12 | qDebug("No memory"); | ||
13 | } | ||
14 | else if (pid == 0) | ||
15 | { | ||
16 | execlp("flite", "flite", "-t", (const char*)txt, NULL); | ||
17 | _exit(127); | ||
18 | qDebug("Can't find flite"); | ||
19 | } | ||
20 | else | ||
21 | { | ||
22 | int status; | ||
23 | while (waitpid(pid, &status, 0) < 0) | ||
24 | { | ||
25 | if (errno != EINTR) | ||
26 | { | ||
27 | qDebug("Error from flite"); | ||
28 | break; | ||
29 | } | ||
30 | } | ||
31 | qDebug("flite status:%d", status); | ||
32 | } | ||
33 | } | ||
34 | |||
35 | QString CFliteCmd::about() | ||
36 | { | ||
37 | return QString("FliteCmd output codec (c) Tim Wentford\n"); | ||
38 | } | ||
39 | |||
40 | extern "C" | ||
41 | { | ||
42 | COutput* newcodec() { return new CFliteCmd; } | ||
43 | } | ||
diff --git a/noncore/apps/opie-reader/flitecmd.h b/noncore/apps/opie-reader/flitecmd.h new file mode 100644 index 0000000..10f9710 --- a/dev/null +++ b/noncore/apps/opie-reader/flitecmd.h | |||
@@ -0,0 +1,10 @@ | |||
1 | #include "outputcodec.h" | ||
2 | |||
3 | class CFliteCmd : public COutput | ||
4 | { | ||
5 | public: | ||
6 | CFliteCmd() {} | ||
7 | ~CFliteCmd() {} | ||
8 | QString about(); | ||
9 | void output(const QString& _o); | ||
10 | }; | ||
diff --git a/noncore/apps/opie-reader/flitedyn.cpp b/noncore/apps/opie-reader/flitedyn.cpp new file mode 100644 index 0000000..c268cd4 --- a/dev/null +++ b/noncore/apps/opie-reader/flitedyn.cpp | |||
@@ -0,0 +1,29 @@ | |||
1 | #include "flitedyn.h" | ||
2 | |||
3 | cst_voice *CFliteDyn::m_voice = NULL; | ||
4 | |||
5 | CFliteDyn::CFliteDyn() | ||
6 | { | ||
7 | if (m_voice == NULL) | ||
8 | { | ||
9 | qDebug("Constucting flite"); | ||
10 | flite_init(); | ||
11 | m_voice = register_cmu_us_kal(); | ||
12 | } | ||
13 | } | ||
14 | |||
15 | QString CFliteDyn::about() | ||
16 | { | ||
17 | return QString("FliteDyn output codec (c) Tim Wentford\n"); | ||
18 | } | ||
19 | |||
20 | void CFliteDyn::output(const QString& _o) | ||
21 | { | ||
22 | float tm = flite_text_to_speech((const char*)_o, m_voice, "play"); | ||
23 | qDebug("Produced %g seconds of speech", tm); | ||
24 | } | ||
25 | |||
26 | extern "C" | ||
27 | { | ||
28 | COutput* newcodec() { return new CFliteDyn; } | ||
29 | } | ||
diff --git a/noncore/apps/opie-reader/flitedyn.h b/noncore/apps/opie-reader/flitedyn.h new file mode 100644 index 0000000..4455048 --- a/dev/null +++ b/noncore/apps/opie-reader/flitedyn.h | |||
@@ -0,0 +1,16 @@ | |||
1 | #include "outputcodec.h" | ||
2 | extern "C" | ||
3 | { | ||
4 | #include <flite.h> | ||
5 | cst_voice *register_cmu_us_kal(); | ||
6 | } | ||
7 | |||
8 | class CFliteDyn : public COutput | ||
9 | { | ||
10 | static cst_voice *m_voice; | ||
11 | public: | ||
12 | CFliteDyn(); | ||
13 | ~CFliteDyn() {} | ||
14 | QString about(); | ||
15 | void output(const QString& _o); | ||
16 | }; | ||
diff --git a/noncore/apps/opie-reader/iSilo.cpp b/noncore/apps/opie-reader/iSilo.cpp index 5f14b96..1f727fe 100644 --- a/noncore/apps/opie-reader/iSilo.cpp +++ b/noncore/apps/opie-reader/iSilo.cpp | |||
@@ -294,6 +294,7 @@ u_int32_t iSilo::get_bits(int num) { | |||
294 | 294 | ||
295 | for (i = 0; i < num; i++) { | 295 | for (i = 0; i < num; i++) { |
296 | if (pos == 0) { | 296 | if (pos == 0) { |
297 | unsuspend(); | ||
297 | r = fread(buf, sizeof(u_int32_t), 256, fin); | 298 | r = fread(buf, sizeof(u_int32_t), 256, fin); |
298 | if (r <= 0) { | 299 | if (r <= 0) { |
299 | qDebug("ERROR: Unexpected end of file"); | 300 | qDebug("ERROR: Unexpected end of file"); |
diff --git a/noncore/apps/opie-reader/linktype.h b/noncore/apps/opie-reader/linktype.h index 23c24ac..a23d345 100644 --- a/noncore/apps/opie-reader/linktype.h +++ b/noncore/apps/opie-reader/linktype.h | |||
@@ -2,6 +2,6 @@ | |||
2 | #define __LINKTYPE_H | 2 | #define __LINKTYPE_H |
3 | 3 | ||
4 | typedef unsigned int linkType; | 4 | typedef unsigned int linkType; |
5 | const linkType eNone = 0, eLink = 1, ePicture = 2, eFile = 4; | 5 | const linkType eNone = 0, eLink = 1, ePicture = 2, eFile = 4, eTable = 8; |
6 | 6 | ||
7 | #endif | 7 | #endif |
diff --git a/noncore/apps/opie-reader/main.cpp b/noncore/apps/opie-reader/main.cpp index af276da..2be6045 100644 --- a/noncore/apps/opie-reader/main.cpp +++ b/noncore/apps/opie-reader/main.cpp | |||
@@ -1,3 +1,4 @@ | |||
1 | |||
1 | #ifdef USEQPE | 2 | #ifdef USEQPE |
2 | #include <qpe/qpeapplication.h> | 3 | #include <qpe/qpeapplication.h> |
3 | #else | 4 | #else |
diff --git a/noncore/apps/opie-reader/mytypes.h b/noncore/apps/opie-reader/mytypes.h new file mode 100644 index 0000000..ea60db3 --- a/dev/null +++ b/noncore/apps/opie-reader/mytypes.h | |||
@@ -0,0 +1,8 @@ | |||
1 | #ifndef __MYTYPES_H__ | ||
2 | #define __MYTYPES_H__ | ||
3 | typedef unsigned char UInt8; | ||
4 | typedef unsigned short UInt16; | ||
5 | typedef signed short Int16; | ||
6 | typedef unsigned long UInt32; | ||
7 | #endif | ||
8 | |||
diff --git a/noncore/apps/opie-reader/opie-reader.pro b/noncore/apps/opie-reader/opie-reader.pro index 170f7fa..47980e1 100644 --- a/noncore/apps/opie-reader/opie-reader.pro +++ b/noncore/apps/opie-reader/opie-reader.pro | |||
@@ -9,8 +9,16 @@ SUBDIRS = pluckerbaselib \ | |||
9 | WeaselCodec \ | 9 | WeaselCodec \ |
10 | iSiloCodec \ | 10 | iSiloCodec \ |
11 | ppmsCodec \ | 11 | ppmsCodec \ |
12 | FliteCmd \ | ||
13 | pluckerdecompress \ | ||
14 | ArriereCodec \ | ||
15 | RebCodec \ | ||
12 | reader | 16 | reader |
13 | 17 | ||
18 | # these are added only built if enabled in "make menuconfig" | ||
19 | # FliteDyn | ||
20 | # FliteDyn16 | ||
21 | |||
14 | include( $(OPIEDIR)/include.pro ) | 22 | include( $(OPIEDIR)/include.pro ) |
15 | 23 | ||
16 | 24 | ||
diff --git a/noncore/apps/opie-reader/outputcodec.h b/noncore/apps/opie-reader/outputcodec.h new file mode 100644 index 0000000..727575c --- a/dev/null +++ b/noncore/apps/opie-reader/outputcodec.h | |||
@@ -0,0 +1,84 @@ | |||
1 | #include <stdlib.h> | ||
2 | #include <qfileinfo.h> | ||
3 | #include <qdir.h> | ||
4 | |||
5 | #ifdef USEQPE | ||
6 | #include <qpe/global.h> | ||
7 | #endif | ||
8 | |||
9 | class COutput | ||
10 | { | ||
11 | public: | ||
12 | virtual ~COutput() {} | ||
13 | virtual void output(const QString&) = 0; | ||
14 | virtual QString about() = 0; | ||
15 | }; | ||
16 | |||
17 | #ifndef __STATIC | ||
18 | #include <dlfcn.h> | ||
19 | class outputcodec : public COutput | ||
20 | { | ||
21 | COutput *codec; | ||
22 | void *handle; | ||
23 | int status; | ||
24 | public: | ||
25 | void output(const QString& q) { codec->output(q); } | ||
26 | QString about() | ||
27 | { | ||
28 | return QString("Plug-in output codec interface (c) Tim Wentford\n")+codec->about(); | ||
29 | } | ||
30 | outputcodec(const QString& _s) : codec(NULL), handle(NULL), status(-1) | ||
31 | { | ||
32 | #ifdef USEQPE | ||
33 | #ifdef OPIE | ||
34 | QString codecpath(getenv("OPIEDIR")); | ||
35 | #else | ||
36 | QString codecpath(getenv("QTDIR")); | ||
37 | #endif | ||
38 | codecpath += "/plugins/reader/outcodecs/lib"; | ||
39 | #else | ||
40 | QString codecpath(getenv("READERDIR")); | ||
41 | codecpath += "/outcodecs/lib"; | ||
42 | #endif | ||
43 | codecpath += _s; | ||
44 | codecpath += ".so"; | ||
45 | if (QFile::exists(codecpath)) | ||
46 | { | ||
47 | qDebug("Codec:%s", (const char*)codecpath); | ||
48 | handle = dlopen(codecpath, RTLD_LAZY); | ||
49 | if (handle == 0) | ||
50 | { | ||
51 | qDebug("Can't find codec:%s", dlerror()); | ||
52 | status = -10; | ||
53 | return; | ||
54 | } | ||
55 | COutput* (*newcodec)(); | ||
56 | newcodec = (COutput* (*)())dlsym(handle, "newcodec"); | ||
57 | if (newcodec == NULL) | ||
58 | { | ||
59 | qDebug("Can't find newcodec"); | ||
60 | status = -20; | ||
61 | return; | ||
62 | } | ||
63 | codec = (*newcodec)(); | ||
64 | status = 0; | ||
65 | } | ||
66 | else | ||
67 | { | ||
68 | qDebug("Can't find codec:%s", (const char*)codecpath); | ||
69 | } | ||
70 | if (codec == NULL) | ||
71 | { | ||
72 | qDebug("Can't do newcodec"); | ||
73 | status = -30; | ||
74 | return; | ||
75 | } | ||
76 | } | ||
77 | virtual ~outputcodec() | ||
78 | { | ||
79 | if (codec != NULL) delete codec; | ||
80 | if (handle != NULL) dlclose(handle); | ||
81 | } | ||
82 | int getStatus() { return status; } | ||
83 | }; | ||
84 | #endif | ||
diff --git a/noncore/apps/opie-reader/pdb.cpp b/noncore/apps/opie-reader/pdb.cpp index 6719af4..a13b33d 100644 --- a/noncore/apps/opie-reader/pdb.cpp +++ b/noncore/apps/opie-reader/pdb.cpp | |||
@@ -3,7 +3,6 @@ | |||
3 | #include <winsock2.h> | 3 | #include <winsock2.h> |
4 | #endif | 4 | #endif |
5 | 5 | ||
6 | |||
7 | #ifdef USEQPE | 6 | #ifdef USEQPE |
8 | void Cpdb::suspend() | 7 | void Cpdb::suspend() |
9 | { | 8 | { |
@@ -37,6 +36,7 @@ size_t Cpdb::recordpos(int n) | |||
37 | { | 36 | { |
38 | size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16); | 37 | size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16); |
39 | dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n; | 38 | dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n; |
39 | unsuspend(); | ||
40 | fseek(fin, dataoffset, SEEK_SET); | 40 | fseek(fin, dataoffset, SEEK_SET); |
41 | RecordListType hdr; | 41 | RecordListType hdr; |
42 | fread(&hdr, 1, sizeof(hdr), fin); | 42 | fread(&hdr, 1, sizeof(hdr), fin); |
@@ -52,6 +52,7 @@ size_t Cpdb::recordlength(int n) | |||
52 | 52 | ||
53 | void Cpdb::gotorecordnumber(int n) | 53 | void Cpdb::gotorecordnumber(int n) |
54 | { | 54 | { |
55 | unsuspend(); | ||
55 | fseek(fin, recordpos(n), SEEK_SET); | 56 | fseek(fin, recordpos(n), SEEK_SET); |
56 | } | 57 | } |
57 | 58 | ||
@@ -82,8 +83,8 @@ bool Cpdb::openpdbfile(const char *src) | |||
82 | 83 | ||
83 | fread(&head, 1, sizeof(head), fin); | 84 | fread(&head, 1, sizeof(head), fin); |
84 | 85 | ||
85 | qDebug("Database name:%s", head.name); | 86 | //qDebug("Database name:%s", head.name); |
86 | qDebug("Total number of records:%u", ntohs(head.recordList.numRecords)); | 87 | //qDebug("Total number of records:%u", ntohs(head.recordList.numRecords)); |
87 | 88 | ||
88 | return true; | 89 | return true; |
89 | } | 90 | } |
diff --git a/noncore/apps/opie-reader/pdb.h b/noncore/apps/opie-reader/pdb.h index 7458919..a0abd1b 100644 --- a/noncore/apps/opie-reader/pdb.h +++ b/noncore/apps/opie-reader/pdb.h | |||
@@ -15,13 +15,11 @@ | |||
15 | #include <netinet/in.h> | 15 | #include <netinet/in.h> |
16 | #endif | 16 | #endif |
17 | #include <stdio.h> | 17 | #include <stdio.h> |
18 | |||
18 | #include "CExpander.h" | 19 | #include "CExpander.h" |
19 | 20 | ||
20 | /* Normal Palm typedefs */ | 21 | /* Normal Palm typedefs */ |
21 | typedef unsigned char UInt8; | 22 | #include "mytypes.h" |
22 | typedef unsigned short UInt16; | ||
23 | typedef signed short Int16; | ||
24 | typedef unsigned long UInt32; | ||
25 | typedef UInt32 LocalID; | 23 | typedef UInt32 LocalID; |
26 | 24 | ||
27 | /* Max length of DB name */ | 25 | /* Max length of DB name */ |
@@ -92,6 +90,9 @@ class Cpdb : public CExpander | |||
92 | #ifdef USEQPE | 90 | #ifdef USEQPE |
93 | void suspend(); | 91 | void suspend(); |
94 | void unsuspend(); | 92 | void unsuspend(); |
93 | #else | ||
94 | void suspend() {} | ||
95 | void unsuspend() {} | ||
95 | #endif | 96 | #endif |
96 | public: | 97 | public: |
97 | virtual void sizes(unsigned long& _file, unsigned long& _text) = 0; | 98 | virtual void sizes(unsigned long& _file, unsigned long& _text) = 0; |
diff --git a/noncore/apps/opie-reader/plucker_base.cpp b/noncore/apps/opie-reader/plucker_base.cpp index d7d538f..51c7fa7 100644 --- a/noncore/apps/opie-reader/plucker_base.cpp +++ b/noncore/apps/opie-reader/plucker_base.cpp | |||
@@ -1,4 +1,3 @@ | |||
1 | #include "usenef.h" | ||
2 | #include <stdio.h> | 1 | #include <stdio.h> |
3 | #include <string.h> | 2 | #include <string.h> |
4 | #include <qmessagebox.h> | 3 | #include <qmessagebox.h> |
@@ -23,7 +22,7 @@ | |||
23 | #include "plucker_base.h" | 22 | #include "plucker_base.h" |
24 | #include "Aportis.h" | 23 | #include "Aportis.h" |
25 | #include "hrule.h" | 24 | #include "hrule.h" |
26 | #include "util.h" | 25 | #include "decompress.h" |
27 | 26 | ||
28 | const UInt8 CPlucker_base::continuation_bit = 1; | 27 | const UInt8 CPlucker_base::continuation_bit = 1; |
29 | 28 | ||
@@ -42,7 +41,8 @@ CPlucker_base::CPlucker_base() : | |||
42 | 41 | ||
43 | void CPlucker_base::Expand(UInt32 reclen, UInt8 type, UInt8* buffer, UInt32 buffersize) | 42 | void CPlucker_base::Expand(UInt32 reclen, UInt8 type, UInt8* buffer, UInt32 buffersize) |
44 | { | 43 | { |
45 | if (type%2 == 0) | 44 | unsuspend(); |
45 | if ((type%2 == 0) && (type != 14)) | ||
46 | { | 46 | { |
47 | fread(buffer, reclen, sizeof(char), fin); | 47 | fread(buffer, reclen, sizeof(char), fin); |
48 | } | 48 | } |
@@ -305,7 +305,7 @@ void CPlucker_base::locate(unsigned int n) | |||
305 | { | 305 | { |
306 | bs = 0; | 306 | bs = 0; |
307 | } | 307 | } |
308 | } while (locpos + bs <= n); | 308 | } while (locpos + bs < n); |
309 | 309 | ||
310 | // qDebug("Time(2): %u", clock()-start); | 310 | // qDebug("Time(2): %u", clock()-start); |
311 | /* | 311 | /* |
@@ -412,7 +412,7 @@ bool CPlucker_base::expand(int thisrec) | |||
412 | //qDebug("BC:%u, HS:%u", buffercontent, thishdr_size); | 412 | //qDebug("BC:%u, HS:%u", buffercontent, thishdr_size); |
413 | return true; | 413 | return true; |
414 | } | 414 | } |
415 | 415 | /* | |
416 | void CPlucker_base::UnZip(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize) | 416 | void CPlucker_base::UnZip(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize) |
417 | { | 417 | { |
418 | z_stream zstream; | 418 | z_stream zstream; |
@@ -449,8 +449,8 @@ void CPlucker_base::UnZip(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuff | |||
449 | 449 | ||
450 | inflateEnd(&zstream); | 450 | inflateEnd(&zstream); |
451 | } | 451 | } |
452 | 452 | */ | |
453 | void CPlucker_base::UnDoc(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize) | 453 | size_t CPlucker_base::UnDoc(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize) |
454 | { | 454 | { |
455 | // UInt16 headerSize; | 455 | // UInt16 headerSize; |
456 | UInt16 docSize; | 456 | UInt16 docSize; |
@@ -501,6 +501,7 @@ void CPlucker_base::UnDoc(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuff | |||
501 | } | 501 | } |
502 | k += bsize; | 502 | k += bsize; |
503 | } | 503 | } |
504 | return i; | ||
504 | } | 505 | } |
505 | 506 | ||
506 | void CPlucker_base::home() | 507 | void CPlucker_base::home() |
@@ -1056,9 +1057,163 @@ linkType CPlucker_base::hyperlink(unsigned int n, unsigned int offset, QString& | |||
1056 | } | 1057 | } |
1057 | return eLink; | 1058 | return eLink; |
1058 | } | 1059 | } |
1060 | QString CPlucker_base::getTableAsHtml(unsigned long tgt) | ||
1061 | { | ||
1062 | qDebug("CPlucker_base::getTableAsHtml:%u", tgt); | ||
1063 | size_t reclen; | ||
1064 | UInt16 thisrec = finduid(tgt); | ||
1065 | qDebug("getimg:Found %u from uid:%u", thisrec, tgt); | ||
1066 | reclen = recordlength(thisrec); | ||
1067 | gotorecordnumber(thisrec); | ||
1068 | UInt16 thishdr_uid, thishdr_nParagraphs; | ||
1069 | UInt32 thishdr_size; | ||
1070 | UInt8 thishdr_type, thishdr_reserved; | ||
1071 | GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved); | ||
1072 | qDebug("Found a table of type:%u", thishdr_type); | ||
1073 | reclen -= HeaderSize(); | ||
1074 | UInt32 imgsize = thishdr_size; | ||
1075 | UInt8* imgbuffer = new UInt8[imgsize]; | ||
1076 | Expand(reclen, thishdr_type, imgbuffer, imgsize); | ||
1077 | |||
1078 | QString ret; | ||
1079 | |||
1080 | UInt16 size, columns, rows; | ||
1081 | UInt8 depth, border; | ||
1082 | UInt32 borderColour, linkColour; | ||
1083 | UInt8* dp(imgbuffer); | ||
1084 | |||
1085 | memcpy(&size, dp, sizeof(size)); | ||
1086 | size = ntohs(size); | ||
1087 | dp += sizeof(size); | ||
1088 | memcpy(&columns, dp, sizeof(columns)); | ||
1089 | columns = ntohs(columns); | ||
1090 | dp += sizeof(columns); | ||
1091 | memcpy(&rows, dp, sizeof(rows)); | ||
1092 | rows = ntohs(rows); | ||
1093 | dp += sizeof(rows); | ||
1094 | qDebug("Rows:%u Cols:%u", rows, columns); | ||
1095 | |||
1096 | memcpy(&depth, dp, sizeof(depth)); | ||
1097 | dp += sizeof(depth); | ||
1098 | memcpy(&border, dp, sizeof(border)); | ||
1099 | dp += sizeof(border); | ||
1100 | |||
1101 | qDebug("Depth:%u, Border:%u", depth, border); | ||
1102 | |||
1103 | memcpy(&borderColour, dp, sizeof(borderColour)); | ||
1104 | dp += sizeof(borderColour); | ||
1105 | memcpy(&linkColour, dp, sizeof(linkColour)); | ||
1106 | dp += sizeof(linkColour); | ||
1107 | |||
1108 | qDebug("Colours: border:%x, link:%x", borderColour, linkColour); | ||
1109 | |||
1110 | if (border) | ||
1111 | { | ||
1112 | ret = "<table border>"; | ||
1113 | } | ||
1114 | else | ||
1115 | { | ||
1116 | ret = "<table>"; | ||
1117 | } | ||
1118 | bool firstrow = true; | ||
1119 | bool firstcol = true; | ||
1120 | while (dp < imgbuffer+imgsize) | ||
1121 | { | ||
1122 | UInt8 ch = *dp++; | ||
1123 | if (ch == 0x00) | ||
1124 | { | ||
1125 | ch = *dp++; | ||
1126 | if (ch == 0x90) | ||
1127 | { | ||
1128 | if (firstrow) | ||
1129 | { | ||
1130 | ret += "<tr>"; | ||
1131 | firstrow = false; | ||
1132 | firstcol = true; | ||
1133 | } | ||
1134 | else | ||
1135 | { | ||
1136 | ret += "</tr><tr>"; | ||
1137 | } | ||
1138 | } | ||
1139 | else if (ch == 0x97) | ||
1140 | { | ||
1141 | if (firstcol) | ||
1142 | { | ||
1143 | ret += "<td"; | ||
1144 | firstcol = false; | ||
1145 | } | ||
1146 | else | ||
1147 | { | ||
1148 | ret += "</td><td"; | ||
1149 | } | ||
1150 | UInt8 align; | ||
1151 | UInt16 imgid; | ||
1152 | UInt8 cols, rows; | ||
1153 | UInt16 len; | ||
1154 | memcpy(&align, dp, sizeof(align)); | ||
1155 | dp += sizeof(align); | ||
1156 | memcpy(&imgid, dp, sizeof(imgid)); | ||
1157 | dp += sizeof(imgid); | ||
1158 | imgid = ntohs(imgid); | ||
1159 | memcpy(&cols, dp, sizeof(cols)); | ||
1160 | dp += sizeof(cols); | ||
1161 | memcpy(&rows, dp, sizeof(rows)); | ||
1162 | dp += sizeof(rows); | ||
1163 | memcpy(&len, dp, sizeof(len)); | ||
1164 | dp += sizeof(len); | ||
1165 | len = ntohs(len); | ||
1166 | switch (align) | ||
1167 | { | ||
1168 | case 1: | ||
1169 | ret += " align=right"; | ||
1170 | break; | ||
1171 | case 2: | ||
1172 | ret += " align=center"; | ||
1173 | break; | ||
1174 | case 3: | ||
1175 | ret += " align=justify"; | ||
1176 | break; | ||
1177 | case 0: | ||
1178 | break; | ||
1179 | default: | ||
1180 | qDebug("Unknown table cell alignment:%u", align); | ||
1181 | } | ||
1182 | if (cols != 1) | ||
1183 | { | ||
1184 | QString num; | ||
1185 | num.setNum(cols); | ||
1186 | ret += " colspan="; | ||
1187 | ret += num; | ||
1188 | } | ||
1189 | if (rows != 1) | ||
1190 | { | ||
1191 | QString num; | ||
1192 | num.setNum(rows); | ||
1193 | ret += " rowspan="; | ||
1194 | ret += num; | ||
1195 | } | ||
1196 | ret += ">"; | ||
1197 | } | ||
1198 | else | ||
1199 | { | ||
1200 | dp += (ch & 7); | ||
1201 | } | ||
1202 | } | ||
1203 | else | ||
1204 | { | ||
1205 | ret += QChar(ch); | ||
1206 | } | ||
1207 | } | ||
1208 | |||
1209 | ret += "</td></tr></table>"; | ||
1210 | delete [] imgbuffer; | ||
1211 | return ret; | ||
1212 | } | ||
1059 | 1213 | ||
1060 | tchar CPlucker_base::getch_base(bool fast) | 1214 | tchar CPlucker_base::getch_base(bool fast) |
1061 | { | 1215 | { |
1216 | mystyle.setTable(0xffffffff); | ||
1062 | int ch = bgetch(); | 1217 | int ch = bgetch(); |
1063 | while (ch == 0) | 1218 | while (ch == 0) |
1064 | { | 1219 | { |
@@ -1119,10 +1274,6 @@ tchar CPlucker_base::getch_base(bool fast) | |||
1119 | { | 1274 | { |
1120 | mystyle.setStrikethru(); | 1275 | mystyle.setStrikethru(); |
1121 | } | 1276 | } |
1122 | else | ||
1123 | { | ||
1124 | mystyle.setUnderline(); | ||
1125 | } | ||
1126 | mystyle.setOffset(m_offset); | 1277 | mystyle.setOffset(m_offset); |
1127 | m_offset = 0; | 1278 | m_offset = 0; |
1128 | ch = bgetch(); | 1279 | ch = bgetch(); |
@@ -1329,6 +1480,15 @@ tchar CPlucker_base::getch_base(bool fast) | |||
1329 | ch = bgetch(); | 1480 | ch = bgetch(); |
1330 | } | 1481 | } |
1331 | break; | 1482 | break; |
1483 | case 0x92: | ||
1484 | { | ||
1485 | ch = bgetch(); | ||
1486 | ch <<= 8; | ||
1487 | ch |= (tchar)bgetch(); | ||
1488 | mystyle.setTable(ch); | ||
1489 | ch = 0x16e5; | ||
1490 | } | ||
1491 | break; | ||
1332 | case 0x85: | 1492 | case 0x85: |
1333 | default: | 1493 | default: |
1334 | qDebug("Function:%x NOT IMPLEMENTED", ch); | 1494 | qDebug("Function:%x NOT IMPLEMENTED", ch); |
@@ -1357,52 +1517,12 @@ tchar CPlucker_base::getch_base(bool fast) | |||
1357 | return (ch == EOF) ? UEOF : ch; | 1517 | return (ch == EOF) ? UEOF : ch; |
1358 | } | 1518 | } |
1359 | 1519 | ||
1360 | #if defined(__STATIC) && defined(USENEF) | ||
1361 | #include "Model.h" | ||
1362 | void (*CPlucker_base::getdecompressor(const QString& _s))(UInt8*, size_t, UInt8*, size_t) | ||
1363 | { | ||
1364 | if (_s == "PluckerDecompress3") | ||
1365 | { | ||
1366 | return PluckerDecompress3; | ||
1367 | } | ||
1368 | if (_s == "PluckerDecompress4") | ||
1369 | { | ||
1370 | return PluckerDecompress4; | ||
1371 | } | ||
1372 | return NULL; | ||
1373 | } | ||
1374 | #else | ||
1375 | |||
1376 | #include "qfileinfo.h" | ||
1377 | |||
1378 | #include <dlfcn.h> | ||
1379 | |||
1380 | void (*CPlucker_base::getdecompressor(const QString& _s))(UInt8*, size_t, UInt8*, size_t) | ||
1381 | { | ||
1382 | QString codecpath(QTReaderUtil::getPluginPath("support")); | ||
1383 | codecpath += "/libpluckerdecompress.so"; | ||
1384 | qDebug("Codec:%s", (const char*)codecpath); | ||
1385 | if (QFile::exists(codecpath)) | ||
1386 | { | ||
1387 | qDebug("Codec:%s", (const char*)codecpath); | ||
1388 | void* handle = dlopen(codecpath, RTLD_LAZY); | ||
1389 | if (handle == 0) | ||
1390 | { | ||
1391 | qDebug("Can't find codec:%s", dlerror()); | ||
1392 | return NULL; | ||
1393 | } | ||
1394 | return (void (*)(UInt8*, size_t, UInt8*, size_t))dlsym(handle, _s); | ||
1395 | } | ||
1396 | return NULL; | ||
1397 | } | ||
1398 | #endif | ||
1399 | |||
1400 | QString CPlucker_base::about() | 1520 | QString CPlucker_base::about() |
1401 | { | 1521 | { |
1402 | QString abt = "Plucker base codec (c) Tim Wentford"; | 1522 | QString abt = "Plucker base codec (c) Tim Wentford"; |
1403 | if (m_decompress != UnDoc && m_decompress != UnZip) | 1523 | if (m_decompress != UnDoc && m_decompress != UnZip) |
1404 | { | 1524 | { |
1405 | abt += "\nSpecial decompression (c) Tim Wentford"; | 1525 | abt += "\nSpecial decompression (c) Tim Wentford (ppmd by Dmitry Shkarin"; |
1406 | } | 1526 | } |
1407 | return abt; | 1527 | return abt; |
1408 | } | 1528 | } |
diff --git a/noncore/apps/opie-reader/plucker_base.h b/noncore/apps/opie-reader/plucker_base.h index 8d74cc2..2b57986 100644 --- a/noncore/apps/opie-reader/plucker_base.h +++ b/noncore/apps/opie-reader/plucker_base.h | |||
@@ -66,11 +66,11 @@ protected: | |||
66 | bool m_bufferisreserved; | 66 | bool m_bufferisreserved; |
67 | size_t currentpos; | 67 | size_t currentpos; |
68 | bool expand(int); | 68 | bool expand(int); |
69 | static void UnZip(UInt8*, size_t, UInt8*, size_t); | 69 | //static void UnZip(UInt8*, size_t, UInt8*, size_t); |
70 | static void UnDoc(UInt8*, size_t, UInt8*, size_t); | 70 | static size_t UnDoc(UInt8*, size_t, UInt8*, size_t); |
71 | |||
72 | size_t (*m_decompress)(UInt8*, size_t, UInt8*, size_t); | ||
71 | 73 | ||
72 | void (*m_decompress)(UInt8*, size_t, UInt8*, size_t); | ||
73 | void (*getdecompressor(const QString& _s))(UInt8*, size_t, UInt8*, size_t); | ||
74 | #ifdef LOCALPICTURES | 74 | #ifdef LOCALPICTURES |
75 | void showimg(UInt16 tgt); | 75 | void showimg(UInt16 tgt); |
76 | #endif | 76 | #endif |
@@ -110,6 +110,7 @@ protected: | |||
110 | virtual bool CorrectDecoder() = 0; | 110 | virtual bool CorrectDecoder() = 0; |
111 | // virtual void setlink(QString&, const QString&) = 0; | 111 | // virtual void setlink(QString&, const QString&) = 0; |
112 | virtual QImage* imagefromdata(UInt8*, UInt32) = 0; | 112 | virtual QImage* imagefromdata(UInt8*, UInt32) = 0; |
113 | QString getTableAsHtml(unsigned long loc); | ||
113 | }; | 114 | }; |
114 | 115 | ||
115 | #endif | 116 | #endif |
diff --git a/noncore/apps/opie-reader/pluckerbaselib/pluckerbaselib.pro b/noncore/apps/opie-reader/pluckerbaselib/pluckerbaselib.pro index a66dc44..0212d84 100644 --- a/noncore/apps/opie-reader/pluckerbaselib/pluckerbaselib.pro +++ b/noncore/apps/opie-reader/pluckerbaselib/pluckerbaselib.pro | |||
@@ -5,7 +5,8 @@ CONFIG = qt warn_on release dll | |||
5 | HEADERS = pdb.h \ | 5 | HEADERS = pdb.h \ |
6 | util.h | 6 | util.h |
7 | 7 | ||
8 | SOURCES = plucker_base.cpp | 8 | SOURCES = plucker_base.cpp \ |
9 | decompress.cpp | ||
9 | 10 | ||
10 | INTERFACES= | 11 | INTERFACES= |
11 | DESTDIR = $(OPIEDIR)/lib | 12 | DESTDIR = $(OPIEDIR)/lib |
diff --git a/noncore/apps/opie-reader/pluckerdecompress/.cvsignore b/noncore/apps/opie-reader/pluckerdecompress/.cvsignore new file mode 100644 index 0000000..1810ee0 --- a/dev/null +++ b/noncore/apps/opie-reader/pluckerdecompress/.cvsignore | |||
@@ -0,0 +1,5 @@ | |||
1 | Makefile | ||
2 | config.in | ||
3 | moc_* | ||
4 | .moc | ||
5 | .obj | ||
diff --git a/noncore/apps/opie-reader/pluckerdecompress/pluckerdecompress.pro b/noncore/apps/opie-reader/pluckerdecompress/pluckerdecompress.pro new file mode 100644 index 0000000..c1b7686 --- a/dev/null +++ b/noncore/apps/opie-reader/pluckerdecompress/pluckerdecompress.pro | |||
@@ -0,0 +1,17 @@ | |||
1 | DEFINES += OPIE USEQPE | ||
2 | VPATH = .. | ||
3 | TEMPLATE= lib | ||
4 | CONFIG = qt warn_on release dll | ||
5 | HEADERS = CSource.h Model.h Coder.h SubAlloc.h | ||
6 | |||
7 | SOURCES = Model.cpp | ||
8 | |||
9 | |||
10 | INTERFACES= | ||
11 | DESTDIR = $(OPIEDIR)/plugins/reader/support | ||
12 | TARGET = pluckerdecompress | ||
13 | |||
14 | INCLUDEPATH+= $(OPIEDIR)/include | ||
15 | DEPENDPATH += $(OPIEDIR)/include | ||
16 | |||
17 | include( $(OPIEDIR)/include.pro ) | ||
diff --git a/noncore/apps/opie-reader/ppm_expander.cpp b/noncore/apps/opie-reader/ppm_expander.cpp index 2a4318b..61ef90e 100644 --- a/noncore/apps/opie-reader/ppm_expander.cpp +++ b/noncore/apps/opie-reader/ppm_expander.cpp | |||
@@ -38,7 +38,7 @@ ppm_expander::~ppm_expander() { | |||
38 | int ppm_expander::OpenFile(const char* infile) | 38 | int ppm_expander::OpenFile(const char* infile) |
39 | { | 39 | { |
40 | my_file_in=fopen(infile,"rb"); | 40 | my_file_in=fopen(infile,"rb"); |
41 | my_read_buf = new PPM_ReadBuf(my_file_in); | 41 | my_read_buf = new PPM_ReadBuf(my_file_in, this); |
42 | return home(); | 42 | return home(); |
43 | } | 43 | } |
44 | 44 | ||
@@ -107,6 +107,15 @@ int ppm_expander::getch() { | |||
107 | return (c==SYM_EOF) ? EOF : c; | 107 | return (c==SYM_EOF) ? EOF : c; |
108 | } | 108 | } |
109 | 109 | ||
110 | UINT PPM_ReadBuf::readbuf(UCHAR *buf,UINT len) | ||
111 | { | ||
112 | UINT len1; | ||
113 | parent->unsuspend(); | ||
114 | len1=fread(buf,1,len,my_file_in); | ||
115 | return len1; | ||
116 | } | ||
117 | |||
118 | |||
110 | #ifndef __STATIC | 119 | #ifndef __STATIC |
111 | extern "C" | 120 | extern "C" |
112 | { | 121 | { |
diff --git a/noncore/apps/opie-reader/ppm_expander.h b/noncore/apps/opie-reader/ppm_expander.h index ccc89c2..c5f8a17 100644 --- a/noncore/apps/opie-reader/ppm_expander.h +++ b/noncore/apps/opie-reader/ppm_expander.h | |||
@@ -7,8 +7,8 @@ | |||
7 | 7 | ||
8 | #include "utypes.h" | 8 | #include "utypes.h" |
9 | #include "ppm.h" | 9 | #include "ppm.h" |
10 | #include "arith.h" | ||
11 | 10 | ||
11 | class PPM_ReadBuf; | ||
12 | 12 | ||
13 | #define SYM_EOF 256 | 13 | #define SYM_EOF 256 |
14 | 14 | ||
@@ -36,6 +36,9 @@ public: | |||
36 | { | 36 | { |
37 | CExpander::unsuspend(my_file_in); | 37 | CExpander::unsuspend(my_file_in); |
38 | } | 38 | } |
39 | #else | ||
40 | void suspend() {} | ||
41 | void unsuspend() {} | ||
39 | #endif | 42 | #endif |
40 | ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL) | 43 | ppm_expander() : needppmend(false), my_file_in(NULL), my_read_buf(NULL) |
41 | { | 44 | { |
diff --git a/noncore/apps/opie-reader/preferences.cpp b/noncore/apps/opie-reader/preferences.cpp index 0f59a22..67960ed 100755 --- a/noncore/apps/opie-reader/preferences.cpp +++ b/noncore/apps/opie-reader/preferences.cpp | |||
@@ -1,3 +1,4 @@ | |||
1 | |||
1 | #ifndef USEQPE | 2 | #ifndef USEQPE |
2 | 3 | ||
3 | #include "preferences.h" | 4 | #include "preferences.h" |
diff --git a/noncore/apps/opie-reader/preferences.h b/noncore/apps/opie-reader/preferences.h index aeb2a84..39959d4 100644 --- a/noncore/apps/opie-reader/preferences.h +++ b/noncore/apps/opie-reader/preferences.h | |||
diff --git a/noncore/apps/opie-reader/reader.staticpro b/noncore/apps/opie-reader/reader.staticpro deleted file mode 100644 index 78ea8fb..0000000 --- a/noncore/apps/opie-reader/reader.staticpro +++ b/dev/null | |||
@@ -1,108 +0,0 @@ | |||
1 | TEMPLATE= app | ||
2 | CONFIG = qt warn_off debug | ||
3 | HEADERS = Aportis.h \ | ||
4 | Bkmks.h \ | ||
5 | BuffDoc.h \ | ||
6 | ButtonPrefs.h \ | ||
7 | CAnnoEdit.h \ | ||
8 | CBuffer.h \ | ||
9 | CDrawBuffer.h \ | ||
10 | CEncoding.h \ | ||
11 | CEncoding_tables.h \ | ||
12 | CExpander.h \ | ||
13 | CFilter.h \ | ||
14 | CloseDialog.h \ | ||
15 | Filedata.h \ | ||
16 | FixedFont.h \ | ||
17 | FontControl.h \ | ||
18 | GraphicWin.h \ | ||
19 | Markups.h \ | ||
20 | Navigation.h \ | ||
21 | Palm2QImage.h \ | ||
22 | Prefs.h \ | ||
23 | QFloatBar.h \ | ||
24 | QTReader.h \ | ||
25 | QTReaderApp.h \ | ||
26 | QtrListView.h \ | ||
27 | Queue.h \ | ||
28 | StyleConsts.h \ | ||
29 | ToolbarPrefs.h \ | ||
30 | URLDialog.h \ | ||
31 | ZText.h \ | ||
32 | arith.h \ | ||
33 | cbkmkselector.h \ | ||
34 | config.h \ | ||
35 | fileBrowser.h \ | ||
36 | infowin.h \ | ||
37 | linktype.h \ | ||
38 | my_list.h \ | ||
39 | names.h \ | ||
40 | QSTATICREADERINC/opie.h \ | ||
41 | pdb.h \ | ||
42 | plucker_base.h \ | ||
43 | plucker.h \ | ||
44 | ppm.h \ | ||
45 | ppm_expander.h \ | ||
46 | preferences.h \ | ||
47 | QSTATICREADERINC/static.h \ | ||
48 | usenef.h \ | ||
49 | QSTATICREADERINC/useqpe.h \ | ||
50 | ustring.h \ | ||
51 | utypes.h \ | ||
52 | version.h \ | ||
53 | ztxt.h | ||
54 | |||
55 | SOURCES = Aportis.cpp \ | ||
56 | Bkmks.cpp \ | ||
57 | BuffDoc.cpp \ | ||
58 | ButtonPrefs.cpp \ | ||
59 | CAnnoEdit.cpp \ | ||
60 | CBuffer.cpp \ | ||
61 | CDrawBuffer.cpp \ | ||
62 | CEncoding.cpp \ | ||
63 | CEncoding_tables.cpp \ | ||
64 | CExpander.cpp \ | ||
65 | CFilter.cpp \ | ||
66 | CHM.cpp \ | ||
67 | CRegExp.cpp \ | ||
68 | CloseDialog.cpp \ | ||
69 | FontControl.cpp \ | ||
70 | GraphicWin.cpp \ | ||
71 | Navigation.cpp \ | ||
72 | Palm2QImage.cpp \ | ||
73 | Prefs.cpp \ | ||
74 | QTReader.cpp \ | ||
75 | QTReaderApp.cpp \ | ||
76 | QtrListView.cpp \ | ||
77 | StyleConsts.cpp \ | ||
78 | ToolbarPrefs.cpp \ | ||
79 | URLDialog.cpp \ | ||
80 | arith_d.cpp \ | ||
81 | chm_lib.c \ | ||
82 | fileBrowser.cpp \ | ||
83 | hrule.cpp \ | ||
84 | infowin.cpp \ | ||
85 | iSilo.cpp \ | ||
86 | lzx.c \ | ||
87 | main.cpp \ | ||
88 | orkey.cpp \ | ||
89 | pdb.cpp \ | ||
90 | plucker.cpp \ | ||
91 | plucker_base.cpp \ | ||
92 | ppm.cpp \ | ||
93 | ppm_expander.cpp \ | ||
94 | preferences.cpp \ | ||
95 | striphtml.cpp \ | ||
96 | util.cpp \ | ||
97 | version.cpp \ | ||
98 | ztxt.cpp | ||
99 | |||
100 | INTERFACES= | ||
101 | DESTDIR = QSTATICREADEROBJS | ||
102 | INCLUDEPATH+= QSTATICREADERINC | ||
103 | DEPENDPATH+= QSTATICREADERINC | ||
104 | OBJECTS_DIR = QSTATICREADEROBJS | ||
105 | MOC_DIR = QSTATICREADERMOCS | ||
106 | TARGET = uqtreader | ||
107 | #LIBS += -lqpe | ||
108 | |||
diff --git a/noncore/apps/opie-reader/reader.staticzpro b/noncore/apps/opie-reader/reader.staticzpro deleted file mode 100644 index 861eb88..0000000 --- a/noncore/apps/opie-reader/reader.staticzpro +++ b/dev/null | |||
@@ -1,108 +0,0 @@ | |||
1 | TEMPLATE= app | ||
2 | CONFIG = qt warn_on release | ||
3 | HEADERS = Aportis.h \ | ||
4 | Bkmks.h \ | ||
5 | BuffDoc.h \ | ||
6 | ButtonPrefs.h \ | ||
7 | CAnnoEdit.h \ | ||
8 | CBuffer.h \ | ||
9 | CDrawBuffer.h \ | ||
10 | CEncoding.h \ | ||
11 | CEncoding_tables.h \ | ||
12 | CExpander.h \ | ||
13 | CFilter.h \ | ||
14 | CloseDialog.h \ | ||
15 | Filedata.h \ | ||
16 | FixedFont.h \ | ||
17 | FontControl.h \ | ||
18 | GraphicWin.h \ | ||
19 | Markups.h \ | ||
20 | Navigation.h \ | ||
21 | Palm2QImage.h \ | ||
22 | Prefs.h \ | ||
23 | QFloatBar.h \ | ||
24 | QTReader.h \ | ||
25 | QTReaderApp.h \ | ||
26 | QtrListView.h \ | ||
27 | Queue.h \ | ||
28 | StateData.h \ | ||
29 | StyleConsts.h \ | ||
30 | ToolbarPrefs.h \ | ||
31 | URLDialog.h \ | ||
32 | ZText.h \ | ||
33 | arith.h \ | ||
34 | cbkmkselector.h \ | ||
35 | config.h \ | ||
36 | fileBrowser.h \ | ||
37 | infowin.h \ | ||
38 | linktype.h \ | ||
39 | my_list.h \ | ||
40 | names.h \ | ||
41 | ZSTATICREADERINC/opie.h \ | ||
42 | pdb.h \ | ||
43 | plucker_base.h \ | ||
44 | plucker.h \ | ||
45 | ppm.h \ | ||
46 | ppm_expander.h \ | ||
47 | preferences.h \ | ||
48 | ZSTATICREADERINC/static.h \ | ||
49 | usenef.h \ | ||
50 | ZSTATICREADERINC/useqpe.h \ | ||
51 | ustring.h \ | ||
52 | utypes.h \ | ||
53 | version.h \ | ||
54 | ztxt.h | ||
55 | |||
56 | SOURCES = Aportis.cpp \ | ||
57 | Bkmks.cpp \ | ||
58 | BuffDoc.cpp \ | ||
59 | ButtonPrefs.cpp \ | ||
60 | CAnnoEdit.cpp \ | ||
61 | CBuffer.cpp \ | ||
62 | CDrawBuffer.cpp \ | ||
63 | CEncoding.cpp \ | ||
64 | CEncoding_tables.cpp \ | ||
65 | CExpander.cpp \ | ||
66 | CFilter.cpp \ | ||
67 | CHM.cpp \ | ||
68 | CRegExp.cpp \ | ||
69 | CloseDialog.cpp \ | ||
70 | FontControl.cpp \ | ||
71 | GraphicWin.cpp \ | ||
72 | Navigation.cpp \ | ||
73 | Palm2QImage.cpp \ | ||
74 | Prefs.cpp \ | ||
75 | QTReader.cpp \ | ||
76 | QTReaderApp.cpp \ | ||
77 | QtrListView.cpp \ | ||
78 | StyleConsts.cpp \ | ||
79 | ToolbarPrefs.cpp \ | ||
80 | URLDialog.cpp \ | ||
81 | arith_d.cpp \ | ||
82 | chm_lib.c \ | ||
83 | fileBrowser.cpp \ | ||
84 | hrule.cpp \ | ||
85 | infowin.cpp \ | ||
86 | iSilo.cpp \ | ||
87 | lzx.c \ | ||
88 | main.cpp \ | ||
89 | orkey.cpp \ | ||
90 | pdb.cpp \ | ||
91 | plucker.cpp \ | ||
92 | plucker_base.cpp \ | ||
93 | ppm.cpp \ | ||
94 | ppm_expander.cpp \ | ||
95 | striphtml.cpp \ | ||
96 | util.cpp \ | ||
97 | version.cpp \ | ||
98 | ztxt.cpp | ||
99 | |||
100 | INTERFACES= | ||
101 | DESTDIR = ZSTATICREADEROBJS | ||
102 | INCLUDEPATH+= ZSTATICREADERINC | ||
103 | DEPENDPATH+= ZSTATICREADERINC | ||
104 | OBJECTS_DIR = ZSTATICREADEROBJS | ||
105 | MOC_DIR = ZSTATICREADERMOCS | ||
106 | TARGET = uqtreader | ||
107 | LIBS += -lqpe | ||
108 | |||
diff --git a/noncore/apps/opie-reader/reader/reader.pro b/noncore/apps/opie-reader/reader/reader.pro index 6349ea7..dc6a5dd 100644 --- a/noncore/apps/opie-reader/reader/reader.pro +++ b/noncore/apps/opie-reader/reader/reader.pro | |||
@@ -30,6 +30,7 @@ HEADERS = Aportis.h \ | |||
30 | QtrListView.h \ | 30 | QtrListView.h \ |
31 | Queue.h \ | 31 | Queue.h \ |
32 | StyleConsts.h \ | 32 | StyleConsts.h \ |
33 | TableDialog.h \ | ||
33 | ToolbarPrefs.h \ | 34 | ToolbarPrefs.h \ |
34 | URLDialog.h \ | 35 | URLDialog.h \ |
35 | ZText.h \ | 36 | ZText.h \ |
@@ -46,7 +47,6 @@ HEADERS = Aportis.h \ | |||
46 | plucker_base.h \ | 47 | plucker_base.h \ |
47 | ppm.h \ | 48 | ppm.h \ |
48 | ppm_expander.h \ | 49 | ppm_expander.h \ |
49 | usenef.h \ | ||
50 | ustring.h \ | 50 | ustring.h \ |
51 | util.h \ | 51 | util.h \ |
52 | utypes.h \ | 52 | utypes.h \ |
@@ -68,6 +68,7 @@ SOURCES = BuffDoc.cpp \ | |||
68 | QTReader.cpp \ | 68 | QTReader.cpp \ |
69 | QTReaderApp.cpp \ | 69 | QTReaderApp.cpp \ |
70 | QtrListView.cpp \ | 70 | QtrListView.cpp \ |
71 | TableDialog.cpp \ | ||
71 | ToolbarPrefs.cpp \ | 72 | ToolbarPrefs.cpp \ |
72 | URLDialog.cpp \ | 73 | URLDialog.cpp \ |
73 | fileBrowser.cpp \ | 74 | fileBrowser.cpp \ |
diff --git a/noncore/apps/opie-reader/setn.sh b/noncore/apps/opie-reader/setn.sh deleted file mode 100644 index ad9409f..0000000 --- a/noncore/apps/opie-reader/setn.sh +++ b/dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | red='\e[0;31m' | ||
2 | RED='\e[1;31m' | ||
3 | blue='\e[0;34m' | ||
4 | BLUE='\e[1;34m' | ||
5 | cyan='\e[0;36m' | ||
6 | CYAN='\e[1;36m' | ||
7 | NC='\e[0m' # No Color | ||
8 | |||
9 | if test -z $OLDPATH; then | ||
10 | export OLDPATH=$PATH | ||
11 | fi | ||
12 | |||
13 | if test -z $OLD_LD_LIBRARY_PATH; then | ||
14 | export OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH | ||
15 | fi | ||
16 | |||
17 | #export QPEDIR=/opt/Qtopia | ||
18 | export QTDIR=/home/tim/nevyos/qt-embedded-free-3.1.1 | ||
19 | export PATH=$QTDIR/bin:$OLDPATH | ||
20 | export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-generic-g++ | ||
21 | export LD_LIBRARY_PATH=$QTDIR/lib:$OLD_LD_LIBRARY_PATH | ||
22 | |||
23 | #PS1="[${cyan}\T$NC][${RED}Laptop${NC}]\W> " | ||
24 | #PS1="[${RED}NevyOS${NC}]\W> " | ||
25 | PS1="[NevyOS]\W> " | ||
26 | |||
27 | echo -e \\n${RED}NevyOS${NC} environment configured\\n | ||
diff --git a/noncore/apps/opie-reader/seto.sh b/noncore/apps/opie-reader/seto.sh deleted file mode 100644 index c1d1dd1..0000000 --- a/noncore/apps/opie-reader/seto.sh +++ b/dev/null | |||
@@ -1,25 +0,0 @@ | |||
1 | red='\e[0;31m' | ||
2 | RED='\e[1;31m' | ||
3 | blue='\e[0;34m' | ||
4 | BLUE='\e[1;34m' | ||
5 | cyan='\e[0;36m' | ||
6 | CYAN='\e[1;36m' | ||
7 | NC='\e[0m' # No Color | ||
8 | |||
9 | if test -z $OLDPATH; then | ||
10 | export OLDPATH=$PATH | ||
11 | fi | ||
12 | |||
13 | if test -z $OLD_LD_LIBRARY_PATH; then | ||
14 | export OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH | ||
15 | fi | ||
16 | |||
17 | export QPEDIR=/opt/Qtopia/opie | ||
18 | export QTDIR=/opt/Qtopia/opie | ||
19 | export PATH=$QTDIR/bin:/usr/local/arm/3.3/bin:$OLDPATH | ||
20 | export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-opie-g++ | ||
21 | #export LD_LIBRARY_PATH=$QTDIR/lib:$OLD_LD_LIBRARY_PATH | ||
22 | |||
23 | PS1="[Opie]\W> " | ||
24 | |||
25 | echo -e \\n${RED}Opie${NC} environment configured\\n | ||
diff --git a/noncore/apps/opie-reader/setqt.sh b/noncore/apps/opie-reader/setqt.sh deleted file mode 100644 index 1b7e7b7..0000000 --- a/noncore/apps/opie-reader/setqt.sh +++ b/dev/null | |||
@@ -1,30 +0,0 @@ | |||
1 | red='\e[0;31m' | ||
2 | RED='\e[1;31m' | ||
3 | blue='\e[0;34m' | ||
4 | BLUE='\e[1;34m' | ||
5 | cyan='\e[0;36m' | ||
6 | CYAN='\e[1;36m' | ||
7 | NC='\e[0m' # No Color | ||
8 | |||
9 | if test -z $OLDPATH; then | ||
10 | export OLDPATH=$PATH | ||
11 | fi | ||
12 | |||
13 | if test -z $OLD_LD_LIBRARY_PATH; then | ||
14 | export OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH | ||
15 | fi | ||
16 | |||
17 | #export QPEDIR=/opt/Qtopia | ||
18 | export QTDIR=/usr/lib/qt3 | ||
19 | export PATH=$QTDIR/bin:$OLDPATH | ||
20 | #export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-generic-g++ | ||
21 | |||
22 | export READERDIR=/home/tim/uqtreader | ||
23 | export LD_LIBRARY_PATH=$READERDIR/lib:$OLD_LD_LIBRARY_PATH | ||
24 | |||
25 | |||
26 | #PS1="[${cyan}\T$NC][${RED}Laptop${NC}]\W> " | ||
27 | #PS1="[${RED}NevyOS${NC}]\W> " | ||
28 | PS1="[QT]\W> " | ||
29 | |||
30 | echo -e \\n${RED}QT${NC} environment configured\\n | ||
diff --git a/noncore/apps/opie-reader/setws.sh b/noncore/apps/opie-reader/setws.sh deleted file mode 100644 index 61aeccb..0000000 --- a/noncore/apps/opie-reader/setws.sh +++ b/dev/null | |||
@@ -1,27 +0,0 @@ | |||
1 | red='\e[0;31m' | ||
2 | RED='\e[1;31m' | ||
3 | blue='\e[0;34m' | ||
4 | BLUE='\e[1;34m' | ||
5 | cyan='\e[0;36m' | ||
6 | CYAN='\e[1;36m' | ||
7 | NC='\e[0m' # No Color | ||
8 | |||
9 | if test -z $OLDPATH; then | ||
10 | export OLDPATH=$PATH | ||
11 | fi | ||
12 | |||
13 | if test -z $OLD_LD_LIBRARY_PATH; then | ||
14 | export OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH | ||
15 | fi | ||
16 | |||
17 | export QPEDIR=/opt/Qtopia | ||
18 | export QTDIR=/opt/Qtopia | ||
19 | export PATH=$QTDIR/bin:$OLDPATH | ||
20 | export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-generic-g++ | ||
21 | export LD_LIBRARY_PATH=$QTDIR/lib:$OLD_LD_LIBRARY_PATH | ||
22 | |||
23 | #PS1="[${cyan}\T$NC][${RED}Laptop${NC}]\W> " | ||
24 | #PS1="[${RED}Laptop${NC}]\W> " | ||
25 | PS1="[Laptop]\W> " | ||
26 | |||
27 | echo -e \\n${RED}Laptop${NC} environment configured\\n | ||
diff --git a/noncore/apps/opie-reader/setz.sh b/noncore/apps/opie-reader/setz.sh deleted file mode 100644 index e2fa4cd..0000000 --- a/noncore/apps/opie-reader/setz.sh +++ b/dev/null | |||
@@ -1,25 +0,0 @@ | |||
1 | red='\e[0;31m' | ||
2 | RED='\e[1;31m' | ||
3 | blue='\e[0;34m' | ||
4 | BLUE='\e[1;34m' | ||
5 | cyan='\e[0;36m' | ||
6 | CYAN='\e[1;36m' | ||
7 | NC='\e[0m' # No Color | ||
8 | |||
9 | if test -z $OLDPATH; then | ||
10 | export OLDPATH=$PATH | ||
11 | fi | ||
12 | |||
13 | if test -z $OLD_LD_LIBRARY_PATH; then | ||
14 | export OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH | ||
15 | fi | ||
16 | |||
17 | export QPEDIR=/opt/Qtopia/sharp | ||
18 | export QTDIR=/opt/Qtopia/sharp | ||
19 | export PATH=$QTDIR/bin:/usr/local/arm/bin:$OLDPATH | ||
20 | export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-sharp-g++ | ||
21 | export LD_LIBRARY_PATH=$QTDIR/lib:$OLD_LD_LIBRARY_PATH | ||
22 | |||
23 | PS1="[Zaurus]\W> " | ||
24 | |||
25 | echo -e \\n${RED}Zaurus${NC} environment configured\\n | ||
diff --git a/noncore/apps/opie-reader/striphtml.cpp b/noncore/apps/opie-reader/striphtml.cpp index e86402b..c434dbb 100644 --- a/noncore/apps/opie-reader/striphtml.cpp +++ b/noncore/apps/opie-reader/striphtml.cpp | |||
@@ -8,7 +8,6 @@ | |||
8 | #include "CDrawBuffer.h" | 8 | #include "CDrawBuffer.h" |
9 | #include "striphtml.h" | 9 | #include "striphtml.h" |
10 | #include "hrule.h" | 10 | #include "hrule.h" |
11 | #include "util.h" | ||
12 | 11 | ||
13 | #include <qregexp.h> | 12 | #include <qregexp.h> |
14 | #include <qimage.h> | 13 | #include <qimage.h> |
@@ -90,15 +89,23 @@ void striphtml::skipblock(const QString& _ent) | |||
90 | } while (ent != _ent && ch != UEOF); | 89 | } while (ent != _ent && ch != UEOF); |
91 | } | 90 | } |
92 | 91 | ||
93 | void striphtml::locate(unsigned int n) | 92 | void striphtml::reset() |
94 | { | 93 | { |
95 | m_inblock = false; | 94 | m_inblock = false; |
96 | text_q = ""; | 95 | text_q = ""; |
96 | q = ""; | ||
97 | tablenesteddepth = 0; | ||
97 | forcecentre = false; | 98 | forcecentre = false; |
98 | ignorespace = false; | 99 | ignorespace = false; |
100 | indent = 0; | ||
99 | while (!stylestack.isEmpty()) stylestack.pop(); | 101 | while (!stylestack.isEmpty()) stylestack.pop(); |
100 | currentstyle.unset(); | 102 | currentstyle.unset(); |
103 | } | ||
104 | |||
105 | void striphtml::locate(unsigned int n) | ||
106 | { | ||
101 | qDebug("striphtml:locating:%u", n); | 107 | qDebug("striphtml:locating:%u", n); |
108 | reset(); | ||
102 | parent->locate(n); | 109 | parent->locate(n); |
103 | } | 110 | } |
104 | 111 | ||
@@ -233,6 +240,13 @@ bool striphtml::findanchor(const QString& _info) | |||
233 | { | 240 | { |
234 | // QProgressDialog dlg("Finding link...", QString::null, 0, NULL, "progress", true); | 241 | // QProgressDialog dlg("Finding link...", QString::null, 0, NULL, "progress", true); |
235 | // QProgressBar dlg(0); | 242 | // QProgressBar dlg(0); |
243 | if (parent->findanchor(_info)) | ||
244 | { | ||
245 | reset(); | ||
246 | return true; | ||
247 | } | ||
248 | qDebug("Using html find"); | ||
249 | parent->locate(parent->startSection()); | ||
236 | #if defined(USEQPE) || defined(_WINDOWS) | 250 | #if defined(USEQPE) || defined(_WINDOWS) |
237 | QString info; | 251 | QString info; |
238 | for (int i = 0; i < _info.length(); i++) | 252 | for (int i = 0; i < _info.length(); i++) |
@@ -295,7 +309,7 @@ bool striphtml::findanchor(const QString& _info) | |||
295 | return ret; | 309 | return ret; |
296 | } | 310 | } |
297 | 311 | ||
298 | striphtml::striphtml(const QString& _s) : entmap(NULL), isPre(false), currentid(0), lastch(0), currentfile(_s), indent(0), forcecentre(false), m_inblock(false), m_bchm(false), ignorespace(false) | 312 | striphtml::striphtml(const QString& _s) : entmap(NULL), isPre(false), currentid(0), lastch(0), currentfile(_s), indent(0), forcecentre(false), m_inblock(false), m_bchm(false), ignorespace(false), tablenesteddepth(0) |
299 | { | 313 | { |
300 | href2filepos = new QMap<QString, unsigned long>; | 314 | href2filepos = new QMap<QString, unsigned long>; |
301 | id2href = new QMap<unsigned long, QString>; | 315 | id2href = new QMap<unsigned long, QString>; |
@@ -311,7 +325,17 @@ striphtml::~striphtml() | |||
311 | void striphtml::initentmap() | 325 | void striphtml::initentmap() |
312 | { | 326 | { |
313 | entmap = new QMap<QString, tchar>; | 327 | entmap = new QMap<QString, tchar>; |
314 | QString fname(QTReaderUtil::getPluginPath("data")); | 328 | #ifdef USEQPE |
329 | #ifdef OPIE | ||
330 | QString fname(getenv("OPIEDIR")); | ||
331 | #else | ||
332 | QString fname(getenv("QTDIR")); | ||
333 | #endif | ||
334 | fname += "/plugins/reader/data"; | ||
335 | #else | ||
336 | QString fname(getenv("READERDIR")); | ||
337 | fname += "/data"; | ||
338 | #endif | ||
315 | QFileInfo fi; | 339 | QFileInfo fi; |
316 | fi.setFile(fname, "HTMLentities"); | 340 | fi.setFile(fname, "HTMLentities"); |
317 | if (fi.exists()) | 341 | if (fi.exists()) |
@@ -412,6 +436,12 @@ QString striphtml::getattr(tchar& ch) | |||
412 | ref = getname(ch, "\""); | 436 | ref = getname(ch, "\""); |
413 | ch = skip_ws(); | 437 | ch = skip_ws(); |
414 | } | 438 | } |
439 | else if (ch == '\'') | ||
440 | { | ||
441 | mygetch(ch, sty, pos); | ||
442 | ref = getname(ch, "\'"); | ||
443 | ch = skip_ws(); | ||
444 | } | ||
415 | else | 445 | else |
416 | { | 446 | { |
417 | ref = getname(ch, " >"); | 447 | ref = getname(ch, " >"); |
@@ -478,6 +508,11 @@ linkType striphtml::hyperlink(unsigned int n, unsigned int, QString& w, QString& | |||
478 | 508 | ||
479 | if (file.isEmpty()) | 509 | if (file.isEmpty()) |
480 | { | 510 | { |
511 | if (parent->findanchor(name)) | ||
512 | { | ||
513 | reset(); | ||
514 | return eLink; | ||
515 | } | ||
481 | fpit = href2filepos->find(name); | 516 | fpit = href2filepos->find(name); |
482 | if (fpit != href2filepos->end()) | 517 | if (fpit != href2filepos->end()) |
483 | { | 518 | { |
@@ -488,7 +523,6 @@ linkType striphtml::hyperlink(unsigned int n, unsigned int, QString& w, QString& | |||
488 | { | 523 | { |
489 | // nm = QString("<a[^>]*name[ \t]*=[ \t]*\"") + name + "\""; | 524 | // nm = QString("<a[^>]*name[ \t]*=[ \t]*\"") + name + "\""; |
490 | qDebug("Do a search for:%s", (const char*)name); | 525 | qDebug("Do a search for:%s", (const char*)name); |
491 | parent->locate(0); | ||
492 | findanchor(name); | 526 | findanchor(name); |
493 | return eLink; | 527 | return eLink; |
494 | } | 528 | } |
@@ -498,7 +532,7 @@ linkType striphtml::hyperlink(unsigned int n, unsigned int, QString& w, QString& | |||
498 | { | 532 | { |
499 | if (m_bchm) | 533 | if (m_bchm) |
500 | { | 534 | { |
501 | w = "/"+file; | 535 | w = file; |
502 | nm = name; | 536 | nm = name; |
503 | return eFile; | 537 | return eFile; |
504 | } | 538 | } |
@@ -564,7 +598,31 @@ void striphtml::mygetch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
564 | } | 598 | } |
565 | if (ch == 10 && !isPre) | 599 | if (ch == 10 && !isPre) |
566 | { | 600 | { |
601 | #ifdef REMOVE_LF_BEFORE_ENDTAG | ||
602 | parent->getch(ch, sty, pos); | ||
603 | if (ch == '<') | ||
604 | { | ||
605 | parent->getch(ch, sty, pos); | ||
606 | if (ch == '/') | ||
607 | { | ||
608 | ch = '<'; | ||
609 | text_q += '/'; | ||
610 | } | ||
611 | else | ||
612 | { | ||
613 | text_q += '<'; | ||
614 | text_q += ch; | ||
615 | ch = ' '; | ||
616 | } | ||
617 | } | ||
618 | else | ||
619 | { | ||
620 | text_q += ch; | ||
621 | ch = ' '; | ||
622 | } | ||
623 | #else | ||
567 | ch = ' '; | 624 | ch = ' '; |
625 | #endif | ||
568 | } | 626 | } |
569 | } | 627 | } |
570 | 628 | ||
@@ -584,7 +642,6 @@ void striphtml::parse_paragraph(CStyle& currentstyle, tchar& ch, unsigned long p | |||
584 | } | 642 | } |
585 | else | 643 | else |
586 | { | 644 | { |
587 | qDebug("Using stack style"); | ||
588 | currentstyle = stylestack.first(); | 645 | currentstyle = stylestack.first(); |
589 | } | 646 | } |
590 | if (forcecentre) | 647 | if (forcecentre) |
@@ -607,6 +664,10 @@ void striphtml::parse_paragraph(CStyle& currentstyle, tchar& ch, unsigned long p | |||
607 | { | 664 | { |
608 | currentstyle.setRightJustify(); | 665 | currentstyle.setRightJustify(); |
609 | } | 666 | } |
667 | if (attr == "justify") | ||
668 | { | ||
669 | currentstyle.setFullJustify(); | ||
670 | } | ||
610 | } | 671 | } |
611 | if (ent == "id") | 672 | if (ent == "id") |
612 | { | 673 | { |
@@ -654,6 +715,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
654 | q = q.right(q.length()-1); | 715 | q = q.right(q.length()-1); |
655 | } | 716 | } |
656 | sty = currentstyle; | 717 | sty = currentstyle; |
718 | lastch = ch; | ||
657 | return; | 719 | return; |
658 | } | 720 | } |
659 | do | 721 | do |
@@ -661,11 +723,9 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
661 | unsigned long npos; | 723 | unsigned long npos; |
662 | CStyle dummy; | 724 | CStyle dummy; |
663 | mygetch(ch, dummy, pos); | 725 | mygetch(ch, dummy, pos); |
664 | // if (ch == 10 && !isPre) ch = ' '; | ||
665 | while (ch == '<' && ch != UEOF) | 726 | while (ch == '<' && ch != UEOF) |
666 | { | 727 | { |
667 | ch = skip_ws(); | 728 | ch = skip_ws(); |
668 | |||
669 | QString ent = getname(ch, " >").lower(); | 729 | QString ent = getname(ch, " >").lower(); |
670 | 730 | ||
671 | // qDebug("Entity:%s", (const char*)ent); | 731 | // qDebug("Entity:%s", (const char*)ent); |
@@ -681,7 +741,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
681 | { | 741 | { |
682 | QString ent = getname(ch, " =>").lower(); | 742 | QString ent = getname(ch, " =>").lower(); |
683 | QString attr = getattr(ch); | 743 | QString attr = getattr(ch); |
684 | qDebug("<A>Entity:%s Attr:%s", (const char*)ent, (const char*)attr); | 744 | //qDebug("<A>Entity:%s Attr:%s", (const char*)ent, (const char*)attr); |
685 | if (ent == "name") | 745 | if (ent == "name") |
686 | { | 746 | { |
687 | name = attr; | 747 | name = attr; |
@@ -712,7 +772,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
712 | { | 772 | { |
713 | text_q = attr + "</a><p>"; | 773 | text_q = attr + "</a><p>"; |
714 | } | 774 | } |
715 | qDebug("<a %s=%s>", (const char*)ent, (const char*)ref); | 775 | //qDebug("<a %s=%s>", (const char*)ent, (const char*)ref); |
716 | } | 776 | } |
717 | if (ishref) | 777 | if (ishref) |
718 | { | 778 | { |
@@ -748,6 +808,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
748 | { | 808 | { |
749 | parse_paragraph(currentstyle, ch, pos); | 809 | parse_paragraph(currentstyle, ch, pos); |
750 | stylestack.push_front(currentstyle); | 810 | stylestack.push_front(currentstyle); |
811 | currentstyle.setExtraSpace(16); | ||
751 | //indent = 0; | 812 | //indent = 0; |
752 | continue; | 813 | continue; |
753 | } | 814 | } |
@@ -800,6 +861,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
800 | else if (ent == "pre") | 861 | else if (ent == "pre") |
801 | { | 862 | { |
802 | isPre = true; | 863 | isPre = true; |
864 | currentstyle.setNoJustify(); | ||
803 | currentstyle.setMono(); | 865 | currentstyle.setMono(); |
804 | } | 866 | } |
805 | else if (ent == "tt") | 867 | else if (ent == "tt") |
@@ -822,6 +884,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
822 | { | 884 | { |
823 | if (ch != '>') ch = skip_ws_end(); | 885 | if (ch != '>') ch = skip_ws_end(); |
824 | ch = 10; | 886 | ch = 10; |
887 | currentstyle.setExtraSpace(0); | ||
825 | currentstyle.setLeftMargin(30); | 888 | currentstyle.setLeftMargin(30); |
826 | currentstyle.setRightMargin(30); | 889 | currentstyle.setRightMargin(30); |
827 | continue; | 890 | continue; |
@@ -830,6 +893,8 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
830 | { | 893 | { |
831 | if (ch != '>') ch = skip_ws_end(); | 894 | if (ch != '>') ch = skip_ws_end(); |
832 | ch = 10; | 895 | ch = 10; |
896 | currentstyle.setExtraSpace(0); | ||
897 | lastch = 0; | ||
833 | continue; | 898 | continue; |
834 | } | 899 | } |
835 | else if (ent == "mbp:pagebreak") | 900 | else if (ent == "mbp:pagebreak") |
@@ -861,6 +926,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
861 | else if (ent == "li") | 926 | else if (ent == "li") |
862 | { | 927 | { |
863 | if (ch != '>') ch = skip_ws_end(); | 928 | if (ch != '>') ch = skip_ws_end(); |
929 | lastch = 0; | ||
864 | ch = 10; | 930 | ch = 10; |
865 | if (m_listtype[indent % m_cmaxdepth] == 1) | 931 | if (m_listtype[indent % m_cmaxdepth] == 1) |
866 | { | 932 | { |
@@ -918,6 +984,12 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
918 | { | 984 | { |
919 | currentstyle.setFontSize(0); | 985 | currentstyle.setFontSize(0); |
920 | } | 986 | } |
987 | else if (ent[0] == '/' && ent[1] == 'h' && ent.length() == 3 && QString("123456789").find(ent[2]) != -1) | ||
988 | { | ||
989 | parse_paragraph(currentstyle, ch, pos); | ||
990 | currentstyle.setExtraSpace(3); | ||
991 | continue; | ||
992 | } | ||
921 | else if (ent[0] == 'h' && ent.length() == 2 && QString("123456789").find(ent[1]) != -1) | 993 | else if (ent[0] == 'h' && ent.length() == 2 && QString("123456789").find(ent[1]) != -1) |
922 | { | 994 | { |
923 | indent = 0; | 995 | indent = 0; |
@@ -928,7 +1000,6 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
928 | currentstyle.setExtraSpace(8); | 1000 | currentstyle.setExtraSpace(8); |
929 | currentstyle.setBold(); | 1001 | currentstyle.setBold(); |
930 | // currentstyle.setExtraSpace(10); | 1002 | // currentstyle.setExtraSpace(10); |
931 | continue; | ||
932 | } | 1003 | } |
933 | else if (ent[1] == '2') | 1004 | else if (ent[1] == '2') |
934 | { | 1005 | { |
@@ -937,7 +1008,6 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
937 | currentstyle.setExtraSpace(6); | 1008 | currentstyle.setExtraSpace(6); |
938 | currentstyle.setBold(); | 1009 | currentstyle.setBold(); |
939 | // currentstyle.setExtraSpace(10); | 1010 | // currentstyle.setExtraSpace(10); |
940 | continue; | ||
941 | } | 1011 | } |
942 | else if (ent[1] == '3') | 1012 | else if (ent[1] == '3') |
943 | { | 1013 | { |
@@ -946,7 +1016,6 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
946 | currentstyle.setExtraSpace(4); | 1016 | currentstyle.setExtraSpace(4); |
947 | currentstyle.setBold(); | 1017 | currentstyle.setBold(); |
948 | // currentstyle.setExtraSpace(10); | 1018 | // currentstyle.setExtraSpace(10); |
949 | continue; | ||
950 | } | 1019 | } |
951 | else | 1020 | else |
952 | { | 1021 | { |
@@ -954,8 +1023,9 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
954 | currentstyle.setExtraSpace(4); | 1023 | currentstyle.setExtraSpace(4); |
955 | currentstyle.setBold(); | 1024 | currentstyle.setBold(); |
956 | // currentstyle.setExtraSpace(10); | 1025 | // currentstyle.setExtraSpace(10); |
957 | continue; | ||
958 | } | 1026 | } |
1027 | ch = 10; | ||
1028 | continue; | ||
959 | } | 1029 | } |
960 | 1030 | ||
961 | 1031 | ||
@@ -1047,16 +1117,25 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1047 | { | 1117 | { |
1048 | currentstyle.unset(); | 1118 | currentstyle.unset(); |
1049 | if (ch != '>') ch = skip_ws_end(); | 1119 | if (ch != '>') ch = skip_ws_end(); |
1050 | ch = 10; | 1120 | //ch = 10; |
1051 | continue; | 1121 | //continue; |
1052 | } | 1122 | } |
1053 | |||
1054 | |||
1055 | |||
1056 | else if (ent == "table" || ent == "/table") | 1123 | else if (ent == "table" || ent == "/table") |
1057 | { | 1124 | { |
1058 | currentstyle.unset(); | 1125 | currentstyle.unset(); |
1059 | ignorespace = (ent == "table"); | 1126 | ignorespace = (ent == "table"); |
1127 | if (ent == "table") | ||
1128 | { | ||
1129 | if (tablenesteddepth++ == 0) currentstyle.setTable(pos); | ||
1130 | } | ||
1131 | else | ||
1132 | { | ||
1133 | if (--tablenesteddepth <= 0) | ||
1134 | { | ||
1135 | tablenesteddepth = 0; | ||
1136 | currentstyle.setTable(0xffffffff); | ||
1137 | } | ||
1138 | } | ||
1060 | if (ch == ' ') ch = skip_ws(); | 1139 | if (ch == ' ') ch = skip_ws(); |
1061 | while (ch != '>' && ch != UEOF) | 1140 | while (ch != '>' && ch != UEOF) |
1062 | { | 1141 | { |
@@ -1066,10 +1145,14 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1066 | } | 1145 | } |
1067 | if (ch != '>') ch = skip_ws_end(); | 1146 | if (ch != '>') ch = skip_ws_end(); |
1068 | 1147 | ||
1148 | currentstyle.setLeftMargin(6*tablenesteddepth); | ||
1149 | |||
1150 | |||
1151 | lastch = 0; // Anything but 10 | ||
1069 | ch = 10; | 1152 | ch = 10; |
1070 | q += '-'; | 1153 | q += '-'; |
1071 | q += QChar(parent->getwidth()); | 1154 | q += QChar(parent->getwidth()); |
1072 | q += 2; | 1155 | q += 3; |
1073 | q += '\0'; | 1156 | q += '\0'; |
1074 | q += '\0'; | 1157 | q += '\0'; |
1075 | q += '\0'; | 1158 | q += '\0'; |
@@ -1077,18 +1160,8 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1077 | } | 1160 | } |
1078 | else if (ent == "hr") | 1161 | else if (ent == "hr") |
1079 | { | 1162 | { |
1163 | //bool isPageBreak = false; | ||
1080 | if (ch == ' ') ch = skip_ws(); | 1164 | if (ch == ' ') ch = skip_ws(); |
1081 | // if (stylestack.isEmpty()) | ||
1082 | // { | ||
1083 | currentstyle.unset(); | ||
1084 | // } | ||
1085 | /* | ||
1086 | else | ||
1087 | { | ||
1088 | qDebug("Using stack style"); | ||
1089 | currentstyle = stylestack.first(); | ||
1090 | } | ||
1091 | */ | ||
1092 | unsigned char red = 0, green = 0, blue = 0; | 1165 | unsigned char red = 0, green = 0, blue = 0; |
1093 | while (ch != '>' && ch != UEOF) | 1166 | while (ch != '>' && ch != UEOF) |
1094 | { | 1167 | { |
@@ -1098,9 +1171,38 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1098 | { | 1171 | { |
1099 | parse_color(attr, red, green, blue); | 1172 | parse_color(attr, red, green, blue); |
1100 | } | 1173 | } |
1174 | /* | ||
1175 | if (ent == "size") | ||
1176 | { | ||
1177 | if (attr == "0") | ||
1178 | { | ||
1179 | isPageBreak = true; | ||
1180 | } | ||
1181 | } | ||
1182 | */ | ||
1101 | qDebug("<hr>Entity:%s Attr:%s", (const char*)ent, (const char*)attr); | 1183 | qDebug("<hr>Entity:%s Attr:%s", (const char*)ent, (const char*)attr); |
1102 | } | 1184 | } |
1103 | if (ch != '>') ch = skip_ws_end(); | 1185 | if (ch != '>') ch = skip_ws_end(); |
1186 | /* | ||
1187 | if (isPageBreak) | ||
1188 | { | ||
1189 | ch = UEOF; | ||
1190 | } | ||
1191 | else | ||
1192 | { | ||
1193 | */ | ||
1194 | // if (stylestack.isEmpty()) | ||
1195 | // { | ||
1196 | currentstyle.unset(); | ||
1197 | // } | ||
1198 | /* | ||
1199 | else | ||
1200 | { | ||
1201 | qDebug("Using stack style"); | ||
1202 | currentstyle = stylestack.first(); | ||
1203 | } | ||
1204 | */ | ||
1205 | lastch = 0; //Anything but 10 or ' ' | ||
1104 | ch = 10; | 1206 | ch = 10; |
1105 | q += '-'; | 1207 | q += '-'; |
1106 | q += QChar(parent->getwidth()); | 1208 | q += QChar(parent->getwidth()); |
@@ -1108,6 +1210,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1108 | q += red; | 1210 | q += red; |
1109 | q += green; | 1211 | q += green; |
1110 | q += blue; | 1212 | q += blue; |
1213 | |||
1111 | continue; | 1214 | continue; |
1112 | } | 1215 | } |
1113 | 1216 | ||
@@ -1123,6 +1226,7 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1123 | qDebug("<img>Entity:%s Attr:%s", (const char*)ent, (const char*)attr); | 1226 | qDebug("<img>Entity:%s Attr:%s", (const char*)ent, (const char*)attr); |
1124 | if (ent == "src") | 1227 | if (ent == "src") |
1125 | { | 1228 | { |
1229 | /* | ||
1126 | if (m_bchm) | 1230 | if (m_bchm) |
1127 | { | 1231 | { |
1128 | QImage* img = parent->getPicture(attr); | 1232 | QImage* img = parent->getPicture(attr); |
@@ -1131,6 +1235,14 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1131 | currentstyle.setPicture(true, img); | 1235 | currentstyle.setPicture(true, img); |
1132 | } | 1236 | } |
1133 | } | 1237 | } |
1238 | */ | ||
1239 | |||
1240 | |||
1241 | QImage* img = parent->getPicture(attr); | ||
1242 | if (img != NULL) | ||
1243 | { | ||
1244 | currentstyle.setPicture(true, img); | ||
1245 | } | ||
1134 | else | 1246 | else |
1135 | { | 1247 | { |
1136 | QFileInfo f(currentfile); | 1248 | QFileInfo f(currentfile); |
@@ -1172,6 +1284,14 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1172 | { | 1284 | { |
1173 | // skipblock("/metadata"); | 1285 | // skipblock("/metadata"); |
1174 | } | 1286 | } |
1287 | else if (ent == "title") | ||
1288 | { | ||
1289 | skipblock("/title"); | ||
1290 | } | ||
1291 | else if (ent == "head") | ||
1292 | { | ||
1293 | skipblock("/head"); | ||
1294 | } | ||
1175 | /* | 1295 | /* |
1176 | else if (ent == "metadata") | 1296 | else if (ent == "metadata") |
1177 | { | 1297 | { |
@@ -1191,6 +1311,9 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1191 | } | 1311 | } |
1192 | 1312 | ||
1193 | if (ch != '>') ch = skip_ws_end(); | 1313 | if (ch != '>') ch = skip_ws_end(); |
1314 | if (ent[0] == '/') | ||
1315 | mygetch(ch, dummy, pos); | ||
1316 | else | ||
1194 | mygetch(ch, dummy, npos); | 1317 | mygetch(ch, dummy, npos); |
1195 | } | 1318 | } |
1196 | if (ch == '&') | 1319 | if (ch == '&') |
@@ -1234,14 +1357,57 @@ void striphtml::getch(tchar& ch, CStyle& sty, unsigned long& pos) | |||
1234 | } | 1357 | } |
1235 | } | 1358 | } |
1236 | // sty = (dummy == ucFontBase) ? currentstyle : dummy; | 1359 | // sty = (dummy == ucFontBase) ? currentstyle : dummy; |
1360 | if (lastch == 10 && ch == 10 && sty.getExtraSpace() > currentstyle.getExtraSpace()) | ||
1361 | { | ||
1362 | currentstyle.setExtraSpace(sty.getExtraSpace()); | ||
1363 | } | ||
1237 | sty = currentstyle; | 1364 | sty = currentstyle; |
1238 | } | 1365 | } |
1239 | while (!isPre && (lastch == ' ' || lastch == 10 || ignorespace) && ch == ' '); | 1366 | while (!isPre && (((lastch == ' ' || lastch == 10 || ignorespace) && ch == ' ') || ((ch == 10) && (lastch == 10)))); |
1240 | // lastch = ch; | 1367 | // lastch = ch; |
1241 | lastch = ch; | 1368 | lastch = ch; |
1242 | return; | 1369 | return; |
1243 | } | 1370 | } |
1244 | 1371 | ||
1372 | QString striphtml::getTableAsHtml(unsigned long loc) | ||
1373 | { | ||
1374 | qDebug("striphtml::getTableAsHtml"); | ||
1375 | QString ret; | ||
1376 | tchar ch(0); | ||
1377 | CStyle sty; | ||
1378 | unsigned long pos; | ||
1379 | locate(loc); | ||
1380 | int endpos(0); | ||
1381 | QString endmarker("</table>"); | ||
1382 | QString startmarker("<table"); | ||
1383 | int startpos(0); | ||
1384 | int depth(0); | ||
1385 | while (ch != UEOF) | ||
1386 | { | ||
1387 | parent->getch(ch, sty, pos); | ||
1388 | QChar qc(ch); | ||
1389 | ret += qc; | ||
1390 | if (qc.lower() == endmarker[endpos]) | ||
1391 | { | ||
1392 | if ((++endpos >= endmarker.length()) && (--depth <= 0)) break; | ||
1393 | } | ||
1394 | else | ||
1395 | { | ||
1396 | endpos = 0; | ||
1397 | } | ||
1398 | if (qc.lower() == startmarker[startpos]) | ||
1399 | { | ||
1400 | if (++startpos >= startmarker.length()) ++depth; | ||
1401 | } | ||
1402 | else | ||
1403 | { | ||
1404 | startpos = 0; | ||
1405 | } | ||
1406 | } | ||
1407 | return ret; | ||
1408 | } | ||
1409 | |||
1410 | |||
1245 | extern "C" | 1411 | extern "C" |
1246 | { | 1412 | { |
1247 | CFilter* newfilter(const QString& s) { return new striphtml(s); } | 1413 | CFilter* newfilter(const QString& s) { return new striphtml(s); } |
diff --git a/noncore/apps/opie-reader/striphtml.h b/noncore/apps/opie-reader/striphtml.h index 42e2b7e..b1f7c0a 100644 --- a/noncore/apps/opie-reader/striphtml.h +++ b/noncore/apps/opie-reader/striphtml.h | |||
@@ -9,8 +9,10 @@ | |||
9 | 9 | ||
10 | class striphtml : public CFilter | 10 | class striphtml : public CFilter |
11 | { | 11 | { |
12 | void reset(); | ||
12 | bool ignorespace; | 13 | bool ignorespace; |
13 | bool m_bchm; | 14 | bool m_bchm; |
15 | int tablenesteddepth; | ||
14 | CList<CStyle> stylestack; | 16 | CList<CStyle> stylestack; |
15 | static CNavigation_base<htmlmark> m_nav; | 17 | static CNavigation_base<htmlmark> m_nav; |
16 | QMap<QString, tchar>* entmap; | 18 | QMap<QString, tchar>* entmap; |
@@ -89,5 +91,6 @@ class striphtml : public CFilter | |||
89 | bool hasnavigation() { return true; } | 91 | bool hasnavigation() { return true; } |
90 | virtual void locate(unsigned int n); | 92 | virtual void locate(unsigned int n); |
91 | void setchm(bool _b) { m_bchm = _b; } | 93 | void setchm(bool _b) { m_bchm = _b; } |
94 | QString getTableAsHtml(unsigned long loc); | ||
92 | }; | 95 | }; |
93 | #endif | 96 | #endif |
diff --git a/noncore/apps/opie-reader/update-gcc3.sh b/noncore/apps/opie-reader/update-gcc3.sh deleted file mode 100755 index f604e42..0000000 --- a/noncore/apps/opie-reader/update-gcc3.sh +++ b/dev/null | |||
@@ -1,47 +0,0 @@ | |||
1 | #!/bin/bash | ||
2 | touch infowin.cpp | ||
3 | for f in *lib.omak; do make -f $f; done | ||
4 | for f in *.omak; do make -f $f; done | ||
5 | for f in *.omak; do make -f $f; done | ||
6 | cp /home/tim/codecreader/opie-reader.desktop $QTDIR/apps/Applications/ | ||
7 | cp /home/tim/codecreader/pics/* $QTDIR/pics/opie-reader/ | ||
8 | cp /home/tim/codecreader/opie-pics/* $QTDIR/pics/opie-reader/ | ||
9 | cp HTMLentities $QTDIR/plugins/reader/data/ | ||
10 | rm $QTDIR/help/html/*reader*.html | ||
11 | cp /home/tim/codecreader/help/*.html $QTDIR/help/html/ | ||
12 | rm $QTDIR/help/html/*reader*.html | ||
13 | cp /home/tim/codecreader/help/*.html $QTDIR/help/html/ | ||
14 | rm -f $QTDIR/lib/libreader*.so | ||
15 | rm -f $QTDIR/lib/libreader*.so.1 | ||
16 | for f in $QTDIR/lib/libreader*.1.0.0 ; do mv -f $f $QTDIR/lib/`basename $f .1.0.0`.1 ; done | ||
17 | rm -f $QTDIR/lib/libreader*.so.1.* | ||
18 | |||
19 | /home/tim/bin/zstrip.sh $QTDIR/bin/reader | ||
20 | for f in $QTDIR/lib/libreader* ; do /home/tim/bin/zstrip.sh $f; done | ||
21 | |||
22 | for SUBDIR in codecs support filters | ||
23 | do | ||
24 | CDIR=$QTDIR/plugins/reader/$SUBDIR | ||
25 | rm -f $CDIR/*.so | ||
26 | for f in $CDIR/*.1.0.0 ; do mv -f $f $CDIR/`basename $f .1.0.0` ; done | ||
27 | rm -f $CDIR/*.so.* | ||
28 | for f in $CDIR/*.so ; do /home/tim/bin/zstrip.sh $f ; done | ||
29 | done | ||
30 | rm -f opie-reader-gcc3_*.ipk | ||
31 | rm -f full/opie-reader-gcc3_*.ipk | ||
32 | rm -f partial/opie-reader-gcc3_*.ipk | ||
33 | mkipks opie-reader-gcc3.control | ||
34 | cp opie-reader-gcc3_*.ipk full/ | ||
35 | for f in opie-reader-gcc3_*.ipk | ||
36 | do | ||
37 | cp $f full/`basename $f _arm.ipk`-`date +%y%m%d`_arm.ipk | ||
38 | done | ||
39 | rm $QTDIR/plugins/reader/support/libpluckerdecompress.so | ||
40 | rm $QTDIR/plugins/reader/codecs/libArriereGo.so | ||
41 | rm $QTDIR/plugins/reader/codecs/libNEF.so | ||
42 | mkipks opie-reader-gcc3.control | ||
43 | cp opie-reader-gcc3_*.ipk partial/ | ||
44 | for f in opie-reader-gcc3_*.ipk | ||
45 | do | ||
46 | cp $f partial/`basename $f _arm.ipk`-`date +%y%m%d`_arm.ipk | ||
47 | done | ||
diff --git a/noncore/apps/opie-reader/update-opie.sh b/noncore/apps/opie-reader/update-opie.sh deleted file mode 100755 index 261ef46..0000000 --- a/noncore/apps/opie-reader/update-opie.sh +++ b/dev/null | |||
@@ -1,45 +0,0 @@ | |||
1 | #!/bin/bash | ||
2 | touch infowin.cpp | ||
3 | for f in *lib.zmak; do make -f $f; done | ||
4 | for f in *.zmak; do make -f $f; done | ||
5 | for f in *.zmak; do make -f $f; done | ||
6 | cp /home/tim/codecreader/pics/* $QTDIR/pics/opie-reader/ | ||
7 | cp /home/tim/codecreader/opie-pics/* $QTDIR/pics/opie-reader/ | ||
8 | cp HTMLentities $QTDIR/plugins/reader/data/ | ||
9 | rm $QTDIR/help/html/*reader*.html | ||
10 | cp /home/tim/codecreader/help/*.html $QTDIR/help/html/ | ||
11 | rm -f $QTDIR/lib/libreader*.so | ||
12 | rm -f $QTDIR/lib/libreader*.so.1 | ||
13 | for f in $QTDIR/lib/libreader*.1.0.0 ; do mv -f $f $QTDIR/lib/`basename $f .1.0.0`.1 ; done | ||
14 | rm -f $QTDIR/lib/libreader*.so.1.* | ||
15 | |||
16 | /home/tim/bin/zstrip.sh $QTDIR/bin/uqtreader | ||
17 | rm -f $QTDIR/bin/reader | ||
18 | mv $QTDIR/bin/uqtreader $QTDIR/bin/reader | ||
19 | for f in $QTDIR/lib/libreader* ; do /home/tim/bin/zstrip.sh $f; done | ||
20 | for SUBDIR in codecs support filters | ||
21 | do | ||
22 | CDIR=$QTDIR/plugins/reader/$SUBDIR | ||
23 | rm -f $CDIR/*.so | ||
24 | for f in $CDIR/*.1.0.0 ; do mv -f $f $CDIR/`basename $f .1.0.0` ; done | ||
25 | rm -f $CDIR/*.so.* | ||
26 | for f in $CDIR/*.so ; do zstrip.sh $f ; done | ||
27 | done | ||
28 | rm -f opie-reader-opie_*.ipk | ||
29 | rm -f full/opie-reader-opie_*.ipk | ||
30 | rm -f partial/opie-reader-opie_*.ipk | ||
31 | mkipks opie-reader-opie.control | ||
32 | cp opie-reader-opie_*.ipk full/ | ||
33 | for f in opie-reader-opie_*.ipk | ||
34 | do | ||
35 | cp $f full/`basename $f _arm.ipk`-`date +%y%m%d`_arm.ipk | ||
36 | done | ||
37 | rm $QTDIR/plugins/reader/support/libpluckerdecompress.so | ||
38 | rm $QTDIR/plugins/reader/codecs/libArriereGo.so | ||
39 | rm $QTDIR/plugins/reader/codecs/libNEF.so | ||
40 | mkipks opie-reader-opie.control | ||
41 | cp opie-reader-opie_*.ipk partial/ | ||
42 | for f in opie-reader-opie_*.ipk | ||
43 | do | ||
44 | cp $f partial/`basename $f _arm.ipk`-`date +%y%m%d`_arm.ipk | ||
45 | done | ||
diff --git a/noncore/apps/opie-reader/update.sh b/noncore/apps/opie-reader/update.sh deleted file mode 100755 index 61b8a5e..0000000 --- a/noncore/apps/opie-reader/update.sh +++ b/dev/null | |||
@@ -1,47 +0,0 @@ | |||
1 | #!/bin/bash | ||
2 | touch infowin.cpp | ||
3 | for f in *lib.zmak; do make -f $f; done | ||
4 | for f in *.zmak; do make -f $f; done | ||
5 | for f in *.zmak; do make -f $f; done | ||
6 | cp /home/tim/codecreader/uqtreader*.desktop /opt/Qtopia/apps/Applications/ | ||
7 | cp /home/tim/codecreader/pics/* /opt/Qtopia/pics/opie-reader/ | ||
8 | cp /home/tim/codecreader/uqtreader*.desktop $QTDIR/apps/Applications/ | ||
9 | cp /home/tim/codecreader/opie-reader.desktop $QTDIR/apps/Applications/ | ||
10 | cp /home/tim/codecreader/pics/* $QTDIR/pics/opie-reader/ | ||
11 | cp HTMLentities $QTDIR/plugins/reader/data/ | ||
12 | rm $QTDIR/help/html/*reader*.html | ||
13 | cp /home/tim/codecreader/help/*.html $QTDIR/help/html/ | ||
14 | rm -f $QTDIR/lib/libreader*.so | ||
15 | rm -f $QTDIR/lib/libreader*.so.1 | ||
16 | for f in $QTDIR/lib/libreader*.1.0.0 ; do mv -f $f $QTDIR/lib/`basename $f .1.0.0`.1 ; done | ||
17 | rm -f $QTDIR/lib/libreader*.so.1.* | ||
18 | |||
19 | /home/tim/bin/zstrip.sh $QTDIR/bin/uqtreader | ||
20 | for f in $QTDIR/lib/libreader* ; do /home/tim/bin/zstrip.sh $f; done | ||
21 | |||
22 | for SUBDIR in codecs support filters | ||
23 | do | ||
24 | CDIR=$QTDIR/plugins/reader/$SUBDIR | ||
25 | rm -f $CDIR/*.so | ||
26 | for f in $CDIR/*.1.0.0 ; do mv -f $f $CDIR/`basename $f .1.0.0` ; done | ||
27 | rm -f $CDIR/*.so.* | ||
28 | for f in $CDIR/*.so ; do /home/tim/bin/zstrip.sh $f ; done | ||
29 | done | ||
30 | rm -f opie-reader_*.ipk | ||
31 | rm -f full/opie-reader_*.ipk | ||
32 | rm -f partial/opie-reader_*.ipk | ||
33 | mkipks opie-reader.control | ||
34 | cp opie-reader_*.ipk full/ | ||
35 | for f in opie-reader_*.ipk | ||
36 | do | ||
37 | cp $f full/`basename $f _arm.ipk`-`date +%y%m%d`_arm.ipk | ||
38 | done | ||
39 | rm $QTDIR/plugins/reader/support/libpluckerdecompress.so | ||
40 | rm $QTDIR/plugins/reader/codecs/libArriereGo.so | ||
41 | rm $QTDIR/plugins/reader/codecs/libNEF.so | ||
42 | mkipks opie-reader.control | ||
43 | cp opie-reader_*.ipk partial/ | ||
44 | for f in opie-reader_*.ipk | ||
45 | do | ||
46 | cp $f partial/`basename $f _arm.ipk`-`date +%y%m%d`_arm.ipk | ||
47 | done | ||
diff --git a/noncore/apps/opie-reader/usenef.h b/noncore/apps/opie-reader/usenef.h deleted file mode 100644 index 57898cb..0000000 --- a/noncore/apps/opie-reader/usenef.h +++ b/dev/null | |||
@@ -1,6 +0,0 @@ | |||
1 | #ifndef __USENEF_H | ||
2 | #define __USENEF_H | ||
3 | |||
4 | //#define USENEF | ||
5 | |||
6 | #endif | ||
diff --git a/noncore/apps/opie-reader/util.cpp b/noncore/apps/opie-reader/util.cpp index a736f8b..2ca1cc8 100644 --- a/noncore/apps/opie-reader/util.cpp +++ b/noncore/apps/opie-reader/util.cpp | |||
@@ -1,4 +1,5 @@ | |||
1 | #include "util.h" | 1 | #include "util.h" |
2 | #include <limits.h> | ||
2 | 3 | ||
3 | QString filesize(unsigned long l) | 4 | QString filesize(unsigned long l) |
4 | { | 5 | { |
@@ -22,8 +23,16 @@ QString percent(unsigned long pos, unsigned long len) | |||
22 | unsigned long permil = 0; | 23 | unsigned long permil = 0; |
23 | if (len != 0) | 24 | if (len != 0) |
24 | { | 25 | { |
26 | if (pos > UINT_MAX/1000) | ||
27 | { | ||
28 | unsigned long l1 = (len+500)/1000; | ||
29 | permil = (pos+l1/2)/l1; | ||
30 | } | ||
31 | else | ||
32 | { | ||
25 | permil = (1000*pos+len/2)/len; | 33 | permil = (1000*pos+len/2)/len; |
26 | } | 34 | } |
35 | } | ||
27 | unsigned long percen = permil/10; | 36 | unsigned long percen = permil/10; |
28 | unsigned long frac = permil - 10*percen; | 37 | unsigned long frac = permil - 10*percen; |
29 | return QString::number(percen) + "." + QString::number(frac); | 38 | return QString::number(percen) + "." + QString::number(frac); |
diff --git a/noncore/apps/opie-reader/util.h b/noncore/apps/opie-reader/util.h index f831ead..3964b5e 100644 --- a/noncore/apps/opie-reader/util.h +++ b/noncore/apps/opie-reader/util.h | |||
@@ -2,56 +2,8 @@ | |||
2 | #define __UTIL_H | 2 | #define __UTIL_H |
3 | 3 | ||
4 | #include <qstring.h> | 4 | #include <qstring.h> |
5 | #include <qdir.h> | ||
6 | #include <stdlib.h> | ||
7 | 5 | ||
8 | QString filesize(unsigned long l); | 6 | QString filesize(unsigned long l); |
9 | QString percent(unsigned long pos, unsigned long len); | 7 | QString percent(unsigned long pos, unsigned long len); |
10 | QString fmt(unsigned long pos, unsigned long len); | 8 | QString fmt(unsigned long pos, unsigned long len); |
11 | |||
12 | /** | ||
13 | * class with utility inline function(s) | ||
14 | * (in contrast to global functions they become available by just | ||
15 | * including util.h) | ||
16 | */ | ||
17 | class QTReaderUtil | ||
18 | { | ||
19 | public: | ||
20 | |||
21 | /** | ||
22 | * searches for a specific direcory inside OpieReader installation | ||
23 | * | ||
24 | * @param subdir name of sub directory inside installation directory which is needed | ||
25 | * @return full path name including that sub directory | ||
26 | * | ||
27 | * search order is (on all platforms): | ||
28 | * - OPIEDIR | ||
29 | * - QTDIR | ||
30 | * - READERDIR | ||
31 | */ | ||
32 | static QString getPluginPath( const char *subdir = "codecs/" ) | ||
33 | { | ||
34 | QString dirname; | ||
35 | dirname = getenv("OPIEDIR"); | ||
36 | dirname += "/plugins/reader/"; | ||
37 | dirname += subdir; | ||
38 | if (QDir(dirname).exists()) | ||
39 | return dirname; | ||
40 | |||
41 | dirname = getenv("QTDIR"); | ||
42 | dirname += "/plugins/reader/"; | ||
43 | dirname += subdir; | ||
44 | if (QDir(dirname).exists()) | ||
45 | return dirname; | ||
46 | |||
47 | dirname = getenv("READERDIR"); | ||
48 | dirname += "/"; | ||
49 | dirname += subdir; | ||
50 | if (QDir(dirname).exists()) | ||
51 | return dirname; | ||
52 | |||
53 | return ""; | ||
54 | } | ||
55 | }; | ||
56 | |||
57 | #endif | 9 | #endif |
diff --git a/noncore/apps/opie-reader/version.cpp b/noncore/apps/opie-reader/version.cpp index 9d92abe..aafb3d8 100644 --- a/noncore/apps/opie-reader/version.cpp +++ b/noncore/apps/opie-reader/version.cpp | |||
@@ -2,7 +2,33 @@ | |||
2 | #include "names.h" | 2 | #include "names.h" |
3 | #include <qmessagebox.h> | 3 | #include <qmessagebox.h> |
4 | 4 | ||
5 | bool CheckVersion(int& major, int& bkmktype, char& minor) | 5 | #include <qmultilineedit.h> |
6 | #include <qlayout.h> | ||
7 | #include <qtextview.h> | ||
8 | class versionbox : public QDialog | ||
9 | { | ||
10 | public: | ||
11 | versionbox(const QString& txt, QWidget* parent = NULL) : QDialog(parent, NULL, true) | ||
12 | { | ||
13 | setCaption(tr( "New Features" )); | ||
14 | QVBoxLayout* v = new QVBoxLayout(this); | ||
15 | /* | ||
16 | QMultiLineEdit* box = new QMultiLineEdit(this); | ||
17 | v->addWidget(box); | ||
18 | box->setReadOnly(true); | ||
19 | box->setWordWrap(QMultiLineEdit::WidgetWidth); | ||
20 | box->setText(txt); | ||
21 | */ | ||
22 | QTextView* box = new QTextView(this); | ||
23 | v->addWidget(box); | ||
24 | box->setText(txt); | ||
25 | #ifdef USEQPE | ||
26 | showMaximized(); | ||
27 | #endif | ||
28 | } | ||
29 | }; | ||
30 | |||
31 | bool CheckVersion(int& major, int& bkmktype, char& minor, QWidget* pnt) | ||
6 | { | 32 | { |
7 | if ( | 33 | if ( |
8 | (major != MAJOR) | 34 | (major != MAJOR) |
@@ -15,11 +41,18 @@ bool CheckVersion(int& major, int& bkmktype, char& minor) | |||
15 | major = MAJOR; | 41 | major = MAJOR; |
16 | bkmktype = BKMKTYPE; | 42 | bkmktype = BKMKTYPE; |
17 | minor = MINOR; | 43 | minor = MINOR; |
18 | 44 | versionbox v( | |
19 | QMessageBox::warning(NULL, PROGNAME, | 45 | "<h2>New Features</h2>" |
20 | "New Features in this version\n\n\n" | 46 | "<h3>Support for custom version of rbmake</h3>" |
21 | "Relative margin settings\n" | 47 | "<h3>Mini scrollbar now acts more like a QT scrollbar.</h3>" |
22 | "Cyrillic hyphenation"); | 48 | "<p>The handle can be dragged to jump to a \"random\" location and tapping to either side of the handle does page up/down</p>" |
49 | "<p>Line up/down is done by tapping in the margins to either end of the scroll bar (left/right margins for a horizontal scrollbar, top/bottom for a vertical scrollbar).</p>" | ||
50 | "<p>The toolbar now stays hidden if you hide it.</p>" | ||
51 | "<p>Better support for tables. Tapping on a table brings up a table viewer. The inline display of the linearised table can be toggled using the Inline Table option" | ||
52 | , | ||
53 | pnt | ||
54 | ); | ||
55 | v.exec(); | ||
23 | return true; | 56 | return true; |
24 | } | 57 | } |
25 | else | 58 | else |
diff --git a/noncore/apps/opie-reader/version.h b/noncore/apps/opie-reader/version.h index dcf0692..486d152 100644 --- a/noncore/apps/opie-reader/version.h +++ b/noncore/apps/opie-reader/version.h | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | #define MAJOR 0 | 4 | #define MAJOR 0 |
5 | #define BKMKTYPE 7 | 5 | #define BKMKTYPE 7 |
6 | #define MINOR 'g' | 6 | #define MINOR 'i' |
7 | #define RELEASE_TYPE "beta" | 7 | #define RELEASE_TYPE "beta" |
8 | 8 | ||
9 | #endif | 9 | #endif |
diff --git a/noncore/apps/opie-reader/ztxt.cpp b/noncore/apps/opie-reader/ztxt.cpp index 35db05e..e04eaa0 100644 --- a/noncore/apps/opie-reader/ztxt.cpp +++ b/noncore/apps/opie-reader/ztxt.cpp | |||
@@ -67,6 +67,7 @@ void ztxt::locate(unsigned int n) | |||
67 | 67 | ||
68 | if (hasrandomaccess()) | 68 | if (hasrandomaccess()) |
69 | { | 69 | { |
70 | unsuspend(); | ||
70 | bufferrec = n / ntohs(hdr0.recordSize) + 1; | 71 | bufferrec = n / ntohs(hdr0.recordSize) + 1; |
71 | if (bufferrec == 1) | 72 | if (bufferrec == 1) |
72 | { | 73 | { |
@@ -107,6 +108,7 @@ void ztxt::locate(unsigned int n) | |||
107 | 108 | ||
108 | void ztxt::home() | 109 | void ztxt::home() |
109 | { | 110 | { |
111 | unsuspend(); | ||
110 | if (bInit) | 112 | if (bInit) |
111 | { | 113 | { |
112 | inflateEnd(&zstream); | 114 | inflateEnd(&zstream); |
@@ -147,6 +149,7 @@ CList<Bkmk>* ztxt::getbkmklist() | |||
147 | if (recno == 0) return NULL; | 149 | if (recno == 0) return NULL; |
148 | 150 | ||
149 | CList<Bkmk>* t = new CList<Bkmk>; | 151 | CList<Bkmk>* t = new CList<Bkmk>; |
152 | unsuspend(); | ||
150 | size_t cur = ftell(fin); | 153 | size_t cur = ftell(fin); |
151 | gotorecordnumber(recno); | 154 | gotorecordnumber(recno); |
152 | for (int i = 0; i < ntohs(hdr0.numBookmarks); i++) | 155 | for (int i = 0; i < ntohs(hdr0.numBookmarks); i++) |