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,2950 +1,2951 @@ /*************************************************************************** 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 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 } } |