author | llornkcor <llornkcor> | 2002-07-01 23:24:08 (UTC) |
---|---|---|
committer | llornkcor <llornkcor> | 2002-07-01 23:24:08 (UTC) |
commit | 59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2 (patch) (unidiff) | |
tree | f148d4858859dac3b413e675c760acfdab24b8e6 /noncore/apps/opie-reader/QTReaderApp.cpp | |
parent | c08be8ae22dcc1bfb83cfdec807149b161d770f5 (diff) | |
download | opie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.zip opie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.tar.gz opie-59222a752fa4c8a1e8c2a00ee2f9e22855f12bb2.tar.bz2 |
initial
Diffstat (limited to 'noncore/apps/opie-reader/QTReaderApp.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-reader/QTReaderApp.cpp | 1433 |
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 | |||
54 | unsigned long QTReaderApp::m_uid = 0; | ||
55 | |||
56 | void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); } | ||
57 | |||
58 | #include <unistd.h> | ||
59 | #include <stddef.h> | ||
60 | #include <dirent.h> | ||
61 | |||
62 | void 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 | |||
99 | QTReaderApp::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 | |||
489 | void 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 | |||
509 | int 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 | |||
524 | void QTReaderApp::encodingSelected(QAction* _a) | ||
525 | { | ||
526 | // qDebug("es:%x : %s", _a, (const char *)(_a->text())); | ||
527 | reader->setencoding(EncNameToInt(_a->text())); | ||
528 | } | ||
529 | |||
530 | QTReaderApp::~QTReaderApp() | ||
531 | { | ||
532 | } | ||
533 | |||
534 | void QTReaderApp::autoScroll(bool _b) | ||
535 | { | ||
536 | reader->setautoscroll(_b); | ||
537 | } | ||
538 | |||
539 | void QTReaderApp::TBD() | ||
540 | { | ||
541 | QMessageBox::information(this, "QTReader", "Not yet implemented", 1); | ||
542 | } | ||
543 | |||
544 | void QTReaderApp::TBDzoom() | ||
545 | { | ||
546 | QMessageBox::information(this, "QTReader", "Zooming is done interactively\nTry left/right cursor keys", 1); | ||
547 | } | ||
548 | |||
549 | void QTReaderApp::clearBkmkList() | ||
550 | { | ||
551 | delete pBkmklist; | ||
552 | pBkmklist = NULL; | ||
553 | m_fBkmksChanged = false; | ||
554 | } | ||
555 | |||
556 | void 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 | |||
594 | void 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 | |||
615 | void QTReaderApp::infoClose() | ||
616 | { | ||
617 | showEditTools(); | ||
618 | } | ||
619 | |||
620 | /* | ||
621 | void QTReaderApp::fileRevert() | ||
622 | { | ||
623 | clear(); | ||
624 | fileOpen(); | ||
625 | } | ||
626 | |||
627 | void QTReaderApp::editCut() | ||
628 | { | ||
629 | #ifndef QT_NO_CLIPBOARD | ||
630 | editor->cut(); | ||
631 | #endif | ||
632 | } | ||
633 | */ | ||
634 | void QTReaderApp::editMark() | ||
635 | { | ||
636 | m_savedpos = reader->pagelocate(); | ||
637 | } | ||
638 | |||
639 | void 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 | |||
662 | void QTReaderApp::pageup() | ||
663 | { | ||
664 | reader->goUp(); | ||
665 | } | ||
666 | |||
667 | void QTReaderApp::pagedn() | ||
668 | { | ||
669 | reader->goDown(); | ||
670 | } | ||
671 | |||
672 | void QTReaderApp::stripcr(bool _b) | ||
673 | { | ||
674 | reader->setstripcr(_b); | ||
675 | } | ||
676 | void QTReaderApp::striphtml(bool _b) | ||
677 | { | ||
678 | reader->setstriphtml(_b); | ||
679 | } | ||
680 | void QTReaderApp::dehyphen(bool _b) | ||
681 | { | ||
682 | reader->setdehyphen(_b); | ||
683 | } | ||
684 | void QTReaderApp::unindent(bool _b) | ||
685 | { | ||
686 | reader->setunindent(_b); | ||
687 | } | ||
688 | void QTReaderApp::repara(bool _b) | ||
689 | { | ||
690 | reader->setrepara(_b); | ||
691 | } | ||
692 | void QTReaderApp::setbold(bool _b) | ||
693 | { | ||
694 | reader->m_bBold = _b; | ||
695 | reader->ChangeFont(reader->fontsizes[reader->m_textsize]); | ||
696 | reader->refresh(); | ||
697 | } | ||
698 | void QTReaderApp::dblspce(bool _b) | ||
699 | { | ||
700 | reader->setdblspce(_b); | ||
701 | } | ||
702 | void QTReaderApp::pagemode(bool _b) | ||
703 | { | ||
704 | reader->setpagemode(_b); | ||
705 | } | ||
706 | |||
707 | void QTReaderApp::monospace(bool _b) | ||
708 | { | ||
709 | reader->setmono(_b); | ||
710 | } | ||
711 | |||
712 | void 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 | |||
721 | void 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 | |||
730 | void 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 | |||
740 | void 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 | |||
752 | void 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 | /* | ||
766 | void QTReaderApp::editPaste() | ||
767 | { | ||
768 | #ifndef QT_NO_CLIPBOARD | ||
769 | editor->paste(); | ||
770 | #endif | ||
771 | } | ||
772 | */ | ||
773 | |||
774 | void 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 | |||
788 | void 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 | |||
803 | void 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 | |||
819 | void QTReaderApp::regClose() | ||
820 | { | ||
821 | regVisible = FALSE; | ||
822 | regEdit->setText(""); | ||
823 | regBar->hide(); | ||
824 | reader->setFocus(); | ||
825 | } | ||
826 | |||
827 | #ifdef __ISEARCH | ||
828 | bool QTReaderApp::dosearch(size_t start, CBuffer& test, const QString& arg) | ||
829 | #else | ||
830 | bool 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 | ||
863 | void 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 | ||
896 | void 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 | |||
906 | void QTReaderApp::openFile( const QString &f ) | ||
907 | { | ||
908 | openFile(DocLnk(f)); | ||
909 | } | ||
910 | |||
911 | void 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 | |||
943 | void 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 | /* | ||
961 | void 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 | |||
991 | void 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 | |||
1003 | void 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 | |||
1015 | void QTReaderApp::setDocument(const QString& fileref) | ||
1016 | { | ||
1017 | bFromDocView = TRUE; | ||
1018 | //QMessageBox::information(0, "setDocument", fileref); | ||
1019 | openFile(DocLnk(fileref)); | ||
1020 | // showEditTools(); | ||
1021 | } | ||
1022 | |||
1023 | void 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 | |||
1062 | void QTReaderApp::do_gotomark() | ||
1063 | { | ||
1064 | m_nRegAction = cGotoBkmk; | ||
1065 | listbkmk(); | ||
1066 | } | ||
1067 | |||
1068 | void QTReaderApp::do_delmark() | ||
1069 | { | ||
1070 | m_nRegAction = cDelBkmk; | ||
1071 | listbkmk(); | ||
1072 | } | ||
1073 | |||
1074 | void 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 | |||
1104 | void QTReaderApp::do_autogen() | ||
1105 | { | ||
1106 | m_nRegAction = cAutoGen; | ||
1107 | regEdit->setText(m_autogenstr); | ||
1108 | do_regedit(); | ||
1109 | } | ||
1110 | |||
1111 | void QTReaderApp::do_regedit() | ||
1112 | { | ||
1113 | // editBar->hide(); | ||
1114 | regBar->show(); | ||
1115 | regVisible = true; | ||
1116 | regEdit->setFocus(); | ||
1117 | } | ||
1118 | |||
1119 | void 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 | |||
1138 | void QTReaderApp::cancelbkmk() | ||
1139 | { | ||
1140 | showEditTools(); | ||
1141 | } | ||
1142 | |||
1143 | void 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 | |||
1152 | void 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 | |||
1162 | void 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 | |||
1192 | void 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 | |||
1208 | void 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 | |||
1222 | void 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 | |||
1236 | void 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(); | ||
1248 | pbar->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 | |||
1280 | void 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 | |||
1310 | void QTReaderApp::indentplus() | ||
1311 | { | ||
1312 | reader->indentplus(); | ||
1313 | } | ||
1314 | |||
1315 | void QTReaderApp::indentminus() | ||
1316 | { | ||
1317 | reader->indentminus(); | ||
1318 | } | ||
1319 | |||
1320 | /* | ||
1321 | void 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 | /* | ||
1332 | void 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 | |||
1376 | void 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 | |||
1386 | void 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 | |||
1403 | void QTReaderApp::addbkmk() | ||
1404 | { | ||
1405 | m_nRegAction = cAddBkmk; | ||
1406 | regEdit->setText(reader->firstword()); | ||
1407 | do_regedit(); | ||
1408 | } | ||
1409 | |||
1410 | void 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 | } | ||