summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2004-07-08 08:43:12 (UTC)
committer llornkcor <llornkcor>2004-07-08 08:43:12 (UTC)
commit0dd3f56a7d0c79b251379831d1d53a80924d5eec (patch) (side-by-side diff)
tree22b618b7283192a83cdc6465b9d1eaca5eb8ae2e
parenta53291faf419c90bf22db7cd6d6f26dece2053c1 (diff)
downloadopie-0dd3f56a7d0c79b251379831d1d53a80924d5eec.zip
opie-0dd3f56a7d0c79b251379831d1d53a80924d5eec.tar.gz
opie-0dd3f56a7d0c79b251379831d1d53a80924d5eec.tar.bz2
dont add empty entry into bookmark list
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-gutenbrowser/gutenbrowser.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/noncore/apps/opie-gutenbrowser/gutenbrowser.cpp b/noncore/apps/opie-gutenbrowser/gutenbrowser.cpp
index d0af114..644fae8 100644
--- a/noncore/apps/opie-gutenbrowser/gutenbrowser.cpp
+++ b/noncore/apps/opie-gutenbrowser/gutenbrowser.cpp
@@ -1,1332 +1,1332 @@
/***************************************************************************
gutenbrowser.cpp - description
-------------------
begin : Mon Jul 24 22:33:12 MDT 2000
copyright : (C) 2000 -2004 by llornkcor
email : ljp@llornkcor.com
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
// http search
// http://digital.library.upenn.edu/books/authors.html
// http://digital.library.upenn.edu/books/titles.html
// ftp://ibiblio.org/pub/docs/books/gutenberg/GUTINDEX.ALL
// donate@gutenberg.net
#include "editTitle.h"
#include "gutenbrowser.h"
#include "LibraryDialog.h"
//#include "bookmarksdlg.h"
#include "optionsDialog.h"
#include "helpme.h"
#include "NetworkDialog.h"
#include "openetext.h"
#include "output.h"
/* OPIE */
#include <opie2/odebug.h>
#include <qpe/qpeapplication.h>
#include <qpe/fontdatabase.h>
#include <qpe/config.h>
#include <qpe/qcopenvelope_qws.h>
#include <qpe/mimetype.h>
#include <qpe/resource.h>
#include <qpe/applnk.h>
/* QT */
#include <qregexp.h>
#include <qregion.h>
#include <qpaintdevicemetrics.h>
#include <qvaluelist.h>
#include <qlabel.h>
#include <qclipboard.h>
#include <qpainter.h>
#include <qpalette.h>
#include <qobjectlist.h>
#include <qfontdialog.h>
#include <qtextview.h>
#include <qbrush.h>
#include <qfile.h>
#include <qfontinfo.h>
#include <qscrollview.h>
#include <qpoint.h>
/* STD */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
static const int nfontsizes = 9;
static const int fontsize[nfontsizes] = {8,9,10,11,12,13,14,18,24};
#ifdef NOQUICKLAUNCH
Gutenbrowser::Gutenbrowser()
Gutenbrowser();
#else
Gutenbrowser::Gutenbrowser(QWidget *,const char*, WFlags )
#endif
: QMainWindow()
{
// QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
// QCopEnvelope e("QPE/System", "grabKeyboard(QString)" );
// e << "";
// QPEApplication::grabKeyboard();
showMainList=TRUE;
working=false;
this->setUpdatesEnabled(TRUE);
// #ifndef Q_WS_QWS
QString msg;
msg="You have now entered unto gutenbrowser,\n";
msg+="make your self at home, sit back, relax and read something great.\n";
local_library = (QDir::homeDirPath ()) +"/Applications/gutenbrowser/";
setCaption("Gutenbrowser");// Embedded " VERSION);
this->setUpdatesEnabled(TRUE);
// bool firstTime=FALSE;
topLayout = new QVBoxLayout( this, 0, 0, "topLayout");
menu = new QHBoxLayout(-1,"menu");
buttons2 = new QHBoxLayout(-1,"buttons2");
edits = new QHBoxLayout(-1,"edits");
useSplitter=TRUE;
initConfig();
initMenuBar();
initButtonBar();
initStatusBar();
initView();
initSlots();
qDebug("init finished");
QPEApplication::setStylusOperation( mainList->viewport(),QPEApplication::RightOnHold);
connect( mainList, SIGNAL( mouseButtonPressed( int, QListBoxItem *, const QPoint &)),
this, SLOT( mainListPressed(int, QListBoxItem *, const QPoint &)) );
if( useIcons)
toggleButtonIcons( TRUE);
else
toggleButtonIcons( FALSE);
enableButtons(false);
Config config("Gutenbrowser"); // populate menubuttonlist
config.setGroup("General");
config.setGroup( "Files" );
QString s_numofFiles = config.readEntry("NumberOfFiles", "0" );
int i_numofFiles = s_numofFiles.toInt();
QString tempFileName;
for (int i = 0; i <= i_numofFiles; i++) {
// tempFileName.setNum(i);
config.setGroup( "Files" );
QString ramble = config.readEntry( QString::number(i), "" );
config.setGroup( "Titles" );
QString tempTitle = config.readEntry( ramble, "");
config.setGroup( tempTitle);
int index=config.readNumEntry( "LineNumber", -1 );
if( index != -1) {
odebug << tempTitle << oendl;
- bookmarksMenu->insertItem( tempTitle);
+ if(!tempTitle.isEmpty()) bookmarksMenu->insertItem( tempTitle);
}
}
// QString gutenIndex= local_library + "GUTINDEX.ALL";
QString gutenIndex = QPEApplication::qpeDir()+ "/etc/gutenbrowser/GUTINDEX.ALL";
qDebug("gutenindex "+gutenIndex );
if( QFile( gutenIndex).exists() ) {
indexLib.setName( gutenIndex);
} else {
QString localLibIndexFile = QPEApplication::qpeDir()+ "/etc/gutenbrowser/PGWHOLE.TXT";
// QString localLibIndexFile= local_library + "PGWHOLE.TXT";
newindexLib.setName( localLibIndexFile);
}
qDebug("attempting new library");
LibraryDlg = new LibraryDialog( this, "Library Index" /*, TRUE */);
loadCheck = false;
chdir(local_library);
if(!showMainList) {
Lview->setFocus();
// if(firstTime)
// Bookmark();
for (int i=1;i< qApp->argc();i++) {
qDebug("Suppose we open somethin");
if(!load(qApp->argv()[i])) return;
}
} else {
fillWithTitles();
mainList->setFocus();
// mainList->setCurrentItem(0);
}
writeConfig();
QTimer::singleShot( 250, this, SLOT(hideView()) );
} //end init
Gutenbrowser::~Gutenbrowser() {
// QPEApplication::grabKeyboard();
// QPEApplication::ungrabKeyboard();
odebug << "Exit" << oendl;
}
/*
Google.com search */
void Gutenbrowser::InfoBarClick() {
QString text;
if( Lview->hasSelectedText()) {
Lview->copy();
QClipboard *cb = QApplication::clipboard();
text = cb->text();
} else {
// text=title;
text=this->caption();
}
searchGoogle(text);
}
/*
download http with wget or preferred browser */
void Gutenbrowser::goGetit( const QString &url, bool showMsg) {
// int eexit=0;
QString cmd;
// config.read();
qApp->processEvents();
QString filename = QPEApplication::qpeDir();
if(filename.right(1)!="/")
filename+="/etc/gutenbrowser/";
else
filename+="etc/gutenbrowser/";
odebug << "filename "+filename << oendl;
// QString filename = QDir::homeDirPath()+"/Applications/gutenbrowser/";
filename += url.right( url.length() - url.findRev("/",-1,TRUE) -1);
Config config("Gutenbrowser");
config.setGroup( "Browser" );
QString brow = config.readEntry("Preferred", "Opera");
odebug << "Preferred browser is "+brow << oendl;
if(!showMsg) { //if we just get the gutenindex.all
cmd="wget -O " + filename +" " + url+" 2>&1" ;
chdir(local_library);
odebug << "Issuing the system command: " << cmd << "" << oendl;
Output *outDlg;
outDlg = new Output(this, tr("Gutenbrowser Output"),FALSE);
outDlg->showMaximized();
outDlg->show();
qApp->processEvents();
FILE *fp;
char line[130];
outDlg->OutputEdit->append( tr("Running wget") );
sleep(1);
fp = popen( (const char *) cmd, "r");
odebug << "Issuing the command\n"+cmd << oendl;
// system(cmd);
while ( fgets( line, sizeof line, fp)) {
outDlg->OutputEdit->append(line);
// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
}
pclose(fp);
outDlg->close();
if(outDlg)
delete outDlg;
} else {
if( brow == "Konq") {
cmd = "konqueror "+url+" &";
}
if( brow == "Opera") { //for desktop testing
cmd = "opera "+url+" &";
}
// if( brow == "Opera") { // on Zaurus
// cmd = "operagui "+url+" &";
// }
if( brow == "Mozilla") {
cmd = "mozilla "+url+" &";
}
if( brow == "Netscape") {
cmd = "netscape "+url+" &";
}
if(brow == "wget") {
// cmd="wget -q "+url+" &";
QString tempHtml=local_library+"webster.html";
cmd="wget -O "+tempHtml+" -q "+url;
}
chdir(local_library);
odebug << "Issuing the sys command: " << cmd << "" << oendl;
system(cmd);
}
}
void Gutenbrowser::toggleButtonIcons( bool useEm) {
QString pixDir;
if(useEm)
useEm=TRUE;
pixDir=QPEApplication::qpeDir()+"pics/gutenbrowser";
odebug << "Docdir is "+QPEApplication::documentDir() << oendl;
if( useIcons && QDir( pixDir).exists() ) {
LibraryButton->setPixmap( Resource::loadPixmap("home") ); //in inline
OpenButton->setPixmap( Resource::loadPixmap("gutenbrowser/openbook"));
ForwardButton->setPixmap( Resource::loadPixmap("forward"));//in inline
BackButton->setPixmap( Resource::loadPixmap("back") );//in inline
SearchButton->setPixmap( Resource::loadPixmap("gutenbrowser/search") );//in inline
lastBmkButton->setPixmap( Resource::loadPixmap("gutenbrowser/bookmark_folder"));
setBookmarkButton->setPixmap( Resource::loadPixmap("gutenbrowser/bookmark") );
dictionaryButton->setPixmap( Resource::loadPixmap("gutenbrowser/spellcheck") );
InfoBar->setPixmap( Resource::loadPixmap("gutenbrowser/google"));
}
}
bool Gutenbrowser::queryExit()
{
int exit=QMessageBox::information(this, "Quit...", "Do your really want to quit?",
QMessageBox::Ok, QMessageBox::Cancel);
if (exit==1) {
writeConfig();
qApp->quit();
} else {
};
return (exit==1);
}
// SLOT IMPLEMENTATION
void Gutenbrowser::slotFilePrint() {
}
void Gutenbrowser::ByeBye() {
if (b_queryExit)
queryExit();
else {
// writeConfig();
qApp->quit();
}
}
void Gutenbrowser::HelpBtn() {
HelpMe* HelpDlg;
HelpDlg = new HelpMe( this, "Help Dialog");
HelpDlg->showMaximized();
}
void Gutenbrowser::DownloadIndex() {
#ifndef Q_WS_QWS
{
switch( QMessageBox::information( 0, (tr("Download Library Index, or FTP sites?")),
(tr("Do you want to download the newest\n"
"Project Gutenberg Library Index?\n"
"or select an ftp site?\n")),
(tr("&Library Index")), (tr("&Ftp Site")), (tr("&Cancel")), 2, 2 ) )
{
case 0: // index clicked,
downloadLibIndex();
break;
case 1: // ftp selected
downloadFtpList();
break;
case 2: // Cancel
break;
};
}
#endif
} // end DownloadIndex
void Gutenbrowser::downloadFtpList() {
// QString cmd="wget http://www.promo.net/pg/list.html");
//system(cmd);
qApp->processEvents();
optionsDialog* optDlg;
optDlg = new optionsDialog( this,"Options_Dlg", true);
optDlg->getSite();
if(optDlg)
delete optDlg;
}
void Gutenbrowser::downloadLibIndex() {
// QString dwmloader = local_library + "pgwhole.zip";
// QString cmd = "lynx -source http://www.gutenberg.net/pgwhole.zip | cat >> " + dwmloader;
// system(cmd);
// QString outputFile= local_library+ "GUTINDEX.ALL";
// config.setGroup( "FTPsite" ); // ftp server config
// ftp_host=config.readEntry("SiteName", "");
// ftp_base_dir= config.readEntry("base", "");
// QString networkUrl= "ftp://"+ftp_host+ftp_base_dir+"/GUTINDEX.ALL";
QDir dir( local_library);
dir.cd("", TRUE);
goGetit( "http://sailor.gutenberg.org/GUTINDEX.ALL", false); // until ghttp works on binaries -qt3
// goGetit( "http://www.gutenberg.net/pgwhole.zip", true); // until ghttp works on binaries -qt3
// NetworkDialog *NetworkDlg;
// NetworkDlg = new NetworkDialog( this,"Network Protocol Dialog", TRUE, 0, networkUrl, outputFile );
// if( NetworkDlg->exec() != 0 )
// { // use new, improved, *INSTANT* network-dialog-file-getterer
//// QMessageBox::message("Note","");
// }
// if(NetworkDlg)
// delete NetworkDlg;
}
void Gutenbrowser::PrintBtn() {
}
void Gutenbrowser::SearchBtn() {
if( loadCheck) {
odebug << "loadCheck: we have a loaded doc" << oendl;
Search();
}
// else
// QMessageBox::message("Note","Sorry, can't search. No etext is loaded");
}
void Gutenbrowser::ForwardBtn() {
if( !ForwardButton->autoRepeat() && !ForwardButton->isDown()) {
QString s;
QString insertString;
int pageSize= Lview->PageSize();
Lview->clear();
for(int fd=0; fd < pageSize - 1;fd++) {
f.readLine(s, 256);
if(useWrap)
s.replace(QRegExp("\n"),"");
insertString+=s;
Lview->insertLine( s, -1);
// odebug << s << oendl;
currentLine++;
}
// Lview->insertAt( insertString,0,0, FALSE);
currentFilePos = f.at();
// if( i_pageNum != pages) {
// Lview->MultiLine_Ex::pageDown( FALSE);
i_pageNum++;
pageStopArray.resize(i_pageNum + 1);
// int length = Lview->length();
pageStopArray[i_pageNum ] = currentFilePos;
odebug << currentFilePos << " current page is number " << i_pageNum
<< ", pagesize " << pageSize << ", length " << Lview->length()
<< ", current " << pageStopArray[i_pageNum] << oendl;
setStatus();
// Lview->setCursorPosition( 0, 0, FALSE);
// }
} else {
odebug << "bal" << oendl;
// if( i_pageNum != pages) {
// // int newTop = Lview->Top();
// // if(Lview->lastRow() > i)
// Lview->ScrollUp(1);
// // i_pageNum++;
// setStatus();
// Lview->setCursorPosition( Lview->Top(), 0, FALSE);
// }
}
Lview->setFocus();
odebug << "page number " << i_pageNum << " line number " << currentLine << "" << oendl;
}
void Gutenbrowser::BackBtn() {
if( i_pageNum > 0) {
int pageSize= Lview->PageSize();
// int length=Lview->length();
i_pageNum--;
currentFilePos = f.at();
odebug << currentFilePos << " move back to " << pageStopArray[i_pageNum - 1 ]
<< ", current page number " << i_pageNum
<< ", " << pageSize << ", length " << Lview->length() << oendl;
if( i_pageNum < 2) {
f.at( 0);
} else {
if(!f.at( pageStopArray[i_pageNum - 1] ))
odebug << "File positioned backward did not work" << oendl;
}
QString s;
// int sizeLine=0;
Lview->clear();
// QString insertString;
for(int fd = 0; fd < pageSize ;fd++) {
// Lview->removeLine( Lview->PageSize() );
f.readLine(s, 256);
if(useWrap)
s.replace(QRegExp("\n"),"");
currentLine++;
// insertString+=s;
Lview->insertLine( s, -1);
}
// Lview->insertAt( insertString,0,0, FALSE);
if( !BackButton->autoRepeat() && !BackButton->isDown()) {
QString topR;
QString lastR;
QString pageR;
// int sizer = Lview->lastRow() - Lview->topRow();
// int i_topRow = Lview->topRow();
if( i_pageNum < 1)
i_pageNum = 1;
setCaption(QString::number(i_pageNum));
} else {
// int newTop = Lview->Top();
// if(Lview->lastRow() > i)
Lview->MultiLine_Ex::pageUp( FALSE);
// Lview->ScrollDown(1);
// i_pageNum--;
if( i_pageNum < 1)
i_pageNum = 1;
setStatus();
// Lview->setCursorPosition( Lview->Top(), 0, FALSE);
}
}
Lview->setFocus();
}
void Gutenbrowser::doBeginBtn() {
if(loadCheck) {
qApp->processEvents();
BeginBtn();
}
}
// moves text to the very top = 0
void Gutenbrowser::TopBtn() {
if(loadCheck) {
if( i_pageNum != 0) {
odebug << "top" << oendl;
qApp->processEvents();
currentLine = 0;
i_pageNum = 1;
int pageSize = Lview->PageSize() ;
Lview->clear();
QString s;
f.at(0);
for(int fd=0; fd < pageSize ;fd++) {
f.readLine(s, 256);
if(useWrap)
s.replace(QRegExp("\n"),"");
Lview->insertLine(s ,-1);
currentLine++;
}
// Lview->setCursorPosition( 0,0, FALSE);
i_pageNum=1;
setStatus();
}
Lview->setFocus();
}
}
//moves text to the start of the EText
void Gutenbrowser::BeginBtn() {
i_pageNum = 1;
currentLine = 0;
QString s_pattern="*END*THE SMALL PRINT";
QString sPattern2 = "*END THE SMALL PRINT";
int pageSize = Lview->PageSize();
Lview->clear();
// int lines = Lview->numLines();
int pos = 0;//, i = 0;
int i_topRow = Lview->topRow();
QString LeftText;// = Lview->text();
- int linesPerPage = Lview->lastRow() - Lview->topRow();
+// int linesPerPage = Lview->lastRow() - Lview->topRow();
// int pages = (( linesPerPage / Lview->editSize() ) ) +1;
// int pageN = 0;
i_pageNum = 1;
int lastPage=1;
int lineNo=0;
QString s;
f.at( 0);
while ( !f.atEnd() ) {
f.readLine(s, 256);
lineNo++;
LeftText = s;
currentFilePos = f.at();
i_pageNum = lineNo/pageSize;
if(lastPage < i_pageNum) {
pageStopArray.resize(i_pageNum + 1);
pageStopArray[i_pageNum ] = currentFilePos;
// odebug << "new page number " << i_pageNum << ", found at " << currentFilePos << "" << oendl;
}
// lastPage = i_pageNum;
if( LeftText.find( s_pattern, 0 , TRUE) != -1 || LeftText.find( sPattern2, 0 , TRUE) != -1 ) {
odebug << "<<<<<< FOUND IT!! new page number " << i_pageNum << ", found at " << currentFilePos << "" << oendl;
break;
}
}
if(f.atEnd()) //in case we didnt find anything, we need to show something
f.at(0);
Lview->clear();
for(int fd=0; fd < pageSize - 1;fd++) {
f.readLine(s, 256);
if(useWrap)
s.replace(QRegExp("\n"),"");
Lview->insertLine( s, -1);
currentLine++;
}
i_pageNum = lineNo/pageSize;
pageStopArray.resize(i_pageNum + 1);
// int length = Lview->length();
qApp->processEvents();
if( pos > i_topRow ) {
// Lview->setCursorPosition( pos+linesPerPage+2/* - i_topRow+3 */,0, FALSE);
} else {
// Lview->setCursorPosition( pos+2 , 0, FALSE );
}
Lview->deselect();
// AdjustStatus();
Lview->setFocus();
}
/*
sets the current page and place as a bookmark*/
void Gutenbrowser::setBookmark() {
int eexit=QMessageBox::information(this, "Note",
"Do you really want to \nset this bookmark?."
,QMessageBox::Yes, QMessageBox::No);
if (eexit== 3) {
currentFilePos = f.at();
Config cfg("Gutenbrowser");
cfg.setGroup("General");
file_name = cfg.readEntry("Current","");
qApp->processEvents();
odebug << "Setting book mark "+file_name << oendl;
cfg.setGroup("Titles");
title = cfg.readEntry(file_name,"");
odebug << "title is "+ title << oendl;
cfg.setGroup( "Bookmarks" );
cfg.writeEntry("File Name",file_name);
cfg.writeEntry("Page Number",QString::number(i_pageNum) );
cfg.writeEntry( "PagePosition", QString::number( pageStopArray[i_pageNum - 1]));
cfg.writeEntry("Title", title);
int row = Lview->topRow();// Lview->Top();
cfg.writeEntry("LineNumber",QString::number(row) );
cfg.setGroup(title);
cfg.writeEntry("File Name",file_name);
cfg.writeEntry( "LineNumber", QString::number( row));
cfg.writeEntry( "PagePosition", QString::number( pageStopArray[i_pageNum - 1]));
cfg.writeEntry( "Page Number", QString::number( i_pageNum) );
cfg.write();
bookmarksMenu->insertItem( title);
}
} //end setBookmark
/* goes to last set bookmark*/
void Gutenbrowser::Bookmark( int itemId) {
// qApp->processEvents();
Config config("Gutenbrowser");
config.setGroup( "Bookmarks" );
odebug << "<<<<<< " << Lview->PageSize() << ", " << Lview->lastRow() - Lview->topRow() << "" << oendl;
QString itemString;
odebug << "menu item " << itemId << "" << oendl;
QString tempTitle;
QString s_Bmrkrow;
QString s_pageNum;
int Bmrkrow=0;
int bookmarkPosition = 0;
// qApp->processEvents();
config.setGroup( "Bookmarks" );
title = config.readEntry("Title", "");
file_name = config.readEntry("File Name", "");
i_pageNum = config.readNumEntry("Page Number", 0);
bookmarkPosition = config.readNumEntry( "PagePosition",0);
Bmrkrow = config.readNumEntry("LineNumber",0);
if( !file_name.contains("/")) {
file_name = local_library + file_name;
}
// getTitle(file_name);
// qApp->processEvents();
// Lview->setFocus();
this->setFocus();
Lview->clear();
if(!load(file_name)) return;
int pageSize = Lview->PageSize();
f.at(0);
// Lview->clear();
QString s;
int lineNo=0;
int lastPage=1;
while ( !f.atEnd() ) {
f.readLine(s, 256);
lineNo++;
currentFilePos = f.at();
i_pageNum = lineNo/pageSize;
if(lastPage < i_pageNum) {
pageStopArray.resize(i_pageNum + 1);
pageStopArray[i_pageNum ] = currentFilePos;
// odebug << "new page number " << i_pageNum << ", found at " << currentFilePos << "" << oendl;
}
if(currentFilePos == bookmarkPosition)
break;
}
if(f.atEnd())
f.at(0);
else
f.at( bookmarkPosition);
for(int fd=0; fd < pageSize - 1;fd++) {
f.readLine(s, 256);
lineNo++;
if(useWrap)
s.replace(QRegExp("\n"),"");
Lview->insertLine( s, -1);
currentLine++;
}
i_pageNum = lineNo/pageSize;
pageStopArray.resize(i_pageNum + 1);
if(showMainList) {
showMainList=FALSE;
mainList->hide();
Lview->show();
// qApp->processEvents();
}
odebug << "bookmark loaded" << oendl;
setCaption(title);
}
bool Gutenbrowser::load( const char *fileName) {
// QCopEnvelope ( "QPE/System", "busy()" );
odebug << "Title is already set as "+title << oendl;
odebug << "sizeHint " << sizeHint().height() << " pageSize " << Lview->PageSize() << "" << oendl;
// pointSize = Lview->fontInfo().pointSize();
// odebug << "sizeHint " << sizeHint().height() << " point size " << pointSize << "" << oendl;
if( Lview->PageSize() < 4) {
// Lview->setMaximumHeight( sizeHint().height() );
Lview->setMinimumHeight( sizeHint().height() );
pointSize = Lview->fontInfo().pointSize();
odebug << "sizeHint " << sizeHint().height() << " point size " << pointSize << "" << oendl;
if(pointSize < 15)
Lview->setFixedVisibleLines(19);
else
Lview->setFixedVisibleLines( ( (sizeHint().height() / pointSize ) * 2) -2);
}
Config cfg("Gutenbrowser");
cfg.setGroup("General");
cfg.writeEntry("Current",fileName);
cfg.write();
currentLine=0;
file_name=fileName;
QString o_file = fileName;
// if (i_pageNum < 1) {
i_pageNum = 1;
// }
odebug << "ready to open "+o_file << oendl;
if(f.isOpen()) f.close();
f.setName( o_file);
if ( !f.open( IO_ReadOnly)) {
QMessageBox::message( (tr("Note")), (tr("File not opened sucessfully.\n" +o_file)) );
return false;
}
currentFilePos = 0;
pageStopArray.resize(3);
pageStopArray[0] = currentFilePos;
fileHandle = f.handle();
QString insertString;
QTextStream t(&f);
QString s;
for(int fd=0; fd < Lview->PageSize() ;fd++) {
s=t.readLine();
// insertString+=s;
if(useWrap)
s.replace(QRegExp("\n"),"");
// s.replace(QRegExp("\r"),"");
Lview->insertLine( s,-1);
currentLine++;
}
// int length = Lview->length();
currentFilePos = f.at();
pageStopArray[1] = currentFilePos;
odebug << "<<<<<<<<<<<" << currentFilePos << " current page is number " << i_pageNum
<< ", length " << Lview->length() << ", current " << pageStopArray[i_pageNum]
<< ", pageSize " << Lview->PageSize() << oendl;
Lview->setMaxLines(Lview->PageSize()*2);
// odebug << "Gulped " << currentLine << "" << oendl;
setCaption(title);
Lview->setAutoUpdate( TRUE);
// Lview->setCursorPosition(0,0,FALSE);
// pages = (int)(( Lview->numLines() / Lview->editSize() ) / 2 ) +1;
//odebug << "number of pages " << pages << "" << oendl;
loadCheck = true;
enableButtons(true);
if( donateMenu->count() == 3) {
donateMenu->insertItem("Current Title", this, SLOT( InfoBarClick() ));
}
Lview->setFocus();
// QCopEnvelope("QPE/System", "notBusy()" );
return true;
} // end load
void Gutenbrowser::Search() {
// if( searchDlg->isHidden())
{
odebug << "Starting search dialog" << oendl;
searchDlg = new SearchDialog( this, "Etext Search", true);
searchDlg->setCaption( tr( "Etext Search" ));
// searchDlg->setLabel( "- searches etext");
connect( searchDlg,SIGNAL( search_signal()),this,SLOT( search_slot()));
connect( searchDlg,SIGNAL( search_done_signal()),this,SLOT( searchdone_slot()));
QString resultString;
QString string = searchDlg->searchString;
Lview->deselect();
searchDlg->show();
searchDlg->result();
}
}
void Gutenbrowser::search_slot( ) {
int line, col;
if (!searchDlg /*&& !loadCheck */)
return;
Lview->getCursorPosition(&line,&col);
QString to_find_string=searchDlg->get_text();
// searchDlg->get_direction();// is true if searching backward
if ( last_search != 0 && searchDlg->get_direction() ){
col = col - pattern.length() - 1 ;
}
again:
int result = doSearch( to_find_string , /* searchDlg->case_sensitive()*/ TRUE, searchDlg->forward_search(), line, col);
if(result == 0){
if(!searchDlg->get_direction()){ // forward search
int query = QMessageBox::information( searchDlg, "Find",
"End of document reached.\nContinue from the beginning?",
"Yes", "No", "", 0,1);
if (query == 0){
line = 0;
col = 0;
goto again;
}
} else { //backward search
int query = QMessageBox::information( searchDlg, "Find",
"End of document reached.\nContinue from the beginning?",
"Yes", "No", "", 0,1);
if (query == 0){
QString string = Lview->textLine( Lview->numLines() - 1 );
line = Lview->numLines() - 1;
lineCheck = line;
col = string.length();
last_search = -1; //BACKWARD;
goto again;
}
}
} else {
//// emit CursorPositionChanged(); textLine
}
}
int Gutenbrowser::doSearch( const QString &s_pattern , bool case_sensitive, bool forward, int line, int col ) {
int i, length;
int pos = -1;
if(forward) {
QString string;
for(i = line; i < Lview->numLines(); i++) {
string = Lview->textLine(i);
pos = string.find(s_pattern, i == line ? col : 0, case_sensitive);
if( pos != -1) {
int top = Lview->Top();
length = s_pattern.length();
if( i > Lview->lastRow() ) {
// Lview->setCursorPosition(i,pos,FALSE);
for(int l = 0 ; l < length; l++) {
Lview->cursorRight(TRUE);
}
// Lview->setCursorPosition( i , pos + length, TRUE );
int newTop = Lview->Top();
if(Lview->lastRow() > i)
Lview->ScrollUp( newTop - top);
// AdjustStatus();
} else {
// Lview->setCursorPosition(i,pos,FALSE);
for(int l = 0 ; l < length; l++) {
Lview->cursorRight(TRUE);
}
// Lview->setCursorPosition( i , pos + length, TRUE );
// AdjustStatus();
}
pattern = s_pattern;
last_search = 1; //FORWARD;
return 1;
}
}
} else { //////////////// searching backwards
QString string;
for( i = line; i >= 0; i--) {
string = Lview->textLine(i);
int line_length = string.length();
pos = string.findRev(s_pattern, line == i ? col : line_length , case_sensitive);
if (pos != -1) {
// int top = Lview->Top();
length = s_pattern.length();
if( i < Lview->Top() ) {
Lview->ScrollDown( Lview->PageSize() );
Lview->MultiLine_Ex::pageUp( FALSE );
if( ! (line == i && pos > col ) ) {
// Lview->setCursorPosition( i ,pos ,FALSE );
for(int l = 0 ; l < length; l++) {
Lview->cursorRight(TRUE);
}
// Lview->setCursorPosition(i ,pos + length ,TRUE );
// int newTop = Lview->Top();
/* if(useSplitter) Rview->ScrollUp( newTop - top);
*/ }
} else {
if( ! (line == i && pos > col ) ) {
// Lview->setCursorPosition( i, pos, FALSE );
for( int l = 0 ; l < length; l++) {
Lview->cursorRight( TRUE);
}
// Lview->setCursorPosition( i, pos + length, TRUE );
}
pattern = s_pattern;
last_search = -1;
return 1;
}
}
}
}
return 0;
}
void Gutenbrowser::LibraryBtn() {
QString newestLibraryFile ="pgwhole.zip";
QString zipFile;
// odebug << "Local Library is " << local_library << " " << oendl;
zipFile="/usr/bin/unzip";
// odebug << "newestLibraryFile is " << newestLibraryFile << " " << oendl;
if( QFile::exists( local_library+newestLibraryFile)) {
if( QFile::exists(zipFile) ) {
UnZipIt(newestLibraryFile);
}
else
QMessageBox::message( "Note",( tr("Please install unzip")) );
}
// LibraryDlg = new LibraryDialog( this, "Library Index");
LibraryDlg->setCaption( tr( "Gutenberg Library"));
Config config("Gutenbrowser");
config.setGroup("General");
if(useSplitter)
LibraryDlg->useSmallInterface=FALSE;
LibraryDlg->showMaximized();
if( LibraryDlg->exec() != 0 ) {
listItemNumber = LibraryDlg->DlglistItemNumber;
listItemFile = LibraryDlg->DlglistItemFile;
listItemYear = LibraryDlg->DlglistItemYear;
listItemTitle = LibraryDlg->DlglistItemTitle;
file_name = LibraryDlg->File_Name;
// odebug << "title is being set as "+title << oendl;
title = listItemTitle;
// config.setGroup( "Proxy" );
// if( LibraryDlg->checked == 1) {
// config.writeEntry("IsChecked", "TRUE");
// } else {
// config.writeEntry("IsChecked", "FALSE");
// }
// config.write();
// config.read();
if ( listItemNumber.isNull()) {
} else {
i_pageNum = 1;
if( file_name !="Error" && file_name.length() >2 && !file_name.isEmpty() ) {
//replace .zip with txt for opening it.
// printf("\nFile name is now\n");
// printf(file_name);
// printf("\n");
//
if( file_name.find(".zip"))
{
odebug << "Found zip file\n" << oendl;
// QStringList args;
// args="unzip";
// args+="-o";
// args+=local_library+file_name;
// args+="-d";
// args+=local_library;
QString cmd = "/usr/bin/unzip -o " + local_library+file_name + " -d " + local_library;
odebug << "Issuing the command "+ cmd << oendl;
// unzipProc=new QProcess( this, "unzipProc" ); /// fark that idea!
// unzipProc->start();
system(cmd);
remove( file_name);
}
// //
// file_name = file_name.left(4)+ ".txt";
if( LibraryDlg)
delete LibraryDlg;
setTitle();
// QCopEnvelope ( "QPE/System", "busy()" );
if( !load( file_name)) return;
} else {
printf("Not opening the file.\n");
}
}
}
if(showMainList) {
if(!Lview->isHidden())
Lview->hide();
qApp->processEvents();
showMainList=TRUE;
if(mainList->isHidden())
mainList->show();
fillWithTitles();
qApp->processEvents();
} else
setCentralWidget( Lview);
// QPEApplication::grabKeyboard();
// fixKeys();
}
void Gutenbrowser::OpenBtn() {
QString s_temp;
s_temp = status;
OpenEtext* OpenDlg;
OpenDlg = new OpenEtext(this,"OpenDlg");
OpenDlg->showMaximized();
if( OpenDlg->exec() != 0) {
title = OpenDlg->openFileTitle;
odebug << "title open as "+title << oendl;
file_name = OpenDlg->file;
i_pageNum = 1;
if( !file_name.isEmpty() || file_name.length() > 2 ) {
if(showMainList) {
showMainList=FALSE;
odebug << "ShowMainList is now false" << oendl;
mainList->hide();
Lview->show();
qApp->processEvents();
}
Lview->clear();
// QCopEnvelope ( "QPE/System", "busy()" );
if(!load(file_name)) return;
} else {
odebug << "file_name is empty!" << oendl;
if(showMainList) {
if(!Lview->isHidden())
Lview->hide();
qApp->processEvents();
if(mainList->isHidden())
mainList->show();
fillWithTitles();
qApp->processEvents();
}
}
}
if( OpenDlg)
delete OpenDlg;
/*
Config config("Gutenbrowser");
config.setGroup( title);
file_name = config.readEntry("File Name", "");
i_pageNum = config.readNumEntry("Page Number", -1);
int Bmrkrow = config.readNumEntry("LineNumber", -1);
if(Bmrkrow > -1) {
if( Bmrkrow > Lview->topRow() ) {
Lview->setCursorPosition( Bmrkrow ,0, FALSE );
Lview->ScrollUp( Bmrkrow - Lview->topRow() );
// AdjustStatus();
}
else if( Bmrkrow < Lview->topRow() ) {
Lview->setCursorPosition( Lview->topRow() - Bmrkrow ,0, FALSE );
Lview->ScrollDown( Lview->topRow() - Bmrkrow );
// AdjustStatus();
}
}
*/
// ResizeEdits();
}
void Gutenbrowser::ChangeFont() {
#ifndef Q_WS_QWS
bool ok;
weight= Lview->fontInfo().weight();
italic = Lview->fontInfo().italic();
bold=Lview->fontInfo().bold();
pointSize= Lview->fontInfo().pointSize();
fontStr=Lview->fontInfo().family();
if(italic == true)
italicStr="TRUE";
else
italicStr="FALSE";
QFont currentfont( fontStr, pointSize, weight, italic );
if (ok) {
QFontInfo fontInfo(font );
fontStr=fontInfo.family();
pointSize= fontInfo.pointSize();
font.setFontSize(pointSize);
pointSizeStr.setNum( pointSize);
weight= fontInfo.weight();
weightStr.setNum( weight);
italic =fontInfo.italic();
bold=fontInfo.bold();
if(italic == true)
italicStr="TRUE";
else
italicStr="FALSE";
if(bold == true)
boldStr="TRUE";
else
boldStr="FALSE";
pointSizeStr.setNum( pointSize);
config.setGroup( "Font" );
config.writeEntry("Family", fontStr );
config.writeEntry("Size", pointSizeStr );
config.writeEntry("Weight", weightStr );
config.writeEntry("Italic", italicStr );
config.writeEntry("Bold", boldStr );
// config.write();
Lview->setFont(font);
QRect lRect;
QRect rRect;
lRect = Lview->rect();
if(useSplitter) {
}
// if(loadCheck) {
// ResizeEdits();
// }
update();
}
#endif
}
/*
performs dictionary look ups on the web */
void Gutenbrowser::LookupBtn() {
QString text;
if( Lview->hasSelectedText()) {
Lview->copy();
}
QClipboard *cb = QApplication::clipboard();
text = cb->text();
int eexit=QMessageBox::information(this,
"Note","Do you want to lookup\n\""+text+"\"\non websters web dictionary?",
QMessageBox::Yes, QMessageBox::No);
if (eexit== 3) {
// this link for sale!!
qApp->processEvents();
goGetit( "http://www.m-w.com/cgi-bin/dictionary?" + text, true);
}
}
void Gutenbrowser::ClearEdit() {
Lview->setText("");
loadCheck = false;
status = ( tr("Gutenbrowser"));
InfoBar->setText( "");
setCaption( tr("Gutenbrowser"));
i_pageNum = 0;
enableButtons(false);
if(!showMainList) {
Lview->hide();
showMainList=TRUE;
mainList->show();
fillWithTitles();
qApp->processEvents();
}
if(donateMenu->idAt(3) != -1)
donateMenu->removeItemAt(3);
}
bool Gutenbrowser::getTitle( const char *file ) {
QString s_file;
QString filer = file;
if( filer.contains(local_library, TRUE)) {
QFileInfo f(file);
s_file = f.fileName();
} else {
s_file = filer;
}
Config config("Gutenbrowser");
config.setGroup( "Files" );
QString s_numofFiles = config.readEntry("NumberOfFiles", "0" );
int i_numofFiles = s_numofFiles.toInt();
for (int i = 1; i <= i_numofFiles; i++) {
QString temp;
temp.setNum(i);
QString ramble = config.readEntry(temp, "" );
if( strcmp(ramble, s_file) == 0) {
config.setGroup( "Titles" );
title = config.readEntry(ramble, "");
// odebug << "(getTitle)title is being set as "+title << oendl;
}
}
return true;
}
void Gutenbrowser::searchdone_slot() {
// if (!searchDlg)
// return;
// searchDlg->hide();
// Lview->setFocus();
this->setFocus();
last_search = 0;
// ResizeEdits();
}
/*
sets the status message */
bool Gutenbrowser::setStatus() {
#ifndef Q_WS_QWS
QString s_pages;
s_pages.setNum( pages);
QString chNum;
statusTop = status.left( status.find(" ", TRUE) );
status.append(chNum.setNum( i_pageNum));
status += " / " + s_pages;
if(loadCheck) {
statusBar->message( status);
InfoBar->setText( title);
} else {
}
#else
QString msg;
msg.sprintf(title+" %d", i_pageNum);
setCaption( msg);
#endif
return true;
}
void Gutenbrowser::keyReleaseEvent( QKeyEvent *e) {
switch ( e->key() ) {
case Key_M:
// Bookmark();
break;
case Key_D:
DownloadIndex();
break;
case Key_L:
LibraryBtn();
break;
case Key_O:
OpenBtn();
break;
case Key_F:
ForwardBtn();
break;
case Key_B:
BackBtn();
break;
case Key_P:
PrintBtn();
break;
case Key_S:
SearchBtn();
break;
case Key_E:
ByeBye();
break;
case Key_R:
// setBookmark();
break;
case Key_T:
ChangeFont();
break;