summaryrefslogtreecommitdiff
authorar <ar>2004-05-03 21:35:18 (UTC)
committer ar <ar>2004-05-03 21:35:18 (UTC)
commit412619441fab46fc79c695a23ccf9e38135bdfad (patch) (side-by-side diff)
tree19d9b8af14cf6c345ef532bb32368b9c7b43c50f
parentd1095d71394779557f446e2a67ba55bc62eec859 (diff)
downloadopie-412619441fab46fc79c695a23ccf9e38135bdfad.zip
opie-412619441fab46fc79c695a23ccf9e38135bdfad.tar.gz
opie-412619441fab46fc79c695a23ccf9e38135bdfad.tar.bz2
- convert qDebug to odebug
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-gutenbrowser/LibraryDialog.cpp92
-rw-r--r--noncore/apps/opie-gutenbrowser/NetworkDialog.cpp50
-rw-r--r--noncore/apps/opie-gutenbrowser/SearchDialog.cpp4
-rw-r--r--noncore/apps/opie-gutenbrowser/browserDialog.cpp5
-rw-r--r--noncore/apps/opie-gutenbrowser/fontDialog.cpp20
-rw-r--r--noncore/apps/opie-gutenbrowser/ftpsitedlg.cpp27
-rw-r--r--noncore/apps/opie-gutenbrowser/gutenbrowser.cpp153
-rw-r--r--noncore/apps/opie-gutenbrowser/gutenbrowserData.cpp20
-rw-r--r--noncore/apps/opie-gutenbrowser/helpme.cpp11
-rw-r--r--noncore/apps/opie-gutenbrowser/main.cpp2
-rw-r--r--noncore/apps/opie-gutenbrowser/openetext.cpp55
-rw-r--r--noncore/apps/opie-gutenbrowser/optionsDialog.cpp36
-rw-r--r--noncore/apps/opie-reader/Aportis.cpp8
-rw-r--r--noncore/apps/opie-reader/Bkmks.cpp6
-rw-r--r--noncore/apps/opie-reader/BuffDoc.cpp18
-rw-r--r--noncore/apps/opie-reader/CDrawBuffer.cpp22
-rw-r--r--noncore/apps/opie-reader/QTReader.cpp52
-rw-r--r--noncore/apps/opie-reader/QTReaderApp.cpp279
-rw-r--r--noncore/apps/opie-reader/StyleConsts.cpp2
-rw-r--r--noncore/apps/opie-reader/fileBrowser.cpp8
-rw-r--r--noncore/apps/opie-reader/opie-reader.pro2
-rw-r--r--noncore/apps/opie-reader/plucker.cpp10
-rw-r--r--noncore/apps/opie-reader/plucker_base.cpp148
-rw-r--r--noncore/apps/tinykate/libkate/document/katebuffer.cpp25
-rw-r--r--noncore/apps/tinykate/libkate/document/katedocument.cpp53
-rw-r--r--noncore/apps/tinykate/libkate/document/katehighlight.cpp46
-rw-r--r--noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp27
-rw-r--r--noncore/apps/tinykate/libkate/kateconfig.cpp29
-rw-r--r--noncore/apps/tinykate/tinykate.cpp31
29 files changed, 656 insertions, 585 deletions
diff --git a/noncore/apps/opie-gutenbrowser/LibraryDialog.cpp b/noncore/apps/opie-gutenbrowser/LibraryDialog.cpp
index 5b22b00..270a4cf 100644
--- a/noncore/apps/opie-gutenbrowser/LibraryDialog.cpp
+++ b/noncore/apps/opie-gutenbrowser/LibraryDialog.cpp
@@ -1,1067 +1,1071 @@
/***************************************************************************
// LibraryDialog.cpp - description
// -------------------
// begin : Sat Aug 19 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. *
// ***************************************************************************/
//ftp://ibiblio.org/pub/docs/books/gutenberg/GUTINDEX.ALL
+#include "LibraryDialog.h"
+#include "output.h"
+
+/* OPIE */
#include <qpe/applnk.h>
#include <qpe/qpeapplication.h>
#include <qpe/qpedialog.h>
+#include <opie2/odebug.h>
-#include "LibraryDialog.h"
-#include "output.h"
-
+/* QT */
#include <qpushbutton.h>
#include <qmultilineedit.h>
//#include <qlayout.h>
+/* STD */
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
/*
* The dialog will by default be modeless, unless you set 'modal' to
* TRUE to construct a modal dialog. */
LibraryDialog::LibraryDialog( QWidget* parent, const char* name , bool modal, WFlags fl )
: QDialog( parent, name, true/* modal*/, fl )
{
if ( !name )
setName( "LibraryDialog" );
indexLoaded=false;
initDialog();
// this->setMaximumWidth(240);
index = "GUTINDEX.ALL";
local_library = (QDir::homeDirPath ()) +"/Applications/gutenbrowser/";
local_index = local_library + index;
QString iniFile ;
iniFile = QPEApplication::qpeDir()+"/etc/gutenbrowser/gutenbrowserrc";
new_index =QPEApplication::qpeDir()+"/etc/gutenbrowser/PGWHOLE.TXT";
old_index = QPEApplication::qpeDir()+"/etc/gutenbrowser/GUTINDEX.ALL";
// old_index = QPEApplication::qpeDir()+"etc/gutenbrowser/GUTINDEX.ALL";
// iniFile = local_library+"gutenbrowserrc";
// new_index = local_library + "PGWHOLE.TXT";
// old_index = local_library + "GUTINDEX.ALL";
Config config("Gutenbrowser");
config.setGroup( "HttpServer" );
proxy_http = config.readEntry("Preferred", "http://sailor.gutenbook.org");
config.setGroup( "FTPsite" );
ftp_host=config.readEntry("SiteName", "sailor.gutenberg.org");
- qDebug("Library Dialog: ftp_host is "+ftp_host);
+ odebug << "Library Dialog: ftp_host is "+ftp_host << oendl;
// ftp_host=ftp_host.right(ftp_host.length()-(ftp_host.find(") ",0,TRUE)+1) );
// ftp_host=ftp_host.stripWhiteSpace();
ftp_base_dir= config.readEntry("base", "/pub/gutenberg");
i_binary = 0;
config.setGroup("SortAuth");
if( config.readEntry("authSort", "FALSE") == "TRUE")
authBox->setChecked(TRUE);
config.setGroup("General");
downDir =config.readEntry( "DownloadDirectory",local_library);
- qDebug("downDir is "+downDir);
+ odebug << "downDir is "+downDir << oendl;
newindexLib.setName( old_index);
indexLib.setName( old_index);
new QPEDialogListener(this);
}
LibraryDialog::~LibraryDialog()
{
// delete QList_Item2;
// delete QList_Item1;
// delete QList_Item3;
// delete QList_Item4;
// delete QList_Item5;
// saveConfig();
}
/*This groks using PGWHOLE.TXT */
void LibraryDialog::Newlibrary()
{
#ifndef Q_WS_QWS //sorry embedded gutenbrowser cant use zip files
- //qDebug("Opening new library index %s",newindexLib);
+ //odebug << "Opening new library index " << newindexLib << "" << oendl;
if ( newindexLib.open( IO_ReadOnly) ) {
setCaption( tr( "Library Index - using master pg index." ) );// file opened successfully
QTextStream indexStream( &newindexLib );
QString indexLine;
while ( !indexStream.atEnd() ) { // until end of file..
indexLine = indexStream.readLine();
if ( ( indexLine.mid(4,4)).toInt() && !( indexLine.left(3)).toInt()) {
year = indexLine.mid(4,4);
year = year.stripWhiteSpace();
file = indexLine.mid( indexLine.find( "[", 0, TRUE )+1, 12 );
file = file.stripWhiteSpace();
number = indexLine.mid( indexLine.find( "]", 0, TRUE ) +1, indexLine.find( " ", 0, TRUE )+1 );
if( year.toInt() < 1984)
number = number.left( number.length() -1 );
number = number.stripWhiteSpace();
title = indexLine.mid( indexLine.find(" ", 26, TRUE), indexLine.length() );
title = title.stripWhiteSpace();
getAuthor(); // groks author
author = author.stripWhiteSpace();
if (authBox->isChecked()) { // this reverses the first name and last name of the author
- // qDebug("Sorting last name first");
+ // odebug << "Sorting last name first" << oendl;
QString lastName, firstName="";
int finder=author.findRev( ' ', -1, TRUE);
lastName=author.right( author.length()-finder);
firstName=author.left(finder);
lastName=lastName.stripWhiteSpace();
firstName=firstName.stripWhiteSpace();
if( lastName.find( firstName, 0, true) == -1) // this avoids dup names
author=lastName+", "+firstName;
}
if( !number.isEmpty() && (title.find( "reserved",0, FALSE) == -1) && (file.find( "]",0, TRUE) == -1) ) {
// fill string list or something to be able to resort the whole library
if( author.isEmpty() )
QList_Item5 = new QListViewItem( ListView5, /* number,*/ title, author, year, file );
else {
if( (author.left(1) >= QString("A") && author.left(1) <= QString("F")) ||
(author.left(1) >= QString("a") && author.left(1) <= QString("f")) )
QList_Item1 = new QListViewItem( ListView1,/* number,*/ title, author, year, file );
else if( (author.left(1) >= QString("G") && author.left(1) <= QString("M")) ||
(author.left(1) >= QString("g") && author.left(1) <= QString("m")) )
QList_Item2 = new QListViewItem( ListView2, /*number, */title, author, year, file );
else if( (author.left(1) >= QString("N") && author.left(1) <= QString("R")) ||
(author.left(1) >= QString("n") && author.left(1) <= QString("r")) )
QList_Item3 = new QListViewItem( ListView3, /*number,*/ title, author, year, file );
else if( (author.left(1) >= QString("S") && author.left(1) <= QString("Z")) ||
(author.left(1) >= QString("s") && author.left(1) <= QString("z")) )
QList_Item4 = new QListViewItem( ListView4, /* number,*/ title, author, year, file );
else
QList_Item5 = new QListViewItem( ListView5, /* number,*/ title, author, year, file );
}
}
}// end if
}// end while
newindexLib.close();
}
#ifndef Q_WS_QWS
setCursor( arrowCursor);
#endif
#endif
} // end Newlibrary()
void LibraryDialog::Library()
{// old library groking method
ListView1->clear();
ListView2->clear();
ListView3->clear();
ListView4->clear();
ListView5->clear();
- qDebug("opening GUTINDEX.ALL file");
+ odebug << "opening GUTINDEX.ALL file" << oendl;
IDontKnowWhy = "";
if ( indexLib.open( IO_ReadOnly) ) { // file opened successfully
QTextStream indexStream( &indexLib );
QString indexLine;
qApp->processEvents();
// int jig;
while ( !indexStream.eof() ) {
indexLine = indexStream.readLine();
if ( indexLine != "") {
if( (indexLine.mid(4,4)).toInt() /* && !( indexLine.left(3)).toInt()*/ ) {
// month = indexLine.left( 3);
year = indexLine.mid(4,4);
// title = indexLine.mid( 9, 50);
file = indexLine.mid(60,12);
if(file.left(1).find("[",0,TRUE) != -1)
file.remove(1,1);
if( file.find("]",0,TRUE) != -1)
file = file.left( file.find("]",0,TRUE));
- //qDebug("file is "+file);
+ //odebug << "file is "+file << oendl;
/// number = indexLine.mid( indexLine.find( "]", 0, TRUE ) +1, indexLine.find( " ", 0, TRUE )+1 );
number = indexLine.mid(55,5);
number = number.stripWhiteSpace();
// title = indexLine.mid( indexLine.find(" ", 26, TRUE), indexLine.length() );
title = indexLine.mid( 9, 50 );
title = title.stripWhiteSpace();
- //qDebug("title is "+title);
+ //odebug << "title is "+title << oendl;
getAuthor(); // grok author
author = author.stripWhiteSpace();
- //qDebug("author is "+author);
+ //odebug << "author is "+author << oendl;
if (authBox->isChecked() == TRUE) { // this reverses the first name and last name of the author
QString lastName, firstName="";
int finder=author.findRev( ' ', -1, TRUE);
lastName=author.right( author.length()-finder);
firstName=author.left(finder);
lastName=lastName.stripWhiteSpace();
firstName=firstName.stripWhiteSpace();
if( lastName.find( firstName, 0, true) == -1) // this avoids dup names
author=lastName+", "+firstName;
}
if( !number.isEmpty() && (title.find( "reserved",0, FALSE) == -1) /*&& (file.find( "]",0, TRUE))*/ ) {
// fill string list or something to be able to sort by Author
if( author.isEmpty() )
QList_Item5 = new QListViewItem( ListView5, /*number, */title, author, year, file );
else {
if( (author.left(1) >= QString("A") && author.left(1) <= QString("F")) ||
(author.left(1) >= QString("a") && author.left(1) <= QString("f")) )
QList_Item1 = new QListViewItem( ListView1, /* number,*/ title, author, year, file );
else if( (author.left(1) >= QString("G") && author.left(1) <= QString("M")) ||
(author.left(1) >= QString("g") && author.left(1) <= QString("m")) )
QList_Item2 = new QListViewItem( ListView2, /* number,*/ title, author, year, file );
else if( (author.left(1) >= QString("N") && author.left(1) <= QString("R")) ||
(author.left(1) >= QString("n") && author.left(1) <= QString("r")) )
QList_Item3 = new QListViewItem( ListView3, /* number,*/ title, author, year, file );
else if( (author.left(1) >= QString("S") && author.left(1) <= QString("Z")) ||
(author.left(1) >= QString("s") && author.left(1) <= QString("z")) )
QList_Item4 = new QListViewItem( ListView4, /* number,*/ title, author, year, file );
}
}
}
}
}
indexLib.close();
} else {
QString sMsg;
sMsg = ( tr("Error opening local library index:\n "))+local_index;
QMessageBox::message( "Error",sMsg);
}
} //end Library()
/*
Groks the author out of the title */
bool LibraryDialog::getAuthor()
{
if( title.contains( ", by", TRUE)) {
int auth;
auth = title.find(", by", 0, TRUE);
author = title.right(title.length() - (auth + 4) );
if( int finder = author.find("[", 0, TRUE)) {
author = author.left(finder);
}
}
else if ( title.contains( "by, ", TRUE) ) {
int auth;
auth = title.find("by, ", 0, TRUE);
author = title.right(title.length() - (auth + 4) );
if( int finder = author.find("[", 0, TRUE)) {
author = author.left( finder);
}
}
else if ( title.contains( " by", TRUE) ) {
int auth;
auth = title.find(" by", 0, TRUE);
author = title.right(title.length() - (auth + 3) );
if( int finder = author.find("[", 0, TRUE)) {
author = author.left( finder);
}
}
else if ( title.contains( "by ", TRUE) ) {
int auth;
auth = title.find("by ", 0, TRUE);
author = title.right(title.length() - (auth + 3) );
if( int finder = author.find("[", 0, TRUE)) {
author = author.left( finder);
}
}
else if ( title.contains( ",", TRUE) ) {
int auth;
auth = title.find(",", 0, TRUE);
author = title.right( title.length() - (auth + 1) );
if ( author.contains( ",", TRUE) ) {
int auth;
auth = author.find(",", 0, TRUE);
author = author.right( author.length() - (auth + 1) );
}
if( int finder = author.find("[", 0, TRUE)) {
author = author.left( finder);
}
}
else if ( title.contains( "/", TRUE) ) {
int auth;
auth = title.find("/", 0, TRUE);
author = title.right(title.length() - (auth + 1) );
if( int finder = author.find("[", 0, TRUE)) {
author = author.left( finder);
}
}
else if ( title.contains( "of", TRUE) ) {
int auth;
auth = title.find("of", 0, TRUE);
author = title.right(title.length() - (auth + 2) );
if( int finder = author.find("[", 0, TRUE))
{
author = author.left( finder);
}
} else {
author = "";
}
if ( author.contains("et. al")) {
int auth;
auth = author.find("et. al", 0, TRUE);
author = author.left( auth );
}
if ( author.contains("#")) {
int auth;
auth = author.find("#", 0, TRUE);
author = author.left( auth);
}
if ( author.contains("(")) {
int auth;
auth = author.find("(", 0, TRUE);
author = author.left( auth);
}
if ( author.contains("et al")) {
int auth;
auth = author.find("et al", 0, TRUE);
author = author.left( auth );
}
QRegExp r = QRegExp("[0-9]", TRUE, FALSE);
if ( author.left(2).find( r) != -1 ) {
author = "";
}
// if( author.contains(" ", TRUE)) {
// int suth = author.findRev(" ", -1, TRUE);
// author = author.right( author.length() - suth);
// }
// title
// author
return true;
}////// end getAuthor()
/*
selected one etext*/
void LibraryDialog::select_title( QListViewItem * item)
{
if(item != NULL) {
i++;
int index = tabWidget->currentPageIndex();
DlglistItemTitle = item->text(0);
DlglistItemYear = item->text(2);
DlglistItemFile = item->text(3);
switch (index) {
case 0: {
ListView1->clearSelection();
}
break;
case 1: {
ListView2->clearSelection();
}
break;
case 2: {
ListView3->clearSelection();
}
break;
case 3: {
ListView4->clearSelection();
}
break;
case 4: {
ListView5->clearSelection();
}
break;
};
}
if(DlglistItemTitle.length()>2) {
// DlglistItemNumber = item->text(0);
item = 0;
- qDebug( "string from librarydialog is:%s %s %s", DlglistItemYear.latin1(),DlglistItemFile.latin1(),DlglistItemNumber.latin1());
- qDebug("Title is "+DlglistItemTitle);
+ odebug << "string from librarydialog is:" << DlglistItemYear << " " << DlglistItemFile << " " << DlglistItemNumber << "" << oendl;
+ odebug << "Title is "+DlglistItemTitle << oendl;
// check for connection here
// if( get_extext())
if(download_Etext()) {
- // qDebug("get here 2");
+ // odebug << "get here 2" << oendl;
if(i_binary == 1) {
}
if(checkBox->isChecked () ) {
accept();
}
}
}
}
bool LibraryDialog::download_Etext()
{ // ftp method
// might have to use old gpl'd ftp for embedded!!
Config cfg("Gutenbrowser");
cfg.setGroup("FTPsite");
ftp_host=cfg.readEntry("SiteName", "sailor.gutenberg.org");
ftp_base_dir= cfg.readEntry("base", "/pub/gutenberg");
- qDebug("about to network dialog");
+ odebug << "about to network dialog" << oendl;
QString NewlistItemNumber, NewlistItemYear, ls_result, result_line, s, dir, networkUrl, outputFile;
//////////////////// FIXME- if 'x' is part of real name....
NewlistItemFile = DlglistItemFile.left(DlglistItemFile.find(".xxx", 1, FALSE)).left(DlglistItemFile.left(DlglistItemFile.find(".xxx", 1, FALSE)).find("x", 1, FALSE));
if( NewlistItemFile.find( DlglistItemFile.left(4) ,0,TRUE) ==-1 ) {
NewlistItemFile.replace( 0,4, DlglistItemFile.left(4));
- qDebug("NewlistItemFile is now "+NewlistItemFile);
+ odebug << "NewlistItemFile is now "+NewlistItemFile << oendl;
}
NewlistItemYear = DlglistItemYear.right(2);
int NewlistItemYear_Int = NewlistItemYear.toInt(0, 10);
- qDebug(NewlistItemYear);
+ odebug << NewlistItemYear << oendl;
if (NewlistItemYear_Int < 91 && NewlistItemYear_Int > 70) {
NewlistItemYear = "90";
}
Edir ="etext" +NewlistItemYear;
dir= ftp_base_dir + "/etext" +NewlistItemYear+"/";
if( ftp_base_dir.find("=",0,true) )
ftp_base_dir.remove( ftp_base_dir.find("=",0,true),1);
networkUrl= "ftp://"+ftp_host+dir;
outputFile=local_library+".guten_temp";
- //qDebug("Download file:%s",NewlistItemFile.latin1() );
- qDebug("Checking: "+ftp_host+" "+dir+" "+outputFile+" "+NewlistItemFile);
+ //odebug << "Download file:" << NewlistItemFile << "" << oendl;
+ odebug << "Checking: "+ftp_host+" "+dir+" "+outputFile+" "+NewlistItemFile << oendl;
QStringList networkList;
networkList.append((const char *)ftp_host);
networkList.append((const char *)dir);
networkList.append((const char *)outputFile);
networkList.append((const char *)NewlistItemFile);
//<< (char *)ftp_host << (char *)dir << (char *)outputFile << (char *)NewlistItemFile;
NetworkDialog *NetworkDlg;
NetworkDlg = new NetworkDialog( this,"Network Protocol Dialog", TRUE, 0, networkList);
if( NetworkDlg->exec() != 0 ) { // use new, improved, *INSTANT* network-dialog-file-getterer
File_Name= NetworkDlg->localFileName;
- qDebug("back to Library from Network Dialog");
- qDebug("Just downloaded "+NetworkDlg->localFileName);
+ odebug << "back to Library from Network Dialog" << oendl;
+ odebug << "Just downloaded "+NetworkDlg->localFileName << oendl;
// if (File_Name.find( local_library, 0, TRUE) != -1 ) { //could not be found
// QString oldName=File_Name;
// File_Name.replace(0,local_library.length(),downDir);
- // qDebug("File_Name now is "+File_Name);
+ // odebug << "File_Name now is "+File_Name << oendl;
// }
// rename .txt to .etx
if(NetworkDlg->successDownload) {
- qDebug("Filename is "+File_Name);
+ odebug << "Filename is "+File_Name << oendl;
if(File_Name.right(4)==".txt") {
QString s_fileName=File_Name;
s_fileName.replace( s_fileName.length()-3,3,"gtn");
// s_fileName.replace( s_fileName.length()-3,3,"etx");
rename(File_Name.latin1(),s_fileName.latin1());
File_Name=s_fileName;
- qDebug("Filename is now "+File_Name);
+ odebug << "Filename is now "+File_Name << oendl;
}
if(File_Name.length() > 5 ) {
setTitle();
QFileInfo fi(File_Name);
QString name_file=fi.fileName();
name_file=name_file.left(name_file.length()-4);
- qDebug("Setting doclink");
+ odebug << "Setting doclink" << oendl;
DocLnk lnk;
- qDebug("name is "+name_file);
+ odebug << "name is "+name_file << oendl;
lnk.setName(name_file); //sets file name
- qDebug("Title is "+DlglistItemTitle);
+ odebug << "Title is "+DlglistItemTitle << oendl;
lnk.setComment(DlglistItemTitle);
- qDebug("Filename is "+File_Name);
+ odebug << "Filename is "+File_Name << oendl;
lnk.setFile(File_Name); //sets File property
lnk.setType("guten/plain");// hey is this a REGISTERED mime type?!?!? ;D
lnk.setExec(File_Name);
lnk.setIcon("gutenbrowser/Gutenbrowser");
if(!lnk.writeLink()) {
- qDebug("Writing doclink did not work");
+ odebug << "Writing doclink did not work" << oendl;
} else {
}
} else
QMessageBox::message("Note","There was an error\nwith the file");
}
}
return true;
}
bool LibraryDialog::httpDownload()
{// httpDownload
#ifndef Q_WS_QWS
Config config("Gutenbrowser");
config.setGroup( "Browser" );
QString brow = config.readEntry("Preferred", "");
QString file_name = "./.guten_temp";
// config.setGroup( "HttpServer" );
// QString s_http = config.readEntry("Preferred", "http://sailor.gutenbook.org");
QString httpName = proxy_http + "/"+Edir;
// progressBar->setProgress( i);
i++;
if ( brow != "Konq") { /////////// use lynx
// QString cmd = "lynx -source " + httpName +" | cat >> " + file_name;
// system(cmd);
} else { //////////// use KFM
// KFM::download( httpName, file_name);
}
i++;
QFile tmp( file_name);
QString str;
if (tmp.open(IO_ReadOnly)) {
QTextStream t( &tmp ); // use a text stream
while ( !t.eof()) {
QString s = t.readLine();
if (s.contains( NewlistItemFile, FALSE) && (s.contains(".txt")) ) {
str = s.mid( s.find( ".txt\">"+NewlistItemFile, 0, TRUE)+6, (s.find( ".txt</A>", 0, TRUE) + 4) - ( s.find( ".txt\">"+NewlistItemFile, 0, TRUE)+6 ) );
httpName += "/" + str;
}
} //end of while loop
}
tmp.close();
m_getFilePath = local_library + str;
i++;
if ( brow != "KFM"){ ///////// use lynx
QString cmd = "lynx -source " + httpName +" | cat >> " + m_getFilePath;
// QMessageBox::message("Error", cmd);
system(cmd);
} else { ////////// use KFM
// KFM::download( httpName, m_getFilePath);
}
i++;
#endif
return false;
}
void LibraryDialog::cancelIt()
{
saveConfig();
DlglistItemNumber = "";
this->reject();
}
bool LibraryDialog::setTitle()
{
Config config("Gutenbrowser");
- qDebug("setting title");
- qDebug(DlglistItemTitle);
+ odebug << "setting title" << oendl;
+ odebug << DlglistItemTitle << oendl;
if( DlglistItemTitle.find("[",0,TRUE) != -1)
DlglistItemTitle.replace(DlglistItemTitle.find("[",0,TRUE),1, "(" );
if( DlglistItemTitle.find("]",0,TRUE) !=-1)
DlglistItemTitle.replace(DlglistItemTitle.find("]",0,TRUE),1, ")" );
- qDebug("Title being set is "+DlglistItemTitle);
+ odebug << "Title being set is "+DlglistItemTitle << oendl;
int test = 0;
QString ramble, temp;
config.setGroup("Files");
QString s_numofFiles = config.readEntry("NumberOfFiles", "0" );
int i_numofFiles = s_numofFiles.toInt();
for ( int i = 0; i <= i_numofFiles; i++){
temp.setNum( i);
ramble = config.readEntry( temp, "" );
if( strcmp( ramble, File_Name) == 0){
test = 1;
}
}
config.setGroup("Files");
config.writeEntry( "NumberOfFiles", i_numofFiles +1 );
QString interger;
interger.setNum( i_numofFiles +1);
config.writeEntry( interger, File_Name);
config.setGroup( "Titles" );
config.writeEntry( File_Name, DlglistItemTitle);
test = 0;
return true;
}
void LibraryDialog::saveConfig()
{
Config config("Gutenbrowser");
if( httpBox->isChecked() == TRUE) {
checked = 1;
config.setGroup( "Proxy" );
config.writeEntry("IsChecked", "TRUE");
} else {
checked = 0;
config.setGroup( "Proxy" );
config.writeEntry("IsChecked", "FALSE");
}
if (authBox->isChecked() == TRUE) {
config.setGroup("SortAuth");
config.writeEntry("authSort", "TRUE");
} else {
config.setGroup("SortAuth");
config.writeEntry("authSort", "FALSE");
}
// config.write();
}
/*
searches library index for user word*/
void LibraryDialog::onButtonSearch()
{
ListView1->clearSelection();
ListView2->clearSelection();
ListView3->clearSelection();
ListView4->clearSelection();
ListView5->clearSelection();
int curTab=tabWidget->currentPageIndex();
SearchDialog* searchDlg;
// if( resultsList)
searchDlg = new SearchDialog( this, "Library Search", TRUE);
searchDlg->setCaption( tr( "Library Search" ) );
searchDlg->setLabel( "- author or title");
QString resultString;
int i_berger = 0;
if( searchDlg->exec() != 0 ) {
QString searcherStr = searchDlg->get_text();
int fluff=0;
// int tabPage = tabWidget->currentPageIndex();
// TODO ititerate here... struct<listViews>??
QListViewItemIterator it1( ListView1 );
QListViewItemIterator it2( ListView2 );
QListViewItemIterator it3( ListView3 );
QListViewItemIterator it4( ListView4 );
QListViewItemIterator it5( ListView5 );
//// this is really pitiful work,
///////
bool cS;
if( searchDlg->caseSensitiveCheckBox->isChecked())
cS=true; //case sensitive
else
cS=false;
if(fluff==0) {
for ( ; it1.current(); ++it1 ) {
resultString = ( it1.current() )->text(0);
resultString += (" : ");
resultString += ( it1.current() )->text(2);
resultString += (" : ");
resultString += ( it1.current() )->text(3);
if( resultString.find( searcherStr, 0, cS) != -1)
{
Searchlist.append( resultString);
}
}
}
if(fluff==0) {// search routine here
for ( ; it2.current(); ++it2 ) {
resultString = ( it2.current() )->text(0);
resultString += (" : ");
resultString += ( it2.current() )->text(2);
resultString += (" : ");
resultString += ( it2.current() )->text(3);
if( resultString.find( searcherStr, 0, cS) != -1) {
Searchlist.append( resultString);
}
}
}
if(fluff==0) {// search routine here
for ( ; it3.current(); ++it3 ) {
resultString = ( it3.current() )->text(0);
resultString += (" : ");
resultString += ( it3.current() )->text(2);
resultString += (" : ");
resultString += ( it3.current() )->text(3);
if( resultString.find( searcherStr, 0, cS) != -1) {
Searchlist.append( resultString);
}
}
}
if(fluff==0) {
// search routine here
for ( ; it4.current(); ++it4 ) {
resultString = ( it4.current() )->text(0);
resultString += (" : ");
resultString += ( it4.current() )->text(2);
resultString += (" : ");
resultString += ( it4.current() )->text(3);
if( resultString.find( searcherStr, 0, cS) != -1) {
Searchlist.append( resultString);
}
}
}
if(fluff==0) { // search routine here
for ( ; it5.current(); ++it5 ) {
resultString = ( it5.current() )->text(0);
resultString += (" : ");
resultString += ( it5.current() )->text(2);
resultString += (" : ");
resultString += ( it5.current() )->text(3);
if( resultString.find( searcherStr, 0, cS) != -1) {
Searchlist.append( resultString);
}
}
}
tabWidget->setCurrentPage( curTab);
Searchlist.sort();
SearchResultsDlg* SearchResultsDialog;
SearchResultsDialog = new SearchResultsDlg( searchDlg, "Results Dialog", true, 0 , Searchlist);
SearchResultsDialog->showMaximized();
if( SearchResultsDialog->exec() != 0) {
texter = SearchResultsDialog->selText;
- // qDebug(texter);
+ // odebug << texter << oendl;
resultLs= SearchResultsDialog->resultsList;
i_berger = 1;
}
Searchlist.clear();
// if(SearchResultsDialog)
// delete SearchResultsDialog;
QString tester;
for ( QStringList::Iterator it = resultLs.begin(); it != resultLs.end(); ++it ) {
texter.sprintf("%s \n",(*it).latin1());
- // qDebug(texter);
+ // odebug << texter << oendl;
if( tester!=texter)
parseSearchResults( texter);
tester = texter;
}
if(searchDlg)
delete searchDlg;
}
if(checkBox->isChecked() ) {
accept();
} else {
setActiveWindow();
}
}
/*
splits the result string and calls download for the current search result*/
void LibraryDialog::parseSearchResults( QString resultStr)
{
int stringLeng=resultStr.length();
QString my;
my.setNum( stringLeng, 10);
if( resultStr.length() > 2 && resultStr.length() < 130) {
int titleInt = resultStr.find( " : ", 0, TRUE);
DlglistItemTitle = resultStr.left( titleInt);
int yearInt = resultStr.find( " : ", titleInt+3, TRUE);
DlglistItemYear = resultStr.mid( titleInt+3, (yearInt - titleInt)-3);
DlglistItemFile = resultStr.right( resultStr.length() - (yearInt + 3));
download_Etext();
}
/*
printf( DlglistItemTitle+"\n"); printf( DlglistItemYear+"\n"); printf( DlglistItemFile+"\n");*/
}
// bool LibraryDialog::UnzipIt( QString zipFile) {
// //////////TODO findsome other way of dealingwithzip files.
// ///usr/bin/unzip";
// if( QFile::exists( zipFile)) {
// // QString thatFile = local_library +"PGWHOLE.TXT";
// QString cmd;
// #if defined(_WS_X11_)
// cmd = "gunzip -d " + zipFile /*newestLibraryFile */+" -d " + local_library;
// #endif
// #if defined(_WS_WIN_)
// QString temp= QDir::convertSeparators(local_library);
// zipFile=QDir::convertSeparators( zipFile);
// cmd = temp+"unzip.exe -o " +zipFile/*newestLibraryFile */+" -d " + temp;
// #endif
// #ifndef Q_WS_QWS
// // QString cmd = "gunzip -d " + zipFile /*newestLibraryFile */+" -d " + local_library;
// cmd = "unzip " + zipFile;
// #endif
// int exit=QMessageBox::information(this, "Unzip?", "Ok to unzip "+ zipFile+" ?", QMessageBox::Yes, QMessageBox::No);
// if (exit==QMessageBox::Yes) {
- // qDebug("Issuing the command "+cmd);
+ // odebug << "Issuing the command "+cmd << oendl;
// #if defined(_WS_WIN_)
// WinExec( cmd, SW_HIDE );
// #endif
// #if defined(_WS_X11_)
// system( cmd);
// #endif
// #ifndef Q_WS_QWS
// system( cmd);
// #endif
// // printf("unzip\n");
// // remove( zipFile /*newestLibraryFile*/);
// return true;
// }
// else if(exit==QMessageBox::No) {
// // printf("unzip\n");
// return false;
// }
// } else {
// // QMessageBox::message( "Note",( tr("Please install unzip in your PATH")) );
// return false;
// }
// return true;
// }
void LibraryDialog::sort()
{
}
/*
Downloads the current selected listitem*/
bool LibraryDialog::getItem(QListViewItem *it)
{
- // qDebug("selected getItem");
+ // odebug << "selected getItem" << oendl;
// DlglistItemNumber = it->text(0);
DlglistItemTitle = it->text(0);
DlglistItemYear = it->text(2);
DlglistItemFile = it->text(3);
if(download_Etext()) {
if(i_binary == 1) {
}
}
return true;
}
/*
download button is pushed so we get the current items to download*/
bool LibraryDialog::onButtonDownload()
{
- // qDebug("selected onButtonDownloadz");
+ // odebug << "selected onButtonDownloadz" << oendl;
QListViewItemIterator it1( ListView1 );
QListViewItemIterator it2( ListView2 );
QListViewItemIterator it3( ListView3 );
QListViewItemIterator it4( ListView4 );
QListViewItemIterator it5( ListView5 );
// iterate through all items of the listview
for ( ; it1.current(); ++it1 ) {
if ( it1.current()->isSelected() )
getItem(it1.current());
it1.current()->setSelected(FALSE);
}
for ( ; it2.current(); ++it2 ) {
if ( it2.current()->isSelected() )
getItem(it2.current());
it2.current()->setSelected(FALSE);
}
for ( ; it3.current(); ++it3 ) {
if ( it3.current()->isSelected() )
getItem(it3.current());
it3.current()->setSelected(FALSE);
}
for ( ; it4.current(); ++it4 ) {
if ( it4.current()->isSelected() )
getItem(it4.current());
it4.current()->setSelected(FALSE);
}
for ( ; it5.current(); ++it5 ) {
if ( it5.current()->isSelected() )
getItem(it5.current());
it5.current()->setSelected(FALSE);
}
return true;
}
/*
handles the sorting combo box */
void LibraryDialog::comboSelect(int index)
{
- // qDebug("we are sorting");
+ // odebug << "we are sorting" << oendl;
ListView1->setSorting( index, TRUE);
ListView2->setSorting( index, TRUE);
ListView3->setSorting( index, TRUE);
ListView4->setSorting( index, TRUE);
ListView5->setSorting( index, TRUE);
ListView1->sort();
ListView2->sort();
ListView3->sort();
ListView4->sort();
ListView5->sort();
// ListView1->triggerUpdate();
// ListView2->triggerUpdate();
// ListView3->triggerUpdate();
// ListView4->triggerUpdate();
// ListView5->triggerUpdate();
}
void LibraryDialog::newList()
{
if(indexLoaded) {
onButtonDownload();
} else {
Output *outDlg;
buttonNewList->setDown(TRUE);
QDir gutDir(QPEApplication::qpeDir()+"etc/gutenbrowser");
if(!gutDir.exists()) gutDir.mkdir(QPEApplication::qpeDir()+"etc/gutenbrowser",true);
if( chdir(QPEApplication::qpeDir()+"etc/gutenbrowser") == 0) {
- qDebug("changing dir "+QPEApplication::qpeDir()+"etc/gutenbrowser");
+ odebug << "changing dir "+QPEApplication::qpeDir()+"etc/gutenbrowser" << oendl;
QString gutenindex1 = QPEApplication::qpeDir()+"etc/gutenbrowser/GUTINDEX.ALL";
QString cmd="wget -O " + gutenindex1 + " http://sailor.gutenberg.org/GUTINDEX.ALL 2>&1";
int result = QMessageBox::warning( this,"Download"
,"Ok to use /'wget/' to download\na new library list?\n"
,"Yes","No",0,0,1);
qApp->processEvents();
if(result == 0) {
outDlg = new Output( 0, tr("Downloading Gutenberg Index...."),TRUE);
outDlg->showMaximized();
outDlg->show();
qApp->processEvents();
FILE *fp;
char line[130];
outDlg->OutputEdit->append( tr("Running wget") );
outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
sleep(1);
fp = popen( (const char *) cmd, "r");
if ( !fp ) {
} else {
- qDebug("Issuing the command\n"+cmd);
+ 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->OutputEdit->append("Finished downloading\n");
outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
qApp->processEvents();
// if( QFile(gutenindex1).exists() ) {
// QString gutenindex=QPEApplication::qpeDir()+"etc/gutenbrowser/GUTINDEX.ALL";
// if( rename(gutenindex1.latin1(),gutenindex.latin1()) !=0)
- // qDebug("renaming error");
+ // odebug << "renaming error" << oendl;
// }
}
// outDlg->close();
FindLibrary();
if(outDlg) delete outDlg;
}
buttonNewList->setDown(FALSE);
} else {
QMessageBox::message("Note","Could not change directories");
}
// if(outDlg)
// delete outDlg;
}
}
bool LibraryDialog::moreInfo()
{
QListViewItem * item;
item = 0;
QString titleString;
item = ListView1->currentItem();
if( item != 0) {
titleString = item->text(0);
ListView1->clearSelection();
item = 0;
}
if( item == 0)
item = ListView2->currentItem();
if( item != 0) {
titleString = item->text(0);
ListView2->clearSelection();
item = 0;
}
if( item == 0)
item = ListView3->currentItem();
if( item != 0) {
titleString = item->text(0);
ListView3->clearSelection();
item = 0;
}
if( item == 0)
item = ListView4->currentItem();
if( item != 0) {
titleString = item->text(0);
ListView4->clearSelection();
item = 0;
}
if( item == 0)
item = ListView5->currentItem();
if( item != 0) {
titleString = item->text(0);
ListView5->clearSelection();
item = 0;
}
item=0;
if(titleString.length()>2) {
- qDebug( "Title is "+titleString );
+ odebug << "Title is "+titleString << oendl;
titleString.replace( QRegExp("\\s"), "%20");
titleString.replace( QRegExp("'"), "%20");
titleString.replace( QRegExp("\""), "%20");
titleString.replace( QRegExp("&"), "%20");
QString cmd= "http://google.com/search?q="+titleString+"&num=30&sa=Google+Search";
cmd="opera "+cmd;
system(cmd);
} else
QMessageBox::message( "Note","If you select a title, this will\nsearch google.com for that title.");
return true;
}
/*
This loads the library Index*/
void LibraryDialog::FindLibrary()
{
buttonLibrary->setDown(TRUE);
qApp->processEvents();
if( QFile( new_index).exists() /* && this->isHidden() */) {
newindexLib.setName( new_index);
indexLib.setName( new_index);
- qDebug("index file is "+ new_index);
+ odebug << "index file is "+ new_index << oendl;
Newlibrary();
} else {
newindexLib.setName( old_index);
indexLib.setName( old_index);
- qDebug("new index nameis "+ old_index);
+ odebug << "new index nameis "+ old_index << oendl;
Library();
}
indexLoaded=true;
buttonSearch->setEnabled(TRUE);
moreInfoButton->setEnabled(TRUE);
buttonLibrary->setDown(FALSE);
buttonNewList->setText("Download");
qApp->processEvents();
}
diff --git a/noncore/apps/opie-gutenbrowser/NetworkDialog.cpp b/noncore/apps/opie-gutenbrowser/NetworkDialog.cpp
index aed53c6..6e6b707 100644
--- a/noncore/apps/opie-gutenbrowser/NetworkDialog.cpp
+++ b/noncore/apps/opie-gutenbrowser/NetworkDialog.cpp
@@ -1,329 +1,335 @@
// /***************************************************************************
// NetworkDialog.cpp - description
// begin : Sun Aug 27 2000
// copyright : (C) 2000 - 2004 by L.J. Potter
// 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. *
// ***************************************************************************/
// // half-assed attempt at providing a network dialog.
// /* Created: Sun Aug 27 15:24:52 2000*/
-#include <unistd.h>
-extern "C" {
-#include <ftplib.h>
-}
#include "NetworkDialog.h"
#include "gutenbrowser.h"
+/* OPIE */
+#include <opie2/odebug.h>
+
+/* QT */
#include <qprogressbar.h>
#include <qstringlist.h>
#include <qpe/config.h>
#include <qvaluelist.h>
#include <qapplication.h>
#include <qfile.h>
#include <qstringlist.h>
#include <qlabel.h>
#include <qpushbutton.h>
#include <qlayout.h>
+/* STD */
+#include <unistd.h>
+extern "C" {
+#include <ftplib.h>
+}
+
QProgressBar* ProgressBar1;
QPushButton* buttonCancel;
static netbuf *conn = NULL;
static int log_progress(netbuf *ctl, int xfered, void *arg) {
int fsz = *(int *)arg;
int pct = (xfered * 100) / fsz;
printf("%3d%%\r", pct);
fflush(stdout);
ProgressBar1->setProgress(xfered);
qApp->processEvents();
return 1;
}
NetworkDialog::NetworkDialog( QWidget* parent, const char* name, bool modal, WFlags fl, const QStringList netL)
: QDialog( parent, name, modal, fl )
{
ftp_host = netL[0];
networkUrl = strUrl = netL[0];
dir = ftp_base_dir = netL[1];
localFileName = netL[2];
s_partialFileName = netL[3];
resize(240,110);
local_library = (QDir::homeDirPath ()) +"/Applications/gutenbrowser/";
// autoOk = autoDownload;
// if( networkUrl.find("ftp",0,false)== -1 ) {
// if ( !name )
// setName( "HTTP NetworkDialog" );
// setCaption( tr( "HTTP Download ) );
// qInitNetworkProtocols(); // registers ftp protocol // for now
// QNetworkProtocol::registerNetworkProtocol( "http", new QNetworkProtocolFactory<Http> );
// } else {
if ( !name )
setName( "FTP NetworkDialog" );
setCaption(tr("FTP Download"));
// }
initDialog(); //opens file to be written
}
NetworkDialog::~NetworkDialog() {
}
void NetworkDialog::initDialog() {
totalBytesDownloaded=0;
warnLabel = new QLabel( this, "TextLabel" );
warnLabel ->setText( tr( "Push Ok to download file...." ) );
TextLabel3 = new QLabel( this, "TextLabel3" );
TextLabel3->setText( "");
QWidget* Layout1 = new QWidget( this, "Layout1" );
hbox = new QHBoxLayout(Layout1);
hbox->setMargin(4);
ProgressBar1 = new QProgressBar( Layout1, "ProgressBar1" );
ProgressBar1->setProgress(0);
hbox->addWidget(ProgressBar1,10,AlignCenter);
hbox->addStretch(1);
buttonOk = new QPushButton( Layout1, "buttonOk" );
buttonOk->setText( tr( "&OK" ) );
hbox->addWidget(buttonOk,0,AlignRight);
hbox->addSpacing(5);
buttonCancel = new QPushButton( Layout1, "buttonCancel" );
buttonCancel->setText( tr( "&Cancel" ) );
buttonCancel->setAutoDefault( TRUE );
buttonCancel->setDefault( TRUE );
hbox->addWidget(buttonCancel,0,AlignRight);
ProgressBar1->setFixedSize(140,22);
buttonOk->setFixedSize(35,22);
buttonCancel->setFixedSize(35,22);
warnLabel ->setGeometry( QRect( 5,1,230,25));
TextLabel3->setGeometry( QRect( 5,20,230,25));
Layout1->setGeometry( QRect(1,60,235,50)); //TODO check these!!
// timer= new QTimer(this,"vu timer");
// connectionTimer=new QTimer(this,"connectionTimeout");
connect(buttonOk,SIGNAL(clicked()),this,SLOT(doOk()));
connect(buttonCancel,SIGNAL(clicked()),this,SLOT(reject()));
// connect( timer, SIGNAL(timeout()), this , SLOT(timeSlot()));
// connect( connectionTimer,SIGNAL( timeout()),this,SLOT( connectionTimeSlot()));
if(autoOk) {
- qWarning("XXXXXXXXXXXXXXXXXXXXXXXX");
+ owarn << "XXXXXXXXXXXXXXXXXXXXXXXX" << oendl;
buttonOk->setDown(true);
doOk();
}
}
void NetworkDialog::timeSlot() {
// if(timerProgess < 19 && posTimer) {
// ProgressBar1->setProgress(timerProgess);
// timerProgess++;
// } else if(timerProgess > 19 && posTimer) {
// ProgressBar1->setProgress(timerProgess);
// timerProgess++;
// posTimer=FALSE;
// }
// if(timerProgess > 1 &&!posTimer) {
// ProgressBar1->setProgress(timerProgess);
// timerProgess--;
// } else if(timerProgess > 1 &&!posTimer){
// ProgressBar1->setProgress(timerProgess);
// timerProgess--;
// posTimer=TRUE;
// }
-// // qDebug("timer event");
+// // odebug << "timer event" << oendl;
// qApp->processEvents();
// repaint();
}
void NetworkDialog::connectionTimeSlot() {
-// qDebug("Connections timed out");
+// odebug << "Connections timed out" << oendl;
// ftpQuit();
// qApp->processEvents();
// repaint();
// reject();
}
/*
downloads the file networkUrl */
bool NetworkDialog::downloadFile( QString networkUrl )
{
int fsz;
// timer->start( 250 , FALSE);
// posTimer=TRUE;
// connectionTimer->start( 600 , FALSE);
warnLabel ->setText( "");
qApp->processEvents();
- qDebug("Downloading: %s",networkUrl.latin1());
- qDebug("Into: %s",localFileName.latin1());
+ odebug << "Downloading: " << networkUrl << "" << oendl;
+ odebug << "Into: " << localFileName << "" << oendl;
if( networkUrl.length() > 5) {
QString ftp_user = "anonymous";
QString ftp_pass = "zaurus@gutenbrowser.com";
// ftp_host= networkUrl.mid(networkUrl.find("ftp://",0, TRUE),
if(ftp_host.length() < 2) {
- qDebug("Please select an ftp host" );
+ odebug << "Please select an ftp host" << oendl;
successDownload=false;
QMessageBox::message("Note","You need to select an ftp host");
return false;
}
QString msg;
- qDebug(ftp_host);
- qDebug("Opening ftp connection.");
+ odebug << ftp_host << oendl;
+ odebug << "Opening ftp connection." << oendl;
warnLabel->setText("connecting to: "+ftp_host );
qApp->processEvents();
/////////// Open FTP connection
if (!FtpConnect( ftp_host.latin1(), &conn)) {
i=0;
successDownload=false;
QMessageBox::message("Note","Unable to connect to\n"+ftp_host);
return false;
}
TextLabel3->setText("Opening ftp connection.");
qApp->processEvents();
if (!FtpLogin( ftp_user.latin1(), ftp_pass.latin1(),conn )) {
FtpQuit(conn);
successDownload=false;
msg.sprintf("Unable to log in\n%s",FtpLastResponse(conn));
QMessageBox::message("Note",msg);
return false;
}
- qDebug("Changing directories.");
+ odebug << "Changing directories." << oendl;
TextLabel3->setText("Changing directories.");
qApp->processEvents();
if (!FtpChdir( dir.latin1(), conn )) {
successDownload=false;
msg.sprintf("Unable to change directories "+dir+"\n%s",FtpLastResponse(conn));
QMessageBox::message("Note",msg);
FtpQuit(conn);
return false;
}
// if (!FtpNlst( "./.guten_temp", dir, conn)) {
// successDownload=false;
// msg.sprintf("Unable to change directories "+dir+"\n%s",FtpLastResponse(conn));
// QMessageBox::message("Note",msg);
// FtpQuit(conn);
// return false;
// }
- qDebug("Requesting directory list.");
+ odebug << "Requesting directory list." << oendl;
TextLabel3->setText("Getting directory list.");
qApp->processEvents();
if (!FtpDir( "./.guten_temp", dir.latin1(), conn) ) {
msg.sprintf("Unable to list the directory\n"+dir+"\n%s",FtpLastResponse(conn));
QMessageBox::message("Note",msg);
successDownload=false;
FtpQuit(conn);
return false;
}
QFile tmp("./.guten_temp");
QString s, File_Name;
if (tmp.open(IO_ReadOnly)) {
QTextStream t( &tmp ); // use a text stream
- qDebug("Finding partial filename "+s_partialFileName);
+ odebug << "Finding partial filename "+s_partialFileName << oendl;
while ( !t.eof()) {
s = t.readLine();
if (s.contains(s_partialFileName, FALSE)) {
QString str = s.right( (s.length()) - (s.find(s_partialFileName, FALSE)) );
if (str.contains(".txt")) {
File_Name = str;
- qDebug("Found file_name "+ File_Name);
+ odebug << "Found file_name "+ File_Name << oendl;
break;
}
// if (str.contains(".zip")) {
// File_Name = str;
-// qDebug("Found file_name "+ File_Name);
+// odebug << "Found file_name "+ File_Name << oendl;
// break;
// }
}
} //end of while loop
tmp.close();
// tmp.remove(); ///TODO this is for release version Zaurus
}
else
- qDebug("Error opening temp file.");
+ odebug << "Error opening temp file." << oendl;
Config cfg("Gutenbrowser");
cfg.setGroup("General");
QString temp=cfg.readEntry("DownloadDirectory",local_library);
localFileName = temp+File_Name;
- qDebug("Requesting file "+ File_Name);
- qDebug( "Saving as "+localFileName);
+ odebug << "Requesting file "+ File_Name << oendl;
+ odebug << "Saving as "+localFileName << oendl;
msg="Requesting file "+ File_Name;
TextLabel3->setText(msg);
qApp->processEvents();
if( File_Name.length()>3) {
if (!FtpSize( File_Name.latin1(), &fsz, FTPLIB_ASCII, conn))
fsz = 0;
QString temp;
temp.sprintf( File_Name+" "+" %dkb", fsz);
TextLabel3->setText(temp);
ProgressBar1->setTotalSteps(fsz);
FtpOptions(FTPLIB_CALLBACK, (long) log_progress, conn);
FtpOptions(FTPLIB_IDLETIME, (long) 1000, conn);
FtpOptions(FTPLIB_CALLBACKARG, (long) &fsz, conn);
FtpOptions(FTPLIB_CALLBACKBYTES, (long) fsz/10, conn);
if (!FtpGet( localFileName.latin1(), File_Name.latin1(), FTPLIB_ASCII, conn)) {
msg.sprintf("Could not download "+ File_Name+"\n%s",FtpLastResponse(conn));
successDownload=false;
QMessageBox::message("Note",msg);
update();
}
} else {
QMessageBox::message("Note","Could not download file "+ File_Name);
successDownload=false;
FtpQuit(conn);
return false;
}
- qDebug("Ftp session successful");
+ odebug << "Ftp session successful" << oendl;
successDownload=TRUE;
FtpQuit(conn);
return true;
} //no network url
return false;
}
void NetworkDialog::doOk() {
- qWarning("Do OK");
+ owarn << "Do OK" << oendl;
QString loginStr;
loginStr = "gutenbrowser";
if ( !ftp_host.isEmpty() ) {
if( ftp_host.find( "/", ftp_host.length() - 1,TRUE) != -1 && ftp_host.find("ftp://",0, TRUE) != -1) {
TextLabel3->setText( tr( "List remote dir:\n" + ftp_host) );
// TextLabel2->setText( tr( "local file to download into: " +localFileName ) );
if( downloadFile(ftp_host))
successDownload = true;
else {
successDownload = false;
reject();
}
} else {
if(downloadFile(ftp_host))
successDownload = true;
else {
successDownload = false;
reject();
}
}
}
accept();
}
diff --git a/noncore/apps/opie-gutenbrowser/SearchDialog.cpp b/noncore/apps/opie-gutenbrowser/SearchDialog.cpp
index 4ddb3f0..d989304 100644
--- a/noncore/apps/opie-gutenbrowser/SearchDialog.cpp
+++ b/noncore/apps/opie-gutenbrowser/SearchDialog.cpp
@@ -1,136 +1,136 @@
/****************************************************************************
** Created: Tue Aug 29 11:45:00 2000**/
// copyright : (C) 2000 -2004 by llornkcor
// email : ljp@llornkcor.com
#include "SearchDialog.h"
#include "SearchResults.h"
#include <qlayout.h>
#include <qcheckbox.h>
#include <qlabel.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include <qvariant.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qmessagebox.h>
#include <qdir.h>
#include <qpe/config.h>
/*This is just a single text entry dialog */
SearchDialog::SearchDialog( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl )
{
if ( !name )
setName( "SearchDialog" );
Config cfg("Gutenbrowser");
cfg.setGroup("General");
QString lastSearch=cfg.readEntry("LastSearch","");
#warning FIXME
// FIXME
resize( 220,100);
QGridLayout *layout = new QGridLayout( this );
layout->setSpacing( 2);
layout->setMargin( 2);
QString local_library = (QDir::homeDirPath ()) +"/Applications/gutenbrowser/";
TextLabel1 = new QLabel( this, "TextLabel1" );
layout->addMultiCellWidget( TextLabel1, 0, 0, 0, 1);
label1Str= "<P>Enter text to search etext for </P>" ;
TextLabel1->setText( tr( label1Str) );
SearchLineEdit = new QLineEdit( this, "SearchLineEdit" );
layout->addMultiCellWidget( SearchLineEdit, 1, 1, 0, 1);
buttonOk = new QPushButton( this, "buttonOk" );
buttonOk->setText( tr( "Sea&rch" ) );
buttonOk->setAutoDefault( TRUE );
buttonOk->setToggleButton( TRUE);
buttonOk->setDefault( TRUE );
layout->addMultiCellWidget(buttonOk, 2, 2, 0, 0);
buttonCancel = new QPushButton( this, "buttonCancel" );
buttonCancel->setText( tr( "&Cancel" ) );
buttonCancel->setAutoDefault( TRUE );
layout->addMultiCellWidget(buttonCancel, 2, 2, 1, 1);
// buttonCancel->setMaximumWidth(40);
if( (QString)name !="Etext Search" )
SearchLineEdit->setText(lastSearch);
caseSensitiveCheckBox = new QCheckBox ( tr("Case Sensitive"), this );
layout->addMultiCellWidget( caseSensitiveCheckBox, 3, 3, 0, 1);
// signals and slots connections
connect( buttonOk, SIGNAL( clicked() ), this, SLOT( byeBye() ) );
connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( closed() ) );
SearchLineEdit->setFocus();
}
SearchDialog::~SearchDialog()
{
}
QString SearchDialog::get_text() {
return SearchLineEdit->text();
}
bool SearchDialog::get_direction() {
return false; //search forward
}
bool SearchDialog::case_sensitive() {
return true;
}
bool SearchDialog::forward_search() {
return true;
}
void SearchDialog::byeBye()
{
searchString = get_text();
-// qDebug("Search string is "+searchString);
+// odebug << "Search string is "+searchString << oendl;
Config cfg("Gutenbrowser");
cfg.setGroup("General");
cfg.writeEntry("LastSearch",searchString);
QString thisName=name();
if( thisName.find("Library Search", 0, TRUE) != -1) {
// searchString = SearchLineEdit->text();
accept();
} else {
buttonOk->setDown(TRUE);
emit search_signal();
buttonOk->setDown(FALSE);
}
}
void SearchDialog::closed()
{
searchString = get_text();
-// qDebug("Search string is "+searchString);
+// odebug << "Search string is "+searchString << oendl;
Config cfg("Gutenbrowser");
cfg.setGroup("General");
cfg.writeEntry("LastSearch",searchString);
emit search_done_signal();
//this->reject();
this->hide();
}
void SearchDialog::setLabel(QString labelText)
{
TextLabel1->setText( tr( label1Str+labelText) );
}
diff --git a/noncore/apps/opie-gutenbrowser/browserDialog.cpp b/noncore/apps/opie-gutenbrowser/browserDialog.cpp
index 81dd516..cc05d04 100644
--- a/noncore/apps/opie-gutenbrowser/browserDialog.cpp
+++ b/noncore/apps/opie-gutenbrowser/browserDialog.cpp
@@ -1,86 +1,87 @@
/****************************************************************************
copyright 2001 by L.J. Potter ljp@llornkcor.com
copyright : (C) 2000 -2004 by llornkcor
email : ljp@llornkcor.com
****************************************************************************/
#include "optionsDialog.h"
//#include "fileBrowser.h"
/* OPIE */
#include <opie2/ofiledialog.h>
+#include <opie2/odebug.h>
using namespace Opie::Ui;
/* QT */
#include <qlabel.h>
#include <qlistbox.h>
#include <qpushbutton.h>
#include <qlayout.h>
void optionsDialog::BrowserDlg( )
{
// setCaption( tr( "Choose Browser" ) );
http_ListBox1->insertItem( tr( "Opera"));
http_ListBox1->insertItem( tr( "Konqueror"));
http_ListBox1->insertItem( tr( "wget"));
}
void optionsDialog::select_title(int) {
browserName = http_ListBox1->currentText();
Config config("Gutenbrowser");
config.setGroup( "Browser" );
printf("Brow is: "+browserName+"\n");
config.writeEntry("Preferred", browserName);
TextLabel3_3->setText( "Current http browser: "+browserName );
}
void optionsDialog::BrowseSelected() {
QString fileName;
Config cfg("Gutenbrowser");
cfg. setGroup ( "View" );
QString dir = cfg.readEntry("LastOpenDirectory", QPEApplication::documentDir());
QMap<QString, QStringList> map;
map.insert(tr("All"), QStringList() );
QStringList text;
text << "text/*";
map.insert(tr("Text"), text );
text << "*";
map.insert(tr("All"), text );
QString str = OFileDialog::getOpenFileName( 2, dir , QString::null, map);
if( !str.isEmpty() && QFile(str).exists() && !QFileInfo(str).isDir() ) {
fileName = str;
// QStringList fileList=browseForFiles->fileList;
-// qDebug(selFile);
+// odebug << selFile << oendl;
// QStringList::ConstIterator f;
// QString fileTemp,filer;
// for ( f = fileList.begin(); f != fileList.end(); f++ ) {
// fileTemp = *f;
// fileTemp.right( fileTemp.length()-5);
// fileName = fileTemp;
// if( !fileName.isEmpty() ){
// filer = fileName;
// } else {
// QString sMsg;
// sMsg = "Error opening library filelist "+fileName;
// }
if ( !fileName.isNull() ) { // got a file name
// ...
}
}
}
void optionsDialog::setHttp(int index) {
Config config("Gutenbrowser");
config.setGroup( "HttpServer" );
- qDebug("writing http server");
+ odebug << "writing http server" << oendl;
if( index== 0) {
config.writeEntry("Preferred", "http://sailor.gutenberg.org");
} else {
config.writeEntry("Preferred", "http://www.prairienet.org/pg");
}
}
diff --git a/noncore/apps/opie-gutenbrowser/fontDialog.cpp b/noncore/apps/opie-gutenbrowser/fontDialog.cpp
index a17b1d3..fa964a6 100644
--- a/noncore/apps/opie-gutenbrowser/fontDialog.cpp
+++ b/noncore/apps/opie-gutenbrowser/fontDialog.cpp
@@ -1,260 +1,260 @@
/****************************************************************************
** Created: Sun Jan 27 11:03:24 2002
copyright 2002 by L.J. Potter ljp@llornkcor.com
copyright : (C) 2000 -2004 by llornkcor
email : ljp@llornkcor.com
****************************************************************************/
#include "fontDialog.h"
#include "optionsDialog.h"
#include <qpe/fontdatabase.h>
#include <qpe/config.h>
#include <qstringlist.h>
#include <qfontinfo.h>
#include <qvaluelist.h>
#include <qpe/qpeapplication.h>
#include <qgroupbox.h>
#include <qlabel.h>
#include <qlistbox.h>
#include <qmultilineedit.h>
#include <qpushbutton.h>
#include <qlayout.h>
#include <qvariant.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qcombobox.h>
//#define BUGGY_SHARP_ZAURUS 0
static const int nfontsizes = 9;
static const int fontsize[nfontsizes] = {8,9,10,11,12,13,14,18,24};
FontDialog::FontDialog( QWidget * parent, const char* name /*, bool modal, WFlags fl */)
:/* QDialog*/ QWidget( parent, name /*, modal, fl */)
{
if ( !name )
setName( "FontDialog" );
setCaption( tr( "Font Dialog" ) );
QGridLayout *layout = new QGridLayout( this );
layout->setSpacing(2);
layout->setMargin(2);
familyListBox = new QListBox( this, "familyListBox" );
layout->addMultiCellWidget( familyListBox, 0, 2, 0, 0);
QBoxLayout * hbox = new QHBoxLayout(this);
QBoxLayout * vbox = new QVBoxLayout(this);
styleListBox = new QListBox( this, "styleListBox" );
vbox->addWidget( styleListBox, 0);
FontTextLabel4 = new QLabel( this, "TextLabel4" );
FontTextLabel4->setText( tr( "Size" ) );
hbox->addWidget( FontTextLabel4,0);
sizeComboBox = new QComboBox( FALSE, this, "SizeCombo");
// sizeComboBox->setMaximumWidth(60);
hbox->addWidget( sizeComboBox, 0);
vbox->addLayout(hbox,0);
layout->addLayout( vbox,0,3);
MultiLineEdit1 = new QMultiLineEdit( this, "MultiLineEdit1" );
MultiLineEdit1->setText( tr( "The Quick Brown Fox Jumps Over The Lazy Dog" ) );
MultiLineEdit1->setWordWrap( QMultiLineEdit::WidgetWidth);
layout->addMultiCellWidget( MultiLineEdit1, 4, 4, 0, 3);
connect(familyListBox,SIGNAL(highlighted(const QString &)),SLOT(familyListBoxSlot(const QString &)));
connect(styleListBox,SIGNAL(highlighted(const QString &)),SLOT(styleListBoxSlot(const QString &)));
connect(sizeComboBox,SIGNAL(activated(const QString &)),SLOT(sizeComboBoxSlot(const QString &)));
populateLists();
}
FontDialog::~FontDialog()
{
}
void FontDialog::familyListBoxSlot(const QString & text)
{
int styleInt = styleListBox->currentItem();
int sizeInt = sizeComboBox->currentText().toInt();
sizeComboBox->clear();
styleListBox->clear();
// clearListBoxes();
family = text;
-// qDebug(family);
+// odebug << family << oendl;
QStringList styles = fdb.styles( family ); // string list of styles of our current font family
styleListBox->insertStringList( styles);
QString dstyle;// = "\t" + style + " (";
#ifdef BUGGY_SHARP_ZAURUS
QValueList<int> smoothies = fdb.smoothSizes( family, styleListBox->text(0) );
for ( QValueList<int>::Iterator points = smoothies.begin(); points != smoothies.end(); ++points ) {
dstyle = QString::number( *points );
- qDebug(dstyle);
+ odebug << dstyle << oendl;
sizeComboBox->insertItem( dstyle.left( dstyle.length() - 1 ));
}
#else
for (int i=0; i<nfontsizes; i++) {
sizeComboBox->insertItem( QString::number(fontsize[i]));
if(fontsize[i] == sizeInt) {
sizeComboBox->setCurrentItem(i);
}
}
#endif
if(styleInt == -1 || styleInt > styleListBox->count() )
styleListBox->setCurrentItem(0);
else
styleListBox->setCurrentItem(styleInt);
changeText();
}
void FontDialog::styleListBoxSlot(const QString &text)
{
changeText();
}
void FontDialog::sizeComboBoxSlot(const QString & text)
{
changeText();
}
void FontDialog::populateLists()
{
// QFont defaultFont=MultiLineEdit1->font();
// QFont defaultFont=Lview->font();
// QFontInfo fontInfo(defaultFont);
Config config("Gutenbrowser");
config.setGroup("Font");
QString familyStr = config.readEntry("Family", "fixed");
QString styleStr = config.readEntry("Style", "Regular");
QString sizeStr = config.readEntry("Size", "10");
QString charSetStr = config.readEntry("CharSet", "iso10646-1" );
bool ok;
int i_size = sizeStr.toInt(&ok,10);
selectedFont = fdb.font(familyStr,styleStr,i_size,charSetStr);
// defaultFont.setItalic(TRUE);
families = fdb.families();
for ( QStringList::Iterator f = families.begin(); f != families.end();++f ) {
QString family = *f;
// if(family == defaultFont.family())
-// qDebug(family);
+// odebug << family << oendl;
familyListBox->insertItem( family);
if( familyListBox->text(0) == family) {
QStringList styles = fdb.styles( family );
// string list of styles of our current font family
styleListBox->insertStringList( styles);
for ( QStringList::Iterator s = styles.begin(); s != styles.end();++s ) { // for each font style
style = *s;
QString dstyle;// = "\t" + style + " (";
if(styleListBox->text(0) == style) {
QValueList<int> smoothies = fdb.smoothSizes( family, style );
for ( QValueList<int>::Iterator points = smoothies.begin(); points != smoothies.end(); ++points ) {
dstyle = QString::number( *points ) + " ";
sizeComboBox ->insertItem( dstyle.left( dstyle.length() - 1 ));
}
dstyle = dstyle.left( dstyle.length() - 1 ) + ")";
}
} // styles
}
}
for(int i=0;i < familyListBox->count();i++) {
if( familyListBox->text(i) == familyStr)
familyListBox->setSelected( i, TRUE);
}
for(int i=0;i < styleListBox->count();i++) {
if( styleListBox->text(i) == styleStr)
styleListBox->setSelected( i, TRUE);
}
for (int i=0; i<sizeComboBox->count(); i++) {
#ifdef BUGGY_SHARP_ZAURUS
if(sizeComboBox->text(i) == sizeStr)
#else
if(fontsize[i] == i_size)
#endif
sizeComboBox->setCurrentItem(i);
}
changeText();
}
void FontDialog::clearListBoxes() {
familyListBox->clear();
sizeComboBox->clear();
styleListBox->clear();
}
void FontDialog::changeText()
{
if( familyListBox->currentItem() == -1)
family= familyListBox->text(0);
else {
family = familyListBox->currentText();
}
-// qDebug("Font family is "+family);
+// odebug << "Font family is "+family << oendl;
if( styleListBox->currentItem() == -1)
style=styleListBox->text(0);
else {
style = styleListBox->currentText();
}
-// qDebug("font style is "+style);
+// odebug << "font style is "+style << oendl;
if( sizeComboBox->currentItem() == -1 )
size = sizeComboBox->text(0);
else {
size = sizeComboBox->currentText();
}
-// qDebug("Font size is "+size);
+// odebug << "Font size is "+size << oendl;
bool ok;
int i_size = size.toInt(&ok,10);
QStringList charSetList = fdb.charSets(family);
// QStringList styles = fdb.styles( family ); // string list of styles of our current font family
QString charSet;
for ( QStringList::Iterator s = charSetList.begin(); s != charSetList.end();++s ) { // for each font style
charSet = *s;
-// qDebug(charSet);
+// odebug << charSet << oendl;
}
selectedFont = fdb.font(family,style,i_size,charSet);
QFontInfo fontInfo( selectedFont);
-// if(fontInfo.italic() ) qDebug("italic");
+// if(fontInfo.italic() ) odebug << "italic" << oendl;
selectedFont.setWeight(fontInfo.weight() );
-// qDebug("Style are "+style+" %d ",fontInfo.weight());
+// odebug << "Style are "+style+" " << fontInfo.weight() << " " << oendl;
Config cfg("Gutenbrowser");
cfg.setGroup("Font");
cfg.writeEntry("Family",family);
cfg.writeEntry("Style",style);
cfg.writeEntry("Size",size);
cfg.writeEntry("CharSet",charSet);
if(style.find("Italic",0,TRUE) != -1) {
selectedFont = fdb.font(family,"Regular",i_size,charSet);
selectedFont.setItalic(TRUE); //ya right
cfg.writeEntry("Italic","TRUE");
-// qDebug("Style is "+styleListBox->currentText());
+// odebug << "Style is "+styleListBox->currentText() << oendl;
} else
cfg.writeEntry("Italic","FALSE");
MultiLineEdit1->setFont( selectedFont);
MultiLineEdit1->update();
changedFonts=TRUE;
}
diff --git a/noncore/apps/opie-gutenbrowser/ftpsitedlg.cpp b/noncore/apps/opie-gutenbrowser/ftpsitedlg.cpp
index ad770b5..a9c7346 100644
--- a/noncore/apps/opie-gutenbrowser/ftpsitedlg.cpp
+++ b/noncore/apps/opie-gutenbrowser/ftpsitedlg.cpp
@@ -1,247 +1,252 @@
/***************************************************************************
ftpsitedlg.cpp - description
-------------------
begin : Tue Jul 25 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. *
***************************************************************************/
+
#include "optionsDialog.h"
#include "gutenbrowser.h"
//#include "NetworkDialog.h"
#include "output.h"
+/* OPIE */
+#include <opie2/odebug.h>
+#include <qpe/config.h>
+
+/* QT */
#include <qprogressbar.h>
-#include <stdlib.h>
#include <qurloperator.h>
-#include <qpe/config.h>
#include <qlistbox.h>
+/* STD */
+#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
-#include <stdlib.h>
// :)~
void optionsDialog::ftpSiteDlg( )
{
//printf( "ftpSiteDlg: ListFile is "+ ListFile +"\n" );
// initDialog();
local_library = (QDir::homeDirPath ()) +"/Applications/gutenbrowser/";
// ListFile = local_library + "ftpList";
ListFile = QPEApplication::qpeDir() + "/etc/gutenbrowser";
QDir dir(ListFile);
if( !dir.exists())
dir.mkdir(ListFile,true);
ListFile+="/ftpList";
- qDebug("opening "+ListFile);
+ odebug << "opening "+ListFile << oendl;
if ( QFile(ListFile).exists() ) {
openSiteList();
} else {
switch( QMessageBox::warning( this, "Gutenbrowser",
"Do you want to download \nan ftp site list?",
QMessageBox::Yes, QMessageBox::No)) {
case QMessageBox::Yes: // yes
getSite();
break;
case QMessageBox::No: // No
// exit
break;
}
}
}
/*
// get ftp list from web- parse it. */
void optionsDialog::getSite()
{
QString file_name;
QString ftp_listFileURL;
QString outputFile;
// outputFile = local_library+ "list.html";
outputFile = ListFile + "list.html";
QString networkUrl= "http://www.gutenberg.org/www/mirror.sites.html";
//http://www.gutenberg.org/index.html";
// QString networkUrl= "http://llornkcor.com/index.shtml";
// // "http://www.gutenberg.org/index.html"
//
//Qhttp stops working at times.... :(
// 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
-// qDebug("gitcha!");
+// odebug << "gitcha!" << oendl;
// }
// delete NetworkDlg;
//#ifdef Q_WS_QWS
// TODO qprocess here
QString cmd="wget -T 15 -O " +outputFile + " " + networkUrl + " 2>&1" ;
- qDebug("Issuing the command "+cmd);
+ odebug << "Issuing the command "+cmd << oendl;
Output *outDlg;
outDlg = new Output( 0, tr("Downloading ftp sites...."),TRUE);
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");
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;
// outputFile=ListFile;
ftp_QListBox_1->clear();
parseFtpList( outputFile); // got the html list, now parse it so we can use it
}
bool optionsDialog::parseFtpList( QString outputFile)
{
// parse ftplist html and extract just the machine names/directories
// TODO: add locations!!
- qDebug("parse ftplist "+outputFile);
+ odebug << "parse ftplist "+outputFile << oendl;
QString ftpList, s_location;
QFile f( outputFile );
if( f.open( IO_ReadWrite )) {
QTextStream t( &f);
QString countryName;
bool b_gotchTest=false;
while ( !t.eof() ) {
QString s = t.readLine();
int start;
int end;
if( s.find( "FTP mirror sites for Project Gutenberg:", 0, TRUE) !=-1) { //lower end of this file
b_gotchTest = true;
}
if( b_gotchTest) {
if(( start = s.find( "ftp://", 0, TRUE))!=-1 ) {
end = s.find( "/\"", 0, TRUE);// ==-1)) {
if( end == -1) {
end = s.find( "\">");
}
ftpSite = s.mid( start, (end - start) );
if(ftpSite.right(1) != "/") {
// ftpSite += "/";
}
ftpSite=ftpSite.right( ftpSite.length()-6);
if( ftpSite.find("\n", 0, TRUE) )
ftpSite.remove( ftpSite.find("\n", 0, TRUE), 1);
if( ftpSite.find("\"", 0, TRUE) )
ftpSite.remove( ftpSite.find("\"", 0, TRUE), 1);
if( ftpSite.find("a>", 0, TRUE) )
ftpSite.remove( ftpSite.find("a>", 0, TRUE) -2, 4);
s = t.readLine();
s = t.readLine();
if(( start=s.find("<BR>(", 0, TRUE) ) != -1) {
-// qDebug("%s",s.latin1());
+// odebug << "" << s << "" << oendl;
end = s.find( ")", 0, TRUE)+1;
s_location= s.mid( start+4, (end - start) );
-// qDebug("%s", s_location.latin1());
+// odebug << "" << s_location << "" << oendl;
// ftpList += ftpSite + "\n";
// ftp_QListBox_1->sort( TRUE );
ftpList += s_location+ " "+ftpSite+"\n";
ftp_QListBox_1->sort( TRUE );
QString winbug=" ";
ftp_QListBox_1->insertItem ( s_location.latin1() +winbug+ftpSite);
// ftp_QListBox_1->insertItem ( ftpSite+" "+s_location.latin1());
}
// ftp_QListBox_1->insertItem ( ftpSite);
}
} // end find ftp://
} // end while loop
QFile f2( ListFile);
if(!f2.open( IO_ReadWrite | IO_Truncate))
QMessageBox::message( (tr("Note")), (tr("File not opened sucessfully.\n"+ListFile )) );
f2.writeBlock( ftpList, ftpList.length() );
f.close();
f2.close();
if( f.exists() )
f.remove();
} else {
QMessageBox::message( (tr("ftpSiteDlg")), (tr("List File not opened sucessfully." )) );
return false;
}
setActiveWindow();
return true;
}
void optionsDialog::openSiteList() {
- qDebug(" just opens the ftp site list");
+ odebug << " just opens the ftp site list" << oendl;
// ListFile = ( QDir::homeDirPath ()) +"/.gutenbrowser/ftpList";
QFile f( ListFile);
if(!f.open( IO_ReadWrite )) {
QMessageBox::message( (tr("Note")), (tr("File not opened sucessfully." )) );
} else {
QTextStream t( &f);
while ( !t.atEnd() ) {
QString ftpSite = t.readLine();
ftp_QListBox_1->sort( TRUE );
ftp_QListBox_1->insertItem ( ftpSite);
} // end while loop
f.close();
}
QListBoxItem *itemSel=0;
if( (itemSel=ftp_QListBox_1->findItem( ftp_host)) )
ftp_QListBox_1->setSelected( itemSel, true);
}
/*
List box clicked */
void optionsDialog::getSelection( QListBoxItem *item)
{
QString selctionStr;
selctionStr = item->text();
// selctionStr = ftp_QListBox_1->currentText();
// printf( selctionStr+"\n" );
select_site( selctionStr );
}
void optionsDialog::select_site( const char *index )
{
// ftp://ftp.datacanyon.com/pub/gutenberg/
s_site = index;
QString s_site2;
// if(s_site.find("(",0,TRUE))
s_site2=s_site.right( s_site.length()-(s_site.find(" ",0,TRUE)+4) );
-qDebug("Selected ftp site is "+ s_site2);
+odebug << "Selected ftp site is "+ s_site2 << oendl;
int i_ftp = s_site2.find("/", 0, FALSE);
ftp_host = s_site2.left(i_ftp );
ftp_base_dir = s_site2.right( s_site2.length() - i_ftp);
// config->read();
Config config("Gutenbrowser");
config.setGroup( "FTPsite" );
config.writeEntry("SiteName",ftp_host);
config.writeEntry("base",ftp_base_dir);
// config->write();
TextLabel3->setText( "Current ftp server:\n"+ftp_host /*+ ftp_base_dir*/ );
// optionsDialog::accept();
}
diff --git a/noncore/apps/opie-gutenbrowser/gutenbrowser.cpp b/noncore/apps/opie-gutenbrowser/gutenbrowser.cpp
index 2a9a71e..be2b897 100644
--- a/noncore/apps/opie-gutenbrowser/gutenbrowser.cpp
+++ b/noncore/apps/opie-gutenbrowser/gutenbrowser.cpp
@@ -1,1984 +1,1989 @@
/***************************************************************************
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 <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>
+
#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();
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) {
- // qDebug( tempTitle);
+ // odebug << tempTitle << oendl;
bookmarksMenu->insertItem( tempTitle);
}
}
// QString gutenIndex= local_library + "GUTINDEX.ALL";
QString gutenIndex= QPEApplication::qpeDir()+ "/etc/gutenbrowser/GUTINDEX.ALL";
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);
}
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");
+ odebug << "Suppose we open somethin" << oendl;
load(qApp->argv()[i]);
}
} else {
fillWithTitles();
mainList->setFocus();
// mainList->setCurrentItem(0);
}
writeConfig();
} //end init
Gutenbrowser::~Gutenbrowser() {
// QPEApplication::grabKeyboard();
// QPEApplication::ungrabKeyboard();
- qDebug("Exit");
+ 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/";
- qDebug("filename "+filename);
+ 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");
- qDebug("Preferred browser is "+brow);
+ 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);
- qDebug("Issuing the system command: %s", cmd.latin1());
+ 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");
- // qDebug("Issuing the command\n"+cmd);
+ // 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);
- qDebug("Issuing the sys command: %s", cmd.latin1());
+ 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";
- qDebug("Docdir is "+QPEApplication::documentDir());
+ 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) {
- qDebug("loadCheck: we have a loaded doc");
+ 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);
- // qDebug(s);
+ // 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;
// qDebug("%d current page is number %d, pagesize %d, length %d, current %d",
// currentFilePos, i_pageNum, pageSize, Lview->length(), pageStopArray[i_pageNum] );
setStatus();
Lview->setCursorPosition( 0, 0, FALSE);
// }
} else {
- // qDebug("bal");
+ // 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();
- // qDebug("page number %d line number %d", i_pageNum, currentLine);
+ // 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();
// qDebug("%d move back to %d, current page number %d, %d, length %d",
// currentFilePos, pageStopArray[i_pageNum - 1 ], i_pageNum, pageSize, Lview->length() );
if( i_pageNum < 2) {
f.at( 0);
} else {
if(!f.at( pageStopArray[i_pageNum - 1] ))
- qDebug("File positioned backward did not work");
+ 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) {
- qDebug("top");
+ 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 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;
- // qDebug("new page number %d, found at %d", 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 ) {
- qDebug("<<<<<< FOUND IT!! new page number %d, found at %d", i_pageNum, currentFilePos);
+ 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();
- qDebug("Settingbook mark "+file_name);
+ odebug << "Settingbook mark "+file_name << oendl;
cfg.setGroup("Titles");
title=cfg.readEntry(file_name,"");
- qDebug("title is "+ title);
+ 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) );
bookmarksMenu->insertItem( title);
}
} //end setBookmark
/* goes to last set bookmark*/
void Gutenbrowser::Bookmark( int itemId) {
// qApp->processEvents();
Config config("Gutenbrowser");
config.setGroup( "Bookmarks" );
- // qDebug("<<<<<< %d, %d", Lview->PageSize(), Lview->lastRow() - Lview->topRow() );
+ // odebug << "<<<<<< " << Lview->PageSize() << ", " << Lview->lastRow() - Lview->topRow() << "" << oendl;
QString itemString;
- qDebug("menu item %d", itemId);
+ 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();
load(file_name);
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;
- // qDebug("new page number %d, found at %d", 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();
}
- qDebug("bookmark loaded");
+ odebug << "bookmark loaded" << oendl;
setCaption(title);
}
bool Gutenbrowser::load( const char *fileName) {
// QCopEnvelope ( "QPE/System", "busy()" );
- // qDebug("Title is already set as "+title);
- qDebug("sizeHint %d pageSize %d", sizeHint().height(),Lview->PageSize() );
+ // odebug << "Title is already set as "+title << oendl;
+ odebug << "sizeHint " << sizeHint().height() << " pageSize " << Lview->PageSize() << "" << oendl;
if( Lview->PageSize() < 4) {
Lview->setMaximumHeight( sizeHint().height() );
Lview->setMinimumHeight( sizeHint().height() );
pointSize = Lview->fontInfo().pointSize();
- qDebug("sizeHint %d point size %d", sizeHint().height(), pointSize);
+ odebug << "sizeHint " << sizeHint().height() << " point size " << pointSize << "" << oendl;
if(pointSize < 10)
Lview->setFixedVisibleLines(19);
else
Lview->setFixedVisibleLines( ( (sizeHint().height() / pointSize ) * 2) -2);
}
Config cfg("Gutenbrowser");
cfg.setGroup("General");
cfg.writeEntry("Current",fileName);
currentLine=0;
file_name=fileName;
QString o_file = fileName;
// if (i_pageNum < 1) {
i_pageNum = 1;
// }
- qDebug("ready to open "+o_file);
+ 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;
qDebug("<<<<<<<<<<<%d current page is number %d, length %d, current %d, pageSize %d",
currentFilePos, i_pageNum, Lview->length(), pageStopArray[i_pageNum], Lview->PageSize() );
Lview->setMaxLines(Lview->PageSize()*2);
- qDebug("Gulped %d", currentLine);
+ odebug << "Gulped " << currentLine << "" << oendl;
setCaption(title);
Lview->setAutoUpdate( TRUE);
Lview->setCursorPosition(0,0,FALSE);
// pages = (int)(( Lview->numLines() / Lview->editSize() ) / 2 ) +1;
- //qDebug("number of pages %d", pages);
+ //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())
{
- qDebug("Starting search dialog");
+ 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;
- // qDebug("Local Library is %s ", local_library.latin1());
+ // odebug << "Local Library is " << local_library << " " << oendl;
zipFile="/usr/bin/unzip";
- // qDebug("newestLibraryFile is %s ", newestLibraryFile.latin1());
+ // 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");
QString tmp=config.readEntry("RunBefore","FALSE");
if(tmp=="FALSE") {
QMessageBox::message( "Note",
"<P>Your first time running gutenbrowser. You'll need to click the \"load library\" button to load the gutenberg index.</P>");
config.writeEntry("RunBefore","TRUE");
}
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;
- // qDebug("title is being set as "+title);
+ // 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"))
{
- qDebug("Found zip file\n");
+ 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;
- qDebug("Issuing the command "+ cmd);
+ 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()" );
load( file_name);
} 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;
- qDebug("title open as "+title);
+ 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;
- qDebug("ShowMainList is now false");
+ odebug << "ShowMainList is now false" << oendl;
mainList->hide();
Lview->show();
qApp->processEvents();
}
Lview->clear();
// QCopEnvelope ( "QPE/System", "busy()" );
load(file_name);
} else {
- qDebug("file_name is empty!");
+ 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, "");
- // qDebug("(getTitle)title is being set as "+title);
+ // 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;
case Key_C:
ClearEdit();
break;
case Key_H:
HelpBtn();
break;
case Key_K:
LookupBtn();
break;
case Key_U:// hide menu
if(menubar->isHidden() )
menubar->show();
else
menubar->hide();
break;
case Key_I:
hideButtons();
break;
////////////////////////////// Zaurus keys
case Key_Home:
// BeginBtn();
break;
case Key_F9: //activity
OpenBtn();
break;
case Key_F10: //contacts
hideButtons();
break;
case Key_F11: //menu
if(menubar->isHidden() )
menubar->show();
else
menubar->hide();
break;
case Key_F12: //home
BeginBtn();
break;
case Key_F13: //mail
LibraryBtn();
break;
case Key_Space:
if(loadCheck)
ForwardBtn();
// else
// Bookmark();
break;
case Key_Down:
if(loadCheck) {
// if( !e->isAutoRepeat() )
// AdjustStatus();
// } else {
// LibraryBtn();
// ForwardBtn();
}
// ForwardButton->setFocus();
// Lview->setFocus();
// if(s_Wrap=="FALSE")
// Lview->MultiLine_Ex::ScrollDown( 1);
// LibraryBtn();
break;
case Key_Up:
if(loadCheck) {
// if( !e->isAutoRepeat() )
// AdjustStatus();
// } else {
// OpenBtn();
// BackBtn();
}
// BackButton->setFocus();
// Lview->setFocus();
// if(s_Wrap=="FALSE")
// Lview->MultiLine_Ex::ScrollUp( 1);
// LibraryBtn();
break;
case Key_Right:
ForwardButton->setFocus();
ForwardBtn();
// LibraryBtn();
break;
case Key_Left:
BackBtn();
BackButton->setFocus();
// OpenBtn();
break;
case Key_Escape:
ByeBye();
break;
case Key_PageUp:
BackBtn();
break;
case Key_PageDown:
ForwardBtn();
break;
////////////////////////////// Zaurus keys
};
}
void Gutenbrowser::keyPressEvent( QKeyEvent *e) {
switch ( e->key() ) {
// case Key_Next:
// ForwardBtn();
// break;
// case Key_Prior:
// BackBtn();
// break;
// case Key_Space:
// ForwardBtn();
// break;
// case Key_Down:
// Lview->MultiLine_Ex::ScrollUp( 1);
// if(useSplitter) Rview->MultiLine_Ex::ScrollUp( 1);
// break;
// case Key_Up:
// if( Lview->Top() != 0) {
// Lview->MultiLine_Ex::ScrollDown( 1);
// if(useSplitter) Rview->MultiLine_Ex::ScrollDown( 1);
// }
// break;
}
}
void Gutenbrowser::resizeEvent( QResizeEvent *ev) {
- // qDebug("resize: %d,%d\n",ev->size().width(),ev->size().height());
+ // odebug << "resize: " << ev->size().width() << "," << ev->size().height() << "\n" << oendl;
if( !LibraryDlg->isHidden())
LibraryDlg->resize(ev->size().width(),ev->size().height() );
// if( loadCheck == true) {
// ResizeEdits();
// AdjustStatus();
// }
}
void Gutenbrowser::doOptions() {
optionsDialog* optDlg;
optDlg = new optionsDialog( this,"Options_Dlg", true);
QString Ddir;
Config config("Gutenbrowser");
config.setGroup( "General" );
QFont myFont;
optDlg->showMaximized();
if( optDlg->exec() !=0) {
qApp->processEvents();
brow=optDlg->browserName;
toggleButtonIcons( optDlg->useIcon);
ftp_host= optDlg->ftp_host;
ftp_base_dir= optDlg->ftp_base_dir;
brow=optDlg->browserName;
Ddir=optDlg->downloadDirEdit->text();
- qDebug("writing library config");
+ odebug << "writing library config" << oendl;
Config config("Gutenbrowser");
config.setGroup("General");
QString dirname= optDlg->downloadDirEdit->text();
if(dirname.right(1)!="/")
dirname+="/";
config.writeEntry( "DownloadDirectory",dirname);
QDir newDir( optDlg->downloadDirEdit->text());
if( !newDir.exists() ) {
int exit=QMessageBox::information(this, "Note", "Ok, to make a new directory\n"+Ddir+" ?",
QMessageBox::Ok, QMessageBox::Cancel);
if (exit==1) {
QString cmd="mkdir -p ";
cmd+=Ddir.latin1();
system(cmd);
- qDebug("Making new dir "+cmd);
+ odebug << "Making new dir "+cmd << oendl;
if(Ddir.right(1)!="/") {
Ddir+="/";
}
config.writeEntry("DownloadDirectory",Ddir);
}
}
// if(optDlg->styleChanged)
// setStyle( optDlg->styleInt);
if(optDlg->b_qExit==TRUE)
b_queryExit=TRUE;
else
b_queryExit=FALSE;
if(optDlg->fontDlg-> changedFonts) {
- qDebug("Setting font");
+ odebug << "Setting font" << oendl;
myFont=optDlg->fontDlg->selectedFont;
Lview->setFont( myFont);
}
if(optDlg->useWordWrap_CheckBox->isChecked() ) {
- qDebug("WORD WRAP is set");
+ odebug << "WORD WRAP is set" << oendl;
Lview->setWordWrap(QMultiLineEdit::WidgetWidth);
useWrap=true;
} else {
- qDebug("Word wrap is NOT set");
+ odebug << "Word wrap is NOT set" << oendl;
Lview->setWordWrap(QMultiLineEdit::NoWrap);
useWrap=false;
}
}
if(showMainList) {
if(!Lview->isHidden())
Lview->hide();
qApp->processEvents();
if(mainList->isHidden())
mainList->show();
fillWithTitles();
} else {
Lview->show();
showMainList=FALSE;
mainList->hide();
}
qApp->processEvents();
update();
}
bool Gutenbrowser::setTitle() {
if( file_name.contains( local_library)) {
QFileInfo f( file_name);
QString s_file = f.fileName();
file_name = s_file;
}
int test = 0;
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, file_name) == 0) {
test = 1;
}
}
if (test == 0) {
config.writeEntry("NumberOfFiles",i_numofFiles +1 );
QString interger;
interger.setNum( i_numofFiles +1);
config.writeEntry(interger, file_name);
config.setGroup( "Titles" );
config.writeEntry(file_name,listItemTitle);
}
test = 0;
// config.write();
return true;
}
/*Calls new fangled network dialog */
void Gutenbrowser::OnNetworkDialog( const QString &/*networkUrl*/, const QString &/*output*/)
{
- // qDebug(networkUrl);
- // qDebug(output);
+ // odebug << networkUrl << oendl;
+ // odebug << output << oendl;
// #ifndef Q_WS_QWS
// NetworkDialog *NetworkDlg;
// if( networkUrl.length() < 4 ) networkUrl= "http://sailor.gutenberg.org/mirror.sites.html";
// NetworkDlg = new NetworkDialog( this,"Network Protocol Dialog", TRUE, 0, networkUrl, output);
// if( NetworkDlg->exec() != 0 ) {
// }
// if(NetworkDlg)
// delete NetworkDlg;
// #endif
}
void Gutenbrowser::donateGutenberg()
{
int exit=QMessageBox::information(this, "Info", "http://www.gutenberg.org\ndonate@gutenberg.net",
QMessageBox::Ok, QMessageBox::Cancel);
if (exit==1) {
} else {
};
}
void Gutenbrowser::donateByteMonkie()
{
}
void Gutenbrowser::writeConfig()
{
// config.read();
// Config config("Gutenbrowser");
// #ifndef Q_WS_QWS
// config.setGroup( "Geometry" );
// QString s;
// QString globalPosition;
// QPoint point;
// point=mapToGlobal(QPoint(0,0) );
// int posiX, posiY;
// posiX=point.x();
// posiY=point.y();
// globalPosition.sprintf("%i,%i", posiX, posiY);
// QRect frameRect;
// frameRect = geometry();
// s.sprintf("%i,%i", frameRect.width(), frameRect.height());
// config.writeEntry("Frame", s);
// config.writeEntry("Position", globalPosition);
// if( useIcons==TRUE)
// config.writeEntry("Icons", "TRUE");
// else
// config.writeEntry("Icons", "FALSE");
// #endif
// #ifndef Q_WS_QWS
// QString temp;
// temp.setNum(styleI, 10);
// config.setGroup( "StyleIze" );
// config.writeEntry( "Style", temp);
// #endif
// config.setGroup("General");
}
void Gutenbrowser::annotations()
{
// #ifndef Q_WS_QWS
// QMessageBox::message("Note","hi annotate");
// lastBmkButton->setDown(FALSE);
// #endif
}
void Gutenbrowser::hideButtons()
{
if( !buttonsHidden) {
buttonsHidden=TRUE;
LibraryButton->hide();
SearchButton->hide();
InfoBar->hide();
OpenButton->hide();
BackButton->hide();
ForwardButton->hide();
setBookmarkButton->hide();
lastBmkButton->hide();
dictionaryButton->hide();
if(useSplitter) {
ClearButton->hide();
PrintButton->hide();
beginButton->hide();
HelpButton->hide();
FontButton->hide();
ExitButton->hide();
OptionsButton->hide();
DownloadButton->hide();
}
} else {
buttonsHidden=FALSE;
LibraryButton->show();
SearchButton->show();
InfoBar->show();
OpenButton->show();
BackButton->show();
ForwardButton->show();
setBookmarkButton->show();
lastBmkButton->show();
dictionaryButton->show();
if(useSplitter) {
ClearButton->show();
PrintButton->show();
beginButton->show();
HelpButton->show();
FontButton->show();
ExitButton->show();
OptionsButton->show();
DownloadButton->show();
}
}
}
void Gutenbrowser::focusInEvent( QFocusEvent* )
{
}
void Gutenbrowser::focusOutEvent( QFocusEvent* )
{
}
void Gutenbrowser::cleanUp( )
{
writeConfig();
QPEApplication::grabKeyboard();
QPEApplication::ungrabKeyboard();
- // qDebug("Cleanup");
+ // odebug << "Cleanup" << oendl;
if(f.isOpen()) f.close();
}
void Gutenbrowser::fixKeys()
{
- qDebug("Attempting to fix keys");
+ odebug << "Attempting to fix keys" << oendl;
}
void Gutenbrowser::enableButtons(bool b)
{
BackButton->setEnabled(b);
ForwardButton->setEnabled(b);
SearchButton->setEnabled(b);
setBookmarkButton->setEnabled(b);
dictionaryButton->setEnabled(b);
InfoBar->setEnabled(b);
editMenu->setItemEnabled( -5, b);
editMenu->setItemEnabled( -6, b);
editMenu->setItemEnabled( -7, b);
editMenu->setItemEnabled( -8, b);
}
void Gutenbrowser::fillWithTitles() {
Config config("Gutenbrowser");
config.setGroup( "Files" );
int i_numofFiles = config.readNumEntry("NumberOfFiles", 0);
mainList->clear();
QString temp;
for (int i = 1; i <= i_numofFiles; i++) {
temp.setNum(i);
config.setGroup( "Files" );
QString ramble = config.readEntry(temp, "" );
config.setGroup( "Titles" );
temp = config.readEntry(ramble, "");
if( !temp.isEmpty()) {
mainList->insertItem ( Resource::loadPixmap("gutenbrowser/gutenbrowser_sm"), temp, -1);
}
}
}
void Gutenbrowser::listClickedSlot( QListBoxItem * index) {
// if( !working) {
// working=true;
if(index) {
// QCopEnvelope ( "QPE/System", "busy()" );
title = index->text();
showMainList=FALSE;
mainList->hide();
Lview->show();
qApp->processEvents();
QString temp;
temp.setNum( mainList->currentItem() + 1);
// openFileTitle = title;
Config config("Gutenbrowser");
config.setGroup( "Files" );
QString file = config.readEntry(temp, "");
- qDebug("About to load");
+ odebug << "About to load" << oendl;
if( Lview->isVisible())
load(file);
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 /* - Lview->topRow() */,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();
}
}
}
}
void Gutenbrowser::infoGutenbrowser() {
QMessageBox::message("Info","Gutenbrowser was developed by\n"
"Lorn Potter\n"
"ljp<ljp@llornkcor.com>\n");
}
void Gutenbrowser::setDocument(const QString & frozenBoogers) {
this->hide();
if(showMainList) {
showMainList=FALSE;
if(!mainList->isHidden())
mainList->hide();
if(Lview->isHidden())
Lview->show();
qApp->processEvents();
}
DocLnk lnk;
lnk = DocLnk(frozenBoogers);
- // qDebug(lnk.file() );
+ // odebug << lnk.file() << oendl;
title=lnk.comment();
load( lnk.file());
this->show();
- // qDebug(title);
+ // odebug << title << oendl;
// qApp->processEvents();
// repaint();
}
void Gutenbrowser::mainListPressed(int mouse, QListBoxItem * , const QPoint & )
{
switch (mouse) {
case 1:
break;
case 2: {
QPopupMenu m;// = new QPopupMenu( Local_View );
m.insertItem( tr( "Open" ), this, SLOT( menuOpen() ));
m.insertSeparator();
m.insertItem( tr( "Search google.com" ), this, SLOT( menuGoogle()));
m.insertItem( tr( "Edit Title" ), this, SLOT( menuEditTitle()));
// m.insertSeparator();
// m.insertItem( tr( "Delete" ), this, SLOT( remoteDelete() ));
m.exec( QCursor::pos() );
}
break;
};
}
void Gutenbrowser::menuOpen() {
listClickedSlot( mainList->item( mainList->currentItem()));
}
void Gutenbrowser::menuGoogle() {
searchGoogle( mainList->text(mainList->currentItem()));
}
void Gutenbrowser::searchGoogle( const QString &tempText) {
QString text = tempText;
int eexit=QMessageBox::information(this, "Note","Do you want to search for\n"+text+
"\non google.com?",QMessageBox::Yes, QMessageBox::No);
if (eexit== 3) {
qApp->processEvents();
text.replace( QRegExp("\\s"), "%20");
text.replace( QRegExp("#"), "");
text.replace( QRegExp(","), "%20");
text.replace( QRegExp("'"), "%20");
text.replace( QRegExp("("), "");
text.replace( QRegExp(")"), "");
// text.replace( QRegExp("[0-9]"), "");
QString s_lookup = "http://google.com/search?q="+text+"&num=30&sa=Google+Search";
goGetit( s_lookup, true);
}
}
void Gutenbrowser::menuEditTitle()
{
int currentItem = mainList->currentItem();
QString title_text = mainList->text( currentItem);
- //qDebug("Selected "+title_text);
+ //odebug << "Selected "+title_text << oendl;
Config config("Gutenbrowser");
config.setGroup( "Files" );
QString s_numofFiles = config.readEntry("NumberOfFiles", "0");
int i_numofFiles = s_numofFiles.toInt();
QString fileNum;
for (int i = 1; i <= i_numofFiles+1; i++) {
fileNum.setNum(i);
config.setGroup( "Files" );
QString s_filename = config.readEntry(fileNum, "" );
config.setGroup( "Titles" );
QString file_title = config.readEntry( s_filename, "");
- //qDebug("file_title is "+file_title);
+ //odebug << "file_title is "+file_title << oendl;
if(title_text == file_title ) {
// selFile = s_filename;
- //qDebug("Edit: "+ file_title );
+ //odebug << "Edit: "+ file_title << oendl;
i=i_numofFiles+1;
Edit_Title *titleEdit;
titleEdit = new Edit_Title(this,file_title ,TRUE);
if(titleEdit->exec() !=0) {
- //qDebug(titleEdit->newTitle);
+ //odebug << titleEdit->newTitle << oendl;
config.writeEntry( s_filename, titleEdit->newTitle);
mainList->removeItem(currentItem);
mainList->insertItem ( Resource::loadPixmap("gutenbrowser/gutenbrowser_sm"), titleEdit->newTitle, currentItem);
}
}
}
// getTitles();
mainList->triggerUpdate(true);
}
bool Gutenbrowser::UnZipIt(const QString &zipFile) {
- qDebug(zipFile);
+ odebug << zipFile << oendl;
#ifndef Q_WS_QWS
if( QFile::exists( zipFile)) { // TODO findsome other way of dealingwithzip files.
bool isPgWhole=false;
QString thatFile;
if(zipFile.find("pgwhole",0,TRUE)) {
isPgWhole=TRUE;
thatFile= local_library +"PGWHOLE.TXT";
}
// else {
// thatFile=zipFile.left(4);
// }
- // qDebug((const char*)local_library.latin1());
+ // odebug << (const char*)local_library.latin1() << oendl;
QString cmd;
#if defined(_WS_X11_)
if( chdir((const char*)local_library.latin1())!=0)
- qDebug("chdir failed.");
+ odebug << "chdir failed." << oendl;
cmd = "gunzip -S .zip " + local_library+zipFile;
//cmd = "gunzip -d " + zipFile /*newestLibraryFile */+" -d " + local_library;
#endif
#ifdef Q_WS_QWS
if( chdir((const char*)local_library.latin1())!=0)
- qDebug("chdir failed.");
+ odebug << "chdir failed." << oendl;
cmd = "unzip " + local_library+zipFile;
// cmd = "/usr/bin/unzip -o " + local_library+zipFile +" -d /usr/share/doc/gutenbrowser" ;//+ local_library;
#endif
int exit=QMessageBox::information(this, "Ok to unzip?",
"Ok to unnzip\n"+ zipFile+" ?",
QMessageBox::Yes, QMessageBox::No);
if (exit==QMessageBox::Yes) {
#if defined(_WS_X11_)//
- qDebug("Issuing the command "+cmd);
+ odebug << "Issuing the command "+cmd << oendl;
system( cmd);
if( QFile::exists(thatFile))
remove (thatFile);
if(isPgWhole) {
if( rename("pgwhole","PGWHOLE.TXT") !=0)
- qDebug("rename failed");
+ odebug << "rename failed" << oendl;
} else {
if( rename(thatFile.left(4),thatFile.left(4)+".txt") !=0)
- qDebug("rename failed");
+ odebug << "rename failed" << oendl;
}
#endif
#ifdef Q_WS_QWS
- qDebug("Issuing the command "+cmd);
+ odebug << "Issuing the command "+cmd << oendl;
system( cmd);
if( QFile::exists(thatFile))
remove(thatFile);
if(isPgWhole) {
if( rename("pgwhole","PGWHOLE.TXT") !=0)
- qDebug("rename failed");
+ odebug << "rename failed" << oendl;
} else {
if( rename(thatFile.left(4),thatFile.left(4)+".txt") !=0)
- qDebug("rename failed");
+ odebug << "rename failed" << oendl;
}
#endif
// remove( zipFile);
return true;
}
else if(exit==QMessageBox::No) {
- // qDebug("unzip");
+ // odebug << "unzip" << oendl;
return false;
}
}
else
QMessageBox::message( "Note",( tr("Please install unzip in your PATH")) );
#endif
return false;
}
diff --git a/noncore/apps/opie-gutenbrowser/gutenbrowserData.cpp b/noncore/apps/opie-gutenbrowser/gutenbrowserData.cpp
index c9149ac..a226258 100644
--- a/noncore/apps/opie-gutenbrowser/gutenbrowserData.cpp
+++ b/noncore/apps/opie-gutenbrowser/gutenbrowserData.cpp
@@ -1,328 +1,332 @@
/***************************************************************************
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. *
***************************************************************************/
+
//#include "gutenbrowserData.h"
#include "gutenbrowser.h"
+/* OPIE */
+#include <opie2/odebug.h>
#include <qpe/config.h>
#include <qpe/fontdatabase.h>
#include <qpe/menubutton.h>
#include <qpe/resource.h>
#include <qpe/qpeapplication.h>
+/* QT */
#include <qfontinfo.h>
#include <qtoolbutton.h>
void Gutenbrowser::initSlots() {
connect(LibraryButton,SIGNAL(released()),SLOT(LibraryBtn()));
connect(OpenButton,SIGNAL(released()),SLOT(OpenBtn()));
connect(SearchButton,SIGNAL(released()),SLOT(SearchBtn()));
connect(ForwardButton,SIGNAL(clicked()),SLOT(ForwardBtn()));
connect(BackButton,SIGNAL(clicked()),SLOT(BackBtn()));
connect(setBookmarkButton,SIGNAL(released()),SLOT(setBookmark()));
connect(dictionaryButton,SIGNAL(released()),SLOT(LookupBtn()));
connect(InfoBar,SIGNAL(clicked()),SLOT(InfoBarClick()));
connect(qApp,SIGNAL(aboutToQuit()),SLOT(cleanUp()));
connect(mainList,SIGNAL(clicked(QListBoxItem *)),SLOT(listClickedSlot(QListBoxItem *)));
connect(bookmarksMenu,SIGNAL(activated(int)),SLOT(Bookmark(int)));
}
void Gutenbrowser::initConfig() {
-//qDebug("Starting configuration.");
+//odebug << "Starting configuration." << oendl;
QDir library(local_library);
if ( !library.exists()) {
library.mkdir(local_library, TRUE);
QString msg;
// #ifndef Q_WS_WIN
msg = "chmod 755 " + local_library;
system(msg);
// QDir pixdir(local_library+"pix");
// if ( !pixdir.exists()) {
// pixdir.mkdir(local_library+"pix", TRUE);
// QString msg;
// msg = "chmod 755 " + local_library+"pix";
// system(msg);
// }
// #endif
}
- // qDebug( "init file is %s",iniFile.latin1());
+ // odebug << "init file is " << iniFile << "" << oendl;
#ifdef Q_WS_QWS
useSplitter=FALSE;
Config config("Gutenbrowser");
config.setGroup( "General" );
//useWordWrap_CheckBox
useIcons=TRUE;
#else
config.setGroup( "General" );
QString s_Split=config.readEntry("Splitter", "TRUE" );
QWidget *d = QApplication::desktop();
int width=d->width();
int height=d->height();
int w=0, h=0;
QString str, str2;
this->setMaximumWidth(width);
if(s_Split=="TRUE")
useSplitter=TRUE;
else
useSplitter=FALSE;
config.setGroup( "Geometry" );
if(width < 1030) {
str = config.readEntry("Frame", "700,500");
if( !str.isEmpty() && str.find(',')>=0) {
sscanf(str,"%d,%d",&w,&h);
resize(w,h);
str2.sprintf("%d,%d", (width-w)/2,(height-h)/2);
str = config.readEntry( "Position", str2);
} else {
resize( 740,510 );
str2.sprintf("%d,%d", (width-w)/2,(height-h)/2);
str = config.readEntry( "Position",str2);
}
} else {// desktop is high res
str = config.readEntry("Frame", "990,640");
if( !str.isEmpty() && str.find(',')>=0) {
sscanf(str,"%d,%d",&w,&h);
resize(w,h);
str2.sprintf("%d,%d", (width-w)/2,(height-h)/2);
str = config.readEntry( "Position", str2);
} else {
resize( 990,640 );
str2.sprintf("%d,%d", (width-w)/2,(height-h)/2);
str = config.readEntry( "Position", str2);
}
}
int posX, posY;
bool ok;
QString goober;
goober=str.left( str.find(",", 0, TRUE) );
posX=goober.toInt( &ok, 10);
goober=str.right( str.findRev(",", -1, TRUE) );
posY= goober.toInt( &ok, 10);
// move( posX, posY);
str = config.readEntry("Icons", "TRUE");
if(str == "TRUE")
useIcons=TRUE;
else
useIcons=FALSE;
#endif
// #if defined(_WS_WIN_)
// move( posX-4, posY-20);
// #endif
config.setGroup( "Browser" );
brow = config.readEntry( "Preferred", "Opera");
config.setGroup( "FTPsite" ); // ftp server config
ftp_host=config.readEntry("SiteName", "sailor.gutenberg.org");
// ftp_host=ftp_host.right(ftp_host.length()-(ftp_host.find(") ",0,TRUE)+1) );
ftp_host=ftp_host.right(ftp_host.length()-(ftp_host.find(") ",0,TRUE)+1) );
ftp_host=ftp_host.stripWhiteSpace();
ftp_base_dir= config.readEntry("base", "/pub/gutenberg");
//bool ok2;
QString temp;
QString copying;
copying="";
config.setGroup("General");
QString qExit;
qExit=config.readEntry("queryExit","TRUE");
if(qExit=="TRUE") {
b_queryExit=TRUE;
-// qDebug("Please query before leaving the library.");
+// odebug << "Please query before leaving the library." << oendl;
} else {
-// qDebug("Please DO NOT query before leaving the library.");
+// odebug << "Please DO NOT query before leaving the library." << oendl;
b_queryExit=FALSE;
}
// bookmarks
// config.setGroup("Titles");
// QString tmpTitle=config.readEntry(file_name,"");
}// end initConfig()
void Gutenbrowser::initMenuBar()
{
-// qDebug("Starting menu init.");
+// odebug << "Starting menu init." << oendl;
// menuBar entry fileMenu
menubar = new QPEMenuBar(this);
fileMenu=new QPopupMenu();
fileMenu->insertItem(Resource::loadPixmap("gutenbrowser/openbook"),
"Open Local Library...", this, SLOT( OpenBtn()) );
// fileMenu->insertItem("Download FTPSite", this, SLOT( downloadFtpList()) );
fileMenu->insertItem( Resource::loadPixmap("home"),
"Download Library Index", this, SLOT( downloadLibIndex()) );
fileMenu->insertItem( Resource::loadPixmap("quit"),
"Quit Gutenbrowser...", this, SLOT( ByeBye()) );
// menuBar entry editMenu
editMenu=new QPopupMenu();
editMenu->insertItem(Resource::loadPixmap("up"), "Top",
this, SLOT(TopBtn()) );
editMenu->insertItem( Resource::loadPixmap("back"), "Beginning",
this, SLOT(doBeginBtn()) );
editMenu->insertItem( Resource::loadPixmap("gutenbrowser/search"), "Search",
this, SLOT(SearchBtn()) );
editMenu->insertItem("Clear", this, SLOT(ClearEdit()) );
optionsMenu= new QPopupMenu();
optionsMenu->insertItem( Resource::loadPixmap("gutenbrowser/configure"),
"Configure", this, SLOT(doOptions()) );
donateMenu = new QPopupMenu();
// donateMenu->insertItem("Gutenberg", this, SLOT(donateGutenberg()) );
donateMenu->insertItem( Resource::loadPixmap("gutenbrowser/gutenbrowser_sm"),
"Gutenbrowser Developer", this, SLOT(infoGutenbrowser()) );
menubar->insertItem("File", fileMenu);
menubar->insertItem("Page", editMenu);
menubar->insertItem("Options", optionsMenu);
// menubar->insertItem("More Info", donateMenu);
menu->addWidget( menubar,0);
topLayout->addLayout( menu, 0);
}
void Gutenbrowser::initButtonBar()
{
-//qDebug("Starting buttonbar init.");
+//odebug << "Starting buttonbar init." << oendl;
OpenButton = new QPushButton( this, "OpenButton" );
OpenButton->setFocusPolicy( QWidget::TabFocus );
LibraryButton = new QPushButton( this, "LibraryButton" );
LibraryButton->setFocusPolicy( QWidget::TabFocus );
BackButton = new QPushButton( this, "BackButton" );
BackButton->setFocusPolicy( QWidget::TabFocus );
BackButton->setAutoRepeat(TRUE);
ForwardButton = new QPushButton( this, "ForwardButton" );
ForwardButton->setFocusPolicy( QWidget::TabFocus );
// ForwardButton->setAutoRepeat(TRUE);
SearchButton = new QPushButton( this, "SearchButton" );
SearchButton->setFocusPolicy( QWidget::TabFocus );
setBookmarkButton = new QPushButton( this, "setBookmark" );
setBookmarkButton->setFocusPolicy( QWidget::TabFocus );
lastBmkButton = new MenuButton( this, "lastBmkButton" );
lastBmkButton->setFocusPolicy( QWidget::TabFocus );
bookmarksMenu = new QPopupMenu();
bookmarksMenu->insertItem("Last Set", this, SLOT(Bookmark( int) ));
lastBmkButton->setPopup(bookmarksMenu);
dictionaryButton = new QPushButton( this, "dictionaryButton" );
dictionaryButton->setFocusPolicy( QWidget::TabFocus );
InfoBar = new QPushButton( this, "Info_Bar" );
-// qDebug("Infobar");
+// odebug << "Infobar" << oendl;
// if(!useSplitter) {
buttonsHidden=FALSE;
buttons2->setSpacing(2);
buttons2->addWidget(OpenButton, 0, AlignCenter);
buttons2->addWidget(LibraryButton, 0, AlignCenter);
buttons2->addWidget(BackButton, 0, AlignCenter);
buttons2->addWidget(ForwardButton, 0, AlignCenter);
buttons2->addWidget(SearchButton, 0, AlignCenter);
buttons2->addWidget(setBookmarkButton, 0, AlignCenter);
buttons2->addWidget(lastBmkButton, 0, AlignCenter);
buttons2->addWidget(dictionaryButton, 0, AlignCenter);
buttons2->addWidget(InfoBar, 0, AlignCenter);
topLayout->setSpacing(0);
topLayout->addLayout( buttons2,0);
}
/* STATUSBAR*/
void Gutenbrowser::initStatusBar()
{
// #ifndef Q_WS_QWS
// statusBar = new QStatusBar( this, "Status Bar");
// statusBar->message(IDS_STATUS_DEFAULT, 2000);
// #endif
}
void Gutenbrowser::initView()
{
// set the main widget here
// QFont defaultFont( "charter", 10, 50, 0 );
Lview = new MultiLine_Ex(this);
Config cfg("Gutenbrowser");
cfg.setGroup("Font");
FontDatabase fdb;
QFont defaultFont=Lview->font();
QFontInfo fontInfo(defaultFont);
QString family = cfg.readEntry("Family", fontInfo.family());
QString style = cfg.readEntry("Style", fdb.styleString(defaultFont));
int i_size = cfg.readNumEntry("Size", fontInfo.pointSize()/10);
QString charSet = cfg.readEntry("CharSet", QFont::encodingName( fontInfo.charSet()) );
defaultFont = fdb.font(family,style,i_size,charSet);
QString italic=cfg.readEntry("Italic","FALSE");
if(italic=="TRUE") {
- qDebug("Set Italic font");
+ odebug << "Set Italic font" << oendl;
defaultFont = fdb.font(family,"Regular",i_size,charSet); //workaround
defaultFont.setItalic(TRUE);
}
Lview->setFont( defaultFont);
update();
cfg.setGroup("General");
if( cfg.readBoolEntry("WordWrap", 1)) {
Lview->setWordWrap(QMultiLineEdit::WidgetWidth);
useWrap=true;
} else {
Lview->setWordWrap(QMultiLineEdit::NoWrap);
useWrap=false;
}
mainList = new QListBox(this,"mainlist");
// QPEApplication::setStylusOperation( mainList->viewport(),QPEApplication::RightOnHold);
// mainList->showMaximized();
// mainList->setGeometry(2,30,230,160);
Lview->setReadOnly( true);
edits->addWidget( Lview);
edits->addWidget(mainList);
if(!showMainList) {
Lview->setText( "\nThis is gutenbrowser for the Sharp Zaurus.\nMake your self at home, sit back, relax and read something great. ");
} else
Lview->hide();
topLayout->addLayout( edits, 0);
}
diff --git a/noncore/apps/opie-gutenbrowser/helpme.cpp b/noncore/apps/opie-gutenbrowser/helpme.cpp
index 6a9b8c0..53e0236 100644
--- a/noncore/apps/opie-gutenbrowser/helpme.cpp
+++ b/noncore/apps/opie-gutenbrowser/helpme.cpp
@@ -1,122 +1,127 @@
/***************************************************************************
helpme.cpp - description
-------------------
begin : Tue Jul 25 2000
begin : Sat Dec 4 1999
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. *
* *
***************************************************************************/
-#include <qpe/qcopenvelope_qws.h>
-#include <qpe/qpeapplication.h>
#include "helpme.h"
#include "helpwindow.h"
+/* OPIE */
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/qpeapplication.h>
+#include <opie2/odebug.h>
+
+/* QT */
#include <qprogressdialog.h>
#include <qlayout.h>
+/* STD */
#include <sys/stat.h>
#include <unistd.h>
HelpMe::HelpMe(QWidget *parent, QString name ) : QDialog(parent,name)
{
local_library = ( QDir::homeDirPath ())+"/Applications/gutenbrowser/";
setCaption(tr("Gutenbrowser About " VERSION));
QGridLayout *layout = new QGridLayout( this );
layout->setSpacing( 4 );
layout->setMargin( 4 );
Edit = new QMultiLineEdit(this, "");
Edit->setReadOnly(true);
Edit->append(tr("Based on gutenbook.pl, available from http://www.gutenbook.org"));
Edit->append(tr("Much appreciation to Lee Burgess,"));
Edit->append(tr("for the original idea and concept of gutenbook.\n"));
Edit->append(tr("A list of current Gutenberg ftp sites is at http://promo.net/pg/index.html\n"));
Edit->append(tr("For bug reports, comments or questions about Gutenbrowser, email"));
Edit->append(tr("ljp@llornkcor.com\n"));
Edit->append(tr("\nMade using Qt, Qt Embedded, and Qtopia, a cross platform development API\nhttp://www.trolltech.com\n\n"));
Edit->append(tr("Arnold's Laws of Documentation:"));
Edit->append(tr("(1) If it should exist, it doesn't."));
Edit->append(tr("(2) If it does exist, it's out of date."));
Edit->append(tr("(3) Only documentation for"));
Edit->append(tr("useless programs transcends the"));
Edit->append(tr("first two laws.\n"));
Edit->append(tr("Everything is temporary, anyway....\n :o)"));
Edit->setWordWrap(QMultiLineEdit::WidgetWidth);
QString pixDir;
pixDir=QPEApplication::qpeDir()+"/pics/";
QPushButton *help;
help = new QPushButton(this);
help->setPixmap( QPixmap( pixDir+"gutenbrowser/help.png"));
help->setText("Help");
connect( help,SIGNAL(clicked()),this,SLOT( help() ));
/* QPushButton *ok;
ok = new QPushButton(this);
ok->setPixmap( QPixmap( pixDir+"/gutenbrowser/exit.png"));
ok->setText("ok");
connect(ok,SIGNAL(clicked()),this,SLOT(accept() ));
*/
help->setFixedHeight(25);
// ok->setFixedHeight(25);
// layout->addMultiCellWidget( ok, 0, 0, 4, 4 );
layout->addMultiCellWidget( help, 0, 0, 4, 4 );
layout->addMultiCellWidget( Edit, 1, 1, 0, 4 );
}
HelpMe::~HelpMe()
{
//delete Edit;
}
void HelpMe::goToURL()
{
url = "http://www.llornkcor.com/";
goGetit( url);
}
void HelpMe::goToURL2()
{
url = "http://www.gutenberg.org";
goGetit( url);
}
void HelpMe::goToURL3()
{
url = "http://www.gutenbook.org";
goGetit( url);
}
void HelpMe::goGetit( QString url)
{
HelpWindow *help = new HelpWindow( url, ".", 0, "gutenbrowser");
help->setCaption("Qt Example - Helpviewer");
help->showMaximized();
help->show();
}
void HelpMe::help()
{
QString msg ;
msg=QPEApplication::qpeDir()+"help/html/gutenbrowser-index.html"; // or where ever this ends up to be
-qDebug(msg);
+odebug << msg << oendl;
QString url = "file://"+msg;
goGetit( url);
// QCopEnvelope e("QPE/Application/helpbrowser", "setDocument(QString)" );
// e << msg;
// goGetit( msg);
}
diff --git a/noncore/apps/opie-gutenbrowser/main.cpp b/noncore/apps/opie-gutenbrowser/main.cpp
index 5c3348c..71c836d 100644
--- a/noncore/apps/opie-gutenbrowser/main.cpp
+++ b/noncore/apps/opie-gutenbrowser/main.cpp
@@ -1,64 +1,64 @@
/***************************************************************************
main.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. *
***************************************************************************/
#include "gutenbrowser.h"
#include <opie2/oapplicationfactory.h>
using namespace Opie::Core;
OPIE_EXPORT_APP( OApplicationFactory<Gutenbrowser> )
// #ifdef QT_QWS_NONOPIE
// #include <qpe/qpeapplication.h>
// #include "gutenbrowser.h"
// #include <qstring.h>
// // #include <stdio.h>
// // #include <stdlib.h>
// int main(int argc, char *argv[]){
// QPEApplication a(argc, argv);
// // char * psz;
// // if (argc > 1) {
// // for( int i=0; i < argc; i++) {
// // psz = argv[i];
// // if( psz[0] == '-' || psz[0] == '/' ) {
// // // The next character is the option.
// // switch( psz[1] )
// // {
// // case 'v': // help
// // printf("Gutenbrowser: "VERSION"\n");
-// // // qDebug("Gutenbrowser: "VERSION);
+// // // odebug << "Gutenbrowser: "VERSION << oendl;
// // // return 0;
// // break;
// // case 't': // current time 19:34:20 04/03/00
// // // return 0;
// // break;
// // case 'f': //
// // // file_Name=argv[i+1];
// // break;
// // }
// // }
// // }
// // }
// // QNetworkProtocol::registerNetworkProtocol("http", new QNetworkProtocolFactory<Http>);
// // qInitNetworkProtocols();//registers ftp protocol // for now
// Gutenbrowser *gutenbrowser=new Gutenbrowser();
// // a.setMainWidget(gutenbrowser);
// a.showMainWidget(gutenbrowser,TRUE);
// gutenbrowser->showMaximized();
// gutenbrowser->show();
// return a.exec();
// }
// #endif
diff --git a/noncore/apps/opie-gutenbrowser/openetext.cpp b/noncore/apps/opie-gutenbrowser/openetext.cpp
index bd44ce6..0267416 100644
--- a/noncore/apps/opie-gutenbrowser/openetext.cpp
+++ b/noncore/apps/opie-gutenbrowser/openetext.cpp
@@ -1,518 +1,521 @@
/***************************************************************************
openetext.cpp - description
begin : Sat Dec 4 1999
begin : Tue Jul 25 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. *
***************************************************************************/
#include "gutenbrowser.h"
#include "openetext.h"
#include "editTitle.h"
/* OPIE */
#include <opie2/ofiledialog.h>
+#include <opie2/odebug.h>
#include <qpe/applnk.h>
#include <qpe/config.h>
#include <qpe/qpeapplication.h>
using namespace Opie::Ui;
-#include <stdlib.h>
+/* QT */
#include <qtextstream.h>
#include <qfileinfo.h>
+/* STD */
#if defined(_WS_WIN_)
#include <windows.h>
#else
#include <unistd.h>
-#include "sys/stat.h"
+#include <stdlib.h>
+#include <sys/stat.h>
#endif
OpenEtext::OpenEtext(QWidget *parent, QString name) : QDialog(parent,name,true)
{
local_library = (QDir::homeDirPath ()) +"/Applications/gutenbrowser/";
local_index=local_library+"GUTINDEX.ALL";
initDialog();
connect( QListBox_1, SIGNAL(selected ( int)),this, SLOT(select_title(int)) );
getTitles();
}
OpenEtext::~OpenEtext()
{
}
void OpenEtext::getTitles()
{
QListBox_1->clear();
Config config("Gutenbrowser");
config.setGroup( "Files" );
s_numofFiles = config.readEntry("NumberOfFiles", "0");
QLabel_1->setText( tr(
s_numofFiles+" etexts in your library."));
int i_numofFiles = s_numofFiles.toInt();
for (int i = 1; i <= i_numofFiles+1; i++) {
QString temp;
temp.setNum(i);
config.setGroup( "Files" );
QString ramble = config.readEntry(temp, "" );
config.setGroup( "Titles" );
title = config.readEntry(ramble, "");
if( !title.isEmpty()) {
QListBox_1->insertItem ( QPixmap( QPEApplication::qpeDir()+"pics/gutenbrowser/gutenbrowser_sm.png"), title, -1);
}
}
}
/*
opens selected title */
void OpenEtext::OpenTitle()
{
if( QListBox_1->currentItem() != -1)
select_title( QListBox_1->currentItem() );
else {
QString sMsg;
sMsg = "You must select an Etext to open";
QMessageBox::message( "Error",sMsg);
}
}
void OpenEtext::select_title(int index )
{
OpenButton->setDown(TRUE);
QString temp;
temp.setNum( index + 1);
const char * title;
title = QListBox_1->text( index );
openFileTitle = title;
Config config("Gutenbrowser");
config.setGroup( "Files" );
file = config.readEntry(temp, "");
OpenEtext::accept();
}
/*
This function imports already existing etexts into the local library list*/
void OpenEtext::open()
{
OpenFileButton->setDown(TRUE);
title = "";
QString currDir="";
QString filer;
QString name_file;
QString local ;
local = (QDir::homeDirPath () +"Applications/gutenbrowser");
QDir library( local);
// fileBrowser *browseForFiles;
// browseForFiles=new fileBrowser(this,"Browse for File", TRUE, 0, "guten/plain;text/plain");
// // browseForFiles=new fileBrowser(this,"fileBrowser",TRUE,0, "*");
// browseForFiles->setFileView( 0);
// browseForFiles->showMaximized();
// browseForFiles->exec();
// QString selFile= browseForFiles->selectedFileName;
// fileList=browseForFiles->fileList;
Config cfg("Gutenbrowser");
cfg. setGroup ( "View" );
QString dir = cfg.readEntry("LastOpenDirectory", QPEApplication::documentDir());
QMap<QString, QStringList> map;
map.insert(tr("All"), QStringList() );
QStringList text;
text << "text/*";
map.insert(tr("Text"), text );
text << "*";
map.insert(tr("All"), text );
QString str = OFileDialog::getOpenFileName( 2, dir , QString::null, map);
if( !str.isEmpty() && QFile(str).exists() && !QFileInfo(str).isDir() ) {
filer = str;
- qDebug("Open file: "+str);
+ odebug << "Open file: "+str << oendl;
// QStringList::ConstIterator f;
// QString fileTemp;
// for ( f = fileList.begin(); f != fileList.end(); f++ ) {
// fileTemp = *f;
// fileTemp.right( fileTemp.length()-5);
// fileName = fileTemp;
// if( !fileName.isEmpty() ){
// filer = fileName;
// } else { //filename is empty
// // QString sMsg;
// // sMsg = "Error opening library filelist "+fileName;
// }
if( filer.right(4) == ".txt"
|| filer.right(4) == ".TXT"
|| filer.right(4) == ".etx"
|| filer.right(4) == ".ETX"
|| filer.right(4) == ".etx"
|| filer.right(4) == ".ETX"
|| filer.right(4) == ".zip"
|| filer.right(4) == ".ZIP" ) {
QFileInfo zipFile( filer);
QString s_fileName = zipFile.fileName();
QString cmd;
if( s_fileName.right(4) == ".zip") { // unzip that sucker....
s_fileName = s_fileName.left( s_fileName.length() - 4);
if( chdir((const char*)local_library.latin1())!=0)
- qDebug("chdir failed.");// QString cmd = "gunzip -d " + filer + " -d " + local_library;
+ odebug << "chdir failed." << oendl; // QString cmd = "gunzip -d " + filer + " -d " + local_library;
cmd = "gunzip -S .zip " + filer;
fileName = local_library + s_fileName + ".txt";
system( cmd);
}
// this renames the .txt to .etx!!
else /*if( s_fileName.right(4) == ".txt" || if( s_fileName.right(4) == ".TXT"))*/ {
-// qDebug("Filename is "+fileName);
+// odebug << "Filename is "+fileName << oendl;
s_fileName = fileName;
s_fileName.replace( s_fileName.length()-3,3,"gtn");// s_fileName.replace( s_fileName.length()-3,3,"etx");
rename(fileName.latin1(),s_fileName.latin1());
fileName = s_fileName;
-// qDebug("Filename is now "+fileName);
+// odebug << "Filename is now "+fileName << oendl;
}
} else
fileName = str;
FindTitle(fileName);
QFileInfo fi( fileName);
name_file = fi.fileName();
name_file = name_file.left(name_file.length() - 4);
- qDebug("Setting doclink");
+ odebug << "Setting doclink" << oendl;
DocLnk lnk;
- qDebug("name is " + name_file);
+ odebug << "name is " + name_file << oendl;
lnk.setName(name_file); //sets file name
- qDebug("Title is "+title);
+ odebug << "Title is "+title << oendl;
lnk.setComment(title);
QListBox_1->clear();
getTitles();
- qDebug("Filename is "+fileName);
+ odebug << "Filename is "+fileName << oendl;
lnk.setFile(fileName); //sets File property
lnk.setType("guten/plain");// hey is this a REGISTERED mime type?!?!? ;D
lnk.setExec(fileName);
lnk.setIcon("gutenbrowser/Gutenbrowser");
if(!lnk.writeLink())
- qDebug("Writing doclink did not work");
+ odebug << "Writing doclink did not work" << oendl;
} // end of for each file name....
OpenFileButton->setDown(FALSE);
}
/*
find the title in the config file */
bool OpenEtext::FindTitle( QString filename)
{
Config config("Gutenbrowser");
config.setGroup( "Files" );
QString s_numofFiles = config.readEntry("NumberOfFiles", "0");
int i_numofFiles = s_numofFiles.toInt();
QFileInfo fi(filename);
name = fi.fileName();
- qDebug("filename to open is " + name);
+ odebug << "filename to open is " + name << oendl;
QFile indexLib( filename);
bool findCheck = FALSE;
// int Titlenumber=0;
if ( indexLib.open( IO_ReadOnly) ) {
- qDebug("file opened successfully");
+ odebug << "file opened successfully" << oendl;
QTextStream indexStream( &indexLib );
QString target = "Project Gutenberg Etext of";
QString target2 = "Project Gutenberg Etext";
QString target3 = "Project Gutenberg's Etext of";
QString target4 = "Project Gutenberg's Etext";
QString indexLine;
while ( !indexStream.eof() ) {
// until end of file..
indexLine = indexStream.readLine();
if( indexLine.find(target, 0, TRUE) > -1 && !findCheck) {findCheck = TRUE;
title = indexLine.mid( indexLine.find(target, 0, TRUE) + (target.length()) , indexLine.find("\r", 0, TRUE));
title = title.left( title.find( "*",0, TRUE));
title = title.stripWhiteSpace ();
-// qDebug("Found the title 1 and it is %s", title.latin1());
+// odebug << "Found the title 1 and it is " << title << "" << oendl;
// QListBox_1->insertItem ( title);
}
if( indexLine.find( target2, 0, TRUE) > -1 && !findCheck) {
findCheck = TRUE;
title = indexLine.mid( indexLine.find( target2, 0, TRUE ) + ( target2.length()) , indexLine.find("\r", 0, TRUE) );
title = title.left( title.find( "*",0, TRUE));
title = title.stripWhiteSpace ();
-// qDebug("Found the title 2 and it is %s", title.latin1());
+// odebug << "Found the title 2 and it is " << title << "" << oendl;
// QListBox_1->insertItem ( title);
}
if( indexLine.find( target3, 0, TRUE) > -1 && !findCheck) {
findCheck = TRUE;
title = indexLine.mid( indexLine.find( target3, 0, TRUE) + ( target3.length()) , indexLine.find("\r", 0, TRUE));
title = title.left( title.find( "*",0, TRUE));
title = title.stripWhiteSpace ();
-// qDebug("Found the title 3 and it is %s", title.latin1());
+// odebug << "Found the title 3 and it is " << title << "" << oendl;
}
if( indexLine.find( target4, 0, TRUE) > -1 && !findCheck) {
findCheck = TRUE;
title = indexLine.mid( indexLine.find( target4, 0, TRUE) + ( target4.length()) , indexLine.find("\r", 0, TRUE));
title = title.left( title.find( "*",0, TRUE));
title = title.stripWhiteSpace ();
-// qDebug("Found the title 4 and it is %s", title.latin1());
+// odebug << "Found the title 4 and it is " << title << "" << oendl;
}
} //endof file
indexLib.close();
if( !findCheck || title.length() < 2) {
- qDebug("Trying hard to find title from GUTINDEX.ALL");
+ odebug << "Trying hard to find title from GUTINDEX.ALL" << oendl;
title = titleFromLibrary( filename);
findCheck = TRUE;
}
if ( checkConf() == false && findCheck == TRUE) {
config.setGroup( "Files");
config.writeEntry("NumberOfFiles",i_numofFiles + 1 );
QString interger;
interger.setNum( i_numofFiles +1);
config.writeEntry(interger, filename);
config.setGroup( "Titles" );
for (int i = 1; i <= i_numofFiles; i++) { //find dup titles in config file
QString temp;
temp.setNum(i);
config.setGroup( "Files" );
QString ramble = config.readEntry(temp, "" );
config.setGroup( "Titles" );
QString title1 = config.readEntry(ramble, "");
if(title1==title)
title+="1";
i= i_numofFiles+1;
}
if(title.length()<3) {
-// qDebug("title is empty");
+// odebug << "title is empty" << oendl;
title="Unknown";
}
config.writeEntry( filename,title);
}
} else {
QString sMsg;
sMsg = "Error opening library file: "+filename;
printf( sMsg+"\n");
}
return true;
}
QString OpenEtext::titleFromLibrary( QString fileName)
{
QFile indexLib( local_index);
QString target;
int find1 = fileName.findRev("/",-1,TRUE) + 1;
int find2 = fileName.findRev(".gtn",-1,TRUE) - find1;
if(find2==-1-find1)
int find2 = fileName.findRev(".etx",-1,TRUE) - find1;
else if(find2==-1-find1)
int find2 = fileName.findRev(".txt",-1,TRUE) - find1;
target = fileName.mid( find1, find2 );
QString checker = target.right(1);
bool ok;
checker.toInt( &ok,10);
if( ok) {
target = target.left( target.length()-1);
checker = target.right(1);
ok = FALSE;
checker.toInt( &ok,10);
if( ok) {
target = target.left( target.length()-1);
}
}
if ( indexLib.open( IO_ReadOnly) ) {
// file opened successfully
QTextStream indexStream( &indexLib );
QString indexLine;
bool findCheck = FALSE;
while ( !indexStream.atEnd() ) { // until end of file..
indexLine = indexStream.readLine();
if( indexLine.find( target,0,FALSE) > 0 ) {
findCheck = TRUE;
title = indexLine.mid( 9, 50);
// title = indexLine.mid( 26, indexLine.length() );
title = title.stripWhiteSpace ();
-// qDebug("Finally Found the title and it is\n %s", title.latin1());
+// odebug << "Finally Found the title and it is\n " << title << "" << oendl;
// QListBox_1->insertItem ( title);
}
} //end while loop
}
else
- qDebug("Error opening library index "+ local_index);
+ odebug << "Error opening library index "+ local_index << oendl;
return title;
}
bool OpenEtext::checkConf()
{
QString file = fileName;
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);
config.setGroup( "Files");
QString ramble = config.readEntry(temp, "" );
if(ramble == file ) {
return true;
}
}
return false;
}
void OpenEtext::remove()
{
title_text = QListBox_1->text( QListBox_1->currentItem() );
title_text=title_text.stripWhiteSpace();
QString msg ="<p>Do you really want to REMOVE\n" +title_text +"?\nThis will not delete the file.</P>";
switch( QMessageBox::information( this, (tr("Remove Etext")),
(tr(msg)),
(tr("&Yes")), (tr("&Cancel")), 0 )){
case 0: // Yes clicked,
removeSelection();
QListBox_1->clear();
getTitles();
break;
case 1: // Cancel
break;
};
}
/*
this removes selected title entry*/
void OpenEtext::removeSelection()
{
Config config("Gutenbrowser");
config.setGroup( "Files" );
s_numofFiles = config.readEntry("NumberOfFiles", "0");
int rem=0;
int i_numofFiles = s_numofFiles.toInt();
QString fileNum2;
QString fileNum;
for (int i = 1; i <= i_numofFiles; i++) {
fileNum.setNum(i);
config.setGroup( "Files" );
QString s_filename = config.readEntry(fileNum, "" );
config.setGroup( "Titles" );
QString file_title = config.readEntry( s_filename, "");
if(title_text == file_title) {
rem=i;
-//qDebug("file title to remove is "+file_title);
+//odebug << "file title to remove is "+file_title << oendl;
selFile = s_filename;
config.removeEntry( s_filename); //removes file=title
}
}
config.setGroup( "Files" );
for(int fg = rem; fg < i_numofFiles ; fg++ ) { //this rewrites Files number entry
fileNum.setNum(fg);
fileNum2.setNum( fg + 1);
QString s_filename2 = config.readEntry(fileNum2, "" );
if (!s_filename2.isEmpty()) {
config.writeEntry(fileNum, s_filename2 );
}
}
config.writeEntry("NumberOfFiles", i_numofFiles - 1 );
config.removeEntry(fileNum2);
// remFile();
}
/*
removes file title name from list and config file*/
void OpenEtext::remFile()
{
Config config("Gutenbrowser");
config.setGroup( "Files" );
QString remFile;
s_numofFiles = config.readEntry("NumberOfFiles", "0");
int i_numofFiles = s_numofFiles.toInt();
for (int i = 1; i <= i_numofFiles; i++) {
QString fileNum;
fileNum.setNum(i);
QString s_filename = config.readEntry(fileNum, "" );
if( s_filename == selFile) {
config.removeEntry(selFile);
for(int fg = i_numofFiles - i; fg < i_numofFiles ; fg++ ) { //this rewrites Files number entry
QString fileNum2;
fileNum2.setNum( fg + 1);
QString s_filename2 = config.readEntry(fileNum2, "" );
if (!s_filename2.isEmpty()) {
config.writeEntry(fileNum, s_filename2 );
}
}
}
}
config.writeEntry("NumberOfFiles", i_numofFiles - 1 );
config.removeEntry(s_numofFiles);
QListBox_1->triggerUpdate(true);
}
/*
sorts the list*/
void OpenEtext::scan() {
QListBox_1->sort(TRUE);
QListBox_1->triggerUpdate(true);
}
void OpenEtext::editTitle() {
int currentItem=QListBox_1->currentItem();
QString title_text = QListBox_1->text( currentItem);
-//qDebug("Selected "+title_text);
+//odebug << "Selected "+title_text << oendl;
Config config("Gutenbrowser");
config.setGroup( "Files" );
s_numofFiles = config.readEntry("NumberOfFiles", "0");
int i_numofFiles = s_numofFiles.toInt();
QString fileNum;
for (int i = 1; i <= i_numofFiles+1; i++) {
fileNum.setNum(i);
config.setGroup( "Files" );
QString s_filename = config.readEntry(fileNum, "" );
config.setGroup( "Titles" );
QString file_title = config.readEntry( s_filename, "");
-//qDebug("file_title is "+file_title);
+//odebug << "file_title is "+file_title << oendl;
if(title_text == file_title ) {
selFile = s_filename;
-//qDebug("Edit: "+ file_title );
+//odebug << "Edit: "+ file_title << oendl;
i=i_numofFiles+1;
Edit_Title *titleEdit;
titleEdit = new Edit_Title(this,file_title ,TRUE);
if(titleEdit->exec() !=0) {
-//qDebug(titleEdit->newTitle);
+//odebug << titleEdit->newTitle << oendl;
config.writeEntry( s_filename, titleEdit->newTitle);
QListBox_1->removeItem(currentItem);
QListBox_1->insertItem ( QPixmap( QPEApplication::qpeDir()+"pics/gutenbrowser/gutenbrowser_sm.png"), titleEdit->newTitle, currentItem);
}
}
}
// getTitles();
QListBox_1->triggerUpdate(true);
}
diff --git a/noncore/apps/opie-gutenbrowser/optionsDialog.cpp b/noncore/apps/opie-gutenbrowser/optionsDialog.cpp
index bfd9c26..8cc83da 100644
--- a/noncore/apps/opie-gutenbrowser/optionsDialog.cpp
+++ b/noncore/apps/opie-gutenbrowser/optionsDialog.cpp
@@ -1,207 +1,215 @@
/***************************************************************************
optionsDialog.cpp - description
-------------------
begin : Tue Jul 25 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. *
* *
***************************************************************************/
-#include "optionsDialog.h"
-#include <qpe/config.h>
-#include "fontDialog.h"
-// #include <unistd.h>
-// #include <stdio.h>
-// #include <stdlib.h>
+#include "optionsDialog.h"
+#include "fontDialog.h"
//#include "ftpsitedlg.h"
//#include "browserDialog.h"
//#define Inherited QDialog
+
+/* OPIE */
+#include <opie2/odebug.h>
+#include <qpe/config.h>
+
+/* QT */
#include <qfont.h>
#include <qcheckbox.h>
#include <qcombobox.h>
#include <qlabel.h>
#include <qlistbox.h>
#include <qpushbutton.h>
#include <qtabwidget.h>
#include <qwidget.h>
#include <qlayout.h>
#include <qvariant.h>
#include <qtooltip.h>
#ifndef Q_WS_QWS
#include <qwhatsthis.h>
#endif
+
+/* STD */
+// #include <unistd.h>
+// #include <stdio.h>
+// #include <stdlib.h>
+
/*
* The dialog will by default be modeless, unless you set 'modal' to
* TRUE to construct a modal dialog.
*/
optionsDialog::optionsDialog( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl )
{
if ( !name )
setName( "optionsDialog" );
changedFonts=FALSE;
// styleChanged=FALSE;
// connect( this,SIGNAL( aboutToQuit()),SLOT( OnExit()) );
b_qExit=TRUE;
initDialog();
ftpSiteDlg();
BrowserDlg();
FontDialog();
}
optionsDialog::~optionsDialog()
{
-//qDebug("OnExit()");
+//odebug << "OnExit()" << oendl;
// writeConfig();
}
/// optionsDialog
void optionsDialog::doOptions() {
// config.read();
getConfig();
}
void optionsDialog::getConfig()
{
Config config("Gutenbrowser");
config.setGroup( "FTPsite" ); // ftp server config
ftp_host=config.readEntry("SiteName", "sailor.gutenberg.org");
ftp_base_dir= config.readEntry("base", "/pub/gutenberg");
TextLabel3->setText( "Current ftp server:\n"+ftp_host/* + ftp_base_dir */);
config.setGroup( "Proxy" ); // use ftp/http config
if( config.readEntry("IsChecked", "FALSE") == "TRUE") {
Ftp_CheckBox->setChecked( FALSE);
} else {
Ftp_CheckBox->setChecked( TRUE);
}
config.setGroup( "HttpServer" );
QString s_http = config.readEntry("Preferred", "http://sailor.gutenbook.org");
if( s_http == "http://sailor.gutenbook.org")
ComboBox1->setCurrentItem(0);
else
ComboBox1->setCurrentItem(1);
config.setGroup( "Browser" );
brow = config.readEntry("Preferred", "Opera");
browserName=brow;
TextLabel3_3->setText( "Current http browser:\n"+brow );
config.setGroup( "Geometry" );
// bool ok2;
QString temp;
// config.setGroup( "StyleIze" );
// temp = config.readEntry( "Style", "0");
// int i_style=temp.toInt( &ok2,10);
// #ifndef Q_WS_QWS
// if( i_style==0){ styleInt=0; ComboBoxStyle->setCurrentItem(0);}//"styleMetal"));
// if( i_style==1) { styleInt=1; ComboBoxStyle->setCurrentItem(1);}//"styleWindows") );
// if( i_style==2) { styleInt=2; ComboBoxStyle->setCurrentItem(2);}//"stylePlatinum"));
// if( i_style==2){ styleInt=2; ComboBoxStyle->setCurrentItem(2);}//"styleCDE") );
// if( i_style==3) { styleInt=3; ComboBoxStyle->setCurrentItem(3);}//"styleMotif") );
// if( i_style==4) { styleInt=4; ComboBoxStyle->setCurrentItem(4);}//"styleMotifPlus"));
// // if( i_style==5) { styleInt=5; ComboBoxStyle->setCurrentItem(5);}//"styleWood") );
// if( i_style==6) { styleInt=6; ComboBoxStyle->setCurrentItem(6);}//"styleSgi") );
// if( i_style==7) { styleInt=7; ComboBoxStyle->setCurrentItem(7);}//"stylePlatinumPlus") );
// if( i_style==9){ styleInt=9; ComboBoxStyle->setCurrentItem(9);}//"styleLace"));
// if( i_style==10){ styleInt=10; ComboBoxStyle->setCurrentItem(10);}//"styleLacePlus"));
// #endif
config.setGroup("General");
QString qExit=config.readEntry("queryExit","TRUE");
if(qExit=="TRUE") {
cb_queryExit->setChecked(TRUE);
- qDebug("Config Setting b_qExit=TRUE;");
+ odebug << "Config Setting b_qExit=TRUE;" << oendl;
b_qExit=TRUE;
} else {
cb_queryExit->setChecked(FALSE);
- qDebug("ConfigSetting b_qExit=FALSE;");
+ odebug << "ConfigSetting b_qExit=FALSE;" << oendl;
b_qExit=FALSE;
}
useWordWrap_CheckBox->setChecked( config.readBoolEntry("WordWrap", 1));
QString downDir=config.readEntry( "DownloadDirectory",local_library);
downloadDirEdit->setText(downDir);
} // end getConfig
// // void optionsDialog::setStyle( int index) {
-// // qDebug("Set style%d",index);
+// // odebug << "Set style" << index << "" << oendl;
// // //int styleInt= index;
// // styleChanged=TRUE;
// // if( ComboBoxStyle->currentItem()==0) styleInt=0;//"styleMetal"));
// // if( ComboBoxStyle->currentItem()==1) styleInt=1;//"styleWindows") );
// // if( ComboBoxStyle->currentItem()==2) styleInt=2;//"stylePlatinum"));
// // // if( ComboBoxStyle->currentItem()==2) styleInt=2;//"styleCDE") );
// // // if( ComboBoxStyle->currentItem()==3) styleInt=3;//"styleMotif") );
// // // if( ComboBoxStyle->currentItem()==4) styleInt=4;//"styleMotifPlus"));
// // // // if( ComboBoxStyle->currentItem()==5) styleInt=5;//"styleWood") );
// // // if( ComboBoxStyle->currentItem()==6) styleInt=6;//"styleSgi") );
// // // if( ComboBoxStyle->currentItem()==7) styleInt=7;//"stylePlatinumPlus") );
// // // if( ComboBoxStyle->currentItem()==9) styleInt=9;//"styleLace"));
// // // if( ComboBoxStyle->currentItem()==10) styleInt=10;//"styleLacePlus"));
// // QString temp;
// // temp.setNum(styleInt, 10);
// // Config config("Gutenbrowser");
// // config.setGroup( "StyleIze" );
// // config.writeEntry( "Style", temp);
// // config.write();
// // }
void optionsDialog::slotQueryExit()
{
Config config("Gutenbrowser");
config.setGroup("General");
- qDebug("writing queryExit");
+ odebug << "writing queryExit" << oendl;
if(cb_queryExit->isChecked()) {
b_qExit=TRUE;
config.writeEntry("queryExit","TRUE");
- qDebug("WritingConfig queryExit=TRUE");
+ odebug << "WritingConfig queryExit=TRUE" << oendl;
} else {
b_qExit=FALSE;
config.writeEntry("queryExit","FALSE");
- qDebug("WritingConfig queryExit=FALSE");
+ odebug << "WritingConfig queryExit=FALSE" << oendl;
}
config.write();
}
// void optionsDialog::slotUseSplit()
// {
// }
// void optionsDialog::lineEditChanged(const QString &editText) {
-// qDebug(editText);
+// odebug << editText << oendl;
// }
void optionsDialog::changeFonts()
{
changedFonts=TRUE;
}
void optionsDialog::slotWordWrap(bool b) {
Config config("Gutenbrowser");
config.setGroup("General");
config.writeEntry("WordWrap", b);
config.write();
}
diff --git a/noncore/apps/opie-reader/Aportis.cpp b/noncore/apps/opie-reader/Aportis.cpp
index 2f8cdc3..06f44a4 100644
--- a/noncore/apps/opie-reader/Aportis.cpp
+++ b/noncore/apps/opie-reader/Aportis.cpp
@@ -1,374 +1,374 @@
#include <stdio.h>
#include <string.h>
#include "Aportis.h"
#include "my_list.h"
#include "Bkmks.h"
Aportis::Aportis() : peanutfile(false) { /*printf("constructing:%x\n",fin);*/ }
void Aportis::dePeanut(int& ch)
{
if (peanutfile && ch != EOF)
{
unsigned char c = ch;
if (peanutfile) c ^= 0xa5;
ch = c;
}
}
CList<Bkmk>* Aportis::getbkmklist()
{
/*
if (peanutfile)
{
if (nRecs2 > nRecs)
{
CList<Bkmk>* t = new CList<Bkmk>;
for (int i = nRecs; i < nRecs2; i++)
{
char name[17];
name[16] = '\0';
-// qDebug("Record:%d, Length:%u",i,recordlength(i));
+// odebug << "Record:" << i << ", Length:" << recordlength(i) << "" << oendl;
gotorecordnumber(i);
fread(name,1,16,fin);
unsigned long lcn;
fread(&lcn,sizeof(lcn),1,fin);
lcn ^= 0xa5a5a5a5;
lcn = SwapLong(lcn);
-// qDebug("Bookmark:%s:%u", name,lcn);
+// odebug << "Bookmark:" << name << ":" << lcn << "" << oendl;
tchar tname[17];
memset(tname, 0, sizeof(tname));
for (int i = 0; name[i] != 0; i++)
{
tname[i] = name[i] ^ 0xa5;
}
t->push_back(Bkmk(tname, NULL, lcn));
}
return t;
}
else
{
return NULL;
}
}
*/
if (bCompressed != 4) return NULL;
CList<Bkmk>* t = new CList<Bkmk>;
size_t cur = ftell(fin);
for (int i = 0; i < nRecs2; i++)
{
DWORD dwPos;
fseek(fin, 0x56 + 8*i, SEEK_SET);
fread(&dwPos, 4, 1, fin);
dwPos = SwapLong(dwPos);
fseek(fin,dwPos,SEEK_SET);
unsigned char ch;
fread(&ch,1,1,fin);
if (ch != 241)
{
char name[17];
name[16] = '\0';
fseek(fin,dwPos,SEEK_SET);
fread(name,1,16,fin);
unsigned long lcn;
fread(&lcn,sizeof(lcn),1,fin);
lcn = SwapLong(lcn);
#ifdef _UNICODE
tchar tname[17];
memset(tname, 0, sizeof(tname));
for (int i = 0; name[i] != 0; i++)
{
tname[i] = name[i];
}
t->push_back(Bkmk(tname, NULL, lcn));
#else
t->push_back(Bkmk(name,lcn));
#endif
}
}
fseek(fin, cur, SEEK_SET);
return t;
}
int Aportis::OpenFile(const char *src)
{
// printf("In openfile\n");
int ret = 0;
if (!Cpdb::openfile(src)) return -1;
if (head.creator != 0x64414552 // 'dAER'
|| head.type != 0x74584554) // 'tXET')
{
if (memcmp(&head.creator, "PPrs", 4) == 0 && memcmp(&head.type, "PNRd", 4) == 0)
{
peanutfile = true;
}
else
{
return -2;
}
}
nRecs2 = nRecs = SwapWord(head.recordList.numRecords) - 1;
fseek(fin,0,SEEK_END);
dwLen = ftell(fin);
if (peanutfile)
{
PeanutHeader hdr0;
gotorecordnumber(0);
fread(&hdr0, sizeof(hdr0), 1, fin);
-// qDebug("Version:%x", ntohs(hdr0.Version));
+// odebug << "Version:" << ntohs(hdr0.Version) << "" << oendl;
if (hdr0.Version && 0x0200)
{
bCompressed = 2;
}
else
{
bCompressed = 1;
}
BlockSize = 4096;
nRecs = SwapWord(hdr0.Records)-1;
dwTLen = nRecs*BlockSize;
}
else
{
gotorecordnumber(0);
tDocRecord0 hdr0;
fread(&hdr0, sizeof(hdr0), 1, fin);
bCompressed = SwapWord(hdr0.wVersion);
if (bCompressed!=1 && bCompressed!=2 && bCompressed != 4) {
ret = bCompressed;
bCompressed = 2;
}
switch (bCompressed)
{
case 4:
{
dwTLen = 0;
int i;
for (i = 0; i < nRecs; i++)
{
unsigned int bs = GetBS(i);
if (bs == 0) break;
else dwTLen += bs;
}
nRecs = i;
BlockSize = 0;
}
break;
case 1:
case 2:
default:
nRecs = SwapWord(hdr0.wNumRecs);
dwTLen = SwapLong(hdr0.dwStoryLen);
BlockSize = SwapWord(hdr0.wRecSize);
if (BlockSize == 0)
{
BlockSize = 4096;
printf("WARNING: Blocksize not set in source file\n");
}
}
}
// this is the main record buffer
// it knows how to stretch to accomodate the decompress
currentrec = 0;
cbptr = 0;
outptr = 0;
refreshbuffer();
-// qDebug("Number of records:[%u,%u]", nRecs, nRecs2);
+// odebug << "Number of records:[" << nRecs << "," << nRecs2 << "]" << oendl;
return ret;
}
int Aportis::getch()
{
if (bCompressed == 1)
{
if ((dwRecLen == 0) && !refreshbuffer()) return EOF;
else
{
int c = getc(fin);
dePeanut(c);
dwRecLen--;
currentpos++;
return c;
}
}
if (outptr != cbptr)
{
currentpos++;
return (circbuf[outptr = (outptr + 1) % 2048]);
}
if ((dwRecLen == 0) && !refreshbuffer()) return EOF;
currentpos++;
int c;
// take a char from the input buffer
c = getc(fin);
dePeanut(c);
dwRecLen--;
// separate the char into zones: 0, 1...8, 9...0x7F, 0x80...0xBF, 0xC0...0xFF
// codes 1...8 mean copy that many chars; for accented chars & binary
if (c == 0)
{
circbuf[outptr = cbptr = (cbptr+1)%2048] = c;
return c;
}
else if (c >= 0x09 && c <= 0x7F)
{
circbuf[outptr = cbptr = (cbptr+1)%2048] = c;
return c;
}
else if (c >= 0x01 && c <= 0x08)
{
dwRecLen -= c;
while(c--)
{
int c = getc(fin);
dePeanut(c);
circbuf[cbptr = (cbptr+1)%2048] = c;
}
return circbuf[outptr = (outptr+1)%2048];
}
else if (c >= 0x80 && c <= 0xBF)
{
int m,n;
c <<= 8;
int c1 = getc(fin);
dePeanut(c1);
c += c1;
dwRecLen--;
m = (c & 0x3FFF) >> COUNT_BITS;
n = c & ((1<<COUNT_BITS) - 1);
n += 3;
while (n--)
{
cbptr = (cbptr+1)%2048;
circbuf[cbptr] = circbuf[(cbptr+2048-m)%2048];
}
return circbuf[outptr = (outptr+1)%2048];
}
else if (c >= 0xC0 && c <= 0xFF)
{
circbuf[cbptr = (cbptr+1)%2048] = ' ';
circbuf[cbptr = (cbptr+1)%2048] = c^0x80;
return circbuf[outptr = (outptr+1)%2048];
}
}
unsigned int Aportis::GetBS(unsigned int bn)
{
DWORD dwPos;
WORD fs;
fseek(fin, 0x56 + 8*bn, SEEK_SET);
fread(&dwPos, 4, 1, fin);
dwPos = SwapLong(dwPos);
fseek(fin,dwPos,SEEK_SET);
// gotorecordnumber(bn+1);
unsigned char ch;
fread(&ch,1,1,fin);
if (ch == 241)
{
fread(&fs,sizeof(fs),1,fin);
fs = SwapWord(fs);
}
else
fs = 0;
return fs;
}
unsigned int Aportis::locate()
{
if (bCompressed == 4)
{
size_t cur = ftell(fin);
unsigned int clen = 0;
for (unsigned int i = 0; i < currentrec-1; i++)
{
unsigned int bs = GetBS(i);
if (bs == 0) break;
clen += bs;
}
fseek(fin,cur,SEEK_SET);
return clen+currentpos;
}
else
return (currentrec-1)*BlockSize+currentpos;
}
void Aportis::locate(unsigned int n)
{
unsigned int offset;
// currentrec = (n >> OFFBITS);
switch (bCompressed)
{
case 4:
{
DWORD clen = 0;
offset = n;
unsigned int i;
for (i = 0; i < nRecs; i++)
{
unsigned int bs = GetBS(i);
if (bs == 0) break;
clen += bs;
if (clen > n) break;
offset = n - clen;
}
currentrec = i;
}
break;
case 1:
case 2:
default:
currentrec = n / BlockSize;
offset = n % BlockSize;
}
outptr = cbptr;
refreshbuffer();
while (currentpos < offset && getch() != EOF);
}
bool Aportis::refreshbuffer()
{
if (currentrec < nRecs)
{
dwRecLen = recordlength(currentrec+1);
gotorecordnumber(currentrec+1);
if (bCompressed == 4)
{
unsigned char t[3];
fread(t,1,3,fin);
if (t[0] != 241)
{
printf("You shouldn't be here!\n");
return false;
}
dwRecLen -= 3;
}
/*
int n = fread(t.buf, 1, dwRecLen, fin);
t.len = n;
// if(bCompressed)
t.Decompress();
t.buf[t.Len()] = '\0';
*/
currentpos = 0;
currentrec++;
return true;
}
else {
return false;
}
}
diff --git a/noncore/apps/opie-reader/Bkmks.cpp b/noncore/apps/opie-reader/Bkmks.cpp
index 16bc1f1..480c240 100644
--- a/noncore/apps/opie-reader/Bkmks.cpp
+++ b/noncore/apps/opie-reader/Bkmks.cpp
@@ -1,320 +1,320 @@
#include <qmessagebox.h>
#include "Bkmks.h"
#include "my_list.h"
#include "version.h"
#include "names.h"
const unsigned long BkmkFile::magic = ((unsigned long)'q' << 24) | ((unsigned long)'t' << 16) | ((unsigned long)'r' << 8) | ((unsigned long)BKMKTYPE);
Bkmk::Bkmk(const unsigned char* _nm, unsigned short _nmlen, const unsigned char* _anno, unsigned short _annolen, unsigned int _p) : m_position(_p)
{
init(_nm, _nmlen, _anno, _annolen, _p);
}
Bkmk::Bkmk(const tchar* _nm, const unsigned char* _anno, unsigned short annolen, unsigned int _p) : m_position(_p)
{
init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, annolen, _p);
}
Bkmk::Bkmk(const tchar* _nm, const tchar* _anno, unsigned int _p) : m_position(_p)
{
if (_anno == NULL)
{
tchar t = 0;
init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), &t, sizeof(t), _p);
}
else
{
init(_nm, sizeof(tchar)*(ustrlen(_nm)+1), _anno, sizeof(tchar)*(ustrlen(_anno)+1), _p);
}
}
void Bkmk::init(const void* _nm, unsigned short _nmlen, const void* _anno, unsigned short _annolen, unsigned int _p)
{
m_namelen = _nmlen;
if (m_namelen > 0)
{
m_name = new unsigned char[m_namelen];
memcpy(m_name, _nm, m_namelen);
}
else
{
m_name = NULL;
}
m_annolen = _annolen;
if (m_annolen > 0)
{
m_anno = new unsigned char[m_annolen];
memcpy(m_anno, _anno, m_annolen);
}
else
{
m_anno = NULL;
}
m_position = _p;
}
Bkmk::~Bkmk()
{
if (m_name != NULL) delete [] m_name;
m_name = NULL;
if (m_anno != NULL) delete [] m_anno;
m_anno = NULL;
}
Bkmk& Bkmk::operator=(const Bkmk& rhs)
{
if (m_name != NULL)
{
delete [] m_name;
m_name = NULL;
}
if (m_anno != NULL)
{
delete [] m_anno;
m_anno = NULL;
}
if (rhs.m_name != NULL)
{
m_namelen = rhs.m_namelen;
m_name = new unsigned char[m_namelen];
memcpy(m_name, rhs.m_name, m_namelen);
}
else
m_name = NULL;
if (rhs.m_anno != NULL)
{
m_annolen = rhs.m_annolen;
m_anno = new unsigned char[m_annolen];
memcpy(m_anno, rhs.m_anno, m_annolen);
}
else
m_anno = NULL;
m_position = rhs.m_position;
return *this;
}
bool Bkmk::operator==(const Bkmk& rhs)
{
return (m_position == rhs.m_position && (rhs.m_namelen == m_namelen) && memcmp(m_name,rhs.m_name,m_namelen) == 0);
}
void Bkmk::setAnno(unsigned char* t, unsigned short len)
{
if (m_anno != NULL)
{
delete [] m_anno;
m_anno = NULL;
}
if (t != NULL)
{
m_annolen = len;
m_anno = new unsigned char[m_annolen];
memcpy(m_anno, t, m_annolen);
}
else
{
m_annolen = sizeof(tchar);
m_anno = new unsigned char[m_annolen];
*((tchar*)m_anno) = 0;
}
}
void Bkmk::setAnno(tchar* t)
{
if (m_anno != NULL)
{
delete [] m_anno;
m_anno = NULL;
}
if (t != NULL)
{
unsigned short len = ustrlen(t)+1;
m_annolen = sizeof(tchar)*len;
m_anno = new unsigned char[m_annolen];
memcpy(m_anno, t, m_annolen);
}
else
{
m_annolen = sizeof(tchar);
m_anno = new unsigned char[m_annolen];
*((tchar*)m_anno) = 0;
}
}
BkmkFile::BkmkFile(const char *fnm, bool w)
:
wt(w), isUpgraded(false)
{
if (w)
{
f = fopen(fnm, "wb");
}
else
{
f = fopen(fnm, "rb");
}
}
BkmkFile::~BkmkFile()
{
if (f != NULL) fclose(f);
}
void BkmkFile::write(const Bkmk& b)
{
if (f != NULL)
{
fwrite(&b.m_namelen, sizeof(b.m_namelen),1,f);
fwrite(b.m_name,1,b.m_namelen,f);
fwrite(&b.m_annolen, sizeof(b.m_annolen),1,f);
fwrite(b.m_anno,1,b.m_annolen,f);
fwrite(&b.m_position,sizeof(b.m_position),1,f);
}
}
void BkmkFile::write(CList<Bkmk>& bl)
{
if (f != NULL)
{
fwrite(&magic, sizeof(magic), 1, f);
for (CList<Bkmk>::iterator i = bl.begin(); i != bl.end(); i++)
{
write(*i);
}
}
}
CList<Bkmk>* BkmkFile::readall()
{
CList<Bkmk>* bl = NULL;
if (f != NULL)
{
unsigned long newmagic;
fread(&newmagic, sizeof(newmagic), 1, f);
if ((newmagic & 0xffffff00) != (magic & 0xffffff00))
{
if (QMessageBox::warning(NULL, "Old bookmark file!", "Which version of " PROGNAME "\ndid you upgrade from?", "0_4*", "Any other version") == 0)
{
fseek(f,0,SEEK_SET);
bl = readall00(&read05);
}
else
{
fseek(f,0,SEEK_SET);
bl = readall00(&read03);
}
isUpgraded = true;
}
else
{
switch(newmagic & 0xff)
{
case 6:
isUpgraded = false;
bl = readall00(read06);
-// qDebug("Correct version!");
+// odebug << "Correct version!" << oendl;
break;
case 5:
isUpgraded = true;
bl = readall00(read05);
-// qDebug("Known version!");
+// odebug << "Known version!" << oendl;
break;
default:
-// qDebug("Unknown version!");
+// odebug << "Unknown version!" << oendl;
isUpgraded = true;
bl = readall00(read05);
}
}
}
return bl;
}
CList<Bkmk>* BkmkFile::readall00(Bkmk* (*readfn)(FILE*))
{
CList<Bkmk>* bl = new CList<Bkmk>;
while (1)
{
Bkmk* b = (*readfn)(f);
if (b == NULL) break;
bl->push_back(*b);
delete b;
}
return bl;
}
Bkmk* BkmkFile::read03(FILE* f)
{
Bkmk* b = NULL;
if (f != NULL)
{
unsigned short ln;
if (fread(&ln,sizeof(ln),1,f) == 1)
{
tchar* name = new tchar[ln+1];
fread(name,sizeof(tchar),ln,f);
name[ln] = 0;
ln = 0;
tchar* anno = new tchar[ln+1];
anno[ln] = 0;
unsigned int pos;
fread(&pos,sizeof(pos),1,f);
b = new Bkmk(name,anno,pos);
}
}
return b;
}
Bkmk* BkmkFile::read05(FILE* f)
{
Bkmk* b = NULL;
if (f != NULL)
{
unsigned short ln;
if (fread(&ln,sizeof(ln),1,f) == 1)
{
tchar* nm = new tchar[ln+1];
fread(nm,sizeof(tchar),ln,f);
nm[ln] = 0;
fread(&ln,sizeof(ln),1,f);
tchar* anno = new tchar[ln+1];
if (ln > 0) fread(anno,sizeof(tchar),ln,f);
anno[ln] = 0;
unsigned int pos;
fread(&pos,sizeof(pos),1,f);
b = new Bkmk(nm,anno,pos);
}
}
return b;
}
Bkmk* BkmkFile::read06(FILE* f)
{
Bkmk* b = NULL;
if (f != NULL)
{
unsigned short ln;
if (fread(&ln,sizeof(ln),1,f) == 1)
{
b = new Bkmk;
b->m_namelen = ln;
b->m_name = new unsigned char[b->m_namelen];
fread(b->m_name,1,b->m_namelen,f);
fread(&(b->m_annolen),sizeof(b->m_annolen),1,f);
if (b->m_annolen > 0)
{
b->m_anno = new unsigned char[b->m_annolen];
fread(b->m_anno,1,b->m_annolen,f);
}
fread(&(b->m_position),sizeof(b->m_position),1,f);
}
}
return b;
}
diff --git a/noncore/apps/opie-reader/BuffDoc.cpp b/noncore/apps/opie-reader/BuffDoc.cpp
index 4fbab93..68391b8 100644
--- a/noncore/apps/opie-reader/BuffDoc.cpp
+++ b/noncore/apps/opie-reader/BuffDoc.cpp
@@ -1,412 +1,412 @@
#define NEWLINEBREAK
#include "BuffDoc.h"
//#include <FL/fl_draw.h>
#include "plucker.h"
#ifdef USENEF
#include "nef.h"
#include "arrierego.h"
#endif
linkType BuffDoc::hyperlink(unsigned int n, QString& wrd)
{
linkType bRet = eNone;
if (exp != NULL)
{
bRet = exp->hyperlink(n, wrd);
if (bRet == eLink)
{
lastword.empty();
lastsizes[0] = laststartline = n;
#ifdef NEWLINEBREAK
lastispara = true;
#else
lastispara = false;
#endif
lastsizes[0] = laststartline = exp->locate();
}
}
return bRet;
}
void BuffDoc::locate(unsigned int n)
{
- // //qDebug("BuffDoc:locating:%u",n);
+ // //odebug << "BuffDoc:locating:" << n << "" << oendl;
lastword.empty();
lastsizes[0] = laststartline = n;
#ifdef NEWLINEBREAK
lastispara = true;
#else
lastispara = false;
#endif
// tchar linebuf[1024];
if (exp != NULL) exp->locate(n);
- // //qDebug("BuffDoc:Located");
+ // //odebug << "BuffDoc:Located" << oendl;
}
#ifdef NEWLINEBREAK
bool BuffDoc::getline(CDrawBuffer* buff, int wth, unsigned char _border)
{
bool moreleft = true;
bool margindone = false;
int w = wth-2*_border;
tchar ch = 32;
CStyle cs;
buff->empty();
if (exp == NULL)
{
buff->empty();
buff->setEof();
return false;
}
int len = 0;
if (lastword.length() > 0)
{
*buff = lastword;
cs = lastword.laststyle();
w -= buff->leftMargin() + buff->rightMargin();
margindone = true;
len = lastword.length();
}
else buff->empty();
lastword.empty();
unsigned int slen = buff->width(len);
if (lastispara) buff->setstartpara();
while (1)
{
lastsizes[len] = exp->locate();
getch(ch, cs);
if (ch == 10 && len == 0 && !lastispara)
{
lastsizes[len] = exp->locate();
getch(ch, cs);
}
if (ch == UEOF)
{
if (len == 0)
{
buff->setEof();
moreleft = false;
}
laststartline = exp->locate();
break;
}
if (ch == 10)
{
buff->setendpara();
lastispara = true;
laststartline = exp->locate();
break;
}
lastispara = false;
buff->addch(ch, cs);
len++;
if (!margindone)
{
w -= buff->leftMargin() + buff->rightMargin();
margindone = true;
}
if ((slen = buff->width(len)) > w)
{
if (ch == ' ' || len == 1)
{
if (ch == ' ') buff->truncate(len-1);
laststartline = exp->locate();
break;
}
else // should do a backward search for spaces, first.
{
for (int i = len-2; i > 0; i--)
{
if ((*buff)[i] == ' ')
{
(*buff)[len] = 0;
lastword.setright(*buff, i+1);
buff->truncate(i);
(*buff)[i] = '\0';
laststartline = lastsizes[i+1];
buff->resize();
for (int j = 0; j < lastword.length(); j++)
{
lastsizes[j] = lastsizes[j+i+1];
}
return true;
}
if ((*buff)[i] == '-' && !(((*buff)[i-1] == '-') || ((*buff)[i+1] == '-')))
{
(*buff)[len] = 0;
lastword.setright(*buff, i+1);
buff->truncate(i+1);
(*buff)[i+1] = '\0';
laststartline = lastsizes[i+1];
buff->resize();
for (int j = 0; j < lastword.length(); j++)
{
lastsizes[j] = lastsizes[j+i+1];
}
return true;
}
}
laststartline = lastsizes[len-1];
(*buff)[len] = 0;
lastword.setright(*buff, len - 1);
buff->truncate(len-1);
buff->addch('-', cs);
for (int j = 0; j < lastword.length(); j++)
{
lastsizes[j] = lastsizes[j+len];
}
break;
}
}
}
(*buff)[len] = '\0';
buff->resize();
return moreleft;
}
#else
bool BuffDoc::getline(CDrawBuffer* buff, int wth, unsigned char _border)
{
bool margindone = false;
int w = wth-2*_border;
tchar ch = 32;
CStyle cs;
buff->empty();
if (exp == NULL)
{
// (*buff)[0] = '\0';
buff->empty();
return false;
}
int len = 0, lastcheck = 0;
if (lastword.length() > 0)
{
*buff = lastword;
cs = lastword.laststyle();
w -= buff->leftMargin() + buff->rightMargin();
margindone = true;
}
else buff->empty();
-// //qDebug("Buff:%s Lastword:%s", (const char*)toQString(buff->data()), (const char*)toQString(lastword.data()));
+// //odebug << "Buff:" << toQString(buff->data()) << " Lastword:" << toQString(lastword.data()) << "" << oendl;
lastcheck = len = buff->length();
unsigned int slen = buff->width(len);
if (slen > w)
{
for ( ; len > 1; len--)
{
if (buff->width(len) < w) break;
}
// lastword = buff->data() + len - 1;
laststartline = lastsizes[len-1];
for (int i = 0; i < buff->length(); i++) lastsizes[i] = lastsizes[i+len-1];
// (*buff)[len-1] = '-';
if (len > 2)
{
lastword.setright(*buff, len - 1);
buff->truncate(len-1);
buff->addch('-', cs);
(*buff)[len] = '\0';
}
else
{
lastword.empty();
(*buff)[len] = '\0';
}
buff->resize();
return true;
}
if (lastispara)
{
lastispara = false;
// lastword[0] = '\0';
lastword.empty();
len = buff->length();
while (buff->width(len) > w) len--;
// (*buff)[len] = '\0';
buff->truncate(len);
laststartline = exp->locate();
buff->resize();
return true;
}
lastispara = false;
for (int i = 0; i < len; i++) allsizes[i] = lastsizes[i];
while (slen < w)
{
lastcheck = len;
allsizes[len] = exp->locate();
getch(ch, cs);
while (ch != ' ' && ch != '\012' && ch != UEOF && len < 128)
{
len++;
buff->addch(ch,cs);
allsizes[len] = exp->locate();
getch(ch, cs);
}
(*buff)[len] = 0;
slen = buff->width(len);
len++;
buff->addch(' ', cs);
if (!margindone)
{
w -= buff->leftMargin() + buff->rightMargin();
margindone = true;
}
allsizes[len] = exp->locate();
if (slen < w && ch != ' ')
{
lastcheck = len;
break;
}
lastispara = (ch == '\012');
}
(*buff)[len] = '\0';
// lastword = buff->data()+lastcheck;
#ifdef _WINDOWS
lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1);
{
int i;
for (i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
}
#else
lastword.setright(*buff, (lastcheck > 0) ? lastcheck : 1);
for (int i = 0; i < lastword.length(); i++) lastsizes[i] = allsizes[i+lastcheck];
#endif
if (lastcheck > 0)
{
laststartline = allsizes[lastcheck];
// (*buff)[lastcheck-1] = '\0';
buff->truncate(lastcheck-1);
}
else
{
laststartline = (lastcheck == len) ? exp->locate() : allsizes[lastcheck+1];
// (*buff)[lastcheck] = '\0';
buff->truncate(lastcheck);
}
// buff->frig();
buff->resize();
if (ch == UEOF && buff->length() == 0)
{
buff->setEof();
return false;
}
return true;
}
#endif
bool BuffDoc::getline(CDrawBuffer* buff, int wth, int cw, unsigned char _border)
{
int w = wth-2*_border;
buff->empty();
if (exp == NULL)
{
return false;
}
tchar ch;
CStyle cs;
int i = 1;
while (i*cw < w-buff->offset(w,0))
{
getch(ch, cs);
if (ch == '\12' || ch == UEOF) break;
buff->addch(ch,cs);
i++;
}
buff->truncate(i);
laststartline = exp->locate();
buff->resize();
return (ch != UEOF);
}
int BuffDoc::openfile(QWidget* _parent, const char *src)
{
- // //qDebug("BuffDoc:Openfile:%s", src);
- // //qDebug("Trying aportis %x",exp);
+ // //odebug << "BuffDoc:Openfile:" << src << "" << oendl;
+ // //odebug << "Trying aportis " << exp << "" << oendl;
if (exp != NULL) delete exp;
lastword.empty();
lastsizes[0] = laststartline = 0;
#ifdef NEWLINEBREAK
lastispara = true;
#else
lastispara = false;
#endif
/*
exp = new Text;
int ret = exp->openfile(src);
*/
exp = new Aportis;
int ret = exp->openfile(src);
if (ret == -1)
{
delete exp;
exp = NULL;
return ret;
}
if (ret == -2)
{
delete exp;
exp = new ztxt;
ret = exp->openfile(src);
}
#ifdef USENEF
if (ret != 0)
{
delete exp;
exp = new CArriere;
ret = exp->openfile(src);
}
if (ret != 0)
{
delete exp;
exp = new CNEF;
ret = exp->openfile(src);
}
#endif
if (ret != 0)
{
delete exp;
exp = new CPlucker;
ret = exp->openfile(src);
}
if (ret != 0)
{
delete exp;
- //qDebug("Trying ppms");
+ //odebug << "Trying ppms" << oendl;
exp = new ppm_expander;
ret = exp->openfile(src);
}
if (ret != 0)
{
delete exp;
exp = new Text;
-// //qDebug("Trying text");
+// //odebug << "Trying text" << oendl;
ret = exp->openfile(src);
}
if (ret != 0)
{
delete exp;
QMessageBox::information(_parent, PROGNAME, "Unknown file compression type","Try another file");
return ret;
}
- // //qDebug("Doing final open:%x:%x",exp,filt);
+ // //odebug << "Doing final open:" << exp << ":" << filt << "" << oendl;
lastword.empty();
lastsizes[0] = laststartline = 0;
#ifdef NEWLINEBREAK
lastispara = true;
#else
lastispara = false;
#endif
exp->locate(0);
filt->setsource(exp);
- // //qDebug("BuffDoc:file opened");
+ // //odebug << "BuffDoc:file opened" << oendl;
return 0;
}
diff --git a/noncore/apps/opie-reader/CDrawBuffer.cpp b/noncore/apps/opie-reader/CDrawBuffer.cpp
index ec36fb2..b137ac3 100644
--- a/noncore/apps/opie-reader/CDrawBuffer.cpp
+++ b/noncore/apps/opie-reader/CDrawBuffer.cpp
@@ -1,546 +1,546 @@
#include "CDrawBuffer.h"
#include "FontControl.h"
#include <qpainter.h>
#include <qimage.h>
CDrawBuffer::~CDrawBuffer()
{
while (!segs.isEmpty()) segs.erase(0);
}
void CDrawBuffer::setright(CDrawBuffer& rhs, int f)
{
int i;
len = rhs.len;
fc = rhs.fc;
m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0;
while (!segs.isEmpty())
{
segs.erase(0);
}
for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); )
{
CList<textsegment>::iterator next = iter;
iter++;
if (iter == rhs.segs.end() || iter->start > f)
{
int st = next->start-f;
if (st < 0) st = 0;
CStyle _style = next->style;
segs.push_back(textsegment(st,next->style));
}
}
for (i = f; rhs[i] != '\0'; i++) (*this)[i-f] = rhs[i];
(*this)[i-f] = '\0';
len = i;
}
CDrawBuffer& CDrawBuffer::operator=(CDrawBuffer& rhs)
{
int i;
-// //qDebug("Trying 2");
+// //odebug << "Trying 2" << oendl;
len = rhs.len;
m_maxstyle = rhs.m_maxstyle;
m_ascent = rhs.m_ascent;
m_descent = rhs.m_descent;
m_lineSpacing = rhs.m_lineSpacing;
m_lineExtraSpacing = rhs.m_lineExtraSpacing;
while (!segs.isEmpty())
{
segs.erase(0);
}
for (CList<textsegment>::iterator iter = rhs.segs.begin(); iter != rhs.segs.end(); iter++)
{
segs.push_back(*iter);
}
for (i = 0; rhs[i] != '\0'; i++) (*this)[i] = rhs[i];
(*this)[i] = '\0';
len = i;
-// //qDebug("Tried 2");
+// //odebug << "Tried 2" << oendl;
return *this;
}
CDrawBuffer& CDrawBuffer::operator=(const tchar*sztmp)
{
int i;
while (!segs.isEmpty())
{
segs.erase(0);
}
segs.push_back(textsegment(0, CStyle()));
for (i = 0; sztmp[i] != '\0'; i++) (*this)[i] = sztmp[i];
(*this)[i] = '\0';
len = i;
return *this;
}
void CDrawBuffer::empty()
{
m_bSop = false;
m_bEop = false;
len = 0;
(*this)[0] = 0;
while (!segs.isEmpty())
{
segs.erase(0);
}
segs.push_back(textsegment(0,CStyle()));
m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0;
m_bEof = false;
}
void CDrawBuffer::addch(tchar ch, CStyle _style/* = ucFontBase*/)
{
if (len == 0)
{
segs.first().start = 0;
segs.first().style = _style;
}
else if (_style != segs.last().style)
{
segs.push_back(textsegment(len, _style));
}
(*this)[len++] = ch;
}
void CDrawBuffer::truncate(int n)
{
len = n;
(*this)[n] = 0;
}
int CDrawBuffer::width(int numchars, bool onscreen, int scwidth, unsigned char _border)
{
int gzoom = fc->gzoom();
int currentx = 0, end = 0;
QString text = (numchars < 0) ? toQString(data()) : toQString(data(), numchars);
CList<textsegment>::iterator textstart = segs.begin();
int extraspace = 0;
bool just = (onscreen && !m_bEop && textstart->style.getJustify() == m_AlignJustify);
int spaces = 0;
int spacesofar = 0;
int spacenumber = 0;
int nonspace = 0;
if (just)
{
for (int i = 0; i < len; i++)
{
if ((*this)[i] != ' ')
{
nonspace = i;
break;
}
}
#ifdef _WINDOWS
for (i = nonspace; i < len; i++)
#else
for (int i = nonspace; i < len; i++)
#endif
{
if ((*this)[i] == ' ')
{
spaces++;
}
}
if (spaces == 0)
{
just = false;
}
else
{
extraspace = (scwidth - 2*_border - rightMargin() - leftMargin() - width());
if (extraspace == 0) just = false;
}
}
CList<textsegment>::iterator textend = textstart;
do
{
textend++;
end = (textend != segs.end()) ? textend->start : len;
if (numchars >= 0 && end > numchars)
{
end = numchars;
}
CStyle currentstyle = textstart->style;
if (currentstyle.isPicture())
{
if (currentstyle.canScale())
{
currentx += (gzoom*currentstyle.getPicture()->width())/100;
}
else
{
currentx += currentstyle.getPicture()->width();
}
}
else
{
if (currentstyle.isMono() && !fc->hasCourier())
{
int cw = (7*fc->getsize(currentstyle))/10;
currentx += cw*(end-textstart->start);
}
else
{
QFont f(currentstyle.isMono() ? QString(fc->fixedfontname()) : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) );
// f.setUnderline(currentstyle.isUnderline());
QString str = text.mid(textstart->start, end-textstart->start);
QFontMetrics fm(f);
if (just)
{
int lastspace = -1;
int nsp = 0;
int cx = currentx;
while ((nsp = str.find(" ", lastspace+1)) >= 0)
{
if (nsp > nonspace)
{
spacenumber++;
int nexttoadd = (extraspace*spacenumber+spaces/2)/spaces - spacesofar;
QString nstr = str.mid(lastspace+1, nsp-lastspace);
int lw = fm.width(nstr);
cx += lw+nexttoadd;
spacesofar += nexttoadd;
lastspace = nsp;
}
else
{
QString nstr = str.mid(lastspace+1, nsp-lastspace);
-// qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr);
+// odebug << "str:" << str << ": last:" << lastspace << " new:" << nsp << " nstr:" << nstr << ":" << oendl;
int lw = fm.width(nstr);
cx += lw;
lastspace = nsp;
}
}
QString nstr = str.right(str.length()-1-lastspace);
cx += fm.width(nstr);
currentx = cx;
}
else
{
currentx += fm.width(str);
}
}
}
textstart = textend;
}
while (textend != segs.end() && end != numchars && textstart->start < len);
return currentx;
}
int CDrawBuffer::leftMargin()
{
return (segs.begin()->style.getLeftMargin()*fc->getsize(segs.begin()->style)+3)/6;
}
int CDrawBuffer::rightMargin()
{
return (segs.begin()->style.getRightMargin()*fc->getsize(segs.begin()->style)+3)/6;
}
int CDrawBuffer::offset(int scwidth, unsigned char _border)
{
int currentx = _border;
switch(segs.begin()->style.getJustify())
{
case m_AlignRight:
{
currentx = scwidth - _border - rightMargin() - width();
}
break;
case m_AlignCentre:
{
currentx = (
scwidth +
leftMargin() - rightMargin()
- width())/2;
}
break;
case m_AlignJustify:
case m_AlignLeft:
currentx = _border + leftMargin();
break;
}
return currentx;
}
void CDrawBuffer::render(QPainter* _p, int _y, bool _bMono, int _charWidth, int scwidth, unsigned char _border)
{
int gzoom = fc->gzoom();
int currentx = offset(scwidth, _border);
QString text = toQString(data());
CList<textsegment>::iterator textstart = segs.begin();
int extraspace = 0;
bool just = (!m_bEop && textstart->style.getJustify() == m_AlignJustify);
int spaces = 0;
int spacesofar = 0;
int spacenumber = 0;
int nonspace = 0;
if (just)
{
for (int i = 0; i < len; i++)
{
if ((*this)[i] != ' ')
{
nonspace = i;
break;
}
}
#ifdef _WINDOWS
for (i = nonspace; i < len; i++)
#else
for (int i = nonspace; i < len; i++)
#endif
{
if ((*this)[i] == ' ')
{
spaces++;
}
}
if (spaces == 0)
{
just = false;
}
else
{
extraspace = (scwidth - 2*_border - rightMargin() - leftMargin() - width());
if (extraspace == 0) just = false;
}
}
CList<textsegment>::iterator textend = textstart;
do
{
textend++;
int end = (textend != segs.end()) ? textend->start : len;
CStyle currentstyle = textstart->style;
QFont f((currentstyle.isMono() && fc->hasCourier()) ? fc->fixedfontname() : fc->name(), fc->getsize(currentstyle), (currentstyle.isBold()) ? QFont::Bold : QFont::Normal, (currentstyle.isItalic()) );
// f.setUnderline(currentstyle.isUnderline());
-// if (currentstyle.isUnderline()) qDebug("UNDERLINE");
+// if (currentstyle.isUnderline()) odebug << "UNDERLINE" << oendl;
_p->setFont(f);
QString str = text.mid(textstart->start, end-textstart->start);
#if defined(OPIE) || !defined(USEQPE)
_p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/100));
#else
_p->setPen(QPen(QColor(currentstyle.Red(), currentstyle.Green(), currentstyle.Blue()), fc->getsize(currentstyle)/10));
#endif
int voffset = currentstyle.getVOffset()*fc->getsize(currentstyle)/2;
if (_bMono)
{
if (currentstyle.isUnderline())
{
_p->drawLine( currentx, _y+voffset, currentx + str.length()*_charWidth, _y+voffset);
}
if (currentstyle.isStrikethru())
{
int ascent = fc->ascent(currentstyle)/3;
_p->drawLine( currentx, _y-ascent+voffset, currentx + str.length()*_charWidth, _y-ascent+voffset);
}
for (int i = 0; i < str.length(); i++)
{
_p->drawText( currentx + i*_charWidth, _y+voffset, QString(str[i]));
}
currentx += str.length()*_charWidth;
}
else
{
if (currentstyle.isPicture())
{
int ht = (gzoom*currentstyle.getPicture()->height())/100;
int wt = (gzoom*currentstyle.getPicture()->width())/100;
int ascent = fc->ascent(currentstyle)/2;
int yoffset = ht/2 + ascent;
QPixmap pc;
if (gzoom != 100 && currentstyle.canScale())
{
QImage im = currentstyle.getPicture()->smoothScale(wt,ht);
pc.convertFromImage(im);
}
else
{
pc.convertFromImage(*currentstyle.getPicture());
}
_p->drawPixmap( currentx, _y-yoffset, pc );
currentx += wt;
}
else
{
if (currentstyle.isMono() && !fc->hasCourier())
{
int cw = (7*fc->getsize(currentstyle))/10;
int w = cw*(end-textstart->start);
if (currentstyle.isUnderline())
{
_p->drawLine( currentx, _y+voffset, currentx + w, _y+voffset);
}
if (currentstyle.isStrikethru())
{
int ascent = fc->ascent(currentstyle)/3;
_p->drawLine( currentx, _y-ascent+voffset, currentx + w, _y-ascent+voffset);
}
QString str = text.mid(textstart->start, end-textstart->start);
for (unsigned int i = 0; i < str.length(); i++)
{
#ifdef _WINDOWS
_p->drawText( currentx, _y+voffset, QString(str.at(i)));
#else
_p->drawText( currentx, _y+voffset, QString(str[i]));
#endif
currentx += cw;
}
}
else
{
QFontMetrics fm(f);
int w;
if (just)
{
int lastspace = -1;
int nsp = 0;
int cx = currentx;
while ((nsp = str.find(" ", lastspace+1)) >= 0)
{
if (nsp+textstart->start >= nonspace)
{
spacenumber++;
int nexttoadd = (extraspace*spacenumber+spaces/2)/spaces - spacesofar;
QString nstr = str.mid(lastspace+1, nsp-lastspace);
-// qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr);
+// odebug << "str:" << str << ": last:" << lastspace << " new:" << nsp << " nstr:" << nstr << ":" << oendl;
int lw = fm.width(nstr);
_p->drawText( cx, _y+voffset, nstr);
cx += lw+nexttoadd;
spacesofar += nexttoadd;
lastspace = nsp;
}
else
{
QString nstr = str.mid(lastspace+1, nsp-lastspace);
-// qDebug("str:%s: last:%d new:%d nstr:%s:", (const char*)str, lastspace, nsp, (const char*)nstr);
+// odebug << "str:" << str << ": last:" << lastspace << " new:" << nsp << " nstr:" << nstr << ":" << oendl;
int lw = fm.width(nstr);
_p->drawText( cx, _y+voffset, nstr);
cx += lw;
lastspace = nsp;
}
}
QString nstr = str.right(str.length()-1-lastspace);
_p->drawText( cx, _y+voffset, nstr);
cx += fm.width(nstr);
w = cx - currentx;
}
else
{
_p->drawText( currentx, _y+voffset, str);
w = fm.width(str);
}
if (currentstyle.isUnderline())
{
_p->drawLine( currentx, _y+voffset, currentx + w, _y+voffset);
}
if (currentstyle.isStrikethru())
{
int ascent = fc->ascent(currentstyle)/3;
_p->drawLine( currentx, _y-ascent+voffset, currentx + w, _y-ascent+voffset);
}
currentx += w;
}
}
}
textstart = textend;
}
while (textend != segs.end() && textstart->start < len);
}
CStyle CDrawBuffer::laststyle()
{
return segs.last().style;
}
linkType CDrawBuffer::getLinkType(int numchars, size_t& tgt)
{
int end = 0;
CStyle currentstyle;
CList<textsegment>::iterator textstart = segs.begin();
CList<textsegment>::iterator textend = textstart;
do
{
textend++;
end = (textend != segs.end()) ? textend->start : len;
currentstyle = textstart->style;
/*
- if (currentstyle.isPicture()) qDebug("Passed thru picture");
- if (currentstyle.getLink()) qDebug("Passed thru link");
- //qDebug("islink:%d - %d", numchars, end);
+ if (currentstyle.isPicture()) odebug << "Passed thru picture" << oendl;
+ if (currentstyle.getLink()) odebug << "Passed thru link" << oendl;
+ //odebug << "islink:" << numchars << " - " << end << "" << oendl;
*/
textstart = textend;
}
while (textend != segs.end() && end <= numchars);
-// if (currentstyle.isPicture()) qDebug("Clicked on picture");
+// if (currentstyle.isPicture()) odebug << "Clicked on picture" << oendl;
if (currentstyle.getPictureLink())
{
tgt = currentstyle.getPictureLinkData();
return ePicture;
}
if (currentstyle.getLink())
{
tgt = currentstyle.getData();
return eLink;
}
return eNone;
}
void CDrawBuffer::resize()
{
int gzoom = fc->gzoom();
m_maxstyle = m_ascent = m_descent = m_lineSpacing = m_lineExtraSpacing = 0;
for (CList<textsegment>::iterator iter = segs.begin(); iter != segs.end() && iter->start <= len; )
{
CList<textsegment>::iterator next = iter;
iter++;
int st = next->start;
if (st < 0) st = 0;
CStyle _style = next->style;
int linespacing, ascent, descent, extra;
ascent = fc->ascent(_style);
descent = fc->descent(_style);
linespacing = fc->lineSpacing(_style);
extra = linespacing - ascent - descent;
if (_style.isPicture() && _style.canScale())
{
descent = ((gzoom*_style.getPicture()->height())/100-ascent)/2;
ascent = ((gzoom*_style.getPicture()->height())/100+ascent)/2;
}
/*
else if (fc != NULL)
{
ascent = fc->ascent(_style);
descent = fc->descent(_style);
linespacing = fc->lineSpacing(_style);
extra = linespacing - ascent - descent;
}
*/
if (ascent > m_ascent) m_ascent = ascent;
if (descent > m_descent) m_descent = descent;
if (extra > m_lineExtraSpacing) m_lineExtraSpacing = extra;
m_lineSpacing = m_ascent+m_descent+m_lineExtraSpacing;
}
int lead = fc->getlead();
if (lead != 0)
{
int xt = (lead*m_lineSpacing+5)/10;
m_descent += xt;
m_lineSpacing += xt;
}
if (m_bSop)
{
int xt = ((segs.begin()->style.getExtraSpace()+fc->getextraspace())*fc->getsize(segs.begin()->style)+5)/10;
-// qDebug("ExtraSpace:%d", xt);
+// odebug << "ExtraSpace:" << xt << "" << oendl;
m_ascent += xt;
m_lineSpacing += xt;
}
}
diff --git a/noncore/apps/opie-reader/QTReader.cpp b/noncore/apps/opie-reader/QTReader.cpp
index d64abb4..b356ba5 100644
--- a/noncore/apps/opie-reader/QTReader.cpp
+++ b/noncore/apps/opie-reader/QTReader.cpp
@@ -1,1554 +1,1554 @@
/****************************************************************************
** $Id$
**
** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
**
** This file is part of an example program for Qt. This example
** program may be used, distributed and modified without limitation.
**
*****************************************************************************/
#include "QTReader.h"
#include "QTReaderApp.h"
#ifdef USEQPE
#include <qpe/qpeapplication.h>
#endif
#include <math.h>
#include <ctype.h>
#include <stdio.h> //for sprintf
#ifdef USEQPE
#include <qpe/config.h>
#include <qpe/applnk.h>
#include <qpe/global.h>
#include <qpe/qcopenvelope_qws.h>
#endif
#ifdef _UNICODE
const char *QTReader::fonts[] = { "unifont", "Courier", "Times", 0 };
#else
const char *QTReader::fonts[] = { "Helvetica", "Courier", "Times", 0 };
#endif
//const int QTReader::fontsizes[] = { 8, 10, 12, 14, 18, 24, 30, 40, 50, 60, 70, 80, 90, 100, 0 };
//const tchar *QTReader::fonts[] = { "unifont", "fixed", "micro", "smoothtimes", "Courier", "Times", 0 };
//const int QTReader::fontsizes[] = {10,16,17,22,0};
//const tchar *QTReader::fonts[] = { "verdana", "Courier", "Times", 0 };
//const int QTReader::fontsizes[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,0};
tchar QTReader::pluckernextpart[] = { 'C','l','i','c','k',' ','h','e','r','e',' ','f','o','r',' ','t','h','e',' ','n','e','x','t',' ','p','a','r','t',0 };
tchar QTReader::jplucknextpart[] = { 'N','e','x','t',' ','P','a','r','t',' ','>','>',0 };
//tchar QTReader::jplucknextpart[] = { 10,'#',10,'N','e','x','t',' ','P','a','r','t',' ','>','>',0 };
QTReader::QTReader( QWidget *parent, const char *name, WFlags f) :
QWidget(parent, name, f),
m_delay(100),
m_scrolldy1(0),
m_scrolldy2(0),
m_autoScroll(false),
//textarray(NULL),
//locnarray(NULL),
numlines(0),
m_fontname("unifont"),
m_fm(NULL),
mouseUpOn(true),
m_twotouch(true),
m_touchone(true),
bDoUpdates(false),
#ifdef _SCROLLPIPE
m_pipeout(NULL),
#endif
m_border(2)
{
m_overlap = 1;
setKeyCompression ( true );
// init();
}
/*
QTReader::QTReader( const QString& filename, QWidget *parent=0, const tchar *name=0, WFlags f = 0) :
QWidget(parent, name, f),
m_textfont(0),
m_textsize(1),
textarray(NULL),
numlines(0),
bstripcr(true),
bunindent(false),
brepara(false),
bdblspce(false),
btight(false),
bindenter(0),
m_fm(NULL)
{
init();
-// // qDebug("Load_file(1)");
+// // odebug << "Load_file(1)" << oendl;
load_file((const tchar*)filename);
}
*/
/*
void QTReader::mouseMoveEvent(QMouseEvent* _e)
{
mouseUpOn = !(_e->pos().x() == -1);
- qDebug("MouseMove:[%d, %d]", _e->pos().x(), _e->pos().y());
+ odebug << "MouseMove:[" << _e->pos().x() << ", " << _e->pos().y() << "]" << oendl;
}
*/
long QTReader::real_delay()
{
return ( 8976 + m_delay ) / ( m_linespacing * m_linespacing );
}
void QTReader::mousePressEvent( QMouseEvent* _e )
{
buffdoc.unsuspend();
if (_e->button() == RightButton)
{
-// qDebug("MousePress");
+// odebug << "MousePress" << oendl;
mouseUpOn = false;
if (m_swapmouse)
{
int lineno = 0;
int ht = textarray[0]->lineSpacing();
while ((ht < _e->y()) && (lineno < numlines))
{
ht += textarray[++lineno]->lineSpacing();
}
size_t startpos, startoffset, tgt;
getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt);
processmousewordevent(startpos, startoffset, _e, lineno);
}
else
processmousepositionevent(_e);
}
}
void QTReader::processmousepositionevent( QMouseEvent* _e )
{
if (buffdoc.hasnavigation())
{
if (_e->y() > (2*height())/3)
{
goDown();
}
else if (_e->y() < height()/3)
{
goUp();
}
else
{
if (_e->x() < width()/3)
{
goBack();
}
else if (_e->x() > (2*width())/3)
{
goForward();
}
else
{
goHome();
}
}
}
else
{
if (_e->y() > height()/2)
{
goDown();
}
else
{
goUp();
}
}
}
void QTReader::goHome()
{
if (buffdoc.hasnavigation())
{
size_t current=pagelocate();
size_t home=buffdoc.getHome();
if (current!=home)
{
buffdoc.saveposn(current);
locate(home);
}
}
}
void QTReader::goBack()
{
if (buffdoc.hasnavigation())
{
size_t target = pagelocate();
buffdoc.writeposn(target);
if (buffdoc.back(target))
{
locate(target);
}
}
}
void QTReader::goForward()
{
if (buffdoc.hasnavigation())
{
size_t target = pagelocate();
if (buffdoc.forward(target))
{
locate(target);
}
}
}
linkType QTReader::getcurrentpos(int x, int y, size_t& start, size_t& offset, size_t& tgt)
{
int lineno = 0;
int ht = textarray[0]->lineSpacing();
while ((ht < y) && (lineno < numlines))
{
ht += textarray[++lineno]->lineSpacing();
}
start = locnarray[lineno];
if (m_bMonoSpaced)
{
offset = (x - textarray[lineno]->offset(width(), m_border))/m_charWidth;
}
else
{
int i;
CDrawBuffer* t = textarray[lineno];
x = x - t->offset(width(), m_border);
for (i = t->length(); i >= 0 && t->width(i, true, width(), m_border) > x; i--);
offset = i;
}
return textarray[lineno]->getLinkType(offset, tgt);
}
void QTReader::suspend()
{
#ifdef OPIE
if (memcmp("/mnt/", m_lastfile.latin1(), 5) == 0) buffdoc.suspend();
#else
if (memcmp("/usr/mnt.rom/", m_lastfile.latin1(), 13) == 0) buffdoc.suspend();
#endif
}
void QTReader::setTwoTouch(bool _b)
{
setBackgroundColor( white );
m_twotouch = m_touchone = _b;
}
void QTReader::setContinuous(bool _b)
{
buffdoc.unsuspend();
buffdoc.setContinuous(m_continuousDocument = _b);
}
void QTReader::processmousewordevent(size_t startpos, size_t startoffset, QMouseEvent* _e, int lineno)
{
QString wrd;
if (m_twotouch)
{
if (m_touchone)
{
m_touchone = false;
m_startpos = startpos;
m_startoffset = startoffset;
setBackgroundColor( lightGray );
}
else
{
m_touchone = true;
setBackgroundColor( white );
size_t endpos, endoffset;
endpos = startpos;
endoffset = startoffset;
size_t currentpos = locate();
if (endpos >= m_startpos)
{
jumpto(m_startpos);
for (int i = 0; i < m_startoffset; i++)
{
getch();
}
if (m_startpos == endpos)
{
for (int i = m_startoffset; i <= endoffset; i++)
{
wrd += QChar(getch());
}
}
else
{
while (buffdoc.explocate() <= endpos)
{
wrd += QChar(getch());
}
for (int i = 0; i < endoffset; i++)
{
wrd += QChar(getch());
}
}
jumpto(currentpos);
}
}
}
else if (m_bMonoSpaced)
{
int chno = (_e->x()-textarray[lineno]->offset(width(), m_border))/m_charWidth;
if (chno < ustrlen(textarray[lineno]->data()))
{
wrd[0] = textarray[lineno]->data()[chno];
}
}
else
{
CDrawBuffer* t = textarray[lineno];
int first = 0;
int tgt = _e->x() - t->offset(width(), m_border);
while (1)
{
int i = first+1;
while (QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
if (t->width(i, true, width(), m_border) > tgt)
{
wrd = toQString(t->data()+first, i - first);
-// qDebug("Got %s", (const char *)wrd);
+// odebug << "Got " << (const char *)wrd << "" << oendl;
break;
}
while (!QChar((*t)[i]).isLetter() && (*t)[i] != 0) i++;
if ((*t)[i] == 0) break;
first = i;
}
}
if (!wrd.isEmpty())
{
-// qDebug("Selected:%s", (const char*)wrd);
+// odebug << "Selected:" << wrd << "" << oendl;
emit OnWordSelected(wrd, locnarray[lineno], (m_twotouch) ? wrd : toQString(textarray[lineno]->data()));
}
}
void QTReader::mouseReleaseEvent( QMouseEvent* _e )
{
buffdoc.unsuspend();
if (_e->button() == LeftButton)
{
if (mouseUpOn)
{
-// qDebug("MouseRelease");
+// odebug << "MouseRelease" << oendl;
if (_e->x() > width() - m_border)
{
locate(buffdoc.startSection()+((buffdoc.endSection()-buffdoc.startSection())*_e->y()+height()/2)/height());
return;
}
if (textarray[0] != NULL)
{
QString line;
// int lineno = _e->y()/m_linespacing;
int lineno = 0;
int ht = textarray[0]->lineSpacing();
while ((ht < _e->y()) && (lineno < numlines))
{
ht += textarray[++lineno]->lineSpacing();
}
size_t startpos, startoffset, tgt;
switch (getcurrentpos(_e->x(), _e->y(), startpos, startoffset, tgt))
{
case eLink:
{
size_t saveposn = pagelocate();
QString href;
linkType lt = buffdoc.hyperlink(tgt, href);
if (lt == eLink)
{
buffdoc.saveposn(saveposn);
fillbuffer();
update();
}
else
{
if (lt == ePicture)
{
QImage* pm = buffdoc.getPicture(tgt);
if (pm != NULL)
{
emit OnShowPicture(*pm);
delete pm;
}
}
else
{
// QString anchortext = textarray[lineno]->getanchortext(startoffset);
if (!href.isEmpty())
{
emit OnURLSelected(href);
}
}
locate(pagelocate());
}
return;
}
case ePicture:
{
-// qDebug("Picture:%x", tgt);
+// odebug << "Picture:" << tgt << "" << oendl;
QImage* pm = buffdoc.getPicture(tgt);
if (pm != NULL)
{
emit OnShowPicture(*pm);
delete pm;
}
else
{
locate(pagelocate());
}
return;
}
case eNone:
break;
default:
-// qDebug("Unknown linktype");
+// odebug << "Unknown linktype" << oendl;
return;
}
if (m_swapmouse)
processmousepositionevent(_e);
else
processmousewordevent(startpos, startoffset, _e, lineno);
}
}
else
{
mouseUpOn = true;
}
}
}
void QTReader::focusInEvent(QFocusEvent* e)
{
if (m_autoScroll) timer->start(real_delay(), false);
update();
}
void QTReader::focusOutEvent(QFocusEvent* e)
{
if (m_autoScroll)
{
timer->stop();
// m_scrolldy1 = m_scrolldy2 = 0;
}
}
#ifndef _WINDOWS
#include <unistd.h>
#endif
void QTReader::goDown()
{
if (m_bpagemode)
{
dopagedn();
}
else
{
lineDown();
}
}
void QTReader::goUp()
{
if (m_bpagemode)
{
dopageup();
}
else
{
lineUp();
}
}
void QTReader::NavUp()
{
buffdoc.unsuspend();
if (buffdoc.hasnavigation())
{
/*
size_t target = pagelocate();
if (buffdoc.back(target))
{
locate(target);
}
*/
locate(buffdoc.startSection());
}
else
{
goUp();
}
}
void QTReader::NavDown()
{
buffdoc.unsuspend();
if (buffdoc.hasnavigation())
{
/*
size_t target = pagelocate();
if (buffdoc.forward(target))
{
locate(target);
}
*/
dopageup(buffdoc.endSection());
}
else
{
goDown();
}
}
void QTReader::zoomin()
{
if (m_fontControl.increasesize())
{
bool sc = m_autoScroll;
setfont();
m_autoScroll = false;
locate(pagelocate());
update();
m_autoScroll = sc;
if (m_autoScroll) autoscroll();
}
}
void QTReader::zoomout()
{
if (m_fontControl.decreasesize())
{
bool sc = m_autoScroll;
m_autoScroll = false;
setfont();
locate(pagelocate());
update();
m_autoScroll = sc;
if (m_autoScroll) autoscroll();
}
}
void QTReader::reduceScroll()
{
if (m_delay < 59049)
{
m_delay = (3*m_delay)/2;
timer->changeInterval(real_delay());
}
else
{
m_delay = 59049;
}
}
void QTReader::increaseScroll()
{
if (m_delay > 1024)
{
m_delay = (2*m_delay)/3;
timer->changeInterval(real_delay());
}
else
{
m_delay = 1024;
}
}
void QTReader::keyPressEvent(QKeyEvent* e)
{
buffdoc.unsuspend();
((QTReaderApp*)parent()->parent())->handlekey(e);
// e->ignore();
return;
#ifdef _SCROLLPIPE
if (m_isPaused)
{
m_isPaused = false;
if (e->key() != Key_Space)
{
m_autoScroll = false;
if (m_pipeout != NULL)
{
pclose(m_pipeout);
m_pipeout = NULL;
}
((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
}
else
{
timer->start(real_delay(), false);
}
e->accept();
return;
}
#endif
/*
switch (e->key())
{
case Key_Down:
{
e->accept();
if (m_autoScroll)
{
if (m_delay < 59049)
{
m_delay = (3*m_delay)/2;
timer->changeInterval(real_delay());
}
else
{
m_delay = 59049;
}
}
else
{
goDown();
}
}
break;
case Key_Up:
{
e->accept();
if (m_autoScroll)
{
if (m_delay > 1024)
{
m_delay = (2*m_delay)/3;
timer->changeInterval(real_delay());
}
else
{
m_delay = 1024;
}
}
else
{
goUp();
}
}
break;
case Key_Right:
{
e->accept();
if (m_navkeys && buffdoc.hasnavigation())
{
size_t target = pagelocate();
if (buffdoc.forward(target))
{
locate(target);
}
}
else zoomin();
}
break;
case Key_Left:
{
e->accept();
if (m_navkeys && buffdoc.hasnavigation())
{
size_t target = pagelocate();
if (buffdoc.back(target))
{
locate(target);
}
}
else zoomout();
}
break;
default:
e->ignore();
}
*/
}
void QTReader::setautoscroll(bool _sc)
{
if (_sc == m_autoScroll) return;
if (m_autoScroll)
{
m_autoScroll = false;
#ifdef USEQPE
QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
#endif
#ifdef _SCROLLPIPE
if (m_pipeout != NULL)
{
pclose(m_pipeout);
m_pipeout = NULL;
}
#endif
}
else
{
CDrawBuffer* reusebuffer = textarray[numlines];
if (reusebuffer == NULL || reusebuffer->eof()) return;
m_autoScroll = true;
#ifdef _SCROLLPIPE
if (!m_pipetarget.isEmpty())
{
-// qDebug("Opening pipe to %s", (const char*)m_pipetarget);
+// odebug << "Opening pipe to " << m_pipetarget << "" << oendl;
m_pipeout = popen((const char*)m_pipetarget, "w");
m_isPaused = false;
}
#endif
autoscroll();
#ifdef USEQPE
QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Disable; // light is even not dimmed
#endif
}
}
bool QTReader::getline(CDrawBuffer *buff)
{
buffdoc.unsuspend();
if (m_bMonoSpaced)
{
return buffdoc.getline(buff ,width(), m_charWidth, m_border);
}
else
{
return buffdoc.getline(buff, width(), m_border);
}
}
void QTReader::doscroll()
{
if (!m_autoScroll)
{
timer->stop();
return;
}
// timer->changeInterval(real_delay());
QPainter p( this );
QBrush b( white);
bitBlt(this,0,0,this,0,1,width(),-1);
qDrawPlainRect(&p,0,height() - 2,width(),2,white,1,&b);
if (++m_scrolldy1 == textarray[0]->lineSpacing())
{
#ifdef _SCROLLPIPE
if (m_pipeout != NULL)
{
QString outstr = toQString(textarray[0]->data());
if (!outstr.isEmpty())
{
fprintf(m_pipeout, "%s\n", (const char*)outstr);
fflush(m_pipeout);
}
else if (m_pauseAfterEachPara)
{
m_isPaused = true;
timer->stop();
}
// write(m_pipeout, (const char*)outstr, outstr.length());
// write(m_pipeout, "\n", 1);
// fputc(10, m_pipeout);
}
#endif
CDrawBuffer* buff = textarray[0];
for (int i = 1; i <= numlines; i++)
{
textarray[i-1] = textarray[i];
locnarray[i-1] = locnarray[i];
}
textarray[numlines] = buff;
--numlines;
m_scrolldy1 = 0;
}
if (++m_scrolldy2 == textarray[numlines]->lineSpacing())
{
m_scrolldy2 = 0;
numlines++;
if (textarray[numlines] == NULL)
{
textarray[numlines] = new CDrawBuffer(&m_fontControl);
}
locnarray[numlines] = locate();
int ch = getline(textarray[numlines]);
textarray[numlines-1]->render(&p, height() - textarray[numlines-1]->descent() - 2, m_bMonoSpaced, m_charWidth, width(), m_border);
mylastpos = locate();
if (!ch)
{
m_autoScroll = false;
#ifdef _SCROLLPIPE
for (int i = 0; i < numlines; i++)
{
if (m_pipeout != NULL)
{
QString outstr = toQString(textarray[i]->data());
if (!outstr.isEmpty())
{
fprintf(m_pipeout, "%s\n", (const char*)outstr);
fflush(m_pipeout);
}
}
}
#endif
((QTReaderApp*)parent()->parent())->setScrollState(m_autoScroll);
#ifdef USEQPE
QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
#endif
}
emit OnRedraw();
}
}
void QTReader::autoscroll()
{
timer->start(real_delay(), false);
}
void QTReader::setfont()
{
// m_fontControl.Change
m_charWidth = (m_charpc*m_fontControl.currentsize())/100;
if (m_charWidth <= 0) m_charWidth = 1;
m_ascent = m_fontControl.ascent();
m_descent = m_fontControl.descent();
m_linespacing = m_fontControl.lineSpacing();
}
void QTReader::drawFonts( QPainter *p )
{
if (bDoUpdates)
{
-// qDebug("How refreshing...");
+// odebug << "How refreshing..." << oendl;
if (buffdoc.empty()) return;
setfont();
if (m_lastwidth != width())
{
-// qDebug("Not Optimised %d", m_lastwidth);
+// odebug << "Not Optimised " << m_lastwidth << "" << oendl;
m_lastwidth = width();
m_lastheight = height();
buffdoc.setwidth(m_lastwidth-2*m_border);
locate(pagelocate());
-// qDebug("Not Optimised %d", m_lastwidth);
+// odebug << "Not Optimised " << m_lastwidth << "" << oendl;
}
else
{
int newht = height();
if (m_lastheight > newht)
{
-// qDebug("Optimised < %d %d %d", numlines, m_lastheight, newht);
+// odebug << "Optimised < " << numlines << " " << m_lastheight << " " << newht << "" << oendl;
int ypos = 0;
for (int i = 0; i < numlines; i++)
{
if ((ypos += textarray[i]->lineSpacing()) > newht)
{
numlines = i;
jumpto(mylastpos = locnarray[i+1]);
break;
}
}
-// qDebug("Optimised < %d", numlines);
+// odebug << "Optimised < " << numlines << "" << oendl;
m_lastheight = newht;
}
else if (m_lastheight < newht)
{
-// qDebug("Optimised > %d", numlines);
+// odebug << "Optimised > " << numlines << "" << oendl;
int ypos = 0;
for (int i = 0; i <= numlines; i++)
{
ypos += textarray[i]->lineSpacing();
}
fillbuffer(numlines+1, ypos, newht);
-// qDebug("Optimised > %d", numlines);
+// odebug << "Optimised > " << numlines << "" << oendl;
}
if (numlines > 0)
{
int ypos = textarray[0]->ascent();
textarray[0]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_border);
// int last = (m_showlast) ? numlines : numlines-1;
// for (int i = 1; i <= last; i++)
for (int i = 1; i < numlines; i++)
{
// ypos += (textarray[i-1]->lineSpacing() + textarray[i]->lineSpacing())/2;
ypos += (textarray[i-1]->descent() + textarray[i]->ascent())+
(textarray[i-1]->lineExtraSpacing() + textarray[i]->lineExtraSpacing())/2;
textarray[i]->render( p, ypos, m_bMonoSpaced, m_charWidth, width(), m_border);
}
// mylastpos = locate();
}
}
m_scrolldy1 = m_scrolldy2 = m_scrollpart;
if (m_border > 5 && !buffdoc.empty())
{
p->fillRect(width()-2, 0, 2, height(), cyan);
int sectionsize = (buffdoc.endSection()-buffdoc.startSection());
int mid = (height()*(locnarray[numlines]+locnarray[0]-2*buffdoc.startSection())+sectionsize)/(2*sectionsize);
p->fillRect(width()-2, mid-5, 2, 10, yellow);
p->fillRect(width()-2, (height()*(locnarray[0]-buffdoc.startSection())+sectionsize/2)/sectionsize, 2, ((locnarray[numlines]-locnarray[0])*height()+sectionsize/2)/sectionsize, magenta);
}
emit OnRedraw();
}
/*
else
{
- qDebug("Not so refreshing...");
+ odebug << "Not so refreshing..." << oendl;
}
*/
}
QString QTReader::firstword()
{
if (m_bMonoSpaced)
{
return toQString(textarray[0]->data());
}
else
{
int start, end, len, j;
for (j = 0; j < numlines; j++)
{
len = textarray[j]->length();
for (start = 0; start < len && !isalpha((*textarray[j])[start]); start++);
if (start < len) break;
}
if (j < numlines)
{
QString ret = "";
for (end = start; end < len && isalpha((*textarray[j])[end]); end++)
ret += (*textarray[j])[end];
if (ret.isEmpty()) ret = "Current position";
return ret;
}
else
return "Current position";
}
}
//
// Construct the QTReader with buttons.
//
bool QTReader::ChangeFont(int tgt)
{
return m_fontControl.ChangeFont(m_fontname, tgt);
}
void QTReader::init()
{
// m_showlast = true;
// setCaption( "Qt Draw Demo Application" );
buffdoc.unsuspend();
setBackgroundColor( white );
// QPainter p(this);
// p.setBackgroundMode( Qt::OpaqueMode );
buffdoc.setfilter(getfilter());
ChangeFont(m_textsize);
setFocusPolicy(QWidget::StrongFocus);
// resize( 240, 320 );
//setFocus();
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(doscroll()));
// QMessageBox::information(this, "init", m_lastfile, 1);
setfont();
/*
if (!m_lastfile.isEmpty())
{
m_string = DocLnk(m_lastfile).name();
load_file(m_lastfile);
}
*/
}
//
// Clean up
//
QTReader::~QTReader()
{
#ifdef USEQPE
if (m_autoScroll)
{
QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable;
}
#endif
#ifdef _SCROLLPIPE
if (m_pipeout != NULL)
{
fclose(m_pipeout);
}
#endif
}
//
// Calls the drawing function as specified by the radio buttons.
//
void QTReader::drawIt( QPainter *p )
{
drawFonts(p);
}
//
// Called when the print button is clicked.
//
/*
void QTReader::printIt()
{
#ifndef QT_NO_PRINTER
if ( printer->setup( this ) ) {
QPainter paint;
if ( !paint.begin( printer ) )
return;
drawIt( &paint );
}
#endif
}
*/
//
// Called when the widget needs to be updated.
//
void QTReader::paintEvent( QPaintEvent * )
{
QPainter paint( this );
drawIt( &paint );
}
//
// Called when the widget has been resized.
// Moves the button group to the upper right corner
// of the widget.
/*
void QTReader::resizeEvent( QResizeEvent * )
{
-// // qDebug("resize:(%u,%u)", width(), height());
+// // odebug << "resize:(" << width() << "," << height() << ")" << oendl;
// bgroup->move( width()-bgroup->width(), 0 );
}
*/
//
// Create and display our widget.
//
/*
int main( int argc, tchar **argv )
{
QApplication app( argc, argv );
QTReader draw;
app.setMainWidget( &draw );
draw.setCaption("Qt Example - Drawdemo");
draw.show();
return app.exec();
}
*/
bool QTReader::locate(unsigned long n) {
//printf("Locate\n");
buffdoc.unsuspend();
buffdoc.locate(n);
-// // qDebug("&buffdoc.located");
+// // odebug << "&buffdoc.located" << oendl;
fillbuffer();
-// // qDebug("&Buffer filled");
+// // odebug << "&Buffer filled" << oendl;
update();
-// // qDebug("&Located");
+// // odebug << "&Located" << oendl;
return true;
}
unsigned int QTReader::screenlines()
{
// int linespacing = (tight) ? m_ascent : m_ascent+m_descent;
// return (height()-m_descent)/(m_linespacing);
return (height()-2)/(m_linespacing);
};
bool QTReader::fillbuffer(int reuse, int ht, int newht)
{
buffdoc.unsuspend();
if (buffdoc.empty()) return false;
if (newht < 0)
m_lastheight = height();
else
m_lastheight = newht;
int ch;
bool ret = false;
unsigned int oldpagepos = locnarray[reuse];
int lastypos = ht, ypos = ht;
numlines = reuse;
while (ypos < m_lastheight || numlines < 2)
{
lastypos = ypos;
if (textarray[numlines] == NULL)
{
textarray[numlines] = new CDrawBuffer(&m_fontControl);
}
locnarray[numlines] = locate();
int ch = getline(textarray[numlines]);
ypos += textarray[numlines]->lineSpacing();
numlines++;
if (!ch)
{
if (numlines - reuse == 1 /*&& locnarray[numlines] == buffdoc.locate()*/)
{
locate(oldpagepos);
return false;
}
else
{
--numlines;
mylastpos = locate();
return true;
}
}
}
--numlines;
mylastpos = locate();
m_scrolldy1 = m_scrolldy2 = m_scrollpart = m_lastheight - lastypos;
return true;
}
void QTReader::dopagedn()
{
-// qDebug("HEIGHT(2):%d", m_lastheight);
+// odebug << "HEIGHT(2):" << m_lastheight << "" << oendl;
buffdoc.unsuspend();
int skip = 0, ypos = 0;
if (locate() != mylastpos)
{
-//// qDebug("Jumping to %u", mylastpos);
+//// odebug << "Jumping to " << mylastpos << "" << oendl;
jumpto(mylastpos);
}
CDrawBuffer* reusebuffer = textarray[numlines];
if (reusebuffer != NULL && reusebuffer->eof()) return;
if (reusebuffer != NULL)
{
for (int i = 0; i <= m_overlap; i++)
{
int offset = numlines - m_overlap + i;
reusebuffer = textarray[offset];
size_t reuselocn = locnarray[offset];
textarray[offset] = textarray[i];
textarray[i] = reusebuffer;
// reusebuffer->empty();
locnarray[offset] = locnarray[i];
locnarray[i] = reuselocn;
ypos += textarray[i]->lineSpacing();
skip++;
}
}
if (fillbuffer(skip, ypos))
{
update();
}
}
void QTReader::dopageup()
{
buffdoc.unsuspend();
dopageup(locnarray[(m_overlap < numlines) ? m_overlap : numlines/2]);
}
bool QTReader::synch(size_t start, size_t end)
{
jumpto(start);
while (start++ < end)
{
tchar ch = getch();
if (ch == 10) return true;
if (ch == UEOF) return false;
}
return false;
}
void QTReader::dopageup(unsigned int target)
{
buffdoc.unsuspend();
CBufferFace<CDrawBuffer*> buff;
CBufferFace<size_t> loc;
size_t delta, guess = 2*(locate()-pagelocate()), lastdelta = 0;
bool ch = true;
int nbfl, ypos = 0;
if (guess < 128) guess = 128;
while (1)
{
ch = true;
if (target < guess)
{
delta = 0; // 0 is a flag to say don't guess any more
jumpto( (m_continuousDocument) ? 0 : buffdoc.startSection() );
}
else if (!m_continuousDocument && (target - guess < buffdoc.startSection()))
{
delta = 0; // 0 is a flag to say don't guess any more
jumpto(buffdoc.startSection());
}
else
{
delta = guess;
if (!synch(target-delta, target-lastdelta))
{
lastdelta = delta;
if (guess < 4000)
{
guess <<= 1;
continue;
}
else
{
jumpto(target-delta);
}
}
}
nbfl = 0;
ypos = 0;
while (locate() < target)
{
if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl);
loc[nbfl] = locate();
ch = getline(buff[nbfl]);
ypos += buff[nbfl]->lineSpacing();
nbfl++;
if (!ch) break;
}
if (guess < 4000 && ypos < height() && (delta != 0))
{
for (int i = 0; i < nbfl; i++)
{
delete buff[i];
buff[i] = NULL;
}
guess <<= 1;
continue;
}
break;
}
if (ch)
{
if (buff[nbfl] == NULL) buff[nbfl] = new CDrawBuffer(&m_fontControl);
loc[nbfl] = locate();
int ch = getline(buff[nbfl]);
nbfl++;
}
/*
ypos = 0;
numlines = 0;
while (ypos < height() && numlines <= nbfl-1)
{
ypos += buff[nbfl - numlines - 1]->lineSpacing();
numlines++;
}
--numlines;
*/
ypos = 0;
numlines = 0;
while (ypos < height() && numlines+2 <= nbfl)
{
ypos += buff[nbfl - numlines - 2]->lineSpacing();
numlines++;
}
if (numlines > 0) --numlines;
if (numlines == 0 && nbfl > 1) numlines = 1;
int offset = nbfl-1;
offset -= numlines;
ypos = 0;
for (int i = 0; i <= numlines; i++)
{
delete textarray[i];
textarray[i] = buff[offset+i];
locnarray[i] = loc[offset + i];
ypos += textarray[i]->lineSpacing();
}
#ifdef _WINDOWS
for (i = 0; i < nbfl - numlines - 1; i++)
#else
for (int i = 0; i < nbfl - numlines - 1; i++)
#endif
{
delete buff[i];
}
while (ypos < height())
{
numlines++;
locnarray[numlines] = locate();
if (textarray[numlines] == NULL) textarray[numlines] = new CDrawBuffer(&m_fontControl);
if (!getline(textarray[numlines])) break;
ypos += textarray[numlines]->lineSpacing();
}
mylastpos = locate();
update();
}
bool QTReader::load_file(const char *newfile, unsigned int _lcn)
{
// QMessageBox::information(this, "Name", name, 1);
// QMessageBox::information(this, "load_file", newfile, 1);
bool bRC = false;
unsigned int lcn = _lcn;
if (m_lastfile == newfile)
{
lcn = m_lastposn;
}
// QMessageBox::information(0, "Opening...", newfile);
m_lastwidth = width();
m_lastheight = height();
if (buffdoc.openfile(this,newfile) == 0)
{
m_lastfile = newfile;
buffdoc.setwidth(m_lastwidth-2*m_border);
bRC = true;
buffdoc.setContinuous(m_continuousDocument);
-// // qDebug("buffdoc.openfile done");
+// // odebug << "buffdoc.openfile done" << oendl;
locate(lcn);
-// // qDebug("buffdoc.locate done");
+// // odebug << "buffdoc.locate done" << oendl;
}
setfilter(getfilter());
update();
-// // qDebug("Updated");
+// // odebug << "Updated" << oendl;
return bRC;
}
void QTReader::lineDown()
{
int ypos = 0;
int offset = numlines;
for (int i = 0; i <= numlines; i++)
{
if ((ypos += textarray[numlines-i]->lineSpacing()) > height())
{
offset = i-1;
break;
}
}
offset = numlines - offset;
#ifdef _WINDOWS
for (i = offset; i <= numlines; i++)
#else
for (int i = offset; i <= numlines; i++)
#endif
{
CDrawBuffer* buff = textarray[i-offset];
textarray[i-offset] = textarray[i];
locnarray[i-offset] = locnarray[i];
textarray[i] = buff;
}
numlines = numlines - offset + 1;
locnarray[numlines] = locate();
if (textarray[numlines] == NULL)
{
textarray[numlines] = new CDrawBuffer(&m_fontControl);
}
getline(textarray[numlines]);
mylastpos = locate();
update();
}
/*
void QTReader::lineUp()
{
CBuffer** buff = textarray;
unsigned int *loc = new unsigned int[numlines];
int cbptr = 0;
if (locate() != mylastpos) jumpto(mylastpos);
unsigned int target = locnarray[numlines-1];
if (buffdoc.hasrandomaccess())
{
unsigned int delta = locate()-pagelocate();
if (delta < 64) delta = 64;
do
{
delta <<= 1;
if (delta >= target)
{
delta = target;
jumpto(0);
for (int i = 0; i < numlines; i++)
{
loc[i] = locate();
getline(buff[i]);
}
break;
}
jumpto(target-delta);
do
{
buffdoc.getline(buff[0],width());
#ifdef WS
//printf("Trying:%s\n",buff[0]);
#endif
if (locate() > target) continue;
}
while (!buffdoc.iseol());
for (int i = 0; i < numlines; i++)
{
loc[i] = locate();
buffdoc.getline(buff[i],width());
#ifdef WS
//printf("Filling:%s\n",buff[i]);
#endif
}
}
while (locate() >= target && delta < 4096);
#ifdef WS
//printf("Delta:%u\n",delta);
#endif
}
else
{
jumpto(0);
for (int i = 0; i < numlines; i++)
{
loc[i] = locate();
buffdoc.getline(buff[i],width());
}
}
cbptr = 0;
while (locate() < target)
{
loc[cbptr] = locate();
buffdoc.getline(buff[cbptr], width());
#ifdef WS
//printf("Adding:%s\n",buff[cbptr]->data());
#endif
cbptr = (cbptr+1) % numlines;
}
pagepos = loc[cbptr];
textarray = new CBuffer*[numlines];
for (int i = 0; i < numlines; i++)
{
int j = (cbptr+i)%numlines;
textarray[i] = buff[j];
locnarray[i] = loc[j];
}
delete [] buff;
delete [] loc;
mylastpos = locate();
update();
}
*/
void QTReader::lineUp()
{
buffdoc.unsuspend();
CDrawBuffer* buff = textarray[numlines];
unsigned int loc;
unsigned int end = locnarray[numlines];
int cbptr = 0;
if (locate() != mylastpos) jumpto(mylastpos);
unsigned int target = locnarray[0];
if (target == 0) return;
if (!m_continuousDocument && (target == buffdoc.startSection())) return;
if (buffdoc.hasrandomaccess())
{
unsigned int delta = locate()-pagelocate();
if (delta < 64) delta = 64;
do
{
delta <<= 1;
if (delta >= target)
{
delta = target;
jumpto(0);
loc = locate();
getline(buff);
break;
}
else if (!m_continuousDocument && (target - delta < buffdoc.startSection()))
{
delta = target-buffdoc.startSection();
jumpto(buffdoc.startSection());
loc = locate();
getline(buff);
break;
}
jumpto(target-delta);
do
{
getline(buff);
#ifdef WS
//printf("Trying:%s\n",buff[0]);
#endif
if (locate() > target) continue;
}
while (!buffdoc.iseol());
loc = locate();
getline(buff);
}
while (locate() >= target && delta < 4096);
}
else
{
jumpto(0);
loc = locate();
getline(buff);
}
cbptr = 0;
while (locate() < target)
{
loc = locate();
getline(buff);
}
for (int i = numlines; i > 0; i--)
{
textarray[i] = textarray[i-1];
locnarray[i] = locnarray[i-1];
}
textarray[0] = buff;
locnarray[0] = loc;
int start = numlines;
int ypos = 0;
#ifdef _WINDOWS
for (i = 0; i <= numlines; i++)
#else
for (int i = 0; i <= numlines; i++)
#endif
{
ypos += textarray[i]->lineSpacing();
if (ypos > height())
{
start = i;
ypos -= textarray[i]->lineSpacing();
break;
}
}
jumpto(locnarray[start]);
fillbuffer(start, ypos);
update();
}
bool QTReader::empty()
{
return buffdoc.empty();
}
MarkupType QTReader::PreferredMarkup()
{
MarkupType m = buffdoc.PreferredMarkup();
if (m == cTEXT)
{
int ext = m_lastfile.findRev('.');
if (ext >= 0)
{
QString ft = m_lastfile.right(m_lastfile.length()-ext-1).upper();
if (ft.left(3) == "HTM")
{
m = cHTML;
}
}
}
return m;
}
diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp
index b072854..f18cb59 100644
--- a/noncore/apps/opie-reader/QTReaderApp.cpp
+++ b/noncore/apps/opie-reader/QTReaderApp.cpp
@@ -1,4221 +1,4222 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. Allrights reserved.
**
** This file is part of Qt Palmtop Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
+
#include "useqpe.h"
-#include <qregexp.h>
-#include <qclipboard.h>
-#include <qwidgetstack.h>
+#include "QTReader.h"
+#include "GraphicWin.h"
+#include "Bkmks.h"
+#include "cbkmkselector.h"
+#include "infowin.h"
+#include "ToolbarPrefs.h"
+#include "Prefs.h"
+#include "CAnnoEdit.h"
+#include "QFloatBar.h"
+#include "FixedFont.h"
+#include "URLDialog.h"
+#include "QTReaderApp.h"
+#include "CDrawBuffer.h"
+#include "Filedata.h"
+#include "opie.h"
+#include "names.h"
+#include "CEncoding_tables.h"
+#include "CloseDialog.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
+#ifdef USEQPE
+#include <qpe/menubutton.h>
+#include <qpe/fontdatabase.h>
+#include <qpe/global.h>
+#include <qpe/applnk.h>
+#include <qpe/config.h>
+#include <qpe/qcopenvelope_qws.h>
+#endif
+
+/* QT */
#ifdef USEQPE
#include <qmenubar.h>
#include <qtoolbar.h>
#endif
+#include <qregexp.h>
+#include <qclipboard.h>
+#include <qwidgetstack.h>
#include <qmenubar.h>
#include <qtoolbar.h>
-#ifdef USEQPE
-#include <qpe/menubutton.h>
-#include <qpe/fontdatabase.h>
-#endif
#include <qcombobox.h>
#include <qpopupmenu.h>
#include <qaction.h>
#include <qapplication.h>
#include <qlineedit.h>
#include <qtoolbutton.h>
#include <qspinbox.h>
#include <qobjectlist.h>
-#ifdef USEQPE
-#include <qpe/global.h>
-#include <qpe/applnk.h>
-#endif
#include <qfileinfo.h>
-#include <stdlib.h> //getenv
#include <qprogressbar.h>
-#ifdef USEQPE
-#include <qpe/config.h>
-#endif
#include <qbuttongroup.h>
#include <qradiobutton.h>
-#ifdef USEQPE
-#include <qpe/qcopenvelope_qws.h>
-#endif
-#include "QTReader.h"
-#include "GraphicWin.h"
-#include "Bkmks.h"
-#include "cbkmkselector.h"
-#include "infowin.h"
-#include "ToolbarPrefs.h"
-#include "Prefs.h"
-#include "CAnnoEdit.h"
-#include "QFloatBar.h"
-#include "FixedFont.h"
-#include "URLDialog.h"
-//#include <qpe/fontdatabase.h>
+
+/* STD */
+#include <stdlib.h> //getenv
+
#ifdef USEQPE
#include <qpe/resource.h>
#include <qpe/qpeapplication.h>
#include "fileBrowser.h"
#else
#include "qfiledialog.h"
#endif
-#include "QTReaderApp.h"
-#include "CDrawBuffer.h"
-#include "Filedata.h"
-#include "opie.h"
-#include "names.h"
-#include "CEncoding_tables.h"
-#include "CloseDialog.h"
-
bool CheckVersion(int&, int&, char&);
#ifdef _WINDOWS
#define PICDIR "c:\\uqtreader\\pics\\"
#else
#ifdef USEQPE
#define PICDIR "opie-reader/"
#else
#define PICDIR "/home/tim/uqtreader/pics/"
#endif
#endif
unsigned long QTReaderApp::m_uid = 0;
void QTReaderApp::setScrollState(bool _b) { m_scrollButton->setOn(_b); }
#ifdef USEQPE
#define geticon(iconname) Resource::loadPixmap( iconname )
#define getmyicon(iconname) Resource::loadPixmap( PICDIR iconname )
#else
#define geticon(iconname) QPixmap(PICDIR iconname ".png")
#define getmyicon(iconname) geticon(iconname)
//#define geticon(iconname) QIconSet( QPixmap(PICDIR iconname) )
#endif
#ifndef _WINDOWS
#include <unistd.h>
#endif
#include <stddef.h>
#ifndef _WINDOWS
#include <dirent.h>
#endif
void QTReaderApp::listBkmkFiles()
{
bkmkselector->clear();
bkmkselector->setText("Cancel");
#ifndef USEQPE
int cnt = 0;
QDir d = QDir::home(); // "/"
if ( !d.cd(APPDIR) ) { // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "\" directory" << oendl;
d = QDir::home();
d.mkdir(APPDIR);
d.cd(APPDIR);
}
d.setFilter( QDir::Files | QDir::NoSymLinks );
// d.setSorting( QDir::Size | QDir::Reversed );
const QFileInfoList *list = d.entryInfoList();
QFileInfoListIterator it( *list ); // create list iterator
QFileInfo *fi; // pointer for traversing
while ( (fi=it.current()) ) { // for each file...
bkmkselector->insertItem(fi->fileName());
cnt++;
- //qDebug( "%10li %s", fi->size(), fi->fileName().data() );
+ //odebug << "" << fi->size() << " " << fi->fileName().data() << "" << oendl;
++it; // goto next list element
}
#else /* USEQPE */
int cnt = 0;
DIR *d;
d = opendir((const char *)Global::applicationFileName(APPDIR,""));
while(1)
{
struct dirent* de;
struct stat buf;
de = readdir(d);
if (de == NULL) break;
if (lstat((const char *)Global::applicationFileName(APPDIR,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode))
{
bkmkselector->insertItem(de->d_name);
cnt++;
}
}
closedir(d);
#endif
if (cnt > 0)
{
//tjw menu->hide();
editorStack->raiseWidget( bkmkselector );
hidetoolbars();
m_nBkmkAction = cRmBkmkFile;
}
else
QMessageBox::information(this, PROGNAME, "No bookmark files");
}
void QTReaderApp::hidetoolbars()
{
menubar->hide();
if (fileBar != NULL) fileBar->hide();
if (viewBar != NULL) viewBar->hide();
if (navBar != NULL) navBar->hide();
if (markBar != NULL) markBar->hide();
if (m_fontVisible) m_fontBar->hide();
if (regVisible)
{
#ifdef USEQPE
Global::hideInputMethod();
#endif
regBar->hide();
}
if (searchVisible)
{
#ifdef USEQPE
Global::hideInputMethod();
#endif
searchBar->hide();
}
}
QTReaderApp::QTReaderApp( QWidget *parent, const char *name, WFlags f )
: QMainWindow( parent, name, f ), bFromDocView( FALSE ), m_dontSave(false),
fileBar(NULL), navBar(NULL), viewBar(NULL), markBar(NULL)
{
m_url_clipboard = false;
m_url_localfile = false;
m_url_globalfile = false;
ftime(&m_lastkeytime);
-//// qDebug("Application directory = %s", (const tchar *)QPEApplication::documentDir());
-//// qDebug("Application directory = %s", (const tchar *)Global::applicationFileName("uqtreader","bkmks.xml"));
+//// odebug << "Application directory = " << (const tchar *)QPEApplication::documentDir() << "" << oendl;
+//// odebug << "Application directory = " << (const tchar *)Global::applicationFileName("uqtreader" << "" << oendl;
m_bcloseDisabled = true;
m_disableesckey = false;
pBkmklist = NULL;
pOpenlist = NULL;
// doc = 0;
m_fBkmksChanged = false;
QString lang = getenv( "LANG" );
QString rot = getenv( "QWS_DISPLAY" );
/*
int m_rot = 0;
if (rot.contains("Rot90"))
{
m_rot = 90;
}
else if (rot.contains("Rot180"))
{
m_rot = 180;
}
else if (rot.contains("Rot270"))
{
m_rot = 270;
}
-// qDebug("Initial Rotation(%d):%s", m_rot, (const char*)rot);
+// odebug << "Initial Rotation(" << m_rot << "):" << rot << "" << oendl;
*/
m_autogenstr = "^ *[A-Z].*[a-z] *$";
#ifdef USEQPE
setIcon( Resource::loadPixmap( PICDIR "uqtreader") );
#else
setIcon( QPixmap (PICDIR "uqtreader.png") );
#endif /* USEQPE */
// QToolBar *bar = new QToolBar( this );
// menubar = new QToolBar( this );
#ifdef USEQPE
Config config( APPDIR );
#else
QDir d = QDir::home(); // "/"
if ( !d.cd(APPDIR) ) { // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "\" directory" << oendl;
d = QDir::home();
d.mkdir(APPDIR);
d.cd(APPDIR);
}
QFileInfo fi(d, INIFILE);
-// qDebug("Path:%s", (const char*)fi.absFilePath());
+// odebug << "Path:" << fi.absFilePath() << "" << oendl;
Config config(fi.absFilePath());
#endif
config.setGroup("Toolbar");
m_tbmovesave = m_tbmove = config.readBoolEntry("Movable", false);
m_tbpolsave = m_tbpol = (ToolbarPolicy)config.readNumEntry("Policy", 1);
m_tbposition = (ToolBarDock)config.readNumEntry("Position", 2);
menubar = new QToolBar("Menus", this, m_tbposition);
// fileBar = new QToolBar("File", this);
// QToolBar* viewBar = new QToolBar("File", this);
// QToolBar* navBar = new QToolBar("File", this);
// QToolBar* markBar = new QToolBar("File", this);
#ifdef USEQPE
mb = new QMenuBar( menubar );
#else
mb = new QMenuBar( menubar );
#endif
//#ifdef USEQPE
QPopupMenu* tmp = new QPopupMenu(mb);
mb->insertItem( geticon( "AppsIcon" ), tmp );
//#else
// QMenuBar* tmp = mb;
//#endif
QPopupMenu *file = new QPopupMenu( mb );
tmp->insertItem( tr( "File" ), file );
QPopupMenu *navigation = new QPopupMenu(mb);
tmp->insertItem( tr( "Navigation" ), navigation );
QPopupMenu *view = new QPopupMenu( mb );
tmp->insertItem( tr( "View" ), view );
QPopupMenu *marks = new QPopupMenu( this );
tmp->insertItem( tr( "Marks" ), marks );
QPopupMenu *settings = new QPopupMenu( this );
tmp->insertItem( tr( "Settings" ), settings );
// addToolBar(menubar, "Menus",QMainWindow::Top);
// addToolBar(fileBar, "Toolbar",QMainWindow::Top);
// QPopupMenu *edit = new QPopupMenu( this );
/*
QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
a->addTo( bar );
a->addTo( file );
*/
editorStack = new QWidgetStack( this );
setCentralWidget( editorStack );
searchVisible = FALSE;
regVisible = FALSE;
m_fontVisible = false;
m_annoWin = new CAnnoEdit(editorStack);
editorStack->addWidget(m_annoWin, get_unique_id());
connect( m_annoWin, SIGNAL( finished(const QString&,const QString&) ), this, SLOT( addAnno(const QString&,const QString&) ) );
connect( m_annoWin, SIGNAL( cancelled() ), this, SLOT( infoClose() ) );
m_infoWin = new infowin(editorStack);
editorStack->addWidget(m_infoWin, get_unique_id());
connect( m_infoWin, SIGNAL( Close() ), this, SLOT( infoClose() ) );
m_graphicwin = new GraphicWin(editorStack);
editorStack->addWidget(m_graphicwin, get_unique_id());
connect( m_graphicwin, SIGNAL( Closed() ), this, SLOT( infoClose() ) );
// bkmkselector = new QListBox(editorStack, "Bookmarks");
bkmkselector = new CBkmkSelector(editorStack, "Bookmarks");
// connect(bkmkselector, SIGNAL( selected(const QString&) ), this, SLOT( gotobkmk(const QString&) ) );
connect(bkmkselector, SIGNAL( selected(int) ), this, SLOT( gotobkmk(int) ) );
connect(bkmkselector, SIGNAL( cancelled() ), this, SLOT( cancelbkmk() ) );
editorStack->addWidget( bkmkselector, get_unique_id() );
/*
importSelector = new FileSelector( "*", editorStack, "importselector", false );
connect( importSelector, SIGNAL( fileSelected(const DocLnk&) ), this, SLOT( importFile(const DocLnk&) ) );
editorStack->addWidget( importSelector, get_unique_id() );
// don't need the close visible, it is redundant...
importSelector->setCloseVisible( FALSE );
*/
-// qDebug("Reading file list");
+// odebug << "Reading file list" << oendl;
readfilelist();
reader = new QTReader( editorStack );
reader->bDoUpdates = false;
#ifdef USEQPE
((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold);
#endif
-// qDebug("Reading config");
+// odebug << "Reading config" << oendl;
// Config config( APPDIR );
config.setGroup( "View" );
m_debounce = config.readNumEntry("Debounce", 0);
#ifdef USEQPE
m_bFloatingDialog = config.readBoolEntry("FloatDialogs", false);
#else
m_bFloatingDialog = config.readBoolEntry("FloatDialogs", true);
#endif
reader->bstripcr = config.readBoolEntry( "StripCr", true );
reader->bfulljust = config.readBoolEntry( "FullJust", false );
reader->setextraspace(config.readNumEntry( "ExtraSpace", 0 ));
reader->setlead(config.readNumEntry( "ExtraLead", 0 ));
reader->btextfmt = config.readBoolEntry( "TextFmt", false );
reader->bautofmt = config.readBoolEntry( "AutoFmt", true );
reader->bstriphtml = config.readBoolEntry( "StripHtml", false );
reader->bpeanut = config.readBoolEntry( "Peanut", false );
reader->bdehyphen = config.readBoolEntry( "Dehyphen", false );
reader->bdepluck = config.readBoolEntry( "Depluck", false );
reader->bdejpluck = config.readBoolEntry( "Dejpluck", false );
reader->bonespace = config.readBoolEntry( "OneSpace", false );
reader->bunindent = config.readBoolEntry( "Unindent", false );
reader->brepara = config.readBoolEntry( "Repara", false );
reader->bdblspce = config.readBoolEntry( "DoubleSpace", false );
reader->bindenter = config.readNumEntry( "Indent", 0 );
reader->m_textsize = config.readNumEntry( "FontSize", 12 );
reader->m_delay = config.readNumEntry( "ScrollDelay", 5184);
reader->m_lastfile = config.readEntry( "LastFile", QString::null );
reader->m_lastposn = config.readNumEntry( "LastPosn", 0 );
reader->m_bpagemode = config.readBoolEntry( "PageMode", true );
reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false);
reader->m_swapmouse = config.readBoolEntry( "SwapMouse", false);
reader->m_fontname = config.readEntry( "Fontname", "helvetica" );
reader->m_encd = config.readNumEntry( "Encoding", 0 );
reader->m_charpc = config.readNumEntry( "CharSpacing", 100 );
reader->m_overlap = config.readNumEntry( "Overlap", 0 );
reader->m_border = config.readNumEntry( "Margin", 6 );
#ifdef REPALM
reader->brepalm = config.readBoolEntry( "Repalm", true );
#endif
reader->bremap = config.readBoolEntry( "Remap", true );
reader->bmakebold = config.readBoolEntry( "MakeBold", false );
reader->setContinuous(config.readBoolEntry( "Continuous", true ));
m_targetapp = config.readEntry( "TargetApp", QString::null );
m_targetmsg = config.readEntry( "TargetMsg", QString::null );
#ifdef _SCROLLPIPE
reader->m_pipetarget = config.readEntry( "PipeTarget", QString::null );
reader->m_pauseAfterEachPara = config.readBoolEntry( "PauseAfterPara", true );
#endif
m_twoTouch = config.readBoolEntry( "TwoTouch", false);
m_doAnnotation = config.readBoolEntry( "Annotation", false);
m_doDictionary = config.readBoolEntry( "Dictionary", false);
m_doClipboard = config.readBoolEntry( "Clipboard", false);
m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll);
m_escapeTarget = (ActionTypes)config.readNumEntry("EscapeTarget", cesNone);
m_returnTarget = (ActionTypes)config.readNumEntry("ReturnTarget", cesFullScreen);
m_leftTarget = (ActionTypes)config.readNumEntry("LeftTarget", cesZoomOut);
m_rightTarget = (ActionTypes)config.readNumEntry("RightTarget", cesZoomIn);
m_upTarget = (ActionTypes)config.readNumEntry("UpTarget", cesPageUp);
m_downTarget = (ActionTypes)config.readNumEntry("DownTarget", cesPageDown);
m_leftScroll = config.readBoolEntry("LeftScroll", false);
m_rightScroll = config.readBoolEntry("RightScroll", false);
m_upScroll = config.readBoolEntry("UpScroll", true);
m_downScroll = config.readBoolEntry("DownScroll", true);
m_propogatefontchange = config.readBoolEntry( "RequestorFontChange", false);
reader->setBaseSize(config.readNumEntry( "Basesize", 10 ));
#ifndef USEQPE
config.setGroup( "Geometry" );
setGeometry(0,0,
config.readNumEntry( "width", QApplication::desktop()->width()/2 ),
config.readNumEntry( "height", QApplication::desktop()->height()/2 ));
move(
config.readNumEntry( "x", 20 ),
config.readNumEntry( "y", 20 ));
#endif
setTwoTouch(m_twoTouch);
connect( reader, SIGNAL( OnShowPicture(QImage&) ), this, SLOT( showgraphic(QImage&) ) );
connect( reader, SIGNAL( OnRedraw() ), this, SLOT( OnRedraw() ) );
connect( reader, SIGNAL( OnWordSelected(const QString&,size_t,const QString&) ), this, SLOT( OnWordSelected(const QString&,size_t,const QString&) ) );
connect( reader, SIGNAL( OnURLSelected(const QString&) ), this, SLOT( OnURLSelected(const QString&) ) );
editorStack->addWidget( reader, get_unique_id() );
m_preferences_action = new QAction( tr( "Configuration" ), geticon( "SettingsIcon" ), QString::null, 0, this, NULL);
connect( m_preferences_action, SIGNAL( activated() ), this, SLOT( showprefs() ) );
m_preferences_action->addTo( settings );
m_saveconfig_action = new QAction( tr( "Save Config" ), QString::null, 0, this, NULL);
connect( m_saveconfig_action, SIGNAL( activated() ), this, SLOT( SaveConfig() ) );
m_saveconfig_action->addTo( settings );
m_loadconfig_action = new QAction( tr( "Load Config" ), QString::null, 0, this, NULL);
connect( m_loadconfig_action, SIGNAL( activated() ), this, SLOT( LoadConfig() ) );
m_loadconfig_action->addTo( settings );
m_tidyconfig_action = new QAction( tr( "Delete Config" ), QString::null, 0, this, NULL);
connect( m_tidyconfig_action, SIGNAL( activated() ), this, SLOT( TidyConfig() ) );
m_tidyconfig_action->addTo( settings );
settings->insertSeparator();
m_toolbarprefs_action = new QAction( tr( "Toolbars" ), QString::null, 0, this, NULL);
connect( m_toolbarprefs_action, SIGNAL( activated() ), this, SLOT( showtoolbarprefs() ) );
m_toolbarprefs_action->addTo( settings );
m_open_action = new QAction( tr( "Open" ), geticon( "fileopen" ), QString::null, 0, this, 0 );
connect( m_open_action, SIGNAL( activated() ), this, SLOT( fileOpen() ) );
m_open_action->addTo( file );
m_close_action = new QAction( tr( "Close" ), geticon( "close" ), QString::null, 0, this, 0 );
connect( m_close_action, SIGNAL( activated() ), this, SLOT( fileClose() ) );
m_close_action->addTo( file );
#ifdef _SCRIPT
a = new QAction( tr( "Run Script" ), QString::null, 0, this, NULL);
connect( a, SIGNAL( activated() ), this, SLOT( RunScript() ) );
a->addTo( file );
#endif
/*
a = new QAction( tr( "Revert" ), geticon( "close" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( fileRevert() ) );
a->addTo( file );
a = new QAction( tr( "Cut" ), geticon( "cut" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) );
a->addTo( filebar() );
a->addTo( edit );
*/
m_info_action = new QAction( tr( "Info" ), geticon( "UtilsIcon" ), QString::null, 0, this, NULL);
connect( m_info_action, SIGNAL( activated() ), this, SLOT( showinfo() ) );
m_info_action->addTo( file );
m_touch_action = new QAction( tr( "Two/One Touch" ), geticon( "1to1" ), QString::null, 0, this, NULL, true );
connect( m_touch_action, SIGNAL( toggled(bool) ), this, SLOT( setTwoTouch(bool) ) );
m_touch_action->setOn(m_twoTouch);
m_touch_action->addTo( file );
m_find_action = new QAction( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, NULL);
connect( m_find_action, SIGNAL( activated() ), this, SLOT( editFind() ) );
file->insertSeparator();
// a->addTo( bar );
m_find_action->addTo( file );
m_exportlinks_action = new QAction( tr( "Export Links" ), QString::null, 0, this, NULL);
connect( m_exportlinks_action, SIGNAL( activated() ), this, SLOT( ExportLinks() ) );
m_exportlinks_action->addTo( file );
m_scrollButton = new QAction( tr( "Scroll" ), getmyicon( "panel-arrow-down" ), QString::null, 0, this, 0, true );
connect( m_scrollButton, SIGNAL( toggled(bool) ), this, SLOT( autoScroll(bool) ) );
m_scrollButton->addTo(navigation);
m_scrollButton->setOn(false);
m_start_action = new QAction( tr( "Goto Start" ), geticon( "start" ), QString::null, 0, this, NULL);
connect( m_start_action, SIGNAL( activated() ), this, SLOT( gotoStart() ) );
m_start_action->addTo(navigation);
m_end_action = new QAction( tr( "Goto End" ), geticon( "finish" ), QString::null, 0, this, NULL);
connect( m_end_action, SIGNAL( activated() ), this, SLOT( gotoEnd() ) );
m_end_action->addTo(navigation);
m_jump_action = new QAction( tr( "Jump" ), geticon( "rotate" ), QString::null, 0, this, NULL);
connect( m_jump_action, SIGNAL( activated() ), this, SLOT( jump() ) );
m_jump_action->addTo(navigation);
m_pageline_action = new QAction( tr( "Page/Line Scroll" ), geticon( "pass" ), QString::null, 0, this, NULL, true );
connect( m_pageline_action, SIGNAL( toggled(bool) ), this, SLOT( pagemode(bool) ) );
m_pageline_action->addTo(navigation);
m_pageline_action->setOn(reader->m_bpagemode);
m_pageup_action = new QAction( tr( "Up" ), geticon( "up" ), QString::null, 0, this, 0 );
connect( m_pageup_action, SIGNAL( activated() ), this, SLOT( pageup() ) );
m_pageup_action->addTo( navigation );
m_pagedn_action = new QAction( tr( "Down" ), geticon( "down" ), QString::null, 0, this, 0 );
connect( m_pagedn_action, SIGNAL( activated() ), this, SLOT( pagedn() ) );
m_pagedn_action->addTo( navigation );
m_back_action = new QAction( tr( "Back" ), geticon( "back" ), QString::null, 0, this, 0 );
connect( m_back_action, SIGNAL( activated() ), reader, SLOT( goBack() ) );
m_back_action->addTo( navigation );
m_home_action = new QAction( tr( "Home" ), geticon( "home" ), QString::null, 0, this, 0 );
connect( m_home_action, SIGNAL( activated() ), reader, SLOT( goHome() ) );
m_home_action->addTo( navigation );
m_forward_action = new QAction( tr( "Forward" ), geticon( "forward" ), QString::null, 0, this, 0 );
connect( m_forward_action, SIGNAL( activated() ), reader, SLOT( goForward() ) );
m_forward_action->addTo( navigation );
/*
a = new QAction( tr( "Find" ), QString::null, 0, this, NULL, true );
// connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
a->addTo( file );
a = new QAction( tr( "Find Again" ), QString::null, 0, this, NULL, true );
// connect( a, SIGNAL( activated() ), this, SLOT( pagedn() ) );
a->addTo( file );
*/
// file->insertSeparator();
#ifdef _SCROLLPIPE
QActionGroup* ag = new QActionGroup(this);
ag->setExclusive(false);
spacemenu = new QPopupMenu(this);
file->insertItem( tr( "Scrolling" ), spacemenu );
a = new QAction( tr( "Set Target" ), QString::null, 0, ag, NULL);
connect( a, SIGNAL( activated() ), this, SLOT( setpipetarget() ) );
a = new QAction( tr( "Pause Paras" ), QString::null, 0, ag, NULL, true );
connect( a, SIGNAL( toggled(bool) ), this, SLOT( setpause(bool) ) );
a->setOn(reader->m_pauseAfterEachPara);
ag->addTo(spacemenu);
// file->insertSeparator();
#endif
/*
a = new QAction( tr( "Import" ), QString::null, 0, this, NULL );
connect( a, SIGNAL( activated() ), this, SLOT( importFiles() ) );
a->addTo( file );
*/
/*
a = new QAction( tr( "Paste" ), geticon( "paste" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) );
a->addTo( fileBar );
a->addTo( edit );
*/
// a = new QAction( tr( "Find..." ), geticon( "find" ), QString::null, 0, this, 0 );
m_fullscreen = false;
m_actFullscreen = new QAction( tr( "Fullscreen" ), geticon( "fullscreen" ), QString::null, 0, this, NULL, true );
connect( m_actFullscreen, SIGNAL( toggled(bool) ), this, SLOT( setfullscreen(bool) ) );
m_actFullscreen->setOn(m_fullscreen);
m_actFullscreen->addTo( view );
view->insertSeparator();
m_zoomin_action = new QAction( tr( "Zoom In" ), geticon( "zoom" ), QString::null, 0, this);
connect( m_zoomin_action, SIGNAL( activated() ), this, SLOT( zoomin() ) );
m_zoomin_action->addTo( view );
m_zoomout_action = new QAction( tr( "Zoom Out" ), geticon( "mag" ), QString::null, 0, this);
connect( m_zoomout_action, SIGNAL( activated() ), this, SLOT( zoomout() ) );
m_zoomout_action->addTo( view );
view->insertSeparator();
m_setfont_action = new QAction( tr( "Set Font" ), getmyicon( "font" ), QString::null, 0, this);
connect( m_setfont_action, SIGNAL( activated() ), this, SLOT( setfont() ) );
m_setfont_action->addTo( view );
view->insertSeparator();
m_setenc_action = new QAction( tr( "Set Encoding" ), getmyicon( "charset" ), QString::null, 0, this);
connect( m_setenc_action, SIGNAL( activated() ), this, SLOT( chooseencoding() ) );
m_setenc_action->addTo( view );
m_setmono_action = new QAction( tr( "Ideogram" ), getmyicon( "ideogram" ), QString::null, 0, this, NULL, true);
connect( m_setmono_action, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) );
m_setmono_action->addTo( view );
m_setmono_action->setOn(reader->m_bMonoSpaced);
// a = new QAction( tr( "Zoom" ), QString::null, 0, this, NULL, true );
// a = new QAction( tr( "Zoom" ), geticon( "mag" ), QString::null, 0, this, 0 );
// a->addTo( filebar() );
// view->insertSeparator();
/*
a = new QAction( tr( "Ideogram/Word" ), QString::null, 0, this, NULL, true );
connect( a, SIGNAL( toggled(bool) ), this, SLOT( monospace(bool) ) );
a->setOn(reader->m_bMonoSpaced);
a->addTo( view );
*/
/*
a = new QAction( tr( "Set Width" ), QString::null, 0, this, NULL);
connect( a, SIGNAL( activated() ), this, SLOT( setspacing() ) );
a->addTo( view );
*/
m_mark_action = new QAction( tr( "Bookmark" ), getmyicon( "bookmark" ), QString::null, 0, this, NULL);
connect( m_mark_action, SIGNAL( activated() ), this, SLOT( addbkmk() ) );
m_mark_action->addTo( marks );
m_annotate_action = new QAction( tr( "Annotate" ), getmyicon( "annotate" ), QString::null, 0, this, NULL);
connect( m_annotate_action, SIGNAL( activated() ), this, SLOT( addanno() ) );
m_annotate_action->addTo( marks );
m_goto_action = new QAction( tr( "Goto" ), getmyicon( "bookmark_goto" ), QString::null, 0, this, NULL, false );
connect( m_goto_action, SIGNAL( activated() ), this, SLOT( do_gotomark() ) );
m_goto_action->addTo( marks );
m_delete_action = new QAction( tr( "Delete" ), getmyicon( "bookmark_delete" ), QString::null, 0, this, NULL);
connect( m_delete_action, SIGNAL( activated() ), this, SLOT( do_delmark() ) );
m_delete_action->addTo( marks );
m_autogen_action = new QAction( tr( "Autogen" ), geticon( "exec" ), QString::null, 0, this, NULL, false );
connect( m_autogen_action, SIGNAL( activated() ), this, SLOT( do_autogen() ) );
marks->insertSeparator();
m_autogen_action->addTo( marks );
m_clear_action = new QAction( tr( "Clear" ), getmyicon( "bookmark_clear" ), QString::null, 0, this, NULL);
connect( m_clear_action, SIGNAL( activated() ), this, SLOT( clearBkmkList() ) );
m_clear_action->addTo( marks );
m_save_action = new QAction( tr( "Save" ), getmyicon( "bookmark_save" ), QString::null, 0, this, NULL );
connect( m_save_action, SIGNAL( activated() ), this, SLOT( savebkmks() ) );
m_save_action->addTo( marks );
m_tidy_action = new QAction( tr( "Tidy" ), getmyicon( "bookmark_tidy" ), QString::null, 0, this, NULL);
connect( m_tidy_action, SIGNAL( activated() ), this, SLOT( listBkmkFiles() ) );
marks->insertSeparator();
m_tidy_action->addTo( marks );
m_startBlock_action = new QAction( tr( "Start Block" ), geticon( "new" ), QString::null, 0, this, NULL);
connect( m_startBlock_action, SIGNAL( activated() ), this, SLOT( editMark() ) );
marks->insertSeparator();
m_startBlock_action->addTo( marks );
m_endBlock_action = new QAction( tr( "Copy Block" ), geticon( "copy" ), QString::null, 0, this, NULL);
connect( m_endBlock_action, SIGNAL( activated() ), this, SLOT( editCopy() ) );
m_endBlock_action->addTo( marks );
m_bkmkAvail = NULL;
setToolBarsMovable(m_tbmove);
addtoolbars(&config);
pbar = new QProgressBar(this);
pbar->hide();
searchBar = new QFloatBar( "Search", this, QMainWindow::Top, TRUE );
searchBar->setHorizontalStretchable( TRUE );
connect(searchBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() ));
searchEdit = new QLineEdit( searchBar, "searchEdit" );
// QFont f("unifont", 16 /*, QFont::Bold*/);
// searchEdit->setFont( f );
searchBar->setStretchableWidget( searchEdit );
#ifdef __ISEARCH
connect( searchEdit, SIGNAL( textChanged(const QString&) ),
this, SLOT( search(const QString&) ) );
#else
connect( searchEdit, SIGNAL( returnPressed() ),
this, SLOT( search() ) );
#endif
QAction*a = new QAction( tr( "Find Next" ), geticon( "next" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( findNext() ) );
a->addTo( searchBar );
a = new QAction( tr( "Close Find" ), geticon( "close" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) );
a->addTo( searchBar );
searchBar->hide();
regBar = new QFloatBar( "Autogen", this, QMainWindow::Top, TRUE );
connect(regBar, SIGNAL( OnHide() ), this, SLOT( restoreFocus() ));
regBar->setHorizontalStretchable( TRUE );
regEdit = new QLineEdit( regBar, "regEdit" );
// regEdit->setFont( f );
regBar->setStretchableWidget( regEdit );
connect( regEdit, SIGNAL( returnPressed() ),
this, SLOT( do_regaction() ) );
a = new QAction( tr( "Do Reg" ), geticon( "enter" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( do_regaction() ) );
a->addTo( regBar );
a = new QAction( tr( "Close Edit" ), geticon( "close" ), QString::null, 0, this, 0 );
connect( a, SIGNAL( activated() ), this, SLOT( regClose() ) );
a->addTo( regBar );
regBar->hide();
m_fontBar = new QToolBar( "Autogen", this, QMainWindow::Top, TRUE );
m_fontBar->setHorizontalStretchable( TRUE );
-// qDebug("Font selector");
+// odebug << "Font selector" << oendl;
m_fontSelector = new QComboBox(false, m_fontBar);
m_fontBar->setStretchableWidget( m_fontSelector );
{
#ifndef USEQPE
QFontDatabase f;
#else
FontDatabase f;
#endif
QStringList flist = f.families();
bool realfont = false;
for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++)
{
if (reader->m_fontname == *nm)
{
realfont = true;
}
if ((*nm).contains(FIXEDFONT,false)) reader->m_fontControl.hasCourier(true, *nm);
}
if (!realfont) reader->m_fontname = flist[0];
} // delete the FontDatabase!!!
connect( m_fontSelector, SIGNAL( activated(const QString&) ),
this, SLOT( do_setfont(const QString&) ) );
connect( m_fontSelector, SIGNAL( activated(int) ),
this, SLOT( do_setencoding(int) ) );
m_fontBar->hide();
m_fontVisible = false;
#ifdef USEMSGS
connect(qApp, SIGNAL( appMessage(const QCString&,const QByteArray&) ),
this, SLOT( msgHandler(const QCString&,const QByteArray&) ) );
#endif
-// qDebug("Initing");
+// odebug << "Initing" << oendl;
reader->init();
-// qDebug("Inited");
+// odebug << "Inited" << oendl;
// m_buttonAction[m_spaceTarget]->setOn(true);
-// qDebug("fonting");
+// odebug << "fonting" << oendl;
do_setfont(reader->m_fontname);
if (!reader->m_lastfile.isEmpty())
{
-// qDebug("doclnk");
+// odebug << "doclnk" << oendl;
// doc = new DocLnk(reader->m_lastfile);
-// qDebug("doclnk done");
+// odebug << "doclnk done" << oendl;
if (pOpenlist != NULL)
{
/*
int ind = 0;
Bkmk* p = (*pOpenlist)[ind];
while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile)
{
p = (*pOpenlist)[++ind];
}
*/
Bkmk* p = NULL;
for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++)
{
p = iter.pContent();
if (toQString(CFiledata(p->anno()).name()) == reader->m_lastfile)
{
break;
}
-// qDebug("Item:%s", (const char*)toQString(CFiledata(p->anno()).name()));
+// odebug << "Item:" << toQString(CFiledata(p->anno()).name()) << "" << oendl;
p = NULL;
}
if (p != NULL)
{
-// qDebug("openfrombkmk");
+// odebug << "openfrombkmk" << oendl;
if (!openfrombkmk(p))
showEditTools();
}
else
{
-// qDebug("openfile");
+// odebug << "openfile" << oendl;
openFile( reader->m_lastfile );
}
}
else
{
-// qDebug("Openfile 2");
+// odebug << "Openfile 2" << oendl;
if (!reader->m_lastfile.isEmpty())
openFile( reader->m_lastfile );
}
}
else
{
showEditTools();
}
// qApp->processEvents();
reader->bDoUpdates = true;
reader->update();
config.setGroup("Version");
int major = config.readNumEntry("Major", 0);
int bkmktype = config.readNumEntry("BkmkType", 0);
char minor = config.readNumEntry("Minor", 0);
if (CheckVersion(major, bkmktype, minor))
{
config.writeEntry("Major", major);
config.writeEntry("BkmkType", bkmktype);
config.writeEntry("Minor", (int)minor);
}
-// qDebug("finished update");
+// odebug << "finished update" << oendl;
}
void QTReaderApp::addtoolbars(Config* config)
{
config->setGroup("Toolbar");
if (fileBar != NULL)
{
if (fileBar != menubar)
{
fileBar->clear();
}
else
{
m_preferences_action->removeFrom( filebar() );
m_open_action->removeFrom( filebar() );
m_close_action->removeFrom( filebar() );
m_info_action->removeFrom( filebar() );
m_touch_action->removeFrom( filebar() );
m_find_action->removeFrom( filebar() );
}
}
m_preferences_action->addTo( filebar() );
addfilebar(config, "Open", m_open_action);
addfilebar(config, "Close", m_close_action);
addfilebar(config, "Info", m_info_action);
addfilebar(config, "Two/One Touch", m_touch_action);
addfilebar(config, "Find", m_find_action);
if (navBar != NULL)
{
if ((navBar == fileBar) && (fileBar == menubar))
{
m_scrollButton->removeFrom( navbar() );
m_start_action->removeFrom( navbar() );
m_end_action->removeFrom( navbar() );
m_jump_action->removeFrom( navbar() );
m_pageline_action->removeFrom( navbar() );
m_pageup_action->removeFrom( navbar() );
m_pagedn_action->removeFrom( navbar() );
m_back_action->removeFrom( navbar() );
m_home_action->removeFrom( navbar() );
m_forward_action->removeFrom( navbar() );
}
else if (navBar != fileBar)
{
navBar->clear();
}
}
addnavbar(config, "Scroll", m_scrollButton);
addnavbar(config, "Goto Start", m_start_action);
addnavbar(config, "Goto End", m_end_action);
addnavbar(config, "Jump", m_jump_action);
addnavbar(config, "Page/Line Scroll", m_pageline_action);
addnavbar(config, "Page Up", m_pageup_action);
addnavbar(config, "Page Down", m_pagedn_action);
addnavbar(config, "Back", m_back_action);
addnavbar(config, "Home", m_home_action);
addnavbar(config, "Forward", m_forward_action);
if (viewBar != NULL)
{
if ((viewBar == fileBar) && (fileBar == menubar))
{
m_actFullscreen->removeFrom( filebar() );
m_zoomin_action->removeFrom( viewbar() );
m_zoomout_action->removeFrom( viewbar() );
m_setfont_action->removeFrom( viewbar() );
m_setenc_action->removeFrom( viewbar() );
m_setmono_action->removeFrom( viewbar() );
}
else if (viewBar != fileBar)
{
viewBar->clear();
}
}
addviewbar(config, "Fullscreen", m_actFullscreen);
addviewbar(config, "Zoom In", m_zoomin_action);
addviewbar(config, "Zoom Out", m_zoomout_action);
addviewbar(config, "Set Font", m_setfont_action);
addviewbar(config, "Encoding Select", m_setenc_action);
addviewbar(config, "Ideogram Mode", m_setmono_action);
if (markBar != NULL)
{
if ((markBar == fileBar) && (fileBar == menubar))
{
m_mark_action->removeFrom( markbar() );
m_annotate_action->removeFrom( markbar());
m_goto_action->removeFrom( markbar() );
m_delete_action->removeFrom( markbar() );
m_autogen_action->removeFrom( markbar() );
m_clear_action->removeFrom( markbar() );
m_save_action->removeFrom( markbar() );
m_tidy_action->removeFrom( markbar() );
m_startBlock_action->removeFrom( markbar() );
m_endBlock_action->removeFrom( markbar() );
}
else if (markBar != fileBar)
{
markBar->clear();
}
}
addmarkbar(config, "Mark", m_mark_action);
addmarkbar(config, "Annotate", m_annotate_action);
addmarkbar(config, "Goto", m_goto_action);
addmarkbar(config, "Delete", m_delete_action);
addmarkbar(config, "Autogen", m_autogen_action);
addmarkbar(config, "Clear", m_clear_action);
addmarkbar(config, "Save", m_save_action);
addmarkbar(config, "Tidy", m_tidy_action);
addmarkbar(config, "Start Block", m_startBlock_action);
addmarkbar(config, "Copy Block", m_endBlock_action);
if (checkbar(config, "Annotation indicator"))
{
if (m_bkmkAvail == NULL)
{
m_bkmkAvail = new QAction( tr( "Annotation" ), geticon( "find" ), QString::null, 0, this, 0 );
connect( m_bkmkAvail, SIGNAL( activated() ), this, SLOT( showAnnotation() ) );
m_bkmkAvail->setEnabled(false);
}
QLabel *spacer = new QLabel(markBar, "");
markbar()->setStretchableWidget(spacer);
m_bkmkAvail->removeFrom( markbar() );
m_bkmkAvail->addTo( markbar() );
}
else
{
if (m_bkmkAvail != NULL)
{
m_bkmkAvail->removeFrom( markbar() );
delete m_bkmkAvail;
m_bkmkAvail = NULL;
}
}
}
bool QTReaderApp::checkbar(Config* _config, const QString& key)
{
return _config->readBoolEntry(key, false);
}
QToolBar* QTReaderApp::filebar()
{
if (fileBar == NULL)
{
switch (m_tbpol)
{
case cesSingle:
-// qDebug("Setting filebar to menubar");
+// odebug << "Setting filebar to menubar" << oendl;
fileBar = menubar;
break;
default:
- qDebug("Incorrect toolbar policy set");
+ odebug << "Incorrect toolbar policy set" << oendl;
case cesMenuTool:
case cesMultiple:
-// qDebug("Creating new file bar");
+// odebug << "Creating new file bar" << oendl;
fileBar = new QToolBar("File", this, m_tbposition);
break;
}
// fileBar->setHorizontalStretchable( true );
}
return fileBar;
}
QToolBar* QTReaderApp::viewbar()
{
if (viewBar == NULL)
{
switch (m_tbpol)
{
case cesMultiple:
viewBar = new QToolBar("View", this, m_tbposition);
break;
default:
- qDebug("Incorrect toolbar policy set");
+ odebug << "Incorrect toolbar policy set" << oendl;
case cesSingle:
case cesMenuTool:
viewBar = fileBar;
break;
}
}
return viewBar;
}
QToolBar* QTReaderApp::navbar()
{
if (navBar == NULL)
{
switch (m_tbpol)
{
case cesMultiple:
-// qDebug("Creating new nav bar");
+// odebug << "Creating new nav bar" << oendl;
navBar = new QToolBar("Navigation", this, m_tbposition);
break;
default:
- qDebug("Incorrect toolbar policy set");
+ odebug << "Incorrect toolbar policy set" << oendl;
case cesSingle:
case cesMenuTool:
navBar = fileBar;
-// qDebug("Setting navbar to filebar");
+// odebug << "Setting navbar to filebar" << oendl;
break;
}
}
return navBar;
}
QToolBar* QTReaderApp::markbar()
{
if (markBar == NULL)
{
switch (m_tbpol)
{
case cesMultiple:
markBar = new QToolBar("Marks", this, m_tbposition);
break;
default:
- qDebug("Incorrect toolbar policy set");
+ odebug << "Incorrect toolbar policy set" << oendl;
case cesSingle:
case cesMenuTool:
markBar = fileBar;
break;
}
}
return markBar;
}
void QTReaderApp::addfilebar(Config* _config, const QString& key, QAction* a)
{
if (_config->readBoolEntry(key, false)) a->addTo( filebar() );
}
void QTReaderApp::addnavbar(Config* _config, const QString& key, QAction* a)
{
if (_config->readBoolEntry(key, false)) a->addTo( navbar() );
}
void QTReaderApp::addmarkbar(Config* _config, const QString& key, QAction* a)
{
if (_config->readBoolEntry(key, false)) a->addTo( markbar() );
}
void QTReaderApp::addviewbar(Config* _config, const QString& key, QAction* a)
{
if (_config->readBoolEntry(key, false)) a->addTo( viewbar() );
}
void QTReaderApp::suspend() { reader->suspend(); }
#ifdef USEMSGS
void QTReaderApp::msgHandler(const QCString& _msg, const QByteArray& _data)
{
QString msg = QString::fromUtf8(_msg);
-//// qDebug("Received:%s", (const char*)msg);
+//// odebug << "Received:" << msg << "" << oendl;
QDataStream stream( _data, IO_ReadOnly );
if ( msg == "info(QString)" )
{
QString info;
stream >> info;
QMessageBox::information(this, PROGNAME, info);
}
else if ( msg == "Update(int)" )
{
int info;
stream >> info;
if (info)
{
reader->bDoUpdates = true;
reader->refresh();
}
else
{
reader->bDoUpdates = false;
}
}
else if ( msg == "warn(QString)" )
{
QString info;
stream >> info;
QMessageBox::warning(this, PROGNAME, info);
}
else if ( msg == "exit()" )
{
m_dontSave = true;
close();
}
else if ( msg == "pageDown()" )
{
reader->dopagedn();
}
else if ( msg == "pageUp()" )
{
reader->dopageup();
}
else if ( msg == "lineDown()" )
{
reader->lineDown();
}
else if ( msg == "lineUp()" )
{
reader->lineUp();
}
else if ( msg == "showText()" )
{
showEditTools();
}
else if ( msg == "home()" )
{
reader->goHome();
}
else if ( msg == "back()" )
{
reader->goBack();
}
else if ( msg == "forward()" )
{
reader->goForward();
}
else if ( msg == "File/Open(QString)" )
{
QString info;
stream >> info;
openFile( info );
}
else if ( msg == "File/Info()" )
{
showinfo();
}
else if ( msg == "File/Action(QString)" )
{
QString info;
stream >> info;
m_spaceTarget = ActNameToInt(info);
}
else if ( msg == "Navigation/Scroll(int)" )
{
int info;
stream >> info;
autoScroll(info);
}
else if ( msg == "Navigation/GotoStart()" )
{
gotoStart();
}
else if ( msg == "Navigation/GotoEnd()" )
{
gotoEnd();
}
else if ( msg == "Navigation/Jump(int)" )
{
int info;
stream >> info;
reader->locate(info);
}
else if ( msg == "Navigation/Page/LineScroll(int)" )
{
int info;
stream >> info;
pagemode(info);
}
else if ( msg == "Navigation/SetOverlap(int)" )
{
int info;
stream >> info;
reader->m_overlap = info;
}
else if ( msg == "Navigation/SetMargin(int)" )
{
int info;
stream >> info;
do_margin(info);
}
else if ( msg == "File/SetDictionary(QString)" )
{
QString info;
stream >> info;
do_settarget(info);
}
#ifdef _SCROLLPIPE
else if ( msg == "File/SetScrollTarget(QString)" )
{
QString info;
stream >> info;
reader->m_pipetarget = info;
}
#endif
else if ( msg == "File/Two/OneTouch(int)" )
{
int info;
stream >> info;
setTwoTouch(info);
}
else if ( msg == "Target/Annotation(int)" )
{
int info;
stream >> info;
OnAnnotation(info);
}
else if ( msg == "Target/Dictionary(int)" )
{
int info;
stream >> info;
OnDictionary(info);
}
else if ( msg == "Target/Clipboard(int)" )
{
int info;
stream >> info;
OnClipboard(info);
}
else if ( msg == "File/Find(QString)" )
{
QString info;
stream >> info;
QRegExp arg(info);
size_t pos = reader->pagelocate();
size_t start = pos;
CDrawBuffer test(&(reader->m_fontControl));
reader->getline(&test);
while (arg.match(toQString(test.data())) == -1)
{
pos = reader->locate();
if (!reader->getline(&test))
{
QMessageBox::information(this, PROGNAME, QString("Can't find\n")+info);
pos = start;
break;
}
}
reader->locate(pos);
}
else if ( msg == "File/Fullscreen(int)" )
{
int info;
stream >> info;
setfullscreen(info);
}
else if ( msg == "File/Continuous(int)" )
{
int info;
stream >> info;
setcontinuous(info);
}
else if ( msg == "Markup(QString)" )
{
QString info;
stream >> info;
if (info == "Auto")
{
autofmt(true);
}
if (info == "None")
{
autofmt(false);
textfmt(false);
striphtml(false);
peanut(false);
}
if (info == "Text")
{
textfmt(true);
}
if (info == "HTML")
{
striphtml(true);
}
if (info == "Peanut/PML")
{
peanut(true);
}
}
else if ( msg == "Layout/StripCR(int)" )
{
int info;
stream >> info;
stripcr(info);
}
else if ( msg == "Layout/Dehyphen(int)" )
{
int info;
stream >> info;
dehyphen(info);
}
else if ( msg == "Layout/Depluck(int)" )
{
int info;
stream >> info;
depluck(info);
}
else if ( msg == "Layout/Dejpluck(int)" )
{
int info;
stream >> info;
dejpluck(info);
}
else if ( msg == "Layout/SingleSpace(int)" )
{
int info;
stream >> info;
onespace(info);
}
#ifdef REPALM
else if ( msg == "Layout/Repalm(int)" )
{
int info;
stream >> info;
repalm(info);
}
#endif
else if ( msg == "Layout/Unindent(int)" )
{
int info;
stream >> info;
unindent(info);
}
else if ( msg == "Layout/Re-paragraph(int)" )
{
int info;
stream >> info;
repara(info);
}
else if ( msg == "Layout/DoubleSpace(int)" )
{
int info;
stream >> info;
dblspce(info);
}
else if ( msg == "Layout/Indent(int)" )
{
int info;
stream >> info;
reader->bindenter = info;
reader->setfilter(reader->getfilter());
}
else if ( msg == "Layout/Remap(int)" )
{
int info;
stream >> info;
remap(info);
}
else if ( msg == "Layout/Embolden(int)" )
{
int info;
stream >> info;
embolden(info);
}
else if ( msg == "Format/Ideogram/Word(int)" )
{
int info;
stream >> info;
monospace(info);
}
else if ( msg == "Format/SetWidth(int)" )
{
int info;
stream >> info;
reader->m_charpc = info;
reader->setfont();
reader->refresh();
}
else if ( msg == "Format/SetFont(QString,int)" )
{
QString fontname;
int size;
stream >> fontname;
stream >> size;
setfontHelper(fontname, size);
}
else if ( msg == "Marks/Autogen(QString)" )
{
QString info;
stream >> info;
do_autogen(info);
}
else if ( msg == "File/StartBlock()" )
{
editMark();
}
else if ( msg == "File/CopyBlock()" )
{
editCopy();
}
}
#endif
ActionTypes QTReaderApp::ActNameToInt(const QString& _enc)
{
for (int i = 0; i < MAX_ACTIONS; i++)
{
if (m_buttonAction[i]->text() == _enc) return (ActionTypes)i;
}
return cesAutoScroll;
}
void QTReaderApp::setfullscreen(bool sfs)
{
reader->bDoUpdates = false;
m_fullscreen = sfs;
showEditTools();
// qApp->processEvents();
reader->bDoUpdates = true;
reader->update();
}
void QTReaderApp::buttonActionSelected(QAction* _a)
{
-//// qDebug("es:%x : %s (%u)", _a, (const char *)(_a->text()), ActNameToInt(_a->text()));
+//// odebug << "es:" << _a << " : " << (const char *)(_a->text()) << " (" << ActNameToInt(_a->text()) << ")" << oendl;
m_spaceTarget = ActNameToInt(_a->text());
}
QTReaderApp::~QTReaderApp()
{
}
void QTReaderApp::autoScroll(bool _b)
{
reader->setautoscroll(_b);
setScrollState(reader->m_autoScroll);
}
void QTReaderApp::zoomin()
{
reader->zoomin();
}
void QTReaderApp::zoomout()
{
reader->zoomout();
}
void QTReaderApp::clearBkmkList()
{
delete pBkmklist;
pBkmklist = NULL;
m_fBkmksChanged = false;
}
void QTReaderApp::fileClose()
{
CCloseDialog* cd = new CCloseDialog(reader->m_string, false, this);
if (cd->exec())
{
if (pOpenlist != NULL)
{
int ind = 0;
Bkmk* p = (*pOpenlist)[ind];
while (p != NULL && toQString(CFiledata(p->anno()).name()) != reader->m_lastfile)
{
p = (*pOpenlist)[++ind];
}
if (p != NULL) pOpenlist->erase(ind);
if (cd->delFile())
{
unlink((const char*)reader->m_lastfile);
}
if (cd->delMarks())
{
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR);
d.remove(reader->m_string);
#else /* USEQPE */
unlink((const char *)Global::applicationFileName(APPDIR,reader->m_string));
#endif /* USEQPE */
}
if (cd->delConfig())
{
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR "/configs");
d.remove(reader->m_string);
#else /* USEQPE */
unlink((const char *)Global::applicationFileName(APPDIR "/configs",reader->m_string));
#endif /* USEQPE */
}
}
fileOpen2();
}
delete cd;
}
void QTReaderApp::updatefileinfo()
{
if (reader->m_string.isEmpty()) return;
if (reader->m_lastfile.isEmpty()) return;
tchar* nm = fromQString(reader->m_string);
tchar* fl = fromQString(reader->m_lastfile);
-// qDebug("Lastfile:%x", fl);
+// odebug << "Lastfile:" << fl << "" << oendl;
bool notadded = true;
if (pOpenlist == NULL) pOpenlist = new CList<Bkmk>;
else
{
for (CList<Bkmk>::iterator iter = pOpenlist->begin(); iter != pOpenlist->end(); iter++)
{
if (ustrcmp(CFiledata(iter->anno()).name(), fl) == 0)
{
iter->value(reader->pagelocate());
unsigned short dlen;
unsigned char* data;
CFiledata fd(iter->anno());
reader->setSaveData(data, dlen, fd.content(), fd.length());
-// qDebug("Filedata(1):%u, %u", fd.length(), dlen);
+// odebug << "Filedata(1):" << fd.length() << ", " << dlen << "" << oendl;
// getstate(data, dlen);
iter->setAnno(data, dlen);
notadded = false;
delete [] data;
break;
}
}
}
-// qDebug("Added?:%x", notadded);
+// odebug << "Added?:" << notadded << "" << oendl;
if (notadded)
{
struct stat fnstat;
stat((const char *)reader->m_lastfile, &fnstat);
CFiledata fd(fnstat.st_mtime, fl);
unsigned short dlen;
unsigned char* data;
reader->setSaveData(data, dlen, fd.content(), fd.length());
pOpenlist->push_front(Bkmk(nm, data, dlen, reader->pagelocate()));
-// qDebug("Filedata(2):%u, %u", fd.length(), dlen);
+// odebug << "Filedata(2):" << fd.length() << ", " << dlen << "" << oendl;
delete [] data;
}
delete [] nm;
delete [] fl;
}
void QTReaderApp::fileOpen()
{
/*
menu->hide();
fileBar->hide();
if (regVisible) regBar->hide();
if (searchVisible) searchBar->hide();
*/
-// qDebug("fileOpen");
+// odebug << "fileOpen" << oendl;
// if (!reader->m_lastfile.isEmpty())
updatefileinfo();
fileOpen2();
}
void QTReaderApp::fileOpen2()
{
if (pBkmklist != NULL)
{
if (m_fBkmksChanged)
{
if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0)
savebkmks();
}
delete pBkmklist;
pBkmklist = NULL;
m_fBkmksChanged = false;
}
reader->disableAutoscroll();
/*
editorStack->raiseWidget( fileSelector );
fileSelector->reread();
*/
bool usebrowser = true;
if (pOpenlist != NULL)
{
m_nBkmkAction = cOpenFile;
if (listbkmk(pOpenlist, "Browse")) usebrowser = false;
}
if (usebrowser)
{
QString fn = usefilebrowser();
// qApp->processEvents();
if (!fn.isEmpty() && QFileInfo(fn).isFile())
{
openFile(fn);
}
reader->setFocus();
}
// reader->refresh();
-// qDebug("HEIGHT:%d", reader->m_lastheight);
+// odebug << "HEIGHT:" << reader->m_lastheight << "" << oendl;
}
QString QTReaderApp::usefilebrowser()
{
#ifndef USEQPE
QString s( QFileDialog::getOpenFileName( reader->m_lastfile, QString::null, this ) );
return s;
#else
fileBrowser* fb = new fileBrowser(false, this,"OpieReader",!m_bFloatingDialog,
0,
// WStyle_Customize | WStyle_NoBorderEx,
"*", QFileInfo(reader->m_lastfile).dirPath(true));
QString fn;
if (fb->exec())
{
fn = fb->getCurrentFile();
}
-// qDebug("Selected %s", (const char*)fn);
+// odebug << "Selected " << fn << "" << oendl;
delete fb;
showEditTools();
return fn;
#endif
}
void QTReaderApp::showgraphic(QImage& pm)
{
QPixmap pc;
pc.convertFromImage(pm);
m_graphicwin->setPixmap(pc);
editorStack->raiseWidget( m_graphicwin );
m_graphicwin->setFocus();
}
void QTReaderApp::showprefs()
{
CPrefs* prefwin = new CPrefs(!m_bFloatingDialog, this);
prefwin->twotouch(m_twoTouch);
prefwin->propfontchange(m_propogatefontchange);
prefwin->StripCR(reader->bstripcr);
prefwin->Dehyphen(reader->bdehyphen);
prefwin->SingleSpace(reader->bonespace);
prefwin->Unindent(reader->bunindent);
prefwin->Reparagraph(reader->brepara);
prefwin->DoubleSpace(reader->bdblspce);
prefwin->Remap(reader->bremap);
prefwin->Embolden(reader->bmakebold);
prefwin->FullJustify(reader->bfulljust);
prefwin->ParaLead(reader->getextraspace());
prefwin->LineLead(reader->getlead());
prefwin->Margin(reader->m_border);
prefwin->Indent(reader->bindenter);
if (reader->bautofmt)
{
prefwin->Markup(0);
}
else if (reader->btextfmt)
{
prefwin->Markup(2);
}
else if (reader->bstriphtml)
{
prefwin->Markup(3);
}
else if (reader->bpeanut)
{
prefwin->Markup(4);
}
else
{
prefwin->Markup(1);
}
prefwin->Depluck(reader->bdepluck);
prefwin->Dejpluck(reader->bdejpluck);
prefwin->Continuous(reader->m_continuousDocument);
prefwin->dictApplication(m_targetapp);
prefwin->dictMessage(m_targetmsg);
prefwin->spaceAction(m_spaceTarget);
prefwin->escapeAction(m_escapeTarget);
prefwin->returnAction(m_returnTarget);
prefwin->leftAction(m_leftTarget);
prefwin->rightAction(m_rightTarget);
prefwin->upAction(m_upTarget);
prefwin->downAction(m_downTarget);
prefwin->leftScroll(m_leftScroll);
prefwin->rightScroll(m_rightScroll);
prefwin->upScroll(m_upScroll);
prefwin->downScroll(m_downScroll);
prefwin->miscannotation(m_doAnnotation);
prefwin->miscdictionary(m_doDictionary);
prefwin->miscclipboard(m_doClipboard);
prefwin->SwapMouse(reader->m_swapmouse);
prefwin->Font(reader->m_fontname);
prefwin->gfxsize(reader->getBaseSize());
prefwin->pageoverlap(reader->m_overlap);
prefwin->ideogram(reader->m_bMonoSpaced);
prefwin->encoding(reader->m_encd);
prefwin->ideogramwidth(reader->m_charpc);
if (prefwin->exec())
{
m_twoTouch = prefwin->twotouch();
reader->setTwoTouch(m_twoTouch);
m_touch_action->setOn(m_twoTouch);
reader->bstripcr = prefwin->StripCR();
reader->bdehyphen = prefwin->Dehyphen();
reader->bonespace = prefwin->SingleSpace();
reader->bunindent = prefwin->Unindent();
reader->brepara = prefwin->Reparagraph();
reader->bdblspce = prefwin->DoubleSpace();
reader->bremap = prefwin->Remap();
reader->bmakebold = prefwin->Embolden();
reader->bfulljust = prefwin->FullJustify();
reader->setextraspace(prefwin->ParaLead());
reader->setlead(prefwin->LineLead());
reader->m_border = prefwin->Margin();
reader->bindenter = prefwin->Indent();
reader->bautofmt = reader->btextfmt = reader->bstriphtml = reader->bpeanut = false;
switch (prefwin->Markup())
{
case 0:
reader->bautofmt = true;
break;
case 1:
break;
case 2:
reader->btextfmt = true;
break;
case 3:
reader->bstriphtml = true;
break;
case 4:
reader->bpeanut = true;
break;
default:
- qDebug("Format out of range");
+ odebug << "Format out of range" << oendl;
}
reader->bdepluck = prefwin->Depluck();
reader->bdejpluck = prefwin->Dejpluck();
reader->setContinuous(prefwin->Continuous());
m_spaceTarget = (ActionTypes)prefwin->spaceAction();
m_escapeTarget = (ActionTypes)prefwin->escapeAction();
m_returnTarget = (ActionTypes)prefwin->returnAction();
m_leftTarget = (ActionTypes)prefwin->leftAction();
m_rightTarget = (ActionTypes)prefwin->rightAction();
m_upTarget = (ActionTypes)prefwin->upAction();
m_downTarget = (ActionTypes)prefwin->downAction();
m_leftScroll = prefwin->leftScroll();
m_rightScroll = prefwin->rightScroll();
m_upScroll = prefwin->upScroll();
m_downScroll = prefwin->downScroll();
m_targetapp = prefwin->dictApplication();
m_targetmsg = prefwin->dictMessage();
m_doAnnotation = prefwin->miscannotation();
m_doDictionary = prefwin->miscdictionary();
m_doClipboard = prefwin->miscclipboard();
reader->m_swapmouse = prefwin->SwapMouse();
reader->setBaseSize(prefwin->gfxsize());
reader->m_overlap = prefwin->pageoverlap();
reader->m_bMonoSpaced = prefwin->ideogram();
m_setmono_action->setOn(reader->m_bMonoSpaced);
reader->m_encd = prefwin->encoding();
reader->m_charpc = prefwin->ideogramwidth();
if (
reader->m_fontname != prefwin->Font()
||
m_propogatefontchange != prefwin->propfontchange())
{
m_propogatefontchange = prefwin->propfontchange();
setfontHelper(prefwin->Font());
}
delete prefwin;
reader->setfilter(reader->getfilter());
reader->refresh();
}
else
{
delete prefwin;
}
}
void QTReaderApp::showtoolbarprefs()
{
#ifdef USEQPE
CBarPrefs* prefwin = new CBarPrefs(APPDIR, !m_bFloatingDialog, this);
#else
QFileInfo fi;
QDir d = QDir::home(); // "/"
if ( !d.cd(APPDIR) )
{ // "/tmp"
- qWarning( "Cannot find the \"~/%s\" directory", APPDIR );
+ owarn << "Cannot find the \"~/" << APPDIR << "\" directory" << oendl;
d = QDir::home();
d.mkdir(APPDIR);
d.cd(APPDIR);
}
fi.setFile(d, INIFILE);
CBarPrefs* prefwin = new CBarPrefs(fi.absFilePath(), !m_bFloatingDialog, this);
#endif
prefwin->tbpolicy(m_tbpolsave);
prefwin->tbposition(m_tbposition-2);
prefwin->tbmovable(m_tbmovesave);
prefwin->floating(m_bFloatingDialog);
if (prefwin->exec())
{
m_bFloatingDialog = prefwin->floating();
if (
m_tbpolsave != (ToolbarPolicy)prefwin->tbpolicy()
||
m_tbposition != (ToolBarDock)(prefwin->tbposition()+2)
||
m_tbmovesave != prefwin->tbmovable()
)
{
QMessageBox::warning(this, PROGNAME, "Some changes won't take effect\nuntil the next time the\napplication is started");
}
m_tbpolsave = (ToolbarPolicy)prefwin->tbpolicy();
m_tbposition = (ToolBarDock)(prefwin->tbposition()+2);
m_tbmovesave = prefwin->tbmovable();
bool isChanged = prefwin->isChanged();
delete prefwin;
#ifdef USEQPE
Config config( APPDIR );
#else
QFileInfo fi;
QDir d = QDir::home(); // "/"
if ( !d.cd(APPDIR) )
{ // "/tmp"
- qWarning( "Cannot find the \"~/%s\" directory", APPDIR );
+ owarn << "Cannot find the \"~/" << APPDIR << "\" directory" << oendl;
d = QDir::home();
d.mkdir(APPDIR);
d.cd(APPDIR);
}
fi.setFile(d, INIFILE);
Config config( fi.absFilePath() );
#endif
if (isChanged) addtoolbars(&config);
}
else
{
delete prefwin;
}
}
void QTReaderApp::showinfo()
{
unsigned long fs, ts, pl;
if (reader->empty())
{
QMessageBox::information(this, PROGNAME, "No file loaded", 1);
}
else
{
reader->sizes(fs,ts);
pl = reader->pagelocate();
m_infoWin->setFileSize(fs);
m_infoWin->setTextSize(ts);
m_infoWin->setRatio(100-(100*fs + (ts >> 1))/ts);
m_infoWin->setLocation(pl);
m_infoWin->setRead((100*pl + (ts >> 1))/ts);
editorStack->raiseWidget( m_infoWin );
m_infoWin->setFocus();
}
}
void QTReaderApp::addAnno(const QString& name, const QString& text, size_t posn)
{
if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>;
#ifdef _UNICODE
CBuffer buff(name.length()+1);
int i;
for (i = 0; i < name.length(); i++)
{
buff[i] = name[i].unicode();
}
buff[i] = 0;
CBuffer buff2(text.length()+1);
for (i = 0; i < text.length(); i++)
{
buff2[i] = text[i].unicode();
}
buff2[i] = 0;
pBkmklist->push_front(Bkmk(buff.data(), buff2.data(), posn));
#else
pBkmklist->push_front(Bkmk((const tchar*)text,posn));
#endif
m_fBkmksChanged = true;
pBkmklist->sort();
}
void QTReaderApp::addAnno(const QString& name, const QString& text)
{
if (m_annoIsEditing)
{
if (name.isEmpty())
{
QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nPlease try again", 1);
}
else
{
addAnno(name, text, m_annoWin->getPosn());
}
showEditTools();
}
else
{
if (m_annoWin->edited())
{
CBuffer buff(text.length()+1);
int i;
for (i = 0; i < text.length(); i++)
{
buff[i] = text[i].unicode();
}
buff[i] = 0;
m_fBkmksChanged = true;
m_anno->setAnno(buff.data());
}
bool found = findNextBookmark(m_anno->value()+1);
if (found)
{
m_annoWin->setName(toQString(m_anno->name()));
m_annoWin->setAnno(toQString(m_anno->anno()));
}
else
{
showEditTools();
}
}
}
bool QTReaderApp::findNextBookmark(size_t start)
{
bool found = false;
for (CList<Bkmk>::iterator iter = pBkmklist->begin(); iter != pBkmklist->end(); iter++)
{
if (iter->value() >= start)
{
if (iter->value() < reader->locate())
{
found = true;
m_anno = iter.pContent();
}
break;
}
}
return found;
}
void QTReaderApp::addanno()
{
if (reader->empty())
{
QMessageBox::information(this, PROGNAME, "No file loaded", 1);
}
else
{
m_annoWin->setName("");
m_annoWin->setAnno("");
m_annoWin->setPosn(reader->pagelocate());
m_annoIsEditing = true;
editorStack->raiseWidget( m_annoWin );
#ifdef USEQPE
Global::showInputMethod();
#endif
m_annoWin->setFocus();
}
}
void QTReaderApp::infoClose()
{
showEditTools();
}
/*
void QTReaderApp::fileRevert()
{
clear();
fileOpen();
}
void QTReaderApp::editCut()
{
#ifndef QT_NO_CLIPBOARD
editor->cut();
#endif
}
*/
void QTReaderApp::editMark()
{
m_savedpos = reader->pagelocate();
}
void QTReaderApp::editCopy()
{
QClipboard* cb = QApplication::clipboard();
QString text;
int ch;
unsigned long currentpos = reader->pagelocate();
unsigned long endpos = reader->locate();
if (m_savedpos == 0xffffffff)
{
m_savedpos = currentpos;
}
reader->jumpto(m_savedpos);
while (reader->explocate() < endpos && (ch = reader->getch()) != UEOF)
{
text += ch;
}
cb->setText(text);
reader->locate(currentpos);
m_savedpos = 0xffffffff;
}
void QTReaderApp::gotoStart()
{
reader->locate(reader->buffdoc.startSection());
}
void QTReaderApp::gotoEnd()
{
reader->dopageup(reader->buffdoc.endSection());
}
void QTReaderApp::pageup()
{
reader->NavUp();
}
void QTReaderApp::pagedn()
{
reader->NavDown();
}
void QTReaderApp::pagemode(bool _b)
{
reader->setpagemode(_b);
}
/*
void QTReaderApp::setspacing()
{
m_nRegAction = cMonoSpace;
char lcn[20];
sprintf(lcn, "%lu", reader->m_charpc);
regEdit->setText(lcn);
do_regedit();
}
*/
void QTReaderApp::settarget()
{
m_nRegAction = cSetTarget;
QString text = ((m_targetapp.isEmpty()) ? QString("") : m_targetapp)
+ "/"
+ ((m_targetmsg.isEmpty()) ? QString("") : m_targetmsg);
regEdit->setText(text);
do_regedit();
}
/*
void QTReaderApp::do_mono(const QString& lcn)
{
bool ok;
unsigned long ulcn = lcn.toULong(&ok);
if (ok)
{
reader->m_charpc = ulcn;
reader->setfont();
reader->refresh();
// reader->setmono(true);
}
else
QMessageBox::information(this, PROGNAME, "Must be a number");
}
*/
/*
void QTReaderApp::editPaste()
{
#ifndef QT_NO_CLIPBOARD
editor->paste();
#endif
}
*/
void QTReaderApp::editFind()
{
searchStart = reader->pagelocate();
#ifdef __ISEARCH
searchStack = new QStack<searchrecord>;
#endif
#ifdef USEQPE
Global::showInputMethod();
#endif
searchBar->show();
searchVisible = TRUE;
searchEdit->setFocus();
#ifdef __ISEARCH
searchStack->push(new searchrecord("",reader->pagelocate()));
#endif
}
void QTReaderApp::findNext()
{
-// // qDebug("findNext called\n");
+// // odebug << "findNext called\n" << oendl;
#ifdef __ISEARCH
QString arg = searchEdit->text();
#else
QRegExp arg = searchEdit->text();
#endif
CDrawBuffer test(&(reader->m_fontControl));
size_t start = reader->pagelocate();
reader->jumpto(start);
reader->getline(&test);
dosearch(start, test, arg);
}
void QTReaderApp::findClose()
{
searchVisible = FALSE;
searchEdit->setText("");
#ifdef USEQPE
Global::hideInputMethod();
#endif
searchBar->hide();
#ifdef __ISEARCH
// searchStack = new QStack<searchrecord>;
while (!searchStack->isEmpty())
{
delete searchStack->pop();
}
delete searchStack;
#endif
reader->setFocus();
}
void QTReaderApp::regClose()
{
regVisible = FALSE;
regEdit->setText("");
regBar->hide();
#ifdef USEQPE
Global::hideInputMethod();
#endif
reader->setFocus();
}
#ifdef __ISEARCH
bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QString& arg)
#else
bool QTReaderApp::dosearch(size_t start, CDrawBuffer& test, const QRegExp& arg)
#endif
{
bool ret = true;
unsigned long fs, ts;
reader->sizes(fs,ts);
size_t pos = reader->locate();
pbar->setGeometry(searchBar->x(),searchBar->y(),searchBar->width(), searchBar->height());
pbar->show();
pbar->raise();
pbar->reset();
int offset;
int lastpc = (100*pos)/ts;
pbar->setProgress(lastpc);
// qApp->processEvents();
if (reader->buffdoc.getpara(test) >= 0)
{
reader->setFocus();
#ifdef __ISEARCH
while (strstr(test.data(),(const tchar*)arg) == NULL)
#else
#ifdef _UNICODE
while ((offset = arg.match(toQString(test.data()))) == -1)
#else
while (arg.match(test.data()) == -1)
#endif
#endif
{
pos = reader->locate();
int pc = (100*pos)/ts;
if (pc != lastpc)
{
pbar->setProgress(pc);
qApp->processEvents();
reader->setFocus();
lastpc = pc;
}
if (reader->buffdoc.getpara(test) < 0)
{
if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2)
pos = searchStart;
else
pos = start;
findClose();
pbar->hide();
reader->locate(pos);
return false;
}
}
-// qDebug("Found it at %u:%u", pos, offset);
+// odebug << "Found it at " << pos << ":" << offset << "" << oendl;
pbar->hide();
-// qDebug("Hid");
+// odebug << "Hid" << oendl;
reader->locate(pos+offset);
-// qDebug("Loacted");
-// qDebug("page up");
+// odebug << "Loacted" << oendl;
+// odebug << "page up" << oendl;
ret = true;
}
else
{
if (QMessageBox::warning(this, "Can't find", searchEdit->text(), 1, 2) == 2)
pos = searchStart;
else
pos = start;
ret = false;
findClose();
}
return ret;
}
#ifdef __ISEARCH
void QTReaderApp::search(const QString & arg)
{
searchrecord* ss = searchStack->top();
CBuffer test;
size_t start = reader->pagelocate();
bool haspopped = false;
while (arg.left(ss->s.length()) != ss->s)
{
haspopped = true;
start = ss->pos;
// reader->locate(start);
searchStack->pop();
delete ss;
}
if (haspopped) reader->locate(start);
/*
if (arg.length() < ss->len)
{
start = ss->pos;
reader->locate(start);
searchStack->pop();
delete ss;
}
*/
else
{
start = reader->pagelocate();
reader->jumpto(start);
searchStack->push(new searchrecord(arg,start));
}
dosearch(start, test, arg);
}
#else
void QTReaderApp::search()
{
findNext();
}
#endif
void QTReaderApp::openFile( const QString &f )
{
-// qDebug("File:%s", (const char*)f);
+// odebug << "File:" << f << "" << oendl;
// openFile(DocLnk(f));
//}
//
//void QTReaderApp::openFile( const DocLnk &f )
//{
clear();
QFileInfo fm(f);
if ( fm.exists() )
{
// QMessageBox::information(0, "Progress", "Calling fileNew()");
#ifdef USEQPE
if (fm.extension( FALSE ) == "desktop")
{
DocLnk d(f);
QFileInfo fnew(d.file());
fm = fnew;
if (!fm.exists()) return;
}
#endif
clear();
reader->setText(fm.baseName(), fm.absFilePath());
m_loadedconfig = readconfig(reader->m_string, false);
showEditTools();
readbkmks();
m_savedpos = 0xffffffff;
}
else
{
QMessageBox::information(this, PROGNAME, "File does not exist");
reader->m_lastfile = QString::null;
}
}
/*
void QTReaderApp::resizeEvent(QResizeEvent* e)
{
if (m_fullscreen)
{
showNormal();
showFullScreen();
}
}
*/
void QTReaderApp::handlekey(QKeyEvent* e)
{
-// qDebug("Keypress event");
+// odebug << "Keypress event" << oendl;
timeb now;
ftime(&now);
unsigned long etime = (1000*(now.time - m_lastkeytime.time) + now.millitm)-m_lastkeytime.millitm;
if (etime < m_debounce)
{
return;
}
m_lastkeytime = now;
switch(e->key())
{
case Key_Escape:
-// qDebug("escape event");
+// odebug << "escape event" << oendl;
if (m_disableesckey)
{
m_disableesckey = false;
}
else
{
m_bcloseDisabled = true;
if (m_fullscreen)
{
m_actFullscreen->setOn(false);
e->accept();
}
else
{
-// qDebug("escape action");
+// odebug << "escape action" << oendl;
doAction(m_escapeTarget, e);
}
}
break;
case Key_Space:
{
doAction(m_spaceTarget, e);
}
break;
case Key_Return:
{
doAction(m_returnTarget, e);
}
break;
case Key_Left:
{
if (reader->m_autoScroll && m_leftScroll)
{
reader->reduceScroll();
}
else
{
doAction(m_leftTarget, e);
}
}
break;
case Key_Right:
{
if (reader->m_autoScroll && m_rightScroll)
{
reader->increaseScroll();
}
else
{
doAction(m_rightTarget, e);
}
}
break;
case Key_Up:
{
if (reader->m_autoScroll && m_upScroll)
{
reader->increaseScroll();
}
else
{
doAction(m_upTarget, e);
}
}
break;
case Key_Down:
{
if (reader->m_autoScroll && m_downScroll)
{
reader->reduceScroll();
}
else
{
doAction(m_downTarget, e);
}
}
break;
default:
{
e->ignore();
}
/*
QString msg("Key press was:");
QString key;
msg += key.setNum(e->key());
QMessageBox::information(this, PROGNAME, msg);
*/
}
}
void QTReaderApp::showEditTools()
{
// if ( !doc )
// close();
if (m_fullscreen)
{
if (menubar != NULL) menubar->hide();
if (fileBar != NULL) fileBar->hide();
if (viewBar != NULL) viewBar->hide();
if (navBar != NULL) navBar->hide();
if (markBar != NULL) markBar->hide();
searchBar->hide();
regBar->hide();
#ifdef USEQPE
Global::hideInputMethod();
#endif
m_fontBar->hide();
// showNormal();
showFullScreen();
}
else
{
-// qDebug("him");
+// odebug << "him" << oendl;
#ifdef USEQPE
Global::hideInputMethod();
#endif
-// qDebug("eb");
+// odebug << "eb" << oendl;
menubar->show();
if (fileBar != NULL) fileBar->show();
if (viewBar != NULL) viewBar->show();
if (navBar != NULL) navBar->show();
if (markBar != NULL) markBar->show();
mb->show();
if ( searchVisible )
{
#ifdef USEQPE
Global::showInputMethod();
#endif
searchBar->show();
}
if ( regVisible )
{
#ifdef USEQPE
Global::showInputMethod();
#endif
regBar->show();
}
if (m_fontVisible) m_fontBar->show();
-// qDebug("sn");
+// odebug << "sn" << oendl;
showNormal();
-// qDebug("sm");
+// odebug << "sm" << oendl;
#ifdef USEQPE
showMaximized();
#endif
// setCentralWidget(reader);
}
-// qDebug("uc");
+// odebug << "uc" << oendl;
updateCaption();
-// qDebug("rw");
+// odebug << "rw" << oendl;
editorStack->raiseWidget( reader );
-// qDebug("sf");
+// odebug << "sf" << oendl;
reader->setFocus();
reader->refresh();
}
/*
void QTReaderApp::save()
{
if ( !doc )
return;
if ( !editor->edited() )
return;
QString rt = editor->text();
QString pt = rt;
if ( doc->name().isEmpty() ) {
unsigned ispace = pt.find( ' ' );
unsigned ienter = pt.find( '\n' );
int i = (ispace < ienter) ? ispace : ienter;
QString docname;
if ( i == -1 ) {
if ( pt.isEmpty() )
docname = "Empty Text";
else
docname = pt;
} else {
docname = pt.left( i );
}
doc->setName(docname);
}
FileManager fm;
fm.saveFile( *doc, rt );
}
*/
void QTReaderApp::clear()
{
// if (doc != 0)
// {
// QMessageBox::information(this, PROGNAME, "Deleting doc", 1);
// delete doc;
// QMessageBox::information(this, PROGNAME, "Deleted doc", 1);
// doc = 0;
// }
reader->clear();
}
void QTReaderApp::updateCaption()
{
// if ( !doc )
// setCaption( tr("QTReader") );
// else {
// QString s = doc->name();
// if ( s.isEmpty() )
// s = tr( "Unnamed" );
setCaption( reader->m_string + " - " + tr("Reader") );
// }
}
void QTReaderApp::setDocument(const QString& fileref)
{
bFromDocView = TRUE;
//QMessageBox::information(0, "setDocument", fileref);
openFile(fileref);
// showEditTools();
}
void QTReaderApp::closeEvent( QCloseEvent *e )
{
-// qDebug("Close event");
+// odebug << "Close event" << oendl;
if (m_fullscreen)
{
m_fullscreen = false;
showEditTools();
e->accept();
}
else if (m_dontSave)
{
e->accept();
}
else
{
if (editorStack->visibleWidget() == reader)
{
if ((m_escapeTarget != cesNone) && m_bcloseDisabled)
{
-// qDebug("Close disabled");
+// odebug << "Close disabled" << oendl;
m_bcloseDisabled = false;
e->ignore();
}
else
{
if (m_fontVisible)
{
m_fontBar->hide();
m_fontVisible = false;
}
if (regVisible)
{
regBar->hide();
#ifdef USEQPE
Global::hideInputMethod();
#endif
regVisible = false;
return;
}
if (searchVisible)
{
searchBar->hide();
#ifdef USEQPE
Global::hideInputMethod();
#endif
searchVisible = false;
return;
}
if (m_fBkmksChanged && pBkmklist != NULL)
{
if (QMessageBox::warning(this, PROGNAME, "Save bookmarks?", "Save", "Don't bother") == 0)
savebkmks();
delete pBkmklist;
pBkmklist = NULL;
m_fBkmksChanged = false;
}
bFromDocView = FALSE;
updatefileinfo();
saveprefs();
e->accept();
}
}
else
{
showEditTools();
m_disableesckey = true;
}
}
}
void QTReaderApp::do_gotomark()
{
m_nBkmkAction = cGotoBkmk;
if (!listbkmk(pBkmklist))
QMessageBox::information(this, PROGNAME, "No bookmarks in memory");
}
void QTReaderApp::do_delmark()
{
m_nBkmkAction = cDelBkmk;
if (!listbkmk(pBkmklist))
QMessageBox::information(this, PROGNAME, "No bookmarks in memory");
}
bool QTReaderApp::listbkmk(CList<Bkmk>* plist, const QString& _lab)
{
bkmkselector->clear();
if (_lab.isEmpty())
bkmkselector->setText("Cancel");
else
bkmkselector->setText(_lab);
int cnt = 0;
if (plist != NULL)
{
for (CList<Bkmk>::iterator i = plist->begin(); i != plist->end(); i++)
{
#ifdef _UNICODE
-// qDebug("Item:%s", (const char*)toQString(i->name()));
+// odebug << "Item:" << toQString(i->name()) << "" << oendl;
bkmkselector->insertItem(toQString(i->name()));
#else
bkmkselector->insertItem(i->name());
#endif
cnt++;
}
}
if (cnt > 0)
{
hidetoolbars();
editorStack->raiseWidget( bkmkselector );
return true;
}
else
return false;
}
void QTReaderApp::do_autogen()
{
m_nRegAction = cAutoGen;
regEdit->setText(m_autogenstr);
do_regedit();
}
void QTReaderApp::do_regedit()
{
// fileBar->hide();
reader->bDoUpdates = false;
-// qDebug("Showing regbar");
+// odebug << "Showing regbar" << oendl;
regBar->show();
-// qDebug("Showing kbd");
+// odebug << "Showing kbd" << oendl;
#ifdef USEQPE
Global::showInputMethod();
#endif
regVisible = true;
regEdit->setFocus();
// qApp->processEvents();
reader->bDoUpdates = true;
reader->update();
}
bool QTReaderApp::openfrombkmk(Bkmk* bk)
{
QString fn = toQString(
CFiledata(bk->anno()).name()
);
-// qDebug("fileinfo");
+// odebug << "fileinfo" << oendl;
if (!fn.isEmpty() && QFileInfo(fn).isFile())
{
-// qDebug("Opening");
+// odebug << "Opening" << oendl;
openFile(fn);
struct stat fnstat;
stat((const char *)reader->m_lastfile, &fnstat);
if (CFiledata(bk->anno()).date()
!= fnstat.st_mtime)
{
CFiledata fd(bk->anno());
fd.setdate(fnstat.st_mtime);
bk->value(0);
}
else
{
unsigned short svlen = bk->filedatalen();
unsigned char* svdata = bk->filedata();
reader->putSaveData(svdata, svlen);
// setstate(svdata, svlen);
if (svlen != 0)
{
QMessageBox::warning(this, PROGNAME, "Not all file data used\nNew version?");
}
-// qDebug("updating");
+// odebug << "updating" << oendl;
// showEditTools();
reader->locate(bk->value());
}
return true;
}
else
{
return false;
}
}
void QTReaderApp::gotobkmk(int ind)
{
showEditTools();
switch (m_nBkmkAction)
{
case cOpenFile:
{
// qApp->processEvents();
if (!openfrombkmk((*pOpenlist)[ind]))
{
pOpenlist->erase(ind);
QMessageBox::information(this, PROGNAME, "Can't find file");
}
}
break;
case cGotoBkmk:
reader->locate((*pBkmklist)[ind]->value());
break;
case cDelBkmk:
-//// qDebug("Deleting:%s\n",(*pBkmklist)[ind]->name());
+//// odebug << "Deleting:" << (*pBkmklist)[ind]->name() << "\n" << oendl;
pBkmklist->erase(ind);
m_fBkmksChanged = true;
// pBkmklist->sort();
break;
case cRmBkmkFile:
{
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR);
d.remove(bkmkselector->text(ind));
#else /* USEQPE */
unlink((const char *)Global::applicationFileName(APPDIR,bkmkselector->text(ind)));
#endif /* USEQPE */
}
break;
case cLdConfig:
readconfig(bkmkselector->text(ind), false);
break;
case cRmConfig:
{
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR "/configs");
d.remove(bkmkselector->text(ind));
#else /* USEQPE */
unlink((const char *)Global::applicationFileName(APPDIR "/configs",bkmkselector->text(ind)));
#endif /* USEQPE */
}
break;
case cExportLinks:
{
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR "/urls");
QFileInfo fi(d, bkmkselector->text(ind));
if (fi.exists())
{
QString outfile( QFileDialog::getSaveFileName( QString::null, QString::null, this ) );
if (!outfile.isEmpty())
{
FILE* fout = fopen((const char *)outfile, "w");
if (fout != NULL)
{
FILE* fin = fopen((const char *)fi.absFilePath(), "r");
if (fin != NULL)
{
fprintf(fout, "<html><body>\n");
int ch = 0;
while ((ch = fgetc(fin)) != EOF)
{
fputc(ch, fout);
}
fclose(fin);
fprintf(fout, "</html></body>\n");
d.remove(bkmkselector->text(ind));
}
fclose(fout);
}
else
QMessageBox::information(this, PROGNAME, "Couldn't open output");
}
}
#else /* USEQPE */
FILE* fin = fopen((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind)), "r");
if (fin != NULL)
{
bool allok = false;
fileBrowser* fb = new fileBrowser(true, this,"OpieReader",!m_bFloatingDialog, 0, "*", QString::null);
if (fb->exec())
{
QString outfile = fb->getCurrentFile();
FILE* fout = fopen((const char *)outfile, "w");
if (fout != NULL)
{
fprintf(fout, "<html><body>\n");
int ch = 0;
while ((ch = fgetc(fin)) != EOF)
{
fputc(ch, fout);
}
fprintf(fout, "</html></body>\n");
fclose(fout);
allok = true;
}
else
QMessageBox::information(this, PROGNAME, "Couldn't open output");
}
delete fb;
fclose(fin);
if (allok) unlink((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind)));
}
else
{
QMessageBox::information(this, PROGNAME, "Couldn't open input");
}
/*
CFileSelector *f = new CFileSelector("text/html", this, NULL, !m_bFloatingDialog, TRUE, TRUE );
int ret = f->exec();
- qDebug("Return:%d", ret);
+ odebug << "Return:" << ret << "" << oendl;
DocLnk* doc = f->getDoc();
if (doc != NULL)
{
FILE* fin = fopen((const char *)Global::applicationFileName(APPDIR "/urls",bkmkselector->text(ind)), "r");
QString rt;
rt = "<html><body>\n";
int ch = 0;
while ((ch = fgetc(fin)) != EOF)
{
rt += (char)ch;
}
fclose(fin);
rt += "</html></body>\n";
if ( doc->name().isEmpty() )
{
doc->setName(bkmkselector->text(ind));
}
FileManager fm;
fm.saveFile( *doc, rt );
- qDebug("YES");
+ odebug << "YES" << oendl;
}
else
{
- qDebug("NO");
+ odebug << "NO" << oendl;
}
delete f;
*/
#endif /* USEQPE */
}
break;
}
}
void QTReaderApp::cancelbkmk()
{
if (m_nBkmkAction == cOpenFile)
{
QString fn = usefilebrowser();
if (!fn.isEmpty() && QFileInfo(fn).isFile()) openFile(fn);
}
showEditTools();
}
void QTReaderApp::jump()
{
m_nRegAction = cJump;
char lcn[20];
sprintf(lcn, "%lu", reader->pagelocate());
regEdit->setText(lcn);
do_regedit();
}
void QTReaderApp::do_jump(const QString& lcn)
{
bool ok;
unsigned long ulcn = lcn.toULong(&ok);
if (ok)
reader->locate(ulcn);
else
QMessageBox::information(this, PROGNAME, "Must be a number");
}
void QTReaderApp::do_regaction()
{
reader->bDoUpdates = false;
regBar->hide();
#ifdef USEQPE
Global::hideInputMethod();
#endif
regVisible = false;
switch(m_nRegAction)
{
case cAutoGen:
do_autogen(regEdit->text());
break;
case cAddBkmk:
do_addbkmk(regEdit->text());
break;
case cJump:
do_jump(regEdit->text());
break;
/*
case cMonoSpace:
do_mono(regEdit->text());
break;
*/
case cSetTarget:
do_settarget(regEdit->text());
break;
#ifdef _SCROLLPIPE
case cSetPipeTarget:
do_setpipetarget(regEdit->text());
break;
#endif
case cSetConfigName:
-// qDebug("Saving config");
+// odebug << "Saving config" << oendl;
do_saveconfig(regEdit->text(), false);
break;
}
// reader->restore();
// fileBar->show();
reader->setFocus();
// qApp->processEvents();
reader->bDoUpdates = true;
reader->update();
}
void QTReaderApp::do_settarget(const QString& _txt)
{
int ind = _txt.find('/');
if (ind == -1)
{
m_targetapp = "";
m_targetmsg = "";
QMessageBox::information(this, PROGNAME, "Format is\nappname/messagename");
}
else
{
m_targetapp = _txt.left(ind);
m_targetmsg = _txt.right(_txt.length()-ind-1);
}
}
void QTReaderApp::chooseencoding()
{
m_fontSelector->clear();
m_fontSelector->insertItem("Ascii");
m_fontSelector->insertItem("UTF-8");
m_fontSelector->insertItem("UCS-2(BE)");
m_fontSelector->insertItem("USC-2(LE)");
m_fontSelector->insertItem("Palm");
for (unicodetable::iterator iter = unicodetable::begin(); iter != unicodetable::end(); iter++)
{
m_fontSelector->insertItem(iter->mime);
} // delete the FontDatabase!!!
m_fontSelector->setCurrentItem (reader->m_encd);
m_fontAction = cChooseEncoding;
m_fontBar->show();
m_fontVisible = true;
}
void QTReaderApp::setfont()
{
m_fontSelector->clear();
{
#ifdef USEQPE
FontDatabase f;
#else
QFontDatabase f;
#endif
QStringList flist = f.families();
m_fontSelector->insertStringList(flist);
} // delete the FontDatabase!!!
for (int i = 1; i <= m_fontSelector->count(); i++)
{
if (m_fontSelector->text(i) == reader->m_fontname)
{
m_fontSelector->setCurrentItem(i);
break;
}
}
m_fontAction = cChooseFont;
m_fontBar->show();
m_fontVisible = true;
}
void QTReaderApp::setfontHelper(const QString& lcn, int size)
{
if (size == 0) size = reader->m_fontControl.currentsize();
if (m_propogatefontchange)
{
QFont f(lcn, 10);
bkmkselector->setFont( f );
regEdit->setFont( f );
searchEdit->setFont( f );
m_annoWin->setFont( f );
}
reader->m_fontname = lcn;
if (!reader->ChangeFont(size))
{
reader->ChangeFont(size);
}
}
void QTReaderApp::do_setencoding(int i)
{
-// qDebug("setencoding:%d", i);
+// odebug << "setencoding:" << i << "" << oendl;
if (m_fontAction == cChooseEncoding)
{
reader->setencoding(i);
}
reader->refresh();
m_fontBar->hide();
m_fontVisible = false;
-// qDebug("showedit");
+// odebug << "showedit" << oendl;
if (reader->isVisible()) showEditTools();
-// qDebug("showeditdone");
+// odebug << "showeditdone" << oendl;
}
void QTReaderApp::do_setfont(const QString& lcn)
{
if (m_fontAction == cChooseFont)
{
setfontHelper(lcn);
}
reader->refresh();
m_fontBar->hide();
m_fontVisible = false;
-// qDebug("showedit");
+// odebug << "showedit" << oendl;
//if (reader->isVisible())
showEditTools();
-// qDebug("showeditdone");
+// odebug << "showeditdone" << oendl;
}
void QTReaderApp::do_autogen(const QString& regText)
{
unsigned long fs, ts;
reader->sizes(fs,ts);
-// // qDebug("Reg:%s\n", (const tchar*)(regEdit->text()));
+// // odebug << "Reg:" << (const tchar*)(regEdit->text()) << "\n" << oendl;
m_autogenstr = regText;
QRegExp re(regText);
CBuffer buff;
if (pBkmklist != NULL) delete pBkmklist;
pBkmklist = new CList<Bkmk>;
m_fBkmksChanged = true;
pbar->setGeometry(regBar->x(),regBar->y(),regBar->width(), regBar->height());
pbar->show();
pbar->raise();
pbar->reset();
reader->update();
qApp->processEvents();
reader->setFocus();
reader->jumpto(0);
int lastpc = 0;
int i = 0;
while (i >= 0)
{
unsigned int lcn = reader->locate();
int pc = (100*lcn)/ts;
if (pc != lastpc)
{
pbar->setProgress(pc);
qApp->processEvents();
if (reader->locate() != lcn) reader->jumpto(lcn);
reader->setFocus();
lastpc = pc;
}
i = reader->buffdoc.getpara(buff);
#ifdef _UNICODE
if (re.match(toQString(buff.data())) != -1)
#else
if (re.match(buff.data()) != -1)
#endif
pBkmklist->push_back(Bkmk(buff.data(), NULL, lcn));
}
pBkmklist->sort();
pbar->setProgress(100);
qApp->processEvents();
pbar->hide();
reader->refresh();
}
void QTReaderApp::saveprefs()
{
-// qDebug("saveprefs");
+// odebug << "saveprefs" << oendl;
// reader->saveprefs("uqtreader");
// if (!m_loadedconfig)
do_saveconfig( APPDIR, true );
/*
Config config( APPDIR );
config.setGroup( "View" );
reader->m_lastposn = reader->pagelocate();
config.writeEntry("FloatDialogs", m_bFloatingDialog);
config.writeEntry( "StripCr", reader->bstripcr );
config.writeEntry( "AutoFmt", reader->bautofmt );
config.writeEntry( "TextFmt", reader->btextfmt );
config.writeEntry( "StripHtml", reader->bstriphtml );
config.writeEntry( "Dehyphen", reader->bdehyphen );
config.writeEntry( "Depluck", reader->bdepluck );
config.writeEntry( "Dejpluck", reader->bdejpluck );
config.writeEntry( "OneSpace", reader->bonespace );
config.writeEntry( "Unindent", reader->bunindent );
config.writeEntry( "Repara", reader->brepara );
config.writeEntry( "DoubleSpace", reader->bdblspce );
config.writeEntry( "Indent", reader->bindenter );
config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) );
config.writeEntry( "ScrollDelay", reader->m_delay);
config.writeEntry( "LastFile", reader->m_lastfile );
config.writeEntry( "LastPosn", (int)(reader->pagelocate()) );
config.writeEntry( "PageMode", reader->m_bpagemode );
config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced );
config.writeEntry( "SwapMouse", reader->m_swapmouse);
config.writeEntry( "Fontname", reader->m_fontname );
config.writeEntry( "Encoding", reader->m_encd );
config.writeEntry( "CharSpacing", reader->m_charpc );
config.writeEntry( "Overlap", (int)(reader->m_overlap) );
config.writeEntry( "Margin", (int)reader->m_border );
config.writeEntry( "TargetApp", m_targetapp );
config.writeEntry( "TargetMsg", m_targetmsg );
#ifdef _SCROLLPIPE
config.writeEntry( "PipeTarget", reader->m_pipetarget );
config.writeEntry( "PauseAfterPara", reader->m_pauseAfterEachPara );
#endif
config.writeEntry( "TwoTouch", m_twoTouch );
config.writeEntry( "Annotation", m_doAnnotation);
config.writeEntry( "Dictionary", m_doDictionary);
config.writeEntry( "Clipboard", m_doClipboard);
config.writeEntry( "SpaceTarget", m_spaceTarget);
config.writeEntry( "EscapeTarget", m_escapeTarget);
config.writeEntry( "ReturnTarget", m_returnTarget);
config.writeEntry( "LeftTarget", m_leftTarget);
config.writeEntry( "RightTarget", m_rightTarget);
config.writeEntry( "UpTarget", m_upTarget);
config.writeEntry( "DownTarget", m_downTarget);
config.writeEntry("LeftScroll", m_leftScroll);
config.writeEntry("RightScroll", m_rightScroll);
config.writeEntry("UpScroll", m_upScroll);
config.writeEntry("DownScroll", m_downScroll);
#ifdef REPALM
config.writeEntry( "Repalm", reader->brepalm );
#endif
config.writeEntry( "Remap", reader->bremap );
config.writeEntry( "Peanut", reader->bpeanut );
config.writeEntry( "MakeBold", reader->bmakebold );
config.writeEntry( "Continuous", reader->m_continuousDocument );
config.writeEntry( "FullJust", reader->bfulljust );
config.writeEntry( "ExtraSpace", reader->getextraspace() );
config.writeEntry( "ExtraLead", reader->getlead() );
config.writeEntry( "Basesize", (int)reader->getBaseSize());
config.writeEntry( "RequestorFontChange", m_propogatefontchange);
config.setGroup( "Toolbar" );
config.writeEntry("Movable", m_tbmovesave);
config.writeEntry("Policy", m_tbpolsave);
config.writeEntry("Position", m_tbposition);
*/
savefilelist();
}
/*
void QTReaderApp::oldFile()
{
-// qDebug("oldFile called");
+// odebug << "oldFile called" << oendl;
reader->setText(true);
-// qDebug("settext called");
+// odebug << "settext called" << oendl;
showEditTools();
-// qDebug("showedit called");
+// odebug << "showedit called" << oendl;
}
*/
/*
void info_cb(Fl_Widget* o, void* _data)
{
if (infowin == NULL)
{
infowin = new Fl_Window(160,240);
filename = new Fl_Output(45,5,110,14,"Filename");
filesize = new Fl_Output(45,25,110,14,"Filesize");
textsize = new Fl_Output(45,45,110,14,"Textsize");
comprat = new CBar(45,65,110,14,"Ratio %");
posn = new Fl_Output(45,85,110,14,"Location");
frcn = new CBar(45,105,110,14,"% Read");
about = new Fl_Multiline_Output(5,125,150,90);
about->value("TWReader - $Name$\n\nA file reader program for the Agenda\n\nReads text, PalmDoc and ppms format files");
Fl_Button *jump_accept = new Fl_Button(62,220,35,14,"Okay");
infowin->set_modal();
}
if (((reader_ui *)_data)->g_filename[0] != '\0')
{
unsigned long fs,ts;
tchar sz[20];
((reader_ui *)_data)->input->sizes(fs,ts);
unsigned long pl = ((reader_ui *)_data)->input->locate();
filename->value(((reader_ui *)_data)->g_filename);
sprintf(sz,"%u",fs);
filesize->value(sz);
sprintf(sz,"%u",ts);
textsize->value(sz);
comprat->value(100-(100*fs + (ts >> 1))/ts);
sprintf(sz,"%u",pl);
posn->value(sz);
frcn->value((100*pl + (ts >> 1))/ts);
}
infowin->show();
}
*/
void QTReaderApp::savebkmks()
{
if (pBkmklist != NULL)
{
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR);
QFileInfo fi(d, reader->m_string);
BkmkFile bf((const char *)fi.absFilePath(), true);
#else /* USEQPE */
BkmkFile bf((const char *)Global::applicationFileName(APPDIR,reader->m_string), true);
#endif /* USEQPE */
bf.write(*pBkmklist);
}
m_fBkmksChanged = false;
}
void QTReaderApp::readfilelist()
{
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR);
QFileInfo fi(d, ".openfiles");
BkmkFile bf((const char *)fi.absFilePath());
#else /* USEQPE */
BkmkFile bf((const char *)Global::applicationFileName(APPDIR,".openfiles"));
#endif /* USEQPE */
-// qDebug("Reading open files");
+// odebug << "Reading open files" << oendl;
pOpenlist = bf.readall();
-// if (pOpenlist != NULL) qDebug("...with success");
-// else qDebug("...without success!");
+// if (pOpenlist != NULL) odebug << "...with success" << oendl;
+// else odebug << "...without success!" << oendl;
}
void QTReaderApp::savefilelist()
{
if (pOpenlist != NULL)
{
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR);
QFileInfo fi(d, ".openfiles");
BkmkFile bf((const char *)fi.absFilePath(), true);
#else /* USEQPE */
BkmkFile bf((const char *)Global::applicationFileName(APPDIR,".openfiles"), true);
#endif /* USEQPE */
-// qDebug("Writing open files");
+// odebug << "Writing open files" << oendl;
bf.write(*pOpenlist);
}
}
void QTReaderApp::readbkmks()
{
if (pBkmklist != NULL)
{
delete pBkmklist;
}
struct stat fnstat;
struct stat bkstat;
#ifndef USEQPE
QDir d = QDir::home(); // "/"
d.cd(APPDIR);
QFileInfo fi(d, reader->m_string);
#endif /* ! USEQPE */
if (
stat((const char *)reader->m_lastfile, &fnstat) == 0
&&
#ifndef USEQPE
stat((const char *)fi.absFilePath(), &bkstat) == 0
#else /* USEQPE */
stat((const char *)Global::applicationFileName(APPDIR,reader->m_string), &bkstat) == 0
#endif /* USEQPE */
)
{
if (bkstat.st_mtime < fnstat.st_mtime)
{
#ifndef USEQPE
unlink((const char *)fi.absFilePath());
#else /* USEQPE */
unlink((const char *)Global::applicationFileName(APPDIR,reader->m_string));
#endif /* USEQPE */
}
}
#ifndef USEQPE
BkmkFile bf((const char *)fi.absFilePath());
#else /* USEQPE */
BkmkFile bf((const char *)Global::applicationFileName(APPDIR,reader->m_string));
#endif /* USEQPE */
pBkmklist = bf.readall();
m_fBkmksChanged = bf.upgraded();
if (pBkmklist == NULL)
{
pBkmklist = reader->getbkmklist();
}
if (pBkmklist != NULL)
pBkmklist->sort();
}
void QTReaderApp::addbkmk()
{
m_nRegAction = cAddBkmk;
regEdit->setText(reader->firstword());
do_regedit();
}
void QTReaderApp::do_addbkmk(const QString& text)
{
if (text.isEmpty())
{
QMessageBox::information(this, PROGNAME, "Need a name for the bookmark\nSelect add again", 1);
}
else
{
if (pBkmklist == NULL) pBkmklist = new CList<Bkmk>;
#ifdef _UNICODE
CBuffer buff;
int i = 0;
for (i = 0; i < text.length(); i++)
{
buff[i] = text[i].unicode();
}
buff[i] = 0;
pBkmklist->push_front(Bkmk(buff.data(), NULL, reader->pagelocate()));
#else
pBkmklist->push_front(Bkmk((const tchar*)text, reader->pagelocate()));
#endif
m_fBkmksChanged = true;
pBkmklist->sort();
}
}
void QTReaderApp::OnRedraw()
{
if ((pBkmklist != NULL) && (m_bkmkAvail != NULL))
{
bool found = findNextBookmark(reader->pagelocate());
m_bkmkAvail->setEnabled(found);
}
}
void QTReaderApp::showAnnotation()
{
m_annoWin->setName(toQString(m_anno->name()));
m_annoWin->setAnno(toQString(m_anno->anno()));
m_annoIsEditing = false;
#ifdef USEQPE
Global::showInputMethod();
#endif
editorStack->raiseWidget( m_annoWin );
m_annoWin->setFocus();
}
void QTReaderApp::OnWordSelected(const QString& wrd, size_t posn, const QString& line)
{
-//// qDebug("OnWordSelected(%u):%s", posn, (const char*)wrd);
+//// odebug << "OnWordSelected(" << posn << "):" << wrd << "" << oendl;
if (m_doClipboard)
{
QClipboard* cb = QApplication::clipboard();
cb->setText(wrd);
#ifdef USEQPE
if (wrd.length() > 10)
{
Global::statusMessage(wrd.left(8) + "..");
}
else
{
Global::statusMessage(wrd);
}
#endif
}
if (m_doAnnotation)
{
// addAnno(wrd, "Need to be able to edit this", posn);
m_annoWin->setName(line);
m_annoWin->setAnno("");
m_annoWin->setPosn(posn);
m_annoIsEditing = true;
#ifdef USEQPE
Global::showInputMethod();
#endif
editorStack->raiseWidget( m_annoWin );
}
#ifdef USEQPE
if (m_doDictionary)
{
if (!m_targetapp.isEmpty() && !m_targetmsg.isEmpty())
{
QCopEnvelope e(("QPE/Application/"+m_targetapp).utf8(), (m_targetmsg+"(QString)").utf8());
e << wrd;
}
}
#endif
}
void QTReaderApp::doAction(ActionTypes a, QKeyEvent* e)
{
if (a == 0)
{
e->ignore();
}
else
{
e->accept();
-// qDebug("Accepted");
+// odebug << "Accepted" << oendl;
switch (a)
{
case cesOpenFile:
{
fileOpen();
}
break;
case cesAutoScroll:
{
reader->setautoscroll(!reader->m_autoScroll);
setScrollState(reader->m_autoScroll);
}
break;
case cesActionMark:
{
addbkmk();
}
break;
case cesFullScreen:
{
m_actFullscreen->setOn(!m_fullscreen);
}
break;
case cesActionAnno:
{
addanno();
}
break;
case cesZoomIn:
zoomin();
break;
case cesZoomOut:
zoomout();
break;
case cesBack:
reader->goBack();
break;
case cesForward:
reader->goForward();
break;
case cesHome:
reader->goHome();
break;
case cesPageUp:
reader->dopageup();
break;
case cesPageDown:
reader->dopagedn();
break;
case cesLineUp:
reader->lineUp();
break;
case cesLineDown:
reader->lineDown();
break;
case cesStartDoc:
gotoStart();
break;
case cesEndDoc:
gotoEnd();
break;
default:
- qDebug("Unknown ActionType:%u", a);
+ odebug << "Unknown ActionType:" << a << "" << oendl;
break;
}
}
}
void QTReaderApp::setTwoTouch(bool _b) { reader->setTwoTouch(_b); }
void QTReaderApp::restoreFocus() { reader->setFocus(); }
void QTReaderApp::SaveConfig()
{
m_nRegAction = cSetConfigName;
regEdit->setText(reader->m_string);
do_regedit();
}
void QTReaderApp::do_saveconfig(const QString& _txt, bool full)
{
-// qDebug("do_saveconfig:%s", (const char*)_txt);
+// odebug << "do_saveconfig:" << _txt << "" << oendl;
#ifdef USEQPE
QString configname;
Config::Domain dom;
if (full)
{
configname = _txt;
dom = Config::User;
}
else
{
configname = Global::applicationFileName(APPDIR "/configs", _txt);
dom = Config::File;
}
Config config(configname, dom);
config.setGroup( "View" );
#else
QFileInfo fi;
if (full)
{
-// qDebug("full:%s", (const char*)_txt);
+// odebug << "full:" << _txt << "" << oendl;
QDir d = QDir::home(); // "/"
if ( !d.cd(_txt) )
{ // "/tmp"
- qWarning( "Cannot find the \"~/%s\" directory", (const char*)_txt );
+ owarn << "Cannot find the \"~/" << _txt << "\" directory" << oendl;
d = QDir::home();
d.mkdir(_txt);
d.cd(_txt);
}
fi.setFile(d, INIFILE);
}
else
{
QDir d = QDir::home(); // "/"
if ( !d.cd(APPDIR) )
{ // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "\" directory" << oendl;
d = QDir::home();
d.mkdir(APPDIR);
d.cd(APPDIR);
}
if ( !d.cd("configs") )
{ // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "/configs\" directory" << oendl;
d = QDir::home();
d.cd(APPDIR);
d.mkdir("configs");
d.cd("configs");
}
fi.setFile(d, _txt);
}
-// qDebug("Path:%s", (const char*)fi.absFilePath());
+// odebug << "Path:" << fi.absFilePath() << "" << oendl;
Config config(fi.absFilePath());
#endif
config.writeEntry( "StripCr", reader->bstripcr );
config.writeEntry( "AutoFmt", reader->bautofmt );
config.writeEntry( "TextFmt", reader->btextfmt );
config.writeEntry( "StripHtml", reader->bstriphtml );
config.writeEntry( "Dehyphen", reader->bdehyphen );
config.writeEntry( "Depluck", reader->bdepluck );
config.writeEntry( "Dejpluck", reader->bdejpluck );
config.writeEntry( "OneSpace", reader->bonespace );
config.writeEntry( "Unindent", reader->bunindent );
config.writeEntry( "Repara", reader->brepara );
config.writeEntry( "DoubleSpace", reader->bdblspce );
config.writeEntry( "Indent", reader->bindenter );
config.writeEntry( "FontSize", (int)(reader->m_fontControl.currentsize()) );
config.writeEntry( "ScrollDelay", reader->m_delay);
if (full)
{
config.writeEntry("Debounce", m_debounce);
config.writeEntry("FloatDialogs", m_bFloatingDialog);
reader->m_lastposn = reader->pagelocate();
config.writeEntry( "LastFile", reader->m_lastfile );
config.writeEntry( "LastPosn", (int)(reader->pagelocate()) );
}
config.writeEntry( "PageMode", reader->m_bpagemode );
config.writeEntry( "MonoSpaced", reader->m_bMonoSpaced );
config.writeEntry( "SwapMouse", reader->m_swapmouse);
config.writeEntry( "Fontname", reader->m_fontname );
config.writeEntry( "Encoding", reader->m_encd );
config.writeEntry( "CharSpacing", reader->m_charpc );
config.writeEntry( "Overlap", (int)(reader->m_overlap) );
config.writeEntry( "Margin", (int)reader->m_border );
config.writeEntry( "TargetApp", m_targetapp );
config.writeEntry( "TargetMsg", m_targetmsg );
#ifdef _SCROLLPIPE
config.writeEntry( "PipeTarget", reader->m_pipetarget );
config.writeEntry( "PauseAfterPara", reader->m_pauseAfterEachPara );
#endif
config.writeEntry( "TwoTouch", m_twoTouch );
config.writeEntry( "Annotation", m_doAnnotation);
config.writeEntry( "Dictionary", m_doDictionary);
config.writeEntry( "Clipboard", m_doClipboard);
config.writeEntry( "SpaceTarget", m_spaceTarget);
config.writeEntry( "EscapeTarget", m_escapeTarget);
config.writeEntry( "ReturnTarget", m_returnTarget);
config.writeEntry( "LeftTarget", m_leftTarget);
config.writeEntry( "RightTarget", m_rightTarget);
config.writeEntry( "UpTarget", m_upTarget);
config.writeEntry( "DownTarget", m_downTarget);
config.writeEntry("LeftScroll", m_leftScroll);
config.writeEntry("RightScroll", m_rightScroll);
config.writeEntry("UpScroll", m_upScroll);
config.writeEntry("DownScroll", m_downScroll);
#ifdef REPALM
config.writeEntry( "Repalm", reader->brepalm );
#endif
config.writeEntry( "Remap", reader->bremap );
config.writeEntry( "Peanut", reader->bpeanut );
config.writeEntry( "MakeBold", reader->bmakebold );
config.writeEntry( "Continuous", reader->m_continuousDocument );
config.writeEntry( "FullJust", reader->bfulljust );
config.writeEntry( "ExtraSpace", reader->getextraspace() );
config.writeEntry( "ExtraLead", reader->getlead() );
config.writeEntry( "Basesize", (int)reader->getBaseSize());
config.writeEntry( "RequestorFontChange", m_propogatefontchange);
if (full)
{
config.setGroup( "Toolbar" );
config.writeEntry("Movable", m_tbmovesave);
config.writeEntry("Policy", m_tbpolsave);
config.writeEntry("Position", m_tbposition);
#ifndef USEQPE
config.setGroup( "Geometry" );
config.writeEntry( "x", x() );
config.writeEntry( "y", y() );
config.writeEntry( "width", width() );
config.writeEntry( "height", height() );
#endif
}
}
/*
void QTReaderApp::setstate(unsigned char* _sd, unsigned short _sdlen)
{
unsigned short sdlen;
memcpy(&sdlen, _sd, sizeof(sdlen));
sdlen -= sizeof(sdlen);
_sd += sizeof(sdlen);
statedata* sd;
char* data;
if (sdlen < sizeof(statedata)+1)
{
sdlen = sizeof(statedata)+1;
}
data = new char[sdlen];
sd = (statedata*)data;
memcpy(sd, _sd, sdlen);
data[sdlen] = 0;
reader->setstate(*sd);
delete [] data;
}
void QTReaderApp::getstate(unsigned char*& data, unsigned short& len)
{
unsigned char* olddata = data;
unsigned short oldlen = len;
len = oldlen+sizeof(unsigned short)+sizeof(statedata)+reader->m_fontname.length();
data = new unsigned char[len];
memcpy(data, olddata, oldlen);
delete [] olddata;
memcpy(data+oldlen, &len, sizeof(len));
statedata* sd = (statedata*)(data+oldlen+sizeof(unsigned short));
sd->bstripcr = reader->bstripcr;
sd->btextfmt = reader->btextfmt;
sd->bautofmt = reader->bautofmt;
sd->bstriphtml = reader->bstriphtml;
sd->bpeanut = reader->bpeanut;
sd->bdehyphen = reader->bdehyphen;
sd->bdepluck = reader->bdepluck;
sd->bdejpluck = reader->bdejpluck;
sd->bonespace = reader->bonespace;
sd->bunindent = reader->bunindent;
sd->brepara = reader->brepara;
sd->bdblspce = reader->bdblspce;
sd->m_bpagemode = reader->m_bpagemode;
sd->m_bMonoSpaced = reader->m_bMonoSpaced;
sd->bremap = reader->bremap;
sd->bmakebold = reader->bmakebold;
sd->Continuous = reader->m_continuousDocument;
#ifdef REPALM
sd->brepalm = reader->brepalm;
#endif
sd->bindenter = reader->bindenter;
sd->m_textsize = reader->m_textsize; //reader->m_fontControl.currentsize()
sd->m_encd = reader->m_encd;
sd->m_charpc = reader->m_charpc;
strcpy(sd->m_fontname, reader->m_fontname.latin1());
}
*/
#ifdef _SCRIPT
void QTReaderApp::RunScript()
{
fileBrowser* fb = new fileBrowser(this,"OpieReader",!m_bFloatingDialog,
0,
// WStyle_Customize | WStyle_NoBorderEx,
"*", Global::applicationFileName(APPDIR "/scripts", ""));
QString fn;
if (fb->exec())
{
fn = fb->fileList[0];
}
delete fb;
if ( !fn.isEmpty() && fork() == 0 )
{
execlp((const char *)fn,(const char *)fn,NULL);
}
}
void QTReaderApp::SaveScript(const char* sname)
{
FILE* f = fopen(sname,"w");
if (f != NULL)
{
#ifdef OPIE
fprintf(f, "#!/bin/sh\nmsg() {\n\tqcop QPE/Application/reader \"$1\" \"$2\" \"$3\"\n}\n");
#else
fprintf(f, "#!/bin/bash\nmsg() {\n\tqcop QPE/Application/uqtreader \"$1\" \"$2\" \"$3\"\n}\n");
#endif
fprintf(f, "msg \"Update(int)\" 0\n");
fprintf(f, "msg \"Layout/StripCR(int)\" %d\n", (reader->bstripcr) ? 1:0);
if (reader->btextfmt) fprintf(f, "msg \"Markup(QString)\" \"Text\"\n");
else if (reader->bautofmt) fprintf(f, "msg \"Markup(QString)\" \"Auto\"\n");
else if (reader->bstriphtml) fprintf(f, "msg \"Markup(QString)\" \"HTML\"\n");
else if (reader->bpeanut) fprintf(f, "msg \"Markup(QString)\" \"Peanut/PML\"\n");
else fprintf(f, "msg \"Markup(QString)\" \"None\"\n");
fprintf(f, "msg \"Layout/Dehyphen(int)\" %d\n", (reader->bdehyphen) ? 1:0);
fprintf(f, "msg \"Layout/Depluck(int)\" %d\n", (reader->bdepluck) ? 1:0);
fprintf(f, "msg \"Layout/Dejpluck(int)\" %d\n", (reader->bdejpluck) ? 1:0);
fprintf(f, "msg \"Layout/SingleSpace(int)\" %d\n", (reader->bonespace) ? 1:0);
fprintf(f, "msg \"Layout/Unindent(int)\" %d\n", (reader->bunindent) ? 1:0);
fprintf(f, "msg \"Layout/Re-paragraph(int)\" %d\n", (reader->brepara) ? 1:0);
fprintf(f, "msg \"Layout/DoubleSpace(int)\" %d\n", (reader->bdblspce) ? 1:0);
fprintf(f, "msg \"Layout/Indent(int)\" %d\n", reader->bindenter);
fprintf(f, "msg \"Format/SetFont(QString,int)\" \"%s\" %d\n", (const char*)reader->m_fontname, reader->m_textsize);
fprintf(f, "msg \"Navigation/Page/LineScroll(int)\" %d\n", (reader->m_bpagemode) ? 1:0);
fprintf(f, "msg \"Format/Ideogram/Word(int)\" %d\n", (reader->m_bMonoSpaced) ? 1:0);
fprintf(f, "msg \"Format/Encoding(QString)\" \"%s\"\n", (const char*)m_EncodingAction[reader->m_encd]->text());
fprintf(f, "msg \"Format/SetWidth(int)\" %d\n", reader->m_charpc);
fprintf(f, "msg \"Navigation/SetOverlap(int)\" %d\n", reader->m_overlap);
fprintf(f, "msg \"Layout/Remap(int)\" %d\n", (reader->bremap) ? 1:0);
fprintf(f, "msg \"Layout/Embolden(int)\" %d\n", (reader->bmakebold) ? 1:0);
fprintf(f, "msg \"File/Continuous(int)\" %d\n", (reader->m_continuousDocument) ? 1:0);
fprintf(f, "msg \"File/SetDictionary(QString)\" \"%s/%s\"\n", (const char *)m_targetapp, (const char *)m_targetmsg);
#ifdef _SCROLLPIPE
fprintf(f, "msg \"File/SetScrollTarget(QString)\" \"%s\"\n", (const char *)reader->m_pipetarget);
#endif
fprintf(f, "msg \"File/Two/OneTouch(int)\" %d\n", (m_twoTouch) ? 1:0);
fprintf(f, "msg \"Target/Annotation(int)\" %d\n", (m_doAnnotation) ? 1:0);
fprintf(f, "msg \"Target/Dictionary(int)\" %d\n", (m_doDictionary) ? 1:0);
fprintf(f, "msg \"Target/Clipboard(int)\" %d\n", (m_doClipboard) ? 1:0);
fprintf(f, "msg \"File/Action(QString)\" \"%s\"\n", (const char *)m_buttonAction[m_spaceTarget]->text());
fprintf(f, "msg \"Update(int)\" 1\n");
fprintf(f, "msg \"info(QString)\" \"All Done\"\n");
fclose(f);
chmod(sname, S_IXUSR | S_IXGRP | S_IXOTH);
}
}
void QTReaderApp::SaveConfig()
{
m_nRegAction = cSetConfigName;
regEdit->setText("");
do_regedit();
}
void QTReaderApp::do_saveconfig(const QString& _txt)
{
SaveScript(Global::applicationFileName(APPDIR "/scripts", _txt));
}
#endif
#ifdef _SCROLLPIPE
void QTReaderApp::setpipetarget()
{
m_nRegAction = cSetPipeTarget;
QString text = (reader->m_pipetarget.isEmpty()) ? QString("") : reader->m_pipetarget;
regEdit->setText(text);
do_regedit();
}
void QTReaderApp::do_setpipetarget(const QString& _txt)
{
reader->m_pipetarget = _txt;
}
void QTReaderApp::setpause(bool sfs)
{
reader->m_pauseAfterEachPara = sfs;
}
#endif
void QTReaderApp::monospace(bool _b)
{
reader->setmono(_b);
}
bool QTReaderApp::readconfig(const QString& _txt, bool full=false)
{
#ifdef USEQPE
QString configname;
Config::Domain dom;
if (full)
{
configname = _txt;
dom = Config::User;
}
else
{
configname = Global::applicationFileName(APPDIR "/configs", _txt);
QFileInfo fm(configname);
if ( !fm.exists() ) return false;
dom = Config::File;
}
Config config(configname, dom);
config.setGroup( "View" );
#else
QFileInfo fi;
if (full)
{
QDir d = QDir::home(); // "/"
if ( !d.cd(_txt) )
{ // "/tmp"
- qWarning( "Cannot find the \"~/%s\" directory", (const char*)_txt );
+ owarn << "Cannot find the \"~/" << _txt << "\" directory" << oendl;
d = QDir::home();
d.mkdir(_txt);
d.cd(_txt);
}
fi.setFile(d, INIFILE);
}
else
{
QDir d = QDir::home(); // "/"
if ( !d.cd(APPDIR) )
{ // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "\" directory" << oendl;
d = QDir::home();
d.mkdir(APPDIR);
d.cd(APPDIR);
}
if ( !d.cd("configs") )
{ // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "/configs\" directory" << oendl;
d = QDir::home();
d.mkdir("configs");
d.cd("configs");
}
fi.setFile(d, _txt);
}
#ifdef _WINDOWS
struct stat fnstat;
if (stat((const char *)reader->m_lastfile, &fnstat) == 0) return false; // get round fileinfo bug on windows
#else
if (!fi.exists()) return false;
#endif
Config config(fi.absFilePath());
#endif
if (full)
{
config.setGroup("Toolbar");
m_tbmovesave = m_tbmove = config.readBoolEntry("Movable", false);
m_tbpolsave = m_tbpol = (ToolbarPolicy)config.readNumEntry("Policy", 1);
m_tbposition = (ToolBarDock)config.readNumEntry("Position", 2);
}
config.setGroup( "View" );
m_bFloatingDialog = config.readBoolEntry("FloatDialogs", false);
reader->bstripcr = config.readBoolEntry( "StripCr", true );
reader->bfulljust = config.readBoolEntry( "FullJust", false );
reader->setextraspace(config.readNumEntry( "ExtraSpace", 0 ));
reader->setlead(config.readNumEntry( "ExtraLead", 0 ));
reader->btextfmt = config.readBoolEntry( "TextFmt", false );
reader->bautofmt = config.readBoolEntry( "AutoFmt", true );
reader->bstriphtml = config.readBoolEntry( "StripHtml", false );
reader->bpeanut = config.readBoolEntry( "Peanut", false );
reader->bdehyphen = config.readBoolEntry( "Dehyphen", false );
reader->bdepluck = config.readBoolEntry( "Depluck", false );
reader->bdejpluck = config.readBoolEntry( "Dejpluck", false );
reader->bonespace = config.readBoolEntry( "OneSpace", false );
reader->bunindent = config.readBoolEntry( "Unindent", false );
reader->brepara = config.readBoolEntry( "Repara", false );
reader->bdblspce = config.readBoolEntry( "DoubleSpace", false );
reader->bindenter = config.readNumEntry( "Indent", 0 );
reader->m_textsize = config.readNumEntry( "FontSize", 12 );
reader->m_delay = config.readNumEntry( "ScrollDelay", 5184);
if (full)
{
reader->m_lastfile = config.readEntry( "LastFile", QString::null );
reader->m_lastposn = config.readNumEntry( "LastPosn", 0 );
}
reader->m_bpagemode = config.readBoolEntry( "PageMode", true );
reader->m_bMonoSpaced = config.readBoolEntry( "MonoSpaced", false);
reader->m_swapmouse = config.readBoolEntry( "SwapMouse", false);
reader->m_fontname = config.readEntry( "Fontname", "helvetica" );
reader->m_encd = config.readNumEntry( "Encoding", 0 );
reader->m_charpc = config.readNumEntry( "CharSpacing", 100 );
reader->m_overlap = config.readNumEntry( "Overlap", 0 );
reader->m_border = config.readNumEntry( "Margin", 6 );
#ifdef REPALM
reader->brepalm = config.readBoolEntry( "Repalm", true );
#endif
reader->bremap = config.readBoolEntry( "Remap", true );
reader->bmakebold = config.readBoolEntry( "MakeBold", false );
reader->setContinuous(config.readBoolEntry( "Continuous", true ));
m_targetapp = config.readEntry( "TargetApp", QString::null );
m_targetmsg = config.readEntry( "TargetMsg", QString::null );
#ifdef _SCROLLPIPE
reader->m_pipetarget = config.readEntry( "PipeTarget", QString::null );
reader->m_pauseAfterEachPara = config.readBoolEntry( "PauseAfterPara", true );
#endif
m_twoTouch = config.readBoolEntry( "TwoTouch", false);
m_doAnnotation = config.readBoolEntry( "Annotation", false);
m_doDictionary = config.readBoolEntry( "Dictionary", false);
m_doClipboard = config.readBoolEntry( "Clipboard", false);
m_spaceTarget = (ActionTypes)config.readNumEntry("SpaceTarget", cesAutoScroll);
m_escapeTarget = (ActionTypes)config.readNumEntry("EscapeTarget", cesNone);
m_returnTarget = (ActionTypes)config.readNumEntry("ReturnTarget", cesFullScreen);
m_leftTarget = (ActionTypes)config.readNumEntry("LeftTarget", cesZoomOut);
m_rightTarget = (ActionTypes)config.readNumEntry("RightTarget", cesZoomIn);
m_upTarget = (ActionTypes)config.readNumEntry("UpTarget", cesPageUp);
m_downTarget = (ActionTypes)config.readNumEntry("DownTarget", cesPageDown);
m_leftScroll = config.readBoolEntry("LeftScroll", false);
m_rightScroll = config.readBoolEntry("RightScroll", false);
m_upScroll = config.readBoolEntry("UpScroll", true);
m_downScroll = config.readBoolEntry("DownScroll", true);
m_propogatefontchange = config.readBoolEntry( "RequestorFontChange", false);
reader->setBaseSize(config.readNumEntry( "Basesize", 10 ));
reader->setTwoTouch(m_twoTouch);
m_touch_action->setOn(m_twoTouch);
m_setmono_action->setOn(reader->m_bMonoSpaced);
setfontHelper(reader->m_fontname);
if (full)
{
addtoolbars(&config);
}
reader->setfilter(reader->getfilter());
reader->refresh();
return true;
}
bool QTReaderApp::PopulateConfig(const char* tgtdir)
{
bkmkselector->clear();
bkmkselector->setText("Cancel");
#ifndef USEQPE
int cnt = 0;
QDir d = QDir::home(); // "/"
if ( !d.cd(APPDIR) ) { // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "\" directory" << oendl;
d = QDir::home();
d.mkdir(APPDIR);
d.cd(APPDIR);
}
if ( !d.cd(tgtdir) ) { // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "/%s\" directory", tgtdir );
+ owarn << "Cannot find the \"~/" APPDIR "/" << tgtdir << "\" directory" << oendl;
d = QDir::home();
d.mkdir(tgtdir);
d.cd(tgtdir);
}
d.setFilter( QDir::Files | QDir::NoSymLinks );
// d.setSorting( QDir::Size | QDir::Reversed );
const QFileInfoList *list = d.entryInfoList();
QFileInfoListIterator it( *list ); // create list iterator
QFileInfo *fi; // pointer for traversing
while ( (fi=it.current()) ) { // for each file...
bkmkselector->insertItem(fi->fileName());
cnt++;
- //qDebug( "%10li %s", fi->size(), fi->fileName().data() );
+ //odebug << "" << fi->size() << " " << fi->fileName().data() << "" << oendl;
++it; // goto next list element
}
#else /* USEQPE */
int cnt = 0;
DIR *d;
char* finaldir;
finaldir = new char[strlen(APPDIR)+1+strlen(tgtdir)+1];
strcpy(finaldir, APPDIR);
strcat(finaldir, "/");
strcat(finaldir, tgtdir);
d = opendir((const char *)Global::applicationFileName(finaldir,""));
while(1)
{
struct dirent* de;
struct stat buf;
de = readdir(d);
if (de == NULL) break;
if (lstat((const char *)Global::applicationFileName(finaldir,de->d_name),&buf) == 0 && S_ISREG(buf.st_mode))
{
bkmkselector->insertItem(de->d_name);
cnt++;
}
}
delete [] finaldir;
closedir(d);
#endif
return (cnt > 0);
}
void QTReaderApp::LoadConfig()
{
if (PopulateConfig("configs"))
{
editorStack->raiseWidget( bkmkselector );
hidetoolbars();
m_nBkmkAction = cLdConfig;
}
else
QMessageBox::information(this, PROGNAME, "No config files");
}
void QTReaderApp::TidyConfig()
{
if (PopulateConfig("configs"))
{
editorStack->raiseWidget( bkmkselector );
hidetoolbars();
m_nBkmkAction = cRmConfig;
}
else
QMessageBox::information(this, PROGNAME, "No config files");
}
void QTReaderApp::ExportLinks()
{
if (PopulateConfig("urls"))
{
editorStack->raiseWidget( bkmkselector );
hidetoolbars();
m_nBkmkAction = cExportLinks;
}
else
QMessageBox::information(this, PROGNAME, "No url files");
}
void QTReaderApp::OnURLSelected(const QString& href)
{
CURLDialog* urld = new CURLDialog(href, false, this);
urld->clipboard(m_url_clipboard);
urld->localfile(m_url_localfile);
urld->globalfile(m_url_globalfile);
if (urld->exec())
{
m_url_clipboard = urld->clipboard();
m_url_localfile = urld->localfile();
m_url_globalfile = urld->globalfile();
if (m_url_clipboard)
{
QClipboard* cb = QApplication::clipboard();
cb->setText(href);
- qDebug("<a href=\"%s\">%s</a>", (const char*)href, (const char*)href);
+ odebug << "<a href=\"" << href << "\">" << href << "</a>" << oendl;
}
if (m_url_localfile)
{
writeUrl(reader->m_string, href);
}
if (m_url_globalfile)
{
writeUrl("GlobalURLFile", href);
}
}
delete urld;
}
void QTReaderApp::writeUrl(const QString& file, const QString& href)
{
QString filename;
#ifdef USEQPE
filename = Global::applicationFileName(APPDIR "/urls", file);
#else
QFileInfo fi;
QDir d = QDir::home(); // "/"
if ( !d.cd(APPDIR) )
{ // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "\" directory" << oendl;
d = QDir::home();
d.mkdir(APPDIR);
d.cd(APPDIR);
}
if ( !d.cd("urls") )
{ // "/tmp"
- qWarning( "Cannot find the \"~/" APPDIR "/urls\" directory" );
+ owarn << "Cannot find the \"~/" APPDIR "/urls\" directory" << oendl;
d = QDir::home();
d.cd(APPDIR);
d.mkdir("urls");
d.cd("urls");
}
fi.setFile(d, file);
filename = fi.absFilePath();
#endif
FILE* fout = fopen(filename, "a");
if (fout != NULL)
{
fprintf(fout, "<p><a href=\"%s\">%s</a>\n", (const char*)href, (const char*)href);
fclose(fout);
}
else
{
QMessageBox::warning(this, PROGNAME, "Problem with writing URL");
}
}
diff --git a/noncore/apps/opie-reader/StyleConsts.cpp b/noncore/apps/opie-reader/StyleConsts.cpp
index 9fb56b7..f47acee 100644
--- a/noncore/apps/opie-reader/StyleConsts.cpp
+++ b/noncore/apps/opie-reader/StyleConsts.cpp
@@ -1,94 +1,94 @@
#include <qimage.h>
#include "StyleConsts.h"
GraphicLink::~GraphicLink() { delete graphic; }
pmstore::~pmstore()
{
-//// qDebug("Deleting image");
+//// odebug << "Deleting image" << oendl;
delete graphic;
}
CStyle::~CStyle()
{
if (graphic != NULL)
{
if (--(graphic->count) == 0)
{
delete graphic;
}
}
}
CStyle::CStyle(const CStyle& rhs) : graphic(NULL)
{
*this = rhs;
}
CStyle& CStyle::operator=(const CStyle& rhs)
{
if (rhs.graphic != NULL)
{
(rhs.graphic->count)++;
if (graphic != NULL)
{
if (--(graphic->count) == 0)
{
delete graphic;
}
}
graphic = rhs.graphic;
}
else
{
if (graphic != NULL)
{
if (--(graphic->count) == 0)
{
delete graphic;
}
graphic = NULL;
}
}
sty = rhs.sty;
return *this;
}
void CStyle::clearPicture()
{
if (graphic != NULL)
{
if (--(graphic->count) == 0)
{
delete graphic;
}
graphic = NULL;
}
}
void CStyle::unset()
{
sty.unset();
if (graphic != NULL)
{
if (--(graphic->count) == 0)
{
delete graphic;
}
graphic = NULL;
}
}
void CStyle::setPicture(bool canScale, QImage* _g, bool il, unsigned long tgt)
{
if (graphic != NULL)
{
if (--(graphic->count) == 0)
{
delete graphic;
}
graphic = NULL;
}
if (_g != NULL) graphic = new pmstore(canScale, _g, il, tgt);
}
diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp
index e1cde6c..72a1222 100644
--- a/noncore/apps/opie-reader/fileBrowser.cpp
+++ b/noncore/apps/opie-reader/fileBrowser.cpp
@@ -1,266 +1,266 @@
/****************************************************************************
Derived from a file browser which was
** copyright 2001 ljp ljp@llornkcor.com
Extensive modification by Tim Wentford to allow it to work in rotated mode
****************************************************************************/
#include "fileBrowser.h"
#include "QtrListView.h"
#include <qlineedit.h>
#include <qpushbutton.h>
#ifndef _WINDOWS
#include <unistd.h>
#endif
#include <qlayout.h>
#ifdef _WINDOWS
#include <direct.h>
#endif
#include <qpe/qpeapplication.h>
fileBrowser::fileBrowser( bool allownew, QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath )
: QDialog( parent, name, true,
fl/* | WStyle_Customize | WStyle_Tool*/),
filterspec(QDir::All)
{
// showMaximized();
if ( !name )
setName( "fileBrowser" );
/*
if (parent != NULL)
{
#ifdef OPIE
move(0,0);
resize( parent->width(), parent->height() );
#else
setGeometry(parent->x(), parent->y(), parent->width(), parent->height() );
#endif
}
*/
// showFullScreen();
setCaption(tr( "Browse for file" ) );
filterStr=filter;
buttonOk = new QPushButton( this, "buttonOk" );
buttonOk->setFixedSize( 25, 25 );
buttonOk->setAutoDefault( false );
buttonOk->setText( tr( "/" ) );
buttonShowHidden = new QPushButton( this, "buttonShowHidden" );
// buttonShowHidden->setFixedSize( 50, 25 );
buttonShowHidden->setText( tr( "Hidden" ) );
buttonShowHidden->setAutoDefault( false );
buttonShowHidden->setToggleButton( true );
buttonShowHidden->setOn( false );
dirLabel = new QLabel(this, "DirLabel");
dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak);
dirLabel->setText(currentDir.canonicalPath());
ListView = new QtrListView( this, "ListView" );
ListView->addColumn( tr( "Name" ) );
ListView->setSorting( 2, FALSE);
ListView->addColumn( tr( "Size" ) );
ListView->setSelectionMode(QListView::Single);
ListView->setAllColumnsShowFocus( TRUE );
ListView->setColumnWidthMode(0, QListView::Manual);
ListView->setColumnWidthMode(1, QListView::Manual);
// signals and slots connections
connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) );
connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) );
connect( ListView, SIGNAL(doubleClicked(QListViewItem*)), SLOT(listDoubleClicked(QListViewItem*)) );
connect( ListView, SIGNAL(clicked(QListViewItem*)), SLOT(listClicked(QListViewItem*)) );
connect( ListView, SIGNAL(OnOKButton(QListViewItem*)), SLOT(listClicked(QListViewItem*)) );
connect( ListView, SIGNAL(OnCentreButton(QListViewItem*)), SLOT(listClicked(QListViewItem*)) );
connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) );
QVBoxLayout* grid = new QVBoxLayout(this);
QHBoxLayout* hgrid = new QHBoxLayout(grid);
hgrid->addWidget(dirLabel,1);
hgrid->addWidget(buttonShowHidden);
hgrid->addWidget(buttonOk);
grid->addWidget(ListView,1);
if (allownew)
{
m_filename = new QLineEdit(this);
grid->addWidget(m_filename);
connect( m_filename, SIGNAL( returnPressed() ), this, SLOT( onReturn() ));
}
else
{
m_filename = NULL;
}
if (QFileInfo(iPath).exists())
{
currentDir.setPath(iPath);
#ifdef _WINDOWS
_chdir(iPath.latin1());
#else
chdir(iPath.latin1());
#endif
}
else
{
currentDir.setPath(QDir::currentDirPath());
chdir(QDir::currentDirPath().latin1());
}
populateList();
if (modal)
QPEApplication::showDialog( this );
}
void fileBrowser::resizeEvent(QResizeEvent* e)
{
ListView->setColumnWidth(1,(ListView->width())/4);
ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1));
}
fileBrowser::~fileBrowser()
{
}
void fileBrowser::populateList()
{
ListView->clear();
-////qDebug(currentDir.canonicalPath());
+////odebug << currentDir.canonicalPath() << oendl;
// currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks );
currentDir.setFilter( filterspec );
currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst);
currentDir.setMatchAllDirs(TRUE);
currentDir.setNameFilter(filterStr);
// currentDir.setNameFilter("*.txt;*.etx");
QString fileL, fileS;
const QFileInfoList *list = currentDir.entryInfoList();
QFileInfoListIterator it(*list);
QFileInfo *fi;
while ( (fi=it.current()) )
{
if (fi->fileName() != ".")
{
fileS.sprintf( "%10li", fi->size() );
fileL.sprintf( "%s",fi->fileName().data() );
if( fi->isDir() )
{
fileL+="/";
}
else
{
-//// qDebug("Not a dir: "+currentDir.canonicalPath()+fileL);
+//// odebug << "Not a dir: "+currentDir.canonicalPath()+fileL << oendl;
}
new QListViewItem( ListView,fileL,fileS );
}
++it;
}
ListView->setSorting( 2, FALSE);
dirLabel->setText("Current Directory:\n"+currentDir.canonicalPath());
ListView->setFocus();
}
void fileBrowser::upDir()
{
-//// qDebug(currentDir.canonicalPath());
+//// odebug << currentDir.canonicalPath() << oendl;
}
void fileBrowser::listClicked(QListViewItem *selectedItem)
{
if (selectedItem == NULL) return;
QString strItem=selectedItem->text(0);
-//// qDebug("%s", (const char*)strItem);
+//// odebug << "" << strItem << "" << oendl;
QString strSize=selectedItem->text(1);
strSize.stripWhiteSpace();
bool ok;
QFileInfo fi(strItem);
while (fi.isSymLink()) fi.setFile(fi.readLink());
if (fi.isDir())
{
strItem=QDir::cleanDirPath(currentDir.canonicalPath()+"/"+strItem);
if(QDir(strItem).exists())
{
currentDir.cd(strItem, TRUE);
populateList();
}
} else
{
QListViewItem *selectedItem = ListView->selectedItem();
if (selectedItem == NULL)
{
filename = "";
}
else
{
filename = QDir::cleanDirPath(currentDir.canonicalPath()+"/"+selectedItem->text(0));
}
OnOK();
}
chdir(strItem.latin1());
//
}
// you may want to switch these 2 functions. I like single clicks
void fileBrowser::listDoubleClicked(QListViewItem *selectedItem)
{
}
QString fileBrowser::getCurrentFile()
{
return filename;
}
void fileBrowser::OnOK()
{
accept();
}
void fileBrowser::OnRoot()
{
currentDir.cd("/", TRUE);
populateList();
chdir("/");
}
void fileBrowser::OnCancel()
{
reject();
}
void fileBrowser::setHidden(bool _hidden)
{
if (_hidden)
filterspec = QDir::All | QDir::Hidden;
else
filterspec = QDir::All;
populateList();
}
void fileBrowser::onReturn()
{
QListViewItem *selectedItem = ListView->selectedItem();
if (selectedItem == NULL)
{
filename = m_filename->text();
}
else
{
filename = QDir::cleanDirPath(currentDir.canonicalPath()+"/"+m_filename->text());
}
OnOK();
}
diff --git a/noncore/apps/opie-reader/opie-reader.pro b/noncore/apps/opie-reader/opie-reader.pro
index e42204a..dbf6964 100644
--- a/noncore/apps/opie-reader/opie-reader.pro
+++ b/noncore/apps/opie-reader/opie-reader.pro
@@ -1,92 +1,92 @@
CONFIG = qt warn_on
HEADERS = Aportis.h \
Bkmks.h \
BuffDoc.h \
CAnnoEdit.h \
CBuffer.h \
CDrawBuffer.h \
CEncoding.h \
CEncoding_tables.h \
CExpander.h \
CFilter.h \
CloseDialog.h \
Filedata.h \
FixedFont.h \
FontControl.h \
GraphicWin.h \
Markups.h \
Navigation.h \
Palm2QImage.h \
Prefs.h \
QFloatBar.h \
QTReader.h \
QTReaderApp.h \
QtrListView.h \
Queue.h \
StateData.h \
StyleConsts.h \
ToolbarPrefs.h \
URLDialog.h \
ZText.h \
arith.h \
cbkmkselector.h \
config.h \
fileBrowser.h \
infowin.h \
linktype.h \
my_list.h \
names.h \
opie.h \
pdb.h \
plucker_base.h \
plucker.h \
ppm.h \
ppm_expander.h \
usenef.h \
useqpe.h \
ustring.h \
utypes.h \
version.h \
ztxt.h
SOURCES = Aportis.cpp \
Bkmks.cpp \
BuffDoc.cpp \
CBuffer.cpp \
CDrawBuffer.cpp \
CEncoding.cpp \
CEncoding_tables.cpp \
CFilter.cpp \
CloseDialog.cpp \
FontControl.cpp \
Navigation.cpp \
Palm2QImage.cpp \
Prefs.cpp \
QTReader.cpp \
QTReaderApp.cpp \
QtrListView.cpp \
StyleConsts.cpp \
ToolbarPrefs.cpp \
URLDialog.cpp \
arith_d.cpp \
fileBrowser.cpp \
infowin.cpp \
main.cpp \
pdb.cpp \
plucker.cpp \
plucker_base.cpp \
ppm.cpp \
ppm_expander.cpp \
version.cpp \
ztxt.cpp
DESTDIR = $(OPIEDIR)/bin
TARGET = reader
INCLUDEPATH += $(OPIEDIR)/include
DEPENDPATH += $(OPIEDIR)/include
-LIBS += -lqpe
+LIBS += -lqpe -lopiecore2
include ( $(OPIEDIR)/include.pro )
diff --git a/noncore/apps/opie-reader/plucker.cpp b/noncore/apps/opie-reader/plucker.cpp
index e52fd6a..a8e688f 100644
--- a/noncore/apps/opie-reader/plucker.cpp
+++ b/noncore/apps/opie-reader/plucker.cpp
@@ -1,151 +1,151 @@
#include <stdio.h>
#include <string.h>
#ifdef USEQPE
#include <qpe/qcopenvelope_qws.h>
#endif
#ifdef LOCALPICTURES
#include <qscrollview.h>
#endif
#ifdef USEQPE
#include <qpe/global.h>
#include <qpe/qpeapplication.h>
#else
#include <qapplication.h>
#endif
#include "plucker.h"
#include "Palm2QImage.h"
struct CPlucker_dataRecord
{
UInt16 uid;
UInt16 nParagraphs;
UInt16 size;
UInt8 type;
UInt8 reserved;
};
int CPlucker::HeaderSize()
{
return sizeof(CPlucker_dataRecord);
}
void CPlucker::GetHeader(UInt16& uid, UInt16& nParagraphs, UInt32& size, UInt8& type, UInt8& reserved)
{
CPlucker_dataRecord thishdr;
fread(&thishdr, 1, HeaderSize(), fin);
uid = ntohs(thishdr.uid);
nParagraphs = ntohs(thishdr.nParagraphs);
size = ntohs(thishdr.size);
type = thishdr.type;
reserved = thishdr.reserved;
}
CPlucker::CPlucker()
{ /*printf("constructing:%x\n",fin);*/ }
bool CPlucker::CorrectDecoder()
{
return (memcmp(&head.type, "DataPlkr", 8) == 0);
}
int CPlucker::bgetch()
{
int ch = EOF;
if (bufferpos >= buffercontent)
{
if (!m_continuous) return EOF;
if (bufferrec >= ntohs(head.recordList.numRecords) - 1) return EOF;
-//// qDebug("Passing through %u", currentpos);
+//// odebug << "Passing through " << currentpos << "" << oendl;
if (!expand(bufferrec+1)) return EOF;
mystyle.unset();
if (m_ParaOffsets[m_nextParaIndex] == 0)
{
while (m_ParaOffsets[m_nextParaIndex+1] == 0)
{
-// qDebug("Skipping extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7);
+// odebug << "Skipping extraspace:" << m_ParaAttrs[m_nextParaIndex]&7 << "" << oendl;
m_nextParaIndex++;
}
}
mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2);
-// qDebug("Using extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7);
+// odebug << "Using extraspace:" << m_ParaAttrs[m_nextParaIndex]&7 << "" << oendl;
ch = 10;
EOPPhase = 4;
}
else if (bufferpos == m_nextPara)
{
while (bufferpos == m_nextPara)
{
UInt16 attr = m_ParaAttrs[m_nextParaIndex];
m_nextParaIndex++;
-// qDebug("Skipping extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7);
+// odebug << "Skipping extraspace:" << m_ParaAttrs[m_nextParaIndex]&7 << "" << oendl;
if (m_nextParaIndex == m_nParas)
{
m_nextPara = -1;
}
else
{
m_nextPara += m_ParaOffsets[m_nextParaIndex];
}
}
mystyle.unset();
mystyle.setExtraSpace((m_ParaAttrs[m_nextParaIndex]&7)*2);
-// qDebug("Using extraspace:%d", m_ParaAttrs[m_nextParaIndex]&7);
+// odebug << "Using extraspace:" << m_ParaAttrs[m_nextParaIndex]&7 << "" << oendl;
if (m_lastBreak == locate())
{
currentpos++;
ch = expandedtextbuffer[bufferpos++];
}
else
{
ch = 10;
}
}
else
{
currentpos++;
ch = expandedtextbuffer[bufferpos++];
}
return ch;
}
tchar CPlucker::getch(bool fast)
{
mystyle.clearPicture();
if (EOPPhase > 0)
{
int ch = 10;
switch (EOPPhase)
{
case 4:
if (!fast) mystyle.setPicture(false, hRule(100,5));
mystyle.setCentreJustify();
ch = '#';
break;
case 3:
mystyle.setFontSize(3);
ch = 10;
break;
case 2:
ch = 10;
break;
case 1:
mystyle.unset();
default:
ch = 10;
}
EOPPhase--;
return ch;
}
return getch_base(fast);
}
QImage* CPlucker::imagefromdata(UInt8* imgbuffer, UInt32 imgsize)
{
QImage* qimage = Palm2QImage(imgbuffer, imgsize);
delete [] imgbuffer;
return qimage;
}
diff --git a/noncore/apps/opie-reader/plucker_base.cpp b/noncore/apps/opie-reader/plucker_base.cpp
index caa945d..b523a54 100644
--- a/noncore/apps/opie-reader/plucker_base.cpp
+++ b/noncore/apps/opie-reader/plucker_base.cpp
@@ -1,1235 +1,1243 @@
+
+
#include "useqpe.h"
-#include <stdio.h>
-#include <string.h>
+#include "plucker_base.h"
+#include "Aportis.h"
+#include "Palm2QImage.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
#ifdef USEQPE
#include <qpe/qcopenvelope_qws.h>
-#endif /* USEQPE */
-#ifdef LOCALPICTURES
-#include <qscrollview.h>
-#endif
-#ifdef USEQPE
#include <qpe/global.h>
#endif /* USEQPE */
+
#ifndef USEQPE
#include <qapplication.h>
#else /* USEQPE */
#include <qpe/qpeapplication.h>
#endif /* USEQPE */
-#include "plucker_base.h"
-#include "Aportis.h"
-#include "Palm2QImage.h"
+/* QT */
+#ifdef LOCALPICTURES
+#include <qscrollview.h>
+#endif
+
+/* STD */
+#include <stdio.h>
+#include <string.h>
+
CPlucker_base::CPlucker_base() :
#ifdef LOCALPICTURES
m_viewer(NULL),
m_picture(NULL),
#endif
expandedtextbuffer(NULL),
compressedtextbuffer(NULL)
//, urls(NULL)
{ /*printf("constructing:%x\n",fin);*/ }
void CPlucker_base::Expand(UInt32 reclen, UInt8 type, UInt8* buffer, UInt32 buffersize)
{
if (type%2 == 0)
{
fread(buffer, reclen, sizeof(char), fin);
}
else
{
UInt8* readbuffer = NULL;
if (reclen > compressedbuffersize)
{
readbuffer = new UInt8[reclen];
}
else
{
readbuffer = compressedtextbuffer;
}
if (readbuffer != NULL)
{
fread(readbuffer, reclen, sizeof(char), fin);
switch (ntohs(hdr0.version))
{
case 2:
UnZip(readbuffer, reclen, buffer, buffersize);
break;
case 1:
UnDoc(readbuffer, reclen, buffer, buffersize);
break;
}
if (reclen > compressedbuffersize)
{
delete [] readbuffer;
}
}
}
}
void CPlucker_base::sizes(unsigned long& _file, unsigned long& _text)
{
_file = file_length;
if (textlength == 0)
{
for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
{
gotorecordnumber(recptr);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (thishdr_type < 2) textlength += thishdr_size;
}
}
_text = textlength;
//ntohl(hdr0.size);
}
char* CPlucker_base::geturl(UInt16 tgt)
{
char * pRet = NULL;
gotorecordnumber(0);
fread(&hdr0, 1, 6, fin);
unsigned int nrecs = ntohs(hdr0.nRecords);
- //qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs);
+ //odebug << "Version " << ntohs(hdr0.version) << ", no. recs " << nrecs << "" << oendl;
UInt16 urlid = 0;
bool urlsfound = false;
char* urls = NULL;
size_t urlsize = 0;
for (unsigned int i = 0; i < nrecs; i++)
{
UInt16 id, name;
fread(&name, 1, sizeof(name), fin);
fread(&id, 1, sizeof(id), fin);
- //qDebug("N:%d, I:%d", ntohs(name), ntohs(id));
+ //odebug << "N:" << ntohs(name) << ", I:" << ntohs(id) << "" << oendl;
if (ntohs(name) == 2)
{
urlsfound = true;
urlid = id;
- //qDebug("Found url index:%d", ntohs(urlid));
+ //odebug << "Found url index:" << ntohs(urlid) << "" << oendl;
}
-// //qDebug("%x", id);
+// //odebug << "" << id << "" << oendl;
}
if (urlsfound)
{
unsigned short recptr = finduid(ntohs(urlid));
if (recptr != 0)
{
gotorecordnumber(recptr);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
UInt16 urlctr = 0;
while (1)
{
UInt16 tctr;
fread(&tctr, 1, sizeof(tctr), fin);
fread(&urlid, 1, sizeof(urlid), fin);
tctr = ntohs(tctr);
- //qDebug("tgt:%u urlctr:%u tctr:%u", tgt, urlctr, tctr);
+ //odebug << "tgt:" << tgt << " urlctr:" << urlctr << " tctr:" << tctr << "" << oendl;
if (tctr >= tgt)
{
break;
}
urlctr = tctr;
}
- //qDebug("urls are in %d", ntohs(urlid));
+ //odebug << "urls are in " << ntohs(urlid) << "" << oendl;
recptr = finduid(ntohs(urlid));
if (recptr != 0)
{
UInt32 reclen = recordlength(recptr) - HeaderSize();
gotorecordnumber(recptr);
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
- //qDebug("Found urls:%x",thishdr_type);
+ //odebug << "Found urls:" << thishdr_type << "" << oendl;
urlsize = thishdr_size;
urls = new char[urlsize];
Expand(reclen, thishdr_type, (UInt8*)urls, urlsize);
char* ptr = urls;
int rn = urlctr+1;
while (ptr - urls < urlsize)
{
if (rn == tgt)
{
- //qDebug("URL:%s", ptr);
+ //odebug << "URL:" << ptr << "" << oendl;
int len = strlen(ptr)+1;
pRet = new char[len];
memcpy(pRet, ptr, len);
break;
}
ptr += strlen(ptr)+1;
rn++;
}
delete [] urls;
}
}
}
else
{
QMessageBox::information(NULL,
QString(PROGNAME),
QString("No external links\nin this pluck")
);
}
return pRet;
}
CPlucker_base::~CPlucker_base()
{
if (expandedtextbuffer != NULL) delete [] expandedtextbuffer;
if (compressedtextbuffer != NULL) delete [] compressedtextbuffer;
#ifdef LOCALPICTURES
if (m_viewer != NULL) delete m_viewer;
#endif
}
int CPlucker_base::getch() { return getch(false); }
void CPlucker_base::getch(tchar& ch, CStyle& sty)
{
ch = getch(false);
sty = mystyle;
}
unsigned int CPlucker_base::locate()
{
return currentpos;
/*
UInt16 thisrec = 1;
unsigned long locpos = 0;
gotorecordnumber(thisrec);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
while (thisrec < bufferrec)
{
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (thishdr_type < 2) locpos += thishdr_size;
thisrec++;
gotorecordnumber(thisrec);
}
return locpos+bufferpos;
*/
}
void CPlucker_base::locate(unsigned int n)
{
// clock_t start = clock();
UInt32 textlength = currentpos - bufferpos;
UInt16 recptr = bufferrec;
if (n < textlength/2)
{
textlength = 0;
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size = buffercontent;
UInt8 thishdr_type, thishdr_reserved;
for (recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
{
gotorecordnumber(recptr);
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (thishdr_type < 2)
{
textlength += thishdr_size;
if (textlength > n)
{
textlength -= thishdr_size;
break;
}
}
}
}
else if (n < textlength)
{
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
while (n < textlength && recptr > 1)
{
recptr--;
gotorecordnumber(recptr);
- //qDebug("recptr:%u", recptr);
+ //odebug << "recptr:" << recptr << "" << oendl;
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (thishdr_type < 2)
{
textlength -= thishdr_size;
}
}
}
else
{
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size = buffercontent;
UInt8 thishdr_type, thishdr_reserved;
while (n > textlength + thishdr_size && recptr < ntohs(head.recordList.numRecords)-1)
{
textlength += thishdr_size;
recptr++;
gotorecordnumber(recptr);
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (!(thishdr_type < 2))
{
thishdr_size = 0;
}
}
}
-// qDebug("Time(1): %u", clock()-start);
+// odebug << "Time(1): " << clock()-start << "" << oendl;
/*
expand(recptr);
mystyle.unset();
bufferpos = n-textlength;
currentpos = n;
while (bufferpos >= m_nextPara && m_nextPara >= 0)
{
UInt16 attr = m_ParaAttrs[m_nextParaIndex];
m_nextParaIndex++;
if (m_nextParaIndex == m_nParas)
{
m_nextPara = -1;
}
else
{
m_nextPara += m_ParaOffsets[m_nextParaIndex];
}
}
return;
*/
// start = clock();
UInt16 thisrec = 0;
unsigned long locpos = 0;
unsigned long bs = 0;
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
do
{
thisrec++;
locpos += bs;
gotorecordnumber(thisrec);
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (thishdr_type < 2)
{
bs = thishdr_size;
}
else
{
bs = 0;
}
} while (locpos + bs <= n);
-// qDebug("Time(2): %u", clock()-start);
+// odebug << "Time(2): " << clock()-start << "" << oendl;
if (recptr != thisrec)
{
- qDebug("Disaster:recptr:%u thisrec:%u", recptr, thisrec);
+ odebug << "Disaster:recptr:" << recptr << " thisrec:" << thisrec << "" << oendl;
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size = buffercontent;
UInt8 thishdr_type, thishdr_reserved;
for (recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
{
gotorecordnumber(recptr);
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
-// qDebug("UID:%u Paras:%u Size:%u Type:%u Reserved:%u", thishdr_uid, thishdr_nParagraphs, thishdr_size, (unsigned int)thishdr_type, (unsigned int)thishdr_reserved);
+// odebug << "UID:" << thishdr_uid << " Paras:" << thishdr_nParagraphs << " Size:" << thishdr_size << " Type:" << (unsigned int)thishdr_type << " Reserved:" << (unsigned int)thishdr_reserved << "" << oendl;
}
// QApplication::exit ( 100 );
}
currentpos = locpos;
expand(thisrec);
while (currentpos < n && bufferpos < buffercontent) getch_base(true);
/* // This is faster but the alignment attribute doesn't get set 8^(
bufferpos = n-locpos;
currentpos = n;
while (bufferpos >= m_nextPara && m_nextPara >= 0)
{
UInt16 attr = m_ParaAttrs[m_nextParaIndex];
m_nextParaIndex++;
if (m_nextParaIndex == m_nParas)
{
m_nextPara = -1;
}
else
{
m_nextPara += m_ParaOffsets[m_nextParaIndex];
}
}
*/
}
bool CPlucker_base::expand(int thisrec)
{
mystyle.unset();
size_t reclen = recordlength(thisrec);
gotorecordnumber(thisrec);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
while (1)
{
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
- //qDebug("This (%d) type is %d, uid is %u", thisrec, thishdr_type, thishdr_uid);
+ //odebug << "This (" << thisrec << ") type is " << thishdr_type << ", uid is " << thishdr_uid << "" << oendl;
if (thishdr_type < 2) break;
- //qDebug("Skipping paragraph of type %d", thishdr_type);
+ //odebug << "Skipping paragraph of type " << thishdr_type << "" << oendl;
if (++thisrec >= ntohs(head.recordList.numRecords) - 1) return false;
reclen = recordlength(thisrec);
gotorecordnumber(thisrec);
}
m_nParas = thishdr_nParagraphs;
m_bufferisreserved = (thishdr_reserved != 0);
- //qDebug("It has %u paragraphs and is %u bytes", thishdr_nParagraphs, thishdr_size);
+ //odebug << "It has " << thishdr_nParagraphs << " paragraphs and is " << thishdr_size << " bytes" << oendl;
uid = thishdr_uid;
// gotorecordnumber(thisrec);
// fread(expandedtextbuffer,1,10,fin);
for (int i = 0; i < m_nParas; i++)
{
UInt16 ubytes, attrs;
fread(&ubytes, 1, sizeof(ubytes), fin);
fread(&attrs, 1, sizeof(attrs), fin);
m_ParaOffsets[i] = ntohs(ubytes);
m_ParaAttrs[i] = ntohs(attrs);
-// //qDebug("Bytes %u, Attr %x", ntohs(ubytes), ntohs(attrs));
+// //odebug << "Bytes " << ntohs(ubytes) << ", Attr " << ntohs(attrs) << "" << oendl;
}
if (m_nParas > 0)
{
m_nextPara = m_ParaOffsets[0];
- //qDebug("First offset = %u", m_nextPara);
+ //odebug << "First offset = " << m_nextPara << "" << oendl;
m_nextParaIndex = 0;
}
else
{
m_nextPara = -1;
}
reclen -= HeaderSize()+4*m_nParas;
buffercontent = thishdr_size;
if (thishdr_size > buffersize)
{
delete [] expandedtextbuffer;
buffersize = thishdr_size;
expandedtextbuffer = new UInt8[buffersize];
}
Expand(reclen, thishdr_type, expandedtextbuffer, buffercontent);
bufferpos = 0;
bufferrec = thisrec;
- //qDebug("BC:%u, HS:%u", buffercontent, thishdr_size);
+ //odebug << "BC:" << buffercontent << ", HS:" << thishdr_size << "" << oendl;
return true;
}
void CPlucker_base::UnZip(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize)
{
z_stream zstream;
memset(&zstream,sizeof(zstream),0);
zstream.next_in = compressedbuffer;
zstream.next_out = tgtbuffer;
zstream.avail_out = bsize;
zstream.avail_in = reclen;
int keylen = 0;
zstream.zalloc = Z_NULL;
zstream.zfree = Z_NULL;
zstream.opaque = Z_NULL;
// printf("Initialising\n");
inflateInit(&zstream);
int err = 0;
do {
if ( zstream.avail_in == 0 && 0 < keylen ) {
zstream.next_in = compressedbuffer + keylen;
zstream.avail_in = reclen - keylen;
keylen = 0;
}
zstream.next_out = tgtbuffer;
zstream.avail_out = bsize;
err = inflate( &zstream, Z_SYNC_FLUSH );
-// //qDebug("err:%d - %u", err, zstream.avail_in);
+// //odebug << "err:" << err << " - " << zstream.avail_in << "" << oendl;
} while ( err == Z_OK );
inflateEnd(&zstream);
}
void CPlucker_base::UnDoc(UInt8* compressedbuffer, size_t reclen, UInt8* tgtbuffer, size_t bsize)
{
// UInt16 headerSize;
UInt16 docSize;
UInt16 i;
UInt16 j;
UInt16 k;
UInt8 *inBuf = compressedbuffer;
UInt8 *outBuf = tgtbuffer;
// headerSize = sizeof( Header ) + record->paragraphs * sizeof( Paragraph );
docSize = reclen;
j = 0;
k = 0;
while ( j < docSize ) {
i = 0;
while ( i < bsize && j < docSize ) {
UInt16 c;
c = (UInt16) inBuf[ j++ ];
if ( 0 < c && c < 9 ) {
while ( 0 < c-- )
outBuf[ i++ ] = inBuf[ j++ ];
}
else if ( c < 0x80 )
outBuf[ i++ ] = c;
else if ( 0xc0 <= c ) {
outBuf[ i++ ] = ' ';
outBuf[ i++ ] = c ^ 0x80;
}
else {
Int16 m;
Int16 n;
c <<= 8;
c += inBuf[ j++ ];
m = ( c & 0x3fff ) >> COUNT_BITS;
n = c & ( ( 1 << COUNT_BITS ) - 1 );
n += 2;
do {
outBuf[ i ] = outBuf[ i - m ];
i++;
} while ( 0 < n-- );
}
}
k += bsize;
}
}
void CPlucker_base::home()
{
currentpos = 0;
expand(1);
}
CList<Bkmk>* CPlucker_base::getbkmklist()
{
/*
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
for (int i = 1; i < ntohs(head.recordList.numRecords); i++)
{
gotorecordnumber(i);
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (thishdr_type == 8)
{
UInt16 n;
fread(&n, 1, sizeof(n), fin);
n = ntohs(n);
- //qDebug("Found %u bookmarks", n);
+ //odebug << "Found " << n << " bookmarks" << oendl;
}
- //qDebug("Found:%d, %u", i , thishdr_type);
+ //odebug << "Found:" << i << ", " << thishdr_type << "" << oendl;
}
*/
return NULL;
}
QImage* CPlucker_base::expandimg(UInt16 tgt, bool border)
{
QImage* qimage = getimg(tgt);
QImage* ret;
if (qimage == NULL) return NULL;
if (border)
{
QPixmap* image = new QPixmap(0,0);
image->convertFromImage(*qimage);
delete qimage;
QPixmap* pret = new QPixmap(image->width()+4, image->height()+4);
pret->fill(Qt::red);
bitBlt(pret, 2, 2, image, 0, 0, -1, -1);//, Qt::RasterOp::CopyROP);
delete image;
ret = new QImage(pret->convertToImage());
}
else
{
ret = qimage;
}
return ret;
}
#ifdef _BUFFERPICS
#include <qmap.h>
#endif
QImage* CPlucker_base::getPicture(unsigned long tgt)
{
#ifdef _BUFFERPICS
static QMap<unsigned long, QPixmap> pix;
QMap<unsigned long, QPixmap>::Iterator t = pix.find(tgt);
if (t == pix.end())
{
pix[tgt] = *expandimg(tgt);
return &pix[tgt];
}
else
return &(t.data());
#else
return expandimg(tgt >> 16);
#endif
}
#ifdef LOCALPICTURES
#include <unistd.h>
#include <qpe/global.h>
void CPlucker_base::showimg(UInt16 tgt)
{
- //qDebug("Crassssssh!");
+ //odebug << "Crassssssh!" << oendl;
QPixmap* qimage = expandimg(tgt);
m_picture->setFixedSize(qimage->size());
m_picture->setBackgroundPixmap(*qimage);
delete qimage;
m_viewer->show();
/*
char tmp[] = "uqtreader.XXXXXX";
QImage* qimage = getimg(tgt);
QPixmap* image = new QPixmap(0,0);
-// //qDebug("New image");
+// //odebug << "New image" << oendl;
image->convertFromImage(*qimage);
delete qimage;
char tmpfile[sizeof(tmp)+1];
strcpy(tmpfile,tmp);
int f = mkstemp(tmpfile);
close(f);
- //qDebug("TMPFILE:%s", tmpfile);
+ //odebug << "TMPFILE:" << tmpfile << "" << oendl;
if (image->save(tmpfile,"PNG"))
{
QCopEnvelope e("QPE/Application/showimg", "setDocument(QString)");
e << QString(tmpfile);
}
Global::statusMessage("Opening image");
sleep(5);
delete image;
unlink(tmpfile);
*/
}
#endif
unsigned short CPlucker_base::finduid(unsigned short urlid)
{
-// //qDebug("Finding %u", urlid);
+// //odebug << "Finding " << urlid << "" << oendl;
unsigned short jmin = 1, jmax = ntohs(head.recordList.numRecords);
unsigned short jmid = (jmin+jmax) >> 1;
while (jmax - jmin > 1)
{
gotorecordnumber(jmid);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
unsigned short luid = thishdr_uid;
-// //qDebug("%u %u %u : %u", jmin, jmid, jmax, urlid);
+// //odebug << "" << jmin << " " << jmid << " " << jmax << " : " << urlid << "" << oendl;
if (luid == urlid)
{
return jmid;
}
if (luid < urlid)
{
jmin = jmid;
}
else
{
jmax = jmid;
}
jmid = (jmin+jmax) >> 1;
}
gotorecordnumber(jmin);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
unsigned short luid = thishdr_uid;
- //qDebug("jmin at end:%u,%u", jmin, luid);
+ //odebug << "jmin at end:" << jmin << "," << luid << "" << oendl;
if (luid == urlid)
{
return jmin;
}
gotorecordnumber(jmax);
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
luid = thishdr_uid;
- //qDebug("jmax at end:%u,%u", jmax, luid);
+ //odebug << "jmax at end:" << jmax << "," << luid << "" << oendl;
if (luid == urlid)
{
return jmax;
}
- //qDebug("Couldn't find %u", urlid);
+ //odebug << "Couldn't find " << urlid << "" << oendl;
return 0; // Not found!
}
void CPlucker_base::setSaveData(unsigned char*& data, unsigned short& len, unsigned char* src, unsigned short srclen)
{
unsigned short sz = 0;
for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++)
{
sz++;
}
size_t newlen = srclen+sizeof(sz)+sz*sizeof(unsigned long);
unsigned char* newdata = new unsigned char[newlen];
unsigned char* pdata = newdata;
memcpy(newdata, src, srclen);
newdata += srclen;
memcpy(newdata, &sz, sizeof(sz));
newdata += sizeof(sz);
#ifdef _WINDOWS
for (it = visited.begin(); it != visited.end(); it++)
#else
for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++)
#endif
{
unsigned long t = *it;
-// qDebug("[%u]", t);
+// odebug << "[" << t << "]" << oendl;
memcpy(newdata, &t, sizeof(t));
newdata += sizeof(t);
}
m_nav.setSaveData(data, len, pdata, newlen);
delete [] pdata;
}
void CPlucker_base::putSaveData(unsigned char*& src, unsigned short& srclen)
{
unsigned short sz;
if (srclen >= sizeof(sz))
{
memcpy(&sz, src, sizeof(sz));
src += sizeof(sz);
srclen -= sizeof(sz);
}
for (int i = 0; i < sz; i++)
{
unsigned long t;
if (srclen >= sizeof(t))
{
memcpy(&t, src, sizeof(t));
-// qDebug("[%u]", t);
+// odebug << "[" << t << "]" << oendl;
visited.push_front(t);
src += sizeof(t);
srclen -= sizeof(t);
}
else
{
QMessageBox::warning(NULL, PROGNAME, "File data mismatch\nMight fix itself");
break;
}
}
m_nav.putSaveData(src, srclen);
}
int CPlucker_base::OpenFile(const char *src)
{
m_lastBreak = 0;
if (!Cpdb::openfile(src))
{
return -1;
}
if (!CorrectDecoder()) return -1;
gotorecordnumber(0);
fread(&hdr0, 1, 6, fin);
setbuffersize();
compressedtextbuffer = new UInt8[compressedbuffersize];
expandedtextbuffer = new UInt8[buffersize];
- //qDebug("Total number of records:%u", ntohs(head.recordList.numRecords));
+ //odebug << "Total number of records:" << ntohs(head.recordList.numRecords) << "" << oendl;
unsigned int nrecs = ntohs(hdr0.nRecords);
- //qDebug("Version %u, no. recs %u", ntohs(hdr0.version), nrecs);
+ //odebug << "Version " << ntohs(hdr0.version) << ", no. recs " << nrecs << "" << oendl;
UInt16 homerecid = 1;
for (unsigned int i = 0; i < nrecs; i++)
{
UInt16 id, name;
fread(&name, 1, sizeof(name), fin);
fread(&id, 1, sizeof(id), fin);
- //qDebug("N:%d, I:%d", ntohs(name), ntohs(id));
+ //odebug << "N:" << ntohs(name) << ", I:" << ntohs(id) << "" << oendl;
if (ntohs(name) == 0) homerecid = ntohs(id);
}
textlength = 0;
for (int recptr = 1; recptr < ntohs(head.recordList.numRecords); recptr++)
{
gotorecordnumber(recptr);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (thishdr_uid == homerecid)
{
m_homepos = textlength;
break;
}
if (thishdr_type < 2) textlength += thishdr_size;
}
textlength = 0;
home();
#ifdef LOCALPICTURES
if (m_viewer == NULL)
{
m_viewer = new QScrollView(NULL);
m_picture = new QWidget(m_viewer->viewport());
m_viewer->addChild(m_picture);
}
#endif
return 0;
}
QImage* CPlucker_base::getimg(UInt16 tgt)
{
size_t reclen;
UInt16 thisrec = finduid(tgt);
reclen = recordlength(thisrec);
gotorecordnumber(thisrec);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
reclen -= HeaderSize();
UInt32 imgsize = thishdr_size;
UInt8* imgbuffer = new UInt8[imgsize];
Expand(reclen, thishdr_type, imgbuffer, imgsize);
return imagefromdata(imgbuffer, imgsize);
}
linkType CPlucker_base::hyperlink(unsigned int n, QString& wrd)
{
visited.push_front(n);
UInt16 tuid = (n >> 16);
n &= 0xffff;
-// //qDebug("Hyper:<%u,%u>", tuid, n);
+// //odebug << "Hyper:<" << tuid << "," << n << ">" << oendl;
UInt16 thisrec = 1;
currentpos = 0;
gotorecordnumber(thisrec);
UInt16 thishdr_uid, thishdr_nParagraphs;
UInt32 thishdr_size;
UInt8 thishdr_type, thishdr_reserved;
while (1)
{
GetHeader(thishdr_uid, thishdr_nParagraphs, thishdr_size, thishdr_type, thishdr_reserved);
if (tuid == thishdr_uid) break;
if (thishdr_type < 2) currentpos += thishdr_size;
-// //qDebug("hyper-cp:%u", currentpos);
+// //odebug << "hyper-cp:" << currentpos << "" << oendl;
thisrec++;
if (thisrec >= ntohs(head.recordList.numRecords))
{
char *turl = geturl(tuid);
if (turl == NULL)
{
QMessageBox::information(NULL,
QString(PROGNAME),
QString("Couldn't find link")
);
}
else
{
wrd = turl;
#ifdef USEQPE
if (wrd.length() > 10)
{
Global::statusMessage(wrd.left(8) + "..");
}
else
{
Global::statusMessage(wrd);
}
#else
#endif /* USEQPE */
- //qDebug("Link:%s", (const char*)wrd);
+ //odebug << "Link:" << wrd << "" << oendl;
// setlink(fn, wrd);
delete [] turl;
}
return eNone;
}
gotorecordnumber(thisrec);
}
if (thishdr_type > 1)
{
if (thishdr_type == 4)
{
QMessageBox::information(NULL,
QString(PROGNAME),
QString("Mailto links\nnot yet supported (2)"));
}
else
{
if (thishdr_type > 3)
{
QMessageBox::information(NULL,
QString(PROGNAME),
QString("External links\nnot yet supported (2)")
);
return eNone;
}
else
{
#ifdef LOCALPICTURES
showimg(tuid);
#else
return ePicture;
#endif
}
}
return eNone;
}
/*
if (thishdr_type == 2 || thishdr_type == 3)
{
expandimg(thisrec);
}
*/
else
{
expand(thisrec);
if (n != 0)
{
if (n >= m_nParas)
{
QMessageBox::information(NULL,
QString(PROGNAME),
QString("Error in link\nPara # too big")
);
return eNone;
}
unsigned int noff = 0;
for (unsigned int i = 0; i < n; i++) noff += m_ParaOffsets[i];
n = noff;
}
if (n > thishdr_size)
{
QMessageBox::information(NULL,
QString(PROGNAME),
QString("Error in link\nOffset too big")
);
return eNone;
}
- //qDebug("Hyper:<%u,%u>", tuid, n);
+ //odebug << "Hyper:<" << tuid << "," << n << ">" << oendl;
while (bufferpos < n && bufferpos < buffercontent) getch_base(true);
/* // This is faster but the alignment doesn't get set
mystyle.unset();
bufferpos = n;
currentpos += n;
while (bufferpos >= m_nextPara && m_nextPara >= 0)
{
UInt16 attr = m_ParaAttrs[m_nextParaIndex];
m_nextParaIndex++;
if (m_nextParaIndex == m_nParas)
{
m_nextPara = -1;
}
else
{
m_nextPara += m_ParaOffsets[m_nextParaIndex];
}
}
*/
}
return eLink;
}
tchar CPlucker_base::getch_base(bool fast)
{
int ch = bgetch();
while (ch == 0)
{
ch = bgetch();
-// //qDebug("Function:%x", ch);
+// //odebug << "Function:" << ch << "" << oendl;
switch (ch)
{
case 0x38:
-// //qDebug("Break:%u", locate());
+// //odebug << "Break:" << locate() << "" << oendl;
if (m_lastBreak == locate())
{
ch = bgetch();
}
else
{
ch = 10;
}
m_lastBreak = locate();
break;
case 0x0a:
case 0x0c:
{
unsigned long ln = 0;
int skip = ch & 7;
for (int i = 0; i < 2; i++)
{
int ch = bgetch();
ln = (ln << 8) + ch;
-// //qDebug("ch:%d, ln:%u", ch, ln);
+// //odebug << "ch:" << ch << ", ln:" << ln << "" << oendl;
}
if (skip == 2)
{
ln <<= 16;
}
else
{
for (int i = 0; i < 2; i++)
{
int ch = bgetch();
ln = (ln << 8) + ch;
-// //qDebug("ch:%d, ln:%u", ch, ln);
+// //odebug << "ch:" << ch << ", ln:" << ln << "" << oendl;
}
}
-// //qDebug("ln:%u", ln);
+// //odebug << "ln:" << ln << "" << oendl;
mystyle.setLink(true);
mystyle.setData(ln);
// mystyle.setColour(255, 0, 0);
bool hasseen = false;
for (CList<unsigned long>::iterator it = visited.begin(); it != visited.end(); it++)
{
if (*it == ln)
{
hasseen = true;
break;
}
}
if (hasseen)
{
mystyle.setStrikethru();
}
else
{
mystyle.setUnderline();
}
ch = bgetch();
}
break;
case 0x08:
ch = bgetch();
// mystyle.setColour(0, 0, 0);
mystyle.unsetUnderline();
mystyle.unsetStrikethru();
mystyle.setLink(false);
mystyle.setData(0);
break;
case 0x40:
mystyle.setItalic();
ch = bgetch();
break;
case 0x48:
mystyle.unsetItalic();
ch = bgetch();
break;
case 0x11:
{
ch = bgetch();
-// //qDebug("Font:%d",ch);
+// //odebug << "Font:" << ch << "" << oendl;
mystyle.setVOffset(0);
mystyle.unsetMono();
mystyle.unsetBold();
mystyle.setFontSize(0);
switch (ch)
{
case 0:
break;
case 1:
mystyle.setBold();
mystyle.setFontSize(3);
break;
case 2:
mystyle.setBold();
mystyle.setFontSize(2);
break;
case 3:
mystyle.setBold();
mystyle.setFontSize(1);
break;
case 4:
mystyle.setBold();
break;
case 5:
mystyle.setBold();
break;
case 6:
mystyle.setBold();
break;
case 7:
mystyle.setBold();
break;
case 8: // should be fixed width
- //qDebug("Trying fixed width");
+ //odebug << "Trying fixed width" << oendl;
mystyle.setMono();
break;
case 9:
mystyle.setFontSize(-1);
break;
case 10:
mystyle.setFontSize(-2);
mystyle.setVOffset(1);
break;
case 11:
mystyle.setFontSize(-2);
mystyle.setVOffset(-1);
break;
default:
- qDebug("Unrecognised font");
+ odebug << "Unrecognised font" << oendl;
break;
}
ch = bgetch();
}
break;
case 0x29:
ch = bgetch();
switch (ch)
{
case 0:
mystyle.setLeftJustify();
-// //qDebug("left");
+// //odebug << "left" << oendl;
break;
case 1:
mystyle.setRightJustify();
-// //qDebug("right");
+// //odebug << "right" << oendl;
break;
case 2:
mystyle.setCentreJustify();
-// //qDebug("centre");
+// //odebug << "centre" << oendl;
break;
case 3:
mystyle.setFullJustify();
-// //qDebug("full");
+// //odebug << "full" << oendl;
break;
}
ch = bgetch();
break;
case 0x53:
{
int r = bgetch();
int g = bgetch();
int b = bgetch();
mystyle.setColour(r,g,b);
ch = bgetch();
}
break;
case 0x1a:
case 0x5c:
{
bool hasalternate = (ch == 0x5c);
UInt16 ir = bgetch();
ir = (ir << 8) + bgetch();
if (hasalternate)
{
- //qDebug("Alternate image:%x", ir);
+ //odebug << "Alternate image:" << ir << "" << oendl;
UInt16 ir2 = bgetch();
ir2 = (ir2 << 8) + bgetch();
if (!fast) mystyle.setPicture(true, expandimg(ir2, true), true, ir << 16);
#ifdef LOCALPICTURES
UInt32 ln = ir;
ln <<= 16;
mystyle.setLink(true);
mystyle.setData(ln);
#endif
}
else
{
if (!fast) mystyle.setPicture(true, expandimg(ir));
}
-// if (mystyle.getLink()) qDebug("Picture link!");
+// if (mystyle.getLink()) odebug << "Picture link!" << oendl;
ch = '#';
}
// ch = bgetch();
break;
case 0x33:
{
UInt8 h = bgetch();
UInt8 wc = bgetch();
UInt8 pc = bgetch();
UInt16 w = wc;
-// //qDebug("h,w,pc [%u, %u, %u]", h, w, pc);
+// //odebug << "h,w,pc [" << h << ", " << w << ", " << pc << "]" << oendl;
if (w == 0)
{
w = (m_scrWidth*(unsigned long)pc)/100;
}
if (w == 0) w = m_scrWidth;
mystyle.setPicture(false, hRule(w,h,mystyle.Red(),mystyle.Green(),mystyle.Blue()));
-// if (mystyle.getLink()) //qDebug("hRule link!");
+// if (mystyle.getLink()) //odebug << "hRule link!" << oendl;
ch = '#';
}
break;
case 0x60:
mystyle.setUnderline();
ch = bgetch();
break;
case 0x68:
mystyle.unsetUnderline();
ch = bgetch();
break;
case 0x22:
ch = bgetch();
mystyle.setLeftMargin(ch);
-// //qDebug("Left margin:%d", ch);
+// //odebug << "Left margin:" << ch << "" << oendl;
ch = bgetch();
mystyle.setRightMargin(ch);
-// //qDebug("Right margin:%d", ch);
+// //odebug << "Right margin:" << ch << "" << oendl;
ch = bgetch();
break;
case 0x70:
mystyle.setStrikethru();
ch = bgetch();
break;
case 0x78:
mystyle.unsetStrikethru();
ch = bgetch();
break;
case 0x83:
{
int tlen = bgetch();
ch = bgetch();
ch <<= 8;
ch |= (tchar)bgetch();
for (int i = 0; i < tlen; i++) bgetch();
- //qDebug("Function 83");
+ //odebug << "Function 83" << oendl;
}
break;
case 0x85:
default:
- qDebug("Function:%x NOT IMPLEMENTED", ch);
+ odebug << "Function:" << ch << " NOT IMPLEMENTED" << oendl;
{
int skip = ch & 7;
for (int i = 0; i < skip; i++)
{
ch = bgetch();
- //qDebug("Arg %d, %d", i, ch);
+ //odebug << "Arg " << i << ", " << ch << "" << oendl;
}
ch = bgetch();
}
}
}
if (m_lastIsBreak && !mystyle.isMono())
{
while (ch == ' ')
{
ch = getch(false);
}
}
m_lastIsBreak = (ch == 10);
return (ch == EOF) ? UEOF : ch;
}
diff --git a/noncore/apps/tinykate/libkate/document/katebuffer.cpp b/noncore/apps/tinykate/libkate/document/katebuffer.cpp
index 22a4917..4c15fd0 100644
--- a/noncore/apps/tinykate/libkate/document/katebuffer.cpp
+++ b/noncore/apps/tinykate/libkate/document/katebuffer.cpp
@@ -1,179 +1,180 @@
/*
This file is part of KWrite
Copyright (c) 2000 Waldo Bastian <bastian@kde.org>
Copyright (c) 2002 Joseph Wenninger <jowenn@kde.org>
$Id$
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License version 2 as published by the Free Software Foundation.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "katebuffer.h"
+#include "kdebug.h"
-// Includes for reading file
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <unistd.h>
+/* OPIE */
+#include <opie2/odebug.h>
+/* QT */
#include <qfile.h>
#include <qtextstream.h>
-
#include <qtimer.h>
#include <qtextcodec.h>
-//
-
+/* STD */
+// Includes for reading file
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
#include <assert.h>
-#include <kdebug.h>
/**
* Create an empty buffer.
*/
KWBuffer::KWBuffer()
{
clear();
}
void
KWBuffer::clear()
{
m_stringListIt=0;
m_stringListCurrent=0;
m_stringList.clear();
m_lineCount=1;
m_stringListIt = m_stringList.append(new TextLine());
}
/**
* Insert a file at line @p line in the buffer.
*/
void
KWBuffer::insertFile(int line, const QString &file, QTextCodec *codec)
{
if (line) {
- qDebug("insert File only supports insertion at line 0 == file opening");
+ odebug << "insert File only supports insertion at line 0 == file opening" << oendl;
return;
}
clear();
QFile iofile(file);
iofile.open(IO_ReadOnly);
QTextStream stream(&iofile);
stream.setCodec(codec);
QString qsl;
int count=0;
for (count=0;((qsl=stream.readLine())!=QString::null); count++)
{
if (count==0)
{
(*m_stringListIt)->append(qsl.unicode(),qsl.length());
}
else
{
TextLine::Ptr tl=new TextLine();
tl ->append(qsl.unicode(),qsl.length());
m_stringListIt=m_stringList.append(tl);
}
}
if (count!=0)
{
m_stringListCurrent=count-1;
m_lineCount=count;
}
}
void
KWBuffer::loadFilePart()
{
}
void
KWBuffer::insertData(int line, const QByteArray &data, QTextCodec *codec)
{
}
void
KWBuffer::slotLoadFile()
{
loadFilePart();
// emit linesChanged(m_totalLines);
emit linesChanged(20);
}
/**
* Return the total number of lines in the buffer.
*/
int
KWBuffer::count()
{
- qDebug("m_stringList.count %d",m_stringList.count());
+ odebug << "m_stringList.count " << m_stringList.count() << "" << oendl;
return m_lineCount;
// return m_stringList.count();
// return m_totalLines;
}
void KWBuffer::seek(int i)
{
if (m_stringListCurrent == i)
return;
while(m_stringListCurrent < i)
{
++m_stringListCurrent;
++m_stringListIt;
}
while(m_stringListCurrent > i)
{
--m_stringListCurrent;
--m_stringListIt;
}
}
TextLine::Ptr
KWBuffer::line(int i)
{
if (i>=m_stringList.count()) return 0;
seek(i);
return *m_stringListIt;
}
void
KWBuffer::insertLine(int i, TextLine::Ptr line)
{
seek(i);
m_stringListIt = m_stringList.insert(m_stringListIt, line);
m_stringListCurrent = i;
m_lineCount++;
}
void
KWBuffer::removeLine(int i)
{
seek(i);
m_stringListIt = m_stringList.remove(m_stringListIt);
m_stringListCurrent = i;
m_lineCount--;
}
void
KWBuffer::changeLine(int i)
{
}
diff --git a/noncore/apps/tinykate/libkate/document/katedocument.cpp b/noncore/apps/tinykate/libkate/document/katedocument.cpp
index 0c742d7..6dc4fd2 100644
--- a/noncore/apps/tinykate/libkate/document/katedocument.cpp
+++ b/noncore/apps/tinykate/libkate/document/katedocument.cpp
@@ -1,3174 +1,3175 @@
/***************************************************************************
katedocument.cpp - description
-------------------
begin : Mon Jan 15 2001
copyright : (C) 2001 by Christoph "Crossfire" Cullmann
(C) 2002 by Joseph Wenninger
email : crossfire@babylon2k.de
jowenn@kde.org
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
/*
Copyright (C) 1998, 1999 Jochen Wilhelmy
digisnap@cs.tu-berlin.de
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
#include "katedocument.h"
+#include "kmessagebox.h"
+#include "kglobal.h"
+//#include "kcharsets.h"
+#include "kdebug.h"
+//#include "kinstance.h"
-#include <qfileinfo.h>
-#include <qdatetime.h>
+#include "kglobalsettings.h"
+//#include "kaction.h"
+//#include "kstdaction.h"
-#include <kmessagebox.h>
-#include <qpe/config.h>
-#include <qstring.h>
+#include "../view/kateview.h"
+#include "katebuffer.h"
+#include "katetextline.h"
-#include <sys/time.h>
-#include <unistd.h>
+#include "katecmd.h"
-#include <stdio.h>
+/* OPIE */
+#include <opie2/odebug.h>
+#include <qpe/config.h>
+/* QT */
+#include <qfileinfo.h>
+#include <qdatetime.h>
+#include <qstring.h>
#include <qtimer.h>
#include <qobject.h>
#include <qapplication.h>
#include <qclipboard.h>
#include <qfont.h>
#include <qpainter.h>
#include <qfile.h>
#include <qtextstream.h>
#include <qtextcodec.h>
-#include <kglobal.h>
-
-//#include <kcharsets.h>
-#include <kdebug.h>
-//#include <kinstance.h>
-
-#include <kglobalsettings.h>
-//#include <kaction.h>
-//#include <kstdaction.h>
-
-#include "../view/kateview.h"
-#include "katebuffer.h"
-#include "katetextline.h"
-#include "katecmd.h"
+/* STD */
+#include <sys/time.h>
+#include <unistd.h>
+#include <stdio.h>
KateAction::KateAction(Action a, PointStruc &cursor, int len, const QString &text)
: action(a), cursor(cursor), len(len), text(text) {
}
KateActionGroup::KateActionGroup(PointStruc &aStart, int type)
: start(aStart), action(0L), undoType(type) {
}
KateActionGroup::~KateActionGroup() {
KateAction *current, *next;
current = action;
while (current) {
next = current->next;
delete current;
current = next;
}
}
void KateActionGroup::insertAction(KateAction *a) {
a->next = action;
action = a;
}
const char * KateActionGroup::typeName(int type)
{
// return a short text description of the given undo group type suitable for a menu
// not the lack of i18n's, the caller is expected to handle translation
switch (type) {
case ugPaste : return "Paste Text";
case ugDelBlock : return "Selection Overwrite";
case ugIndent : return "Indent";
case ugUnindent : return "Unindent";
case ugComment : return "Comment";
case ugUncomment : return "Uncomment";
case ugReplace : return "Text Replace";
case ugSpell : return "Spell Check";
case ugInsChar : return "Typing";
case ugDelChar : return "Delete Text";
case ugInsLine : return "New Line";
case ugDelLine : return "Delete Line";
}
return "";
}
const int KateDocument::maxAttribs = 32;
QStringList KateDocument::searchForList = QStringList();
QStringList KateDocument::replaceWithList = QStringList();
uint KateDocument::uniqueID = 0;
QPtrDict<KateDocument::KateDocPrivate>* KateDocument::d_ptr = 0;
KateDocument::KateDocument(bool bSingleViewMode, bool bBrowserView,
QWidget *parentWidget, const char *widgetName,
QObject *, const char *)
: Kate::Document (),
myFont(KGlobalSettings::generalFont()), myFontBold(KGlobalSettings::generalFont()), myFontItalic(KGlobalSettings::generalFont()), myFontBI(KGlobalSettings::generalFont()),
myFontMetrics (myFont), myFontMetricsBold (myFontBold), myFontMetricsItalic (myFontItalic), myFontMetricsBI (myFontBI),
hlManager(HlManager::self ())
{
d(this)->hlSetByUser = false;
PreHighlightedTill=0;
RequestPreHighlightTill=0;
m_bSingleViewMode=bSingleViewMode;
m_bBrowserView = bBrowserView;
m_url = QString::null;
// NOTE: QFont::CharSet doesn't provide all the charsets KDE supports
// (esp. it doesn't distinguish between UTF-8 and iso10646-1)
myEncoding = QString::fromLatin1(QTextCodec::codecForLocale()->name());
maxLength = -1;
setFont (KGlobalSettings::generalFont());
myDocID = uniqueID;
uniqueID++;
myDocName = QString ("");
fileInfo = new QFileInfo ();
myCmd = new KateCmd (this);
connect(this,SIGNAL(modifiedChanged()),this,SLOT(slotModChanged()));
buffer = new KWBuffer;
connect(buffer, SIGNAL(linesChanged(int)), this, SLOT(slotBufferChanged()));
// connect(buffer, SIGNAL(textChanged()), this, SIGNAL(textChanged()));
connect(buffer, SIGNAL(needHighlight(long,long)),this,SLOT(slotBufferHighlight(long,long)));
colors[0] = KGlobalSettings::baseColor();
colors[1] = KGlobalSettings::highlightColor();
m_attribs = new Attribute[maxAttribs];
m_highlight = 0L;
tabChars = 8;
m_singleSelection = false;
newDocGeometry = false;
readOnly = false;
newDoc = false;
modified = false;
undoList.setAutoDelete(true);
undoState = 0;
undoSteps = 50;
pseudoModal = 0L;
clear();
setHighlight(0); //calls updateFontData()
// if the user changes the highlight with the dialog, notify the doc
connect(hlManager,SIGNAL(changed()),SLOT(hlChanged()));
newDocGeometry = false;
readConfig();
setReadOnly(false);
}
void KateDocument::setDontChangeHlOnSave()
{
d(this)->hlSetByUser = true;
}
void KateDocument::setFont (QFont font)
{
kdDebug()<<"Kate:: setFont"<<endl;
int oldwidth=myFontMetrics.width('W'); //Quick & Dirty Hack (by JoWenn) //Remove in KDE 3.0
myFont = font;
myFontBold = QFont (font);
myFontBold.setBold (true);
myFontItalic = QFont (font);
myFontItalic.setItalic (true);
myFontBI = QFont (font);
myFontBI.setBold (true);
myFontBI.setItalic (true);
myFontMetrics = CachedFontMetrics (myFont);
myFontMetricsBold = CachedFontMetrics (myFontBold);
myFontMetricsItalic = CachedFontMetrics (myFontItalic);
myFontMetricsBI = CachedFontMetrics (myFontBI);
int newwidth=myFontMetrics.width('W'); //Quick & Dirty Hack (by JoWenn) //Remove in KDE 3.0
maxLength=maxLength*(float)newwidth/(float)oldwidth; //Quick & Dirty Hack (by JoWenn) //Remove in KDE 3.0
updateFontData();
updateViews(); //Quick & Dirty Hack (by JoWenn) //Remove in KDE 3.0
}
long KateDocument::needPreHighlight(long till)
{
int max=numLines()-1;
if (till>max)
{
till=max;
}
if (PreHighlightedTill>=till) return -1;
long tmp=RequestPreHighlightTill;
if (RequestPreHighlightTill<till)
{
RequestPreHighlightTill=till;
if (tmp<=PreHighlightedTill) QTimer::singleShot(10,this,SLOT(doPreHighlight()));
}
return RequestPreHighlightTill;
}
void KateDocument::doPreHighlight()
{
int from = PreHighlightedTill;
int till = PreHighlightedTill+200;
int max = numLines()-1;
if (till > max)
{
till = max;
}
PreHighlightedTill = till;
updateLines(from,till);
emit preHighlightChanged(PreHighlightedTill);
if (PreHighlightedTill<RequestPreHighlightTill)
QTimer::singleShot(10,this,SLOT(doPreHighlight()));
}
KateDocument::~KateDocument()
{
m_highlight->release();
writeConfig();
if ( !m_bSingleViewMode )
{
m_views.setAutoDelete( true );
m_views.clear();
m_views.setAutoDelete( false );
}
delete_d(this);
}
void KateDocument::openURL(const QString &filename)
{
m_file=filename;
fileInfo->setFile (m_file);
setMTime();
if (!fileInfo->exists() || !fileInfo->isReadable())
{
- qDebug("File doesn't exit or couldn't be read");
+ odebug << "File doesn't exit or couldn't be read" << oendl;
return ;
}
buffer->clear();
#warning fixme
// buffer->insertFile(0, m_file, KGlobal::charsets()->codecForName(myEncoding));
- qDebug("Telling buffer to open file");
+ odebug << "Telling buffer to open file" << oendl;
buffer->insertFile(0, m_file, QTextCodec::codecForLocale());
setMTime();
if (myWordWrap)
wrapText (myWordWrapAt);
int hl = hlManager->wildcardFind( m_file );
setHighlight(hl);
updateLines();
updateViews();
emit fileNameChanged();
return ;
}
bool KateDocument::saveFile()
{
QFile f( m_file );
if ( !f.open( IO_WriteOnly ) )
return false; // Error
QTextStream stream(&f);
stream.setEncoding(QTextStream::RawUnicode); // disable Unicode headers
#warning fixme
// stream.setCodec(KGlobal::charsets()->codecForName(myEncoding));
stream.setCodec(QTextCodec::codecForLocale()); // this line sets the mapper to the correct codec
int maxLine = numLines();
int line = 0;
while(true)
{
stream << getTextLine(line)->getString();
line++;
if (line >= maxLine) break;
if (eolMode == KateDocument::eolUnix) stream << "\n";
else if (eolMode == KateDocument::eolDos) stream << "\r\n";
else if (eolMode == KateDocument::eolMacintosh) stream << '\r';
};
f.close();
fileInfo->setFile (m_file);
setMTime();
if (!(d(this)->hlSetByUser))
{
int hl = hlManager->wildcardFind( m_file );
setHighlight(hl);
}
emit fileNameChanged ();
return (f.status() == IO_Ok);
}
KTextEditor::View *KateDocument::createView( QWidget *parent, const char *name )
{
return new KateView( this, parent, name);
}
QString KateDocument::textLine( int line ) const
{
TextLine::Ptr l = getTextLine( line );
if ( !l )
return QString();
return l->getString();
}
void KateDocument::replaceLine(const QString& s,int line)
{
remove_Line(line,false);
insert_Line(s,line,true);
}
void KateDocument::insertLine( const QString &str, int l ) {
insert_Line(str,l,true);
}
void KateDocument::insert_Line(const QString& s,int line, bool update)
{
kdDebug(13020)<<"KateDocument::insertLine "<<s<<QString(" %1").arg(line)<<endl;
TextLine::Ptr TL=new TextLine();
TL->append(s.unicode(),s.length());
buffer->insertLine(line,TL);
if (update)
{
newDocGeometry=true;
updateLines(line);
updateViews();
}
}
void KateDocument::insertAt( const QString &s, int line, int col, bool )
{
VConfig c;
c.view = 0; // ### FIXME
c.cursor.x = col;
c.cursor.y = line;
c.cXPos = 0; // ### FIXME
c.flags = 0; // ### FIXME
insert( c, s );
}
void KateDocument::removeLine( int line ) {
remove_Line(line,true);
}
void KateDocument::remove_Line(int line,bool update)
{
kdDebug(13020)<<"KateDocument::removeLine "<<QString("%1").arg(line)<<endl;
buffer->removeLine(line);
// newDocGeometry=true;
// if line==0)
if (update)
{
updateLines(line);
updateViews();
}
}
int KateDocument::length() const
{
return text().length();
}
void KateDocument::setSelection( int , int , int , int )
{
}
bool KateDocument::hasSelection() const
{
return (selectEnd >= selectStart);
}
QString KateDocument::selection() const
{
uint flags = 0;
TextLine::Ptr textLine;
int len, z, start, end, i;
len = 1;
if (!(flags & KateView::cfVerticalSelect)) {
for (z = selectStart; z <= selectEnd; z++) {
textLine = getTextLine(z);
len += textLine->numSelected();
if (textLine->isSelected()) len++;
}
QString s;
len = 0;
for (z = selectStart; z <= selectEnd; z++) {
textLine = getTextLine(z);
end = 0;
do {
start = textLine->findUnselected(end);
end = textLine->findSelected(start);
for (i = start; i < end; i++) {
s[len] = textLine->getChar(i);
len++;
}
} while (start < end);
if (textLine->isSelected()) {
s[len] = '\n';
len++;
}
}
// s[len] = '\0';
return s;
} else {
for (z = selectStart; z <= selectEnd; z++) {
textLine = getTextLine(z);
len += textLine->numSelected() + 1;
}
QString s;
len = 0;
for (z = selectStart; z <= selectEnd; z++) {
textLine = getTextLine(z);
end = 0;
do {
start = textLine->findUnselected(end);
end = textLine->findSelected(start);
for (i = start; i < end; i++) {
s[len] = textLine->getChar(i);
len++;
}
} while (start < end);
s[len] = '\n';
len++;
}
// s[len] = '\0'; // the final \0 is not counted in length()
return s;
}
}
int KateDocument::numLines() const
{
return buffer->count();
}
TextLine::Ptr KateDocument::getTextLine(int line) const
{
// This is a hack to get this stuff working.
return buffer->line(line);
}
int KateDocument::textLength(int line) {
TextLine::Ptr textLine = getTextLine(line);
if (!textLine) return 0;
return textLine->length();
}
void KateDocument::setTabWidth(int chars) {
if (tabChars == chars) return;
if (chars < 1) chars = 1;
if (chars > 16) chars = 16;
tabChars = chars;
updateFontData();
maxLength = -1;
for (int i=0; i < buffer->count(); i++)
{
TextLine::Ptr textLine = buffer->line(i);
int len = textWidth(textLine,textLine->length());
if (len > maxLength) {
maxLength = len;
longestLine = textLine;
}
}
}
void KateDocument::setReadOnly(bool m) {
KTextEditor::View *view;
if (m != readOnly) {
readOnly = m;
// if (readOnly) recordReset();
for (view = m_views.first(); view != 0L; view = m_views.next() ) {
emit static_cast<KateView *>( view )->newStatus();
}
}
}
bool KateDocument::isReadOnly() const {
return readOnly;
}
void KateDocument::setNewDoc( bool m )
{
// KTextEditor::View *view;
if ( m != newDoc )
{
newDoc = m;
//// if (readOnly) recordReset();
// for (view = m_views.first(); view != 0L; view = m_views.next() ) {
// emit static_cast<KateView *>( view )->newStatus();
// }
}
}
bool KateDocument::isNewDoc() const {
return newDoc;
}
void KateDocument::setModified(bool m) {
KTextEditor::View *view;
if (m != modified) {
modified = m;
for (view = m_views.first(); view != 0L; view = m_views.next() ) {
emit static_cast<KateView *>( view )->newStatus();
}
emit modifiedChanged ();
}
}
bool KateDocument::isModified() const {
return modified;
}
void KateDocument::readConfig()
{
KateConfig *config = KGlobal::config();
config->setGroup("Kate Document");
myWordWrap = config->readBoolEntry("Word Wrap On", false);
myWordWrapAt = config->readNumEntry("Word Wrap At", 80);
if (myWordWrap)
wrapText (myWordWrapAt);
setTabWidth(config->readNumEntry("TabWidth", 8));
setUndoSteps(config->readNumEntry("UndoSteps", 50));
m_singleSelection = config->readBoolEntry("SingleSelection", false);
myEncoding = config->readEntry("Encoding", QString::fromLatin1(QTextCodec::codecForLocale()->name()));
setFont (config->readFontEntry("Font", myFont));
colors[0] = config->readColorEntry("Color Background", colors[0]);
colors[1] = config->readColorEntry("Color Selected", colors[1]);
// config->sync();
}
void KateDocument::writeConfig()
{
KateConfig *config = KGlobal::config();
config->setGroup("Kate Document");
config->writeEntry("Word Wrap On", myWordWrap);
config->writeEntry("Word Wrap At", myWordWrapAt);
config->writeEntry("TabWidth", tabChars);
config->writeEntry("UndoSteps", undoSteps);
config->writeEntry("SingleSelection", m_singleSelection);
config->writeEntry("Encoding", myEncoding);
config->writeEntry("Font", myFont);
config->writeEntry("Color Background", colors[0]);
config->writeEntry("Color Selected", colors[1]);
// config->sync();
}
void KateDocument::readSessionConfig(KateConfig *config)
{
m_url = config->readEntry("URL"); // ### doesn't this break the encoding? (Simon)
setHighlight(hlManager->nameFind(config->readEntry("Highlight")));
// anders: restore bookmarks if possible
QValueList<int> l = config->readIntListEntry("Bookmarks");
if ( l.count() ) {
for (uint i=0; i < l.count(); i++) {
if ( numLines() < l[i] ) break;
getTextLine( l[i] )->addMark( Bookmark );
}
}
}
void KateDocument::writeSessionConfig(KateConfig *config)
{
#if 0
config->writeEntry("URL", m_url); // ### encoding?? (Simon)
config->writeEntry("Highlight", m_highlight->name());
// anders: save bookmarks
QList<Kate::Mark> l = marks();
QValueList<int> ml;
for (uint i=0; i < l.count(); i++) {
if ( l.at(i)->type == 1) // only save bookmarks
ml << l.at(i)->line;
}
if ( ml.count() )
config->writeEntry("Bookmarks", ml);
#endif
}
void KateDocument::setHighlight(int n) {
Highlight *h;
// hlNumber = n;
h = hlManager->getHl(n);
if (h == m_highlight) {
updateLines();
} else {
if (m_highlight != 0L) m_highlight->release();
h->use();
m_highlight = h;
makeAttribs();
}
PreHighlightedTill=0;
RequestPreHighlightTill=0;
emit(highlightChanged());
}
void KateDocument::makeAttribs() {
- qDebug("KateDocument::makeAttribs()");
+ odebug << "KateDocument::makeAttribs()" << oendl;
m_numAttribs = hlManager->makeAttribs(m_highlight, m_attribs, maxAttribs);
updateFontData();
updateLines();
}
void KateDocument::updateFontData() {
int maxAscent, maxDescent;
int tabWidth;
KateView *view;
maxAscent = myFontMetrics.ascent();
maxDescent = myFontMetrics.descent();
tabWidth = myFontMetrics.width(' ');
fontHeight = maxAscent + maxDescent + 1;
fontAscent = maxAscent;
m_tabWidth = tabChars*tabWidth;
for (view = views.first(); view != 0L; view = views.next() ) {
view->myViewInternal->drawBuffer->resize(view->width(),fontHeight);
view->tagAll();
view->updateCursor();
}
}
void KateDocument::hlChanged() { //slot
makeAttribs();
updateViews();
}
void KateDocument::addView(KTextEditor::View *view) {
views.append( static_cast<KateView *>( view ) );
KTextEditor::Document::addView( view );
connect( static_cast<KateView *>( view ), SIGNAL( destroyed() ), this, SLOT( slotViewDestroyed() ) );
}
void KateDocument::removeView(KTextEditor::View *view) {
// if (undoView == view) recordReset();
disconnect( static_cast<KateView *>( view ), SIGNAL( destroyed() ), this, SLOT( slotViewDestroyed() ) );
views.removeRef( static_cast<KateView *>( view ) );
KTextEditor::Document::removeView( view );
}
void KateDocument::slotViewDestroyed()
{
views.removeRef( static_cast<const KateView *>( sender() ) );
}
bool KateDocument::ownedView(KateView *view) {
// do we own the given view?
return (views.containsRef(view) > 0);
}
bool KateDocument::isLastView(int numViews) {
return ((int) views.count() == numViews);
}
int KateDocument::textWidth(const TextLine::Ptr &textLine, int cursorX) {
int x;
int z;
QChar ch;
Attribute *a;
x = 0;
for (z = 0; z < cursorX; z++) {
ch = textLine->getChar(z);
a = &m_attribs[textLine->getAttr(z)];
if (ch == '\t')
x += m_tabWidth - (x % m_tabWidth);
else if (a->bold && a->italic)
x += myFontMetricsBI.width(ch);
else if (a->bold)
x += myFontMetricsBold.width(ch);
else if (a->italic)
x += myFontMetricsItalic.width(ch);
else
x += myFontMetrics.width(ch);
}
return x;
}
int KateDocument::textWidth(PointStruc &cursor) {
if (cursor.x < 0)
cursor.x = 0;
if (cursor.y < 0)
cursor.y = 0;
if (cursor.y >= numLines())
cursor.y = lastLine();
return textWidth(getTextLine(cursor.y),cursor.x);
}
int KateDocument::textWidth(bool wrapCursor, PointStruc &cursor, int xPos) {
int len;
int x, oldX;
int z;
QChar ch;
Attribute *a;
if (cursor.y < 0) cursor.y = 0;
if (cursor.y > lastLine()) cursor.y = lastLine();
TextLine::Ptr textLine = getTextLine(cursor.y);
len = textLine->length();
x = oldX = z = 0;
while (x < xPos && (!wrapCursor || z < len)) {
oldX = x;
ch = textLine->getChar(z);
a = &m_attribs[textLine->getAttr(z)];
if (ch == '\t')
x += m_tabWidth - (x % m_tabWidth);
else if (a->bold && a->italic)
x += myFontMetricsBI.width(ch);
else if (a->bold)
x += myFontMetricsBold.width(ch);
else if (a->italic)
x += myFontMetricsItalic.width(ch);
else
x += myFontMetrics.width(ch);
z++;
}
if (xPos - oldX < x - xPos && z > 0) {
z--;
x = oldX;
}
cursor.x = z;
return x;
}
int KateDocument::textPos(const TextLine::Ptr &textLine, int xPos) {
int x, oldX;
int z;
QChar ch;
Attribute *a;
x = oldX = z = 0;
while (x < xPos) { // && z < len) {
oldX = x;
ch = textLine->getChar(z);
a = &m_attribs[textLine->getAttr(z)];
if (ch == '\t')
x += m_tabWidth - (x % m_tabWidth);
else if (a->bold && a->italic)
x += myFontMetricsBI.width(ch);
else if (a->bold)
x += myFontMetricsBold.width(ch);
else if (a->italic)
x += myFontMetricsItalic.width(ch);
else
x += myFontMetrics.width(ch);
z++;
}
if (xPos - oldX < x - xPos && z > 0) {
z--;
// newXPos = oldX;
}// else newXPos = x;
return z;
}
int KateDocument::textWidth() {
return int(maxLength + 8);
}
int KateDocument::textHeight() {
return numLines()*fontHeight;
}
void KateDocument::insert(VConfig &c, const QString &s) {
int pos;
QChar ch;
QString buf;
if (s.isEmpty()) return;
recordStart(c, KateActionGroup::ugPaste);
pos = 0;
if (!(c.flags & KateView::cfVerticalSelect)) {
do {
ch = s[pos];
if (ch.isPrint() || ch == '\t') {
buf += ch; // append char to buffer
} else if (ch == '\n') {
recordAction(KateAction::newLine, c.cursor); // wrap contents behind cursor to new line
recordInsert(c, buf); // append to old line
// c.cursor.x += buf.length();
buf.truncate(0); // clear buffer
c.cursor.y++;
c.cursor.x = 0;
}
pos++;
} while (pos < (int) s.length());
} else {
int xPos;
xPos = textWidth(c.cursor);
do {
ch = s[pos];
if (ch.isPrint() || ch == '\t') {
buf += ch;
} else if (ch == '\n') {
recordInsert(c, buf);
c.cursor.x += buf.length();
buf.truncate(0);
c.cursor.y++;
if (c.cursor.y >= numLines())
recordAction(KateAction::insLine, c.cursor);
c.cursor.x = textPos(getTextLine(c.cursor.y), xPos);
}
pos++;
} while (pos < (int) s.length());
}
recordInsert(c, buf);
c.cursor.x += buf.length();
recordEnd(c);
}
void KateDocument::insertFile(VConfig &c, QIODevice &dev)
{
recordStart(c, KateActionGroup::ugPaste);
QString buf;
QChar ch, last;
QTextStream stream( &dev );
while ( !stream.atEnd() ) {
stream >> ch;
if (ch.isPrint() || ch == '\t') {
buf += ch;
} else if (ch == '\n' || ch == '\r') {
if (last != '\r' || ch != '\n') {
recordAction(KateAction::newLine, c.cursor);
recordInsert(c, buf);
buf.truncate(0);
c.cursor.y++;
c.cursor.x = 0;
}
last = ch;
}
}
recordInsert(c, buf);
recordEnd(c);
}
int KateDocument::currentColumn(PointStruc &cursor) {
return getTextLine(cursor.y)->cursorX(cursor.x,tabChars);
}
bool KateDocument::insertChars(VConfig &c, const QString &chars) {
int z, pos, l;
bool onlySpaces;
QChar ch;
QString buf;
TextLine::Ptr textLine = getTextLine(c.cursor.y);
pos = 0;
onlySpaces = true;
for (z = 0; z < (int) chars.length(); z++) {
ch = chars[z];
if (ch == '\t' && c.flags & KateView::cfReplaceTabs) {
l = tabChars - (textLine->cursorX(c.cursor.x, tabChars) % tabChars);
while (l > 0) {
buf.insert(pos, ' ');
pos++;
l--;
}
} else if (ch.isPrint() || ch == '\t') {
buf.insert(pos, ch);
pos++;
if (ch != ' ') onlySpaces = false;
if (c.flags & KateView::cfAutoBrackets) {
if (ch == '(') buf.insert(pos, ')');
if (ch == '[') buf.insert(pos, ']');
if (ch == '{') buf.insert(pos, '}');
}
}
}
//pos = cursor increment
//return false if nothing has to be inserted
if (buf.isEmpty()) return false;
//auto deletion of the marked text occurs not very often and can therefore
// be recorded separately
if (c.flags &KateView:: cfDelOnInput) delMarkedText(c);
recordStart(c, KateActionGroup::ugInsChar);
recordReplace(c/*.cursor*/, (c.flags & KateView::cfOvr) ? buf.length() : 0, buf);
c.cursor.x += pos;
if (myWordWrap && myWordWrapAt > 0) {
int line;
const QChar *s;
// int pos;
PointStruc actionCursor;
line = c.cursor.y;
do {
textLine = getTextLine(line);
s = textLine->getText();
l = textLine->length();
for (z = myWordWrapAt; z < l; z++) if (!s[z].isSpace()) break; //search for text to wrap
if (z >= l) break; // nothing more to wrap
pos = myWordWrapAt;
for (; z >= 0; z--) { //find wrap position
if (s[z].isSpace()) {
pos = z + 1;
break;
}
}
//pos = wrap position
if (line == c.cursor.y && pos <= c.cursor.x) {
//wrap cursor
c.cursor.y++;
c.cursor.x -= pos;
}
if (line == lastLine() || (getTextLine(line+1)->length() == 0) ) {
//at end of doc: create new line
actionCursor.x = pos;
actionCursor.y = line;
recordAction(KateAction::newLine,actionCursor);
} else {
//wrap
actionCursor.y = line + 1;
if (!s[l - 1].isSpace()) { //add space in next line if necessary
actionCursor.x = 0;
recordInsert(actionCursor, " ");
}
actionCursor.x = textLine->length() - pos;
recordAction(KateAction::wordWrap, actionCursor);
}
line++;
} while (true);
}
recordEnd(c);
return true;
}
QString tabString(int pos, int tabChars) {
QString s;
while (pos >= tabChars) {
s += '\t';
pos -= tabChars;
}
while (pos > 0) {
s += ' ';
pos--;
}
return s;
}
void KateDocument::newLine(VConfig &c) {
//auto deletion of marked text is done by the view to have a more
// "low level" KateDocument::newLine method
recordStart(c, KateActionGroup::ugInsLine);
if (!(c.flags & KateView::cfAutoIndent)) {
recordAction(KateAction::newLine,c.cursor);
c.cursor.y++;
c.cursor.x = 0;
} else {
TextLine::Ptr textLine = getTextLine(c.cursor.y);
int pos = textLine->firstChar();
if (c.cursor.x < pos) c.cursor.x = pos; // place cursor on first char if before
int y = c.cursor.y;
while ((y > 0) && (pos < 0)) { // search a not empty text line
textLine = getTextLine(--y);
pos = textLine->firstChar();
}
recordAction(KateAction::newLine, c.cursor);
c.cursor.y++;
c.cursor.x = 0;
if (pos > 0) {
pos = textLine->cursorX(pos, tabChars);
// if (getTextLine(c.cursor.y)->length() > 0) {
QString s = tabString(pos, (c.flags & KateView::cfSpaceIndent) ? 0xffffff : tabChars);
recordInsert(c.cursor, s);
pos = s.length();
// }
// recordInsert(c.cursor, QString(textLine->getText(), pos));
c.cursor.x = pos;
}
}
recordEnd(c);
}
void KateDocument::killLine(VConfig &c) {
recordStart(c, KateActionGroup::ugDelLine);
c.cursor.x = 0;
recordDelete(c.cursor, 0xffffff);
if (c.cursor.y < lastLine()) {
recordAction(KateAction::killLine, c.cursor);
}
recordEnd(c);
}
void KateDocument::backspace(VConfig &c) {
if (c.cursor.x <= 0 && c.cursor.y <= 0) return;
if (c.cursor.x > 0) {
recordStart(c, KateActionGroup::ugDelChar);
if (!(c.flags & KateView::cfBackspaceIndents)) {
// ordinary backspace
c.cursor.x--;
recordDelete(c.cursor, 1);
} else {
// backspace indents: erase to next indent position
int l = 1; // del one char
TextLine::Ptr textLine = getTextLine(c.cursor.y);
int pos = textLine->firstChar();
if (pos < 0 || pos >= c.cursor.x) {
// only spaces on left side of cursor
// search a line with less spaces
int y = c.cursor.y;
while (y > 0) {
textLine = getTextLine(--y);
pos = textLine->firstChar();
if (pos >= 0 && pos < c.cursor.x) {
l = c.cursor.x - pos; // del more chars
break;
}
}
}
// break effectively jumps here
c.cursor.x -= l;
recordDelete(c.cursor, l);
}
} else {
// c.cursor.x == 0: wrap to previous line
recordStart(c, KateActionGroup::ugDelLine);
c.cursor.y--;
c.cursor.x = getTextLine(c.cursor.y)->length();
recordAction(KateAction::delLine,c.cursor);
}
recordEnd(c);
}
void KateDocument::del(VConfig &c) {
TextLine::Ptr textLine = getTextLine(c.cursor.y);
int len = (c.flags & KateView::cfRemoveSpaces) ? textLine->lastChar() : textLine->length();
if (c.cursor.x < len/*getTextLine(c.cursor.y)->length()*/) {
// delete one character
recordStart(c, KateActionGroup::ugDelChar);
recordDelete(c.cursor, 1);
recordEnd(c);
} else {
if (c.cursor.y < lastLine()) {
// wrap next line to this line
textLine->truncate(c.cursor.x); // truncate spaces
recordStart(c, KateActionGroup::ugDelLine);
recordAction(KateAction::delLine,c.cursor);
recordEnd(c);
}
}
}
void KateDocument::clear() {
PointStruc cursor;
KateView *view;
setPseudoModal(0L);
cursor.x = cursor.y = 0;
for (view = views.first(); view != 0L; view = views.next() ) {
view->updateCursor(cursor);
view->tagAll();
}
eolMode = KateDocument::eolUnix;
buffer->clear();
longestLine = buffer->line(0);
maxLength = 0;
select.x = -1;
selectStart = 0xffffff;
selectEnd = 0;
oldMarkState = false;
setModified(false);
undoList.clear();
currentUndo = 0;
newUndo();
}
void KateDocument::cut(VConfig &c) {
if (selectEnd < selectStart) return;
copy(c.flags);
delMarkedText(c);
}
void KateDocument::copy(int flags) {
if (selectEnd < selectStart) return;
QString s = markedText(flags);
if (!s.isEmpty()) {
//#if defined(_WS_X11_)
if (m_singleSelection)
disconnect(QApplication::clipboard(), SIGNAL(dataChanged()), this, 0);
//#endif
QApplication::clipboard()->setText(s);
//#if defined(_WS_X11_)
if (m_singleSelection) {
connect(QApplication::clipboard(), SIGNAL(dataChanged()),
this, SLOT(clipboardChanged()));
}
//#endif
}
}
void KateDocument::paste(VConfig &c) {
QString s = QApplication::clipboard()->text();
if (!s.isEmpty()) {
insert(c, s);
}
}
void KateDocument::toggleRect(int start, int end, int x1, int x2) {
int z, line;
bool t;
if (x1 > x2) {
z = x1;
x1 = x2;
x2 = z;
}
if (start > end) {
z = start;
start = end;
end = z;
}
t = false;
for (line = start; line < end; line++) {
int x, oldX, s, e, newX1, newX2;
QChar ch;
Attribute *a;
TextLine::Ptr textLine = getTextLine(line);
//--- speed optimization
//s = textPos(textLine, x1, newX1);
x = oldX = z = 0;
while (x < x1) { // && z < len) {
oldX = x;
ch = textLine->getChar(z);
a = &m_attribs[textLine->getAttr(z)];
if (ch == '\t')
x += m_tabWidth - (x % m_tabWidth);
else if (a->bold && a->italic)
x += myFontMetricsBI.width(ch);
else if (a->bold)
x += myFontMetricsBold.width(ch);
else if (a->italic)
x += myFontMetricsItalic.width(ch);
else
x += myFontMetrics.width(ch);
z++;
}
s = z;
if (x1 - oldX < x - x1 && z > 0) {
s--;
newX1 = oldX;
} else newX1 = x;
//e = textPos(textLine, x2, newX2);
while (x < x2) { // && z < len) {
oldX = x;
ch = textLine->getChar(z);
a = &m_attribs[textLine->getAttr(z)];
if (ch == '\t')
x += m_tabWidth - (x % m_tabWidth);
else if (a->bold && a->italic)
x += myFontMetricsBI.width(ch);
else if (a->bold)
x += myFontMetricsBold.width(ch);
else if (a->italic)
x += myFontMetricsItalic.width(ch);
else
x += myFontMetrics.width(ch);
z++;
}
e = z;
if (x2 - oldX < x - x2 && z > 0) {
e--;
newX2 = oldX;
} else newX2 = x;
//---
if (e > s) {
textLine->toggleSelect(s, e);
tagLineRange(line, newX1, newX2);
t = true;
}
}
if (t) {
end--;
// tagLines(start, end);
if (start < selectStart) selectStart = start;
if (end > selectEnd) selectEnd = end;
emit selectionChanged();
}
}
void KateDocument::selectTo(VConfig &c, PointStruc &cursor, int cXPos) {
//c.cursor = old cursor position
//cursor = new cursor position
if (c.cursor.x != select.x || c.cursor.y != select.y) {
//new selection
if (!(c.flags & KateView::cfKeepSelection)) deselectAll();
// else recordReset();
anchor = c.cursor;
aXPos = c.cXPos;
}
if (!(c.flags & KateView::cfVerticalSelect)) {
//horizontal selections
int x, y, sXPos;
int ex, ey, eXPos;
bool sel;
if (cursor.y > c.cursor.y || (cursor.y == c.cursor.y && cursor.x > c.cursor.x)) {
x = c.cursor.x;
y = c.cursor.y;
sXPos = c.cXPos;
ex = cursor.x;
ey = cursor.y;
eXPos = cXPos;
sel = true;
} else {
x = cursor.x;
y = cursor.y;
sXPos = cXPos;
ex = c.cursor.x;
ey = c.cursor.y;
eXPos = c.cXPos;
sel = false;
}
// tagLines(y, ye);
if (y < ey) {
//tagLineRange(y, sXPos, 0xffffff);
tagLines(y, ey -1);
tagLineRange(ey, 0, eXPos);
} else tagLineRange(y, sXPos, eXPos);
if (y < selectStart) selectStart = y;
if (ey > selectEnd) selectEnd = ey;
TextLine::Ptr textLine = getTextLine(y);
if (c.flags & KateView::cfXorSelect) {
//xor selection with old selection
while (y < ey) {
textLine->toggleSelectEol(x);
x = 0;
y++;
textLine = getTextLine(y);
}
textLine->toggleSelect(x, ex);
} else {
//set selection over old selection
if (anchor.y > y || (anchor.y == y && anchor.x > x)) {
if (anchor.y < ey || (anchor.y == ey && anchor.x < ex)) {
sel = !sel;
while (y < anchor.y) {
textLine->selectEol(sel, x);
x = 0;
y++;
textLine = getTextLine(y);
}
textLine->select(sel, x, anchor.x);
x = anchor.x;
}
sel = !sel;
}
while (y < ey) {
textLine->selectEol(sel, x);
x = 0;
y++;
textLine = getTextLine(y);
}
textLine->select(sel, x, ex);
}
} else {
//vertical (block) selections
// int ax, sx, ex;
// ax = textWidth(anchor);
// sx = textWidth(start);
// ex = textWidth(end);
toggleRect(c.cursor.y + 1, cursor.y + 1, aXPos, c.cXPos);
toggleRect(anchor.y, cursor.y + 1, c.cXPos, cXPos);
}
select = cursor;
optimizeSelection();
emit selectionChanged();
}
void KateDocument::selectAll() {
int z;
TextLine::Ptr textLine;
select.x = -1;
// if (selectStart != 0 || selectEnd != lastLine()) recordReset();
selectStart = 0;
selectEnd = lastLine();
tagLines(selectStart,selectEnd);
for (z = selectStart; z < selectEnd; z++) {
textLine = getTextLine(z);
textLine->selectEol(true,0);
}
textLine = getTextLine(z);
textLine->select(true,0,textLine->length());
emit selectionChanged();
}
void KateDocument::deselectAll() {
select.x = -1;
if (selectEnd < selectStart) return;
// recordReset();
tagLines(selectStart,selectEnd);
for (int z = selectStart; z <= selectEnd; z++) {
TextLine::Ptr textLine = getTextLine(z);
textLine->selectEol(false,0);
}
selectStart = 0xffffff;
selectEnd = 0;
emit selectionChanged();
}
void KateDocument::invertSelection() {
TextLine::Ptr textLine;
select.x = -1;
// if (selectStart != 0 || selectEnd != lastLine()) recordReset();
selectStart = 0;
selectEnd = lastLine();
tagLines(selectStart,selectEnd);
for (int z = selectStart; z < selectEnd; z++) {
textLine = getTextLine(z);
textLine->toggleSelectEol(0);
}
textLine = getTextLine(selectEnd);
textLine->toggleSelect(0,textLine->length());
optimizeSelection();
emit selectionChanged();
}
void KateDocument::selectWord(PointStruc &cursor, int flags) {
int start, end, len;
TextLine::Ptr textLine = getTextLine(cursor.y);
len = textLine->length();
start = end = cursor.x;
while (start > 0 && m_highlight->isInWord(textLine->getChar(start - 1))) start--;
while (end < len && m_highlight->isInWord(textLine->getChar(end))) end++;
if (end <= start) return;
if (!(flags & KateView::cfKeepSelection)) deselectAll();
// else recordReset();
textLine->select(true, start, end);
anchor.x = start;
select.x = end;
anchor.y = select.y = cursor.y;
tagLines(cursor.y, cursor.y);
if (cursor.y < selectStart) selectStart = cursor.y;
if (cursor.y > selectEnd) selectEnd = cursor.y;
emit selectionChanged();
}
void KateDocument::selectLength(PointStruc &cursor, int length, int flags) {
int start, end;
TextLine::Ptr textLine = getTextLine(cursor.y);
start = cursor.x;
end = start + length;
if (end <= start) return;
if (!(flags & KateView::cfKeepSelection)) deselectAll();
textLine->select(true, start, end);
anchor.x = start;
select.x = end;
anchor.y = select.y = cursor.y;
tagLines(cursor.y, cursor.y);
if (cursor.y < selectStart) selectStart = cursor.y;
if (cursor.y > selectEnd) selectEnd = cursor.y;
emit selectionChanged();
}
void KateDocument::doIndent(VConfig &c, int change) {
c.cursor.x = 0;
recordStart(c, (change < 0) ? KateActionGroup::ugUnindent
: KateActionGroup::ugIndent);
if (selectEnd < selectStart) {
// single line
optimizeLeadingSpace(c.cursor.y, c.flags, change);
} else {
// entire selection
TextLine::Ptr textLine;
int line, z;
QChar ch;
if (c.flags & KateView::cfKeepIndentProfile && change < 0) {
// unindent so that the existing indent profile doesn´t get screwed
// if any line we may unindent is already full left, don't do anything
for (line = selectStart; line <= selectEnd; line++) {
textLine = getTextLine(line);
if (textLine->isSelected() || textLine->numSelected()) {
for (z = 0; z < tabChars; z++) {
ch = textLine->getChar(z);
if (ch == '\t') break;
if (ch != ' ') {
change = 0;
goto jumpOut;
}
}
}
}
jumpOut:;
}
for (line = selectStart; line <= selectEnd; line++) {
textLine = getTextLine(line);
if (textLine->isSelected() || textLine->numSelected()) {
optimizeLeadingSpace(line, c.flags, change);
}
}
}
// recordEnd now removes empty undo records
recordEnd(c.view, c.cursor, c.flags | KateView::cfPersistent);
}
/*
Optimize the leading whitespace for a single line.
If change is > 0, it adds indentation units (tabChars)
if change is == 0, it only optimizes
If change is < 0, it removes indentation units
This will be used to indent, unindent, and optimal-fill a line.
If excess space is removed depends on the flag cfKeepExtraSpaces
which has to be set by the user
*/
void KateDocument::optimizeLeadingSpace(int line, int flags, int change) {
int len;
int chars, space, okLen;
QChar ch;
int extra;
QString s;
PointStruc cursor;
TextLine::Ptr textLine = getTextLine(line);
len = textLine->length();
space = 0; // length of space at the beginning of the textline
okLen = 0; // length of space which does not have to be replaced
for (chars = 0; chars < len; chars++) {
ch = textLine->getChar(chars);
if (ch == ' ') {
space++;
if (flags & KateView::cfSpaceIndent && okLen == chars) okLen++;
} else if (ch == '\t') {
space += tabChars - space % tabChars;
if (!(flags & KateView::cfSpaceIndent) && okLen == chars) okLen++;
} else break;
}
space += change*tabChars; // modify space width
// if line contains only spaces it will be cleared
if (space < 0 || chars == len) space = 0;
extra = space % tabChars; // extra spaces which don´t fit the indentation pattern
if (flags & KateView::cfKeepExtraSpaces) chars -= extra;
if (flags & KateView::cfSpaceIndent) {
space -= extra;
ch = ' ';
} else {
space /= tabChars;
ch = '\t';
}
// don´t replace chars which are already ok
cursor.x = QMIN(okLen, QMIN(chars, space));
chars -= cursor.x;
space -= cursor.x;
if (chars == 0 && space == 0) return; //nothing to do
s.fill(ch, space);
//printf("chars %d insert %d cursor.x %d\n", chars, insert, cursor.x);
cursor.y = line;
recordReplace(cursor, chars, s);
}
void KateDocument::doComment(VConfig &c, int change)
{
c.flags |=KateView:: cfPersistent;
recordStart(c, (change < 0) ? KateActionGroup::ugUncomment
: KateActionGroup::ugComment);
QString startComment = m_highlight->getCommentStart();
QString startLineComment = m_highlight->getCommentSingleLineStart();
QString endComment = m_highlight->getCommentEnd();
int startCommentLen = startComment.length();
int startLineCommentLen = startLineComment.length();
int endCommentLen = endComment.length();
if (change > 0)
{
if ( !hasMarkedText() )
{
if (startLineComment != "")
{
// Add a start comment mark
c.cursor.x = 0;
recordReplace(c.cursor, 0, startLineComment);
}
else if ((startComment != "") && (endComment != ""))
{
// Add a start comment mark
c.cursor.x = 0;
recordReplace(c.cursor, 0, startComment);
// Add an end comment mark
TextLine* textline = getTextLine(c.cursor.y);
c.cursor.x = textline->length();
recordReplace(c.cursor, 0, endComment);
c.cursor.x = 0;
}
}
else if ((startComment != "") && (endComment != ""))
{
QString marked (c.view->markedText ());
int preDeleteLine = -1, preDeleteCol = -1;
c.view->getCursorPosition (&preDeleteLine, &preDeleteCol);
if (marked.length() > 0)
c.view->keyDelete ();
int line = -1, col = -1;
c.view->getCursorPosition (&line, &col);
c.view->insertText (startComment + marked + endComment);
}
}
else
{
if ( !hasMarkedText() )
{
TextLine* textline = getTextLine(c.cursor.y);
if(textline->startingWith(startLineComment))
{
// Remove start comment mark
c.cursor.x = 0;
recordReplace(c.cursor, startLineCommentLen, "");
}
else if (textline->startingWith(startComment) && textline->endingWith(endComment))
{
// Remove start comment mark
c.cursor.x = 0;
recordReplace(c.cursor, startCommentLen, "");
// Remove end comment mark
if(endComment != "")
{
c.cursor.x = textline->length() - endCommentLen;
recordReplace(c.cursor, endCommentLen, "");
c.cursor.x = 0;
}
}
}
else
{
QString marked (c.view->markedText ());
int preDeleteLine = -1, preDeleteCol = -1;
c.view->getCursorPosition (&preDeleteLine, &preDeleteCol);
int start = marked.find (startComment);
int end = marked.findRev (endComment);
if ((start > -1) && (end > -1))
{
marked.remove (start, startCommentLen);
marked.remove (end-startCommentLen, endCommentLen);
c.view->keyDelete ();
int line = -1, col = -1;
c.view->getCursorPosition (&line, &col);
c.view->insertText (marked);
}
}
}
recordEnd(c.view, c.cursor, c.flags | KateView::cfPersistent);
}
QString KateDocument::text() const
{
QString s;
for (int i=0; i < buffer->count(); i++)
{
TextLine::Ptr textLine = buffer->line(i);
s.insert(s.length(), textLine->getText(), textLine->length());
if ( (i < (buffer->count()-1)) )
s.append('\n');
}
return s;
}
QString KateDocument::getWord(PointStruc &cursor) {
int start, end, len;
TextLine::Ptr textLine = getTextLine(cursor.y);
len = textLine->length();
start = end = cursor.x;
while (start > 0 && m_highlight->isInWord(textLine->getChar(start - 1))) start--;
while (end < len && m_highlight->isInWord(textLine->getChar(end))) end++;
len = end - start;
return QString(&textLine->getText()[start], len);
}
void KateDocument::setText(const QString &s) {
int pos;
QChar ch;
clear();
int line=1;
TextLine::Ptr textLine = buffer->line(0);
for (pos = 0; pos <= (int) s.length(); pos++) {
ch = s[pos];
if (ch.isPrint() || ch == '\t') {
textLine->append(&ch, 1);
} else if (ch == '\n')
{
textLine = new TextLine();
buffer->insertLine (line, textLine);
line++;
}
}
updateLines();
}
QString KateDocument::markedText(int flags) {
TextLine::Ptr textLine;
int len, z, start, end, i;
len = 1;
if (!(flags & KateView::cfVerticalSelect)) {
for (z = selectStart; z <= selectEnd; z++) {
textLine = getTextLine(z);
len += textLine->numSelected();
if (textLine->isSelected()) len++;
}
QString s;
len = 0;
for (z = selectStart; z <= selectEnd; z++) {
textLine = getTextLine(z);
end = 0;
do {
start = textLine->findUnselected(end);
end = textLine->findSelected(start);
for (i = start; i < end; i++) {
s[len] = textLine->getChar(i);
len++;
}
} while (start < end);
if (textLine->isSelected()) {
s[len] = '\n';
len++;
}
}
// s[len] = '\0';
return s;
} else {
for (z = selectStart; z <= selectEnd; z++) {
textLine = getTextLine(z);
len += textLine->numSelected() + 1;
}
QString s;
len = 0;
for (z = selectStart; z <= selectEnd; z++) {
textLine = getTextLine(z);
end = 0;
do {
start = textLine->findUnselected(end);
end = textLine->findSelected(start);
for (i = start; i < end; i++) {
s[len] = textLine->getChar(i);
len++;
}
} while (start < end);
s[len] = '\n';
len++;
}
// s[len] = '\0'; // the final \0 is not counted in length()
return s;
}
}
void KateDocument::delMarkedText(VConfig &c/*, bool undo*/) {
int end = 0;
if (selectEnd < selectStart) return;
// the caller may have already started an undo record for the current action
// if (undo)
//auto deletion of the marked text occurs not very often and can therefore
// be recorded separately
recordStart(c, KateActionGroup::ugDelBlock);
for (c.cursor.y = selectEnd; c.cursor.y >= selectStart; c.cursor.y--) {
TextLine::Ptr textLine = getTextLine(c.cursor.y);
c.cursor.x = textLine->length();
do {
end = textLine->findRevUnselected(c.cursor.x);
if (end == 0) break;
c.cursor.x = textLine->findRevSelected(end);
recordDelete(c.cursor, end - c.cursor.x);
} while (true);
end = c.cursor.x;
c.cursor.x = textLine->length();
if (textLine->isSelected()) recordAction(KateAction::delLine,c.cursor);
}
c.cursor.y++;
/*if (end < c.cursor.x)*/ c.cursor.x = end;
selectEnd = -1;
select.x = -1;
/*if (undo)*/ recordEnd(c);
}
void KateDocument::tagLineRange(int line, int x1, int x2) {
int z;
for (z = 0; z < (int) views.count(); z++) {
views.at(z)->tagLines(line, line, x1, x2);
}
}
void KateDocument::tagLines(int start, int end) {
int z;
for (z = 0; z < (int) views.count(); z++) {
views.at(z)->tagLines(start, end, 0, 0xffffff);
}
}
void KateDocument::tagAll() {
int z;
for (z = 0; z < (int) views.count(); z++) {
views.at(z)->tagAll();
}
}
void KateDocument::updateLines(int startLine, int endLine, int flags, int cursorY) {
TextLine::Ptr textLine;
int line, last_line;
int ctxNum, endCtx;
// kdDebug(13020)<<"******************KateDocument::updateLines Checkpoint 1"<<endl;
if (buffer->line(startLine)==0) {kdDebug(13020)<<"********************No buffer for line " << startLine << " found**************"<<endl; return;};
// kdDebug(13020)<<"KateDocument::updateLines Checkpoint 2"<<endl;
last_line = lastLine();
// if (endLine >= last_line) endLine = last_line;
line = startLine;
ctxNum = 0;
if (line > 0) ctxNum = getTextLine(line - 1)->getContext();
do {
// kdDebug(13020)<<QString("**************Working on line: %1").arg(line)<<endl;
textLine = getTextLine(line);
if (textLine==0) kdDebug(13020)<<"****updateLines()>> error textLine==0"<<endl;
if (line <= endLine && line != cursorY) {
if (flags & KateView::cfRemoveSpaces) textLine->removeSpaces();
updateMaxLength(textLine);
}
endCtx = textLine->getContext();
-// qDebug("DOHIGHLIGHT");
+// odebug << "DOHIGHLIGHT" << oendl;
ctxNum = m_highlight->doHighlight(ctxNum,textLine);
textLine->setContext(ctxNum);
line++;
} while ((buffer->line(line)!=0) && (line <= endLine || endCtx != ctxNum));
// kdDebug(13020)<<"updateLines :: while loop left"<<endl;
tagLines(startLine, line - 1);
}
void KateDocument::updateMaxLength(TextLine::Ptr &textLine) {
int len;
len = textWidth(textLine,textLine->length());
if (len > maxLength) {
longestLine = textLine;
maxLength = len;
newDocGeometry = true;
} else {
if (!longestLine || (textLine == longestLine && len <= maxLength*3/4)) {
maxLength = -1;
for (int i = 0; i < numLines();i++) {
textLine = getTextLine(i);
len = textWidth(textLine,textLine->length());
if (len > maxLength) {
maxLength = len;
longestLine = textLine;
}
}
newDocGeometry = true;
}
}
}
void KateDocument::slotBufferChanged() {
newDocGeometry = true;
//updateLines();//JW
updateViews();
}
void KateDocument::slotBufferHighlight(long start,long stop) {
kdDebug(13020)<<"KateDocument::slotBufferHighlight"<<QString("%1-%2").arg(start).arg(stop)<<endl;
updateLines(start,stop);
// buffer->startLoadTimer();
}
void KateDocument::updateViews(KateView *exclude) {
KateView *view;
int flags;
bool markState = hasMarkedText();
flags = (newDocGeometry) ? KateView::ufDocGeometry : 0;
for (view = views.first(); view != 0L; view = views.next() ) {
if (view != exclude) view->updateView(flags);
// notify every view about the changed mark state....
if (oldMarkState != markState) emit view->newMarkStatus();
}
oldMarkState = markState;
newDocGeometry = false;
}
QColor &KateDocument::cursorCol(int x, int y) {
int attr;
Attribute *a;
TextLine::Ptr textLine = getTextLine(y);
attr = textLine->getRawAttr(x);
a = &m_attribs[attr & taAttrMask];
if (attr & taSelected) return a->selCol; else return a->col;
}
void KateDocument::paintTextLine(QPainter &paint, int line, int xStart, int xEnd, bool showTabs)
{
paintTextLine (paint, line, 0, xStart, xEnd, showTabs);
}
void KateDocument::paintTextLine(QPainter &paint, int line, int y, int xStart, int xEnd, bool showTabs)
{
TextLine::Ptr textLine;
int len;
const QChar *s;
int z, x;
QChar ch;
Attribute *a = 0L;
int attr, nextAttr;
int xs;
int xc, zc;
if (line > lastLine()) {
paint.fillRect(0, y, xEnd - xStart,fontHeight, colors[0]);
return;
}
textLine = getTextLine(line);
len = textLine->length();
s = textLine->getText();
// skip to first visible character
x = 0;
z = 0;
do {
xc = x;
zc = z;
if (z == len) break;
ch = s[z];//textLine->getChar(z);
if (ch == '\t') {
x += m_tabWidth - (x % m_tabWidth);
} else {
a = &m_attribs[textLine->getAttr(z)];
if (a->bold && a->italic)
x += myFontMetricsBI.width(ch);
else if (a->bold)
x += myFontMetricsBold.width(ch);
else if (a->italic)
x += myFontMetricsItalic.width(ch);
else
x += myFontMetrics.width(ch);
}
z++;
} while (x <= xStart);
// draw background
xs = xStart;
attr = textLine->getRawAttr(zc);
while (x < xEnd)
{
nextAttr = textLine->getRawAttr(z);
if ((nextAttr ^ attr) & taSelected)
{
if (attr & taSelected)
paint.fillRect(xs - xStart, y, x - xs, fontHeight, colors[1]);
else
paint.fillRect(xs - xStart, y, x - xs, fontHeight, colors[0]);
xs = x;
attr = nextAttr;
}
if (z == len) break;
ch = s[z];//textLine->getChar(z);
if (ch == '\t')
x += m_tabWidth - (x % m_tabWidth);
else
{
a = &m_attribs[textLine->getAttr(z)];
if (a->bold && a->italic)
x += myFontMetricsBI.width(ch);
else if (a->bold)
x += myFontMetricsBold.width(ch);
else if (a->italic)
x += myFontMetricsItalic.width(ch);
else
x += myFontMetrics.width(ch);
}
z++;
}
if (attr & taSelected)
paint.fillRect(xs - xStart, y, xEnd - xs, fontHeight, colors[1]);
else
paint.fillRect(xs - xStart, y, xEnd - xs, fontHeight, colors[0]);
len = z; //reduce length to visible length
// draw text
x = xc;
z = zc;
y += fontAscent;// -1;
attr = -1;
while (z < len) {
ch = s[z];//textLine->getChar(z);
if (ch == '\t') {
if (z > zc) {
//this should cause no copy at all
QConstString str((QChar *) &s[zc], z - zc /*+1*/);
QString s = str.string();
paint.drawText(x - xStart, y, s);
if (a->bold && a->italic)
x += myFontMetricsBI.width(s);
else if (a->bold)
x += myFontMetricsBold.width(s);
else if (a->italic)
x += myFontMetricsItalic.width(s);
else
x += myFontMetrics.width(s);
}
zc = z +1;
if (showTabs) {
nextAttr = textLine->getRawAttr(z);
if (nextAttr != attr) {
attr = nextAttr;
a = &m_attribs[attr & taAttrMask];
if (attr & taSelected) paint.setPen(a->selCol);
else paint.setPen(a->col);
if (a->bold && a->italic)
paint.setFont(myFontBI);
else if (a->bold)
paint.setFont(myFontBold);
else if (a->italic)
paint.setFont(myFontItalic);
else
paint.setFont(myFont);
}
// paint.drawLine(x - xStart, y -2, x - xStart, y);
// paint.drawLine(x - xStart, y, x - xStart + 2, y);
paint.drawPoint(x - xStart, y);
paint.drawPoint(x - xStart +1, y);
paint.drawPoint(x - xStart, y -1);
}
x += m_tabWidth - (x % m_tabWidth);
} else {
nextAttr = textLine->getRawAttr(z);
if (nextAttr != attr) {
if (z > zc) {
QConstString str((QChar *) &s[zc], z - zc /*+1*/);
QString s = str.string();
paint.drawText(x - xStart, y, s);
if (a->bold && a->italic)
x += myFontMetricsBI.width(s);
else if (a->bold)
x += myFontMetricsBold.width(s);
else if (a->italic)
x += myFontMetricsItalic.width(s);
else
x += myFontMetrics.width(s);
zc = z;
}
attr = nextAttr;
a = &m_attribs[attr & taAttrMask];
if (attr & taSelected) paint.setPen(a->selCol);
else paint.setPen(a->col);
if (a->bold && a->italic)
paint.setFont(myFontBI);
else if (a->bold)
paint.setFont(myFontBold);
else if (a->italic)
paint.setFont(myFontItalic);
else
paint.setFont(myFont);
}
}
z++;
}
if (z > zc) {
QConstString str((QChar *) &s[zc], z - zc /*+1*/);
paint.drawText(x - xStart, y, str.string());
}
}
// Applies the search context, and returns whether a match was found. If one is,
// the length of the string matched is also returned.
bool KateDocument::doSearch(SConfig &sc, const QString &searchFor) {
int line, col;
int searchEnd;
int bufLen, tlen;
QChar *t;
TextLine::Ptr textLine;
int pos, newPos;
if (searchFor.isEmpty()) return false;
bufLen = 0;
t = 0L;
line = sc.cursor.y;
col = sc.cursor.x;
if (!(sc.flags & KateView::sfBackward)) {
//forward search
if (sc.flags & KateView::sfSelected) {
if (line < selectStart) {
line = selectStart;
col = 0;
}
searchEnd = selectEnd;
} else searchEnd = lastLine();
while (line <= searchEnd) {
textLine = getTextLine(line);
tlen = textLine->length();
if (tlen > bufLen) {
delete t;
bufLen = (tlen + 255) & (~255);
t = new QChar[bufLen];
}
memcpy(t, textLine->getText(), tlen*sizeof(QChar));
if (sc.flags & KateView::sfSelected) {
pos = 0;
do {
pos = textLine->findSelected(pos);
newPos = textLine->findUnselected(pos);
memset(&t[pos], 0, (newPos - pos)*sizeof(QChar));
pos = newPos;
} while (pos < tlen);
}
QString text(t, tlen);
if (sc.flags & KateView::sfWholeWords) {
// Until the end of the line...
while (col < tlen) {
// ...find the next match.
col = sc.search(text, col);
if (col != -1) {
// Is the match delimited correctly?
if (((col == 0) || (!m_highlight->isInWord(t[col]))) &&
((col + sc.matchedLength == tlen) || (!m_highlight->isInWord(t[col + sc.matchedLength])))) {
goto found;
}
else {
// Start again from the next character.
col++;
}
}
else {
// No match.
break;
}
}
}
else {
// Non-whole-word search.
col = sc.search(text, col);
if (col != -1)
goto found;
}
col = 0;
line++;
}
} else {
// backward search
if (sc.flags & KateView::sfSelected) {
if (line > selectEnd) {
line = selectEnd;
col = -1;
}
searchEnd = selectStart;
} else searchEnd = 0;
while (line >= searchEnd) {
textLine = getTextLine(line);
tlen = textLine->length();
if (tlen > bufLen) {
delete t;
bufLen = (tlen + 255) & (~255);
t = new QChar[bufLen];
}
memcpy(t, textLine->getText(), tlen*sizeof(QChar));
if (sc.flags & KateView::sfSelected) {
pos = 0;
do {
pos = textLine->findSelected(pos);
newPos = textLine->findUnselected(pos);
memset(&t[pos], 0, (newPos - pos)*sizeof(QChar));
pos = newPos;
} while (pos < tlen);
}
if (col < 0 || col > tlen) col = tlen;
QString text(t, tlen);
if (sc.flags & KateView::sfWholeWords) {
// Until the beginning of the line...
while (col >= 0) {
// ...find the next match.
col = sc.search(text, col);
if (col != -1) {
// Is the match delimited correctly?
if (((col == 0) || (!m_highlight->isInWord(t[col]))) &&
((col + sc.matchedLength == tlen) || (!m_highlight->isInWord(t[col + sc.matchedLength])))) {
goto found;
}
else {
// Start again from the previous character.
col--;
}
}
else {
// No match.
break;
}
}
}
else {
// Non-whole-word search.
col = sc.search(text, col);
if (col != -1)
goto found;
}
col = -1;
line--;
}
}
sc.flags |= KateView::sfWrapped;
return false;
found:
if (sc.flags & KateView::sfWrapped) {
if ((line > sc.startCursor.y || (line == sc.startCursor.y && col >= sc.startCursor.x))
^ ((sc.flags & KateView::sfBackward) != 0)) return false;
}
sc.cursor.x = col;
sc.cursor.y = line;
return true;
}
void KateDocument::tagLine(int line) {
if (tagStart > line) tagStart = line;
if (tagEnd < line) tagEnd = line;
}
void KateDocument::insLine(int line) {
KateView *view;
if (selectStart >= line) selectStart++;
if (selectEnd >= line) selectEnd++;
if (tagStart >= line) tagStart++;
if (tagEnd >= line) tagEnd++;
newDocGeometry = true;
for (view = views.first(); view != 0L; view = views.next() ) {
view->insLine(line);
}
}
void KateDocument::delLine(int line) {
KateView *view;
if (selectStart >= line && selectStart > 0) selectStart--;
if (selectEnd >= line) selectEnd--;
if (tagStart >= line && tagStart > 0) tagStart--;
if (tagEnd >= line) tagEnd--;
newDocGeometry = true;
for (view = views.first(); view != 0L; view = views.next() ) {
view->delLine(line);
}
}
void KateDocument::optimizeSelection() {
TextLine::Ptr textLine;
while (selectStart <= selectEnd) {
textLine = getTextLine(selectStart);
if (textLine->isSelected() || textLine->numSelected() > 0) break;
selectStart++;
}
while (selectEnd >= selectStart) {
textLine = getTextLine(selectEnd);
if (textLine->isSelected() || textLine->numSelected() > 0) break;
selectEnd--;
}
if (selectStart > selectEnd) {
selectStart = 0xffffff;
selectEnd = 0;
}
}
void KateDocument::doAction(KateAction *a) {
switch (a->action) {
case KateAction::replace:
doReplace(a);
break;
case KateAction::wordWrap:
doWordWrap(a);
break;
case KateAction::wordUnWrap:
doWordUnWrap(a);
break;
case KateAction::newLine:
doNewLine(a);
break;
case KateAction::delLine:
doDelLine(a);
break;
case KateAction::insLine:
doInsLine(a);
break;
case KateAction::killLine:
doKillLine(a);
break;
/* case KateAction::doubleLine:
break;
case KateAction::removeLine:
break;*/
}
}
void KateDocument::doReplace(KateAction *a) {
TextLine::Ptr textLine;
int l;
//exchange current text with stored text in KateAction *a
textLine = getTextLine(a->cursor.y);
l = textLine->length() - a->cursor.x;
if (l > a->len) l = a->len;
QString oldText(&textLine->getText()[a->cursor.x], (l < 0) ? 0 : l);
textLine->replace(a->cursor.x, a->len, a->text.unicode(), a->text.length());
a->len = a->text.length();
a->text = oldText;
buffer->changeLine(a->cursor.y);
tagLine(a->cursor.y);
}
void KateDocument::doWordWrap(KateAction *a) {
TextLine::Ptr textLine;
textLine = getTextLine(a->cursor.y - 1);
a->len = textLine->length() - a->cursor.x;
textLine->wrap(getTextLine(a->cursor.y),a->len);
buffer->changeLine(a->cursor.y - 1);
buffer->changeLine(a->cursor.y);
tagLine(a->cursor.y - 1);
tagLine(a->cursor.y);
if (selectEnd == a->cursor.y - 1) selectEnd++;
a->action = KateAction::wordUnWrap;
}
void KateDocument::doWordUnWrap(KateAction *a) {
TextLine::Ptr textLine;
textLine = getTextLine(a->cursor.y - 1);
// textLine->setLength(a->len);
textLine->unWrap(a->len, getTextLine(a->cursor.y),a->cursor.x);
buffer->changeLine(a->cursor.y - 1);
buffer->changeLine(a->cursor.y);
tagLine(a->cursor.y - 1);
tagLine(a->cursor.y);
a->action = KateAction::wordWrap;
}
void KateDocument::doNewLine(KateAction *a) {
TextLine::Ptr textLine, newLine;
textLine = getTextLine(a->cursor.y);
newLine = new TextLine(textLine->getRawAttr(), textLine->getContext());
textLine->wrap(newLine,a->cursor.x);
buffer->insertLine(a->cursor.y + 1, newLine);
buffer->changeLine(a->cursor.y);
insLine(a->cursor.y + 1);
tagLine(a->cursor.y);
tagLine(a->cursor.y + 1);
if (selectEnd == a->cursor.y) selectEnd++;//addSelection(a->cursor.y + 1);
a->action = KateAction::delLine;
}
void KateDocument::doDelLine(KateAction *a) {
TextLine::Ptr textLine, nextLine;
textLine = getTextLine(a->cursor.y);
nextLine = getTextLine(a->cursor.y+1);
// textLine->setLength(a->cursor.x);
textLine->unWrap(a->cursor.x, nextLine,nextLine->length());
textLine->setContext(nextLine->getContext());
if (longestLine == nextLine) longestLine = 0L;
buffer->changeLine(a->cursor.y);
buffer->removeLine(a->cursor.y+1);
tagLine(a->cursor.y);
delLine(a->cursor.y + 1);
a->action = KateAction::newLine;
}
void KateDocument::doInsLine(KateAction *a) {
buffer->insertLine(a->cursor.y, new TextLine());
insLine(a->cursor.y);
a->action = KateAction::killLine;
}
void KateDocument::doKillLine(KateAction *a) {
TextLine::Ptr textLine = getTextLine(a->cursor.y);
if (longestLine == textLine) longestLine = 0L;
buffer->removeLine(a->cursor.y);
delLine(a->cursor.y);
tagLine(a->cursor.y);
a->action = KateAction::insLine;
}
void KateDocument::newUndo() {
KTextEditor::View *view;
int state;
state = 0;
if (currentUndo > 0) state |= 1;
if (currentUndo < (int) undoList.count()) state |= 2;
undoState = state;
for (view = m_views.first(); view != 0L; view = m_views.next() ) {
emit static_cast<KateView *>( view )->newUndo();
}
}
void KateDocument::recordStart(VConfig &c, int newUndoType) {
recordStart(c.view, c.cursor, c.flags, newUndoType);
}
void KateDocument::recordStart(KateView *, PointStruc &cursor, int flags,
int newUndoType, bool keepModal, bool mergeUndo) {
KateActionGroup *g;
// if (newUndoType == KateActionGroup::ugNone) {
// only a bug would cause this
//why should someone do this? we can't prevent all programming errors :) (jochen whilhelmy)
// debug("KateDocument::recordStart() called with no undo group type!");
// return;
// }
if (!keepModal) setPseudoModal(0L);
//i optimized the group undo stuff a bit (jochen wilhelmy)
// recordReset() is not needed any more
g = undoList.getLast();
if (g != 0L && ((undoCount < 1024 && flags & KateView::cfGroupUndo
&& g->end.x == cursor.x && g->end.y == cursor.y) || mergeUndo)) {
//undo grouping : same actions are put into one undo step
//precondition : new action starts where old stops or mergeUndo flag
if (g->undoType == newUndoType
|| (g->undoType == KateActionGroup::ugInsChar
&& newUndoType == KateActionGroup::ugInsLine)
|| (g->undoType == KateActionGroup::ugDelChar
&& newUndoType == KateActionGroup::ugDelLine)) {
undoCount++;
if (g->undoType != newUndoType) undoCount = 0xffffff;
return;
}
}
undoCount = 0;
/*
if (undoView != view) {
// always kill the current undo group if the editing view changes
recordReset();
undoType = newUndoType;
} else if (newUndoType == undoType) {
printf("bla!!!\n");
// same as current type, keep using it
return;
} else if ( (undoType == KateActionGroup::ugInsChar && newUndoType == KateActionGroup::ugInsLine) ||
(undoType == KateActionGroup::ugDelChar && newUndoType == KateActionGroup::ugDelLine) ) {
// some type combinations can run together...
undoType += 1000;
return;
} else {
recordReset();
undoType = newUndoType;
}
undoView = view;
*/
while ((int) undoList.count() > currentUndo) undoList.removeLast();
while ((int) undoList.count() > undoSteps) {
undoList.removeFirst();
currentUndo--;
}
g = new KateActionGroup(cursor, newUndoType);
undoList.append(g);
// currentUndo++;
tagEnd = 0;
tagStart = 0xffffff;
}
void KateDocument::recordAction(KateAction::Action action, PointStruc &cursor) {
KateAction *a;
a = new KateAction(action, cursor);
doAction(a);
undoList.getLast()->insertAction(a);
}
void KateDocument::recordInsert(VConfig &c, const QString &text) {
recordReplace(c, 0, text);
}
void KateDocument::recordReplace(VConfig &c, int len, const QString &text) {
if (c.cursor.x > 0 && !(c.flags & KateView::cfSpaceIndent)) {
TextLine::Ptr textLine = getTextLine(c.cursor.y);
if (textLine->length() == 0) {
QString s = tabString(c.cursor.x, tabChars);
int len = s.length();
s += text;
c.cursor.x = 0;
recordReplace(c.cursor, len, s);
c.cursor.x = len;
return;
}
}
recordReplace(c.cursor, len, text);
}
void KateDocument::recordInsert(PointStruc &cursor, const QString &text) {
recordReplace(cursor, 0, text);
}
void KateDocument::recordDelete(PointStruc &cursor, int len) {
recordReplace(cursor, len, QString::null);
}
void KateDocument::recordReplace(PointStruc &cursor, int len, const QString &text) {
KateAction *a;
TextLine::Ptr textLine;
int l;
if (len == 0 && text.isEmpty()) return;
//try to append to last replace action
a = undoList.getLast()->action;
if (a == 0L || a->action != KateAction::replace
|| a->cursor.x + a->len != cursor.x || a->cursor.y != cursor.y) {
//if (a != 0L) printf("new %d %d\n", a->cursor.x + a->len, cursor.x);
a = new KateAction(KateAction::replace, cursor);
undoList.getLast()->insertAction(a);
}
//replace
textLine = getTextLine(cursor.y);
l = textLine->length() - cursor.x;
if (l > len) l = len;
a->text.insert(a->text.length(), &textLine->getText()[cursor.x], (l < 0) ? 0 : l);
textLine->replace(cursor.x, len, text.unicode(), text.length());
a->len += text.length();
buffer->changeLine(a->cursor.y);
updateMaxLength(textLine);
tagLine(a->cursor.y);
}
void KateDocument::recordEnd(VConfig &c) {
recordEnd(c.view, c.cursor, c.flags);
}
void KateDocument::recordEnd(KateView *view, PointStruc &cursor, int flags) {
KateActionGroup *g;
// clear selection if option "persistent selections" is off
// if (!(flags & cfPersistent)) deselectAll();
g = undoList.getLast();
if (g->action == 0L) {
// no action has been done: remove empty undo record
undoList.removeLast();
return;
}
// store end cursor position for redo
g->end = cursor;
currentUndo = undoList.count();
if (tagStart <= tagEnd) {
optimizeSelection();
updateLines(tagStart, tagEnd, flags, cursor.y);
setModified(true);
}
view->updateCursor(cursor, flags);
// newUndo();
/*
undoCount++;
// we limit the number of individual undo operations for sanity - is 1K reasonable?
// this is also where we handle non-group undo preference
// if the undo type is singlular, we always finish it now
if ( undoType == KateActionGroup::ugPaste ||
undoType == KateActionGroup::ugDelBlock ||
undoType > 1000 ||
undoCount > 1024 || !(flags & cfGroupUndo) ) {
printf("recordend %d %d\n", undoType, undoCount);
recordReset();
}
*/
// this should keep the flood of signals down a little...
if (undoCount == 0) newUndo();
emit textChanged();
}
/*
void KateDocument::recordReset()
{
if (pseudoModal)
return;
// forces the next call of recordStart() to begin a new undo group
// not used in normal editing, but used by markFound(), etc.
undoType = KateActionGroup::ugNone;
undoCount = 0;
undoView = NULL;
undoReported = false;
printf("recordreset\n");
}
*/
/*
void KateDocument::recordDel(PointStruc &cursor, TextLine::Ptr &textLine, int l) {
int len;
len = textLine->length() - cursor.x;
if (len > l) len = l;
if (len > 0) {
insertUndo(new KateAction(KateAction::replace,cursor,&textLine->getText()[cursor.x],len));
}
}
*/
void KateDocument::doActionGroup(KateActionGroup *g, int flags, bool undo) {
KateAction *a, *next;
setPseudoModal(0L);
if (!(flags & KateView::cfPersistent)) deselectAll();
tagEnd = 0;
tagStart = 0xffffff;
a = g->action;
g->action = 0L;
while (a) {
doAction(a);
next = a->next;
g->insertAction(a);
a = next;
}
optimizeSelection();
if (tagStart <= tagEnd) updateLines(tagStart, tagEnd, flags);
// the undo/redo functions set undo to true, all others should leave it
// alone (default)
if (!undo) {
setModified(true);
newUndo();
}
}
int KateDocument::nextUndoType()
{
KateActionGroup *g;
if (currentUndo <= 0) return KateActionGroup::ugNone;
g = undoList.at(currentUndo - 1);
return g->undoType;
}
int KateDocument::nextRedoType()
{
KateActionGroup *g;
if (currentUndo >= (int) undoList.count()) return KateActionGroup::ugNone;
g = undoList.at(currentUndo);
// if (!g) return KateActionGroup::ugNone;
return g->undoType;
}
void KateDocument::undoTypeList(QValueList<int> &lst)
{
lst.clear();
for (int i = currentUndo-1; i>=0 ;i--)
lst.append(undoList.at(i)->undoType);
}
void KateDocument::redoTypeList(QValueList<int> &lst)
{
lst.clear();
for (int i = currentUndo+1; i<(int)undoList.count(); i++)
lst.append(undoList.at(i)->undoType);
}
void KateDocument::undo(VConfig &c, int count) {
KateActionGroup *g = 0L;
int num;
bool needUpdate = false; // don't update the cursor until completely done
if (count <= 0) return;
for (num = 0 ; num < count ; num++) {
if (currentUndo <= 0) break;
currentUndo--;
g = undoList.at(currentUndo);
doActionGroup(g, c.flags, true); // do not setModified() or newUndo()
needUpdate = true;
// if (num == 0) recordReset();
}
if (needUpdate) {
// since we told doActionGroup() not to do this stuff, we need to do it now
c.view->updateCursor(g->start);
setModified(true);
newUndo();
}
}
void KateDocument::redo(VConfig &c, int count) {
KateActionGroup *g = 0L;
int num;
bool needUpdate = false; // don't update the cursor until completely done
if (count <= 0) return;
for (num = 0 ; num < count ; num++) {
if (currentUndo+1 > (int)undoList.count()) break;
g = undoList.at(currentUndo);
currentUndo++;
doActionGroup(g, c.flags, true); // do not setModified() or newUndo()
needUpdate = true;
// if (num == 0) recordReset();
}
if (needUpdate) {
// since we told doActionGroup() not to do this stuff, we need to do it now
c.view->updateCursor(g->end);
setModified(true);
newUndo();
}
}
void KateDocument::clearRedo() {
// disable redos
// this was added as an assist to the spell checker
bool deleted = false;
while ((int) undoList.count() > currentUndo) {
deleted = true;
undoList.removeLast();
}
if (deleted) newUndo();
}
void KateDocument::setUndoSteps(int steps) {
if (steps < 5) steps = 5;
undoSteps = steps;
}
void KateDocument::setPseudoModal(QWidget *w) {
// QWidget *old = pseudoModal;
// (glenebob)
// this is a temporary hack to make the spell checker work a little
// better - as kspell progresses, this sort of thing should become
// obsolete or worked around more cleanly
// this is relied upon *only* by the spell-check code
if (pseudoModal && pseudoModal != (QWidget*)1L)
delete pseudoModal;
// pseudoModal = 0L;
// if (old || w) recordReset();
pseudoModal = w;
}
void KateDocument::newBracketMark(PointStruc &cursor, BracketMark &bm)
{
TextLine::Ptr textLine;
int x, line, count, attr;
QChar bracket, opposite, ch;
Attribute *a;
bm.eXPos = -1; //mark bracked mark as invalid
x = cursor.x -1; // -1 to look at left side of cursor
if (x < 0) return;
line = cursor.y; //current line
count = 0; //bracket counter for nested brackets
textLine = getTextLine(line);
if (!textLine) return;
bracket = textLine->getChar(x);
attr = textLine->getAttr(x);
if (bracket == '(' || bracket == '[' || bracket == '{')
{
//get opposite bracket
opposite = ')';
if (bracket == '[') opposite = ']';
if (bracket == '{') opposite = '}';
//get attribute of bracket (opposite bracket must have the same attribute)
x++;
while (line - cursor.y < 40) {
//go to next line on end of line
while (x >= (int) textLine->length()) {
line++;
if (line > lastLine()) return;
textLine = getTextLine(line);
x = 0;
}
if (textLine->getAttr(x) == attr) {
//try to find opposite bracked
ch = textLine->getChar(x);
if (ch == bracket) count++; //same bracket : increase counter
if (ch == opposite) {
count--;
if (count < 0) goto found;
}
}
x++;
}
}
else if (bracket == ')' || bracket == ']' || bracket == '}')
{
opposite = '(';
if (bracket == ']') opposite = '[';
if (bracket == '}') opposite = '{';
x--;
while (cursor.y - line < 20) {
while (x < 0) {
line--;
if (line < 0) return;
textLine = getTextLine(line);
x = textLine->length() -1;
}
if (textLine->getAttr(x) == attr) {
ch = textLine->getChar(x);
if (ch == bracket) count++;
if (ch == opposite) {
count--;
if (count < 0) goto found;
}
}
x--;
}
}
return;
found:
//cursor position of opposite bracket
bm.cursor.x = x;
bm.cursor.y = line;
//x position (start and end) of related bracket
bm.sXPos = textWidth(textLine, x);
a = &m_attribs[attr];
if (a->bold && a->italic)
bm.eXPos = bm.sXPos + myFontMetricsBI.width(bracket);
else if (a->bold)
bm.eXPos = bm.sXPos + myFontMetricsBold.width(bracket);
else if (a->italic)
bm.eXPos = bm.sXPos + myFontMetricsItalic.width(bracket);
else
bm.eXPos = bm.sXPos + myFontMetrics.width(bracket);
}
void KateDocument::clipboardChanged() { //slot
//#if defined(_WS_X11_)
if (m_singleSelection) {
disconnect(QApplication::clipboard(), SIGNAL(dataChanged()),
this, SLOT(clipboardChanged()));
deselectAll();
updateViews();
}
//#endif
}
#if 0
void KateDocument::guiActivateEvent( KParts::GUIActivateEvent *ev )
{
KParts::ReadWritePart::guiActivateEvent( ev );
if ( ev->activated() )
emit selectionChanged();
}
#endif
void KateDocument::setDocName (QString docName)
{
myDocName = docName;
emit nameChanged (this);
}
void KateDocument::setDocFile (QString docFile)
{
m_file = docFile;
emit fileNameChanged ();
}
void KateDocument::setMTime()
{
if (fileInfo && !fileInfo->fileName().isEmpty()) {
fileInfo->refresh();
mTime = fileInfo->lastModified();
}
}
void KateDocument::isModOnHD(bool forceReload)
{
if (fileInfo && !fileInfo->fileName().isEmpty()) {
fileInfo->refresh();
if (fileInfo->lastModified() > mTime) {
if ( forceReload ||
(KMessageBox::warningContinueCancel(0,
(i18n("The file %1 has changed on disk.\nDo you want to reload it?\n\nIf you cancel you will lose these changes next time you save this file")).arg(m_url),
i18n("File has changed on Disk"),
i18n("Yes") ) == KMessageBox::Continue)
)
reloadFile();
else
setMTime();
}
}
}
void KateDocument::reloadFile()
{
#warning fixme
#if 0
if (fileInfo && !fileInfo->fileName().isEmpty()) {
KateDocument::openFile();
setMTime();
}
#endif
}
void KateDocument::slotModChanged()
{
emit modStateChanged (this);
}
QList<Kate::Mark> KateDocument::marks ()
{
QList<Kate::Mark> list;
TextLine::Ptr line;
for (int i=0; i < numLines(); i++)
{
line = getTextLine(i);
if (line->mark() != 0)
{
Kate::Mark *mark=new Kate::Mark;
mark->line = i;
mark->type = line->mark();
list.append (mark);
}
}
return list;
}
void KateDocument::flush ()
{
if (isReadOnly())
return;
m_url = QString::null;
fileInfo->setFile (QString());
setMTime();
clear();
updateViews();
emit fileNameChanged ();
}
void KateDocument::open (const QString &name)
{
openURL (name);
}
void KateDocument::wrapText (uint col)
{
int line = 0;
int z = 0;
while(true)
{
TextLine::Ptr l = getTextLine(line);
if (l->length() > col)
{
TextLine::Ptr tl = new TextLine();
buffer->insertLine(line+1,tl);
const QChar *text = l->getText();
for (z=col; z>0; z--)
{
if (z < 1) break;
if (text[z].isSpace()) break;
}
if (z < 1) z=col;
l->wrap (tl, z);
}
line++;
if (line >= numLines()) break;
};
newDocGeometry=true;
updateLines();
updateViews();
}
void KateDocument::setWordWrap (bool on)
{
if (on != myWordWrap && on)
wrapText (myWordWrapAt);
myWordWrap = on;
}
void KateDocument::setWordWrapAt (uint col)
{
if (myWordWrapAt != col && myWordWrap)
wrapText (myWordWrapAt);
myWordWrapAt = col;
}
void KateDocument::applyWordWrap ()
{
wrapText (myWordWrapAt);
}
diff --git a/noncore/apps/tinykate/libkate/document/katehighlight.cpp b/noncore/apps/tinykate/libkate/document/katehighlight.cpp
index 0d2c283..539d356 100644
--- a/noncore/apps/tinykate/libkate/document/katehighlight.cpp
+++ b/noncore/apps/tinykate/libkate/document/katehighlight.cpp
@@ -1,1459 +1,1463 @@
/*
Copyright (C) 1998, 1999 Jochen Wilhelmy
digisnap@cs.tu-berlin.de
(C) 2002, 2001 The Kate Team <kwrite-devel@kde.org>
(C) 2002 Joseph Wenninger <jowenn@kde.org>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
-#include <string.h>
-
-#include <qtextstream.h>
-#include <qpe/config.h>
-#include <kglobal.h>
-//#include <kinstance.h>
-//#include <kmimemagic.h>
-#include <klocale.h>
-//#include <kregexp.h>
-#include <kglobalsettings.h>
-#include <kdebug.h>
-#include <kstddirs.h>
-
#include "katehighlight.h"
-
-
#include "katetextline.h"
#include "katedocument.h"
#include "katesyntaxdocument.h"
+#include "kglobal.h"
+//#include "kinstance.h"
+//#include "kmimemagic.h"
+#include "klocale.h"
+//#include "kregexp.h"
+#include "kglobalsettings.h"
+#include "kdebug.h"
+#include "kstddirs.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
+#include <qpe/config.h>
+
+/* QT */
+#include <qtextstream.h>
+
+/* STD */
+#include <string.h>
+
HlManager *HlManager::s_pSelf = 0;
enum Item_styles { dsNormal,dsKeyword,dsDataType,dsDecVal,dsBaseN,dsFloat,dsChar,dsString,dsComment,dsOthers};
static bool trueBool = true;
static QString stdDeliminator = QString ("!%&()*+,-./:;<=>?[]^{|}~ \t\\");
int getDefStyleNum(QString name)
{
if (name=="dsNormal") return dsNormal;
if (name=="dsKeyword") return dsKeyword;
if (name=="dsDataType") return dsDataType;
if (name=="dsDecVal") return dsDecVal;
if (name=="dsBaseN") return dsBaseN;
if (name=="dsFloat") return dsFloat;
if (name=="dsChar") return dsChar;
if (name=="dsString") return dsString;
if (name=="dsComment") return dsComment;
if (name=="dsOthers") return dsOthers;
return dsNormal;
}
bool ustrchr(const QChar *s, uint len, QChar c)
{
for (int z=0; z < len; z++)
{
if (*s == c) return true;
s++;
}
return false;
}
HlItem::HlItem(int attribute, int context)
: attr(attribute), ctx(context) {subItems=0;
}
HlItem::~HlItem()
{
//kdDebug(13010)<<"In hlItem::~HlItem()"<<endl;
if (subItems!=0) {subItems->setAutoDelete(true); subItems->clear(); delete subItems;}
}
bool HlItem::startEnable(QChar c)
{
return true;
}
HlCharDetect::HlCharDetect(int attribute, int context, QChar c)
: HlItem(attribute,context), sChar(c) {
}
const QChar *HlCharDetect::checkHgl(const QChar *str, int len, bool) {
if (*str == sChar) return str + 1;
return 0L;
}
Hl2CharDetect::Hl2CharDetect(int attribute, int context, QChar ch1, QChar ch2)
: HlItem(attribute,context) {
sChar1 = ch1;
sChar2 = ch2;
}
const QChar *Hl2CharDetect::checkHgl(const QChar *str, int len, bool) {
if (str[0] == sChar1 && str[1] == sChar2) return str + 2;
return 0L;
}
HlStringDetect::HlStringDetect(int attribute, int context, const QString &s, bool inSensitive)
: HlItem(attribute, context), str(inSensitive ? s.upper():s), _inSensitive(inSensitive) {
}
HlStringDetect::~HlStringDetect() {
}
const QChar *HlStringDetect::checkHgl(const QChar *s, int len, bool) {
if (!_inSensitive) {if (memcmp(s, str.unicode(), str.length()*sizeof(QChar)) == 0) return s + str.length();}
else
{
QString tmp=QString(s,str.length()).upper();
if (tmp==str) return s+str.length();
}
return 0L;
}
HlRangeDetect::HlRangeDetect(int attribute, int context, QChar ch1, QChar ch2)
: HlItem(attribute,context) {
sChar1 = ch1;
sChar2 = ch2;
}
const QChar *HlRangeDetect::checkHgl(const QChar *s, int len, bool) {
if (*s == sChar1)
{
do
{
s++;
len--;
if (len == 0) return 0L;
}
while (*s != sChar2);
return s + 1;
}
return 0L;
}
HlKeyword::HlKeyword (int attribute, int context,bool casesensitive, const QChar *deliminator, uint deliLen)
: HlItem(attribute,context), dict (113, casesensitive)
{
deliminatorChars = deliminator;
deliminatorLen = deliLen;
_caseSensitive=casesensitive;
}
HlKeyword::~HlKeyword() {
}
bool HlKeyword::startEnable(QChar c)
{
return ustrchr(deliminatorChars, deliminatorLen, c);
}
// If we use a dictionary for lookup we don't really need
// an item as such we are using the key to lookup
void HlKeyword::addWord(const QString &word)
{
words.append(word);
dict.insert(word,&trueBool);
}
void HlKeyword::addList(const QStringList& list)
{
words+=list;
for(uint i=0;i<list.count();i++) dict.insert(list[i], &trueBool);
}
const QChar *HlKeyword::checkHgl(const QChar *s, int len, bool b)
{
if (len == 0) return 0L;
const QChar *s2 = s;
while ( (len > 0) && (!ustrchr(deliminatorChars, deliminatorLen, *s2)) )
{
s2++;
len--;
}
if (s2 == s) return 0L;
QString lookup = QString(s,s2-s);
if ( dict.find(lookup) ) return s2;
return 0L;
}
HlInt::HlInt(int attribute, int context)
: HlItem(attribute,context) {
}
const QChar *HlInt::checkHgl(const QChar *str, int len, bool) {
const QChar *s,*s1;
s = str;
while (s->isDigit()) s++;
if (s > str)
{
if (subItems)
{
for (HlItem *it=subItems->first();it;it=subItems->next())
{
s1=it->checkHgl(s, len, false);
if (s1) return s1;
}
}
return s;
}
return 0L;
}
HlFloat::HlFloat(int attribute, int context)
: HlItem(attribute,context) {
}
const QChar *HlFloat::checkHgl(const QChar *s, int len, bool) {
bool b, p;
const QChar *s1;
b = false;
while (s->isDigit()){
s++;
b = true;
}
if (p = (*s == '.')) {
s++;
while (s->isDigit()) {
s++;
b = true;
}
}
if (!b) return 0L;
if ((*s&0xdf) == 'E') s++;
else
if (!p) return 0L;
else
{
if (subItems)
{
for (HlItem *it=subItems->first();it;it=subItems->next())
{
s1=it->checkHgl(s, len, false);
if (s1) return s1;
}
}
return s;
}
if ((*s == '-')||(*s =='+')) s++;
b = false;
while (s->isDigit()) {
s++;
b = true;
}
if (b)
{
if (subItems)
{
for (HlItem *it=subItems->first();it;it=subItems->next())
{
s1=it->checkHgl(s, len, false);
if (s1) return s1;
}
}
return s;
}
else return 0L;
}
HlCInt::HlCInt(int attribute, int context)
: HlInt(attribute,context) {
}
const QChar *HlCInt::checkHgl(const QChar *s, int len, bool lineStart) {
// if (*s == '0') s++; else s = HlInt::checkHgl(s);
s = HlInt::checkHgl(s, len, lineStart);
if (s != 0L) {
int l = 0;
int u = 0;
const QChar *str;
do {
str = s;
if ((*s&0xdf) == 'L' ) {
l++;
if (l > 2) return 0L;
s++;
}
if ((*s&0xdf) == 'U' ){
u++;
if (u > 1) return 0L;
s++;
}
} while (s != str);
}
return s;
}
HlCOct::HlCOct(int attribute, int context)
: HlItem(attribute,context) {
}
const QChar *HlCOct::checkHgl(const QChar *str, int len, bool) {
const QChar *s;
if (*str == '0') {
str++;
s = str;
while (*s >= '0' && *s <= '7') s++;
if (s > str) {
if ((*s&0xdf) == 'L' || (*s&0xdf) == 'U' ) s++;
return s;
}
}
return 0L;
}
HlCHex::HlCHex(int attribute, int context)
: HlItem(attribute,context) {
}
const QChar *HlCHex::checkHgl(const QChar *str, int len, bool) {
const QChar *s=str;
#if 0
int i;
for (i=0;(*s)!='\0';s++,i++);
QString line(str,i);
QRegExp3 rx("0[xX][a-fA-F\\d]+[UuLl]?"); // this matches but is also matching parenthesis
int pos=rx.search(line,0);
if(pos > -1) return str+rx.matchedLength();
else
return 0L;
#else
if (str[0] == '0' && ((str[1]&0xdf) == 'X' )) {
str += 2;
s = str;
while (s->isDigit() || ((*s&0xdf) >= 'A' && (*s&0xdf) <= 'F') /*|| (*s >= 'a' && *s <= 'f')*/) s++;
if (s > str) {
if ((*s&0xdf) == 'L' || (*s&0xdf) == 'U' ) s++;
return s;
}
}
return 0L;
#endif
}
HlCFloat::HlCFloat(int attribute, int context)
: HlFloat(attribute,context) {
}
const QChar *HlCFloat::checkHgl(const QChar *s, int len, bool lineStart) {
s = HlFloat::checkHgl(s, len, lineStart);
if (s && ((*s&0xdf) == 'F' )) s++;
return s;
}
HlAnyChar::HlAnyChar(int attribute, int context, const QChar* charList, uint len)
: HlItem(attribute, context) {
_charList=charList;
_charListLen=len;
}
const QChar *HlAnyChar::checkHgl(const QChar *s, int len, bool)
{
if (ustrchr(_charList, _charListLen, *s)) return s +1;
return 0L;
}
HlRegExpr::HlRegExpr(int attribute, int context,QString regexp)
: HlItem(attribute, context) {
handlesLinestart=regexp.startsWith("^");
if(!handlesLinestart) regexp.prepend("^");
Expr=new QRegExp3(regexp);
}
const QChar *HlRegExpr::checkHgl(const QChar *s, int len, bool lineStart)
{
if ((!lineStart) && handlesLinestart) return 0;
QString line(s,len);
int pos = Expr->search( line, 0 );
if (pos==-1) return 0L;
else
return (s+Expr->matchedLength());
};
HlLineContinue::HlLineContinue(int attribute, int context)
: HlItem(attribute,context) {
}
const QChar *HlLineContinue::checkHgl(const QChar *s, int len, bool) {
if ((s[0].latin1() == '\\') && (len == 1))
{
return s + 1;
}
return 0L;
}
HlCStringChar::HlCStringChar(int attribute, int context)
: HlItem(attribute,context) {
}
//checks for hex and oct (for example \x1b or \033)
const QChar *checkCharHexOct(const QChar *str) {
const QChar *s;
s=str;
int n;
if (*s == 'x') {
n = 0;
do {
s++;
n *= 16;
if (s->isDigit()) n += *s - '0';
else if ((*s&0xdf) >= 'A' && (*s&0xdf) <= 'F') n += (*s&0xdf) - 'A' + 10;
// else if (*s >= 'a' && *s <= 'f') n += *s - 'a' + 10;
else break;
if (n >= 256) return 0L;
} while (true);
if (s - str == 1) return 0L;
} else {
if (!(*s >= '0' && *s <= '7')) return 0L;
n = *s - '0';
do {
s++;
n *= 8;
if (*s >= '0' && *s <= '7') n += *s - '0'; else break;
if (n >= 256) return s;
} while (s - str < 3);
}
return s;
}
// checks for C escaped chars \n and escaped hex/octal chars
const QChar *checkEscapedChar(const QChar *s, int len) {
int i;
if (s[0] == '\\' && (len > 1) ) {
s++;
switch(*s){
case 'a': // checks for control chars
case 'b': // we want to fall through
case 'e':
case 'f':
case 'n':
case 'r':
case 't':
case 'v':
case '\'':
case '\"':
case '?' : // added ? ANSI C classifies this as an escaped char
case '\\': s++;
break;
case 'x': // if it's like \xff
s++; // eat the x
// these for loops can probably be
// replaced with something else but
// for right now they work
// check for hexdigits
for(i=0;i<2 &&(*s >= '0' && *s <= '9' || (*s&0xdf) >= 'A' && (*s&0xdf) <= 'F');i++,s++);
if(i==0) return 0L; // takes care of case '\x'
break;
case '0': case '1': case '2': case '3' :
case '4': case '5': case '6': case '7' :
for(i=0;i < 3 &&(*s >='0'&& *s<='7');i++,s++);
break;
default: return 0L;
}
return s;
}
return 0L;
}
const QChar *HlCStringChar::checkHgl(const QChar *str, int len, bool) {
return checkEscapedChar(str, len);
}
HlCChar::HlCChar(int attribute, int context)
: HlItem(attribute,context) {
}
const QChar *HlCChar::checkHgl(const QChar *str, int len, bool) {
const QChar *s;
if ((len > 1) && (str[0] == '\'') && (str[1] != '\''))
{
s = checkEscapedChar(&str[1], len); //try to match escaped char
if (!s) s = &str[2]; //match single non-escaped char
if (*s == '\'') return s + 1;
}
return 0L;
}
//--------
ItemStyle::ItemStyle() : selCol(Qt::white), bold(false), italic(false) {
}
ItemStyle::ItemStyle(const QColor &col, const QColor &selCol,
bool bold, bool italic)
: col(col), selCol(selCol), bold(bold), italic(italic) {
}
ItemData::ItemData(const QString name, int defStyleNum)
: name(name), defStyleNum(defStyleNum), defStyle(true) {
}
ItemData::ItemData(const QString name, int defStyleNum,
const QColor &col, const QColor &selCol, bool bold, bool italic)
: ItemStyle(col,selCol,bold,italic), name(name), defStyleNum(defStyleNum),
defStyle(false) {
}
HlData::HlData(const QString &wildcards, const QString &mimetypes, const QString &identifier)
: wildcards(wildcards), mimetypes(mimetypes), identifier(identifier) {
//JW itemDataList.setAutoDelete(true);
}
HlContext::HlContext(int attribute, int lineEndContext, int _lineBeginContext)
: attr(attribute), ctx(lineEndContext),lineBeginContext(_lineBeginContext) {
items.setAutoDelete(true);
}
Hl2CharDetect::Hl2CharDetect(int attribute, int context, const QChar *s)
: HlItem(attribute,context) {
sChar1 = s[0];
sChar2 = s[1];
}
Highlight::Highlight(syntaxModeListItem *def) : refCount(0)
{
noHl = false;
if (def == 0)
{
noHl = true;
iName = I18N_NOOP("Normal");
iSection = "";
}
else
{
iName = def->name;
iSection = def->section;
iWildcards = def->extension;
iMimetypes = def->mimetype;
identifier = def->identifier;
}
deliminator = stdDeliminator;
deliminatorChars = deliminator.unicode();
deliminatorLen = deliminator.length();
}
Highlight::~Highlight()
{
}
int Highlight::doHighlight(int ctxNum, TextLine *textLine)
{
if (noHl)
{
textLine->setAttribs(0,0,textLine->length());
textLine->setAttr(0);
return 0;
}
HlContext *context;
const QChar *s2;
HlItem *item;
context = contextList[ctxNum];
if (context->lineBeginContext!=-1)
{
ctxNum=context->lineBeginContext;
context=contextList[ctxNum];
}
QChar lastChar = ' ';
// first char
const QChar *str = textLine->getText();
// non space char - index of that char
const QChar *s1 = textLine->firstNonSpace();
uint z = textLine->firstChar();
// length of textline
uint len = textLine->length();
bool found = false;
while (z < len)
{
found = false;
for (item = context->items.first(); item != 0L; item = context->items.next())
{
if (item->startEnable(lastChar))
{
s2 = item->checkHgl(s1, len-z, z==0);
if (s2 > s1)
{
- qDebug("An item has been detected");
+ odebug << "An item has been detected" << oendl;
textLine->setAttribs(item->attr,s1 - str,s2 - str);
ctxNum = item->ctx;
context = contextList[ctxNum];
z = z + s2 - s1 - 1;
s1 = s2 - 1;
found = true;
break;
}
}
}
// nothing found: set attribute of one char
if (!found)
textLine->setAttribs(context->attr,s1 - str,s1 - str + 1);
lastChar = *s1;
s1++;
z++;
}
//set "end of line"-properties
textLine->setAttr(context->attr);
//return new context
return context->ctx;
}
KateConfig *Highlight::getKateConfig() {
KateConfig *config;
config=KGlobal::config();
config->setGroup(iName + QString(" Highlight"));
return config;
}
QString Highlight::getWildcards() {
KateConfig *config;
config = getKateConfig();
//if wildcards not yet in config, then use iWildCards as default
return config->readEntry("Wildcards", iWildcards);
}
QString Highlight::getMimetypes() {
KateConfig *config;
config = getKateConfig();
return config->readEntry("Mimetypes", iMimetypes);
}
HlData *Highlight::getData() {
KateConfig *config;
HlData *hlData;
config = getKateConfig();
// iWildcards = config->readEntry("Wildcards");
// iMimetypes = config->readEntry("Mimetypes");
// hlData = new HlData(iWildcards,iMimetypes);
hlData = new HlData(
config->readEntry("Wildcards", iWildcards),
config->readEntry("Mimetypes", iMimetypes),
config->readEntry("Identifier", identifier));
getItemDataList(hlData->itemDataList, config);
return hlData;
}
void Highlight::setData(HlData *hlData) {
KateConfig *config;
config = getKateConfig();
// iWildcards = hlData->wildcards;
// iMimetypes = hlData->mimetypes;
config->writeEntry("Wildcards",hlData->wildcards);
config->writeEntry("Mimetypes",hlData->mimetypes);
setItemDataList(hlData->itemDataList,config);
}
void Highlight::getItemDataList(ItemDataList &list) {
KateConfig *config;
config = getKateConfig();
getItemDataList(list, config);
}
void Highlight::getItemDataList(ItemDataList &list, KateConfig *config) {
ItemData *p;
QString s;
QRgb col, selCol;
list.clear();
//JW list.setAutoDelete(true);
createItemData(list);
for (p = list.first(); p != 0L; p = list.next()) {
s = config->readEntry(p->name);
if (!s.isEmpty()) {
sscanf(s.latin1(),"%d,%X,%X,%d,%d", &p->defStyle,&col,&selCol,&p->bold,&p->italic);
p->col.setRgb(col);
p->selCol.setRgb(selCol);
}
}
}
/*******************************************************************************************
Highlight - setItemDataList
saves the ItemData / attribute / style definitions to the apps configfile.
Especially needed for user overridden values.
* input: ItemDataList &list :reference to the list, whose
* items should be saved
* KateConfig *config :Pointer KDE configuration
* class, which should be used
* as storage
*************
* output: none
*************
* return value: none
*******************************************************************************************/
void Highlight::setItemDataList(ItemDataList &list, KateConfig *config) {
ItemData *p;
QString s;
for (p = list.first(); p != 0L; p = list.next()) {
s.sprintf("%d,%X,%X,%d,%d",
p->defStyle,p->col.rgb(),p->selCol.rgb(),p->bold,p->italic);
config->writeEntry(p->name,s);
}
}
/*******************************************************************************************
Highlight - use
Increase the usage count and trigger initialization if needed
* input: none
*************
* output: none
*************
* return value: none
*******************************************************************************************/
void Highlight::use()
{
if (refCount == 0) init();
refCount++;
}
/*******************************************************************************************
Highlight - release
Decrease the usage count and trigger a cleanup if needed
* input: none
*************
* output: none
*************
* return value: none
*******************************************************************************************/
void Highlight::release()
{
refCount--;
if (refCount == 0) done();
}
/*******************************************************************************************
Highlight - init
If it's the first time a particular highlighting is used create the needed contextlist
* input: none
*************
* output: none
*************
* return value: none
*******************************************************************************************/
void Highlight::init()
{
if (noHl)
return;
for (int z = 0; z < nContexts; z++) contextList[z] = 0L;
makeContextList();
}
/*******************************************************************************************
Highlight - done
If the there is no document using the highlighting style free the complete context
structure.
* input: none
*************
* output: none
*************
* return value: none
*******************************************************************************************/
void Highlight::done()
{
if (noHl)
return;
for (int z = 0; z < nContexts; z++) delete contextList[z];
}
/*******************************************************************************************
Highlight - createItemData
This function reads the itemData entries from the config file, which specifies the
default attribute styles for matched items/contexts.
* input: none
*************
* output: ItemDataList &list :A reference to the internal
list containing the parsed
default config
*************
* return value: none
*******************************************************************************************/
void Highlight::createItemData(ItemDataList &list)
{
- qDebug("Highlight::createItemData");
+ odebug << "Highlight::createItemData" << oendl;
// If no highlighting is selected we need only one default.
if (noHl)
{
list.append(new ItemData(I18N_NOOP("Normal Text"), dsNormal));
return;
}
QString color;
QString selColor;
QString bold;
QString italic;
// If the internal list isn't already available read the config file
if (internalIDList.count()==0)
{
//if all references to the list are destried the contents will also be deleted
internalIDList.setAutoDelete(true);
syntaxContextData *data;
- qDebug("Trying to read itemData section");
+ odebug << "Trying to read itemData section" << oendl;
//Tell the syntax document class which file we want to parse and which data group
HlManager::self()->syntax->setIdentifier(identifier);
data=HlManager::self()->syntax->getGroupInfo("highlighting","itemData");
//begin with the real parsing
while (HlManager::self()->syntax->nextGroup(data))
{
- qDebug("Setting up one itemData element");
+ odebug << "Setting up one itemData element" << oendl;
// read all attributes
color=HlManager::self()->syntax->groupData(data,QString("color"));
selColor=HlManager::self()->syntax->groupData(data,QString("selColor"));
bold=HlManager::self()->syntax->groupData(data,QString("bold"));
italic=HlManager::self()->syntax->groupData(data,QString("italic"));
//check if the user overrides something
if ( (!color.isEmpty()) && (!selColor.isEmpty()) && (!bold.isEmpty()) && (!italic.isEmpty()))
{
//create a user defined style
internalIDList.append(new ItemData(
HlManager::self()->syntax->groupData(data,QString("name")).simplifyWhiteSpace(),
getDefStyleNum(HlManager::self()->syntax->groupData(data,QString("defStyleNum"))),
QColor(color),QColor(selColor),(bold=="true") || (bold=="1"), (italic=="true") || (italic=="1")
));
}
else
{
//assign a default style
internalIDList.append(new ItemData(
HlManager::self()->syntax->groupData(data,QString("name")).simplifyWhiteSpace(),
getDefStyleNum(HlManager::self()->syntax->groupData(data,QString("defStyleNum")))));
}
}
//clean up
if (data) HlManager::self()->syntax->freeGroupInfo(data);
}
//set the ouput reference
list=internalIDList;
}
/*******************************************************************************************
Highlight - lookupAttrName
This function is a helper for makeContextList and createHlItem. It looks the given
attribute name in the itemData list up and returns it's index
* input: QString &name :the attribute name to lookup
* ItemDataList &iDl :the list containing all
* available attributes
*************
* output: none
*************
* return value: int :The index of the attribute
* or 0
*******************************************************************************************/
int Highlight::lookupAttrName(const QString& name, ItemDataList &iDl)
{
for (int i=0;i<iDl.count();i++)
{
if (iDl.at(i)->name==name) return i;
}
kdDebug(13010)<<"Couldn't resolve itemDataName"<<endl;
return 0;
}
/*******************************************************************************************
Highlight - createHlItem
This function is a helper for makeContextList. It parses the xml file for
information, how single or multi line comments are marked
* input: syntaxContextData *data : Data about the item read from
* the xml file
* ItemDataList &iDl : List of all available itemData
* entries. Needed for attribute
* name->index translation
*************
* output: none
*************
* return value: HlItem * : Pointer to the newly created item
* object
*******************************************************************************************/
HlItem *Highlight::createHlItem(syntaxContextData *data, ItemDataList &iDl)
{
// No highlighting -> exit
if (noHl)
return 0;
// get the (tagname) itemd type
QString dataname=HlManager::self()->syntax->groupItemData(data,QString(""));
// BEGIN - Translation of the attribute parameter
QString tmpAttr=HlManager::self()->syntax->groupItemData(data,QString("attribute")).simplifyWhiteSpace();
int attr;
if (QString("%1").arg(tmpAttr.toInt())==tmpAttr)
attr=tmpAttr.toInt();
else
attr=lookupAttrName(tmpAttr,iDl);
// END - Translation of the attribute parameter
// Info about context switch
int context=((HlManager::self()->syntax->groupItemData(data,QString("context"))).toInt());
// Get the char parameter (eg DetectChar)
char chr;
if (! HlManager::self()->syntax->groupItemData(data,QString("char")).isEmpty())
chr= (HlManager::self()->syntax->groupItemData(data,QString("char")).latin1())[0];
else
chr=0;
// Get the String parameter (eg. StringDetect)
QString stringdata=HlManager::self()->syntax->groupItemData(data,QString("String"));
// Get a second char parameter (char1) (eg Detect2Chars)
char chr1;
if (! HlManager::self()->syntax->groupItemData(data,QString("char1")).isEmpty())
chr1= (HlManager::self()->syntax->groupItemData(data,QString("char1")).latin1())[0];
else
chr1=0;
// Will be removed eventuall. Atm used for StringDetect
bool insensitive=(HlManager::self()->syntax->groupItemData(data,QString("insensitive"))==QString("TRUE"));
//Create the item corresponding to it's type and set it's parameters
if (dataname=="keyword")
{
HlKeyword *keyword=new HlKeyword(attr,context,casesensitive,
deliminatorChars, deliminatorLen);
//Get the entries for the keyword lookup list
keyword->addList(HlManager::self()->syntax->finddata("highlighting",stringdata));
return keyword;
} else
if (dataname=="Float") return (new HlFloat(attr,context)); else
if (dataname=="Int") return(new HlInt(attr,context)); else
if (dataname=="DetectChar") return(new HlCharDetect(attr,context,chr)); else
if (dataname=="Detect2Chars") return(new Hl2CharDetect(attr,context,chr,chr1)); else
if (dataname=="RangeDetect") return(new HlRangeDetect(attr,context, chr, chr1)); else
if (dataname=="LineContinue") return(new HlLineContinue(attr,context)); else
if (dataname=="StringDetect") return(new HlStringDetect(attr,context,stringdata,insensitive)); else
if (dataname=="AnyChar") return(new HlAnyChar(attr,context,stringdata.unicode(), stringdata.length())); else
if (dataname=="RegExpr") return(new HlRegExpr(attr,context,stringdata)); else
if(dataname=="HlCChar") return ( new HlCChar(attr,context));else
if(dataname=="HlCHex") return (new HlCHex(attr,context));else
if(dataname=="HlCOct") return (new HlCOct(attr,context)); else
if(dataname=="HlCStringChar") return (new HlCStringChar(attr,context)); else
{
// oops, unknown type. Perhaps a spelling error in the xml file
return 0;
}
}
/*******************************************************************************************
Highlight - isInWord
* input: Qchar c Character to investigate
*************
* output: none
*************
* return value: returns true, if c is no deliminator
*******************************************************************************************/
bool Highlight::isInWord(QChar c)
{
return !ustrchr(deliminatorChars, deliminatorLen, c);
}
/*******************************************************************************************
Highlight - readCommentConfig
This function is a helper for makeContextList. It parses the xml file for
information, how single or multi line comments are marked
* input: none
*************
* output: none
*************
* return value: none
*******************************************************************************************/
void Highlight::readCommentConfig()
{
cslStart = "";
HlManager::self()->syntax->setIdentifier(identifier);
syntaxContextData *data=HlManager::self()->syntax->getGroupInfo("general","comment");
if (data)
{
// kdDebug(13010)<<"COMMENT DATA FOUND"<<endl;
while (HlManager::self()->syntax->nextGroup(data))
{
if (HlManager::self()->syntax->groupData(data,"name")=="singleLine")
cslStart=HlManager::self()->syntax->groupData(data,"start");
if (HlManager::self()->syntax->groupData(data,"name")=="multiLine")
{
cmlStart=HlManager::self()->syntax->groupData(data,"start");
cmlEnd=HlManager::self()->syntax->groupData(data,"end");
}
}
HlManager::self()->syntax->freeGroupInfo(data);
}
}
/*******************************************************************************************
Highlight - readGlobalKeyWordConfig
This function is a helper for makeContextList. It parses the xml file for
information, if keywords should be treated case(in)sensitive and creates the keyword
delimiter list. Which is the default list, without any given weak deliminiators
* input: none
*************
* output: none
*************
* return value: none
*******************************************************************************************/
void Highlight::readGlobalKeywordConfig()
{
// Tell the syntax document class which file we want to parse
HlManager::self()->syntax->setIdentifier(identifier);
// Get the keywords config entry
syntaxContextData * data=HlManager::self()->syntax->getConfig("general","keywords");
if (data)
{
kdDebug(13010)<<"Found global keyword config"<<endl;
if (HlManager::self()->syntax->groupItemData(data,QString("casesensitive"))!="0")
casesensitive=true; else {casesensitive=false; kdDebug(13010)<<"Turning on case insensitiveness"<<endl;}
//get the weak deliminators
weakDeliminator=(!HlManager::self()->syntax->groupItemData(data,QString("weakDeliminator")));
// remove any weakDelimitars (if any) from the default list and store this list.
int f;
for (int s=0; s < weakDeliminator.length(); s++)
{
f = 0;
f = deliminator.find (weakDeliminator[s]);
if (f > -1)
deliminator.remove (f, 1);
}
deliminatorChars = deliminator.unicode();
deliminatorLen = deliminator.length();
HlManager::self()->syntax->freeGroupInfo(data);
}
else
{
//Default values
casesensitive=true;
weakDeliminator=QString("");
}
}
/*******************************************************************************************
Highlight - makeContextList
That's the most important initialization function for each highlighting. It's called
each time a document gets a highlighting style assigned. parses the xml file and
creates a corresponding internal structure
* input: none
*************
* output: none
*************
* return value: none
*******************************************************************************************/
void Highlight::makeContextList()
{
if (noHl)
return;
HlKeyword *keyword=0, *dataType=0;
syntaxContextData *data, *datasub;
HlItem *c;
readCommentConfig();
readGlobalKeywordConfig();
// Let the syntax document class know, which file we'd like to parse
HlManager::self()->syntax->setIdentifier(identifier);
// This list is needed for the translation of the attribute parameter, if the itemData name is given instead of the index
ItemDataList iDl;
createItemData(iDl);
//start the real work
data=HlManager::self()->syntax->getGroupInfo("highlighting","context");
int i=0;
if (data)
{
while (HlManager::self()->syntax->nextGroup(data))
{
// BEGIN - Translation of the attribute parameter
QString tmpAttr=HlManager::self()->syntax->groupData(data,QString("attribute")).simplifyWhiteSpace();
int attr;
if (QString("%1").arg(tmpAttr.toInt())==tmpAttr)
attr=tmpAttr.toInt();
else
attr=lookupAttrName(tmpAttr,iDl);
// END - Translation of the attribute parameter
contextList[i]=new HlContext(
attr,
(HlManager::self()->syntax->groupData(data,QString("lineEndContext"))).toInt(),
(HlManager::self()->syntax->groupData(data,QString("lineBeginContext"))).isEmpty()?-1:
(HlManager::self()->syntax->groupData(data,QString("lineBeginContext"))).toInt());
//Let's create all items for the context
while (HlManager::self()->syntax->nextItem(data))
{
// kdDebug(13010)<< "In make Contextlist: Item:"<<endl;
c=createHlItem(data,iDl);
if (c)
{
contextList[i]->items.append(c);
// Not supported completely atm and only one level. Subitems.(all have to be matched to at once)
datasub=HlManager::self()->syntax->getSubItems(data);
bool tmpbool;
if (tmpbool=HlManager::self()->syntax->nextItem(datasub))
{
c->subItems=new QList<HlItem>;
for (;tmpbool;tmpbool=HlManager::self()->syntax->nextItem(datasub))
c->subItems->append(createHlItem(datasub,iDl));
}
HlManager::self()->syntax->freeGroupInfo(datasub);
// end of sublevel
}
// kdDebug(13010)<<"Last line in loop"<<endl;
}
i++;
}
}
HlManager::self()->syntax->freeGroupInfo(data);
}
HlManager::HlManager() : QObject(0L)
{
syntax = new SyntaxDocument();
SyntaxModeList modeList = syntax->modeList();
hlList.setAutoDelete(true);
hlList.append(new Highlight(0));
uint i=0;
while (i < modeList.count())
{
hlList.append(new Highlight(modeList.at(i)));
i++;
}
}
HlManager::~HlManager() {
if(syntax) delete syntax;
}
HlManager *HlManager::self()
{
if ( !s_pSelf )
s_pSelf = new HlManager;
return s_pSelf;
}
Highlight *HlManager::getHl(int n) {
if (n < 0 || n >= (int) hlList.count()) n = 0;
return hlList.at(n);
}
int HlManager::defaultHl() {
KateConfig *config;
config = KGlobal::config();
config->setGroup("General Options");
#warning fixme return nameFind(config->readEntry("Highlight"));
}
int HlManager::nameFind(const QString &name) {
int z;
for (z = hlList.count() - 1; z > 0; z--) {
if (hlList.at(z)->iName == name) break;
}
return z;
}
int HlManager::wildcardFind(const QString &fileName) {
Highlight *highlight;
int p1, p2;
QString w;
for (highlight = hlList.first(); highlight != 0L; highlight = hlList.next()) {
p1 = 0;
w = highlight->getWildcards();
while (p1 < (int) w.length()) {
p2 = w.find(';',p1);
if (p2 == -1) p2 = w.length();
if (p1 < p2) {
QRegExp regExp(w.mid(p1,p2 - p1),true,true);
if (regExp.match(fileName) == 0) return hlList.at();
}
p1 = p2 + 1;
}
}
return -1;
}
int HlManager::makeAttribs(Highlight *highlight, Attribute *a, int maxAttribs) {
ItemStyleList defaultStyleList;
ItemStyle *defaultStyle;
ItemDataList itemDataList;
ItemData *itemData;
int nAttribs, z;
- qDebug("HlManager::makeAttribs");
+ odebug << "HlManager::makeAttribs" << oendl;
defaultStyleList.setAutoDelete(true);
getDefaults(defaultStyleList);
// itemDataList.setAutoDelete(true);
highlight->getItemDataList(itemDataList);
nAttribs = itemDataList.count();
for (z = 0; z < nAttribs; z++) {
- qDebug("HlManager::makeAttribs: createing one attribute definition");
+ odebug << "HlManager::makeAttribs: createing one attribute definition" << oendl;
itemData = itemDataList.at(z);
if (itemData->defStyle) {
// default style
defaultStyle = defaultStyleList.at(itemData->defStyleNum);
a[z].col = defaultStyle->col;
a[z].selCol = defaultStyle->selCol;
a[z].bold = defaultStyle->bold;
a[z].italic = defaultStyle->italic;
} else {
// custom style
a[z].col = itemData->col;
a[z].selCol = itemData->selCol;
a[z].bold = itemData->bold;
a[z].italic = itemData->italic;
}
}
for (; z < maxAttribs; z++) {
a[z].col = black;
a[z].selCol = black;
a[z].bold = defaultStyle->bold;
a[z].italic = defaultStyle->italic;
}
return nAttribs;
}
int HlManager::defaultStyles() {
return 10;
}
QString HlManager::defaultStyleName(int n)
{
static QStringList names;
if (names.isEmpty())
{
names << i18n("Normal");
names << i18n("Keyword");
names << i18n("Data Type");
names << i18n("Decimal/Value");
names << i18n("Base-N Integer");
names << i18n("Floating Point");
names << i18n("Character");
names << i18n("String");
names << i18n("Comment");
names << i18n("Others");
}
return names[n];
}
void HlManager::getDefaults(ItemStyleList &list) {
KateConfig *config;
int z;
ItemStyle *i;
QString s;
QRgb col, selCol;
list.setAutoDelete(true);
//ItemStyle(color, selected color, bold, italic)
list.append(new ItemStyle(black,white,false,false)); //normal
list.append(new ItemStyle(black,white,true,false)); //keyword
list.append(new ItemStyle(darkRed,white,false,false)); //datatype
list.append(new ItemStyle(blue,cyan,false,false)); //decimal/value
list.append(new ItemStyle(darkCyan,cyan,false,false)); //base n
list.append(new ItemStyle(darkMagenta,cyan,false,false));//float
list.append(new ItemStyle(magenta,magenta,false,false)); //char
list.append(new ItemStyle(red,red,false,false)); //string
list.append(new ItemStyle(darkGray,gray,false,true)); //comment
list.append(new ItemStyle(darkGreen,green,false,false)); //others
#warning fixme
/*
config = KateFactory::instance()->config();
config->setGroup("Default Item Styles");
for (z = 0; z < defaultStyles(); z++) {
i = list.at(z);
s = config->readEntry(defaultStyleName(z));
if (!s.isEmpty()) {
sscanf(s.latin1(),"%X,%X,%d,%d",&col,&selCol,&i->bold,&i->italic);
i->col.setRgb(col);
i->selCol.setRgb(selCol);
}
}
*/
}
void HlManager::setDefaults(ItemStyleList &list) {
KateConfig *config;
int z;
ItemStyle *i;
char s[64];
#warning fixme
/*
config = KateFactory::instance()->config();
config->setGroup("Default Item Styles");
for (z = 0; z < defaultStyles(); z++) {
i = list.at(z);
sprintf(s,"%X,%X,%d,%d",i->col.rgb(),i->selCol.rgb(),i->bold, i->italic);
config->writeEntry(defaultStyleName(z),s);
}
*/
emit changed();
}
int HlManager::highlights() {
return (int) hlList.count();
}
QString HlManager::hlName(int n) {
return hlList.at(n)->iName;
}
QString HlManager::hlSection(int n) {
return hlList.at(n)->iSection;
}
void HlManager::getHlDataList(HlDataList &list) {
int z;
for (z = 0; z < (int) hlList.count(); z++) {
list.append(hlList.at(z)->getData());
}
}
void HlManager::setHlDataList(HlDataList &list) {
int z;
for (z = 0; z < (int) hlList.count(); z++) {
hlList.at(z)->setData(list.at(z));
}
//notify documents about changes in highlight configuration
emit changed();
}
diff --git a/noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp b/noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp
index 6059e9b..9fa4452 100644
--- a/noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp
+++ b/noncore/apps/tinykate/libkate/document/katesyntaxdocument.cpp
@@ -1,306 +1,311 @@
/***************************************************************************
katesyntaxdocument.cpp - description
-------------------
begin : Sat 31 March 2001
copyright : (C) 2001,2002 by Joseph Wenninger
email : jowenn@kde.org
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#include "katesyntaxdocument.h"
-#include <kateconfig.h>
+#include "kateconfig.h"
+#include "kdebug.h"
+#include "kstddirs.h"
+#include "klocale.h"
+#include "kmessagebox.h"
+#include "kglobal.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
+#include <qpe/qpeapplication.h>
+
+/* QT */
#include <qfile.h>
-#include <kdebug.h>
-#include <kstddirs.h>
-#include <klocale.h>
-#include <kmessagebox.h>
#include <qstringlist.h>
-#include <kglobal.h>
-#include <qpe/qpeapplication.h>
#include <qdir.h>
SyntaxDocument::SyntaxDocument()
{
m_root=0;
currentFile="";
setupModeList();
}
void SyntaxDocument::setIdentifier(const QString& identifier)
{
#warning FIXME delete m_root;
m_root=Opie::Core::XMLElement::load(identifier);
if (!m_root) KMessageBox::error( 0L, i18n("Can't open %1").arg(identifier) );
}
SyntaxDocument::~SyntaxDocument()
{
}
void SyntaxDocument::setupModeList(bool force)
{
if (myModeList.count() > 0) return;
KateConfig *config=KGlobal::config();
KStandardDirs *dirs = KGlobal::dirs();
// QStringList list=dirs->findAllResources("data","kate/syntax/*.xml",false,true);
QString path=QPEApplication::qpeDir() +"share/tinykate/syntax/";
QDir dir(path);
QStringList list=dir.entryList("*.xml");
for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it )
{
QString Group="Highlighting_Cache"+path+*it;
if ((config->hasGroup(Group)) && (!force))
{
config->setGroup(Group);
syntaxModeListItem *mli=new syntaxModeListItem;
mli->name = config->readEntry("name","");
mli->section = config->readEntry("section","");
mli->mimetype = config->readEntry("mimetype","");
mli->extension = config->readEntry("extension","");
mli->identifier = path+*it;
myModeList.append(mli);
}
else
{
- qDebug("Found a description file:"+path+(*it));
+ odebug << "Found a description file:"+path+(*it) << oendl;
setIdentifier(path+(*it));
Opie::Core::XMLElement *e=m_root;
if (e)
{
e=e->firstChild();
- qDebug(e->tagName());
+ odebug << e->tagName() << oendl;
if (e->tagName()=="language")
{
syntaxModeListItem *mli=new syntaxModeListItem;
mli->name = e->attribute("name");
mli->section = e->attribute("section");
mli->mimetype = e->attribute("mimetype");
mli->extension = e->attribute("extensions");
- qDebug(QString("valid description for: %1/%2").arg(mli->section).arg(mli->name));
+ odebug << QString("valid description for: %1/%2").arg(mli->section).arg(mli->name) << oendl;
if (mli->section.isEmpty())
mli->section=i18n("Other");
mli->identifier = path+(*it);
config->setGroup(Group);
config->writeEntry("name",mli->name);
config->writeEntry("section",mli->section);
config->writeEntry("mimetype",mli->mimetype);
config->writeEntry("extension",mli->extension);
myModeList.append(mli);
}
}
}
}
config->write();
// config->sync();
}
SyntaxModeList SyntaxDocument::modeList()
{
return myModeList;
}
bool SyntaxDocument::nextGroup( syntaxContextData* data)
{
if(!data) return false;
if (!data->currentGroup)
data->currentGroup=data->parent->firstChild();
else
data->currentGroup=data->currentGroup->nextChild();
data->item=0;
if (!data->currentGroup)
return false;
else
return true;
}
bool SyntaxDocument::nextItem( syntaxContextData* data)
{
if(!data) return false;
if (!data->item)
data->item=data->currentGroup->firstChild();
else
data->item=data->item->nextChild();
if (!data->item)
return false;
else
return true;
}
QString SyntaxDocument::groupItemData( syntaxContextData* data,QString name)
{
if(!data)
return QString::null;
if ( (data->item) && (name.isEmpty()))
return data->item->tagName();
if (data->item)
return data->item->attribute(name);
else
return QString();
}
QString SyntaxDocument::groupData( syntaxContextData* data,QString name)
{
if(!data)
return QString::null;
if (data->currentGroup)
return data->currentGroup->attribute(name);
else
return QString();
}
void SyntaxDocument::freeGroupInfo( syntaxContextData* data)
{
if (data)
delete data;
}
syntaxContextData* SyntaxDocument::getSubItems(syntaxContextData* data)
{
syntaxContextData *retval=new syntaxContextData;
retval->parent=0;
retval->currentGroup=0;
retval->item=0;
if (data != 0)
{
retval->parent=data->currentGroup;
retval->currentGroup=data->item;
retval->item=0;
}
return retval;
}
syntaxContextData* SyntaxDocument::getConfig(const QString& mainGroupName, const QString &Config)
{
Opie::Core::XMLElement *e = m_root->firstChild()->firstChild();
while (e)
{
kdDebug(13010)<<"in SyntaxDocument::getGroupInfo (outer loop) " <<endl;
if (e->tagName().compare(mainGroupName)==0 )
{
Opie::Core::XMLElement *e1=e->firstChild();
while (e1)
{
kdDebug(13010)<<"in SyntaxDocument::getGroupInfo (inner loop) " <<endl;
if (e1->tagName()==Config)
{
syntaxContextData *data=new ( syntaxContextData);
data->currentGroup=0;
data->parent=0;
data->item=e1;
return data;
}
e1=e1->nextChild();
}
kdDebug(13010) << "WARNING :returning null 3"<< endl;
return 0;
}
e=e->nextChild();
}
kdDebug(13010) << "WARNING :returning null 4" << endl;
return 0;
}
syntaxContextData* SyntaxDocument::getGroupInfo(const QString& mainGroupName, const QString &group)
{
Opie::Core::XMLElement *e=m_root->firstChild()->firstChild();
while (e)
{
kdDebug(13010)<<"in SyntaxDocument::getGroupInfo (outer loop) " <<endl;
if (e->tagName().compare(mainGroupName)==0 )
{
Opie::Core::XMLElement *e1=e->firstChild();
while (e1)
{
kdDebug(13010)<<"in SyntaxDocument::getGroupInfo (inner loop) " <<endl;
if (e1->tagName()==group+"s")
{
syntaxContextData *data=new ( syntaxContextData);
data->parent=e1;
data->currentGroup=0;
data->item=0;
return data;
}
e1=e1->nextChild();
}
kdDebug(13010) << "WARNING : getGroupInfo returning null :1 " << endl;
return 0;
}
e=e->nextChild();
}
kdDebug(13010) << "WARNING : getGroupInfo returning null :2" << endl;
return 0;
}
QStringList& SyntaxDocument::finddata(const QString& mainGroup,const QString& type,bool clearList)
{
Opie::Core::XMLElement *e = m_root->firstChild();
if (clearList)
m_data.clear();
for(e=e->firstChild(); e; e=e->nextChild())
{
if (e->tagName()==mainGroup)
{
for (Opie::Core::XMLElement *e1=e->firstChild();e1;e1=e1->nextChild())
{
if (e1->tagName()!="list") continue;
if (e1->attribute("name")==type)
{
for (Opie::Core::XMLElement *e2=e1->firstChild();e2;e2=e2->nextChild())
{
- qDebug("FOUND A LIST ENTRY("+e2->tagName()+"):"+e2->firstChild()->value());
+ odebug << "FOUND A LIST ENTRY("+e2->tagName()+"):"+e2->firstChild()->value() << oendl;
m_data+=e2->firstChild()->value().stripWhiteSpace();
}
break;
}
}
break;
}
}
return m_data;
}
diff --git a/noncore/apps/tinykate/libkate/kateconfig.cpp b/noncore/apps/tinykate/libkate/kateconfig.cpp
index 96f91fb..782b629 100644
--- a/noncore/apps/tinykate/libkate/kateconfig.cpp
+++ b/noncore/apps/tinykate/libkate/kateconfig.cpp
@@ -1,632 +1,637 @@
/**********************************************************************
** Copyright (C) 2000 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
+#define QTOPIA_INTERNAL_LANGLIST
+#include "kateconfig.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
+#include <qpe/global.h>
+
+/* QT */
#include <qdir.h>
#include <qmessagebox.h>
#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
#include <qtextcodec.h>
#endif
#include <qtextstream.h>
+/* STD */
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
-#define QTOPIA_INTERNAL_LANGLIST
-#include "kateconfig.h"
-#include <qpe/global.h>
-
/*!
\internal
*/
QString KateConfig::configFilename(const QString& name, Domain d)
{
switch (d) {
case File:
return name;
case User: {
QDir dir = (QString(getenv("HOME")) + "/Settings");
if ( !dir.exists() )
mkdir(dir.path().local8Bit(),0700);
return dir.path() + "/" + name + ".conf";
}
}
return name;
}
/*!
\class KateConfig config.h
\brief The KateConfig class provides for saving application cofniguration state.
You should keep a KateConfig in existence only while you do not want others
to be able to change the state. There is no locking currently, but there
may be in the future.
*/
/*!
\enum KateConfig::KateConfigGroup
\internal
*/
/*!
\enum KateConfig::Domain
\value File
\value User
See KateConfig for details.
*/
/*!
Constructs a config that will load or create a configuration with the
given \a name in the given \a domain.
You must call setGroup() before doing much else with the KateConfig.
In the default Domain, \e User,
the configuration is user-specific. \a name should not contain "/" in
this case, and in general should be the name of the C++ class that is
primarily responsible for maintaining the configuration.
In the File Domain, \a name is an absolute filename.
*/
KateConfig::KateConfig( const QString &name, Domain domain )
: filename( configFilename(name,domain) )
{
- qWarning("KateConfig constructor\n");
+ owarn << "KateConfig constructor\n" << oendl;
git = groups.end();
read();
QStringList l = Global::languageList();
lang = l[0];
glang = l[1];
}
// Sharp ROM compatibility
KateConfig::KateConfig ( const QString &name, bool what )
: filename( configFilename(name,what ? User : File) )
{
git = groups.end();
read();
QStringList l = Global::languageList();
lang = l[0];
glang = l[1];
}
/*!
Writes any changes to disk and destroys the in-memory object.
*/
KateConfig::~KateConfig()
{
- qWarning("KateConfig destructor\n");
+ owarn << "KateConfig destructor\n" << oendl;
if ( changed )
write();
}
/*!
Returns whether the current group has an entry called \a key.
*/
bool KateConfig::hasKey( const QString &key ) const
{
if ( groups.end() == git )
return FALSE;
KateConfigGroup::ConstIterator it = ( *git ).find( key );
return it != ( *git ).end();
}
/*!
Sets the current group for subsequent reading and writing of
entries to \a gname. Grouping allows the application to partition the namespace.
This function must be called prior to any reading or writing
of entries.
The \a gname must not be empty.
*/
void KateConfig::setGroup( const QString &gname )
{
QMap< QString, KateConfigGroup>::Iterator it = groups.find( gname );
if ( it == groups.end() ) {
git = groups.insert( gname, KateConfigGroup() );
changed = TRUE;
return;
}
git = it;
}
/*!
Writes a (\a key, \a value) entry to the current group.
\sa readEntry()
*/
void KateConfig::writeEntry( const QString &key, const char* value )
{
writeEntry(key,QString(value));
}
/*!
Writes a (\a key, \a value) entry to the current group.
\sa readEntry()
*/
void KateConfig::writeEntry( const QString &key, const QString &value )
{
if ( git == groups.end() ) {
- qWarning( "no group set" );
+ owarn << "no group set" << oendl;
return;
}
if ( (*git)[key] != value ) {
( *git ).insert( key, value );
changed = TRUE;
}
}
/*
Note that the degree of protection offered by the encryption here is
only sufficient to avoid the most casual observation of the configuration
files. People with access to the files can write down the contents and
decrypt it using this source code.
Conceivably, and at some burden to the user, this encryption could
be improved.
*/
static QString encipher(const QString& plain)
{
// mainly, we make it long
QString cipher;
int mix=28730492;
for (int i=0; i<(int)plain.length(); i++) {
int u = plain[i].unicode();
int c = u ^ mix;
QString x = QString::number(c,36);
cipher.append(QChar('a'+x.length()));
cipher.append(x);
mix *= u;
}
return cipher;
}
static QString decipher(const QString& cipher)
{
QString plain;
int mix=28730492;
for (int i=0; i<(int)cipher.length();) {
int l = cipher[i].unicode()-'a';
QString x = cipher.mid(i+1,l); i+=l+1;
int u = x.toInt(0,36) ^ mix;
plain.append(QChar(u));
mix *= u;
}
return plain;
}
/*!
Writes an encrypted (\a key, \a value) entry to the current group.
Note that the degree of protection offered by the encryption is
only sufficient to avoid the most casual observation of the configuration
files.
\sa readEntry()
*/
void KateConfig::writeEntryCrypt( const QString &key, const QString &value )
{
if ( git == groups.end() ) {
- qWarning( "no group set" );
+ owarn << "no group set" << oendl;
return;
}
QString evalue = encipher(value);
if ( (*git)[key] != evalue ) {
( *git ).insert( key, evalue );
changed = TRUE;
}
}
/*!
Writes a (\a key, \a num) entry to the current group.
\sa readNumEntry()
*/
void KateConfig::writeEntry( const QString &key, int num )
{
QString s;
s.setNum( num );
writeEntry( key, s );
}
void KateConfig::writeEntry( const QString &key, unsigned int num )
{
QString s;
s.setNum( num );
writeEntry( key, s );
}
#ifdef Q_HAS_BOOL_TYPE
/*!
Writes a (\a key, \a b) entry to the current group. This is equivalent
to writing a 0 or 1 as an integer entry.
\sa readBoolEntry()
*/
void KateConfig::writeEntry( const QString &key, bool b )
{
QString s;
s.setNum( ( int )b );
writeEntry( key, s );
}
#endif
/*!
Writes a (\a key, \a lst) entry to the current group. The list
is separated by \a sep, so the strings must not contain that character.
\sa readListEntry()
*/
void KateConfig::writeEntry( const QString &key, const QStringList &lst, const QChar &sep )
{
QString s;
QStringList::ConstIterator it = lst.begin();
for ( ; it != lst.end(); ++it )
s += *it + sep;
writeEntry( key, s );
}
void KateConfig::writeEntry( const QString &key, const QColor &val )
{
QStringList l;
l.append( QString().setNum(val.red()) );
l.append( QString().setNum(val.green()) );
l.append( QString().setNum(val.blue()) );
writeEntry( key, l, QChar(',') );
}
void KateConfig::writeEntry( const QString &key, const QFont &val )
{
QStringList l;
l.append( val.family() );
l.append( QString().setNum(val.pointSize()) );
l.append( QString().setNum(val.weight()) );
l.append( QString().setNum((int)val.italic()) );
l.append( QString().setNum((int)val.charSet()) );
writeEntry( key, l, QChar(',') );
}
/*!
Removes the \a key entry from the current group. Does nothing if
there is no such entry.
*/
void KateConfig::removeEntry( const QString &key )
{
if ( git == groups.end() ) {
- qWarning( "no group set" );
+ owarn << "no group set" << oendl;
return;
}
( *git ).remove( key );
changed = TRUE;
}
/*!
\fn bool KateConfig::operator == ( const KateConfig & other ) const
Tests for equality with \a other. KateConfig objects are equal if they refer to the same filename.
*/
/*!
\fn bool KateConfig::operator != ( const KateConfig & other ) const
Tests for inequality with \a other. KateConfig objects are equal if they refer to the same filename.
*/
/*!
\fn QString KateConfig::readEntry( const QString &key, const QString &deflt ) const
Reads a string entry stored with \a key, defaulting to \a deflt if there is no entry.
*/
/*!
\internal
For compatibility, non-const version.
*/
QString KateConfig::readEntry( const QString &key, const QString &deflt )
{
QString res = readEntryDirect( key+"["+lang+"]" );
if ( !res.isNull() )
return res;
if ( !glang.isEmpty() ) {
res = readEntryDirect( key+"["+glang+"]" );
if ( !res.isNull() )
return res;
}
return readEntryDirect( key, deflt );
}
/*!
\fn QString KateConfig::readEntryCrypt( const QString &key, const QString &deflt ) const
Reads an encrypted string entry stored with \a key, defaulting to \a deflt if there is no entry.
*/
/*!
\internal
For compatibility, non-const version.
*/
QString KateConfig::readEntryCrypt( const QString &key, const QString &deflt )
{
QString res = readEntryDirect( key+"["+lang+"]" );
if ( res.isNull() && glang.isEmpty() )
res = readEntryDirect( key+"["+glang+"]" );
if ( res.isNull() )
res = readEntryDirect( key, QString::null );
if ( res.isNull() )
return deflt;
return decipher(res);
}
/*!
\fn QString KateConfig::readEntryDirect( const QString &key, const QString &deflt ) const
\internal
*/
/*!
\internal
For compatibility, non-const version.
*/
QString KateConfig::readEntryDirect( const QString &key, const QString &deflt )
{
if ( git == groups.end() ) {
- //qWarning( "no group set" );
+ //owarn << "no group set" << oendl;
return deflt;
}
KateConfigGroup::ConstIterator it = ( *git ).find( key );
if ( it != ( *git ).end() )
return *it;
else
return deflt;
}
/*!
\fn int KateConfig::readNumEntry( const QString &key, int deflt ) const
Reads a numeric entry stored with \a key, defaulting to \a deflt if there is no entry.
*/
/*!
\internal
For compatibility, non-const version.
*/
int KateConfig::readNumEntry( const QString &key, int deflt )
{
QString s = readEntry( key );
if ( s.isEmpty() )
return deflt;
else
return s.toInt();
}
/*!
\fn bool KateConfig::readBoolEntry( const QString &key, bool deflt ) const
Reads a bool entry stored with \a key, defaulting to \a deflt if there is no entry.
*/
/*!
\internal
For compatibility, non-const version.
*/
bool KateConfig::readBoolEntry( const QString &key, bool deflt )
{
QString s = readEntry( key );
if ( s.isEmpty() )
return deflt;
else
return (bool)s.toInt();
}
/*!
\fn QStringList KateConfig::readListEntry( const QString &key, const QChar &sep ) const
Reads a string list entry stored with \a key, and with \a sep as the separator.
*/
/*!
\internal
For compatibility, non-const version.
*/
QStringList KateConfig::readListEntry( const QString &key, const QChar &sep )
{
QString s = readEntry( key );
if ( s.isEmpty() )
return QStringList();
else
return QStringList::split( sep, s );
}
QColor KateConfig::readColorEntry( const QString &key, const QColor &def ) const
{
QStringList list = readListEntry(key, QChar(','));
if( list.count() != 3 )
return def;
return QColor(list[0].toInt(), list[1].toInt(), list[2].toInt());
}
QFont KateConfig::readFontEntry( const QString &key, const QFont &def ) const
{
QStringList list = readListEntry(key, QChar(','));
if( list.count() != 5 )
return def;
return QFont(list[0], list[1].toInt(), list[2].toInt(), (bool)list[3].toInt(), (QFont::CharSet)list[4].toInt());
}
QValueList<int> KateConfig::readIntListEntry( const QString &key ) const
{
QString s = readEntry( key );
QValueList<int> il;
if ( s.isEmpty() )
return il;
QStringList l = QStringList::split( QChar(','), s );
QStringList::Iterator l_it;
for( l_it = l.begin(); l_it != l.end(); ++l_it )
il.append( (*l_it).toInt() );
return il;
}
/*!
Removes all entries from the current group.
*/
void KateConfig::clearGroup()
{
if ( git == groups.end() ) {
- qWarning( "no group set" );
+ owarn << "no group set" << oendl;
return;
}
if ( !(*git).isEmpty() ) {
( *git ).clear();
changed = TRUE;
}
}
/*!
\internal
*/
void KateConfig::write( const QString &fn )
{
QString strNewFile;
if ( !fn.isEmpty() )
filename = fn;
strNewFile = filename + ".new";
QFile f( strNewFile );
if ( !f.open( IO_WriteOnly|IO_Raw ) ) {
- qWarning( "could not open for writing `%s'", strNewFile.latin1() );
+ owarn << "could not open for writing `" << strNewFile << "'" << oendl;
git = groups.end();
return;
}
QString str;
QCString cstr;
QMap< QString, KateConfigGroup >::Iterator g_it = groups.begin();
for ( ; g_it != groups.end(); ++g_it ) {
str += "[" + g_it.key() + "]\n";
KateConfigGroup::Iterator e_it = ( *g_it ).begin();
for ( ; e_it != ( *g_it ).end(); ++e_it )
str += e_it.key() + " = " + *e_it + "\n";
}
cstr = str.utf8();
int total_length;
total_length = f.writeBlock( cstr.data(), cstr.length() );
if ( total_length != int(cstr.length()) ) {
QMessageBox::critical( 0, QObject::tr("Out of Space"),
QObject::tr("There was a problem creating\nKateConfiguration Information \nfor this program.\n\nPlease free up some space and\ntry again.") );
f.close();
QFile::remove( strNewFile );
return;
}
f.close();
// now rename the file...
if ( rename( strNewFile, filename ) < 0 ) {
qWarning( "problem renaming the file %s to %s", strNewFile.latin1(),
filename.latin1() );
QFile::remove( strNewFile );
}
}
/*!
Returns whether the KateConfig is in a valid state.
*/
bool KateConfig::isValid() const
{
return groups.end() != git;
}
/*!
\internal
*/
void KateConfig::read()
{
changed = FALSE;
if ( !QFileInfo( filename ).exists() ) {
git = groups.end();
return;
}
QFile f( filename );
if ( !f.open( IO_ReadOnly ) ) {
git = groups.end();
return;
}
QTextStream s( &f );
#if QT_VERSION <= 230 && defined(QT_NO_CODECS)
// The below should work, but doesn't in Qt 2.3.0
s.setCodec( QTextCodec::codecForMib( 106 ) );
#else
s.setEncoding( QTextStream::UnicodeUTF8 );
#endif
QStringList list = QStringList::split('\n', s.read() );
f.close();
for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
if ( !parse( *it ) ) {
git = groups.end();
return;
}
}
}
/*!
\internal
*/
bool KateConfig::parse( const QString &l )
{
QString line = l.stripWhiteSpace();
if ( line [0] == QChar ( '#' ))
return true; // ignore comments
if ( line[ 0 ] == QChar( '[' ) ) {
QString gname = line;
gname = gname.remove( 0, 1 );
if ( gname[ (int)gname.length() - 1 ] == QChar( ']' ) )
gname = gname.remove( gname.length() - 1, 1 );
git = groups.insert( gname, KateConfigGroup() );
} else if ( !line.isEmpty() ) {
if ( git == groups.end() )
return FALSE;
int eq = line.find( '=' );
if ( eq == -1 )
return FALSE;
QString key = line.left(eq).stripWhiteSpace();
QString value = line.mid(eq+1).stripWhiteSpace();
( *git ).insert( key, value );
}
return TRUE;
}
diff --git a/noncore/apps/tinykate/tinykate.cpp b/noncore/apps/tinykate/tinykate.cpp
index 3c9a637..9865c35 100644
--- a/noncore/apps/tinykate/tinykate.cpp
+++ b/noncore/apps/tinykate/tinykate.cpp
@@ -1,279 +1,284 @@
/***************************************************************************
tinykate.cpp
Tiny KATE mainwindow
-------------------
begin : November 2002
copyright : (C) 2002 by Joseph Wenninger <jowenn@kde.org>
***************************************************************************/
/***************************************************************************
* *
* This program is free softwaSre; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation. *
* ONLY VERSION 2 OF THE LICENSE IS APPLICABLE *
* *
***************************************************************************/
-#include <qaction.h>
-#include <qtoolbutton.h>
-#include <qmenubar.h>
-#include <qpe/resource.h>
-#include <qpe/qpeapplication.h>
+#include "tinykate.h"
+
+#include "katedocument.h"
+#include "kglobal.h"
+
+/* OPIE */
+#include <opie2/odebug.h>
#include <opie2/ofiledialog.h>
+#include <qpe/resource.h>
+#include <qpe/qpeapplication.h>
-#include "tinykate.h"
+/* QT */
+#include <qaction.h>
+#include <qtoolbutton.h>
+#include <qmenubar.h>
-#include <katedocument.h>
-#include <kglobal.h>
using namespace Opie::Ui;
TinyKate::TinyKate( QWidget *parent, const char *name, WFlags f) :
QMainWindow( parent, name, f )
{
shutDown=false;
nextUnnamed=0;
currentView=0;
viewCount=0;
setCaption(tr("TinyKATE"));
KGlobal::setAppName("TinyKATE");
QMenuBar *mb = new QMenuBar( this );
mb->setMargin( 0 );
tabwidget=new OTabWidget(this);
setCentralWidget(tabwidget);
connect(tabwidget,SIGNAL(currentChanged(QWidget*)),this,SLOT(slotCurrentChanged(QWidget*)));
//FILE ACTIONS
QPopupMenu *popup = new QPopupMenu( this );
// Action for creating a new document
QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 );
a->addTo( popup );
connect(a, SIGNAL(activated()), this, SLOT(slotNew()));
// Action for opening an exisiting document
a = new QAction( tr( "Open" ),Resource::loadPixmap( "fileopen" ) , QString::null, 0, this, 0 );
a->addTo(popup);
connect(a, SIGNAL(activated()), this, SLOT(slotOpen()));
// Action for saving document
a = new QAction( tr( "Save" ), Resource::loadPixmap( "save" ) , QString::null, 0, this, 0 );
a->addTo(popup);
connect(a, SIGNAL(activated()), this, SLOT(slotSave()));
// Action for saving document to a new name
a = new QAction( tr( "Save As" ),Resource::loadPixmap( "save" ) , QString::null, 0, this, 0 );
a->addTo(popup);
connect(a, SIGNAL(activated()), this, SLOT(slotSaveAs()));
// Action for closing the currently active document
a = new QAction( tr( "Close" ), Resource::loadPixmap( "quit_icon" ) , QString::null, 0, this, 0 );
a->addTo(popup);
connect(a, SIGNAL(activated()), this, SLOT(slotClose()));
mb->insertItem(tr("File"),popup);
//EDIT ACTIONS
// Action for cutting text
editCut = new QToolButton( 0 );
editCut->setAutoRaise( true );
editCut->setIconSet( Resource::loadPixmap( "cut" ) );
// Action for Copying text
editCopy = new QToolButton( 0 );
editCopy->setAutoRaise( true );
editCopy->setIconSet( Resource::loadPixmap( "copy" ) );
// Action for pasting text
editPaste = new QToolButton( 0 );
editPaste->setAutoRaise( true );
editPaste->setIconSet( Resource::loadPixmap( "paste" ) );
// Action for finding / replacing text
editFindReplace = new QToolButton( 0 );
editFindReplace->setAutoRaise( true );
editFindReplace->setIconSet( Resource::loadPixmap("find") );
// Action for undo
editUndo = new QToolButton( 0 );
editUndo->setAutoRaise( true );
editUndo->setIconSet( Resource::loadPixmap( "undo" ) );
// Action for redo
editRedo = new QToolButton( 0 );
editRedo->setAutoRaise( true );
editRedo->setIconSet( Resource::loadPixmap( "redo" ) );
//VIEW ACITONS
popup = new QPopupMenu( this );
viewIncFontSizes = new QAction( tr( "Font +" ), QString::null, 0, this, 0 );
viewIncFontSizes->addTo( popup );
viewDecFontSizes = new QAction( tr( "Font -" ), QString::null, 0, this, 0 );
viewDecFontSizes->addTo( popup );
mb->insertItem(tr("View"),popup);
popup = new QPopupMenu( this );
mb->insertItem(tr("Utils"),popup);
mb->insertItem( editCut );
mb->insertItem( editCopy );
mb->insertItem( editPaste );
mb->insertItem( editFindReplace );
mb->insertItem( editUndo );
mb->insertItem( editRedo );
//Highlight management
hlmenu=new QPopupMenu(this);
HlManager *hlm=HlManager::self();
for (int i=0;i<hlm->highlights();i++)
{
hlmenu->insertItem(hlm->hlName(i),i);
}
popup->insertItem(tr("Highlighting"),hlmenu);
utilSettings = new QAction( tr( "Settings" ), QString::null, 0, this, 0 );
utilSettings->addTo( popup);
if( qApp->argc() > 1) open(qApp->argv()[1]);
else slotNew();
}
TinyKate::~TinyKate( )
{
- qWarning("TinyKate destructor\n");
+ owarn << "TinyKate destructor\n" << oendl;
shutDown=true;
while (currentView!=0) {
slotClose();
}
if( KGlobal::config() != 0 ) {
- qWarning("deleting KateConfig object..\n");
+ owarn << "deleting KateConfig object..\n" << oendl;
delete KGlobal::config();
}
}
void TinyKate::slotOpen( )
{
QString filename = OFileDialog::getOpenFileName( OFileSelector::EXTENDED_ALL,
QString::null);
if (!filename.isEmpty()) {
open(filename);
}
}
void TinyKate::open(const QString & filename)
{
KateDocument *kd= new KateDocument(false, false, this,0,this);
KTextEditor::View *kv;
QFileInfo fi(filename);
QString filenamed = fi.fileName();
tabwidget->addTab(kv=kd->createView(tabwidget,"bLAH"),"tinykate/tinykate", filenamed );
- qDebug(filename);
+ odebug << filename << oendl;
kd->setDocName( filenamed);
kd->open( filename );
viewCount++;
}
void TinyKate::setDocument(const QString& fileref)
{
open( fileref );
}
void TinyKate::slotCurrentChanged( QWidget * view)
{
if (currentView) {
disconnect(editCopy,SIGNAL(activated()),currentView,SLOT(copy()));
disconnect(editCut,SIGNAL(activated()),currentView,SLOT(cut()));
disconnect(editPaste,SIGNAL(activated()),currentView,SLOT(paste()));
disconnect(editUndo,SIGNAL(activated()),currentView,SLOT(undo()));
disconnect(editRedo,SIGNAL(activated()),currentView,SLOT(redo()));
disconnect(viewIncFontSizes,SIGNAL(activated()), currentView,SLOT(slotIncFontSizes()));
disconnect(viewDecFontSizes,SIGNAL(activated()), currentView,SLOT(slotDecFontSizes()));
disconnect(hlmenu,SIGNAL(activated(int)), currentView,SLOT(setHl(int)));
disconnect(utilSettings,SIGNAL(activated()), currentView,SLOT(configDialog()));
}
currentView=(KTextEditor::View*)view;
connect(editCopy,SIGNAL(clicked()),currentView,SLOT(copy()));
connect(editCut,SIGNAL(clicked()),currentView,SLOT(cut()));
connect(editPaste,SIGNAL(clicked()),currentView,SLOT(paste()));
connect(editUndo,SIGNAL(clicked()),currentView,SLOT(undo()));
connect(editRedo,SIGNAL(clicked()),currentView,SLOT(redo()));
connect(viewIncFontSizes,SIGNAL(activated()), currentView,SLOT(slotIncFontSizes()));
connect(viewDecFontSizes,SIGNAL(activated()), currentView,SLOT(slotDecFontSizes()));
connect(hlmenu,SIGNAL(activated(int)), currentView,SLOT(setHl(int)));
connect(utilSettings,SIGNAL(activated()), currentView,SLOT(configDialog()));
}
void TinyKate::slotNew( )
{
KateDocument *kd= new KateDocument(false, false, this,0,this);
KTextEditor::View *kv;
tabwidget->addTab(kv=kd->createView(tabwidget,"BLAH"),
"tinykate/tinykate",
tr("Unnamed %1").arg(nextUnnamed++));
viewCount++;
}
void TinyKate::slotClose( )
{
if (currentView==0) return;
KTextEditor::View *dv=currentView;
currentView=0;
tabwidget->removePage(dv);
delete dv->document();
viewCount--;
if ((!viewCount) && (!shutDown)) slotNew();
}
void TinyKate::slotSave() {
// feel free to make this how you want
if (currentView==0) return;
// KateView *kv = (KateView*) currentView;
KateDocument *kd = (KateDocument*) currentView->document();
- // qDebug("saving file "+kd->docName());
+ // odebug << "saving file "+kd->docName() << oendl;
if( kd->docName().isEmpty())
slotSaveAs();
else
kd->saveFile();
// kv->save();
// kd->saveFile();
}
void TinyKate::slotSaveAs() {
if (currentView==0) return;
KateDocument *kd = (KateDocument*) currentView->document();
QString filename= OFileDialog::getSaveFileName(OFileSelector::EXTENDED_ALL,
QString::null);
if (!filename.isEmpty()) {
- qDebug("saving file "+filename);
+ odebug << "saving file "+filename << oendl;
QFileInfo fi(filename);
QString filenamed = fi.fileName();
kd->setDocFile( filename);
kd->setDocName( filenamed);
kd->saveFile();
// KTextEditor::View *dv = currentView;
// tabwidget->changeTab( dv, filenamed);
// need to change tab label here
}
}