summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/QTReaderApp.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-reader/QTReaderApp.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/QTReaderApp.cpp1433
1 files changed, 1433 insertions, 0 deletions
diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp
new file mode 100644
index 0000000..620e93e
--- a/dev/null
+++ b/noncore/apps/opie-reader/QTReaderApp.cpp
@@ -0,0 +1,1433 @@
1/**********************************************************************
2** Copyright (C) 2000 Trolltech AS. All rights reserved.
3**
4** This file is part of Qt Palmtop Environment.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15**
16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you.
18**
19**********************************************************************/
20
21#include <qwidgetstack.h>
22#include <qpe/qpemenubar.h>
23#include <qpe/qpetoolbar.h>
24#include <qpe/fontdatabase.h>
25#include <qcombobox.h>
26#include <qpopupmenu.h>
27#include <qaction.h>
28#include <qapplication.h>
29#include <qlineedit.h>
30#include <qtoolbutton.h>
31#include <qspinbox.h>
32#include <qobjectlist.h>
33#include <qpe/global.h>
34#include <qpe/applnk.h>
35#include <qfileinfo.h>
36#include <stdlib.h> //getenv
37#include <qprogressbar.h>
38#include <qpe/config.h>
39#include <qbuttongroup.h>
40#include <qradiobutton.h>
41
42#include "cbkmkselector.h"
43#include "infowin.h"
44
45//#include <qpe/fontdatabase.h>
46
47#include <qpe/resource.h>
48#include <qpe/qpeapplication.h>
49
50#include "QTReaderApp.h"
51#include "fileBrowser.h"
52
53
54unsigned long QTReaderApp::m_uid = 0;
55
56void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); }
57
58#include <unistd.h>
59#include <stddef.h>
60#include <dirent.h>
61
62void QTReaderApp::listBkmkFiles()
63{
64 bkmkselector->clear();
65 int cnt = 0;
66 DIR *d;
67 d = opendir((const char *)Global::applicationFileName("uqtreader",""));
68
69 while(1)
70 {
71 struct dirent* de;
72 struct stat buf;
73 de = readdir(d);
74 if (de == NULL) break;
75
76 if (lstat((const char *)Global::applicationFileName("uqtreader",de->d_name),&buf) == 0 && S_ISREG(buf.st_mode))
77 {
78 bkmkselector->insertItem(de->d_name);
79 cnt++;
80 }
81 }
82
83 closedir(d);
84
85 if (cnt > 0)
86 {
87 menu->hide();
88 editBar->hide();
89 if (m_fontVisible) m_fontBar->hide();
90 if (regVisible) regBar->hide();
91 if (searchVisible) searchBar->hide();
92 m_nRegAction = cRmBkmkFile;
93 editorStack->raiseWidget( bkmkselector );
94 }
95 else
96 QMessageBox::information(this, "QTReader", "No bookmark files");
97}
98
99QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
100 : QMainWindow( parent, name, f ), bFromDocView( FALSE )
101{
102// qDebug("Application directory = %s", (const tchar *)QPEApplication::documentDir());
103// qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml"));
104
105 pBkmklist = NULL;
106 doc = 0;
107
108 m_fBkmksChanged = false;
109
110 QString lang = getenv( "LANG" );
111
112 m_autogenstr = "^ *[A-Z].*[a-z] *$";
113 setToolBarsMovable( FALSE );
114
115 setIcon( Resource::loadPixmap( "uqtreader" ) );
116
117 QPEToolBar *bar = new QPEToolBar( this );
118 bar->setHorizontalStretchable( TRUE );
119 addToolBar(bar, "tool",QMainWindow::Top, true);
120 menu = bar;
121
122 QPEMenuBar *mb = new QPEMenuBar( bar );
123 QPopupMenu *file = new QPopupMenu( this );
124 QPopupMenu *format = new QPopupMenu( this );
125 // QPopupMenu *edit = new QPopupMenu( this );
126
127// bar = new QToolBar( this );
128 editBar = bar;
129
130 /*
131 QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
132 connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
133 a->addTo( bar );
134 a->addTo( file );
135 */
136
137 editorStack = new QWidgetStack( this );
138 setCentralWidget( editorStack );
139
140 searchVisible = FALSE;
141 regVisible = FALSE;
142 m_fontVisible = false;
143
144 pbar = new QProgressBar(this);
145 pbar->hide();
146
147 m_infoWin = new infowin(editorStack);
148 editorStack->addWidget(m_infoWin, get_unique_id());
149 connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) );
150
151// bkmkselector = new QListBox(editorStack, "Bookmarks");
152 bkmkselector = new CBkmkSelector(editorStack, "Bookmarks");
153 // connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) );
154 connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) );
155 connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) );
156 editorStack->addWidget( bkmkselector, get_unique_id() );
157
158/*
159 importSelector = new FileSelector( "*", editorStack, "importselector", false );
160 connect( importSelector, SIGNAL( fileSelected( const DocLnk &) ), this, SLOT( importFile( const DocLnk & ) ) );
161
162 editorStack->addWidget( importSelector, get_unique_id() );
163
164 // don't need the close visible, it is redundant...
165 importSelector->setCloseVisible( FALSE );
166*/
167
168 reader = new QTReader( editorStack );
169 Config config( "uqtreader" );
170 config.setGroup( "View" );
171
172 reader->bstripcr = config.readBoolEntry( "StripCr", true );
173 reader->bstriphtml = config.readBoolEntry( "StripHtml", false );
174 reader->bdehyphen = config.readBoolEntry( "Dehyphen", false );
175 reader->bunindent = config.readBoolEntry( "Unindent", false );
176 reader->brepara = config.readBoolEntry( "Repara", false );
177 reader->bdblspce = config.readBoolEntry( "DoubleSpace", false );
178 reader->bindenter = config.readNumEntry( "Indent", 0 );
179 reader->m_textsize = config.readNumEntry( "FontSize", 12 );
180 reader->m_bBold = config.readBoolEntry( "Bold", false );
181 reader->m_delay = config.readNumEntry( "ScrollDelay", 5184);
182 reader->m_lastfile = config.readEntry( "LastFile", QString::null );
183 reader->m_lastposn = config.readNumEntry( "LastPosn", 0 );
184 reader->m_bpagemode = config.readBoolEntry( "PageMode", true );
185 reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false);
186 reader->m_fontname = config.readEntry( "Fontname", "helvetica" );
187 reader->m_encd = config.readNumEntry( "Encoding", 0 );
188 reader->m_charpc = config.readNumEntry( "CharSpacing", 100 );
189 reader->m_overlap = config.readNumEntry( "Overlap", 0 );
190 reader->m_targetapp = config.readEntry( "TargetApp", QString::null );
191 reader->m_targetmsg = config.readEntry( "TargetMsg", QString::null );
192 reader->init();
193 editorStack->addWidget( reader, get_unique_id() );
194
195 QAction *a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 );
196 connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) );
197 a->addTo( bar );
198 a->addTo( file );
199
200 /*
201 a = new QAction( tr( "Revert" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
202 connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) );
203 a->addTo( file );
204
205 a = new QAction( tr( "Cut" ), Resource::loadPixmap( "cut" ), QString::null, 0, this, 0 );
206 connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) );
207 a->addTo( editBar );
208 a->addTo( edit );
209 */
210
211 a = new QAction( tr( "Info" ), QString::null, 0, this, NULL);
212 connect( a, SIGNAL( activated() ), this, SLOT( showinfo() ) );
213 a->addTo( file );
214
215 a = new QAction( tr( "Start Block" ), QString::null, 0, this, NULL);
216 connect( a, SIGNAL( activated() ), this, SLOT( editMark() ) );
217 file->insertSeparator();
218 a->addTo( file );
219
220 a = new QAction( tr( "Copy Block" ), QString::null, 0, this, NULL);
221 connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) );
222 a->addTo( file );
223
224 a = m_scrollButton = new QAction( tr( "Scroll" ), Resource::loadPixmap( "panel-arrow-down" ), QString::null, 0, this, 0, true );
225// connect( a, SIGNAL( activated() ), this, SLOT( autoScroll() ) );
226 a->setOn(false);
227 connect( a, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) );
228 file->insertSeparator();
229 a->addTo( bar );
230 a->addTo( file );
231
232 /*
233 a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true );
234 // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
235 a->addTo( file );
236
237 a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true );
238 // connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
239 a->addTo( file );
240 */
241 a = new QAction( tr( "Jump" ), QString::null, 0, this, NULL);
242 connect( a, SIGNAL( activated() ), this, SLOT( jump() ) );
243 a->addTo( file );
244
245 a = new QAction( tr( "Page/Line scroll" ), QString::null, 0, this, NULL, true );
246 connect( a, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) );
247 a->setOn(reader->m_bpagemode);
248 a->addTo( file );
249
250 a = new QAction( tr( "Set Overlap" ), QString::null, 0, this, NULL);
251 connect( a, SIGNAL( activated() ), this, SLOT( setoverlap() ) );
252 a->addTo( file );
253
254 a = new QAction( tr( "Set Dictionary" ), QString::null, 0, this, NULL);
255 connect( a, SIGNAL( activated() ), this, SLOT( settarget() ) );
256 a->addTo( file );
257
258/*
259 a = new QAction( tr( "Import" ), QString::null, 0, this, NULL );
260 connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) );
261 a->addTo( file );
262*/
263
264 a = new QAction( tr( "Up" ), Resource::loadPixmap( "up" ), QString::null, 0, this, 0 );
265 connect( a, SIGNAL( activated() ), this, SLOT( pageup() ) );
266 a->addTo( editBar );
267
268 a = new QAction( tr( "Down" ), Resource::loadPixmap( "down" ), QString::null, 0, this, 0 );
269 connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
270 a->addTo( editBar );
271
272 /*
273 a = new QAction( tr( "Paste" ), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 );
274 connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) );
275 a->addTo( editBar );
276 a->addTo( edit );
277 */
278
279 a = new QAction( tr( "Find..." ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 );
280 connect( a, SIGNAL( activated() ), this, SLOT( editFind() ) );
281 file->insertSeparator();
282 a->addTo( bar );
283 a->addTo( file );
284
285
286 a = new QAction( tr( "Strip CR" ), QString::null, 0, this, NULL, true );
287 a->setOn(reader->bstripcr);
288 connect( a, SIGNAL( toggled(bool) ), this, SLOT( stripcr(bool) ) );
289 a->addTo( format );
290 // a->setOn(true);
291
292 a = new QAction( tr( "Strip HTML" ), QString::null, 0, this, NULL, true );
293 a->setOn(reader->bstriphtml);
294 connect( a, SIGNAL( toggled(bool) ), this, SLOT( striphtml(bool) ) );
295 a->addTo( format );
296
297 a = new QAction( tr( "Dehyphen" ), QString::null, 0, this, NULL, true );
298 a->setOn(reader->bdehyphen);
299 connect( a, SIGNAL( toggled(bool) ), this, SLOT( dehyphen(bool) ) );
300 a->addTo( format );
301
302 a = new QAction( tr( "Unindent" ), QString::null, 0, this, NULL, true );
303 connect( a, SIGNAL( toggled(bool) ), this, SLOT( unindent(bool) ) );
304 a->setOn(reader->bunindent);
305 a->addTo( format );
306
307 a = new QAction( tr( "Re-paragraph" ), QString::null, 0, this, NULL, true );
308 connect( a, SIGNAL( toggled(bool) ), this, SLOT( repara(bool) ) );
309 a->setOn(reader->brepara);
310 a->addTo( format );
311
312 a = new QAction( tr( "Double Space" ), QString::null, 0, this, NULL, true );
313 connect( a, SIGNAL( toggled(bool) ), this, SLOT( dblspce(bool) ) );
314 a->setOn(reader->bdblspce);
315 a->addTo( format );
316
317 a = new QAction( tr( "Indent+" ), QString::null, 0, this, NULL );
318 connect( a, SIGNAL( activated() ), this, SLOT( indentplus() ) );
319 a->addTo( format );
320
321 a = new QAction( tr( "Indent-" ), QString::null, 0, this, NULL );
322 connect( a, SIGNAL( activated() ), this, SLOT( indentminus() ) );
323 a->addTo( format );
324
325 a = new QAction( tr( "Bold" ), QString::null, 0, this, NULL, true );
326 a->setOn(reader->m_bBold);
327 connect( a, SIGNAL( toggled(bool) ), this, SLOT( setbold(bool) ) );
328 a->addTo( format );
329
330 // a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true );
331 // a = new QAction( tr( "Zoom" ), Resource::loadPixmap( "mag" ), QString::null, 0, this, 0 );
332 a = new QAction( tr( "Zoom" ), QString::null, 0, this);
333 connect( a, SIGNAL( activated() ), this, SLOT( TBDzoom() ) );
334 format->insertSeparator();
335 a->addTo( format );
336 // a->addTo( editBar );
337
338
339 a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true );
340 connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) );
341 a->setOn(reader->m_bMonoSpaced);
342 format->insertSeparator();
343 a->addTo( format );
344
345 a = new QAction( tr( "Set width" ), QString::null, 0, this, NULL);
346 connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) );
347 a->addTo( format );
348
349 QPopupMenu *encoding = new QPopupMenu(this);
350 format->insertSeparator();
351 format->insertItem( tr( "Encoding" ), encoding );
352
353 QActionGroup* ag = new QActionGroup(this);
354
355 m_EncodingAction[0] = new QAction( tr( "Ascii" ), QString::null, 0, ag, NULL, true );
356
357 m_EncodingAction[1] = new QAction( tr( "UTF-8" ), QString::null, 0, ag, NULL, true );
358
359 m_EncodingAction[2] = new QAction( tr( "UCS-2(BE)" ), QString::null, 0, ag, NULL, true );
360
361 m_EncodingAction[3] = new QAction( tr( "USC-2(LE)" ), QString::null, 0, ag, NULL, true );
362
363 m_EncodingAction[4] = new QAction( tr( "Palm" ), QString::null, 0, ag, NULL, true );
364
365 m_EncodingAction[5] = new QAction( tr( "Windows(1252)" ), QString::null, 0, ag, NULL, true );
366
367 ag->addTo(encoding);
368
369 connect(ag, SIGNAL( selected(QAction*) ), this, SLOT( encodingSelected(QAction*) ) );
370
371 a = new QAction( tr( "Set Font" ), QString::null, 0, this);
372 connect( a, SIGNAL( activated() ), this, SLOT( setfont() ) );
373 format->insertSeparator();
374 a->addTo( format );
375
376 QPopupMenu *marks = new QPopupMenu( this );
377
378 a = new QAction( tr( "Mark" ), QString::null, 0, this, NULL);
379 connect( a, SIGNAL( activated() ), this, SLOT( addbkmk() ) );
380 a->addTo( marks );
381
382 a = new QAction( tr( "Goto" ), QString::null, 0, this, NULL, false );
383 connect( a, SIGNAL( activated() ), this, SLOT( do_gotomark() ) );
384 a->addTo( marks );
385
386 a = new QAction( tr( "Delete" ), QString::null, 0, this, NULL);
387 connect( a, SIGNAL( activated() ), this, SLOT( do_delmark() ) );
388 a->addTo( marks );
389
390 a = new QAction( tr( "Autogen" ), QString::null, 0, this, NULL, false );
391 connect( a, SIGNAL( activated() ), this, SLOT( do_autogen() ) );
392 marks->insertSeparator();
393 a->addTo( marks );
394
395 a = new QAction( tr( "Clear" ), QString::null, 0, this, NULL);
396 connect( a, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) );
397 a->addTo( marks );
398
399 a = new QAction( tr( "Save" ), QString::null, 0, this, NULL );
400 connect( a, SIGNAL( activated() ), this, SLOT( savebkmks() ) );
401 a->addTo( marks );
402
403 a = new QAction( tr( "Tidy" ), QString::null, 0, this, NULL);
404 connect( a, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) );
405 marks->insertSeparator();
406 a->addTo( marks );
407
408 mb->insertItem( tr( "File" ), file );
409 // mb->insertItem( tr( "Edit" ), edit );
410 mb->insertItem( tr( "Format" ), format );
411 mb->insertItem( tr( "Marks" ), marks );
412
413 searchBar = new QToolBar( "Search", this, QMainWindow::Top, TRUE );
414
415 searchBar->setHorizontalStretchable( TRUE );
416
417 searchEdit = new QLineEdit( searchBar, "searchEdit" );
418// QFont f("unifont", 16 /*, QFont::Bold*/);
419// searchEdit->setFont( f );
420 searchBar->setStretchableWidget( searchEdit );
421#ifdef __ISEARCH
422 connect( searchEdit, SIGNAL( textChanged( const QString & ) ),
423 this, SLOT( search( const QString& ) ) );
424#else
425 connect( searchEdit, SIGNAL( returnPressed( ) ),
426 this, SLOT( search( ) ) );
427#endif
428 a = new QAction( tr( "Find Next" ), Resource::loadPixmap( "next" ), QString::null, 0, this, 0 );
429 connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) );
430 a->addTo( searchBar );
431
432 a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
433 connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) );
434 a->addTo( searchBar );
435
436 searchBar->hide();
437
438 regBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE );
439
440 regBar->setHorizontalStretchable( TRUE );
441
442 regEdit = new QLineEdit( regBar, "regEdit" );
443// regEdit->setFont( f );
444
445 regBar->setStretchableWidget( regEdit );
446
447 connect( regEdit, SIGNAL( returnPressed( ) ),
448 this, SLOT( do_regaction() ) );
449
450 a = new QAction( tr( "Do Reg" ), Resource::loadPixmap( "enter" ), QString::null, 0, this, 0 );
451 connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) );
452 a->addTo( regBar );
453
454 a = new QAction( tr( "Close Edit" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 );
455 connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) );
456 a->addTo( regBar );
457
458 regBar->hide();
459
460 m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE );
461
462 m_fontBar->setHorizontalStretchable( TRUE );
463
464 m_fontSelector = new QComboBox(false, m_fontBar);
465 m_fontBar->setStretchableWidget( m_fontSelector );
466 {
467 FontDatabase f;
468 m_fontSelector->insertStringList(f.families());
469 } // delete the FontDatabase!!!
470 connect( m_fontSelector, SIGNAL( activated(const QString& ) ),
471 this, SLOT( do_setfont(const QString&) ) );
472
473 m_fontBar->hide();
474 m_fontVisible = false;
475
476 connect(qApp, SIGNAL( appMessage(const QCString&, const QByteArray& ) ),
477 this, SLOT( msgHandler(const QCString&, const QByteArray&) ) );
478
479
480 if (!reader->m_lastfile.isEmpty())
481 {
482 openFile( reader->m_lastfile );
483 doc = new DocLnk(reader->m_lastfile);
484 }
485 m_EncodingAction[reader->m_encd]->setOn(true);
486 do_setfont(reader->m_fontname);
487}
488
489void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data)
490{
491 QString msg = QString::fromUtf8(_msg);
492
493// qDebug("Received:%s", (const char*)msg);
494
495 QDataStream stream( _data, IO_ReadOnly );
496 if ( msg == "info(QString)" )
497 {
498 QString info;
499 stream >> info;
500 QMessageBox::information(this, "QTReader", info);
501 } else if ( msg == "warn(QString)" )
502 {
503 QString info;
504 stream >> info;
505 QMessageBox::warning(this, "QTReader", info);
506 }
507}
508
509int QTReaderApp::EncNameToInt(const QString& _enc)
510{
511 for (int i = 0; i < MAX_ENCODING; i++)
512 {
513 if (m_EncodingAction[i]->text() == _enc) return i;
514 }
515 return 0;
516/*
517 if (_enc == "Ascii") return 0;
518 if (_enc == "UTF-8") return 1;
519 if (_enc == "UCS-2(BE)") return 2;
520 if (_enc == "USC-2(LE)") return 3;
521*/
522}
523
524void QTReaderApp::encodingSelected(QAction* _a)
525{
526// qDebug("es:%x : %s", _a, (const char *)(_a->text()));
527 reader->setencoding(EncNameToInt(_a->text()));
528}
529
530QTReaderApp::~QTReaderApp()
531{
532}
533
534void QTReaderApp::autoScroll(bool _b)
535{
536 reader->setautoscroll(_b);
537}
538
539void QTReaderApp::TBD()
540{
541 QMessageBox::information(this, "QTReader", "Not yet implemented", 1);
542}
543
544void QTReaderApp::TBDzoom()
545{
546 QMessageBox::information(this, "QTReader", "Zooming is done interactively\nTry left/right cursor keys", 1);
547}
548
549void QTReaderApp::clearBkmkList()
550{
551 delete pBkmklist;
552 pBkmklist = NULL;
553 m_fBkmksChanged = false;
554}
555
556void QTReaderApp::fileOpen()
557{
558/*
559 menu->hide();
560 editBar->hide();
561 if (regVisible) regBar->hide();
562 if (searchVisible) searchBar->hide();
563*/
564 if (pBkmklist != NULL)
565 {
566 if (m_fBkmksChanged)
567 {
568 if (QMessageBox::warning(this, "QTReader", "Save bookmarks?", "Save", "Don't bother") == 0)
569 savebkmks();
570 }
571 delete pBkmklist;
572 pBkmklist = NULL;
573 m_fBkmksChanged = false;
574 }
575 reader->disableAutoscroll();
576/*
577 editorStack->raiseWidget( fileSelector );
578 fileSelector->reread();
579*/
580 fileBrowser* fb = new fileBrowser(this,"QTReader",TRUE,
581 0,
582 // WStyle_Customize | WStyle_NoBorderEx,
583 "*", QFileInfo(reader->m_lastfile).dirPath(true));
584
585 if (fb->exec())
586 {
587 QString fn(fb->fileList[0]);
588// fb->populateList();
589 if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn);
590 }
591 delete fb;
592}
593
594void QTReaderApp::showinfo()
595{
596 unsigned long fs, ts, pl;
597 if (reader->empty())
598 {
599 QMessageBox::information(this, "QTReader", "No file loaded", 1);
600 }
601 else
602 {
603 reader->sizes(fs,ts);
604 pl = reader->pagelocate();
605 m_infoWin->setFileSize(fs);
606 m_infoWin->setTextSize(ts);
607 m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts);
608 m_infoWin->setLocation(pl);
609 m_infoWin->setRead((100*pl + (ts >> 1))/ts);
610 editorStack->raiseWidget( m_infoWin );
611 m_infoWin->setFocus();
612 }
613}
614
615void QTReaderApp::infoClose()
616{
617 showEditTools();
618}
619
620/*
621void QTReaderApp::fileRevert()
622{
623 clear();
624 fileOpen();
625}
626
627void QTReaderApp::editCut()
628{
629#ifndef QT_NO_CLIPBOARD
630 editor->cut();
631#endif
632}
633*/
634void QTReaderApp::editMark()
635{
636 m_savedpos = reader->pagelocate();
637}
638
639void QTReaderApp::editCopy()
640{
641 QClipboard* cb = QApplication::clipboard();
642 QString text;
643 int ch;
644 unsigned long currentpos = reader->pagelocate();
645 unsigned long endpos = reader->locate();
646 reader->jumpto(m_savedpos);
647 while (reader->locate() < endpos && (ch = reader->getch()) != UEOF)
648 {
649 text += ch;
650 }
651 cb->setText(text);
652 //text = cb->text();
653 //if (text)
654 // qDebug("The clipboard contains: %s", (const tchar*)text);
655 reader->locate(currentpos);
656#ifndef QT_NO_CLIPBOARD
657// TBD();
658 // reader->copy();
659#endif
660}
661
662void QTReaderApp::pageup()
663{
664 reader->goUp();
665}
666
667void QTReaderApp::pagedn()
668{
669 reader->goDown();
670}
671
672void QTReaderApp::stripcr(bool _b)
673{
674 reader->setstripcr(_b);
675}
676void QTReaderApp::striphtml(bool _b)
677{
678 reader->setstriphtml(_b);
679}
680void QTReaderApp::dehyphen(bool _b)
681{
682 reader->setdehyphen(_b);
683}
684void QTReaderApp::unindent(bool _b)
685{
686 reader->setunindent(_b);
687}
688void QTReaderApp::repara(bool _b)
689{
690 reader->setrepara(_b);
691}
692void QTReaderApp::setbold(bool _b)
693{
694 reader->m_bBold = _b;
695 reader->ChangeFont(reader->fontsizes[reader->m_textsize]);
696 reader->refresh();
697}
698void QTReaderApp::dblspce(bool _b)
699{
700 reader->setdblspce(_b);
701}
702void QTReaderApp::pagemode(bool _b)
703{
704 reader->setpagemode(_b);
705}
706
707void QTReaderApp::monospace(bool _b)
708{
709 reader->setmono(_b);
710}
711
712void QTReaderApp::setspacing()
713{
714 m_nRegAction = cMonoSpace;
715 char lcn[20];
716 sprintf(lcn, "%lu", reader->m_charpc);
717 regEdit->setText(lcn);
718 do_regedit();
719}
720
721void QTReaderApp::setoverlap()
722{
723 m_nRegAction = cOverlap;
724 char lcn[20];
725 sprintf(lcn, "%lu", reader->m_overlap);
726 regEdit->setText(lcn);
727 do_regedit();
728}
729
730void QTReaderApp::settarget()
731{
732 m_nRegAction = cSetTarget;
733 QString text = ((reader->m_targetapp.isEmpty()) ? QString("") : reader->m_targetapp)
734 + "/"
735 + ((reader->m_targetmsg.isEmpty()) ? QString("") : reader->m_targetmsg);
736 regEdit->setText(text);
737 do_regedit();
738}
739
740void QTReaderApp::do_overlap(const QString& lcn)
741{
742 bool ok;
743 unsigned long ulcn = lcn.toULong(&ok);
744 if (ok)
745 {
746 reader->m_overlap = ulcn;
747 }
748 else
749 QMessageBox::information(this, "QTReader", "Must be a number");
750}
751
752void QTReaderApp::do_mono(const QString& lcn)
753{
754 bool ok;
755 unsigned long ulcn = lcn.toULong(&ok);
756 if (ok)
757 {
758 reader->m_charpc = ulcn;
759 //reader->setmono(true);
760 }
761 else
762 QMessageBox::information(this, "QTReader", "Must be a number");
763}
764
765/*
766void QTReaderApp::editPaste()
767{
768#ifndef QT_NO_CLIPBOARD
769 editor->paste();
770#endif
771}
772*/
773
774void QTReaderApp::editFind()
775{
776 searchStart = reader->pagelocate();
777#ifdef __ISEARCH
778 searchStack = new QStack<searchrecord>;
779#endif
780 searchBar->show();
781 searchVisible = TRUE;
782 searchEdit->setFocus();
783#ifdef __ISEARCH
784 searchStack->push(new searchrecord("",reader->pagelocate()));
785#endif
786}
787
788void QTReaderApp::findNext()
789{
790 // qDebug("findNext called\n");
791#ifdef __ISEARCH
792 QString arg = searchEdit->text();
793#else
794 QRegExp arg = searchEdit->text();
795#endif
796 CBuffer test;
797 size_t start = reader->pagelocate();
798 reader->jumpto(start);
799 reader->buffdoc.getline(&test,reader->width());
800 dosearch(start, test, arg);
801}
802
803void QTReaderApp::findClose()
804{
805 searchVisible = FALSE;
806 searchEdit->setText("");
807 searchBar->hide();
808#ifdef __ISEARCH
809// searchStack = new QStack<searchrecord>;
810 while (!searchStack->isEmpty())
811 {
812 delete searchStack->pop();
813 }
814 delete searchStack;
815#endif
816 reader->setFocus();
817}
818
819void QTReaderApp::regClose()
820{
821 regVisible = FALSE;
822 regEdit->setText("");
823 regBar->hide();
824 reader->setFocus();
825}
826
827#ifdef __ISEARCH
828bool QTReaderApp::dosearch(size_t start, CBuffer& test, const QString& arg)
829#else
830bool QTReaderApp::dosearch(size_t start, CBuffer& test, const QRegExp& arg)
831#endif
832{
833 bool ret = true;
834 size_t pos = start;
835 reader->buffdoc.getline(&test,reader->width());
836#ifdef __ISEARCH
837 while (strstr(test.data(),(const tchar*)arg) == NULL)
838#else
839#ifdef _UNICODE
840 while (arg.match(toQString(test.data())) == -1)
841#else
842 while (arg.match(test.data()) == -1)
843#endif
844#endif
845 {
846 pos = reader->locate();
847 if (!reader->buffdoc.getline(&test,reader->width()))
848 {
849 if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2)
850 pos = searchStart;
851 else
852 pos = start;
853 ret = false;
854 findClose();
855 break;
856 }
857 }
858 reader->locate(pos);
859 return ret;
860}
861
862#ifdef __ISEARCH
863void QTReaderApp::search(const QString & arg)
864{
865 searchrecord* ss = searchStack->top();
866 CBuffer test;
867 size_t start = reader->pagelocate();
868 bool haspopped = false;
869 while (arg.left(ss->s.length()) != ss->s)
870 {
871 haspopped = true;
872 start = ss->pos;
873// reader->locate(start);
874 searchStack->pop();
875 delete ss;
876 }
877 if (haspopped) reader->locate(start);
878/*
879 if (arg.length() < ss->len)
880 {
881 start = ss->pos;
882 reader->locate(start);
883 searchStack->pop();
884 delete ss;
885 }
886*/
887 else
888 {
889 start = reader->pagelocate();
890 reader->jumpto(start);
891 searchStack->push(new searchrecord(arg,start));
892 }
893 dosearch(start, test, arg);
894}
895#else
896void QTReaderApp::search()
897{
898 QRegExp arg = searchEdit->text();
899 CBuffer test;
900 size_t start = reader->pagelocate();
901// reader->jumpto(start);
902 dosearch(start, test, arg);
903}
904#endif
905
906void QTReaderApp::openFile( const QString &f )
907{
908 openFile(DocLnk(f));
909}
910
911void QTReaderApp::openFile( const DocLnk &f )
912{
913 clear();
914 FileManager fm;
915 if ( fm.exists( f ) )
916 {
917// QMessageBox::information(0, "Progress", "Calling fileNew()");
918
919 clear();
920
921 // editorStack->raiseWidget( reader );
922
923 // reader->setFocus();
924
925 // QMessageBox::information(0, "DocLnk", "Begin");
926 doc = new DocLnk(f);
927 // QMessageBox::information(0, "DocLnk done", doc->file());
928 // QMessageBox::information(0, "Progress", "Calling setText()");
929 // QMessageBox::information(0, "Progress", "Textset");
930
931 // updateCaption();
932 showEditTools();
933 reader->setText(doc->name(), doc->file());
934 readbkmks();
935 }
936 else
937 {
938 QMessageBox::information(this, "QTReader", "File does not exist");
939 }
940
941}
942
943void QTReaderApp::showEditTools()
944{
945 if ( !doc )
946 close();
947// fileSelector->hide();
948 menu->show();
949 editBar->show();
950 if ( searchVisible )
951 searchBar->show();
952 if ( regVisible )
953 regBar->show();
954 if (m_fontVisible) m_fontBar->show();
955
956 updateCaption();
957 editorStack->raiseWidget( reader );
958 reader->setFocus();
959}
960/*
961void QTReaderApp::save()
962{
963 if ( !doc )
964 return;
965 if ( !editor->edited() )
966 return;
967
968 QString rt = editor->text();
969 QString pt = rt;
970
971 if ( doc->name().isEmpty() ) {
972 unsigned ispace = pt.find( ' ' );
973 unsigned ienter = pt.find( '\n' );
974 int i = (ispace < ienter) ? ispace : ienter;
975 QString docname;
976 if ( i == -1 ) {
977 if ( pt.isEmpty() )
978 docname = "Empty Text";
979 else
980 docname = pt;
981 } else {
982 docname = pt.left( i );
983 }
984 doc->setName(docname);
985 }
986 FileManager fm;
987 fm.saveFile( *doc, rt );
988}
989*/
990
991void QTReaderApp::clear()
992{
993 if (doc != 0)
994 {
995// QMessageBox::information(this, "QTReader", "Deleting doc", 1);
996 delete doc;
997// QMessageBox::information(this, "QTReader", "Deleted doc", 1);
998 doc = 0;
999 }
1000 reader->clear();
1001}
1002
1003void QTReaderApp::updateCaption()
1004{
1005 if ( !doc )
1006 setCaption( tr("QTReader") );
1007 else {
1008 QString s = doc->name();
1009 if ( s.isEmpty() )
1010 s = tr( "Unnamed" );
1011 setCaption( s + " - " + tr("QTReader") );
1012 }
1013}
1014
1015void QTReaderApp::setDocument(const QString& fileref)
1016{
1017 bFromDocView = TRUE;
1018//QMessageBox::information(0, "setDocument", fileref);
1019 openFile(DocLnk(fileref));
1020// showEditTools();
1021}
1022
1023void QTReaderApp::closeEvent( QCloseEvent *e )
1024{
1025 if (editorStack->visibleWidget() == reader)
1026 {
1027 if (m_fontVisible)
1028 {
1029 m_fontBar->hide();
1030 m_fontVisible = false;
1031 }
1032 if (regVisible)
1033 {
1034 regBar->hide();
1035 regVisible = false;
1036 return;
1037 }
1038 if (searchVisible)
1039 {
1040 searchBar->hide();
1041 searchVisible = false;
1042 return;
1043 }
1044 if (m_fBkmksChanged && pBkmklist != NULL)
1045 {
1046 if (QMessageBox::warning(this, "QTReader", "Save bookmarks?", "Save", "Don't bother") == 0)
1047 savebkmks();
1048 delete pBkmklist;
1049 pBkmklist = NULL;
1050 m_fBkmksChanged = false;
1051 }
1052 bFromDocView = FALSE;
1053 saveprefs();
1054 e->accept();
1055 }
1056 else
1057 {
1058 showEditTools();
1059 }
1060}
1061
1062void QTReaderApp::do_gotomark()
1063{
1064 m_nRegAction = cGotoBkmk;
1065 listbkmk();
1066}
1067
1068void QTReaderApp::do_delmark()
1069{
1070 m_nRegAction = cDelBkmk;
1071 listbkmk();
1072}
1073
1074void QTReaderApp::listbkmk()
1075{
1076 bkmkselector->clear();
1077 int cnt = 0;
1078 if (pBkmklist != NULL)
1079 {
1080 if (m_fBkmksChanged) pBkmklist->sort();
1081 for (CList<Bkmk>::iterator i = pBkmklist->begin(); i != pBkmklist->end(); i++)
1082 {
1083#ifdef _UNICODE
1084 bkmkselector->insertItem(toQString(i->name()));
1085#else
1086 bkmkselector->insertItem(i->name());
1087#endif
1088 cnt++;
1089 }
1090 }
1091 if (cnt > 0)
1092 {
1093 menu->hide();
1094 editBar->hide();
1095 if (m_fontVisible) m_fontBar->hide();
1096 if (regVisible) regBar->hide();
1097 if (searchVisible) searchBar->hide();
1098 editorStack->raiseWidget( bkmkselector );
1099 }
1100 else
1101 QMessageBox::information(this, "QTReader", "No bookmarks in memory");
1102}
1103
1104void QTReaderApp::do_autogen()
1105{
1106 m_nRegAction = cAutoGen;
1107 regEdit->setText(m_autogenstr);
1108 do_regedit();
1109}
1110
1111void QTReaderApp::do_regedit()
1112{
1113// editBar->hide();
1114 regBar->show();
1115 regVisible = true;
1116 regEdit->setFocus();
1117}
1118
1119void QTReaderApp::gotobkmk(int ind)
1120{
1121 switch (m_nRegAction)
1122 {
1123 case cGotoBkmk:
1124 reader->locate((*pBkmklist)[ind]->value());
1125 break;
1126 case cDelBkmk:
1127 // qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name());
1128 pBkmklist->erase(ind);
1129 m_fBkmksChanged = true;
1130 break;
1131 case cRmBkmkFile:
1132 unlink((const char *)Global::applicationFileName("uqtreader",bkmkselector->text(ind)));
1133 break;
1134 }
1135 showEditTools();
1136}
1137
1138void QTReaderApp::cancelbkmk()
1139{
1140 showEditTools();
1141}
1142
1143void QTReaderApp::jump()
1144{
1145 m_nRegAction = cJump;
1146 char lcn[20];
1147 sprintf(lcn, "%lu", reader->pagelocate());
1148 regEdit->setText(lcn);
1149 do_regedit();
1150}
1151
1152void QTReaderApp::do_jump(const QString& lcn)
1153{
1154 bool ok;
1155 unsigned long ulcn = lcn.toULong(&ok);
1156 if (ok)
1157 reader->locate(ulcn);
1158 else
1159 QMessageBox::information(this, "QTReader", "Must be a number");
1160}
1161
1162void QTReaderApp::do_regaction()
1163{
1164 regBar->hide();
1165 regVisible = false;
1166 switch(m_nRegAction)
1167 {
1168 case cAutoGen:
1169 do_autogen(regEdit->text());
1170 break;
1171 case cAddBkmk:
1172 do_addbkmk(regEdit->text());
1173 break;
1174 case cJump:
1175 do_jump(regEdit->text());
1176 break;
1177 case cMonoSpace:
1178 do_mono(regEdit->text());
1179 break;
1180 case cOverlap:
1181 do_overlap(regEdit->text());
1182 break;
1183 case cSetTarget:
1184 do_settarget(regEdit->text());
1185 break;
1186 }
1187 reader->restore();
1188// editBar->show();
1189 reader->setFocus();
1190}
1191
1192void QTReaderApp::do_settarget(const QString& _txt)
1193{
1194 int ind = _txt.find('/');
1195 if (ind == -1)
1196 {
1197 reader->m_targetapp = "";
1198 reader->m_targetmsg = "";
1199 QMessageBox::information(this, "QTReader", "Format is\nappname/messagename");
1200 }
1201 else
1202 {
1203 reader->m_targetapp = _txt.left(ind);
1204 reader->m_targetmsg = _txt.right(_txt.length()-ind-1);
1205 }
1206}
1207
1208void QTReaderApp::setfont()
1209{
1210 for (int i = 1; i <= m_fontSelector->count(); i++)
1211 {
1212 if (m_fontSelector->text(i) == reader->m_fontname)
1213 {
1214 m_fontSelector->setCurrentItem(i);
1215 break;
1216 }
1217 }
1218 m_fontBar->show();
1219 m_fontVisible = true;
1220}
1221
1222void QTReaderApp::do_setfont(const QString& lcn)
1223{
1224 QFont f(lcn, 10 /*, QFont::Bold*/);
1225 bkmkselector->setFont( f );
1226 regEdit->setFont( f );
1227 searchEdit->setFont( f );
1228 reader->m_fontname = lcn;
1229 reader->ChangeFont(reader->fontsizes[reader->m_textsize]);
1230 reader->refresh();
1231 m_fontBar->hide();
1232 m_fontVisible = false;
1233 showEditTools();
1234}
1235
1236void QTReaderApp::do_autogen(const QString& regText)
1237{
1238 unsigned long fs, ts;
1239 reader->sizes(fs,ts);
1240 // qDebug("Reg:%s\n", (const tchar*)(regEdit->text()));
1241 m_autogenstr = regText;
1242 QRegExp re(regText);
1243 CBuffer buff;
1244 if (pBkmklist != NULL) delete pBkmklist;
1245 pBkmklist = new CList<Bkmk>;
1246 m_fBkmksChanged = true;
1247 pbar->show();
1248pbar->resize(width(), editBar->height());
1249 pbar->reset();
1250 qApp->processEvents();
1251 reader->setFocus();
1252 reader->jumpto(0);
1253 int lastpc = 0;
1254 int i = 0;
1255 while (i >= 0)
1256 {
1257 unsigned int lcn = reader->locate();
1258 int pc = (100*lcn)/ts;
1259 if (pc != lastpc)
1260 {
1261 pbar->setProgress(pc);
1262 qApp->processEvents();
1263 if (reader->locate() != lcn) reader->jumpto(lcn);
1264 reader->setFocus();
1265 lastpc = pc;
1266 }
1267 i = reader->buffdoc.getpara(buff);
1268#ifdef _UNICODE
1269 if (re.match(toQString(buff.data())) != -1)
1270#else
1271 if (re.match(buff.data()) != -1)
1272#endif
1273 pBkmklist->push_back(Bkmk(buff.data(),lcn));
1274 }
1275 pbar->setProgress(100);
1276 qApp->processEvents();
1277 pbar->hide();
1278}
1279
1280void QTReaderApp::saveprefs()
1281{
1282// reader->saveprefs("uqtreader");
1283 Config config( "uqtreader" );
1284 config.setGroup( "View" );
1285
1286 reader->m_lastposn = reader->pagelocate();
1287
1288 config.writeEntry( "StripCr", reader->bstripcr );
1289 config.writeEntry( "StripHtml", reader->bstriphtml );
1290 config.writeEntry( "Dehyphen", reader->bdehyphen );
1291 config.writeEntry( "Unindent", reader->bunindent );
1292 config.writeEntry( "Repara", reader->brepara );
1293 config.writeEntry( "DoubleSpace", reader->bdblspce );
1294 config.writeEntry( "Indent", reader->bindenter );
1295 config.writeEntry( "FontSize", (int)(reader->fontsizes[reader->m_textsize]) );
1296 config.writeEntry( "Bold", reader->m_bBold );
1297 config.writeEntry( "ScrollDelay", reader->m_delay);
1298 config.writeEntry( "LastFile", reader->m_lastfile );
1299 config.writeEntry( "LastPosn", (int)(reader->pagelocate()) );
1300 config.writeEntry( "PageMode", reader->m_bpagemode );
1301 config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced );
1302 config.writeEntry( "Fontname", reader->m_fontname );
1303 config.writeEntry( "Encoding", reader->m_encd );
1304 config.writeEntry( "CharSpacing", reader->m_charpc );
1305 config.writeEntry( "Overlap", (int)(reader->m_overlap) );
1306 config.writeEntry( "TargetApp", reader->m_targetapp );
1307 config.writeEntry( "TargetMsg", reader->m_targetmsg );
1308}
1309
1310void QTReaderApp::indentplus()
1311{
1312 reader->indentplus();
1313}
1314
1315void QTReaderApp::indentminus()
1316{
1317 reader->indentminus();
1318}
1319
1320/*
1321void QTReaderApp::oldFile()
1322{
1323 qDebug("oldFile called");
1324 reader->setText(true);
1325 qDebug("settext called");
1326 showEditTools();
1327 qDebug("showedit called");
1328}
1329*/
1330
1331/*
1332void info_cb(Fl_Widget* o, void* _data)
1333{
1334
1335 if (infowin == NULL)
1336 {
1337
1338 infowin = new Fl_Window(160,240);
1339 filename = new Fl_Output(45,5,110,14,"Filename");
1340 filesize = new Fl_Output(45,25,110,14,"Filesize");
1341 textsize = new Fl_Output(45,45,110,14,"Textsize");
1342 comprat = new CBar(45,65,110,14,"Ratio %");
1343 posn = new Fl_Output(45,85,110,14,"Location");
1344 frcn = new CBar(45,105,110,14,"% Read");
1345 about = new Fl_Multiline_Output(5,125,150,90);
1346 about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files");
1347 Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay");
1348 infowin->set_modal();
1349 }
1350 if (((reader_ui *)_data)->g_filename[0] != '\0')
1351 {
1352 unsigned long fs,ts;
1353 tchar sz[20];
1354 ((reader_ui *)_data)->input->sizes(fs,ts);
1355 unsigned long pl = ((reader_ui *)_data)->input->locate();
1356
1357 filename->value(((reader_ui *)_data)->g_filename);
1358
1359 sprintf(sz,"%u",fs);
1360 filesize->value(sz);
1361
1362 sprintf(sz,"%u",ts);
1363 textsize->value(sz);
1364
1365 comprat->value(100-(100*fs + (ts >> 1))/ts);
1366
1367 sprintf(sz,"%u",pl);
1368 posn->value(sz);
1369
1370 frcn->value((100*pl + (ts >> 1))/ts);
1371 }
1372 infowin->show();
1373}
1374*/
1375
1376void QTReaderApp::savebkmks()
1377{
1378 if (pBkmklist != NULL)
1379 {
1380 BkmkFile bf((const char *)Global::applicationFileName("uqtreader",reader->m_string), true);
1381 bf.write(*pBkmklist);
1382 }
1383 m_fBkmksChanged = false;
1384}
1385
1386void QTReaderApp::readbkmks()
1387{
1388 if (pBkmklist != NULL)
1389 {
1390 delete pBkmklist;
1391 }
1392 BkmkFile bf((const char *)Global::applicationFileName("uqtreader",reader->m_string));
1393 pBkmklist = bf.readall();
1394 m_fBkmksChanged = false;
1395 if (pBkmklist == NULL)
1396 {
1397 pBkmklist = reader->getbkmklist();
1398 }
1399 if (pBkmklist != NULL)
1400 pBkmklist->sort();
1401}
1402
1403void QTReaderApp::addbkmk()
1404{
1405 m_nRegAction = cAddBkmk;
1406 regEdit->setText(reader->firstword());
1407 do_regedit();
1408}
1409
1410void QTReaderApp::do_addbkmk(const QString& text)
1411{
1412 if (text.isEmpty())
1413 {
1414 QMessageBox::information(this, "QTReader", "Need a name for the bookmark\nSelect add again", 1);
1415 }
1416 else
1417 {
1418 if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>;
1419#ifdef _UNICODE
1420 CBuffer buff;
1421 int i = 0;
1422 for (i = 0; i < text.length(); i++)
1423 {
1424 buff[i] = text[i].unicode();
1425 }
1426 buff[i] = 0;
1427 pBkmklist->push_front(Bkmk(buff.data(), reader->pagelocate()));
1428#else
1429 pBkmklist->push_front(Bkmk((const tchar*)text,reader->pagelocate()));
1430#endif
1431 m_fBkmksChanged = true;
1432 }
1433}