23 files changed, 5180 insertions, 5186 deletions
diff --git a/noncore/apps/advancedfm/advancedfmMenu.cpp b/noncore/apps/advancedfm/advancedfmMenu.cpp index 26bc36d..78f9da2 100644 --- a/noncore/apps/advancedfm/advancedfmMenu.cpp +++ b/noncore/apps/advancedfm/advancedfmMenu.cpp @@ -1,854 +1,850 @@ -/*************************************************************************** - AdvancedFm.cpp - ------------------- - ** Created: Sat Mar 9 23:33:09 2002 - copyright : (C) 2002 by ljp - 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 "advancedfm.h" -#include "output.h" -#include "filePermissions.h" - -#include <opie/otabwidget.h> -#include <opie/oprocess.h> - -#include <qpe/lnkproperties.h> -#include <qpe/qpeapplication.h> -#include <qpe/resource.h> -#include <qpe/qcopenvelope_qws.h> -#include <qpe/applnk.h> -#include <qpe/ir.h> - -#include <qmessagebox.h> -#include <qmultilineedit.h> - -#include <qstring.h> - -#include <qlayout.h> -#include <qpixmap.h> -#include <qcombobox.h> -#include <qpopupmenu.h> -#include <qtabwidget.h> -#include <qtoolbutton.h> -#include <qlineedit.h> -#include <qlistview.h> - -#include <errno.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/stat.h> -#include <dirent.h> -#include <sys/sendfile.h> -#include <fcntl.h> - - -void AdvancedFm::doDirChange() { - QString pathItem = CurrentView()->currentItem()->text(0); - if( pathItem == "../") { - ListClicked( CurrentView()->currentItem()); - } else { - if( pathItem.find(" -> ",0,TRUE) != -1) - pathItem = dealWithSymName((const QString&)pathItem)+"/"; -// qWarning(pathItem); - gotoDirectory( CurrentDir()->path()+"/"+pathItem.left( pathItem.length() - 1) ); - } -} - -void AdvancedFm::showMenuHidden() { - if (b) { - CurrentDir()->setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All); - OtherDir()->setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All); - fileMenu->setItemChecked( fileMenu->idAt(0),TRUE); - } else { - CurrentDir()->setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All); - OtherDir()->setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All); - fileMenu->setItemChecked( fileMenu->idAt(0),FALSE); - } - b = !b; - populateView(); -} - -void AdvancedFm::showHidden() { - if (b) { - CurrentDir()->setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All); - OtherDir()->setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All); - } else { - CurrentDir()->setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All); - OtherDir()->setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All); - } - populateView(); -} - -QString AdvancedFm::dealWithSymName(const QString &fileName) { - QString strItem = fileName; - return strItem.right( (strItem.length() - strItem.find("->",0,TRUE)) - 4); -} - -void AdvancedFm::runThis() { - if( !CurrentView()->currentItem()) return; - QString fs; - QDir *thisDir = CurrentDir(); - - QString curFile = CurrentView()->currentItem()->text(0); - QString path = thisDir->canonicalPath(); - - if( curFile.find("@",0,TRUE) !=-1 || curFile.find("->",0,TRUE) !=-1 ) //if symlink - - curFile = dealWithSymName((const QString&)curFile); - - if(curFile != "../") { - - fs = getFileSystemType((const QString &) path); - QFileInfo fileInfo( path + "/" + curFile); -// qDebug( fileInfo.owner()); - - if( (fileInfo.permission( QFileInfo::ExeUser) - | fileInfo.permission( QFileInfo::ExeGroup) - | fileInfo.permission( QFileInfo::ExeOther)) // & fs.find("vfat",0,TRUE) == -1) { - | fs == "vfat" && fileInfo.filePath().contains("/bin") ) { - QCopEnvelope e("QPE/System", "execute(QString)" ); - e << curFile; - } else { - curFile = path + "/" + curFile; - DocLnk nf(curFile); - QString execStr = nf.exec(); -// qDebug( execStr); - if( execStr.isEmpty() ) { - } else { - nf.execute(); - } - } - } -} - -void AdvancedFm::runText() { - if( !CurrentView()->currentItem()) return; - QString curFile = CurrentView()->currentItem()->text(0); - if(curFile != "../") { - if( curFile.find("@",0,TRUE) !=-1 || curFile.find("->",0,TRUE) !=-1 ) //if symlink - curFile = dealWithSymName((const QString&)curFile); - curFile = CurrentDir()->canonicalPath()+"/"+curFile; - QCopEnvelope e("QPE/Application/textedit", "setDocument(QString)" ); - e << curFile; - } -} - -void AdvancedFm::makeDir() { - InputDialog *fileDlg; - fileDlg = new InputDialog(this,tr("Make Directory"),TRUE, 0); - fileDlg->exec(); - if( fileDlg->result() == 1 ) { - QDir *thisDir = CurrentDir(); - QString filename = fileDlg->LineEdit1->text(); - thisDir->mkdir( thisDir->canonicalPath()+"/"+filename); - } - populateView(); -} - -void AdvancedFm::doDelete() { - QStringList curFileList = getPath(); - bool doMsg=true; - int count = curFileList.count(); - if( count > 0) { - if(count > 1 ) { - QString msg; - msg=tr("Really delete\n%1 files?").arg(count); - switch ( QMessageBox::warning(this,tr("Delete"),msg - ,tr("Yes"),tr("No"),0,0,1) ) - { - case 0: - doMsg=false; - break; - case 1: - return; - break; - }; - } - - QString myFile; - - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { - myFile = (*it); - if( myFile.find(" -> ",0,TRUE) != -1) - myFile = myFile.left( myFile.find(" -> ",0,TRUE)); - - QString f = CurrentDir()->canonicalPath(); - if(f.right(1).find("/",0,TRUE) == -1) - f += "/"; - f += myFile; - if(QDir(f).exists() && !QFileInfo(f).isSymLink() ) { - //if file is a directory - - switch ( QMessageBox::warning( this, tr("Delete Directory?"), - tr("Really delete %1\nand all it's contents ?" ).arg( f ) , - tr("Yes"), tr("No"), 0, 0, 1) ) { - case 0: - { - f=f.left(f.length()-1); - QString cmd="rm -rf "+f; - startProcess( (const QString)cmd.latin1() ); - populateView(); - } - break; - case 1: - // exit - break; - }; - - } else { - if(doMsg) { - switch ( QMessageBox::warning(this,tr("Delete"), - tr("Really delete\n%1?").arg( myFile ), - tr("Yes"), tr("No"), 0, 0, 1) ) { - case 1: - return; - break; - }; - } - - QString cmd="rm "+f; - QFile file(f); - QFileInfo fi(myFile); - if( fi.fileName().find("../",0,TRUE)==-1) { -// qDebug("remove link files "+myFile); - -// DocLnk lnk(f); - DocLnk *lnk; - lnk = new DocLnk(f); -// qDebug("Deleting doclnk " + lnk->linkFile()); - if(lnk->isValid()) - lnk->removeLinkFile(); - // delete lnk; - file.remove(); - } - } - } - } - populateView(); -} - -void AdvancedFm::filePerms() { - QStringList curFileList = getPath(); - QString filePath; - - filePath = CurrentDir()->canonicalPath()+"/"; - - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { - filePermissions *filePerm; - filePerm = new filePermissions(this, "Permissions",true,0,(const QString &)(filePath+*it)); - filePerm->showMaximized(); - filePerm->exec(); - if( filePerm) - delete filePerm; - } - populateView(); -} - -void AdvancedFm::doProperties() { -#if defined(QT_QWS_OPIE) - - QStringList curFileList = getPath(); - - QString filePath; - filePath = CurrentDir()->canonicalPath()+"/"; - -// qDebug("%d",curFileList.count()); - - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { -// qDebug((filePath+*it)); - DocLnk lnk( (filePath+*it)); - LnkProperties prop( &lnk ); - prop.showMaximized(); - prop.exec(); - } -#endif - -} - -void AdvancedFm::upDir() { - QDir *thisDir = CurrentDir(); - QString current = thisDir->canonicalPath(); - QDir dir(current); - dir.cdUp(); - current = dir.canonicalPath(); - chdir( current.latin1() ); - thisDir->cd( current, TRUE); - - populateView(); - update(); -} - -void AdvancedFm::copy() { - qApp->processEvents(); - QStringList curFileList = getPath(); - - QDir *thisDir = CurrentDir(); - QDir *thatDir = OtherDir(); - - bool doMsg=true; - int count=curFileList.count(); - if( count > 0) { - if(count > 1 ){ - QString msg; - msg=tr("Really copy\n%1 files?").arg(count); - switch ( QMessageBox::warning(this,tr("Copy"),msg - ,tr("Yes"),tr("No"),0,0,1) ) - { - case 0: - doMsg=false; - break; - case 1: - return; - break; - }; - } - - QString curFile, item, destFile; - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { - item=(*it); - if(item.find("->",0,TRUE)) //symlink - item = item.left(item.find("->",0,TRUE)); - - curFile = thisDir->canonicalPath()+"/"+ item; - destFile = thatDir->canonicalPath()+"/"+ item; - -// qDebug("Destination file is "+destFile); -// qDebug("CurrentFile file is " + curFile); - - QFile f(destFile); - if( f.exists()) { - if(doMsg) { - switch ( QMessageBox::warning(this,tr("File Exists!"), - tr("%1 exists. Ok to overwrite?").arg( item ), - tr("Yes"),tr("No"),0,0,1) ) { - case 1: - return; - break; - }; - } - f.remove(); - } - - if( !copyFile( curFile, destFile) ) { - QMessageBox::message("AdvancedFm", - tr( "Could not copy %1 to %2").arg( curFile ).arg( destFile ) ); - return; - } - } - setOtherTabCurrent(); - rePopulate(); - } -} - -void AdvancedFm::copyAs() { - qApp->processEvents(); - - QStringList curFileList = getPath(); - QString curFile, item; - InputDialog *fileDlg; - - QDir *thisDir = CurrentDir(); - QDir *thatDir = OtherDir(); - - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { - QString destFile; - item=(*it); - curFile = thisDir->canonicalPath()+"/"+(*it); - fileDlg = new InputDialog( this, tr("Copy "+curFile+" As"), TRUE, 0); - - fileDlg->setInputText((const QString &) destFile ); - fileDlg->exec(); - - if( fileDlg->result() == 1 ) { - QString filename = fileDlg->LineEdit1->text(); - destFile = thatDir->canonicalPath()+"/"+filename; - - QFile f( destFile); - if( f.exists()) { - switch (QMessageBox::warning(this,tr("File Exists!"), - item+tr("\nexists. Ok to overwrite?"), - tr("Yes"),tr("No"),0,0,1) ) { - case 0: - f.remove(); - break; - case 1: - return; - break; - }; - } - if( !copyFile( curFile, destFile) ) { - QMessageBox::message("AdvancedFm",tr("Could not copy\n") - +curFile +tr("to\n")+destFile); - return; - } - } - delete fileDlg; - - } - rePopulate(); - setOtherTabCurrent(); -} - -void AdvancedFm::copySameDir() { - qApp->processEvents(); - QStringList curFileList = getPath(); - QString curFile, item, destFile; - InputDialog *fileDlg; - - QDir *thisDir = CurrentDir(); - - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { - item=(*it); - curFile = thisDir->canonicalPath()+"/"+ item; - - fileDlg = new InputDialog(this,tr("Copy ")+curFile+tr(" As"),TRUE, 0); - fileDlg->setInputText((const QString &) destFile ); - fileDlg->exec(); - - if( fileDlg->result() == 1 ) { - - QString filename = fileDlg->LineEdit1->text(); - destFile = thisDir->canonicalPath()+"/"+filename; - - QFile f(destFile); - if( f.exists()) { - switch (QMessageBox::warning(this,tr("Delete"), - destFile+tr(" already exists.\nDo you really want to delete it?"), - tr("Yes"),tr("No"),0,0,1) ) { - case 0: - - f.remove(); - break; - case 1: - return; - break; - }; - } - if(!copyFile( curFile,destFile) ) { - QMessageBox::message("AdvancedFm",tr("Could not copy\n") - +curFile +tr("to\n")+destFile); - return; - } - -// qDebug("copy "+curFile+" as "+destFile); - } - delete fileDlg; - } - rePopulate(); -} - -void AdvancedFm::move() { - qApp->processEvents(); - - QStringList curFileList = getPath(); - if( curFileList.count() > 0) { - QString curFile, destFile, item; - - QDir *thisDir = CurrentDir(); - QDir *thatDir = OtherDir(); - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { - item=(*it); - QString destFile = thatDir->canonicalPath(); - - if(destFile.right(1).find("/",0,TRUE) == -1) - destFile+="/"; - destFile += item; -// qDebug("Destination file is "+destFile); - - curFile = thisDir->canonicalPath(); - if(curFile.right(1).find("/",0,TRUE) == -1) - curFile +="/"; - curFile+= item; -// qDebug("CurrentFile file is " + curFile); - - if(QFileInfo(curFile).isDir()) { - moveDirectory( curFile, destFile ); - rePopulate(); - return; - } - - QFile f( curFile); - if( f.exists()) { - if( !copyFile( curFile, destFile) ) { - QMessageBox::message(tr("Note"),tr("Could not move\n")+curFile); - return; - } else - QFile::remove(curFile); - } - } - - } - rePopulate(); - setOtherTabCurrent(); -} - -bool AdvancedFm::moveDirectory( const QString & src, const QString & dest ) { - int err = 0; - if( copyDirectory( src, dest ) ) { QString cmd = "rm -rf " + src; - err = system((const char*)cmd); - } else - err = -1; - - if(err!=0) { - QMessageBox::message(tr("Note"),tr("Could not move\n") + src); - return false; - } - return true; -} - -bool AdvancedFm::copyDirectory( const QString & src, const QString & dest ) { - - QString cmd = "/bin/cp -fpR " + src + " " + dest; - qWarning(cmd); - int err = system( (const char *) cmd ); - if ( err != 0 ) { - QMessageBox::message("AdvancedFm", - tr( "Could not copy \n%1 \nto \n%2").arg( src ).arg( dest ) ); - return false; - } - - return true; -} - - -bool AdvancedFm::copyFile( const QString & src, const QString & dest ) { - - - if(QFileInfo(src).isDir()) { - if( copyDirectory( src, dest )) { - setOtherTabCurrent(); - populateView(); - return true; - } - else - return false; - } - - - bool success = true; - struct stat status; - QFile srcFile(src); - QFile destFile(dest); - int err=0; - int read_fd=0; - int write_fd=0; - struct stat stat_buf; - off_t offset = 0; - if(!srcFile.open( IO_ReadOnly|IO_Raw)) { -// qWarning("open failed"); - return success = false; - } - read_fd = srcFile.handle(); - if(read_fd != -1) { - fstat (read_fd, &stat_buf); - if( !destFile.open( IO_WriteOnly|IO_Raw ) ) { -// qWarning("destfile open failed"); - return success = false; - } - write_fd = destFile.handle(); - if(write_fd != -1) { - err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size); - if( err == -1) { - QString msg; - switch(err) { - case EBADF : msg = "The input file was not opened for reading or the output file was not opened for writing. "; - case EINVAL: msg = "Descriptor is not valid or locked. "; - case ENOMEM: msg = "Insufficient memory to read from in_fd."; - case EIO: msg = "Unspecified error while reading from in_fd."; - }; - success = false; -// qWarning(msg); - } - } else { - success = false; - } - } else { - success = false; - } - srcFile.close(); - destFile.close(); - // Set file permissions - if( stat( (const char *) src, &status ) == 0 ) { - chmod( (const char *) dest, status.st_mode ); - } - - return success; -} - -void AdvancedFm::runCommand() { - if( !CurrentView()->currentItem()) return; - QDir *thisDir = CurrentDir(); - - QString curFile; - curFile = thisDir->canonicalPath() +"/"+ CurrentView()->currentItem()->text(0); - - InputDialog *fileDlg; - fileDlg = new InputDialog(this,tr("Run Command"),TRUE, 0); - fileDlg->setInputText(curFile); - fileDlg->exec(); - //QString command; - - if( fileDlg->result() == 1 ) { -// qDebug(fileDlg->LineEdit1->text()); - QStringList command; - - command << "/bin/sh"; - command << "-c"; - command << fileDlg->LineEdit1->text(); - Output *outDlg; - outDlg = new Output( command, this, tr("AdvancedFm Output"), true); - outDlg->showMaximized(); - outDlg->exec(); - qApp->processEvents(); - - } -} - -void AdvancedFm::runCommandStd() { - if( !CurrentView()->currentItem()) return; - QString curFile; - QDir *thisDir = CurrentDir(); - QListView *thisView = CurrentView(); - if( thisView->currentItem()) - curFile = thisDir->canonicalPath() +"/"+ thisView->currentItem()->text(0); - - InputDialog *fileDlg; - fileDlg = new InputDialog(this,tr("Run Command"),TRUE, 0); - fileDlg->setInputText(curFile); - fileDlg->exec(); - - if( fileDlg->result() == 1 ) { - qApp->processEvents(); - startProcess( (const QString)fileDlg->LineEdit1->text().latin1()); - } -} - -void AdvancedFm::fileStatus() { - if( !CurrentView()->currentItem()) return; - QString curFile; - curFile = CurrentView()->currentItem()->text(0); - - QStringList command; - command << "/bin/sh"; - command << "-c"; - command << "stat -l "+ curFile; - - Output *outDlg; - outDlg = new Output( command, this, tr("AdvancedFm Output"), true); - outDlg->showMaximized(); - outDlg->exec(); - qApp->processEvents(); -} - - -void AdvancedFm::mkDir() { - makeDir(); -} - -void AdvancedFm::rn() { - renameIt(); -} - -void AdvancedFm::del() { - doDelete(); -} - -void AdvancedFm::mkSym() { - QString cmd; - QStringList curFileList = getPath(); - if( curFileList.count() > 0) { - QDir *thisDir = CurrentDir(); - QDir * thatDir = OtherDir(); - - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { - - QString destName = thatDir->canonicalPath()+"/"+(*it); - if(destName.right(1) == "/") { - destName = destName.left( destName.length() -1); - } - - QString curFile = thisDir->canonicalPath()+"/"+(*it); - - if( curFile.right(1) == "/") { - curFile = curFile.left( curFile.length() -1); - } - - cmd = "ln -s "+curFile+" "+destName; -// qDebug(cmd); - startProcess( (const QString)cmd ); - } - rePopulate(); - setOtherTabCurrent(); - } -} - -void AdvancedFm::doBeam() { - Ir ir; - if(!ir.supported()) { - } else { - QStringList curFileList = getPath(); - if( curFileList.count() > 0) { - for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) { - QString curFile = (*it); - QString curFilePath = CurrentDir()->canonicalPath()+"/"+curFile; - if( curFilePath.right(1) == "/") { - curFilePath = curFilePath.left( curFilePath.length() -1); - } - Ir *file = new Ir(this, "IR"); - connect(file, SIGNAL(done(Ir*)), this, SLOT( fileBeamFinished( Ir * ))); - file->send( curFilePath, curFile ); - } - } - } -} - -void AdvancedFm::fileBeamFinished( Ir *) { - QMessageBox::message( tr("Advancedfm Beam out"), tr("Ir sent.") ,tr("Ok") ); -} - -void AdvancedFm::selectAll() { - QListView *thisView = CurrentView(); - thisView->selectAll(true); - thisView->setSelected( thisView->firstChild(),false); -} - -void AdvancedFm::startProcess(const QString & cmd) { - QStringList command; - OProcess *process; - process = new OProcess(); - connect(process, SIGNAL(processExited(OProcess *)), - this, SLOT( processEnded(OProcess *))); - - connect(process, SIGNAL( receivedStderr(OProcess *, char *, int)), - this, SLOT( oprocessStderr(OProcess *, char *, int))); - - command << "/bin/sh"; - command << "-c"; - command << cmd.latin1(); - *process << command; - if(!process->start(OProcess::NotifyOnExit, OProcess::All) ) - qDebug("could not start process"); -} - -void AdvancedFm::processEnded(OProcess *) { - rePopulate(); -} - -void AdvancedFm::oprocessStderr(OProcess*, char *buffer, int ) { -// qWarning("received stderrt %d bytes", buflen); - - QString lineStr = buffer; - QMessageBox::warning( this, tr("Error"), lineStr ,tr("Ok") ); -} - -bool AdvancedFm::eventFilter( QObject * o, QEvent * e ) { - if ( o->inherits( "QLineEdit" ) ) { - if ( e->type() == QEvent::KeyPress ) { - QKeyEvent *ke = (QKeyEvent*)e; - if ( ke->key() == Key_Return || - ke->key() == Key_Enter ) { - okRename(); - return true; - } - else if ( ke->key() == Key_Escape ) { - cancelRename(); - return true; - } - } - else if ( e->type() == QEvent::FocusOut ) { - cancelRename(); - return true; - } - } - if ( o->inherits( "QListView" ) ) { - if ( e->type() == QEvent::FocusIn ) { - if( o == Local_View) { //keep track of which view - whichTab=1; - } - else { - whichTab=2; - } - } - OtherView()->setSelected( OtherView()->currentItem(), FALSE );//make sure there's correct selection - } - - return QWidget::eventFilter( o, e ); -} - - -void AdvancedFm::cancelRename() { -// qDebug("cancel rename"); - QListView * view; - view = CurrentView(); - - bool resetFocus = view->viewport()->focusProxy() == renameBox; - delete renameBox; - renameBox = 0; - if ( resetFocus ) { - view->viewport()->setFocusProxy( view); - view->setFocus(); - } -} - -void AdvancedFm::doRename(QListView * view) { - if( !CurrentView()->currentItem()) return; - - QRect r = view->itemRect( view->currentItem( )); - r = QRect( view->viewportToContents( r.topLeft() ), r.size() ); - r.setX( view->contentsX() ); - - if ( r.width() > view->visibleWidth() ) - r.setWidth( view->visibleWidth() ); - - renameBox = new QLineEdit( view->viewport(), "qt_renamebox" ); - renameBox->setFrame(true); - - renameBox->setText( view->currentItem()->text(0) ); - - renameBox->selectAll(); - renameBox->installEventFilter( this ); - - view->addChild( renameBox, r.x(), r.y() ); - - renameBox->resize( r.size() ); - - view->viewport()->setFocusProxy( renameBox ); - - renameBox->setFocus(); - renameBox->show(); -} - - -void AdvancedFm::renameIt() { - if( !CurrentView()->currentItem()) return; - - QListView *thisView = CurrentView(); - oldName = thisView->currentItem()->text(0); - doRename( thisView ); -} - -void AdvancedFm::okRename() { - if( !CurrentView()->currentItem()) return; - - QString newName = renameBox->text(); - cancelRename(); - QListView * view = CurrentView(); - QString path = CurrentDir()->canonicalPath() + "/"; - oldName = path + oldName; - newName = path + newName; - if( rename( oldName.latin1(), newName.latin1())== -1) - QMessageBox::message(tr("Note"),tr("Could not rename")); - else - oldName = ""; - view->takeItem( view->currentItem() ); - delete view->currentItem(); - rePopulate(); -} - -void AdvancedFm::openSearch() { - QMessageBox::message(tr("Note"),tr("Not Yet Implemented")); -} +/***************************************************************************
+ AdvancedFm.cpp
+ -------------------
+ ** Created: Sat Mar 9 23:33:09 2002
+ copyright : (C) 2002 by ljp
+ 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 "advancedfm.h"
+#include "output.h"
+#include "filePermissions.h"
+
+#include <opie/otabwidget.h>
+#include <opie/oprocess.h>
+
+#include <qpe/lnkproperties.h>
+#include <qpe/qpeapplication.h>
+#include <qpe/resource.h>
+#include <qpe/qcopenvelope_qws.h>
+#include <qpe/applnk.h>
+#include <qpe/ir.h>
+
+#include <qmessagebox.h>
+#include <qmultilineedit.h>
+
+#include <qstring.h>
+
+#include <qlayout.h>
+#include <qpixmap.h>
+#include <qcombobox.h>
+#include <qpopupmenu.h>
+#include <qtabwidget.h>
+#include <qtoolbutton.h>
+#include <qlineedit.h>
+#include <qlistview.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <sys/sendfile.h>
+#include <fcntl.h>
+
+
+void AdvancedFm::doDirChange() {
+ QString pathItem = CurrentView()->currentItem()->text(0);
+ if( pathItem == "../") {
+ ListClicked( CurrentView()->currentItem());
+ } else {
+ if( pathItem.find(" -> ",0,TRUE) != -1)
+ pathItem = dealWithSymName((const QString&)pathItem)+"/";
+// qWarning(pathItem);
+ gotoDirectory( CurrentDir()->path()+"/"+pathItem.left( pathItem.length() - 1) );
+ }
+}
+
+void AdvancedFm::showMenuHidden() {
+ if (b) {
+ CurrentDir()->setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All);
+ OtherDir()->setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All);
+ fileMenu->setItemChecked( fileMenu->idAt(0),TRUE);
+ } else {
+ CurrentDir()->setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All);
+ OtherDir()->setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All);
+ fileMenu->setItemChecked( fileMenu->idAt(0),FALSE);
+ }
+ b = !b;
+ populateView();
+}
+
+void AdvancedFm::showHidden() {
+ if (b) {
+ CurrentDir()->setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All);
+ OtherDir()->setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All);
+ } else {
+ CurrentDir()->setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All);
+ OtherDir()->setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All);
+ }
+ populateView();
+}
+
+QString AdvancedFm::dealWithSymName(const QString &fileName) {
+ QString strItem = fileName;
+ return strItem.right( (strItem.length() - strItem.find("->",0,TRUE)) - 4);
+}
+
+void AdvancedFm::runThis() {
+ if( !CurrentView()->currentItem()) return;
+ QString fs;
+ QDir *thisDir = CurrentDir();
+
+ QString curFile = CurrentView()->currentItem()->text(0);
+ QString path = thisDir->canonicalPath();
+
+ if( curFile.find("@",0,TRUE) !=-1 || curFile.find("->",0,TRUE) !=-1 ) //if symlink
+
+ curFile = dealWithSymName((const QString&)curFile);
+
+ if(curFile != "../") {
+
+ fs = getFileSystemType((const QString &) path);
+ QFileInfo fileInfo( path + "/" + curFile);
+// qDebug( fileInfo.owner());
+
+ if( (fileInfo.permission( QFileInfo::ExeUser)
+ | fileInfo.permission( QFileInfo::ExeGroup)
+ | fileInfo.permission( QFileInfo::ExeOther)) // & fs.find("vfat",0,TRUE) == -1) {
+ | fs == "vfat" && fileInfo.filePath().contains("/bin") ) {
+ QCopEnvelope e("QPE/System", "execute(QString)" );
+ e << curFile;
+ } else {
+ curFile = path + "/" + curFile;
+ DocLnk nf(curFile);
+ QString execStr = nf.exec();
+// qDebug( execStr);
+ if( execStr.isEmpty() ) {
+ } else {
+ nf.execute();
+ }
+ }
+ }
+}
+
+void AdvancedFm::runText() {
+ if( !CurrentView()->currentItem()) return;
+ QString curFile = CurrentView()->currentItem()->text(0);
+ if(curFile != "../") {
+ if( curFile.find("@",0,TRUE) !=-1 || curFile.find("->",0,TRUE) !=-1 ) //if symlink
+ curFile = dealWithSymName((const QString&)curFile);
+ curFile = CurrentDir()->canonicalPath()+"/"+curFile;
+ QCopEnvelope e("QPE/Application/textedit", "setDocument(QString)" );
+ e << curFile;
+ }
+}
+
+void AdvancedFm::makeDir() {
+ InputDialog *fileDlg;
+ fileDlg = new InputDialog(this,tr("Make Directory"),TRUE, 0);
+ fileDlg->exec();
+ if( fileDlg->result() == 1 ) {
+ QDir *thisDir = CurrentDir();
+ QString filename = fileDlg->LineEdit1->text();
+ thisDir->mkdir( thisDir->canonicalPath()+"/"+filename);
+ }
+ populateView();
+}
+
+void AdvancedFm::doDelete() {
+ QStringList curFileList = getPath();
+ bool doMsg=true;
+ int count = curFileList.count();
+ if( count > 0) {
+ if(count > 1 ) {
+ QString msg;
+ msg=tr("Really delete\n%1 files?").arg(count);
+ switch ( QMessageBox::warning(this,tr("Delete"),msg
+ ,tr("Yes"),tr("No"),0,0,1) )
+ {
+ case 0:
+ doMsg=false;
+ break;
+ case 1:
+ return;
+ break;
+ };
+ }
+
+ QString myFile;
+
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+ myFile = (*it);
+ if( myFile.find(" -> ",0,TRUE) != -1)
+ myFile = myFile.left( myFile.find(" -> ",0,TRUE));
+
+ QString f = CurrentDir()->canonicalPath();
+ if(f.right(1).find("/",0,TRUE) == -1)
+ f += "/";
+ f += myFile;
+ if(QDir(f).exists() && !QFileInfo(f).isSymLink() ) {
+ //if file is a directory
+
+ switch ( QMessageBox::warning( this, tr("Delete Directory?"),
+ tr("Really delete %1\nand all it's contents ?" ).arg( f ) ,
+ tr("Yes"), tr("No"), 0, 0, 1) ) {
+ case 0:
+ {
+ f=f.left(f.length()-1);
+ QString cmd="rm -rf "+f;
+ startProcess( (const QString)cmd.latin1() );
+ populateView();
+ }
+ break;
+ case 1:
+ // exit
+ break;
+ };
+
+ } else {
+ if(doMsg) {
+ switch ( QMessageBox::warning(this,tr("Delete"),
+ tr("Really delete\n%1?").arg( myFile ),
+ tr("Yes"), tr("No"), 0, 0, 1) ) {
+ case 1:
+ return;
+ break;
+ };
+ }
+
+ QString cmd="rm "+f;
+ QFile file(f);
+ QFileInfo fi(myFile);
+ if( fi.fileName().find("../",0,TRUE)==-1) {
+// qDebug("remove link files "+myFile);
+
+// DocLnk lnk(f);
+ DocLnk *lnk;
+ lnk = new DocLnk(f);
+// qDebug("Deleting doclnk " + lnk->linkFile());
+ if(lnk->isValid())
+ lnk->removeLinkFile();
+ // delete lnk;
+ file.remove();
+ }
+ }
+ }
+ }
+ populateView();
+}
+
+void AdvancedFm::filePerms() {
+ QStringList curFileList = getPath();
+ QString filePath;
+
+ filePath = CurrentDir()->canonicalPath()+"/";
+
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+ filePermissions *filePerm;
+ filePerm = new filePermissions(this, "Permissions",true,0,(const QString &)(filePath+*it));
+ QPEApplication::execDialog( filePerm );
+ if( filePerm )
+ delete filePerm;
+ }
+ populateView();
+}
+
+void AdvancedFm::doProperties() {
+#if defined(QT_QWS_OPIE)
+
+ QStringList curFileList = getPath();
+
+ QString filePath;
+ filePath = CurrentDir()->canonicalPath()+"/";
+
+// qDebug("%d",curFileList.count());
+
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+// qDebug((filePath+*it));
+ DocLnk lnk( (filePath+*it));
+ LnkProperties prop( &lnk );
+ QPEApplication::execDialog( &prop );
+ }
+#endif
+
+}
+
+void AdvancedFm::upDir() {
+ QDir *thisDir = CurrentDir();
+ QString current = thisDir->canonicalPath();
+ QDir dir(current);
+ dir.cdUp();
+ current = dir.canonicalPath();
+ chdir( current.latin1() );
+ thisDir->cd( current, TRUE);
+
+ populateView();
+ update();
+}
+
+void AdvancedFm::copy() {
+ qApp->processEvents();
+ QStringList curFileList = getPath();
+
+ QDir *thisDir = CurrentDir();
+ QDir *thatDir = OtherDir();
+
+ bool doMsg=true;
+ int count=curFileList.count();
+ if( count > 0) {
+ if(count > 1 ){
+ QString msg;
+ msg=tr("Really copy\n%1 files?").arg(count);
+ switch ( QMessageBox::warning(this,tr("Copy"),msg
+ ,tr("Yes"),tr("No"),0,0,1) )
+ {
+ case 0:
+ doMsg=false;
+ break;
+ case 1:
+ return;
+ break;
+ };
+ }
+
+ QString curFile, item, destFile;
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+ item=(*it);
+ if(item.find("->",0,TRUE)) //symlink
+ item = item.left(item.find("->",0,TRUE));
+
+ curFile = thisDir->canonicalPath()+"/"+ item;
+ destFile = thatDir->canonicalPath()+"/"+ item;
+
+// qDebug("Destination file is "+destFile);
+// qDebug("CurrentFile file is " + curFile);
+
+ QFile f(destFile);
+ if( f.exists()) {
+ if(doMsg) {
+ switch ( QMessageBox::warning(this,tr("File Exists!"),
+ tr("%1 exists. Ok to overwrite?").arg( item ),
+ tr("Yes"),tr("No"),0,0,1) ) {
+ case 1:
+ return;
+ break;
+ };
+ }
+ f.remove();
+ }
+
+ if( !copyFile( curFile, destFile) ) {
+ QMessageBox::message("AdvancedFm",
+ tr( "Could not copy %1 to %2").arg( curFile ).arg( destFile ) );
+ return;
+ }
+ }
+ setOtherTabCurrent();
+ rePopulate();
+ }
+}
+
+void AdvancedFm::copyAs() {
+ qApp->processEvents();
+
+ QStringList curFileList = getPath();
+ QString curFile, item;
+ InputDialog *fileDlg;
+
+ QDir *thisDir = CurrentDir();
+ QDir *thatDir = OtherDir();
+
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+ QString destFile;
+ item=(*it);
+ curFile = thisDir->canonicalPath()+"/"+(*it);
+ fileDlg = new InputDialog( this, tr("Copy "+curFile+" As"), TRUE, 0);
+
+ fileDlg->setInputText((const QString &) destFile );
+ fileDlg->exec();
+
+ if( fileDlg->result() == 1 ) {
+ QString filename = fileDlg->LineEdit1->text();
+ destFile = thatDir->canonicalPath()+"/"+filename;
+
+ QFile f( destFile);
+ if( f.exists()) {
+ switch (QMessageBox::warning(this,tr("File Exists!"),
+ item+tr("\nexists. Ok to overwrite?"),
+ tr("Yes"),tr("No"),0,0,1) ) {
+ case 0:
+ f.remove();
+ break;
+ case 1:
+ return;
+ break;
+ };
+ }
+ if( !copyFile( curFile, destFile) ) {
+ QMessageBox::message("AdvancedFm",tr("Could not copy\n")
+ +curFile +tr("to\n")+destFile);
+ return;
+ }
+ }
+ delete fileDlg;
+
+ }
+ rePopulate();
+ setOtherTabCurrent();
+}
+
+void AdvancedFm::copySameDir() {
+ qApp->processEvents();
+ QStringList curFileList = getPath();
+ QString curFile, item, destFile;
+ InputDialog *fileDlg;
+
+ QDir *thisDir = CurrentDir();
+
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+ item=(*it);
+ curFile = thisDir->canonicalPath()+"/"+ item;
+
+ fileDlg = new InputDialog(this,tr("Copy ")+curFile+tr(" As"),TRUE, 0);
+ fileDlg->setInputText((const QString &) destFile );
+ fileDlg->exec();
+
+ if( fileDlg->result() == 1 ) {
+
+ QString filename = fileDlg->LineEdit1->text();
+ destFile = thisDir->canonicalPath()+"/"+filename;
+
+ QFile f(destFile);
+ if( f.exists()) {
+ switch (QMessageBox::warning(this,tr("Delete"),
+ destFile+tr(" already exists.\nDo you really want to delete it?"),
+ tr("Yes"),tr("No"),0,0,1) ) {
+ case 0:
+
+ f.remove();
+ break;
+ case 1:
+ return;
+ break;
+ };
+ }
+ if(!copyFile( curFile,destFile) ) {
+ QMessageBox::message("AdvancedFm",tr("Could not copy\n")
+ +curFile +tr("to\n")+destFile);
+ return;
+ }
+
+// qDebug("copy "+curFile+" as "+destFile);
+ }
+ delete fileDlg;
+ }
+ rePopulate();
+}
+
+void AdvancedFm::move() {
+ qApp->processEvents();
+
+ QStringList curFileList = getPath();
+ if( curFileList.count() > 0) {
+ QString curFile, destFile, item;
+
+ QDir *thisDir = CurrentDir();
+ QDir *thatDir = OtherDir();
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+ item=(*it);
+ QString destFile = thatDir->canonicalPath();
+
+ if(destFile.right(1).find("/",0,TRUE) == -1)
+ destFile+="/";
+ destFile += item;
+// qDebug("Destination file is "+destFile);
+
+ curFile = thisDir->canonicalPath();
+ if(curFile.right(1).find("/",0,TRUE) == -1)
+ curFile +="/";
+ curFile+= item;
+// qDebug("CurrentFile file is " + curFile);
+
+ if(QFileInfo(curFile).isDir()) {
+ moveDirectory( curFile, destFile );
+ rePopulate();
+ return;
+ }
+
+ QFile f( curFile);
+ if( f.exists()) {
+ if( !copyFile( curFile, destFile) ) {
+ QMessageBox::message(tr("Note"),tr("Could not move\n")+curFile);
+ return;
+ } else
+ QFile::remove(curFile);
+ }
+ }
+
+ }
+ rePopulate();
+ setOtherTabCurrent();
+}
+
+bool AdvancedFm::moveDirectory( const QString & src, const QString & dest ) {
+ int err = 0;
+ if( copyDirectory( src, dest ) ) { QString cmd = "rm -rf " + src;
+ err = system((const char*)cmd);
+ } else
+ err = -1;
+
+ if(err!=0) {
+ QMessageBox::message(tr("Note"),tr("Could not move\n") + src);
+ return false;
+ }
+ return true;
+}
+
+bool AdvancedFm::copyDirectory( const QString & src, const QString & dest ) {
+
+ QString cmd = "/bin/cp -fpR " + src + " " + dest;
+ qWarning(cmd);
+ int err = system( (const char *) cmd );
+ if ( err != 0 ) {
+ QMessageBox::message("AdvancedFm",
+ tr( "Could not copy \n%1 \nto \n%2").arg( src ).arg( dest ) );
+ return false;
+ }
+
+ return true;
+}
+
+
+bool AdvancedFm::copyFile( const QString & src, const QString & dest ) {
+
+
+ if(QFileInfo(src).isDir()) {
+ if( copyDirectory( src, dest )) {
+ setOtherTabCurrent();
+ populateView();
+ return true;
+ }
+ else
+ return false;
+ }
+
+
+ bool success = true;
+ struct stat status;
+ QFile srcFile(src);
+ QFile destFile(dest);
+ int err=0;
+ int read_fd=0;
+ int write_fd=0;
+ struct stat stat_buf;
+ off_t offset = 0;
+ if(!srcFile.open( IO_ReadOnly|IO_Raw)) {
+// qWarning("open failed");
+ return success = false;
+ }
+ read_fd = srcFile.handle();
+ if(read_fd != -1) {
+ fstat (read_fd, &stat_buf);
+ if( !destFile.open( IO_WriteOnly|IO_Raw ) ) {
+// qWarning("destfile open failed");
+ return success = false;
+ }
+ write_fd = destFile.handle();
+ if(write_fd != -1) {
+ err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size);
+ if( err == -1) {
+ QString msg;
+ switch(err) {
+ case EBADF : msg = "The input file was not opened for reading or the output file was not opened for writing. ";
+ case EINVAL: msg = "Descriptor is not valid or locked. ";
+ case ENOMEM: msg = "Insufficient memory to read from in_fd.";
+ case EIO: msg = "Unspecified error while reading from in_fd.";
+ };
+ success = false;
+// qWarning(msg);
+ }
+ } else {
+ success = false;
+ }
+ } else {
+ success = false;
+ }
+ srcFile.close();
+ destFile.close();
+ // Set file permissions
+ if( stat( (const char *) src, &status ) == 0 ) {
+ chmod( (const char *) dest, status.st_mode );
+ }
+
+ return success;
+}
+
+void AdvancedFm::runCommand() {
+ if( !CurrentView()->currentItem()) return;
+ QDir *thisDir = CurrentDir();
+
+ QString curFile;
+ curFile = thisDir->canonicalPath() +"/"+ CurrentView()->currentItem()->text(0);
+
+ InputDialog *fileDlg;
+ fileDlg = new InputDialog(this,tr("Run Command"),TRUE, 0);
+ fileDlg->setInputText(curFile);
+ fileDlg->exec();
+ //QString command;
+
+ if( fileDlg->result() == 1 ) {
+// qDebug(fileDlg->LineEdit1->text());
+ QStringList command;
+
+ command << "/bin/sh";
+ command << "-c";
+ command << fileDlg->LineEdit1->text();
+ Output *outDlg;
+ outDlg = new Output( command, this, tr("AdvancedFm Output"), true);
+ QPEApplication::execDialog( outDlg );
+ qApp->processEvents();
+
+ }
+}
+
+void AdvancedFm::runCommandStd() {
+ if( !CurrentView()->currentItem()) return;
+ QString curFile;
+ QDir *thisDir = CurrentDir();
+ QListView *thisView = CurrentView();
+ if( thisView->currentItem())
+ curFile = thisDir->canonicalPath() +"/"+ thisView->currentItem()->text(0);
+
+ InputDialog *fileDlg;
+ fileDlg = new InputDialog(this,tr("Run Command"),TRUE, 0);
+ fileDlg->setInputText(curFile);
+ fileDlg->exec();
+
+ if( fileDlg->result() == 1 ) {
+ qApp->processEvents();
+ startProcess( (const QString)fileDlg->LineEdit1->text().latin1());
+ }
+}
+
+void AdvancedFm::fileStatus() {
+ if( !CurrentView()->currentItem()) return;
+ QString curFile;
+ curFile = CurrentView()->currentItem()->text(0);
+
+ QStringList command;
+ command << "/bin/sh";
+ command << "-c";
+ command << "stat -l "+ curFile;
+
+ Output *outDlg;
+ outDlg = new Output( command, this, tr("AdvancedFm Output"), true);
+ QPEApplication::execDialog( outDlg );
+ qApp->processEvents();
+}
+
+
+void AdvancedFm::mkDir() {
+ makeDir();
+}
+
+void AdvancedFm::rn() {
+ renameIt();
+}
+
+void AdvancedFm::del() {
+ doDelete();
+}
+
+void AdvancedFm::mkSym() {
+ QString cmd;
+ QStringList curFileList = getPath();
+ if( curFileList.count() > 0) {
+ QDir *thisDir = CurrentDir();
+ QDir * thatDir = OtherDir();
+
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+
+ QString destName = thatDir->canonicalPath()+"/"+(*it);
+ if(destName.right(1) == "/") {
+ destName = destName.left( destName.length() -1);
+ }
+
+ QString curFile = thisDir->canonicalPath()+"/"+(*it);
+
+ if( curFile.right(1) == "/") {
+ curFile = curFile.left( curFile.length() -1);
+ }
+
+ cmd = "ln -s "+curFile+" "+destName;
+// qDebug(cmd);
+ startProcess( (const QString)cmd );
+ }
+ rePopulate();
+ setOtherTabCurrent();
+ }
+}
+
+void AdvancedFm::doBeam() {
+ Ir ir;
+ if(!ir.supported()) {
+ } else {
+ QStringList curFileList = getPath();
+ if( curFileList.count() > 0) {
+ for ( QStringList::Iterator it = curFileList.begin(); it != curFileList.end(); ++it ) {
+ QString curFile = (*it);
+ QString curFilePath = CurrentDir()->canonicalPath()+"/"+curFile;
+ if( curFilePath.right(1) == "/") {
+ curFilePath = curFilePath.left( curFilePath.length() -1);
+ }
+ Ir *file = new Ir(this, "IR");
+ connect(file, SIGNAL(done(Ir*)), this, SLOT( fileBeamFinished( Ir * )));
+ file->send( curFilePath, curFile );
+ }
+ }
+ }
+}
+
+void AdvancedFm::fileBeamFinished( Ir *) {
+ QMessageBox::message( tr("Advancedfm Beam out"), tr("Ir sent.") ,tr("Ok") );
+}
+
+void AdvancedFm::selectAll() {
+ QListView *thisView = CurrentView();
+ thisView->selectAll(true);
+ thisView->setSelected( thisView->firstChild(),false);
+}
+
+void AdvancedFm::startProcess(const QString & cmd) {
+ QStringList command;
+ OProcess *process;
+ process = new OProcess();
+ connect(process, SIGNAL(processExited(OProcess *)),
+ this, SLOT( processEnded(OProcess *)));
+
+ connect(process, SIGNAL( receivedStderr(OProcess *, char *, int)),
+ this, SLOT( oprocessStderr(OProcess *, char *, int)));
+
+ command << "/bin/sh";
+ command << "-c";
+ command << cmd.latin1();
+ *process << command;
+ if(!process->start(OProcess::NotifyOnExit, OProcess::All) )
+ qDebug("could not start process");
+}
+
+void AdvancedFm::processEnded(OProcess *) {
+ rePopulate();
+}
+
+void AdvancedFm::oprocessStderr(OProcess*, char *buffer, int ) {
+// qWarning("received stderrt %d bytes", buflen);
+
+ QString lineStr = buffer;
+ QMessageBox::warning( this, tr("Error"), lineStr ,tr("Ok") );
+}
+
+bool AdvancedFm::eventFilter( QObject * o, QEvent * e ) {
+ if ( o->inherits( "QLineEdit" ) ) {
+ if ( e->type() == QEvent::KeyPress ) {
+ QKeyEvent *ke = (QKeyEvent*)e;
+ if ( ke->key() == Key_Return ||
+ ke->key() == Key_Enter ) {
+ okRename();
+ return true;
+ }
+ else if ( ke->key() == Key_Escape ) {
+ cancelRename();
+ return true;
+ }
+ }
+ else if ( e->type() == QEvent::FocusOut ) {
+ cancelRename();
+ return true;
+ }
+ }
+ if ( o->inherits( "QListView" ) ) {
+ if ( e->type() == QEvent::FocusIn ) {
+ if( o == Local_View) { //keep track of which view
+ whichTab=1;
+ }
+ else {
+ whichTab=2;
+ }
+ }
+ OtherView()->setSelected( OtherView()->currentItem(), FALSE );//make sure there's correct selection
+ }
+
+ return QWidget::eventFilter( o, e );
+}
+
+
+void AdvancedFm::cancelRename() {
+// qDebug("cancel rename");
+ QListView * view;
+ view = CurrentView();
+
+ bool resetFocus = view->viewport()->focusProxy() == renameBox;
+ delete renameBox;
+ renameBox = 0;
+ if ( resetFocus ) {
+ view->viewport()->setFocusProxy( view);
+ view->setFocus();
+ }
+}
+
+void AdvancedFm::doRename(QListView * view) {
+ if( !CurrentView()->currentItem()) return;
+
+ QRect r = view->itemRect( view->currentItem( ));
+ r = QRect( view->viewportToContents( r.topLeft() ), r.size() );
+ r.setX( view->contentsX() );
+
+ if ( r.width() > view->visibleWidth() )
+ r.setWidth( view->visibleWidth() );
+
+ renameBox = new QLineEdit( view->viewport(), "qt_renamebox" );
+ renameBox->setFrame(true);
+
+ renameBox->setText( view->currentItem()->text(0) );
+
+ renameBox->selectAll();
+ renameBox->installEventFilter( this );
+
+ view->addChild( renameBox, r.x(), r.y() );
+
+ renameBox->resize( r.size() );
+
+ view->viewport()->setFocusProxy( renameBox );
+
+ renameBox->setFocus();
+ renameBox->show();
+}
+
+
+void AdvancedFm::renameIt() {
+ if( !CurrentView()->currentItem()) return;
+
+ QListView *thisView = CurrentView();
+ oldName = thisView->currentItem()->text(0);
+ doRename( thisView );
+}
+
+void AdvancedFm::okRename() {
+ if( !CurrentView()->currentItem()) return;
+
+ QString newName = renameBox->text();
+ cancelRename();
+ QListView * view = CurrentView();
+ QString path = CurrentDir()->canonicalPath() + "/";
+ oldName = path + oldName;
+ newName = path + newName;
+ if( rename( oldName.latin1(), newName.latin1())== -1)
+ QMessageBox::message(tr("Note"),tr("Could not rename"));
+ else
+ oldName = "";
+ view->takeItem( view->currentItem() );
+ delete view->currentItem();
+ rePopulate();
+}
+
+void AdvancedFm::openSearch() {
+ QMessageBox::message(tr("Note"),tr("Not Yet Implemented"));
+}
diff --git a/noncore/apps/checkbook/checkbook.cpp b/noncore/apps/checkbook/checkbook.cpp index a42c824..a5492e4 100644 --- a/noncore/apps/checkbook/checkbook.cpp +++ b/noncore/apps/checkbook/checkbook.cpp @@ -1,789 +1,787 @@ /* This file is part of the OPIE Project =. .=l. Copyright (c) 2002 Dan Williams <drw@handhelds.org> .>+-= _;:, .> :=|. This file is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%`+i> _;_. .i_,=:_. -<s. This file 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 General ..}^=.= = ; Public License for more details. ++= -. .` .: : = ...= . :.=- You should have received a copy of the GNU -. .:....=;==+<; General Public License along with this file; -_. . . )=. = see the file COPYING. If not, write to the -- :-=` Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "checkbook.h" #include "cbinfo.h" #include "transaction.h" #include "traninfo.h" #include "graph.h" #include "graphinfo.h" #include "password.h" #include "mainwindow.h" #include "cfg.h" #include <opie/otabwidget.h> #include <qpe/qpeapplication.h> #include <qpe/qpemessagebox.h> #include <qpe/resource.h> #include <qcheckbox.h> #include <qcombobox.h> #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include <qmultilineedit.h> #include <qpushbutton.h> #include <qwhatsthis.h> #include <qpopupmenu.h> #define COL_ID 0 #define COL_SORTDATE 1 #define COL_NUM 2 #define COL_DATE 3 #define COL_DESC 4 #define COL_AMOUNT 5 #define COL_BAL 6 // --- Checkbook -------------------------------------------------------------- Checkbook::Checkbook( QWidget *parent, CBInfo *i, Cfg *cfg ) : QDialog( parent, 0, TRUE, WStyle_ContextHelp ) { info = i; _pCfg=cfg; // Title bar if ( info->name() != "" ) { QString tempstr = info->name(); tempstr.append( " - " ); tempstr.append( tr( "Checkbook" ) ); setCaption( tempstr ); } else { setCaption( tr( "New checkbook" ) ); } // Setup layout to make everything pretty QVBoxLayout *layout = new QVBoxLayout( this ); layout->setMargin( 2 ); layout->setSpacing( 4 ); // Setup tabs for all info mainWidget = new OTabWidget( this ); layout->addWidget( mainWidget ); mainWidget->addTab( initInfo(), "checkbook/infotab", tr( "Info" ) ); mainWidget->addTab( initTransactions(), "checkbook/trantab", tr( "Transactions" ) ); mainWidget->addTab( initCharts(), "checkbook/charttab", tr( "Charts" ) ); if( _pCfg->isShowLastTab() ) mainWidget->setCurrentTab( info->getLastTab() ); else mainWidget->setCurrentTab( tr( "Info" ) ); connect( mainWidget, SIGNAL( currentChanged(QWidget *) ), this, SLOT( slotTab(QWidget *) ) ); // Load checkbook information loadCheckbook(); } Checkbook::~Checkbook() { } // --- initInfo --------------------------------------------------------------- QWidget *Checkbook::initInfo() { QWidget *control = new QWidget( mainWidget, tr("Info") ); QVBoxLayout *vb = new QVBoxLayout( control ); QScrollView *sv = new QScrollView( control ); vb->addWidget( sv, 0, 0 ); sv->setResizePolicy( QScrollView::AutoOneFit ); sv->setFrameStyle( QFrame::NoFrame ); QWidget *container = new QWidget( sv->viewport() ); sv->addChild( container ); QGridLayout *layout = new QGridLayout( container ); layout->setSpacing( 2 ); layout->setMargin( 4 ); // Password protection passwordCB = new QCheckBox( tr( "Password protect" ), container ); QWhatsThis::add( passwordCB, tr( "Click here to enable/disable password protection of this checkbook." ) ); connect( passwordCB, SIGNAL( clicked() ), this, SLOT( slotPasswordClicked() ) ); layout->addMultiCellWidget( passwordCB, 0, 0, 0, 1 ); // Account name QLabel *label = new QLabel( tr( "Name:" ), container ); QWhatsThis::add( label, tr( "Enter name of checkbook here." ) ); layout->addWidget( label, 1, 0 ); nameEdit = new QLineEdit( container ); QWhatsThis::add( nameEdit, tr( "Enter name of checkbook here." ) ); connect( nameEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( slotNameChanged( const QString & ) ) ); layout->addWidget( nameEdit, 1, 1 ); // Type of account label = new QLabel( tr( "Type:" ), container ); QWhatsThis::add( label, tr( "Select type of checkbook here." ) ); layout->addWidget( label, 2, 0 ); typeList = new QComboBox( container ); QWhatsThis::add( typeList, tr( "Select type of checkbook here." ) ); typeList->insertStringList( _pCfg->getAccountTypes() ); layout->addWidget( typeList, 2, 1 ); // Bank/institution name label = new QLabel( tr( "Bank:" ), container ); QWhatsThis::add( label, tr( "Enter name of the bank for this checkbook here." ) ); layout->addWidget( label, 3, 0 ); bankEdit = new QLineEdit( container ); QWhatsThis::add( bankEdit, tr( "Enter name of the bank for this checkbook here." ) ); layout->addWidget( bankEdit, 3, 1 ); // Account number label = new QLabel( tr( "Account number:" ), container ); QWhatsThis::add( label, tr( "Enter account number for this checkbook here." ) ); layout->addWidget( label, 4, 0 ); acctNumEdit = new QLineEdit( container ); QWhatsThis::add( acctNumEdit, tr( "Enter account number for this checkbook here." ) ); layout->addWidget( acctNumEdit, 4, 1 ); // PIN number label = new QLabel( tr( "PIN number:" ), container ); QWhatsThis::add( label, tr( "Enter PIN number for this checkbook here." ) ); layout->addWidget( label, 5, 0 ); pinNumEdit = new QLineEdit( container ); QWhatsThis::add( pinNumEdit, tr( "Enter PIN number for this checkbook here." ) ); layout->addWidget( pinNumEdit, 5, 1 ); // Starting balance label = new QLabel( tr( "Starting balance:" ), container ); QWhatsThis::add( label, tr( "Enter the initial balance for this checkbook here." ) ); layout->addWidget( label, 6, 0 ); balanceEdit = new QLineEdit( container ); QWhatsThis::add( balanceEdit, tr( "Enter the initial balance for this checkbook here." ) ); connect( balanceEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( slotStartingBalanceChanged( const QString & ) ) ); layout->addWidget( balanceEdit, 6, 1 ); // Notes label = new QLabel( tr( "Notes:" ), container ); QWhatsThis::add( label, tr( "Enter any additional information for this checkbook here." ) ); layout->addWidget( label, 7, 0 ); notesEdit = new QMultiLineEdit( container ); QWhatsThis::add( notesEdit, tr( "Enter any additional information for this checkbook here." ) ); notesEdit->setMinimumHeight( 25 ); notesEdit->setMaximumHeight( 65 ); layout->addMultiCellWidget( notesEdit, 8, 8, 0, 1 ); return control; } // --- initTransactions ------------------------------------------------------- QWidget *Checkbook::initTransactions() { QWidget *control = new QWidget( mainWidget, tr("Transactions") ); QGridLayout *layout = new QGridLayout( control ); layout->setSpacing( 2 ); layout->setMargin( 4 ); // Sort selector QLabel *label = new QLabel( tr( "Sort by:" ), control ); QWhatsThis::add( label, tr( "Select checkbook sorting here." ) ); layout->addMultiCellWidget( label, 0, 0, 0, 1 ); _cbSortType=new QComboBox( control ); _cbSortType->insertItem( tr("Entry Order") ); _cbSortType->insertItem( tr("Date") ); _cbSortType->insertItem( tr("Number") ); layout->addMultiCellWidget( _cbSortType, 0, 0, 1, 2 ); connect( _cbSortType, SIGNAL( activated(const QString &) ), this, SLOT( slotSortChanged( const QString & ) ) ); // Table tranTable = new QListView( control ); QFont fnt(QPEApplication::font()); fnt.setPointSize( fnt.pointSize()-1 ); tranTable->setFont( fnt ); QWhatsThis::add( tranTable, tr( "This is a listing of all transactions entered for this checkbook.\n\nTo sort entries by a specific field, click on the column name." ) ); tranTable->addColumn( tr( "Id" ) ); tranTable->setColumnWidthMode( COL_ID, QListView::Manual ); tranTable->setColumnWidth( COL_ID, 0); tranTable->addColumn( tr( "SortDate" ) ); tranTable->setColumnWidthMode( COL_SORTDATE, QListView::Manual ); tranTable->setColumnWidth( COL_SORTDATE, 0); tranTable->addColumn( tr( "Num" ) ); tranTable->addColumn( tr( "Date" ) ); //tranTable->addColumn( tr( "Cleared" ) ); tranTable->addColumn( tr( "Description" ) ); int column = tranTable->addColumn( tr( "Amount" ) ); tranTable->setColumnAlignment( column, Qt::AlignRight ); column=tranTable->addColumn( tr("Balance") ); tranTable->setColumnAlignment( column, Qt::AlignRight ); tranTable->setAllColumnsShowFocus( TRUE ); tranTable->setSorting( -1 ); layout->addMultiCellWidget( tranTable, 1, 1, 0, 2 ); QPEApplication::setStylusOperation( tranTable->viewport(), QPEApplication::RightOnHold ); connect( tranTable, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), this, SLOT( slotMenuTran(QListViewItem *, const QPoint &) ) ); connect( tranTable, SIGNAL( doubleClicked( QListViewItem * ) ), this, SLOT( slotEditTran() ) ); _sortCol=COL_ID; // Buttons QPushButton *btn = new QPushButton( Resource::loadPixmap( "new" ), tr( "New" ), control ); QWhatsThis::add( btn, tr( "Click here to add a new transaction." ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotNewTran() ) ); layout->addWidget( btn, 2, 0 ); btn = new QPushButton( Resource::loadPixmap( "edit" ), tr( "Edit" ), control ); QWhatsThis::add( btn, tr( "Select a transaction and then click here to edit it." ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotEditTran() ) ); layout->addWidget( btn, 2, 1 ); btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), control ); QWhatsThis::add( btn, tr( "Select a checkbook and then click here to delete it." ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotDeleteTran() ) ); layout->addWidget( btn, 2, 2 ); return( control ); } // --- initCharts ------------------------------------------------------------- QWidget *Checkbook::initCharts() { graphInfo = 0x0; QWidget *control = new QWidget( mainWidget, tr("Charts") ); QGridLayout *layout = new QGridLayout( control ); layout->setSpacing( 2 ); layout->setMargin( 4 ); graphWidget = new Graph( control ); QWhatsThis::add( graphWidget, tr( "Select the desired chart below and then click on the Draw button." ) ); layout->addMultiCellWidget( graphWidget, 0, 0, 0, 2 ); graphList = new QComboBox( control ); QWhatsThis::add( graphList, tr( "Click here to select the desired chart type." ) ); graphList->insertItem( tr( "Account balance" ) ); graphList->insertItem( tr( "Withdrawals by category" ) ); graphList->insertItem( tr( "Deposits by category" ) ); layout->addMultiCellWidget( graphList, 1, 1, 0, 1 ); QPushButton *btn = new QPushButton( Resource::loadPixmap( "checkbook/drawbtn" ), tr( "Draw" ), control ); QWhatsThis::add( btn, tr( "Click here to draw the selected chart." ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotDrawGraph() ) ); layout->addWidget( btn, 1, 2 ); return control; } // --- loadCheckbook ---------------------------------------------------------- void Checkbook::loadCheckbook() { if ( !info ) { return; } tranList = info->transactions(); passwordCB->setChecked( !info->password().isNull() ); nameEdit->setText( info->name() ); QString temptext = info->type(); int i = typeList->count(); while ( i > 0 ) { i--; typeList->setCurrentItem( i ); if ( typeList->currentText() == temptext ) { break; } } if( i<=0 ) { typeList->insertItem( temptext, 0 ); typeList->setCurrentItem(0); } bankEdit->setText( info->bank() ); acctNumEdit->setText( info->account() ); pinNumEdit->setText( info->pin() ); temptext.setNum( info->startingBalance(), 'f', 2 ); balanceEdit->setText( temptext ); notesEdit->setText( info->notes() ); // Load transactions float amount; QString stramount; for ( TranInfo *tran = tranList->first(); tran; tran = tranList->next() ) { amount = tran->amount(); if ( tran->withdrawal() ) { amount *= -1; } stramount.sprintf( "%s%.2f", _pCfg->getCurrencySymbol().latin1(), amount ); ( void ) new CBListItem( tran, tranTable, tran->getIdStr(), tran->datestr(false), tran->number(), tran->datestr(true), tran->desc(), stramount ); } // set sort order bool bOk=false; for(int i=0; i<_cbSortType->count(); i++) { if( _cbSortType->text(i)==info->getSortOrder() ) { _cbSortType->setCurrentItem(i); slotSortChanged( info->getSortOrder() ); bOk=true; break; } } if( !bOk ) { _cbSortType->setCurrentItem(0); slotSortChanged( _cbSortType->currentText() ); } // calc running balance adjustBalance(); } // --- adjustBalance ---------------------------------------------------------- void Checkbook::adjustBalance() { // update running balance in register QString sRunning; float bal=info->startingBalance(); for(CBListItem *item=(CBListItem *)tranTable->firstChild(); item; item=(CBListItem *)item->nextSibling() ) { TranInfo *tran=item->getTranInfo(); bal=bal + (tran->withdrawal() ? -1 : 1)*tran->amount() - tran->fee(); sRunning.sprintf( "%s%.2f", _pCfg->getCurrencySymbol().latin1(), bal ); item->setText( COL_BAL, sRunning); } } // --- resort ----------------------------------------------------------------- void Checkbook::resort() { tranTable->setSorting(_sortCol); tranTable->sort(); tranTable->setSorting(-1); } // --- accept ----------------------------------------------------------------- void Checkbook::accept() { info->setName( nameEdit->text() ); info->setType( typeList->currentText() ); info->setBank( bankEdit->text() ); info->setAccount( acctNumEdit->text() ); info->setPin( pinNumEdit->text() ); bool ok; info->setStartingBalance( balanceEdit->text().toFloat( &ok ) ); info->setNotes( notesEdit->text() ); QDialog::accept(); } // --- slotPasswordClicked ---------------------------------------------------- void Checkbook::slotPasswordClicked() { if ( info->password().isNull() && passwordCB->isChecked() ) { Password *pw = new Password( this, tr( "Enter password" ), tr( "Please enter your password:" ) ); if ( pw->exec() != QDialog::Accepted ) { passwordCB->setChecked( FALSE ); delete pw; return; } info->setPassword( pw->password ); delete pw; pw = new Password( this, tr( "Confirm password" ), tr( "Please confirm your password:" ) ); if ( pw->exec() != QDialog::Accepted || pw->password != info->password() ) { passwordCB->setChecked( FALSE ); info->setPassword( QString::null ); } delete pw; } else if ( !info->password().isNull() && !passwordCB->isChecked() ) { Password *pw = new Password( this, tr( "Enter password" ), tr( "Please enter your password to confirm removal of password protection:" ) ); if ( pw->exec() == QDialog::Accepted && pw->password == info->password() ) { info->setPassword( QString::null ); delete pw; return; } else { passwordCB->setChecked( TRUE ); } delete pw; } } void Checkbook::slotNameChanged( const QString &newname ) { info->setName( newname ); // TODO - need filedir // QString namestr = filedir; // namestr.append( newname ); // namestr.append( ".qcb" ); // info->setFilename( namestr ); QString namestr = newname; namestr.append( " - " ); namestr.append( tr( "Checkbook" ) ); setCaption( namestr ); } // ---slotStartingBalanceChanged ---------------------------------------------- void Checkbook::slotStartingBalanceChanged( const QString &newbalance ) { bool ok; info->setStartingBalance( newbalance.toFloat( &ok ) ); adjustBalance(); } // --- slotNewTran ------------------------------------------------------------ void Checkbook::slotNewTran() { TranInfo *traninfo = new TranInfo( info->getNextNumber() ); if( !_dLastNew.isNull() ) traninfo->setDate(_dLastNew); Transaction *currtran = new Transaction( this, true, info->name(), traninfo, _pCfg ); - currtran->showMaximized(); - if ( currtran->exec() == QDialog::Accepted ) + if ( QPEApplication::execDialog( currtran ) == QDialog::Accepted ) { // Add to transaction list info->addTransaction( traninfo ); // Add to transaction table float amount; QString stramount; amount = (traninfo->withdrawal() ? -1 : 1)*traninfo->amount(); stramount.sprintf( "%s%.2f", _pCfg->getCurrencySymbol().latin1(), amount ); ( void ) new CBListItem( traninfo, tranTable, traninfo->getIdStr(), traninfo->datestr(false), traninfo->number(), traninfo->datestr(true), traninfo->desc(), stramount ); resort(); adjustBalance(); // save last date _dLastNew = traninfo->date(); // save description in list of payees, if not in there QStringList *pLst=&_pCfg->getPayees(); if( _pCfg->getSavePayees() && pLst->contains(traninfo->desc())==0 ) { pLst->append( traninfo->desc() ); pLst->sort(); _pCfg->setDirty(true); } } else { delete traninfo; } } // --- slotEditTran ----------------------------------------------------------- void Checkbook::slotEditTran() { QListViewItem *curritem = tranTable->currentItem(); if ( !curritem ) return; TranInfo *traninfo=info->findTransaction( curritem->text(COL_ID) ); Transaction *currtran = new Transaction( this, false, info->name(), traninfo, _pCfg ); - currtran->showMaximized(); - if ( currtran->exec() == QDialog::Accepted ) + if ( QPEApplication::execDialog( currtran ) == QDialog::Accepted ) { curritem->setText( COL_NUM, traninfo->number() ); curritem->setText( COL_SORTDATE, traninfo->datestr(false) ); curritem->setText( COL_DATE, traninfo->datestr(true) ); curritem->setText( COL_DESC, traninfo->desc() ); float amount = traninfo->amount(); if ( traninfo->withdrawal() ) { amount *= -1; } QString stramount; stramount.sprintf( "%s%.2f", _pCfg->getCurrencySymbol().latin1(), amount ); curritem->setText( COL_AMOUNT, stramount ); resort(); adjustBalance(); // save description in list of payees, if not in there QStringList *pLst=&_pCfg->getPayees(); if( _pCfg->getSavePayees() && pLst->contains(traninfo->desc())==0 ) { pLst->append( traninfo->desc() ); pLst->sort(); _pCfg->setDirty(true); } } delete currtran; } // --- slotMenuTran ----------------------------------------------------------- void Checkbook::slotMenuTran(QListViewItem *item, const QPoint &pnt) { // active item? if( !item ) return; // Display menu QPopupMenu m; m.insertItem( QWidget::tr( "Edit" ), 1 ); m.insertItem( QWidget::tr( "New" ), 2 ); m.insertItem( QWidget::tr( "Delete" ), 3 ); int r = m.exec( pnt ); switch(r) { case 1: slotEditTran(); break; case 2: slotNewTran(); break; case 3: slotDeleteTran(); break; } } // --- slotDeleteTran --------------------------------------------------------- void Checkbook::slotDeleteTran() { QListViewItem *curritem = tranTable->currentItem(); if ( !curritem ) return; TranInfo *traninfo = info->findTransaction( curritem->text(COL_ID) ); if ( QPEMessageBox::confirmDelete ( this, tr( "Delete transaction" ), traninfo->desc() ) ) { info->removeTransaction( traninfo ); delete curritem; adjustBalance(); } } void Checkbook::slotDrawGraph() { if ( graphInfo ) { delete graphInfo; } switch ( graphList->currentItem() ) { case 0 : drawBalanceChart(); break; case 1 : drawCategoryChart( TRUE ); break; case 2 : drawCategoryChart( FALSE ); break; }; graphWidget->setGraphInfo( graphInfo ); graphWidget->drawGraph( TRUE ); } void Checkbook::drawBalanceChart() { DataPointList *list = new DataPointList(); float balance = info->startingBalance(); float amount; QString label; int i = 0; int count = tranList->count(); for ( TranInfo *tran = tranList->first(); tran; tran = tranList->next() ) { i++; balance -= tran->fee(); amount = tran->amount(); if ( tran->withdrawal() ) { amount *= -1; } balance += amount; if ( i == 1 || i == count / 2 || i == count ) { label = tran->datestr(true); } else { label = ""; } list->append( new DataPointInfo( label, balance ) ); } graphInfo = new GraphInfo( GraphInfo::BarChart, list ); } void Checkbook::drawCategoryChart( bool withdrawals ) { DataPointList *list = new DataPointList(); TranInfo *tran = tranList->first(); if ( tran && tran->withdrawal() == withdrawals ) { list->append( new DataPointInfo( tran->category(), tran->amount() ) ); } tran = tranList->next(); DataPointInfo *cat; for ( ; tran; tran = tranList->next() ) { if ( tran->withdrawal() == withdrawals ) { // Find category in list for ( cat = list->first(); cat; cat = list->next() ) { if ( cat->label() == tran->category() ) { break; } } if ( cat && cat->label() == tran->category() ) { // Found category, add to transaction to category total cat->addToValue( tran->amount() ); } else { // Didn't find category, add category to list list->append( new DataPointInfo( tran->category(), tran->amount() ) ); } } } graphInfo = new GraphInfo( GraphInfo::PieChart, list ); } CBListItem::CBListItem( TranInfo *pTran, QListView *parent, QString label1, QString label2, QString label3, QString label4, QString label5, QString label6, QString label7, QString label8 ) : QListViewItem( parent, label1, label2, label3, label4, label5, label6, label7, label8 ) { _pTran=pTran; m_known = FALSE; owner = parent; } void CBListItem::paintCell( QPainter *p, const QColorGroup &cg, int column, int width, int align ) { QColorGroup _cg = cg; const QPixmap *pm = listView()->viewport()->backgroundPixmap(); if ( pm && !pm->isNull() ) { _cg.setBrush( QColorGroup::Base, QBrush( cg.base(), *pm ) ); p->setBrushOrigin( -listView()->contentsX(), -listView()->contentsY() ); } else if ( isAltBackground() ) _cg.setColor(QColorGroup::Base, cg.background() ); QListViewItem::paintCell(p, _cg, column, width, align); } // --- CBListItem::isAltBackground -------------------------------------------- bool CBListItem::isAltBackground() { QListView *lv = static_cast<QListView *>( listView() ); if ( lv ) { CBListItem *above = 0; above = (CBListItem *)( itemAbove() ); m_known = above ? above->m_known : true; if ( m_known ) { m_odd = above ? !above->m_odd : false; } else { CBListItem *item; bool previous = true; if ( parent() ) { item = (CBListItem *)( parent() ); if ( item ) previous = item->m_odd; item = (CBListItem *)( parent()->firstChild() ); } else { item = (CBListItem *)( lv->firstChild() ); } while(item) { item->m_odd = previous = !previous; item->m_known = true; item = (CBListItem *)( item->nextSibling() ); } } return m_odd; } return false; } // --- slotTab ---------------------------------------------------------------- void Checkbook::slotTab(QWidget *tab) { if( !tab || !info ) return; info->setLastTab( tab->name() ); } // --- slotSortChanged --------------------------------------------------------- void Checkbook::slotSortChanged( const QString &selc ) { if( selc==tr("Entry Order") ) { _sortCol=COL_ID; } else if( selc==tr("Number") ) { _sortCol=COL_NUM; } else if( selc==tr("Date") ) { _sortCol=COL_SORTDATE; } info->setSortOrder( selc ); resort(); } diff --git a/noncore/apps/checkbook/mainwindow.cpp b/noncore/apps/checkbook/mainwindow.cpp index f29001a..60aea42 100644 --- a/noncore/apps/checkbook/mainwindow.cpp +++ b/noncore/apps/checkbook/mainwindow.cpp @@ -1,365 +1,362 @@ /* This file is part of the OPIE Project =. .=l. Copyright (c) 2002 Dan Williams <drw@handhelds.org> .>+-= _;:, .> :=|. This file is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU General Public .="- .-=="i, .._ License as published by the Free Software - . .-<_> .<> Foundation; either version 2 of the License, ._= =} : or (at your option) any later version. .%`+i> _;_. .i_,=:_. -<s. This file 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 General ..}^=.= = ; Public License for more details. ++= -. .` .: : = ...= . :.=- You should have received a copy of the GNU -. .:....=;==+<; General Public License along with this file; -_. . . )=. = see the file COPYING. If not, write to the -- :-=` Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "mainwindow.h" #include "cbinfo.h" #include "configuration.h" #include "password.h" #include "checkbook.h" #include "listedit.h" #include <qpe/config.h> #include <qpe/global.h> #include <qpe/qpeapplication.h> -#include <qmenubar.h> #include <qpe/qpemessagebox.h> #include <qpe/qpetoolbar.h> #include <qpe/resource.h> +#include <qmenubar.h> #include <qaction.h> #include <qcheckbox.h> #include <qdir.h> #include <qlineedit.h> #include <qwhatsthis.h> MainWindow::MainWindow( QWidget* parent, const char* name, WFlags /*fl*/ ) : QMainWindow( parent, name, WStyle_ContextHelp ) { setCaption( tr( "Checkbook" ) ); cbDir = Global::applicationFileName( "checkbook", "" ); lockIcon = Resource::loadPixmap( "locked" ); // Load configuration options Config config( "checkbook" ); _cfg.readConfig( config ); // Build menu and tool bars setToolBarsMovable( FALSE ); QToolBar *bar = new QToolBar( this ); bar->setHorizontalStretchable( TRUE ); QMenuBar *mb = new QMenuBar( bar ); mb->setMargin( 0 ); QPopupMenu *popup = new QPopupMenu( this ); bar = new QToolBar( this ); QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to create a new checkbook.\n\nYou also can select New from the Checkbook menu." ) ); connect( a, SIGNAL( activated() ), this, SLOT( slotNew() ) ); a->addTo( popup ); a->addTo( bar ); actionOpen = new QAction( tr( "Edit" ), Resource::loadPixmap( "edit" ), QString::null, 0, this, 0 ); actionOpen->setWhatsThis( tr( "Select a checkbook and then click here to edit it.\n\nYou also can select Edit from the Checkbook menu, or click and hold on a checkbook name." ) ); connect( actionOpen, SIGNAL( activated() ), this, SLOT( slotEdit() ) ); actionOpen->addTo( popup ); actionOpen->addTo( bar ); actionDelete = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 0, this, 0 ); actionDelete->setWhatsThis( tr( "Select a checkbook and then click here delete it.\n\nYou also can select Delete from the Checkbook menu." ) ); connect( actionDelete, SIGNAL( activated() ), this, SLOT( slotDelete() ) ); actionDelete->addTo( popup ); actionDelete->addTo( bar ); popup->insertSeparator(); a = new QAction( tr( "Configure" ), Resource::loadPixmap( "SettingsIcon" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to configure this app." ) ); connect( a, SIGNAL( activated() ), this, SLOT( slotConfigure() ) ); a->addTo( popup ); a->addTo( bar ); mb->insertItem( tr( "Checkbook" ), popup ); // Load Checkbook selection list checkbooks = new CBInfoList(); QDir checkdir( cbDir ); if (checkdir.exists() == true) { QStringList cblist = checkdir.entryList( "*.qcb", QDir::Files|QDir::Readable|QDir::Writable, QDir::Time ); CBInfo *cb = 0x0; QString filename; for ( QStringList::Iterator it = cblist.begin(); it != cblist.end(); it++ ) { filename = cbDir; filename.append( (*it) ); cb = new CBInfo( (*it).remove( (*it).find('.'), (*it).length() ), filename ); checkbooks->inSort( cb ); } } // Build Checkbook selection list control cbList = 0x0; buildList(); // open last book? if( _cfg.isOpenLastBook() ) { this->show(); this->showMaximized(); QListViewItem *itm=cbList->firstChild(); while( itm ) { if( itm->text(posName)==_cfg.getLastBook() ) { openBook( itm ); break; } itm=itm->nextSibling(); } } } // --- ~MainWindow ------------------------------------------------------------ MainWindow::~MainWindow() { writeConfig(); } // --- buildList -------------------------------------------------------------- void MainWindow::buildList() { if ( cbList ) delete cbList; cbList = new QListView( this ); QWhatsThis::add( cbList, tr( "This is a listing of all checkbooks currently available." ) ); if ( _cfg.getShowLocks() ) { cbList->addColumn( Resource::loadIconSet( "locked" ), "", 24 ); posName = 1; } else { posName = 0; } cbList->addColumn( tr( "Checkbook Name" ) ); if ( _cfg.getShowBalances() ) { int colnum = cbList->addColumn( tr( "Balance" ) ); cbList->setColumnAlignment( colnum, Qt::AlignRight ); } cbList->setAllColumnsShowFocus( TRUE ); cbList->setSorting( posName ); QPEApplication::setStylusOperation( cbList->viewport(), QPEApplication::RightOnHold ); connect( cbList, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), this, SLOT( slotEdit() ) ); setCentralWidget( cbList ); for ( CBInfo *cb = checkbooks->first(); cb; cb = checkbooks->next() ) { addCheckbook( cb ); } } void MainWindow::addCheckbook( CBInfo *cb ) { QListViewItem *lvi = new QListViewItem( cbList ); if ( _cfg.getShowLocks() && !cb->password().isNull() ) { lvi->setPixmap( 0, lockIcon ); } lvi->setText( posName, cb->name() ); if ( _cfg.getShowBalances() ) { QString balance; balance.sprintf( "%s%.2f", _cfg.getCurrencySymbol().latin1(), cb->balance() ); lvi->setText( posName + 1, balance ); } } void MainWindow::buildFilename( const QString &name ) { tempFilename = cbDir; tempFilename.append( name ); tempFilename.append( ".qcb" ); } void MainWindow::slotNew() { CBInfo *cb = new CBInfo(); Checkbook *currcb = new Checkbook( this, cb, &_cfg ); - currcb->showMaximized(); - if ( currcb->exec() == QDialog::Accepted ) + if ( QPEApplication::execDialog( currcb ) == QDialog::Accepted ) { // Save new checkbook buildFilename( cb->name() ); _cfg.setLastBook( cb->name() ); cb->setFilename( tempFilename ); cb->write(); // Add to listbox checkbooks->inSort( cb ); addCheckbook( cb ); } delete currcb; } // --- slotEdit --------------------------------------------------------------- void MainWindow::slotEdit() { // get name and open it QListViewItem *curritem = cbList->currentItem(); if ( !curritem ) return; openBook( curritem ); } // --- openBook --------------------------------------------------------------- void MainWindow::openBook(QListViewItem *curritem) { // find book in List QString currname=curritem->text(posName); CBInfo *cb = checkbooks->first(); while ( cb ) { if ( cb->name() == currname ) break; cb = checkbooks->next(); } if ( !cb ) return; // buildFilename( currname ); float currbalance = cb->balance(); bool currlock = !cb->password().isNull(); if ( currlock ) { Password *pw = new Password( this, tr( "Enter password" ), tr( "Please enter your password:" ) ); if ( pw->exec() != QDialog::Accepted || pw->password != cb->password() ) { delete pw; return; } delete pw; } _cfg.setLastBook( currname ); Checkbook *currcb = new Checkbook( this, cb, &_cfg ); - currcb->showMaximized(); - if ( currcb->exec() == QDialog::Accepted ) + if ( QPEApplication::execDialog( currcb ) == QDialog::Accepted ) { QString newname = cb->name(); if ( currname != newname ) { // Update name if changed if( curritem ) { curritem->setText( posName, newname ); cbList->sort(); } _cfg.setLastBook( newname ); // Remove old file QFile f( tempFilename ); if ( f.exists() ) f.remove(); // Get new filename buildFilename( newname ); cb->setFilename( tempFilename ); } cb->write(); // Update lock if changed if ( _cfg.getShowLocks() && !cb->password().isNull() != currlock ) { if ( !cb->password().isNull() ) curritem->setPixmap( 0, lockIcon ); else curritem->setPixmap( 0, nullIcon ); } // Update balance if changed if ( _cfg.getShowBalances() && cb->balance() != currbalance ) { QString tempstr; tempstr.sprintf( "%s%.2f", _cfg.getCurrencySymbol().latin1(), cb->balance() ); curritem->setText( posName + 1, tempstr ); } // write config, if needed if( _cfg.isDirty() ) { Config config("checkbook"); _cfg.writeConfig( config ); } } delete currcb; } // --- slotDelete ------------------------------------------------------------- void MainWindow::slotDelete() { QString currname = cbList->currentItem()->text( posName ); if ( QPEMessageBox::confirmDelete ( this, tr( "Delete checkbook" ), currname ) ) { buildFilename( currname ); QFile f( tempFilename ); if ( f.exists() ) { f.remove(); } delete cbList->currentItem(); } } // --- slotConfigure ---------------------------------------------------------- void MainWindow::slotConfigure() { Configuration *cfgdlg = new Configuration( this, _cfg ); - cfgdlg->showMaximized(); - if ( cfgdlg->exec() == QDialog::Accepted ) + if ( QPEApplication::execDialog( cfgdlg ) == QDialog::Accepted ) { // read data from config dialog & save it cfgdlg->saveConfig( _cfg ); writeConfig(); buildList(); } delete cfgdlg; } // --- writeConfig -------------------------------------------------------------- void MainWindow::writeConfig() { Config config("checkbook"); _cfg.writeConfig( config ); } diff --git a/noncore/apps/odict/configdlg.cpp b/noncore/apps/odict/configdlg.cpp index 2103df9..b12a395 100644 --- a/noncore/apps/odict/configdlg.cpp +++ b/noncore/apps/odict/configdlg.cpp @@ -1,107 +1,108 @@ /*************************************************************************** application: : ODict begin : December 2002 copyright : ( C ) 2002, 2003 by Carsten Niehaus email : cniehaus@handhelds.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 "configdlg.h" #include "searchmethoddlg.h" -#include <qdialog.h> +#include <qpe/qpeapplication.h> #include <qpe/config.h> -#include <qlayout.h> +#include <qdialog.h> +#include <qlayout.h> #include <qhbox.h> #include <qvbox.h> #include <qlabel.h> #include <qlistview.h> #include <qpushbutton.h> #include <qlineedit.h> #include <qstringlist.h> ConfigDlg::ConfigDlg(QWidget *parent, const char *name, bool modal) : QDialog(parent, name, modal) { setCaption( tr( "Options" ) ); QVBoxLayout *vbox_layout = new QVBoxLayout( this ); search_tab = new QWidget( this , "search_tab" ); QVBoxLayout *vbox_layout_searchtab = new QVBoxLayout( search_tab, 4 , 4 ,"blah" ); - + QHBox *hbox = new QHBox( search_tab ); list = new QListView( hbox ); list->addColumn( tr( "Searchmethod" ) ); loadSearchMethodNames(); QVBox *vbox = new QVBox( hbox ); new_button = new QPushButton( tr( "New" ) , vbox ); change_button = new QPushButton( tr( "Change" ) , vbox ); delete_button = new QPushButton( tr( "Delete" ) , vbox ); connect( new_button, SIGNAL( clicked() ), this, SLOT( slotNewMethod() ) ); connect( change_button, SIGNAL( clicked() ), this, SLOT( slotChangeMethod() )); connect( delete_button, SIGNAL( clicked() ), this, SLOT( slotDeleteMethod() )); vbox_layout_searchtab->addWidget( hbox ); vbox_layout->addWidget( search_tab ); - showMaximized(); + QPEApplication::execDialog( this ); } void ConfigDlg::slotNewMethod() { SearchMethodDlg dlg( this, "SearchMethodDlg", true ); if ( dlg.exec() == QDialog::Accepted ) { dlg.saveItem(); QListViewItem *item = new QListViewItem( list ); item->setText( 0 , dlg.nameLE->text() ); } } void ConfigDlg::slotChangeMethod() { if ( list->selectedItem() ) { SearchMethodDlg dlg( this, "SearchMethodDlg", true, list->selectedItem()->text( 0 ) ); if ( dlg.exec() == QDialog::Accepted ) { dlg.saveItem(); QListViewItem *item = list->selectedItem(); item->setText( 0 , dlg.nameLE->text() ); } } } void ConfigDlg::slotDeleteMethod() { if ( list->selectedItem() ) { Config cfg ( "odict" ); cfg.setGroup( "Method_"+list->selectedItem()->text(0) ); cfg.clearGroup(); //FIXME: this only removes the entries but not the group itself list->takeItem( list->selectedItem() ); } } void ConfigDlg::loadSearchMethodNames() { Config cfg( "odict" ); QStringList groupListCfg = cfg.groupList().grep( "Method_" ); for ( QStringList::Iterator it = groupListCfg.begin() ; it != groupListCfg.end() ; ++it ) { QListViewItem *item = new QListViewItem( list ); cfg.setGroup( *it ); item->setText( 0 , cfg.readEntry( "Name" ) ); } } diff --git a/noncore/apps/odict/searchmethoddlg.cpp b/noncore/apps/odict/searchmethoddlg.cpp index 99cd8db..8ed7152 100644 --- a/noncore/apps/odict/searchmethoddlg.cpp +++ b/noncore/apps/odict/searchmethoddlg.cpp @@ -1,108 +1,109 @@ /*************************************************************************** application: : ODict begin : December 2002 copyright : ( C ) 2002, 2003 by Carsten Niehaus email : cniehaus@handhelds.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 "searchmethoddlg.h" -#include <qdialog.h> #include <qpe/config.h> -#include <qlayout.h> +#include <qpe/qpeapplication.h> +#include <qdialog.h> +#include <qlayout.h> #include <qhbox.h> #include <qvbox.h> #include <qlabel.h> #include <qpushbutton.h> #include <qstring.h> #include <qlineedit.h> #include <qdir.h> #include <opie/ofileselector.h> #include <opie/ofiledialog.h> SearchMethodDlg::SearchMethodDlg(QWidget *parent, const char *name, bool modal, QString itemname) : QDialog(parent, name, modal) { QVBoxLayout *vbox_layout = new QVBoxLayout( this, 4,4,"vbox_layout" ); QVBox *vbox = new QVBox( this ); QHBox *hbox1 = new QHBox( vbox ); QLabel *nameLabel = new QLabel( tr( "Name:" ) , hbox1 ); nameLE = new QLineEdit( hbox1 ); QLabel *dictLabel = new QLabel( tr( "Dictionary file" ), vbox ); QHBox *hbox2 = new QHBox( vbox ); dictFileLE = new QLineEdit( hbox2 ); QPushButton *browseButton = new QPushButton( tr( "Browse" ) , hbox2 ); connect( browseButton, SIGNAL( clicked() ), this, SLOT( slotBrowse() ) ); QWidget *dummywidget = new QWidget( vbox ); QLabel *lag1 = new QLabel( tr( "Language 1" ),dummywidget); QLabel *devider = new QLabel( tr( "Decollator" ),dummywidget); QLabel *lag2 = new QLabel( tr( "Language 2" ),dummywidget); lang1 = new QLineEdit( dummywidget ); lang2 = new QLineEdit( dummywidget ); trenner = new QLineEdit( dummywidget ); trenner->setText( "::" ); - + QGridLayout *grid = new QGridLayout( dummywidget, 2,3 ); grid->addWidget( lag1, 0,0 ); grid->addWidget( devider, 0,1 ); grid->addWidget( lag2, 0,2 ); grid->addWidget( lang1, 1,0 ); grid->addWidget( trenner, 1,1 ); grid->addWidget( lang2, 1,2 ); - + vbox_layout->addWidget( vbox ); - showMaximized(); - + QPEApplication::execDialog ( this ); + if( !itemname ) setCaption( tr( "New Searchmethod" ) ); - else + else { setCaption( tr( "Change Searchmethod" ) ); itemName = itemname; setupEntries(itemname); } } void SearchMethodDlg::setupEntries( QString item ) { Config cfg( "odict" ); cfg.setGroup( "Method_"+itemName ); trenner->setText( cfg.readEntry( "Seperator" ) ); lang1->setText( cfg.readEntry( "Lang1" ) ); lang2->setText( cfg.readEntry( "Lang2" ) ); nameLE->setText( itemName ); dictFileLE->setText( cfg.readEntry( "file" ) ); } void SearchMethodDlg::slotBrowse() { itemName=OFileDialog::getOpenFileName( OFileSelector::EXTENDED,QDir::homeDirPath()); dictFileLE->setText( itemName ); } void SearchMethodDlg::saveItem() { QString name = nameLE->text(); Config cfg( "odict" ); cfg.setGroup( "Method_"+name ); cfg.writeEntry( "Name", name ); cfg.writeEntry( "Seperator", trenner->text() ); cfg.writeEntry( "Lang1", lang1->text() ); cfg.writeEntry( "Lang2", lang2->text() ); cfg.writeEntry( "file", dictFileLE->text() ); } diff --git a/noncore/apps/opie-bartender/bartender.cpp b/noncore/apps/opie-bartender/bartender.cpp index 8c4ee93..cd0a364 100644 --- a/noncore/apps/opie-bartender/bartender.cpp +++ b/noncore/apps/opie-bartender/bartender.cpp @@ -1,447 +1,443 @@ /**************************************************************************** ** ** Created: Sat Jul 20 08:10:53 2002 ** by: L.J. Potter <ljp@llornkcor.com> ** copyright : (C) 2002 by ljp 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 "bartender.h" #include "newdrinks.h" #include "showdrinks.h" #include "inputDialog.h" #include "searchresults.h" #include "bac.h" #include <qpe/qpetoolbar.h> #include <qmenubar.h> #include <opie/colorpopupmenu.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qcstring.h> #include <qlineedit.h> #include <qdir.h> #include <qpushbutton.h> #include <qlistbox.h> #include <qstringlist.h> #include <qmultilineedit.h> #include <qmessagebox.h> #include <qfile.h> #include <qtextstream.h> #include <qfile.h> #include <qaction.h> #include <qheader.h> #include <qlistview.h> #include <qwidget.h> #include <qlayout.h> #include <qvariant.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h> #include <fcntl.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> Bartender::Bartender( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { if ( !name ) setName( "Bartender" ); QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 2); layout->setMargin( 2); connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); setCaption( tr( "Bartender" ) ); ToolBar1 = new QToolBar( this, "ToolBar1" ); ToolBar1->setFixedHeight(22); layout->addMultiCellWidget( ToolBar1, 0, 0, 0, 4 ); QMenuBar *menuBar = new QMenuBar( ToolBar1 ); QPopupMenu *fileMenu; fileMenu = new QPopupMenu( this); menuBar->insertItem( tr("File"), fileMenu ); fileMenu->insertItem(tr("New Drink")); fileMenu->insertItem(tr("Open Drink")); fileMenu->insertItem(tr("Find by Drink Name")); fileMenu->insertItem(tr("Find by Alcohol")); QPopupMenu *editMenu; editMenu = new QPopupMenu( this); menuBar->insertItem( tr("Edit"), editMenu ); editMenu->insertItem(tr("edit")); connect( fileMenu, SIGNAL( activated(int) ), this, SLOT( fileMenuActivated(int) )); connect( editMenu, SIGNAL( activated(int) ), this, SLOT( editMenuActivated(int) )); QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), "New", 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); a->addTo( ToolBar1 ); a = new QAction( tr( "Open" ), Resource::loadPixmap( "bartender/bartender_sm" ), "open", 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( openCurrentDrink() ) ); a->addTo( ToolBar1 ); a = new QAction( tr( "Find" ), Resource::loadPixmap( "find" ), "Find", 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( askSearch() ) ); a->addTo( ToolBar1 ); a = new QAction( tr( "Edit" ), Resource::loadPixmap( "edit" ),"Edit", 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( doEdit() ) ); a->addTo( ToolBar1 ); QPushButton *t; t= new QPushButton( "BAC", ToolBar1, "bacButtin"); connect( t, SIGNAL( clicked() ), this, SLOT( doBac() ) ); DrinkView = new QListView( this, "DrinkView" ); DrinkView->addColumn( tr( "Name of Drink" ) ); // DrinkView->setRootIsDecorated( TRUE ); DrinkView->header()->hide(); QPEApplication::setStylusOperation( DrinkView->viewport(),QPEApplication::RightOnHold); connect(DrinkView, SIGNAL( doubleClicked(QListViewItem*)),this,SLOT(showDrink( QListViewItem*))); connect(DrinkView, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), this,SLOT( showDrink(int, QListViewItem *, const QPoint&, int))); layout->addMultiCellWidget( DrinkView, 1, 2, 0, 4 ); if(QDir("db").exists()) { dbFile.setName( "db/drinkdb.txt"); } else dbFile.setName( QPEApplication::qpeDir()+"/etc/bartender/drinkdb.txt"); initDrinkDb(); } Bartender::~Bartender() { } /* this happens right before exit */ void Bartender::cleanUp() { dbFile.close(); } void Bartender::initDrinkDb() { if(!dbFile.isOpen()) if ( !dbFile.open( IO_ReadOnly)) { QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) ); return; } fillList(); } void Bartender::fillList() { dbFile.at(1); DrinkView->clear(); int i=0; QListViewItem * item ; QTextStream t( &dbFile); QString s; while ( !t.eof()) { s = t.readLine(); if(s.find("#",0,TRUE) != -1) { // qDebug(s.right(s.length()-2)); item= new QListViewItem( DrinkView, 0 ); item->setText( 0, s.right(s.length()-2)); i++; } } qDebug("there are currently %d of drinks", i); } void Bartender::fileNew() { New_Drink *newDrinks; newDrinks = new New_Drink(this,"New Drink....", TRUE); QString newName, newIng; - newDrinks->showMaximized(); - newDrinks->exec(); + QPEApplication::execDialog( newDrinks ); newName = newDrinks->LineEdit1->text(); newIng= newDrinks->MultiLineEdit1->text(); if(dbFile.isOpen()) dbFile.close(); if ( !dbFile.open( IO_WriteOnly| IO_Append)) { QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) ); return; } if(newDrinks ->result() == 1 ) { QString newDrink="\n# "+newName+"\n"; newDrink.append(newIng+"\n"); qDebug("writing "+newDrink); dbFile.writeBlock( newDrink.latin1(), newDrink.length()); clearList(); dbFile.close(); initDrinkDb(); } delete newDrinks; } void Bartender::showDrink(int mouse, QListViewItem * item, const QPoint&, int) { switch (mouse) { case 1: // showDrink(item); break; case 2: showDrink(item); break; } } void Bartender::showDrink( QListViewItem *item) { if(item==NULL) return; dbFile.at(0); Show_Drink *showDrinks; QString myDrink=item->text(0); showDrinks = new Show_Drink(this, myDrink, TRUE); QTextStream t( &dbFile); QString s, s2; while ( !t.eof()) { s = t.readLine(); if(s.find( myDrink, 0, TRUE) != -1) { for(int i=0;s2.find( "#", 0, TRUE) == -1;i++) { s2 = t.readLine(); if(s2.find("#",0,TRUE) == -1 || dbFile.atEnd() ) { // qDebug(s2); showDrinks->MultiLineEdit1->append(s2); } if( dbFile.atEnd() ) break; } } } - showDrinks->showMaximized(); - showDrinks->exec(); + QPEApplication::execDialog( showDrinks ); if(showDrinks ->result() ==0) { doEdit(); } delete showDrinks; } void Bartender::askSearch() { switch ( QMessageBox::warning(this,tr("Find"),tr("Search by drink name\n")+ "\nor alcohol ?" ,tr("Drink Name"),tr("Alcohol"),0,0,1) ) { case 0: doSearchByName(); break; case 1: doSearchByDrink(); break; }; } /* search by name */ void Bartender::doSearchByName() { // if( DrinkView->currentItem() == NULL) return; QStringList searchList; QString searchForDrinkName; InputDialog *fileDlg; fileDlg = new InputDialog(this,tr("Find by Drink Name"),TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { searchForDrinkName = fileDlg->LineEdit1->text(); QListViewItemIterator it( DrinkView ); for ( ; it.current(); ++it ) { if ( it.current()->text(0).find( searchForDrinkName, 0, TRUE) != -1 ) { // qDebug( it.current()->text(0)); searchList.append(it.current()->text(0)); } } if(searchList.count() >0) showSearchResult(searchList); else QMessageBox::message(tr("Search"),tr("Sorry no results for\n")+searchForDrinkName); }//end Inputdialog delete fileDlg; } void Bartender::doSearchByDrink() { // if( DrinkView->currentItem() == NULL) return; QStringList searchList; QString searchForDrinkName, lastDrinkName, tempName; InputDialog *fileDlg; fileDlg = new InputDialog(this,tr("Find by Alcohol"),TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { searchForDrinkName = fileDlg->LineEdit1->text(); dbFile.at(0); QTextStream t( &dbFile); QString s, s2; while ( !t.eof()) { s = t.readLine(); if(s.find("#",0,TRUE) != -1) { lastDrinkName=s.right(s.length()-2); // qDebug("last drink name "+lastDrinkName); } else if( s.find( searchForDrinkName ,0, FALSE) != -1 && lastDrinkName != tempName ) { // qDebug("appending "+lastDrinkName); searchList.append( lastDrinkName); tempName=lastDrinkName; } // if( dbFile.atEnd() ) break; } //oef if(searchList.count() >0) showSearchResult(searchList); else QMessageBox::message(tr("Search"),tr("Sorry no results for\n")+ searchForDrinkName); } delete fileDlg; } void Bartender::showSearchResult(QStringList &searchList) { QString result; Search_Results *searchDlg; searchList.sort(); searchDlg = new Search_Results(this, "Search Results", TRUE); - searchDlg->showMaximized(); searchDlg->ListBox1->insertStringList( searchList,-1); - searchDlg->exec(); + QPEApplication::execDialog( searchDlg ); if( searchDlg->result() == 1 ) { result= searchDlg->ListBox1->currentText(); } QListViewItemIterator it2( DrinkView ); for ( ; it2.current(); ++it2 ) { if ( it2.current()->text(0)== result ) { // qDebug( it2.current()->text(0)); showDrink(it2.current()); } } delete searchDlg; } void Bartender::doEdit() { if(DrinkView->currentItem() == NULL) { fileNew(); } QString myDrink; myDrink= DrinkView->currentItem()->text(0); dbFile.at(0); int foundAt=0; New_Drink *newDrinks; newDrinks = new New_Drink(this,"Edit Drink....", TRUE); QString newName, newIng; - newDrinks->showMaximized(); + QPEApplication::showDialog( newDrinks ); QTextStream t( &dbFile); - + QString s, s2; while ( !t.eof()) { s = t.readLine(); if(s.find( myDrink, 0, TRUE) != -1) { foundAt = dbFile.at() - (s.length()+1); for(int i=0;s2.find( "#", 0, TRUE) == -1;i++) { s2 = t.readLine(); if(s2.find("#",0,TRUE) == -1 || dbFile.atEnd() ) { // qDebug(s2); newDrinks->MultiLineEdit1->append(s2); newDrinks->LineEdit1->setText(myDrink); } if( dbFile.atEnd() ) break; } } } newDrinks->exec(); newName = newDrinks->LineEdit1->text(); newIng= newDrinks->MultiLineEdit1->text(); if( newDrinks ->result() == 1 ) { if(dbFile.isOpen()) dbFile.close(); if ( !dbFile.open( IO_ReadWrite )) { QMessageBox::message( (tr("Note")), (tr("Drink database not opened sucessfully.\n")) ); return; } int fd = dbFile.handle(); lseek( fd, foundAt, SEEK_SET); // dbFile.at( foundAt); #warning FIXME problems with editing drinks db ////////// FIXME write to user file QString newDrink="# "+newName+"\n"; newDrink.append(newIng+"\n"); qDebug("writing "+newDrink); dbFile.writeBlock( newDrink.latin1(), newDrink.length()); clearList(); dbFile.flush(); initDrinkDb(); } } void Bartender::clearList() { DrinkView->clear(); } void Bartender::doBac() { BacDialog *bacDlg; bacDlg = new BacDialog(this,"BAC",TRUE); - bacDlg->showMaximized(); - bacDlg->exec(); + QPEApplication::execDialog( bacDlg ); delete bacDlg; } void Bartender::openCurrentDrink() { if(DrinkView->currentItem() == NULL) return; showDrink(DrinkView->currentItem()); } void Bartender::fileMenuActivated( int item) { qDebug("Item %d", item); switch(item) { case -3: // new -3 fileNew(); break; case -4:// open -4 openCurrentDrink(); break; case -5:// drink -5 doSearchByName(); break; case -6:// alcohol -6 doSearchByDrink(); break; } } void Bartender::editMenuActivated(int item) { qDebug("Item %d", item); /* edit -8 */ switch(item) { case -8: doEdit() ; break; } } diff --git a/noncore/apps/opie-console/configdialog.cpp b/noncore/apps/opie-console/configdialog.cpp index b23f4d0..882cd3d 100644 --- a/noncore/apps/opie-console/configdialog.cpp +++ b/noncore/apps/opie-console/configdialog.cpp @@ -1,111 +1,111 @@ -#include <qlistview.h> +#include <qpe/qpeapplication.h> + +#include <qlistview.h> #include "configdialog.h" #include "profileeditordialog.h" class ConfigListItem : public QListViewItem { public: ConfigListItem( QListView* item, const Profile& ); ~ConfigListItem(); Profile profile()const; private: Profile m_prof; }; ConfigListItem::ConfigListItem( QListView* item, const Profile& prof ) : QListViewItem( item ), m_prof( prof ) { setText(0, prof.name() ); } ConfigListItem::~ConfigListItem() { } Profile ConfigListItem::profile()const { return m_prof; } /* Dialog */ ConfigDialog::ConfigDialog( const Profile::ValueList& lis, MetaFactory* fa, QWidget* parent ) : ConfigureBase( parent, 0, TRUE ), m_fact( fa ) { //init(); { Profile::ValueList::ConstIterator it; for (it = lis.begin(); it != lis.end(); ++it ) { new ConfigListItem( lstView, (*it) ); } } } ConfigDialog::~ConfigDialog() { } Profile::ValueList ConfigDialog::list()const { /* iterate over the list */ Profile::ValueList lst; QListViewItemIterator it(lstView); for ( ; it.current(); ++it ) { ConfigListItem* item = (ConfigListItem*)it.current(); lst.append( item->profile() ); } return lst; } /* our slots */ void ConfigDialog::slotRemove() { ConfigListItem* item = (ConfigListItem*)lstView->currentItem(); if (!item ) return; lstView->takeItem( item ); delete item; } void ConfigDialog::slotEdit() { Profile p; if(!lstView->currentItem()) return; // Load profile p = ((ConfigListItem*)lstView->currentItem())->profile(); ProfileEditorDialog dlg(m_fact, p); dlg.setCaption(tr("Edit Connection Profile")); - dlg.showMaximized(); - int ret = dlg.exec(); + int ret = QPEApplication::execDialog( &dlg ); if(ret == QDialog::Accepted) { if(lstView->currentItem()) delete lstView->currentItem(); // use dlg.terminal()! Profile p = dlg.profile(); new ConfigListItem(lstView, p); } } void ConfigDialog::slotAdd() { ProfileEditorDialog dlg(m_fact); dlg.setCaption(tr("New Connection")); - dlg.showMaximized(); - int ret = dlg.exec(); + int ret = QPEApplication::execDialog( &dlg ); if(ret == QDialog::Accepted) { // TODO: Move into general profile save part // assignments //QString type = dlg.term_type(); //if(type == "VT102") profile = Profile::VT102; // get profile from editor Profile p = dlg.profile(); new ConfigListItem(lstView, p); } } diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp index 2673335..3fe9040 100644 --- a/noncore/apps/opie-console/mainwindow.cpp +++ b/noncore/apps/opie-console/mainwindow.cpp @@ -1,729 +1,728 @@ #include <assert.h> #include <qaction.h> #include <qmenubar.h> #include <qtoolbar.h> #include <qmessagebox.h> #include <qwhatsthis.h> #include <qfileinfo.h> #include <qpe/filemanager.h> +#include <qpe/qpeapplication.h> #include <opie/ofiledialog.h> #include "TEmulation.h" #include "profileeditordialog.h" #include "configdialog.h" #include "default.h" #include "profilemanager.h" #include "mainwindow.h" #include "tabwidget.h" #include "transferdialog.h" #include "function_keyboard.h" #include "emulation_handler.h" #include "script.h" MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) { KeyTrans::loadAll(); for (int i = 0; i < KeyTrans::count(); i++ ) { KeyTrans* s = KeyTrans::find(i ); assert( s ); } m_factory = new MetaFactory(); Default def(m_factory); m_sessions.setAutoDelete( TRUE ); m_curSession = 0; m_manager = new ProfileManager( m_factory ); m_manager->load(); m_scriptsData.setAutoDelete(TRUE); initUI(); populateProfiles(); populateScripts(); } void MainWindow::initUI() { setToolBarsMovable( FALSE ); /* tool bar for the menu */ m_tool = new QToolBar( this ); m_tool->setHorizontalStretchable( TRUE ); m_bar = new QMenuBar( m_tool ); m_console = new QPopupMenu( this ); m_scripts = new QPopupMenu( this ); m_sessionsPop= new QPopupMenu( this ); m_scriptsPop = new QPopupMenu( this ); /* add a toolbar for icons */ m_icons = new QToolBar(this); /* * the settings action */ m_setProfiles = new QAction(tr("Configure Profiles"), Resource::loadPixmap( "SettingsIcon" ), QString::null, 0, this, 0); m_setProfiles->addTo( m_console ); connect( m_setProfiles, SIGNAL(activated() ), this, SLOT(slotConfigure() ) ); m_console->insertSeparator(); /* * new Action for new sessions */ QAction* newCon = new QAction(tr("New Profile"), Resource::loadPixmap( "new" ), QString::null, 0, this, 0); newCon->addTo( m_console ); connect( newCon, SIGNAL(activated() ), this, SLOT(slotNew() ) ); m_console->insertSeparator(); QAction *saveCon = new QAction( tr("Save Profile" ), Resource::loadPixmap( "save" ), QString::null, 0, this, 0 ); saveCon->addTo( m_console ); connect( saveCon, SIGNAL(activated() ), this, SLOT(slotSaveSession() ) ); m_console->insertSeparator(); /* * connect action */ m_connect = new QAction( tr("Connect"), Resource::loadPixmap("console/connected"), QString::null, 0, this, 0 ); m_connect->addTo( m_console ); connect(m_connect, SIGNAL(activated() ), this, SLOT(slotConnect() ) ); /* * disconnect action */ m_disconnect = new QAction( tr("Disconnect"), Resource::loadPixmap("console/notconnected"), QString::null, 0, this, 0 ); m_disconnect->addTo( m_console ); connect(m_disconnect, SIGNAL(activated() ), this, SLOT(slotDisconnect() ) ); m_console->insertSeparator(); m_quickLaunch = new QAction( tr("QuickLaunch"), Resource::loadPixmap("console/konsole_mini"), QString::null, 0, this, 0 ); m_quickLaunch->addTo( m_icons ); connect( m_quickLaunch, SIGNAL( activated() ), this, SLOT( slotQuickLaunch() ) ); QWhatsThis::add( m_icons, tr( "The shell button launches the \"default\" profile. If there is none default values are taken" ) ); m_transfer = new QAction( tr("Transfer file..."), Resource::loadPixmap("pass") , QString::null, 0, this, 0 ); m_transfer->addTo( m_console ); connect(m_transfer, SIGNAL(activated() ), this, SLOT(slotTransfer() ) ); /* * immediate change of line wrap policy */ m_isWrapped = false; m_wrap = new QAction( tr("Line wrap"), Resource::loadPixmap( "linewrap" ), QString::null, 0, this, 0 ); m_wrap->addTo( m_console ); connect( m_wrap, SIGNAL( activated() ), SLOT( slotWrap() ) ); /* * fullscreen */ m_isFullscreen = false; m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" ) , QString::null, 0, this, 0); m_fullscreen->addTo( m_console ); connect( m_fullscreen, SIGNAL( activated() ), this, SLOT( slotFullscreen() ) ); m_console->insertSeparator(); QAction *a = new QAction(); a->setText( tr("Save history") ); a->addTo( m_console ); connect(a, SIGNAL(activated() ), this, SLOT(slotSaveHistory() ) ); /* * terminate action */ m_terminate = new QAction(); m_terminate->setText( tr("Terminate") ); m_terminate->addTo( m_console ); connect(m_terminate, SIGNAL(activated() ), this, SLOT(slotTerminate() ) ); m_closewindow = new QAction(); m_closewindow->setText( tr("Close Window") ); m_closewindow->addTo( m_console ); connect( m_closewindow, SIGNAL(activated() ), this, SLOT(slotClose() ) ); /* * script actions */ m_runScript_id = m_scripts->insertItem(tr("Run Script"), m_scriptsPop, -1, 0); connect(m_scriptsPop, SIGNAL(activated(int)), this, SLOT(slotRunScript(int))); m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0); m_recordScript->addTo(m_scripts); connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript())); m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0); m_saveScript->addTo(m_scripts); connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript())); /* * action that open/closes the keyboard */ m_openKeys = new QAction (tr("Open Keyboard..."), Resource::loadPixmap( "console/keys/keyboard_icon" ), QString::null, 0, this, 0); m_openKeys->setToggleAction(true); connect (m_openKeys, SIGNAL(toggled(bool)), this, SLOT(slotOpenKeb(bool))); /* insert the submenu */ m_console->insertItem(tr("New from Profile"), m_sessionsPop, -1, 0); /* insert the connection menu */ m_bar->insertItem( tr("Connection"), m_console ); /* the scripts menu */ m_bar->insertItem( tr("Scripts"), m_scripts ); /* and the keyboard */ m_keyBar = new QToolBar(this); addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE ); m_keyBar->setHorizontalStretchable( TRUE ); m_keyBar->hide(); m_kb = new FunctionKeyboard(m_keyBar); connect(m_kb, SIGNAL(keyPressed(FKey, ushort, ushort, bool)), this, SLOT(slotKeyReceived(FKey, ushort, ushort, bool))); a = new QAction(tr("Copy"), Resource::loadPixmap("copy"), QString::null, 0, this, 0 ); //a->addTo( m_icons ); connect( a, SIGNAL(activated() ), this, SLOT(slotCopy() ) ); QAction *paste = new QAction(tr("Paste"), Resource::loadPixmap("paste"), QString::null, 0, this, 0 ); connect( paste, SIGNAL(activated() ), this, SLOT(slotPaste() ) ); newCon->addTo( m_icons ); //m_setProfiles->addTo( m_icons ); paste->addTo( m_icons ); m_openKeys->addTo(m_icons); m_fullscreen->addTo( m_icons ); m_connect->setEnabled( false ); m_disconnect->setEnabled( false ); m_terminate->setEnabled( false ); m_transfer->setEnabled( false ); m_scripts->setItemEnabled(m_runScript_id, false); m_recordScript->setEnabled( false ); m_saveScript->setEnabled( false ); m_fullscreen->setEnabled( false ); m_closewindow->setEnabled( false ); m_wrap->setEnabled( false ); /* * connect to the menu activation */ connect( m_sessionsPop, SIGNAL(activated( int ) ), this, SLOT(slotProfile( int ) ) ); m_consoleWindow = new TabWidget( this, "blah"); connect(m_consoleWindow, SIGNAL(activated(Session*) ), this, SLOT(slotSessionChanged(Session*) ) ); setCentralWidget( m_consoleWindow ); slotQuickLaunch(); } ProfileManager* MainWindow::manager() { return m_manager; } TabWidget* MainWindow::tabWidget() { return m_consoleWindow; } void MainWindow::populateProfiles() { m_sessionsPop->clear(); Profile::ValueList list = manager()->all(); for (Profile::ValueList::Iterator it = list.begin(); it != list.end(); ++it ) { m_sessionsPop->insertItem( (*it).name() ); } } void MainWindow::populateScripts() { m_scriptsPop->clear(); m_scriptsData.clear(); DocLnkSet files(QPEApplication::documentDir(), "text/plain"); QListIterator<DocLnk> dit(files.children()); for (; dit.current(); ++dit) { if (*dit && (*dit)->name().length()>0) { QFileInfo info((*dit)->file()); if (info.extension(false) == "script") { m_scriptsData.append(new DocLnk(**dit)); m_scriptsPop->insertItem((*dit)->name()); } } } } MainWindow::~MainWindow() { delete m_factory; manager()->save(); } MetaFactory* MainWindow::factory() { return m_factory; } Session* MainWindow::currentSession() { return m_curSession; } QList<Session> MainWindow::sessions() { return m_sessions; } void MainWindow::slotNew() { ProfileEditorDialog dlg(factory() ); - dlg.showMaximized(); dlg.setCaption( tr("New Connection") ); - int ret = dlg.exec(); + int ret = QPEApplication::execDialog( &dlg ); if ( ret == QDialog::Accepted ) { create( dlg.profile() ); } } void MainWindow::slotRecordScript() { if (currentSession()) { currentSession()->emulationHandler()->startRecording(); m_saveScript->setEnabled(true); m_recordScript->setEnabled(false); } } void MainWindow::slotSaveScript() { if (currentSession() && currentSession()->emulationHandler()->isRecording()) { QMap<QString, QStringList> map; QStringList text; text << "text/plain"; map.insert(tr("Script"), text ); QString filename = OFileDialog::getSaveFileName(2, QPEApplication::documentDir(), QString::null, map); if (!filename.isEmpty()) { QFileInfo info(filename); if (info.extension(FALSE) != "script") filename += ".script"; DocLnk nf; nf.setType("text/plain"); nf.setFile(filename); nf.setName(info.fileName()); FileManager fm; fm.saveFile(nf, currentSession()->emulationHandler()->script()->script()); currentSession()->emulationHandler()->clearScript(); m_saveScript->setEnabled(false); m_recordScript->setEnabled(true); populateScripts(); } } } void MainWindow::slotRunScript(int id) { if (currentSession()) { int index = m_scriptsPop->indexOf(id); DocLnk *lnk = m_scriptsData.at(index); QString filePath = lnk->file(); Script script(filePath); currentSession()->emulationHandler()->runScript(&script); } } void MainWindow::slotConnect() { if ( currentSession() ) { bool ret = currentSession()->layer()->open(); if(!ret) QMessageBox::warning(currentSession()->widgetStack(), QObject::tr("Failed"), QObject::tr("Connecting failed for this session.")); else { m_connect->setEnabled( false ); m_disconnect->setEnabled( true ); // if it does not support file transfer, disable the menu entry if ( ( m_curSession->layer() )->supports()[1] == 0 ) { m_transfer->setEnabled( false ); } else { m_transfer->setEnabled( true ); } m_recordScript->setEnabled( true ); m_scripts->setItemEnabled(m_runScript_id, true); } } } void MainWindow::slotDisconnect() { if ( currentSession() ) { currentSession()->layer()->close(); m_connect->setEnabled( true ); m_disconnect->setEnabled( false ); m_transfer->setEnabled( false ); m_recordScript->setEnabled( false); m_saveScript->setEnabled( false ); m_scripts->setItemEnabled(m_runScript_id, false); } } void MainWindow::slotTerminate() { if ( currentSession() ) currentSession()->layer()->close(); slotClose(); /* FIXME move to the next session */ } void MainWindow::slotQuickLaunch() { Profile prof = manager()->profile( "default" ); if ( prof.name() == "default" ) { create( prof ); } else { Profile newProf = Profile( "default", "console", "default" , 0, 3, 0 ); newProf.setAutoConnect( true ); create( newProf ); slotSaveSession(); } } void MainWindow::slotConfigure() { ConfigDialog conf( manager()->all(), factory() ); - conf.showMaximized(); - int ret = conf.exec(); + int ret = QPEApplication::execDialog( &conf ); if ( QDialog::Accepted == ret ) { manager()->setProfiles( conf.list() ); manager()->save(); populateProfiles(); } } /* * we will remove * this window from the tabwidget * remove it from the list * delete it * and set the currentSession() */ void MainWindow::slotClose() { if (!currentSession() ) return; Session* ses = currentSession(); qWarning("removing! currentSession %s", currentSession()->name().latin1() ); /* set to NULL to be safe, if its needed slotSessionChanged resets it automatically */ m_curSession = NULL; tabWidget()->remove( /*currentSession()*/ses ); /*it's autodelete */ m_sessions.remove( ses ); qWarning("after remove!!"); if (!currentSession() ) { m_connect->setEnabled( false ); m_disconnect->setEnabled( false ); m_terminate->setEnabled( false ); m_transfer->setEnabled( false ); m_recordScript->setEnabled( false ); m_saveScript->setEnabled( false ); m_scripts->setItemEnabled(m_runScript_id, false); m_fullscreen->setEnabled( false ); m_wrap->setEnabled( false ); m_closewindow->setEnabled( false ); } m_kb->loadDefaults(); } /* * We will get the name * Then the profile * and then we will make a profile */ void MainWindow::slotProfile( int id) { Profile prof = manager()->profile( m_sessionsPop->text( id) ); create( prof ); } void MainWindow::create( const Profile& prof ) { if(m_curSession) if(m_curSession->transferDialog()) m_curSession->transferDialog()->hide(); Session *ses = manager()->fromProfile( prof, tabWidget() ); if((!ses) || (!ses->layer()) || (!ses->widgetStack())) { QMessageBox::warning(this, QObject::tr("Session failed"), QObject::tr("<qt>Cannot open session: Not all components were found.</qt>")); //if(ses) delete ses; return; } m_sessions.append( ses ); tabWidget()->add( ses ); tabWidget()->repaint(); m_curSession = ses; // dicide if its a local term ( then no connction and no tranfer), maybe make a wrapper method out of it m_connect->setEnabled( true ); m_disconnect->setEnabled( false ); m_terminate->setEnabled( true ); m_fullscreen->setEnabled( true ); m_wrap->setEnabled( true ); m_closewindow->setEnabled( true ); m_transfer->setEnabled( false ); m_recordScript->setEnabled( false ); m_saveScript->setEnabled( false ); m_scripts->setItemEnabled(m_runScript_id, false); // is io_layer wants direct connection, then autoconnect //if ( ( m_curSession->layer() )->supports()[0] == 1 ) { if (prof.autoConnect()) { slotConnect(); } QWidget *w = currentSession()->widget(); if(w) w->setFocus(); if(currentSession()->profile().readNumEntry("Wrap", 80)){ m_isWrapped = true; } else { m_isWrapped = false; } m_kb->load(currentSession()->profile()); } void MainWindow::slotTransfer() { if ( currentSession() ) { Session *mysession = currentSession(); TransferDialog dlg(/*mysession->widgetStack()*/this, this); mysession->setTransferDialog(&dlg); //dlg.reparent(mysession->widgetStack(), QPoint(0, 0)); //dlg.showMaximized(); currentSession()->widgetStack()->addWidget(&dlg, -1); dlg.show(); //dlg.exec(); while(dlg.isRunning()) qApp->processEvents(); mysession->setTransferDialog(0l); } } void MainWindow::slotOpenKeb(bool state) { if (state) m_keyBar->show(); else m_keyBar->hide(); } void MainWindow::slotOpenButtons( bool state ) { if ( state ) { m_buttonBar->show(); } else { m_buttonBar->hide(); } } void MainWindow::slotSessionChanged( Session* ses ) { qWarning("changed!"); if(m_curSession) if(m_curSession->transferDialog()) m_curSession->transferDialog()->hide(); if(ses) if(ses->transferDialog()) ses->transferDialog()->show(); if ( ses ) { m_curSession = ses; qDebug(QString("is connected : %1").arg( m_curSession->layer()->isConnected() ) ); if ( m_curSession->layer()->isConnected() ) { m_connect->setEnabled( false ); m_disconnect->setEnabled( true ); m_recordScript->setEnabled(!m_curSession->emulationHandler()->isRecording()); m_saveScript->setEnabled(m_curSession->emulationHandler()->isRecording()); m_scripts->setItemEnabled(m_runScript_id, true); } else { m_connect->setEnabled( true ); m_disconnect->setEnabled( false ); m_recordScript->setEnabled( false ); m_saveScript->setEnabled( false ); m_scripts->setItemEnabled(m_runScript_id, false); } if ( ( m_curSession->layer() )->supports()[1] == 0 ) { m_transfer->setEnabled( false ); } else { m_transfer->setEnabled( true ); } QWidget *w = m_curSession->widget(); if(w) w->setFocus(); if(currentSession()->profile().readNumEntry("Wrap", 80)){ m_isWrapped = true; } else { m_isWrapped = false; } m_kb->load(currentSession()->profile()); } } void MainWindow::slotWrap() { if(m_curSession) { EmulationHandler *e = m_curSession->emulationHandler(); if(e) { if(m_isWrapped) { e->setWrap(80); m_isWrapped = false; } else { e->setWrap(0); m_isWrapped = true; } } } } void MainWindow::slotFullscreen() { if ( m_isFullscreen ) { ( m_curSession->widgetStack() )->reparent( savedParentFullscreen, 0, QPoint(0,0), true ); ( m_curSession->widgetStack() )->resize( savedParentFullscreen->width(), savedParentFullscreen->height() ); ( m_curSession->emulationHandler() )->cornerButton()->hide(); disconnect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) ); } else { savedParentFullscreen = ( m_curSession->widgetStack() )->parentWidget(); ( m_curSession->widgetStack() )->setFrameStyle( QFrame::NoFrame ); ( m_curSession->widgetStack() )->reparent( 0, WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop , QPoint(0,0), false ); ( m_curSession->widgetStack() )->resize( qApp->desktop()->width(), qApp->desktop()->height() ); ( m_curSession->widgetStack() )->setFocus(); ( m_curSession->widgetStack() )->show(); ( ( m_curSession->emulationHandler() )->cornerButton() )->show(); connect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) ); } m_isFullscreen = !m_isFullscreen; } void MainWindow::slotKeyReceived(FKey k, ushort, ushort, bool pressed) { if ( m_curSession ) { QEvent::Type state; if (pressed) state = QEvent::KeyPress; else state = QEvent::KeyRelease; QKeyEvent ke(state, k.qcode, k.unicode, 0, QString(QChar(k.unicode))); // is this the best way to do this? cant figure out any other way to work QApplication::sendEvent((QObject *)m_curSession->widget(), &ke); ke.ignore(); } } void MainWindow::slotCopy() { if (!currentSession() ) return; currentSession()->emulationHandler()->copy(); } void MainWindow::slotPaste() { if (!currentSession() ) return; currentSession()->emulationHandler()->paste(); } /* * Save the session */ void MainWindow::slotSaveSession() { if (!currentSession() ) { QMessageBox::information(this, tr("Save Connection"), tr("<qt>There is no Connection.</qt>"), 1 ); return; } manager()->add( currentSession()->profile() ); manager()->save(); populateProfiles(); } void MainWindow::slotSaveHistory() { QMap<QString, QStringList> map; QStringList text; text << "text/plain"; map.insert(tr("History"), text ); QString filename = OFileDialog::getSaveFileName(2, QPEApplication::documentDir(), QString::null, map); if (filename.isEmpty() ) return; QFileInfo info(filename); DocLnk nf; nf.setType("text/plain"); nf.setFile(filename); nf.setName(info.fileName()); QFile file(filename); file.open(IO_WriteOnly ); QTextStream str(&file ); if ( currentSession() ) currentSession()->emulationHandler()->emulation()->streamHistory(&str); file.close(); nf.writeLink(); } diff --git a/noncore/apps/opie-console/modemconfigwidget.cpp b/noncore/apps/opie-console/modemconfigwidget.cpp index e552990..3466e3a 100644 --- a/noncore/apps/opie-console/modemconfigwidget.cpp +++ b/noncore/apps/opie-console/modemconfigwidget.cpp @@ -1,255 +1,256 @@ + +#include <qpe/qpeapplication.h> + #include <qlabel.h> #include <qlayout.h> #include <qcombobox.h> #include <qpushbutton.h> #include <qhbox.h> #include "modemconfigwidget.h" #include "dialdialog.h" namespace { void setCurrent( const QString& str, QComboBox* bo ) { uint b = bo->count(); for (int i = 0; i < bo->count(); i++ ) { if ( bo->text(i) == str ) { bo->setCurrentItem( i ); return; } } bo->insertItem( str ); bo->setCurrentItem( b ); } } ModemConfigWidget::ModemConfigWidget( const QString& name, QWidget* parent, const char* na ) : ProfileDialogConnectionWidget( name, parent, na ) { m_lay = new QVBoxLayout( this ); m_device = new QLabel(tr( "Modem is attached to:" ), this ); m_deviceCmb = new QComboBox(this ); m_deviceCmb->setEditable( TRUE ); QLabel* telLabel = new QLabel( this ); telLabel->setText( tr( "Enter telefon number here:" ) ); QHBox *buttonBox = new QHBox( this ); m_telNumber = new QLineEdit( buttonBox ); QPushButton *atButton = new QPushButton( buttonBox ); atButton->setText( tr( "AT commands" ) ); connect( atButton, SIGNAL( clicked() ), this, SLOT( slotAT() ) ); QPushButton *dialButton = new QPushButton( buttonBox ); dialButton->setText( tr( "Enter number" ) ); connect( dialButton, SIGNAL( clicked() ), this, SLOT( slotDial() ) ); m_base = new IOLayerBase( this, "base" ); m_lay->addWidget( m_device ); m_lay->addWidget( m_deviceCmb ); m_lay->addWidget( telLabel ); m_lay->addWidget( buttonBox ); m_lay->addWidget( m_base ); m_lay->addStretch( 0 ); m_deviceCmb->insertItem( "/dev/ttyS0" ); m_deviceCmb->insertItem( "/dev/ttyS1" ); m_deviceCmb->insertItem( "/dev/ttyS2" ); atConf = new ATConfigDialog( this, "ATConfig", true ); } ModemConfigWidget::~ModemConfigWidget() { } void ModemConfigWidget::load( const Profile& prof ) { int rad_flow = prof.readNumEntry( "Flow" ); int rad_parity = prof.readNumEntry( "Parity" ); int speed = prof.readNumEntry( "Speed" ); int dbits = prof.readNumEntry("DataBits"); int sbits = prof.readNumEntry("StopBits"); QString number = prof.readEntry( "Number" ); if ( !number.isEmpty() ) { m_telNumber->setText( number ); } if ( rad_flow == 1 ) { m_base->setFlow( IOLayerBase::Hardware ); } else if (rad_flow == 2) { m_base->setFlow( IOLayerBase::Software ); } else if (rad_flow == 0) { m_base->setFlow( IOLayerBase::None ); } if ( rad_parity == 1 ) { m_base->setParity( IOLayerBase::Even ); } else if ( rad_parity == 2 ){ m_base->setParity( IOLayerBase::Odd ); } else { m_base->setParity( IOLayerBase::NonePar ); } switch( speed ) { case 115200: m_base->setSpeed( IOLayerBase::Baud_115200 ); break; case 57600: m_base->setSpeed( IOLayerBase::Baud_57600 ); break; case 38400: m_base->setSpeed( IOLayerBase::Baud_38400 ); break; case 19200: m_base->setSpeed( IOLayerBase::Baud_19200 ); break; case 9600: default: m_base->setSpeed( IOLayerBase::Baud_9600 ); break; } if ( dbits == 5) { m_base->setData( IOLayerBase::Data_Five ); } else if (rad_flow == 6) { m_base->setData( IOLayerBase::Data_Six ); } else if (rad_flow == 7) { m_base->setData( IOLayerBase::Data_Seven ); } else { m_base->setData( IOLayerBase::Data_Eight ); } if ( sbits == 2) { m_base->setStop( IOLayerBase::Stop_Two ); } else if ( sbits == 15 ) { m_base->setStop( IOLayerBase::Stop_OnePointFive ); } else { m_base->setStop( IOLayerBase::Stop_One ); } atConf->readConfig( prof ); if ( prof.readEntry( "Device" ).isEmpty() ) { qWarning("device empty!"); return; } setCurrent( prof.readEntry( "Device" ), m_deviceCmb ); } /* * save speed, * flow, * parity */ void ModemConfigWidget::save( Profile& prof ) { int flow, parity, speed, data, stop; flow = parity = speed = data = stop = 0; prof.writeEntry( "Device", m_deviceCmb->currentText() ); switch( m_base->flow() ) { case IOLayerBase::None: flow = 0; break; case IOLayerBase::Software: flow = 2; break; case IOLayerBase::Hardware: flow = 1; break; } switch( m_base->parity() ) { case IOLayerBase::Odd: parity = 2; break; case IOLayerBase::Even: parity = 1; break; case IOLayerBase::NonePar: parity = 0; break; } switch( m_base->speed() ) { case IOLayerBase::Baud_115200: speed = 115200; break; case IOLayerBase::Baud_57600: speed = 57600; break; case IOLayerBase::Baud_38400: speed = 38400; break; case IOLayerBase::Baud_19200: speed = 19200; break; case IOLayerBase::Baud_9600: speed = 9600; break; } switch( m_base->data() ) { case IOLayerBase::Data_Five: data = 5; break; case IOLayerBase::Data_Six: data = 6; break; case IOLayerBase::Data_Seven: data = 7; break; case IOLayerBase::Data_Eight: data = 8; break; } switch( m_base->stop() ) { case IOLayerBase::Stop_One: stop = 1; break; case IOLayerBase::Stop_OnePointFive: stop = 15; break; case IOLayerBase::Stop_Two: stop = 2; break; } prof.writeEntry( "Flow", flow ); prof.writeEntry( "Parity", parity ); prof.writeEntry( "Speed", speed ); prof.writeEntry("DataBits", data); prof.writeEntry("StopBits", stop); prof.writeEntry( "Number", m_telNumber->text() ); atConf->writeConfig(prof); } void ModemConfigWidget::slotAT() { // ATConfigDialog conf( this, "ATConfig", true ); // josef/Max I know why don't you create the stuff on the stack // but making it a TopLevel Dialog and ignoring // cancel is not fun either... // what to do? FIXME!!! -zecke - atConf->showMaximized(); - if ( atConf->exec() != QDialog::Accepted ) { + if ( QPEApplication::execDialog( atConf ) != QDialog::Accepted ) { // reload old settings } } void ModemConfigWidget::slotDial() { DialDialog dial( this, "DialConfig", true ); if(!m_telNumber->text().isEmpty()) { dial.setNumber(m_telNumber->text().replace(QRegExp("[\\-\\/\\ \\.\\,]"), "")); } - dial.showMaximized(); - if ( dial.exec() == QDialog::Accepted ) { + if ( QPEApplication::execDialog( &dial ) == QDialog::Accepted ) { m_telNumber->setText( dial.number() ); } } diff --git a/noncore/apps/opie-reader/CloseDialog.cpp b/noncore/apps/opie-reader/CloseDialog.cpp index 741fa67..d7c2652 100644 --- a/noncore/apps/opie-reader/CloseDialog.cpp +++ b/noncore/apps/opie-reader/CloseDialog.cpp @@ -1,18 +1,21 @@ #include "CloseDialog.h" #include "qlayout.h" +#include <qpe/qpeapplication.h> + CCloseDialog::CCloseDialog(const QString& fname, bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true) { setCaption(tr("Tidy-up")); QVBoxLayout *tmp = new QVBoxLayout(this); QVButtonGroup* vb = new QVButtonGroup(tr("Delete"), this); tmp->addWidget(vb); QString filestring = tr("Delete") + " " + fname; file = new QCheckBox(filestring, vb); marks = new QCheckBox(tr("Delete Bookmarks"), vb); config = new QCheckBox(tr("Delete Configuration"), vb); file->setChecked(false); marks->setChecked(true); config->setChecked(true); - if (fs) showMaximized(); + if (fs) + QPEApplication::showDialog( this ); } diff --git a/noncore/apps/opie-reader/Prefs.cpp b/noncore/apps/opie-reader/Prefs.cpp index e5320d9..5150ca5 100644 --- a/noncore/apps/opie-reader/Prefs.cpp +++ b/noncore/apps/opie-reader/Prefs.cpp @@ -1,636 +1,639 @@ /**************************************************************************** ** Form implementation generated from reading ui file 'Prefs.ui' ** ** Created: Tue Feb 11 23:53:35 2003 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "useqpe.h" #include "Prefs.h" #include <qcheckbox.h> #include <qlabel.h> #include <qpushbutton.h> #include <qspinbox.h> #include <qlayout.h> #include <qvariant.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qcombobox.h> #include <qbuttongroup.h> #include <qlineedit.h> #ifdef USEQPE #include <qpe/menubutton.h> #include <qpe/fontdatabase.h> #else #include <qfontdatabase.h> #endif +#include <qpe/qpeapplication.h> + CLayoutPrefs::CLayoutPrefs( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QHBoxLayout* hb = new QHBoxLayout(this); QButtonGroup* bg = new QButtonGroup(2, Qt::Horizontal, tr("Text"), this); hb->addWidget(bg); StripCR = new QCheckBox( bg ); StripCR->setText( tr( "Strip CR" ) ); Dehyphen = new QCheckBox( bg ); Dehyphen->setText( tr( "Dehyphen" ) ); SingleSpace = new QCheckBox( bg ); SingleSpace->setText( tr( "Single Space" ) ); Unindent = new QCheckBox( bg ); Unindent->setText( tr( "Unindent" ) ); Reparagraph = new QCheckBox( bg ); Reparagraph->setText( tr( "Reparagraph" ) ); DoubleSpace = new QCheckBox( bg ); DoubleSpace->setText( tr( "Double Space" ) ); Remap = new QCheckBox( bg ); Remap->setText( tr( "Remap" ) ); Embolden = new QCheckBox( bg ); Embolden->setText( tr( "Embolden" ) ); FullJustify = new QCheckBox( bg ); FullJustify->setText( tr( "Full Justify" ) ); } /* * Destroys the object and frees any allocated resources */ CLayoutPrefs::~CLayoutPrefs() { // no need to delete child widgets, Qt does it all for us } CLayoutPrefs2::CLayoutPrefs2( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QVBoxLayout* vb = new QVBoxLayout(this); QGridLayout* gl = new QGridLayout(vb, 4, 3); QLabel *TextLabel; TextLabel = new QLabel( this, "TextLabel1" ); TextLabel->setText( tr( "Indent" ) ); gl->addWidget(TextLabel, 0, 0); TextLabel = new QLabel( this ); TextLabel->setText( tr( "Page\nOverlap" ) ); gl->addWidget(TextLabel, 0, 1); TextLabel = new QLabel( this ); TextLabel->setText( tr( "Graphics\nZoom" ) ); gl->addWidget(TextLabel, 0, 2); Indent = new QSpinBox( this, "Indent" ); Indent->setRange(0,20); gl->addWidget(Indent, 1, 0); pageoverlap = new QSpinBox( this ); pageoverlap->setRange(0,20); gl->addWidget(pageoverlap, 1, 1); gfxzoom = new QSpinBox( this ); gfxzoom->setRange(0,100); gl->addWidget(gfxzoom, 1, 2); TextLabel = new QLabel( this, "TextLabel4" ); TextLabel->setText( tr( "Margin" ) ); gl->addWidget(TextLabel, 2, 0); TextLabel = new QLabel( this ); TextLabel->setText( tr( "Paragraph\nLeading" ) ); gl->addWidget(TextLabel, 2, 1); TextLabel = new QLabel( this ); TextLabel->setText( tr( "Line\nLeading" ) ); gl->addWidget(TextLabel, 2, 2); Margin = new QSpinBox( this, "Margin" ); Margin->setRange(0, 100); gl->addWidget(Margin, 3, 0); ParaLead = new QSpinBox( this ); ParaLead->setRange(-5, 50); gl->addWidget(ParaLead, 3, 1); LineLead = new QSpinBox( this ); LineLead->setRange(-5, 50); gl->addWidget(LineLead, 3, 2); gl = new QGridLayout(vb, 2, 2); TextLabel = new QLabel( this); TextLabel->setText( tr( "Markup" ) ); gl->addWidget(TextLabel, 0, 0, Qt::AlignBottom); TextLabel = new QLabel( this); TextLabel->setText( tr( "Font" ) ); gl->addWidget(TextLabel, 0, 1, Qt::AlignBottom); #ifdef USECOMBO Markup = new QComboBox( this); #else Markup = new MenuButton( this); #endif Markup->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); Markup->insertItem("Auto"); Markup->insertItem("None"); Markup->insertItem("Text"); Markup->insertItem("HTML"); Markup->insertItem("PML"); gl->addWidget(Markup, 1, 0, Qt::AlignTop); #ifdef USECOMBO fontselector = new QComboBox( this); #else fontselector = new MenuButton( this); #endif fontselector->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); { #ifdef USEQPE FontDatabase f; #else QFontDatabase f; #endif QStringList flist = f.families(); for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++) { fontselector->insertItem(*nm); } } // delete the FontDatabase!!! gl->addWidget(fontselector, 1, 1, Qt::AlignTop); } /* CLayoutPrefs2::CLayoutPrefs2( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QHBoxLayout* hb = new QHBoxLayout(this); QVBoxLayout* vb = new QVBoxLayout; hb->addLayout(vb); QLabel *TextLabel; TextLabel = new QLabel( this, "TextLabel1" ); TextLabel->setText( tr( "Indent" ) ); vb->addWidget( TextLabel, 0, Qt::AlignBottom ); Indent = new QSpinBox( this, "Indent" ); Indent->setRange(0,20); vb->addWidget( Indent, 0, Qt::AlignLeft ); TextLabel = new QLabel( this ); TextLabel->setText( tr( "Page\nOverlap" ) ); vb->addWidget( TextLabel, 0, Qt::AlignBottom ); pageoverlap = new QSpinBox( this ); pageoverlap->setRange(0,20); vb->addWidget( pageoverlap, 0, Qt::AlignLeft ); TextLabel = new QLabel( this ); TextLabel->setText( tr( "Graphics\nZoom" ) ); vb->addWidget( TextLabel, 0, Qt::AlignBottom ); gfxzoom = new QSpinBox( this ); gfxzoom->setRange(0,100); vb->addWidget( gfxzoom, 0, Qt::AlignLeft ); vb->addStretch(); vb = new QVBoxLayout; hb->addLayout(vb); TextLabel = new QLabel( this, "TextLabel4" ); TextLabel->setText( tr( "Margin" ) ); vb->addWidget( TextLabel, 0, Qt::AlignBottom ); Margin = new QSpinBox( this, "Margin" ); Margin->setRange(0, 100); vb->addWidget( Margin, 0, Qt::AlignLeft ); TextLabel = new QLabel( this ); TextLabel->setText( tr( "Paragraph\nLeading" ) ); vb->addWidget( TextLabel, 0, Qt::AlignBottom ); ParaLead = new QSpinBox( this ); ParaLead->setRange(-5, 50); vb->addWidget( ParaLead, 0, Qt::AlignLeft ); TextLabel = new QLabel( this ); TextLabel->setText( tr( "Line\nLeading" ) ); vb->addWidget( TextLabel, 0, Qt::AlignBottom ); LineLead = new QSpinBox( this ); LineLead->setRange(-5, 50); vb->addWidget( LineLead, 0, Qt::AlignLeft ); vb->addStretch(); vb = new QVBoxLayout; hb->addLayout(vb); TextLabel = new QLabel( this); TextLabel->setText( tr( "Markup" ) ); vb->addWidget( TextLabel, 0, Qt::AlignBottom ); Markup = new MenuButton( this); Markup->insertItem("Auto"); Markup->insertItem("None"); Markup->insertItem("Text"); Markup->insertItem("HTML"); Markup->insertItem("PML"); vb->addWidget( Markup, 0, Qt::AlignLeft ); TextLabel = new QLabel( this); TextLabel->setText( tr( "Font" ) ); vb->addWidget( TextLabel, 0, Qt::AlignBottom ); fontselector = new MenuButton( this); fontselector->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); { FontDatabase f; QStringList flist = f.families(); for (QStringList::Iterator nm = flist.begin(); nm != flist.end(); nm++) { fontselector->insertItem(*nm); } } // delete the FontDatabase!!! vb->addWidget( fontselector, 0, Qt::AlignLeft ); vb->addStretch(); } */ /* * Destroys the object and frees any allocated resources */ CLayoutPrefs2::~CLayoutPrefs2() { // no need to delete child widgets, Qt does it all for us } /* CPluckerPrefs::CPluckerPrefs( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { Layout11 = new QVBoxLayout(this); Layout11->setMargin( 0 ); Depluck = new QCheckBox( this, "Depluck" ); Depluck->setText( tr( "Depluck" ) ); Layout11->addWidget( Depluck ); Dejpluck = new QCheckBox( this, "Dejpluck" ); Dejpluck->setText( tr( "Dejpluck" ) ); Layout11->addWidget( Dejpluck ); Continuous = new QCheckBox( this, "Continuous" ); Continuous->setText( tr( "Continuous" ) ); Layout11->addWidget( Continuous ); } CPluckerPrefs::~CPluckerPrefs() { // no need to delete child widgets, Qt does it all for us } */ /* CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QVBoxLayout* Layout11 = new QVBoxLayout(this); Layout11->setMargin( 0 ); QHBoxLayout* hl = new QHBoxLayout; QLabel* TextLabel = new QLabel( this ); TextLabel->setText( tr( "Action for\nSelect Button" ) ); hl->addWidget(TextLabel); action = new QComboBox( this ); action->insertItem("Open file"); action->insertItem("Autoscroll"); action->insertItem("Mark"); action->insertItem("Annotate"); action->insertItem("Fullscreen"); hl->addWidget( action ); Layout11->addLayout(hl); hl = new QHBoxLayout; TextLabel = new QLabel( this ); TextLabel->setText( tr( "Dictionary\nApplication" ) ); hl->addWidget(TextLabel); target = new QLineEdit(this); hl->addWidget( target ); Layout11->addLayout(hl); QButtonGroup* bg = new QButtonGroup(1, Qt::Horizontal, "Selection Target", this); Layout11->addWidget( bg ); annotation = new QCheckBox( bg ); annotation->setText( tr( "Annotation" ) ); dictionary = new QCheckBox( bg ); dictionary->setText( tr( "Dictionary" ) ); clipboard = new QCheckBox( bg ); clipboard->setText( tr( "Clipboard" ) ); } CMiscPrefs::~CMiscPrefs() { // no need to delete child widgets, Qt does it all for us } */ CMiscPrefs::CMiscPrefs( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QGridLayout* hl = new QGridLayout(this,1,2); hl->setMargin( 0 ); QGroupBox* gb = new QGroupBox(1, Qt::Horizontal, tr("Select Action"), this); hl->addWidget( gb, 0, 0 ); annotation = new QCheckBox( gb ); annotation->setText( tr( "Annotation" ) ); dictionary = new QCheckBox( gb ); dictionary->setText( tr( "Dictionary" ) ); clipboard = new QCheckBox( gb ); clipboard->setText( tr( "Clipboard" ) ); QButtonGroup* bg = new QButtonGroup(1, Qt::Horizontal, tr("Plucker"), this); hl->addWidget( bg, 0 , 1 ); Depluck = new QCheckBox( bg ); Depluck->setText( tr( "Depluck" ) ); Dejpluck = new QCheckBox( bg ); Dejpluck->setText( tr( "Dejpluck" ) ); Continuous = new QCheckBox( bg ); Continuous->setText( tr( "Continuous" ) ); /* QGroupBox* gb = new QGroupBox(1, Qt::Horizontal, "Navigation", this); TextLabel = new QLabel( gb ); TextLabel->setText( tr( "Overlap" ) ); QSpinBox* sb = new QSpinBox( gb ); Internationalisation Ideogram/Word Set Width Set Encoding Set Font */ } CMiscPrefs::~CMiscPrefs() { // no need to delete child widgets, Qt does it all for us } CPrefs::CPrefs(bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true) { setCaption(tr( "OpieReader Settings" ) ); QTabWidget* td = new QTabWidget(this); layout = new CLayoutPrefs(this); layout2 = new CLayoutPrefs2(this); misc = new CMiscPrefs(this); button = new CButtonPrefs(this); inter = new CInterPrefs(this); td->addTab(layout, tr("Layout")); td->addTab(layout2, tr("Layout(2)")); td->addTab(inter, tr("Locale")); td->addTab(misc, tr("Misc")); td->addTab(button, tr("Buttons")); QVBoxLayout* v = new QVBoxLayout(this); v->addWidget(td); - if (fs) showMaximized(); + if (fs) + QPEApplication::showDialog( this ); } /* Unicode Ideo/Word Width Encoding */ #include "CEncoding_tables.h" CInterPrefs::CInterPrefs( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QHBoxLayout* hb = new QHBoxLayout(this); QGroupBox* gb = new QGroupBox(1, Qt::Horizontal, tr("International"), this); hb->addWidget(gb); QLabel *TextLabel; ideogram = new QCheckBox( gb ); ideogram->setText( tr( "Ideograms" ) ); TextLabel = new QLabel( gb ); TextLabel->setText( tr( "Ideogram Width" ) ); ideogramwidth = new QSpinBox( gb ); ideogramwidth->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); ideogramwidth->setRange(1,200); propfontchange = new QCheckBox( gb ); propfontchange->setText( tr( "Apply font\nto dialogs" ) ); TextLabel = new QLabel( gb ); TextLabel->setText( tr( "Encoding" ) ); #ifdef USECOMBO encoding = new QComboBox(gb); #else encoding = new MenuButton(gb); #endif encoding->insertItem("Ascii"); encoding->insertItem("UTF-8"); encoding->insertItem("UCS-2(BE)"); encoding->insertItem("USC-2(LE)"); encoding->insertItem("Palm"); for (unicodetable::iterator iter = unicodetable::begin(); iter != unicodetable::end(); iter++) { encoding->insertItem(iter->mime); } QVBoxLayout* vb = new QVBoxLayout; gb = new QGroupBox(1, Qt::Horizontal, tr("Dictionary"), this); TextLabel = new QLabel( gb ); TextLabel->setText( tr( "Application" ) ); application = new QLineEdit(gb); application->setFixedWidth(80); TextLabel = new QLabel( gb ); TextLabel->setText( tr( "Message" ) ); message = new QLineEdit(gb); message->setFixedWidth(80); // message->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); twotouch = new QCheckBox( gb ); twotouch->setText( tr( "Two/One\nTouch" ) ); SwapMouse = new QCheckBox( gb ); SwapMouse->setText(tr("Swap Tap\nActions") ); vb->addWidget(gb); // vb->addStretch(); hb->addLayout(vb); } CInterPrefs::~CInterPrefs() { // no need to delete child widgets, Qt does it all for us } #ifdef USECOMBO void CButtonPrefs::populate(QComboBox *mb) #else void CButtonPrefs::populate(MenuButton *mb) #endif { mb->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); mb->insertItem(tr("<Nothing>") ); mb->insertItem(tr("Open file") ); mb->insertItem(tr("Autoscroll") ); mb->insertItem(tr("Bookmark") ); mb->insertItem(tr("Annotate") ); mb->insertItem(tr("Fullscreen") ); mb->insertItem(tr("Zoom in") ); mb->insertItem(tr("Zoom out") ); mb->insertItem(tr("Back") ); mb->insertItem(tr("Forward") ); mb->insertItem(tr("Home") ); mb->insertItem(tr("Page up") ); mb->insertItem(tr("Page down") ); mb->insertItem(tr("Line up") ); mb->insertItem(tr("Line down") ); mb->insertItem(tr("Beginning") ); mb->insertItem(tr("End") ); } CButtonPrefs::CButtonPrefs( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QGridLayout* hl = new QGridLayout(this,10,2); hl->setMargin( 0 ); QLabel* ql = new QLabel(tr("Escape Button"), this); hl->addWidget(ql, 0, 0, Qt::AlignBottom); #ifdef USECOMBO escapeAction = new QComboBox( this ); #else escapeAction = new MenuButton( this ); #endif populate(escapeAction); hl->addWidget(escapeAction, 1, 0, Qt::AlignTop | Qt::AlignLeft); ql = new QLabel(tr("Space Button"), this); hl->addWidget(ql, 2, 0, Qt::AlignBottom); #ifdef USECOMBO spaceAction = new QComboBox( this ); #else spaceAction = new MenuButton( this ); #endif populate(spaceAction); hl->addWidget(spaceAction, 3, 0, Qt::AlignTop | Qt::AlignLeft); ql = new QLabel(tr("Return Button"), this); hl->addWidget(ql, 2, 1, Qt::AlignBottom); #ifdef USECOMBO returnAction = new QComboBox( this ); #else returnAction = new MenuButton( this ); #endif populate(returnAction); hl->addWidget(returnAction, 3, 1, Qt::AlignTop | Qt::AlignLeft); ql = new QLabel(tr("Left Arrow"), this); hl->addWidget(ql, 4, 0, Qt::AlignBottom); #ifdef USECOMBO leftAction = new QComboBox( this ); #else leftAction = new MenuButton( this ); #endif populate(leftAction); hl->addWidget(leftAction, 5, 0, Qt::AlignTop | Qt::AlignLeft); leftScroll = new QCheckBox( tr("Scroll Speed"), this ); hl->addWidget(leftScroll, 6, 0, Qt::AlignTop | Qt::AlignLeft); ql = new QLabel(tr("Right Arrow"), this); hl->addWidget(ql, 4, 1, Qt::AlignBottom); #ifdef USECOMBO rightAction = new QComboBox( this ); #else rightAction = new MenuButton( this ); #endif populate(rightAction); hl->addWidget(rightAction, 5, 1, Qt::AlignTop | Qt::AlignLeft); rightScroll = new QCheckBox( tr("Scroll Speed"), this ); hl->addWidget(rightScroll, 6, 1, Qt::AlignTop | Qt::AlignLeft); ql = new QLabel(tr("Down Arrow"), this); hl->addWidget(ql, 7, 0, Qt::AlignBottom); #ifdef USECOMBO downAction = new QComboBox( this ); #else downAction = new MenuButton( this ); #endif populate(downAction); hl->addWidget(downAction, 8, 0, Qt::AlignTop | Qt::AlignLeft); downScroll = new QCheckBox( tr("Scroll Speed"), this ); hl->addWidget(downScroll, 9, 0, Qt::AlignTop | Qt::AlignLeft); ql = new QLabel(tr("Up Arrow"), this); hl->addWidget(ql, 7, 1, Qt::AlignBottom); #ifdef USECOMBO upAction = new QComboBox( this ); #else upAction = new MenuButton( this ); #endif populate(upAction); hl->addWidget(upAction, 8, 1, Qt::AlignTop | Qt::AlignLeft); upScroll = new QCheckBox( tr("Scroll Speed"), this ); hl->addWidget(upScroll, 9, 1, Qt::AlignTop | Qt::AlignLeft); } CButtonPrefs::~CButtonPrefs() { // no need to delete child widgets, Qt does it all for us } diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp index f10020a..07af597 100644 --- a/noncore/apps/opie-reader/QTReaderApp.cpp +++ b/noncore/apps/opie-reader/QTReaderApp.cpp @@ -1,4222 +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> -#ifdef USEQPE -#include <qmenubar.h> -#include <qpe/qpetoolbar.h> -#endif -#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> - -#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 "useqpe.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" ); - 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() ); - ++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")); - - 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); -*/ - 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" ); - d = QDir::home(); - d.mkdir(APPDIR); - d.cd(APPDIR); - } - QFileInfo fi(d, INIFILE); -// qDebug("Path:%s", (const char*)fi.absFilePath()); - 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"); - readfilelist(); - - reader = new QTReader( editorStack ); - - reader->bDoUpdates = false; - -#ifdef USEQPE - ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold); -#endif - -// qDebug("Reading config"); -// 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"); - 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"); - reader->init(); -// qDebug("Inited"); -// m_buttonAction[m_spaceTarget]->setOn(true); -// qDebug("fonting"); - do_setfont(reader->m_fontname); - if (!reader->m_lastfile.isEmpty()) - { -// qDebug("doclnk"); -// doc = new DocLnk(reader->m_lastfile); -// qDebug("doclnk done"); - 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())); - p = NULL; - } - if (p != NULL) - { -// qDebug("openfrombkmk"); - if (!openfrombkmk(p)) - showEditTools(); - } - else - { -// qDebug("openfile"); - openFile( reader->m_lastfile ); - } - } - else - { -// qDebug("Openfile 2"); - 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"); -} - -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"); - fileBar = menubar; - break; - default: - qDebug("Incorrect toolbar policy set"); - case cesMenuTool: - case cesMultiple: -// qDebug("Creating new file bar"); - 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"); - 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"); - navBar = new QToolBar("Navigation", this, m_tbposition); - break; - default: - qDebug("Incorrect toolbar policy set"); - case cesSingle: - case cesMenuTool: - navBar = fileBar; -// qDebug("Setting navbar to filebar"); - 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"); - 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); - - 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())); - 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); - 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); -// getstate(data, dlen); - iter->setAnno(data, dlen); - notadded = false; - delete [] data; - break; - } - } - } -// qDebug("Added?:%x", notadded); - 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); - delete [] data; - } - delete [] nm; - delete [] fl; -} - -void QTReaderApp::fileOpen() -{ -/* - menu->hide(); - fileBar->hide(); - if (regVisible) regBar->hide(); - if (searchVisible) searchBar->hide(); -*/ -// qDebug("fileOpen"); -// 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); -} - -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); - 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"); - } - 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 ); - 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 ); - 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"); -#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); - pbar->hide(); -// qDebug("Hid"); - reader->locate(pos+offset); -// qDebug("Loacted"); -// qDebug("page up"); - 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); -// 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"); - 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"); - if (m_disableesckey) - { - m_disableesckey = false; - } - else - { - m_bcloseDisabled = true; - if (m_fullscreen) - { - m_actFullscreen->setOn(false); - e->accept(); - } - else - { -// qDebug("escape action"); - 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"); -#ifdef USEQPE - Global::hideInputMethod(); -#endif -// qDebug("eb"); - 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"); - showNormal(); -// qDebug("sm"); -#ifdef USEQPE - showMaximized(); -#endif -// setCentralWidget(reader); - } - -// qDebug("uc"); - updateCaption(); -// qDebug("rw"); - editorStack->raiseWidget( reader ); -// qDebug("sf"); - 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"); - 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"); - 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())); - 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"); - regBar->show(); -// qDebug("Showing kbd"); -#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"); - if (!fn.isEmpty() && QFileInfo(fn).isFile()) - { -// qDebug("Opening"); - 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"); -// 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()); - 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); - 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"); - } - else - { - qDebug("NO"); - } - 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"); - 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); - if (m_fontAction == cChooseEncoding) - { - reader->setencoding(i); - } - reader->refresh(); - m_fontBar->hide(); - m_fontVisible = false; -// qDebug("showedit"); - if (reader->isVisible()) showEditTools(); -// qDebug("showeditdone"); -} - -void QTReaderApp::do_setfont(const QString& lcn) -{ - if (m_fontAction == cChooseFont) - { - setfontHelper(lcn); - } - reader->refresh(); - m_fontBar->hide(); - m_fontVisible = false; -// qDebug("showedit"); - //if (reader->isVisible()) - showEditTools(); -// qDebug("showeditdone"); -} - -void QTReaderApp::do_autogen(const QString& regText) -{ - unsigned long fs, ts; - reader->sizes(fs,ts); -// // qDebug("Reg:%s\n", (const tchar*)(regEdit->text())); - 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"); -// 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"); - reader->setText(true); -// qDebug("settext called"); - showEditTools(); -// qDebug("showedit called"); -} -*/ - -/* -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"); - pOpenlist = bf.readall(); -// if (pOpenlist != NULL) qDebug("...with success"); -// else qDebug("...without success!"); -} - -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"); - 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); - - 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"); - 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); - 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); -#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); - QDir d = QDir::home(); // "/" - if ( !d.cd(_txt) ) - { // "/tmp" - qWarning( "Cannot find the \"~/%s\" directory", (const char*)_txt ); - 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" ); - d = QDir::home(); - d.mkdir(APPDIR); - d.cd(APPDIR); - } - if ( !d.cd("configs") ) - { // "/tmp" - qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" ); - d = QDir::home(); - d.cd(APPDIR); - d.mkdir("configs"); - d.cd("configs"); - } - fi.setFile(d, _txt); - } -// qDebug("Path:%s", (const char*)fi.absFilePath()); - 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 ); - 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" ); - d = QDir::home(); - d.mkdir(APPDIR); - d.cd(APPDIR); - } - if ( !d.cd("configs") ) - { // "/tmp" - qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" ); - 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" ); - d = QDir::home(); - d.mkdir(APPDIR); - d.cd(APPDIR); - } - if ( !d.cd(tgtdir) ) { // "/tmp" - qWarning( "Cannot find the \"~/" APPDIR "/%s\" directory", tgtdir ); - 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() ); - ++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); - } - 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" ); - d = QDir::home(); - d.mkdir(APPDIR); - d.cd(APPDIR); - } - if ( !d.cd("urls") ) - { // "/tmp" - qWarning( "Cannot find the \"~/" APPDIR "/urls\" directory" ); - 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"); - } -} +/**********************************************************************
+** 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>
+#ifdef USEQPE
+#include <qmenubar.h>
+#include <qpe/qpetoolbar.h>
+#endif
+#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>
+
+#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 "useqpe.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" );
+ 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() );
+ ++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"));
+
+ 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);
+*/
+ 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" );
+ d = QDir::home();
+ d.mkdir(APPDIR);
+ d.cd(APPDIR);
+ }
+ QFileInfo fi(d, INIFILE);
+// qDebug("Path:%s", (const char*)fi.absFilePath());
+ 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");
+ readfilelist();
+
+ reader = new QTReader( editorStack );
+
+ reader->bDoUpdates = false;
+
+#ifdef USEQPE
+ ((QPEApplication*)qApp)->setStylusOperation(reader, QPEApplication::RightOnHold);
+#endif
+
+// qDebug("Reading config");
+// 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");
+ 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");
+ reader->init();
+// qDebug("Inited");
+// m_buttonAction[m_spaceTarget]->setOn(true);
+// qDebug("fonting");
+ do_setfont(reader->m_fontname);
+ if (!reader->m_lastfile.isEmpty())
+ {
+// qDebug("doclnk");
+// doc = new DocLnk(reader->m_lastfile);
+// qDebug("doclnk done");
+ 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()));
+ p = NULL;
+ }
+ if (p != NULL)
+ {
+// qDebug("openfrombkmk");
+ if (!openfrombkmk(p))
+ showEditTools();
+ }
+ else
+ {
+// qDebug("openfile");
+ openFile( reader->m_lastfile );
+ }
+ }
+ else
+ {
+// qDebug("Openfile 2");
+ 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");
+}
+
+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");
+ fileBar = menubar;
+ break;
+ default:
+ qDebug("Incorrect toolbar policy set");
+ case cesMenuTool:
+ case cesMultiple:
+// qDebug("Creating new file bar");
+ 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");
+ 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");
+ navBar = new QToolBar("Navigation", this, m_tbposition);
+ break;
+ default:
+ qDebug("Incorrect toolbar policy set");
+ case cesSingle:
+ case cesMenuTool:
+ navBar = fileBar;
+// qDebug("Setting navbar to filebar");
+ 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");
+ 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);
+
+ 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()));
+ 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);
+ 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);
+// getstate(data, dlen);
+ iter->setAnno(data, dlen);
+ notadded = false;
+ delete [] data;
+ break;
+ }
+ }
+ }
+// qDebug("Added?:%x", notadded);
+ 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);
+ delete [] data;
+ }
+ delete [] nm;
+ delete [] fl;
+}
+
+void QTReaderApp::fileOpen()
+{
+/*
+ menu->hide();
+ fileBar->hide();
+ if (regVisible) regBar->hide();
+ if (searchVisible) searchBar->hide();
+*/
+// qDebug("fileOpen");
+// 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);
+}
+
+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);
+ 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");
+ }
+ 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 );
+ 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 );
+ 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");
+#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);
+ pbar->hide();
+// qDebug("Hid");
+ reader->locate(pos+offset);
+// qDebug("Loacted");
+// qDebug("page up");
+ 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);
+// 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");
+ 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");
+ if (m_disableesckey)
+ {
+ m_disableesckey = false;
+ }
+ else
+ {
+ m_bcloseDisabled = true;
+ if (m_fullscreen)
+ {
+ m_actFullscreen->setOn(false);
+ e->accept();
+ }
+ else
+ {
+// qDebug("escape action");
+ 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");
+#ifdef USEQPE
+ Global::hideInputMethod();
+#endif
+// qDebug("eb");
+ 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");
+ showNormal();
+// qDebug("sm");
+#ifdef USEQPE
+ showMaximized();
+#endif
+// setCentralWidget(reader);
+ }
+
+// qDebug("uc");
+ updateCaption();
+// qDebug("rw");
+ editorStack->raiseWidget( reader );
+// qDebug("sf");
+ 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");
+ 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");
+ 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()));
+ 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");
+ regBar->show();
+// qDebug("Showing kbd");
+#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");
+ if (!fn.isEmpty() && QFileInfo(fn).isFile())
+ {
+// qDebug("Opening");
+ 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");
+// 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());
+ 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);
+ 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");
+ }
+ else
+ {
+ qDebug("NO");
+ }
+ 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");
+ 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);
+ if (m_fontAction == cChooseEncoding)
+ {
+ reader->setencoding(i);
+ }
+ reader->refresh();
+ m_fontBar->hide();
+ m_fontVisible = false;
+// qDebug("showedit");
+ if (reader->isVisible()) showEditTools();
+// qDebug("showeditdone");
+}
+
+void QTReaderApp::do_setfont(const QString& lcn)
+{
+ if (m_fontAction == cChooseFont)
+ {
+ setfontHelper(lcn);
+ }
+ reader->refresh();
+ m_fontBar->hide();
+ m_fontVisible = false;
+// qDebug("showedit");
+ //if (reader->isVisible())
+ showEditTools();
+// qDebug("showeditdone");
+}
+
+void QTReaderApp::do_autogen(const QString& regText)
+{
+ unsigned long fs, ts;
+ reader->sizes(fs,ts);
+// // qDebug("Reg:%s\n", (const tchar*)(regEdit->text()));
+ 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");
+// 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");
+ reader->setText(true);
+// qDebug("settext called");
+ showEditTools();
+// qDebug("showedit called");
+}
+*/
+
+/*
+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");
+ pOpenlist = bf.readall();
+// if (pOpenlist != NULL) qDebug("...with success");
+// else qDebug("...without success!");
+}
+
+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");
+ 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);
+
+ 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");
+ 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);
+ 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);
+#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);
+ QDir d = QDir::home(); // "/"
+ if ( !d.cd(_txt) )
+ { // "/tmp"
+ qWarning( "Cannot find the \"~/%s\" directory", (const char*)_txt );
+ 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" );
+ d = QDir::home();
+ d.mkdir(APPDIR);
+ d.cd(APPDIR);
+ }
+ if ( !d.cd("configs") )
+ { // "/tmp"
+ qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" );
+ d = QDir::home();
+ d.cd(APPDIR);
+ d.mkdir("configs");
+ d.cd("configs");
+ }
+ fi.setFile(d, _txt);
+ }
+// qDebug("Path:%s", (const char*)fi.absFilePath());
+ 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 );
+ 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" );
+ d = QDir::home();
+ d.mkdir(APPDIR);
+ d.cd(APPDIR);
+ }
+ if ( !d.cd("configs") )
+ { // "/tmp"
+ qWarning( "Cannot find the \"~/" APPDIR "/configs\" directory" );
+ 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" );
+ d = QDir::home();
+ d.mkdir(APPDIR);
+ d.cd(APPDIR);
+ }
+ if ( !d.cd(tgtdir) ) { // "/tmp"
+ qWarning( "Cannot find the \"~/" APPDIR "/%s\" directory", tgtdir );
+ 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() );
+ ++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);
+ }
+ 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" );
+ d = QDir::home();
+ d.mkdir(APPDIR);
+ d.cd(APPDIR);
+ }
+ if ( !d.cd("urls") )
+ { // "/tmp"
+ qWarning( "Cannot find the \"~/" APPDIR "/urls\" directory" );
+ 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/ToolbarPrefs.cpp b/noncore/apps/opie-reader/ToolbarPrefs.cpp index 361bf97..d878829 100644 --- a/noncore/apps/opie-reader/ToolbarPrefs.cpp +++ b/noncore/apps/opie-reader/ToolbarPrefs.cpp @@ -1,499 +1,501 @@ /**************************************************************************** ** Form implementation generated from reading ui file 'Prefs.ui' ** ** Created: Tue Feb 11 23:53:35 2003 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ -#include "useqpe.h"
+#include "useqpe.h" #include "ToolbarPrefs.h" #include <qcheckbox.h> #include <qlabel.h> #include <qpushbutton.h> #include <qspinbox.h> #include <qlayout.h> #include <qvariant.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qcombobox.h> #include <qbuttongroup.h> #include <qlineedit.h> -#ifdef USEQPE
+#ifdef USEQPE #include <qpe/menubutton.h> -#endif
+#endif +#include <qpe/qpeapplication.h> CBarPrefs::CBarPrefs(const QString& appdir, bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true), config( appdir ) { setCaption(tr( "Toolbar Settings" ) ); QTabWidget* td = new QTabWidget(this); misc = new CMiscBarPrefs(this); filebar = new CFileBarPrefs(config, this); navbar = new CNavBarPrefs(config, this); viewbar = new CViewBarPrefs(config, this); markbar = new CMarkBarPrefs(config, this); indbar = new CIndBarPrefs(config, this); td->addTab(filebar, tr("File")); td->addTab(navbar, tr("Navigation")); td->addTab(viewbar, tr("View")); td->addTab(markbar, tr("Marks")); td->addTab(indbar, tr("Indicators")); td->addTab(misc, tr("Policy")); QVBoxLayout* v = new QVBoxLayout(this); v->addWidget(td); - if (fs) showMaximized(); + if (fs) + QPEApplication::showDialog( this ); } /* CBarPrefs1::CBarPrefs1( Config& _config, QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ), config(_config) { config.setGroup( "Toolbar" ); QVBoxLayout* vb = new QVBoxLayout(this); QGroupBox* bg = new QGroupBox(3, Qt::Horizontal, "File", this); vb->addWidget(bg); open = new QCheckBox( tr("Open"), bg ); open->setChecked(config.readBoolEntry( "Open", false )); connect(open, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); close = new QCheckBox( tr("Close"), bg ); close->setChecked(config.readBoolEntry( "Close", false )); connect(close, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); info = new QCheckBox( tr("Info"), bg ); info->setChecked(config.readBoolEntry( "Info", false )); connect(info, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); twotouch = new QCheckBox( tr("Two/One\nTouch"), bg ); twotouch->setChecked(config.readBoolEntry( "Two/One Touch", false )); connect(twotouch, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); find = new QCheckBox( tr("Find"), bg ); find->setChecked(config.readBoolEntry( "Find", false )); connect(find, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); bg = new QGroupBox(2, Qt::Horizontal, "Navigation", this); vb->addWidget(bg); scroll = new QCheckBox( tr("Scroll"), bg ); scroll->setChecked(config.readBoolEntry( "Scroll", false )); connect(scroll, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); navigation = new QCheckBox( tr("Back/Home/Forward"), bg ); navigation->setChecked(config.readBoolEntry( "Back/Home/Forward", false )); connect(navigation, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); page = new QCheckBox( tr("Page\nUp/Down"), bg ); page->setChecked(config.readBoolEntry( "Page Up/Down", false )); connect(page, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); startend = new QCheckBox( tr("Goto Start/End"), bg ); startend->setChecked(config.readBoolEntry( "Goto Start/End", false )); connect(startend, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); jump = new QCheckBox( tr("Jump"), bg ); jump->setChecked(config.readBoolEntry( "Jump", false )); connect(jump, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); pageline = new QCheckBox( tr("Page/Line Scroll"), bg ); pageline->setChecked(config.readBoolEntry( "Page/Line Scroll", false )); connect(pageline, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); m_isChanged = false; } void CBarPrefs1::saveall() { config.setGroup( "Toolbar" ); config.writeEntry( "Open", open->isChecked()); config.writeEntry( "Close", close->isChecked()); config.writeEntry( "Info", info->isChecked()); config.writeEntry( "Two/One Touch", twotouch->isChecked()); config.writeEntry( "Find", find->isChecked()); config.writeEntry( "Scroll", scroll->isChecked()); config.writeEntry( "Back/Home/Forward", navigation->isChecked()); config.writeEntry( "Page Up/Down", page->isChecked()); config.writeEntry( "Goto Start/End", startend->isChecked()); config.writeEntry( "Jump", jump->isChecked()); config.writeEntry( "Page/Line Scroll", pageline->isChecked()); } CBarPrefs1::~CBarPrefs1() { } */ /* CBarPrefs2::CBarPrefs2( Config& _config, QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ), config(_config) { QVBoxLayout* vb = new QVBoxLayout(this); QGroupBox* bg = new QGroupBox(3, Qt::Horizontal, "View", this); vb->addWidget(bg); config.setGroup( "Toolbar" ); fullscreen = new QCheckBox( tr("Fullscreen"), bg ); fullscreen->setChecked(config.readBoolEntry( "Fullscreen", false )); connect(fullscreen, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); zoom = new QCheckBox( tr("Zoom"), bg ); zoom->setChecked(config.readBoolEntry( "Zoom In/Out", false )); connect(zoom, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); setfont = new QCheckBox( tr("Set Font"), bg ); setfont->setChecked(config.readBoolEntry( "Set Font", false )); connect(setfont, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); encoding = new QCheckBox( tr("Encoding"), bg ); encoding->setChecked(config.readBoolEntry("Encoding Select", false)); connect(encoding, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); ideogram = new QCheckBox( tr("Ideogram"), bg ); ideogram->setChecked(config.readBoolEntry("Ideogram Mode", false)); connect(ideogram, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); bg = new QGroupBox(3, Qt::Horizontal, "Marks", this); vb->addWidget(bg); mark = new QCheckBox( tr("Bookmark"), bg ); mark->setChecked(config.readBoolEntry( "Mark", false )); connect(mark, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); annotate = new QCheckBox( tr("Annotate"), bg ); annotate->setChecked(config.readBoolEntry( "Annotate", false )); connect(annotate, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); go_to = new QCheckBox( tr("Goto"), bg ); go_to->setChecked(config.readBoolEntry( "Goto", false )); connect(go_to, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); Delete = new QCheckBox( tr("Delete"), bg ); Delete->setChecked(config.readBoolEntry( "Delete", false )); connect(Delete, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); autogen = new QCheckBox( tr("Autogen"), bg ); autogen->setChecked(config.readBoolEntry( "Autogen", false )); connect(autogen, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); clear = new QCheckBox( tr("Clear"), bg ); clear->setChecked(config.readBoolEntry( "Clear", false )); connect(clear, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); save = new QCheckBox( tr("Save"), bg ); save->setChecked(config.readBoolEntry( "Save", false )); connect(save, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); tidy = new QCheckBox( tr("Tidy"), bg ); tidy->setChecked(config.readBoolEntry( "Tidy", false )); connect(tidy, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); block = new QCheckBox( tr("Mark/Copy"), bg ); block->setChecked(config.readBoolEntry( "Start/Copy Block", false )); connect(block, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); bg = new QGroupBox(1, Qt::Horizontal, "Indicators", this); vb->addWidget(bg); indannotate = new QCheckBox( tr("Annotation"), bg ); indannotate->setChecked(config.readBoolEntry( "Annotation indicator", false )); connect(indannotate, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); m_isChanged = false; } void CBarPrefs2::saveall() { config.setGroup( "Toolbar" ); config.writeEntry( "Fullscreen", fullscreen->isChecked()); config.writeEntry( "Zoom In/Out", zoom->isChecked()); config.writeEntry( "Set Font", setfont->isChecked()); config.writeEntry("Encoding Select", encoding->isChecked()); config.writeEntry("Ideogram Mode", ideogram->isChecked()); config.writeEntry( "Mark", mark->isChecked()); config.writeEntry( "Annotate", annotate->isChecked()); config.writeEntry( "Goto", go_to->isChecked()); config.writeEntry( "Delete", Delete->isChecked()); config.writeEntry( "Autogen", autogen->isChecked()); config.writeEntry( "Clear", clear->isChecked()); config.writeEntry( "Save", save->isChecked()); config.writeEntry( "Tidy", tidy->isChecked()); config.writeEntry( "Start/Copy Block", block->isChecked()); config.writeEntry( "Annotation indicator", indannotate->isChecked()); } CBarPrefs2::~CBarPrefs2() { } */ CFileBarPrefs::CFileBarPrefs( Config& _config, QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ), config(_config) { config.setGroup( "Toolbar" ); QVBoxLayout* vb = new QVBoxLayout(this); QGroupBox* bg = new QGroupBox(2, Qt::Horizontal, "File", this); vb->addWidget(bg); open = new QCheckBox( tr("Open"), bg ); open->setChecked(config.readBoolEntry( "Open", false )); connect(open, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); close = new QCheckBox( tr("Close"), bg ); close->setChecked(config.readBoolEntry( "Close", false )); connect(close, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); info = new QCheckBox( tr("Info"), bg ); info->setChecked(config.readBoolEntry( "Info", false )); connect(info, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); twotouch = new QCheckBox( tr("Two/One\nTouch"), bg ); twotouch->setChecked(config.readBoolEntry( "Two/One Touch", false )); connect(twotouch, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); find = new QCheckBox( tr("Find"), bg ); find->setChecked(config.readBoolEntry( "Find", false )); connect(find, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); m_isChanged = false; } void CFileBarPrefs::saveall() { config.setGroup( "Toolbar" ); config.writeEntry( "Open", open->isChecked()); config.writeEntry( "Close", close->isChecked()); config.writeEntry( "Info", info->isChecked()); config.writeEntry( "Two/One Touch", twotouch->isChecked()); config.writeEntry( "Find", find->isChecked()); } CFileBarPrefs::~CFileBarPrefs() { } CNavBarPrefs::CNavBarPrefs( Config& _config, QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ), config(_config) { config.setGroup( "Toolbar" ); QVBoxLayout* vb = new QVBoxLayout(this); QGroupBox* bg = new QGroupBox(2, Qt::Horizontal, "Navigation", this); vb->addWidget(bg); scroll = new QCheckBox( tr("Scroll"), bg ); scroll->setChecked(config.readBoolEntry( "Scroll", false )); connect(scroll, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); navback = new QCheckBox( tr("Back"), bg ); navback->setChecked(config.readBoolEntry( "Back", false )); connect(navback, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); navhome = new QCheckBox( tr("Home"), bg ); navhome->setChecked(config.readBoolEntry( "Home", false )); connect(navhome, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); navforward = new QCheckBox( tr("Forward"), bg ); navforward->setChecked(config.readBoolEntry( "Forward", false )); connect(navforward, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); pageup = new QCheckBox( tr("Page Up"), bg ); pageup->setChecked(config.readBoolEntry( "Page Up", false )); connect(pageup, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); pagedown = new QCheckBox( tr("Page Down"), bg ); pagedown->setChecked(config.readBoolEntry( "Page Down", false )); connect(pagedown, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); gotostart = new QCheckBox( tr("Goto Start"), bg ); gotostart->setChecked(config.readBoolEntry( "Goto Start", false )); connect(gotostart, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); gotoend = new QCheckBox( tr("Goto End"), bg ); gotoend->setChecked(config.readBoolEntry( "Goto End", false )); connect(gotoend, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); jump = new QCheckBox( tr("Jump"), bg ); jump->setChecked(config.readBoolEntry( "Jump", false )); connect(jump, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); pageline = new QCheckBox( tr("Page/Line Scroll"), bg ); pageline->setChecked(config.readBoolEntry( "Page/Line Scroll", false )); connect(pageline, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); m_isChanged = false; } void CNavBarPrefs::saveall() { config.setGroup( "Toolbar" ); config.writeEntry( "Scroll", scroll->isChecked()); config.writeEntry( "Back", navback->isChecked()); config.writeEntry( "Home", navhome->isChecked()); config.writeEntry( "Forward", navforward->isChecked()); config.writeEntry( "Page Up", pageup->isChecked()); config.writeEntry( "Page Down", pagedown->isChecked()); config.writeEntry( "Goto Start", gotostart->isChecked()); config.writeEntry( "Goto End", gotoend->isChecked()); config.writeEntry( "Jump", jump->isChecked()); config.writeEntry( "Page/Line Scroll", pageline->isChecked()); } CNavBarPrefs::~CNavBarPrefs() { } CViewBarPrefs::CViewBarPrefs( Config& _config, QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ), config(_config) { QVBoxLayout* vb = new QVBoxLayout(this); QGroupBox* bg = new QGroupBox(2, Qt::Horizontal, "View", this); vb->addWidget(bg); config.setGroup( "Toolbar" ); fullscreen = new QCheckBox( tr("Fullscreen"), bg ); fullscreen->setChecked(config.readBoolEntry( "Fullscreen", false )); connect(fullscreen, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); zoomin = new QCheckBox( tr("Zoom In"), bg ); zoomin->setChecked(config.readBoolEntry( "Zoom In", false )); connect(zoomin, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); zoomout = new QCheckBox( tr("Zoom Out"), bg ); zoomout->setChecked(config.readBoolEntry( "Zoom Out", false )); connect(zoomout, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); setfont = new QCheckBox( tr("Set Font"), bg ); setfont->setChecked(config.readBoolEntry( "Set Font", false )); connect(setfont, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); encoding = new QCheckBox( tr("Encoding"), bg ); encoding->setChecked(config.readBoolEntry("Encoding Select", false)); connect(encoding, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); ideogram = new QCheckBox( tr("Ideogram"), bg ); ideogram->setChecked(config.readBoolEntry("Ideogram Mode", false)); connect(ideogram, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); m_isChanged = false; } void CViewBarPrefs::saveall() { config.setGroup( "Toolbar" ); config.writeEntry( "Fullscreen", fullscreen->isChecked()); config.writeEntry( "Zoom In", zoomin->isChecked()); config.writeEntry( "Zoom Out", zoomout->isChecked()); config.writeEntry( "Set Font", setfont->isChecked()); config.writeEntry("Encoding Select", encoding->isChecked()); config.writeEntry("Ideogram Mode", ideogram->isChecked()); } CViewBarPrefs::~CViewBarPrefs() { } CMarkBarPrefs::CMarkBarPrefs( Config& _config, QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ), config(_config) { QVBoxLayout* vb = new QVBoxLayout(this); QGroupBox* bg = new QGroupBox(2, Qt::Horizontal, "Marks", this); vb->addWidget(bg); mark = new QCheckBox( tr("Bookmark"), bg ); mark->setChecked(config.readBoolEntry( "Mark", false )); connect(mark, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); annotate = new QCheckBox( tr("Annotate"), bg ); annotate->setChecked(config.readBoolEntry( "Annotate", false )); connect(annotate, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); go_to = new QCheckBox( tr("Goto"), bg ); go_to->setChecked(config.readBoolEntry( "Goto", false )); connect(go_to, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); Delete = new QCheckBox( tr("Delete"), bg ); Delete->setChecked(config.readBoolEntry( "Delete", false )); connect(Delete, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); autogen = new QCheckBox( tr("Autogen"), bg ); autogen->setChecked(config.readBoolEntry( "Autogen", false )); connect(autogen, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); clear = new QCheckBox( tr("Clear"), bg ); clear->setChecked(config.readBoolEntry( "Clear", false )); connect(clear, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); save = new QCheckBox( tr("Save"), bg ); save->setChecked(config.readBoolEntry( "Save", false )); connect(save, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); tidy = new QCheckBox( tr("Tidy"), bg ); tidy->setChecked(config.readBoolEntry( "Tidy", false )); connect(tidy, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); startblock = new QCheckBox( tr("Mark Block"), bg ); startblock->setChecked(config.readBoolEntry( "Start Block", false )); connect(startblock, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); copyblock = new QCheckBox( tr("Copy Block"), bg ); copyblock->setChecked(config.readBoolEntry( "Copy Block", false )); connect(copyblock, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); m_isChanged = false; } void CMarkBarPrefs::saveall() { config.setGroup( "Toolbar" ); config.writeEntry( "Mark", mark->isChecked()); config.writeEntry( "Annotate", annotate->isChecked()); config.writeEntry( "Goto", go_to->isChecked()); config.writeEntry( "Delete", Delete->isChecked()); config.writeEntry( "Autogen", autogen->isChecked()); config.writeEntry( "Clear", clear->isChecked()); config.writeEntry( "Save", save->isChecked()); config.writeEntry( "Tidy", tidy->isChecked()); config.writeEntry( "Start Block", startblock->isChecked()); config.writeEntry( "Copy Block", copyblock->isChecked()); } CMarkBarPrefs::~CMarkBarPrefs() { } CMiscBarPrefs::CMiscBarPrefs( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QGridLayout* hl = new QGridLayout(this,1,2); hl->setMargin( 0 ); QGroupBox* gb = new QGroupBox(1, Qt::Horizontal, "Dialogs", this); floating = new QCheckBox(gb); floating->setText(tr("Floating")); // QLabel* TextLabel = new QLabel( gb ); // TextLabel->setText( tr( "Select Button" ) ); hl->addWidget( gb, 0, 0 ); gb = new QGroupBox(1, Qt::Horizontal, "Bars (Restart)", this); // QLabel* ql = new QLabel("Restart to apply changes", gb); // TextLabel = new QLabel( gb ); // TextLabel->setText( tr( "Policy" ) ); #ifdef USECOMBO tbpolicy = new QComboBox(gb); #else tbpolicy = new MenuButton(gb); #endif tbpolicy->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); tbpolicy->insertItem(tr("Single bar")); tbpolicy->insertItem(tr("Menu/tool bar")); tbpolicy->insertItem(tr("Multiple bars")); #ifdef USECOMBO tbposition = new QComboBox(gb); #else tbposition = new MenuButton(gb); #endif tbposition->insertItem(tr("Top")); tbposition->insertItem(tr("Bottom")); tbposition->insertItem(tr("Right")); tbposition->insertItem(tr("Left")); tbposition->insertItem(tr("Minimised")); tbmovable = new QCheckBox( tr("Movable"), gb ); // ch->setChecked(config.readBoolEntry( "Movable", false )); hl->addWidget(gb, 0, 1); } CMiscBarPrefs::~CMiscBarPrefs() { // no need to delete child widgets, Qt does it all for us } CIndBarPrefs::CIndBarPrefs( Config& _config, QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ), config(_config) { QVBoxLayout* vb = new QVBoxLayout(this); QGroupBox* bg = new QGroupBox(1, Qt::Horizontal, "Indicators", this); vb->addWidget(bg); indannotate = new QCheckBox( tr("Annotation"), bg ); indannotate->setChecked(config.readBoolEntry( "Annotation indicator", false )); connect(indannotate, SIGNAL(stateChanged(int)), this, SLOT( isChanged(int) ) ); m_isChanged = false; } void CIndBarPrefs::saveall() { config.setGroup( "Toolbar" ); config.writeEntry( "Annotation indicator", indannotate->isChecked()); } CIndBarPrefs::~CIndBarPrefs() { } diff --git a/noncore/apps/opie-reader/URLDialog.cpp b/noncore/apps/opie-reader/URLDialog.cpp index dd4568b..e572c80 100644 --- a/noncore/apps/opie-reader/URLDialog.cpp +++ b/noncore/apps/opie-reader/URLDialog.cpp @@ -1,14 +1,17 @@ -#include "URLDialog.h" -#include "qlayout.h" - -CURLDialog::CURLDialog(const QString& fname, bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true) -{ - setCaption(tr("Save URL")); - QVBoxLayout *tmp = new QVBoxLayout(this); - QVButtonGroup* vb = new QVButtonGroup(fname, this); - tmp->addWidget(vb); - m_clipboard = new QCheckBox(tr("Clipboard"), vb); - m_localfile = new QCheckBox(tr("Local file"), vb); - m_globalfile = new QCheckBox(tr("Global file"), vb); - if (fs) showMaximized(); -} +#include "URLDialog.h"
+#include "qlayout.h"
+
+#include <qpe/qpeapplication.h>
+
+CURLDialog::CURLDialog(const QString& fname, bool fs, QWidget* parent, const char* name) : QDialog(parent, name, true)
+{
+ setCaption(tr("Save URL"));
+ QVBoxLayout *tmp = new QVBoxLayout(this);
+ QVButtonGroup* vb = new QVButtonGroup(fname, this);
+ tmp->addWidget(vb);
+ m_clipboard = new QCheckBox(tr("Clipboard"), vb);
+ m_localfile = new QCheckBox(tr("Local file"), vb);
+ m_globalfile = new QCheckBox(tr("Global file"), vb);
+ if (fs)
+ QPEApplication::showDialog( this );
+}
diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp index 9cd371d..05f2c31 100644 --- a/noncore/apps/opie-reader/fileBrowser.cpp +++ b/noncore/apps/opie-reader/fileBrowser.cpp @@ -1,266 +1,269 @@ /**************************************************************************** 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> #include <qfile.h> #include <qmessagebox.h> #ifndef _WINDOWS #include <unistd.h> #endif #include <qlayout.h> #ifdef _WINDOWS #include <direct.h> #endif +#include <qpe/qpeapplication.h> + #include "opie.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) showMaximized(); + 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()); // 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); } 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()); } void fileBrowser::listClicked(QListViewItem *selectedItem) { if (selectedItem == NULL) return; QString strItem=selectedItem->text(0); //// qDebug("%s", (const char*)strItem); 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-sheet/mainwindow.cpp b/noncore/apps/opie-sheet/mainwindow.cpp index bd98aca..3d3c688 100644 --- a/noncore/apps/opie-sheet/mainwindow.cpp +++ b/noncore/apps/opie-sheet/mainwindow.cpp @@ -1,1008 +1,1011 @@ /*************************************************************************** * * * 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. * * * ***************************************************************************/ /* * Opie Sheet (formerly Sheet/Qt) * by Serdar Ozler <sozler@sitebest.com> */ #include "mainwindow.h" #include <qpe/filemanager.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/resource.h> +#include <qpe/qpeapplication.h> + #include <qmessagebox.h> #include <qfile.h> #include <qtranslator.h> #include <qradiobutton.h> + #include "cellformat.h" #include "numberdlg.h" #include "textdlg.h" #include "sortdlg.h" #include "finddlg.h" #define DEFAULT_NUM_ROWS 300 #define DEFAULT_NUM_COLS (26*3) #define DEFAULT_NUM_SHEETS 3 MainWindow::MainWindow(QWidget *parent, const char* n, WFlags fl) :QMainWindow(parent, n, fl) { // initialize variables documentModified=FALSE; // construct objects currentDoc=0; fileSelector=new FileSelector("application/sheet-qt", this, QString::null); ExcelSelector=new FileSelector("application/excel",this,QString::null,FALSE); connect(fileSelector, SIGNAL(closeMe()), this, SLOT(selectorHide())); connect(fileSelector, SIGNAL(newSelected(const DocLnk &)), this, SLOT(selectorFileNew(const DocLnk &))); connect(fileSelector, SIGNAL(fileSelected(const DocLnk &)), this, SLOT(selectorFileOpen(const DocLnk &))); connect(ExcelSelector,SIGNAL(fileSelected(const DocLnk &)),this,SLOT(slotImportExcel(const DocLnk &))); connect(ExcelSelector,SIGNAL(closeMe()), this, SLOT(ExcelSelectorHide())); listSheets.setAutoDelete(TRUE); initActions(); initMenu(); initEditToolbar(); initFunctionsToolbar(); initStandardToolbar(); initSheet(); // set window title setCaption(tr("Opie Sheet")); // create sheets selectorFileNew(DocLnk()); } MainWindow::~MainWindow() { if (currentDoc) delete currentDoc; } void MainWindow::documentSave(DocLnk *lnkDoc) { FileManager fm; QByteArray streamBuffer; QDataStream stream(streamBuffer, IO_WriteOnly); typeSheet *currentSheet=findSheet(sheet->getName()); if (!currentSheet) { QMessageBox::critical(this, tr("Error"), tr("Inconsistency error!")); return; } sheet->copySheetData(¤tSheet->data); stream.writeRawBytes("SQT100", 6); stream << (Q_UINT32)listSheets.count(); for (typeSheet *tempSheet=listSheets.first(); tempSheet; tempSheet=listSheets.next()) { stream << tempSheet->name << (Q_UINT32)tempSheet->data.count(); for (typeCellData *tempCell=tempSheet->data.first(); tempCell; tempCell=tempSheet->data.next()) stream << (Q_UINT32)tempCell->col << (Q_UINT32)tempCell->row << tempCell->borders.right << tempCell->borders.bottom << tempCell->background << (Q_UINT32)tempCell->alignment << tempCell->fontColor << tempCell->font << tempCell->data; } lnkDoc->setType("application/sheet-qt"); if (!fm.saveFile(*lnkDoc, streamBuffer)) { QMessageBox::critical(this, tr("Error"), tr("File cannot be saved!")); return; } documentModified=FALSE; } void MainWindow::documentOpen(const DocLnk &lnkDoc) { FileManager fm; QByteArray streamBuffer; if (!lnkDoc.isValid() || !fm.loadFile(lnkDoc, streamBuffer)) { QMessageBox::critical(this, tr("Error"), tr("File cannot be opened!")); documentModified=FALSE; selectorFileNew(DocLnk()); return; } QDataStream stream(streamBuffer, IO_ReadOnly); Q_UINT32 countSheet, countCell, i, j, row, col, alignment; typeSheet *newSheet; typeCellData *newCell; char fileFormat[7]; stream.readRawBytes(fileFormat, 6); fileFormat[6]=0; if ((QString)fileFormat!="SQT100") { QMessageBox::critical(this, tr("Error"), tr("Invalid file format!")); documentModified=FALSE; selectorFileNew(DocLnk()); return; } stream >> countSheet; for (i=0; i<countSheet; ++i) { newSheet=new typeSheet; newSheet->data.setAutoDelete(TRUE); stream >> newSheet->name >> countCell; comboSheets->insertItem(newSheet->name); for (j=0; j<countCell; ++j) { newCell=new typeCellData; stream >> col >> row >> newCell->borders.right >> newCell->borders.bottom >> newCell->background >> alignment >> newCell->fontColor >> newCell->font >> newCell->data; newCell->col=col; newCell->row=row; newCell->alignment=(Qt::AlignmentFlags)alignment; newSheet->data.append(newCell); } listSheets.append(newSheet); if (i==0) { sheet->setName(newSheet->name); sheet->setSheetData(&newSheet->data); } } } int MainWindow::saveCurrentFile(bool ask) { if (ask) { int result=QMessageBox::information(this, tr("Save File"), tr("Do you want to save the current file?"), QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel); if (result!=QMessageBox::Yes) return result; } if (!currentDoc->isValid()) { TextDialog dialogText(this); if (dialogText.exec(tr("Save File"), tr("&File Name:"), tr("UnnamedFile"))!=QDialog::Accepted || dialogText.getValue().isEmpty()) return QMessageBox::Cancel; currentDoc->setName(dialogText.getValue()); currentDoc->setFile(QString::null); currentDoc->setLinkFile(QString::null); } documentSave(currentDoc); return QMessageBox::Yes; } void MainWindow::selectorFileNew(const DocLnk &lnkDoc) { selectorHide(); if (documentModified && saveCurrentFile()==QMessageBox::Cancel) return; if (currentDoc) delete currentDoc; currentDoc = new DocLnk(lnkDoc); editData->clear(); listSheets.clear(); comboSheets->clear(); typeSheet *newSheet=createNewSheet(); newSheet->data.setAutoDelete(TRUE); sheet->setName(newSheet->name); sheet->setSheetData(&newSheet->data); for (int i=1; i<DEFAULT_NUM_SHEETS; ++i) createNewSheet(); documentModified=FALSE; } void MainWindow::closeEvent(QCloseEvent *e) { if (documentModified && saveCurrentFile()==QMessageBox::Cancel) e->ignore(); else e->accept(); } void MainWindow::selectorFileOpen(const DocLnk &lnkDoc) { selectorHide(); if (documentModified && saveCurrentFile()==QMessageBox::Cancel) return; if (currentDoc) delete currentDoc; currentDoc = new DocLnk(); listSheets.clear(); comboSheets->clear(); documentOpen(lnkDoc); documentModified=FALSE; } void MainWindow::selectorShow() { sheet->hide(); setCentralWidget(fileSelector); fileSelector->show(); fileSelector->reread(); } void MainWindow::selectorHide() { fileSelector->hide(); setCentralWidget(sheet); sheet->show(); } void MainWindow::slotFileNew() { selectorFileNew(DocLnk()); } void MainWindow::slotFileOpen() { selectorShow(); } void MainWindow::slotImportExcelOpen() { sheet->hide(); setCentralWidget(ExcelSelector); ExcelSelector->show(); ExcelSelector->reread(); } void MainWindow::ExcelSelectorHide() { ExcelSelector->hide(); setCentralWidget(sheet); sheet->show(); } void MainWindow::slotFileSave() { saveCurrentFile(FALSE); } void MainWindow::setDocument(const QString &applnk_filename) { selectorFileOpen(DocLnk(applnk_filename)); } void MainWindow::initActions() { fileNew=new QAction(tr("New File"), Resource::loadPixmap( "new" ), tr("&New"), 0, this); connect(fileNew, SIGNAL(activated()), this, SLOT(slotFileNew())); fileOpen=new QAction(tr("Open File"), Resource::loadPixmap( "fileopen" ), tr("&Open"), 0, this); connect(fileOpen, SIGNAL(activated()), this, SLOT(slotFileOpen())); fileSave=new QAction(tr("Save File"),Resource::loadPixmap( "save" ), tr("&Save"), 0, this); connect(fileSave, SIGNAL(activated()), this, SLOT(slotFileSave())); fileSaveAs=new QAction(tr("Save File As"), Resource::loadPixmap( "save" ), tr("Save &As"), 0, this); connect(fileSaveAs, SIGNAL(activated()), this, SLOT(slotFileSaveAs())); //fileQuit=new QAction(tr("Quit"), tr("&Quit"), 0, this); //connect(fileQuit, SIGNAL(activated()), this, SLOT(close())); fileExcelImport=new QAction(tr("Import Excel file"),Resource::loadPixmap( "opie-sheet/excel16" ),tr("Import E&xcel file"),0,this); connect(fileExcelImport, SIGNAL(activated()), this, SLOT(slotImportExcelOpen())); // helpGeneral=new QAction(tr("General Help"), QPixmap(help_general_xpm), tr("&General"), 0, this); //connect(helpGeneral, SIGNAL(activated()), this, SLOT(slotHelpGeneral())); //helpAbout=new QAction(tr("About Opie Sheet"), tr("&About"), 0, this); //connect(helpAbout, SIGNAL(activated()), this, SLOT(slotHelpAbout())); editAccept=new QAction(tr("Accept"),Resource::loadPixmap( "enter" ) , tr("&Accept"), 0, this); connect(editAccept, SIGNAL(activated()), this, SLOT(slotEditAccept())); editCancel=new QAction(tr("Cancel"), Resource::loadPixmap( "close" ), tr("&Cancel"), 0, this); connect(editCancel, SIGNAL(activated()), this, SLOT(slotEditCancel())); editCellSelect=new QAction(tr("Cell Selector"), Resource::loadPixmap( "opie-sheet/cell-select" ), tr("Cell &Selector"), 0, this); editCellSelect->setToggleAction(TRUE); connect(editCellSelect, SIGNAL(toggled(bool)), this, SLOT(slotCellSelect(bool))); editCut=new QAction(tr("Cut Cells"), tr("Cu&t"), 0, this); editCopy=new QAction(tr("Copy Cells"), tr("&Copy"), 0, this); editPaste=new QAction(tr("Paste Cells"), tr("&Paste"), 0, this); connect(editPaste, SIGNAL(activated()), this, SLOT(slotEditPaste())); editPasteContents=new QAction(tr("Paste Contents"), tr("Paste Cont&ents"), 0, this); connect(editPasteContents, SIGNAL(activated()), this, SLOT(slotEditPasteContents())); editClear=new QAction(tr("Clear Cells"), tr("C&lear"), 0, this); insertCells=new QAction(tr("Insert Cells"), tr("C&ells"), 0, this); connect(insertCells, SIGNAL(activated()), this, SLOT(slotInsertCells())); insertRows=new QAction(tr("Insert Rows"), tr("&Rows"), 0, this); connect(insertRows, SIGNAL(activated()), this, SLOT(slotInsertRows())); insertCols=new QAction(tr("Insert Columns"), tr("&Columns"), 0, this); connect(insertCols, SIGNAL(activated()), this, SLOT(slotInsertCols())); insertSheets=new QAction(tr("Add Sheets"), tr("&Sheets"), 0, this); connect(insertSheets, SIGNAL(activated()), this, SLOT(slotInsertSheets())); formatCells=new QAction(tr("Cells"), tr("&Cells"), 0, this); connect(formatCells, SIGNAL(activated()), this, SLOT(slotFormatCells())); rowHeight=new QAction(tr("Row Height"), tr("H&eight"), 0, this); connect(rowHeight, SIGNAL(activated()), this, SLOT(slotRowHeight())); rowAdjust=new QAction(tr("Adjust Row"), tr("&Adjust"), 0, this); connect(rowAdjust, SIGNAL(activated()), this, SLOT(slotRowAdjust())); rowShow=new QAction(tr("Show Row"), tr("&Show"), 0, this); connect(rowShow, SIGNAL(activated()), this, SLOT(slotRowShow())); rowHide=new QAction(tr("Hide Row"), tr("&Hide"), 0, this); connect(rowHide, SIGNAL(activated()), this, SLOT(slotRowHide())); colWidth=new QAction(tr("Column Width"), tr("&Width"), 0, this); connect(colWidth, SIGNAL(activated()), this, SLOT(slotColumnWidth())); colAdjust=new QAction(tr("Adjust Column"), tr("&Adjust"), 0, this); connect(colAdjust, SIGNAL(activated()), this, SLOT(slotColumnAdjust())); colShow=new QAction(tr("Show Column"), tr("&Show"), 0, this); connect(colShow, SIGNAL(activated()), this, SLOT(slotColumnShow())); colHide=new QAction(tr("Hide Column"), tr("&Hide"), 0, this); connect(colHide, SIGNAL(activated()), this, SLOT(slotColumnHide())); sheetRename=new QAction(tr("Rename Sheet"), tr("&Rename"), 0, this); connect(sheetRename, SIGNAL(activated()), this, SLOT(slotSheetRename())); sheetRemove=new QAction(tr("Remove Sheet"), tr("R&emove"), 0, this); connect(sheetRemove, SIGNAL(activated()), this, SLOT(slotSheetRemove())); dataSort=new QAction(tr("Sort Data"), tr("&Sort"), 0, this); connect(dataSort, SIGNAL(activated()), this, SLOT(slotDataSort())); dataFindReplace=new QAction(tr("Find && Replace"), tr("&Find && Replace"), 0, this); connect(dataFindReplace, SIGNAL(activated()), this, SLOT(slotDataFindReplace())); funcEqual=new QAction(tr("Equal To"), Resource::loadPixmap( "opie-sheet/func-equal" ), tr("&Equal To"), 0, this); funcEqual->setToolTip("="); connect(funcEqual, SIGNAL(activated()), this, SLOT(slotFuncOutput())); funcPlus=new QAction(tr("Addition"), Resource::loadPixmap( "opie-sheet/func-plus" ), tr("&Addition"), 0, this); funcPlus->setToolTip("+"); connect(funcPlus, SIGNAL(activated()), this, SLOT(slotFuncOutput())); funcMinus=new QAction(tr("Subtraction"), Resource::loadPixmap( "opie-sheet/func-minus" ), tr("&Subtraction"), 0, this); funcMinus->setToolTip("-"); connect(funcMinus, SIGNAL(activated()), this, SLOT(slotFuncOutput())); funcCross=new QAction(tr("Multiplication"), Resource::loadPixmap ("opie-sheet/func-cross" ), tr("&Multiplication"), 0, this); funcCross->setToolTip("*"); connect(funcCross, SIGNAL(activated()), this, SLOT(slotFuncOutput())); funcDivide=new QAction(tr("Division"), Resource::loadPixmap( "opie-sheet/func-divide" ), tr("&Division"), 0, this); funcDivide->setToolTip("/"); connect(funcDivide, SIGNAL(activated()), this, SLOT(slotFuncOutput())); funcParanOpen=new QAction(tr("Open ParanthesistempCellData->row+row1, tempCellData->col+col1"), Resource::loadPixmap( "opie-sheet/func-paran-open" ), tr("&Open Paranthesis"), 0, this); funcParanOpen->setToolTip("("); connect(funcParanOpen, SIGNAL(activated()), this, SLOT(slotFuncOutput())); funcParanClose=new QAction(tr("Close Paranthesis"), Resource::loadPixmap( "opie-sheet/func-paran-close" ), tr("&Close Paranthesis"), 0, this); funcParanClose->setToolTip(")"); connect(funcParanClose, SIGNAL(activated()), this, SLOT(slotFuncOutput())); funcComma=new QAction(tr("Comma"), Resource::loadPixmap( "opie-sheet/func-comma" ), tr("&Comma"), 0, this); funcComma->setToolTip(","); connect(funcComma, SIGNAL(activated()), this, SLOT(slotFuncOutput())); } void MainWindow::initMenu() { menu=new QMenuBar(this); menuFile=new QPopupMenu; fileNew->addTo(menuFile); fileOpen->addTo(menuFile); fileSave->addTo(menuFile); fileSaveAs->addTo(menuFile); // menuFile->insertSeparator(); // fileQuit->addTo(menuFile); menuFile->insertSeparator(); fileExcelImport->addTo(menuFile); menu->insertItem(tr("&File"), menuFile); menuEdit=new QPopupMenu; editAccept->addTo(menuEdit); editCancel->addTo(menuEdit); editCellSelect->addTo(menuEdit); menuEdit->insertSeparator(); editCut->addTo(menuEdit); editCopy->addTo(menuEdit); editPaste->addTo(menuEdit); editPasteContents->addTo(menuEdit); editClear->addTo(menuEdit); menu->insertItem(tr("&Edit"), menuEdit); menuInsert=new QPopupMenu; menu->insertItem(tr("&Insert"), menuInsert); menuFormat=new QPopupMenu; formatCells->addTo(menuFormat); menu->insertItem(tr("&Format"), menuFormat); menuData=new QPopupMenu; dataSort->addTo(menuData); dataFindReplace->addTo(menuData); menu->insertItem(tr("&Data"), menuData); // menuHelp=new QPopupMenu; // helpGeneral->addTo(menuHelp); // helpAbout->addTo(menuHelp); // menu->insertItem(tr("&Help"), menuHelp); submenuRow=new QPopupMenu; rowHeight->addTo(submenuRow); rowAdjust->addTo(submenuRow); rowShow->addTo(submenuRow); rowHide->addTo(submenuRow); menuFormat->insertItem(tr("&Row"), submenuRow); submenuCol=new QPopupMenu; colWidth->addTo(submenuCol); colAdjust->addTo(submenuCol); colShow->addTo(submenuCol); colHide->addTo(submenuCol); menuFormat->insertItem(tr("Colum&n"), submenuCol); submenuSheet=new QPopupMenu; sheetRename->addTo(submenuSheet); sheetRemove->addTo(submenuSheet); menuFormat->insertItem(tr("&Sheet"), submenuSheet); submenuFunc=new QPopupMenu; menuInsert->insertItem(tr("&Function"), submenuFunc); submenuFuncStd=new QPopupMenu; funcPlus->addTo(submenuFuncStd); funcMinus->addTo(submenuFuncStd); funcCross->addTo(submenuFuncStd); funcDivide->addTo(submenuFuncStd); submenuFunc->insertItem(tr("&Simple"), submenuFuncStd); submenuFuncStandard=new QPopupMenu; addFlyAction(tr("ABS(x)"), tr("ABS(x)"), "ABS(", submenuFuncStandard); addFlyAction(tr("CEILING(x,acc)"), tr("CEILING(x,acc)"), "CEILING(", submenuFuncStandard); addFlyAction(tr("FACT(x)"), tr("FACT(x)"), "FACT(", submenuFuncStandard); addFlyAction(tr("FLOOR(x,acc)"), tr("FLOOR(x,acc)"), "FLOOR(", submenuFuncStandard); addFlyAction(tr("INT(x)"), tr("INT(x)"), "INT(", submenuFuncStandard); addFlyAction(tr("MOD(x,y)"), tr("MOD(x,y)"), "MOD(", submenuFuncStandard); addFlyAction(tr("ROUND(x,digits)"), tr("ROUND(x,digits)"), "ROUND(", submenuFuncStandard); addFlyAction(tr("SIGN(x)"), tr("SIGN(x)"), "SIGN(", submenuFuncStandard); submenuFuncStandard->insertSeparator(); addFlyAction(tr("EXP(x)"), tr("EXP(x)"), "EXP(", submenuFuncStandard); addFlyAction(tr("LN(x)"), tr("LN(x)"), "LN(", submenuFuncStandard); addFlyAction(tr("LOG(x,b)"), tr("LOG(x,b)"), "LOG(", submenuFuncStandard); addFlyAction(tr("LOG10(x)"), tr("LOG10(x)"), "LOG10(", submenuFuncStandard); addFlyAction(tr("POWER(x,y)"), tr("POWER(x,y)"), "POWER(", submenuFuncStandard); addFlyAction(tr("SQRT(x)"), tr("SQRT(x)"), "SQRT(", submenuFuncStandard); submenuFuncStandard->insertSeparator(); addFlyAction(tr("DEGREES(x)"), tr("DEGREES(x)"), "DEGREES(", submenuFuncStandard); addFlyAction(tr("RADIANS(x)"), tr("RADIANS(x)"), "RADIANS(", submenuFuncStandard); addFlyAction(tr("PI()"), tr("PI()"), "PI()", submenuFuncStandard); addFlyAction(tr("RAND()"), tr("RAND()"), "RAND(", submenuFuncStandard); addFlyAction(tr("RANDBETWEEN(a,b)"), tr("RANDBETWEEN(a,b)"), "RANDBETWEEN(", submenuFuncStandard); submenuFunc->insertItem(tr("S&tandard"), submenuFuncStandard); submenuFuncLogic=new QPopupMenu; addFlyAction(tr("AND(x1,x2)"), tr("AND(x1,x2)"), "AND(", submenuFuncLogic); addFlyAction(tr("NOT(x)"), tr("NOT(x)"), "NOT(", submenuFuncLogic); addFlyAction(tr("OR(x1,x2)"), tr("OR(x1,x2)"), "OR(", submenuFuncLogic); submenuFuncLogic->insertSeparator(); addFlyAction(tr("IF(compare,val1,val2)"), tr("IF(compare,val1,val2)"), "IF(", submenuFuncLogic); addFlyAction(tr("INDEX(range,index)"),tr("INDEX(range,index)"), "INDEX(", submenuFuncLogic); addFlyAction(tr("ISBLANK(x)"), tr("ISBLANK(x)"), "ISBLANK(", submenuFuncLogic); addFlyAction(tr("ISNUMBER(x)"), tr("ISNUMBER(x)"), "ISNUMBER(", submenuFuncLogic); addFlyAction(tr("EVEN(x)"), tr("EVEN(x)"), "EVEN(", submenuFuncLogic); addFlyAction(tr("ISEVEN(x)"), tr("ISEVEN(x)"), "ISEVEN(", submenuFuncLogic); addFlyAction(tr("ODD(x)"), tr("ODD(x)"), "ODD(", submenuFuncLogic); addFlyAction(tr("ISODD(x)"), tr("ISODD(x)"), "ISODD(", submenuFuncLogic); submenuFunc->insertItem(tr("Logical-&Information"), submenuFuncLogic); submenuFuncTrig=new QPopupMenu; addFlyAction(tr("SIN(x)"), tr("SIN(x)"), "SIN(", submenuFuncTrig); addFlyAction(tr("COS(x)"), tr("COS(x)"), "COS(", submenuFuncTrig); addFlyAction(tr("TAN(x)"), tr("TAN(x)"), "TAN(", submenuFuncTrig); addFlyAction(tr("ASIN(x)"), tr("ASIN(x)"), "ASIN(", submenuFuncTrig); addFlyAction(tr("ACOS(x)"), tr("ACOS(x)"), "ACOS(", submenuFuncTrig); addFlyAction(tr("ATAN(x)"), tr("ATAN(x)"), "ATAN(", submenuFuncTrig); addFlyAction(tr("ATAN2(x,y)"), tr("ATAN2(x,y)"), "ATAN2(", submenuFuncTrig); submenuFuncTrig->insertSeparator(); addFlyAction(tr("SINH(x)"), tr("SINH(x)"), "SINH(", submenuFuncTrig); addFlyAction(tr("COSH(x)"), tr("COSH(x)"), "COSH(", submenuFuncTrig); addFlyAction(tr("TANH(x)"), tr("TANH(x)"), "TANH(", submenuFuncTrig); addFlyAction(tr("ACOSH(x)"), tr("ACOSH(x)"), "ACOSH(", submenuFuncTrig); addFlyAction(tr("ASINH(x)"), tr("ASINH(x)"), "ASINH(", submenuFuncTrig); addFlyAction(tr("ATANH(x)"), tr("ATANH(x)"), "ATANH(", submenuFuncTrig); submenuFunc->insertItem(tr("&Trigonometric"), submenuFuncTrig); submenuFuncString=new QPopupMenu; addFlyAction(tr("LEN(s)"), tr("LEN(s)"), "LEN(",submenuFuncString); addFlyAction(tr("LEFT(s,num)"), tr("LEFT(s,num)"), "LEFT(",submenuFuncString); addFlyAction(tr("RIGHT(s,num)"), tr("RIGHT(s,num)"), "RIGHT(",submenuFuncString); addFlyAction(tr("MID(s,pos,len)"), tr("MID(s,pos,len)"), "MID(",submenuFuncString); submenuFuncString->insertSeparator(); addFlyAction(tr("CONCATENATE(s1,s2..)"), tr("CONCATENATE(s1,s2..)"), "CONCATENATE(",submenuFuncString); addFlyAction(tr("EXACT(s1,s2)"), tr("EXACT(s1,s2)"), "EXACT(",submenuFuncString); addFlyAction(tr("FIND(what,where,pos)"), tr("FIND(what,where,pos)"), "FIND(",submenuFuncString); addFlyAction(tr("REPLACE(s,pos,len,ns)"), tr("REPLACE(s,pos,len,ns)"), "REPLACE(",submenuFuncString); addFlyAction(tr("REPT(s,n)"), tr("REPT(s,n)"), "REPT(",submenuFuncString); submenuFuncString->insertSeparator(); addFlyAction(tr("UPPER(s)"), tr("UPPER(s)"), "UPPER(",submenuFuncString); addFlyAction(tr("LOWER(s)"), tr("LOWER(s)"), "LOWER(",submenuFuncString); submenuFunc->insertItem(tr("&Strings"), submenuFuncString); submenuFuncStat=new QPopupMenu; addFlyAction(tr("AVERAGE(range)"), tr("AVERAGE(range)"), "AVERAGE(",submenuFuncStat); addFlyAction(tr("COUNT(range)"), tr("COUNT(range)"), "COUNT(",submenuFuncStat); addFlyAction(tr("COUNTIF(range,eqls)"), tr("COUNTIF(range,eqls)"), "COUNTIF(",submenuFuncStat); addFlyAction(tr("MAX(range)"), tr("MAX(range)"), "MAX(",submenuFuncStat); addFlyAction(tr("MIN(range)"), tr("MIN(range)"), "MIN(",submenuFuncStat); addFlyAction(tr("SUM(range)"), tr("SUM(range)"), "SUM(",submenuFuncStat); addFlyAction(tr("SUMSQ(range)"), tr("SUMSQ(range)"), "SUMSQ(",submenuFuncStat); submenuFuncStat->insertSeparator(); addFlyAction(tr("AVERAGE(range)"), tr("AVERAGE(range)"), "AVERAGE(",submenuFuncStat); addFlyAction(tr("VAR(range)"), tr("VAR(range)"), "VAR(",submenuFuncStat); addFlyAction(tr("VARP(range)"), tr("VARP(range)"), "VARP(",submenuFuncStat); addFlyAction(tr("STDEV(range)"), tr("STDEV(range)"), "STDEV(",submenuFuncStat); addFlyAction(tr("STDEVP(range)"), tr("STDEVP(range)"), "STDEVP(",submenuFuncStat); addFlyAction(tr("SKEW(range)"), tr("SKEW(range)"), "SKEW(",submenuFuncStat); addFlyAction(tr("KURT(range)"), tr("KURT(range)"), "KURT(",submenuFuncStat); submenuFunc->insertItem(tr("Sta&tistical"), submenuFuncStat); submenuFuncScientific=new QPopupMenu; addFlyAction(tr("BESSELI(x,n)"), tr("BESSELI(x,n)"), "BESSELI(",submenuFuncScientific); addFlyAction(tr("BESSELJ(x,n)"), tr("BESSELJ(x,n)"), "BESSELJ(",submenuFuncScientific); addFlyAction(tr("BESSELK(x,n)"), tr("BESSELK(x,n)"), "BESSELK(",submenuFuncScientific); addFlyAction(tr("BESSELY(x,n)"), tr("BESSELY(x,n)"), "BESSELY(",submenuFuncScientific); submenuFuncScientific->insertSeparator(); addFlyAction(tr("BETAI(x,a,b)"), tr("BETAI(x,a,b)"), "BETAI(",submenuFuncScientific); addFlyAction(tr("ERF(a,b)"), tr("ERF(a,b)"), "ERF(",submenuFuncScientific); addFlyAction(tr("ERFC(a,b)"), tr("ERFC(a,b)"), "ERFC(",submenuFuncScientific); addFlyAction(tr("GAMMALN(x)"), tr("GAMMALN(x)"), "GAMMALN(",submenuFuncScientific); addFlyAction(tr("GAMMAP(x,a)"), tr("GAMMAP(x,a)"), "GAMMAP(",submenuFuncScientific); addFlyAction(tr("GAMMAQ(x,a)"), tr("GAMMAQ(x,a)"), "GAMMAQ(",submenuFuncScientific); submenuFunc->insertItem(tr("Scienti&fic"), submenuFuncScientific); submenuFuncDistr=new QPopupMenu; addFlyAction(tr("BETADIST(z,a,b,Q?)"), tr("BETADIST(z,a,b,Q?)"), "BETADIST(",submenuFuncDistr); addFlyAction(tr("CHI2DIST(x,n,Q?)"), tr("CHI2DIST(x,n,Q?)"), "CHI2DIST(",submenuFuncDistr); addFlyAction(tr("CHIDIST(x,n,Q?)"), tr("CHIDIST(x,n,Q?)"), "CHIDIST(",submenuFuncDistr); addFlyAction(tr("FDIST(z,deg1,deg2,Q?)"), tr("FDIST(z,deg1,deg2,Q?)"), "FDIST(",submenuFuncDistr); addFlyAction(tr("GAMMADIST(x,a,b,Q?)"), tr("GAMMADIST(x,a,b,Q?)"), "GAMMADIST(",submenuFuncDistr); addFlyAction(tr("NORMALDIST(x,m,s,Q?)"), tr("NORMALDIST(x,m,s,Q?)"), "NORMALDIST(",submenuFuncDistr); addFlyAction(tr("PHI(x,Q?)"), tr("PHI(x,Q?)"), "PHI(",submenuFuncDistr); addFlyAction(tr("POISSON(x,n,Q?)"), tr("POISSON(x,n,Q?)"), "POISSON(",submenuFuncDistr); submenuFunc->insertItem(tr("&Distributions"), submenuFuncDistr); menuInsert->insertSeparator(); insertCells->addTo(menuInsert); insertRows->addTo(menuInsert); insertCols->addTo(menuInsert); insertSheets->addTo(menuInsert); } void MainWindow::initStandardToolbar() { toolbarStandard=new QToolBar(this); toolbarStandard->setHorizontalStretchable(TRUE); moveToolBar(toolbarStandard, Top); fileNew->addTo(toolbarStandard); fileOpen->addTo(toolbarStandard); fileSave->addTo(toolbarStandard); comboSheets=new QComboBox(toolbarStandard); toolbarStandard->setStretchableWidget(comboSheets); connect(comboSheets, SIGNAL(activated(const QString &)), this, SLOT(slotSheetChanged(const QString &))); } void MainWindow::initFunctionsToolbar() { toolbarFunctions=new QToolBar(this); toolbarFunctions->setHorizontalStretchable(TRUE); moveToolBar(toolbarFunctions, Bottom); funcEqual->addTo(toolbarFunctions); funcPlus->addTo(toolbarFunctions); funcMinus->addTo(toolbarFunctions); funcCross->addTo(toolbarFunctions); funcDivide->addTo(toolbarFunctions); funcParanOpen->addTo(toolbarFunctions); funcParanClose->addTo(toolbarFunctions); funcComma->addTo(toolbarFunctions); toolFunction=new QToolButton(toolbarFunctions); toolFunction->setPixmap(Resource::loadPixmap( "opie-sheet/func-func" )); toolFunction->setTextLabel(tr("Functions")); toolFunction->setPopup(submenuFunc); toolFunction->setPopupDelay(0); } void MainWindow::initEditToolbar() { toolbarEdit=new QToolBar(this); toolbarEdit->setHorizontalStretchable(TRUE); moveToolBar(toolbarEdit, Bottom); editAccept->addTo(toolbarEdit); editCancel->addTo(toolbarEdit); editData=new QLineEdit(toolbarEdit); toolbarEdit->setStretchableWidget(editData); connect(editData, SIGNAL(returnPressed()), this, SLOT(slotEditAccept())); editCellSelect->addTo(toolbarEdit); } void MainWindow::slotHelpAbout() { QDialog dialogAbout(this, 0, TRUE); dialogAbout.resize(width()-40, height()-80); dialogAbout.setCaption(tr("About Opie Sheet")); QLabel label(tr("Opie Sheet\nSpreadsheet Software for Opie\nQWDC Beta Winner (as Sheet/Qt)\n\nDeveloped by: Serdar Ozler\nRelease 1.0.2\nRelease Date: October 08, 2002\n\nThis product is licensed under GPL. It is freely distributable. If you want to get the latest version and also the source code, please visit the web site.\n\nhttp://qtopia.sitebest.com"), &dialogAbout); label.setGeometry(dialogAbout.rect()); label.setAlignment(Qt::AlignCenter | Qt::WordBreak); dialogAbout.exec(); } void MainWindow::initSheet() { sheet=new Sheet(DEFAULT_NUM_ROWS, DEFAULT_NUM_COLS, this); setCentralWidget(sheet); connect(sheet, SIGNAL(currentDataChanged(const QString &)), editData, SLOT(setText(const QString &))); connect(sheet, SIGNAL(cellClicked(const QString &)), this, SLOT(slotCellClicked(const QString &))); connect(sheet, SIGNAL(sheetModified()), this, SLOT(slotDocModified())); connect(editCut, SIGNAL(activated()), sheet, SLOT(editCut())); connect(editCopy, SIGNAL(activated()), sheet, SLOT(editCopy())); connect(editClear, SIGNAL(activated()), sheet, SLOT(editClear())); } void MainWindow::slotEditAccept() { sheet->setData(editData->text()); } void MainWindow::slotEditCancel() { editData->setText(sheet->getData()); } void MainWindow::slotCellSelect(bool lock) { sheet->lockClicks(lock); } void MainWindow::addToData(const QString &data) { editData->setText(editData->text().insert(editData->cursorPosition(), data)); } void MainWindow::slotFuncOutput() { if (sender()->isA("QAction")) addToData(((QAction *)sender())->toolTip()); } void MainWindow::slotInsertRows() { NumberDialog dialogNumber(this); if (dialogNumber.exec(tr("Insert Rows"), tr("&Number of rows:"))==QDialog::Accepted) sheet->insertRows(dialogNumber.getValue()); } void MainWindow::slotInsertCols() { NumberDialog dialogNumber(this); if (dialogNumber.exec(tr("Insert Columns"), tr("&Number of columns:"))==QDialog::Accepted) sheet->insertColumns(dialogNumber.getValue()); } void MainWindow::slotInsertSheets() { NumberDialog dialogNumber(this); if (dialogNumber.exec(tr("Add Sheets"), tr("&Number of sheets:"))==QDialog::Accepted) for (int i=dialogNumber.getValue(); i>0; --i) createNewSheet(); } void MainWindow::slotCellClicked(const QString &cell) { editCellSelect->setOn(FALSE); addToData(cell); } typeSheet *MainWindow::createNewSheet() { typeSheet *newSheet=new typeSheet; int currentNo=1, tempNo=0; bool ok; for (typeSheet *tempSheet=listSheets.first(); tempSheet; tempSheet=listSheets.next()) if (tempSheet->name.startsWith(tr("Sheet")) && (tempNo=tempSheet->name.mid(tr("Sheet").length()).toInt(&ok))>=currentNo && ok) currentNo=tempNo+1; newSheet->name=tr("Sheet")+QString::number(currentNo); newSheet->data.setAutoDelete(TRUE); comboSheets->insertItem(newSheet->name); listSheets.append(newSheet); return newSheet; } typeSheet *MainWindow::findSheet(const QString &name) { for (typeSheet *tempSheet=listSheets.first(); tempSheet; tempSheet=listSheets.next()) if (tempSheet->name==name) return tempSheet; return NULL; } void MainWindow::slotSheetChanged(const QString &name) { sheet->copySheetData(&findSheet(sheet->getName())->data); sheet->setName(name); sheet->setSheetData(&findSheet(name)->data); sheet->ReCalc(); } void MainWindow::addFlyAction(const QString &text, const QString &menuText, const QString &tip, QWidget *w) { QAction *action=new QAction(text, menuText, 0, this); action->setToolTip(tip); connect(action, SIGNAL(activated()), this, SLOT(slotFuncOutput())); action->addTo(w); } void MainWindow::slotFormatCells() { CellFormat dialogCellFormat(this); - dialogCellFormat.showMaximized(); + QPEApplication::showDialog( &dialogCellFormat ); dialogCellFormat.exec(sheet); } void MainWindow::slotEditPaste() { sheet->editPaste(); } void MainWindow::slotEditPasteContents() { sheet->editPaste(TRUE); } void MainWindow::slotRowHeight() { int row1, row2, col1, col2; sheet->getSelection(&row1, &col1, &row2, &col2); NumberDialog dialogNumber(this); if (dialogNumber.exec(tr("Row Height"), tr("&Height of each row:"), sheet->rowHeight(row1))==QDialog::Accepted) { int newHeight=dialogNumber.getValue(), row; for (row=row1; row<=row2; ++row) sheet->setRowHeight(row, newHeight); } } void MainWindow::slotRowAdjust() { int row1, row2, col1, col2; sheet->getSelection(&row1, &col1, &row2, &col2); for (int row=row1; row<=row2; ++row) sheet->adjustRow(row); } void MainWindow::slotRowShow() { int row1, row2, col1, col2; sheet->getSelection(&row1, &col1, &row2, &col2); for (int row=row1; row<=row2; ++row) sheet->showRow(row); } void MainWindow::slotRowHide() { int row1, row2, col1, col2; sheet->getSelection(&row1, &col1, &row2, &col2); for (int row=row1; row<=row2; ++row) sheet->hideRow(row); } void MainWindow::slotColumnWidth() { int row1, row2, col1, col2; sheet->getSelection(&row1, &col1, &row2, &col2); NumberDialog dialogNumber(this); if (dialogNumber.exec(tr("Column Width"), tr("&Width of each column:"), sheet->columnWidth(col1))==QDialog::Accepted) { int newWidth=dialogNumber.getValue(), col; for (col=col1; col<=col2; ++col) sheet->setColumnWidth(col, newWidth); } } void MainWindow::slotColumnAdjust() { int row1, row2, col1, col2; sheet->getSelection(&row1, &col1, &row2, &col2); for (int col=col1; col<=col2; ++col) sheet->adjustColumn(col); } void MainWindow::slotColumnShow() { int row1, row2, col1, col2; sheet->getSelection(&row1, &col1, &row2, &col2); for (int col=col1; col<=col2; ++col) sheet->showColumn(col); } void MainWindow::slotColumnHide() { int row1, row2, col1, col2; sheet->getSelection(&row1, &col1, &row2, &col2); for (int col=col1; col<=col2; ++col) sheet->hideColumn(col); } void MainWindow::slotFileSaveAs() { TextDialog dialogText(this); if (dialogText.exec(tr("Save File As"), tr("&File Name:"), currentDoc->name())!=QDialog::Accepted || dialogText.getValue().isEmpty()) return; currentDoc->setName(dialogText.getValue()); currentDoc->setFile(QString::null); currentDoc->setLinkFile(QString::null); documentSave(currentDoc); } void MainWindow::slotImportExcel(const DocLnk &lnkDoc) { ExcelBook file1; file1.ParseBook((char *)lnkDoc.file().ascii()); int NumOfSheets=file1.Sheets.count(); printf("OpieSheet::NumberOfSheets:%d\r\n",NumOfSheets); if (documentModified && saveCurrentFile()==QMessageBox::Cancel) return; if (currentDoc) delete currentDoc; currentDoc = new DocLnk(); listSheets.clear(); comboSheets->clear(); int w1,r,c; ExcelSheet* sh1; typeSheet* newSheet; QString* str; typeCellData* newCell; for(w1=1;w1<=NumOfSheets;w1++) { sh1=file1.Sheets[w1-1]; printf("OpieSheet:newSheet:%x,r=%d,c=%d\r\n",sh1,sh1->rows,sh1->cols); newSheet=new typeSheet; newSheet->data.setAutoDelete(TRUE); newSheet->name=sh1->name; printf("OpieSheet:Sheetname:%s\r\n",sh1->name.ascii()); comboSheets->insertItem(newSheet->name); for(r=1; r <= sh1->rows; r++) { for(c=1;c <= sh1->cols; c++) { str=file1.CellDataString(sh1,r-1,c-1); if(str!=NULL && r<DEFAULT_NUM_ROWS && c<DEFAULT_NUM_COLS) { newCell=new typeCellData; newCell->row=r-1; newCell->col=c-1; if(str!=NULL) newCell->data=QString(*str); else newCell->data=QString(""); newCell->background=QBrush(Qt::white, Qt::SolidPattern); newCell->alignment=(Qt::AlignmentFlags)(Qt::AlignLeft | Qt::AlignTop); newCell->fontColor=Qt::black; newCell->font=font(); newCell->borders.right=QPen(Qt::gray, 1, Qt::SolidLine); newCell->borders.bottom=QPen(Qt::gray, 1, Qt::SolidLine); newSheet->data.append(newCell); //there is no format parsing at the moment or style parsing //printf("OpieSheetNumber:row=%d,col=%d,val=%s\r\n",r,c,str->latin1()); }; }; }; listSheets.append(newSheet); if (w1==1)//if i==0 link sheet1 with sheetview { sheet->setName(newSheet->name); sheet->setSheetData(&newSheet->data); sheet->ReCalc(); }; }; file1.CloseFile(); printf("Excel FILE read OK\r\n"); documentModified=TRUE; } void MainWindow::slotSheetRename() { TextDialog dialogText(this); if (dialogText.exec(tr("Rename Sheet"), tr("&Sheet Name:"), sheet->getName())!=QDialog::Accepted || dialogText.getValue().isEmpty()) return; QString newName=dialogText.getValue(); typeSheet *tempSheet=findSheet(newName); if (tempSheet) { QMessageBox::critical(this, tr("Error"), tr("There is already a sheet named '"+newName+'\'')); return; } tempSheet=findSheet(sheet->getName()); for (int i=0; i<comboSheets->count(); ++i) if (comboSheets->text(i)==tempSheet->name) { comboSheets->changeItem(newName, i); break; } tempSheet->name=newName; sheet->setName(newName); } void MainWindow::slotSheetRemove() { if (comboSheets->count()<2) { QMessageBox::warning(this, tr("Error"), tr("There is only one sheet!")); return; } if (QMessageBox::information(this, tr("Remove Sheet"), tr("Are you sure?"), QMessageBox::Yes, QMessageBox::No)==QMessageBox::Yes) { typeSheet *tempSheet=findSheet(sheet->getName()); for (int i=0; i<comboSheets->count(); ++i) if (comboSheets->text(i)==tempSheet->name) { comboSheets->removeItem(i); break; } comboSheets->setCurrentItem(0); slotSheetChanged(comboSheets->currentText()); listSheets.remove(tempSheet); } } void MainWindow::slotDataSort() { SortDialog dialogSort(this); - dialogSort.showMaximized(); + QPEApplication::showDialog( &dialogSort ); dialogSort.exec(sheet); } void MainWindow::slotDocModified() { documentModified=TRUE; } void MainWindow::slotInsertCells() { QDialog dialogInsert(this, 0, TRUE); dialogInsert.resize(180, 130); dialogInsert.setCaption(tr("Insert Cells")); QVButtonGroup *group=new QVButtonGroup(tr("&Type"), &dialogInsert); group->setGeometry(10, 10, 160, 110); QRadioButton *radio=new QRadioButton(tr("Shift cells &down"), group); radio=new QRadioButton(tr("Shift cells &right"), group); radio=new QRadioButton(tr("Entire ro&w"), group); radio=new QRadioButton(tr("Entire &column"), group); group->setButton(0); if (dialogInsert.exec()==QDialog::Accepted) switch (group->id(group->selected())) { case 0: sheet->insertRows(1, FALSE); break; case 1: sheet->insertColumns(1, FALSE); break; case 2: sheet->insertRows(1, TRUE); break; case 3: sheet->insertColumns(1, TRUE); break; } } void MainWindow::slotDataFindReplace() { FindDialog dialogFind(this); - dialogFind.showMaximized(); + QPEApplication::showDialog( &dialogFind ); dialogFind.exec(sheet); } diff --git a/noncore/apps/tableviewer/ui/tveditview.cpp b/noncore/apps/tableviewer/ui/tveditview.cpp index 23e2b42..20a24c8 100644 --- a/noncore/apps/tableviewer/ui/tveditview.cpp +++ b/noncore/apps/tableviewer/ui/tveditview.cpp @@ -1,235 +1,237 @@ /********************************************************************** ** 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. ** **********************************************************************/ /* The edit view widget. For each key in the DB display an * appropriate edit box, and a 'key' button to change that particular * key information (delete or edit). * * Bottem line should be a 'new key' button. Should be able to scroll * in both directions. */ #include "tveditview.h" #include "commonwidgets.h" #include <qlayout.h> #include <qgrid.h> #include <qvbox.h> #include <qlineedit.h> #include <qcheckbox.h> #include <qlist.h> #include <qlabel.h> #include <qscrollview.h> #include <qsignalmapper.h> -TVEditView::TVEditView(TableState *s, DataElem *d, QWidget* parent, +#include <qpe/qpeapplication.h> + +TVEditView::TVEditView(TableState *s, DataElem *d, QWidget* parent, const char *name, WFlags fl ) : QDialog(parent, name, true, fl) { if (!name) setName("TVEditView"); QVBoxLayout *layout = new QVBoxLayout(this, 0); /* only so that will resize - correctly in other + correctly in other widgets */ toggles = new QSignalMapper(this); QScrollView *sv = new QScrollView(this, 0); sv->setResizePolicy(QScrollView::AutoOneFit); layout->addWidget(sv); editDisplay = new QGrid(3, sv, 0); editDisplay->setSpacing(3); sv->addChild(editDisplay); connect(toggles, SIGNAL(mapped(int)), this, SLOT(toggleEnabled(int))); setData(s, d); #ifdef Q_WS_QWS - showMaximized(); + QPEApplication::showDialog( this ); #endif } TVEditView::~TVEditView() { } /*! set up the widgets in the grid, Set up initial values */ void TVEditView::setData(TableState *t, DataElem *d) { /* TODO need to somehow clear old children... a delete of each * child? */ keyIds.clear(); KeyListIterator it(*t->kRep); int i = 0; while(it.current()) { if (t->kRep->validIndex(it.currentKey())) { new QLabel(it.current()->name(), editDisplay); keyIds.insert(i, it.currentKey()); if (d->hasValidValue(it.currentKey())) { switch(it.current()->type()) { case TVVariant::String: { QLineEdit *edit = new QLineEdit(editDisplay, 0); edit->setText(d->getField(it.currentKey()).toString()); edits.append(edit); break; } case TVVariant::Int: { IntEdit *edit = new IntEdit(editDisplay, 0); edit->setValue(d->getField(it.currentKey()).toInt()); edits.append(edit); break; } case TVVariant::Time: { TimeEdit *edit = new TimeEdit(editDisplay, 0); edit->setTime(d->getField(it.currentKey()).toTime()); edits.append(edit); break; } case TVVariant::Date: { DateEdit *edit = new DateEdit(editDisplay, 0); edit->setDate(d->getField(it.currentKey()).toDate()); edits.append(edit); break; } default: edits.append(new QLabel("<B><I>Uknown key type</I></B>", editDisplay)); } QCheckBox *tb = new QCheckBox(editDisplay); tb->setChecked(TRUE); toggles->setMapping(tb, i); connect(tb, SIGNAL(clicked()), toggles, SLOT(map())); buttons.append(tb); } else { /* No valid value.. set to null */ switch(it.current()->type()) { case TVVariant::String: { QLineEdit *edit = new QLineEdit(editDisplay, 0); edit->setEnabled(false); edits.append(edit); break; } case TVVariant::Int: { IntEdit *edit = new IntEdit(editDisplay, 0); edit->setEnabled(false); edits.append(edit); break; } case TVVariant::Time: { TimeEdit *edit = new TimeEdit(editDisplay, 0); edit->setEnabled(false); edits.append(edit); break; } case TVVariant::Date: { DateEdit *edit = new DateEdit(editDisplay, 0); edit->setEnabled(false); edits.append(edit); break; } default: edits.append(new QLabel("<B><I>Uknown key type</I></B>", editDisplay)); } QCheckBox *tb = new QCheckBox(editDisplay); tb->setChecked(FALSE); toggles->setMapping(tb, i); connect(tb, SIGNAL(clicked()), toggles, SLOT(map())); buttons.append(tb); } i++; } ++it; } num_edits = i; } void TVEditView::toggleEnabled(int i) { if(edits.at(i)->isEnabled()) { edits.at(i)->setEnabled(false); buttons.at(i)->setChecked(FALSE); } else { edits.at(i)->setEnabled(true); buttons.at(i)->setChecked(TRUE); } } bool TVEditView::openEditItemDialog(TableState *ts, DataElem *d, QWidget *parent) { int i; int keyId; if(!ts) return 0; if(!d) return 0; if(!ts->kRep) return 0; TVEditView *dlg = new TVEditView(ts, d, parent); if (dlg->exec() == QDialog::Accepted ) { /* update the element, basically for each edits, if isEnabled, set Value, else unsetField */ for(i = 0; i < dlg->num_edits; i++) { keyId = dlg->keyIds[i]; if(dlg->edits.at(i)->isEnabled()) { switch(d->getFieldType(keyId)) { case TVVariant::String: { TVVariant value = TVVariant( ((QLineEdit *)dlg->edits.at(i))->text()); d->setField(keyId, value); break; } case TVVariant::Int: { TVVariant value = TVVariant( ((IntEdit *)dlg->edits.at(i))->value()); d->setField(keyId, value); break; } case TVVariant::Time: { TVVariant value = TVVariant( ((TimeEdit *)dlg->edits.at(i))->time()); d->setField(keyId, value); break; } case TVVariant::Date: { TVVariant value = TVVariant( ((DateEdit *)dlg->edits.at(i))->date()); d->setField(keyId, value); break; } default: break; } } else { /* unset the field */ d->unsetField(keyId); } } delete dlg; return TRUE; } return FALSE; } diff --git a/noncore/apps/tableviewer/ui/tvfilterview.cpp b/noncore/apps/tableviewer/ui/tvfilterview.cpp index 0182127..b03e846 100644 --- a/noncore/apps/tableviewer/ui/tvfilterview.cpp +++ b/noncore/apps/tableviewer/ui/tvfilterview.cpp @@ -1,304 +1,306 @@ /********************************************************************** ** 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. ** -**********************************************************************/ +**********************************************************************/ #include "tvfilterview.h" #include <qtoolbutton.h> #include <qcombobox.h> #include <qlistview.h> #include <qlayout.h> #include <qheader.h> #include <qpushbutton.h> #include <qlabel.h> -TVFilterView::TVFilterView(TableState *t, QWidget* parent, +#include <qpe/qpeapplication.h> + +TVFilterView::TVFilterView(TableState *t, QWidget* parent, const char *name, WFlags fl ) : QDialog(parent, name, TRUE, fl) { if ( !name ) setName( "Filter View" ); QVBoxLayout *vlayout = new QVBoxLayout(this); display = new QListView(this, "display"); display->addColumn("Key"); display->addColumn("Constraint"); display->addColumn("Value"); display->header()->setClickEnabled(FALSE); display->header()->setResizeEnabled(FALSE); vlayout->addWidget(display); QHBoxLayout *hlayout = new QHBoxLayout; hlayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum)); newFilterButton = new QPushButton(this, "new Filter"); newFilterButton->setMaximumSize(QSize(50, 32767)); newFilterButton->setText("New"); hlayout->addWidget(newFilterButton); deleteFilterButton = new QPushButton(this, "delete Filter"); deleteFilterButton->setMaximumSize(QSize(50, 32767)); deleteFilterButton->setText("Delete"); hlayout->addWidget(deleteFilterButton); clearFilterButton = new QPushButton(this, "delete Filter"); clearFilterButton->setMaximumSize(QSize(60, 32767)); clearFilterButton->setText("Clear All"); hlayout->addWidget(clearFilterButton); vlayout->addLayout(hlayout); QHBoxLayout *hlayout2 = new QHBoxLayout; keyNameCombo = new QComboBox(FALSE, this, "key name"); keyNameCombo->setEnabled(FALSE); hlayout2->addWidget(keyNameCombo); QLabel *label = new QLabel(this); label->setText("has value"); hlayout2->addWidget(label); keyEntry = new TVFilterKeyEntry(this, "key entry"); keyEntry->setEnabled(FALSE); vlayout->addLayout(hlayout2); vlayout->addWidget(keyEntry); connect(newFilterButton, SIGNAL( clicked() ), this, SLOT( newTerm() )); connect(deleteFilterButton, SIGNAL( clicked() ), this, SLOT( deleteTerm())); connect(clearFilterButton, SIGNAL( clicked() ), this, SLOT( clearTerms())); connect(keyEntry, SIGNAL(valueChanged()), this, SLOT( updateTerm() )); connect(keyNameCombo, SIGNAL(activated(int)), this, SLOT( updateTerm() )); connect(display, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(setTerm(QListViewItem *))); ts = t; current = 0; terms.setAutoDelete(true); do_filter = false; #ifdef Q_WS_QWS - showMaximized(); + QPEApplication::showDialog( this ); #endif } /*! Destroys the TVFilterView widget */ TVFilterView::~TVFilterView() { } void TVFilterView::rebuildData() { } void TVFilterView::reset() { keyNameCombo->clear(); keyIds.clear(); } void TVFilterView::rebuildKeys() { int i; if (!ts) return; if(!ts->kRep) return; keyEntry->setTableState(ts); /* set up the list of keys that can be compared on */ keyNameCombo->clear(); KeyListIterator it(*ts->kRep); i = 0; while(it.current()) { if(ts->kRep->validIndex(it.currentKey())) { keyNameCombo->insertItem(it.current()->name()); keyIds.insert(i, it.currentKey()); ++i; } ++it; } } bool TVFilterView::passesFilter(DataElem *d) { if (!filterActive()) return true; FilterTerm *t; for (t = terms.first(); t != 0; t = terms.next() ) { /* check against filter */ switch(t->ct) { case ct_less: if (!d->lessThan(t->keyIndex, t->value)) return false; break; case ct_more: if (!d->moreThan(t->keyIndex, t->value)) return false; break; case ct_equal: if (!d->equalTo(t->keyIndex, t->value)) return false; break; case ct_contains: if (!d->contains(t->keyIndex, t->value)) return false; break; case ct_startswith: if (!d->startsWith(t->keyIndex, t->value)) return false; break; case ct_endswith: if (!d->endsWith(t->keyIndex, t->value)) return false; break; default: qWarning("TVFilterView::passesFilter() " "unrecognized filter type"); return false; } } return true; } bool TVFilterView::filterActive() const { /* when button operated, also check the do_filter value return do_filter; */ if (terms.isEmpty()) return false; return true; } /* SLOTS */ void TVFilterView::newTerm() { if (!ts) return; FilterTerm *term = new FilterTerm; current = term; term->view = 0; updateTerm(); display->setSelected(term->view, true); terms.append(term); keyEntry->setEnabled(true); keyNameCombo->setEnabled(true); } void TVFilterView::updateTerm() { FilterTerm *term; /* Read the widget values (keyname, compare type, value) * and build the lists */ if (!ts) return; if (!current) return; QString keyString; QString cmpString; QString vString; term = current; /* create new list item, set initial values, enable widgets */ term->keyIndex = keyIds[keyNameCombo->currentItem()]; keyEntry->setKey(term->keyIndex); /* so the next two items make sense */ term->ct = keyEntry->getCompareType(), term->value = keyEntry->getCompareValue(); keyString = keyNameCombo->currentText(); switch(term->ct) { case ct_less: cmpString = " less than "; break; case ct_more: cmpString = " more than "; break; case ct_equal: cmpString = " equal to "; break; case ct_contains: cmpString = " containing "; break; case ct_startswith: cmpString = " starting with "; break; case ct_endswith: cmpString = " ending with "; break; default: cmpString = " ERROR "; } vString = term->value.toString(); /* remove old view */ if (term->view) delete(term->view); term->view = new QListViewItem(display, 0, keyString, cmpString, vString); display->setSelected(term->view, true); } /* deletes current term */ void TVFilterView::deleteTerm() { if(!current) return; if (current->view) delete(current->view); terms.removeRef(current); current = terms.first(); if(terms.isEmpty()) { keyEntry->setEnabled(false); keyNameCombo->setEnabled(false); } } /* clears all terminations */ void TVFilterView::clearTerms() { while(current) deleteTerm(); } void TVFilterView::setTerm(QListViewItem *target) { /* Iterate through the list to find item with view=target.. * set as current, delete */ FilterTerm *term = current; for (current = terms.first(); current != 0; current = terms.next() ) if (current->view == target) break; if (!current) { current = term; } } diff --git a/noncore/apps/tableviewer/ui/tvkeyedit.cpp b/noncore/apps/tableviewer/ui/tvkeyedit.cpp index 4849e87..c22ecd3 100644 --- a/noncore/apps/tableviewer/ui/tvkeyedit.cpp +++ b/noncore/apps/tableviewer/ui/tvkeyedit.cpp @@ -1,254 +1,256 @@ /********************************************************************** ** 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. ** **********************************************************************/ #include "tvkeyedit.h" #include <qtoolbutton.h> #include <qlineedit.h> #include <qcombobox.h> #include <qlistview.h> #include <qmessagebox.h> #include <stdlib.h> #include <qpushbutton.h> +#include <qpe/qpeapplication.h> + /* QList view item... ?? that can store and update the values that I will * be changing */ class TVKEListViewItem : public QListViewItem { public: TVKEListViewItem(QString n, TVVariant::KeyType kt, int p, QListView *parent) : QListViewItem(parent) { name = n; keyType = kt; position = p; } QString text(int i) const { if(i) { return TVVariant::typeToName(keyType); } return name; } /* always sort by key index, ignore i */ QString key(int, bool) const { return QString().sprintf("%08d", position); } void setText(int i, const QString &) { ; } QString getName() const { return name; } void setName(QString n) { name = n; repaint(); } TVVariant::KeyType getKeyType() const { return keyType; } void setKeyType(TVVariant::KeyType k) { keyType = k; repaint(); } inline int getPos() const { return position; } private: QString name; TVVariant::KeyType keyType; int position; }; TVKeyEdit::TVKeyEdit(TableState *t, QWidget* parent, const char *name, WFlags fl) : TVKeyEdit_gen(parent, name, true, fl) { int i; ts = t; if(!ts) return; if(!ts->kRep) return; working_state = *ts->kRep; i = 1; keyTypeEdit->insertItem(TVVariant::typeToName((TVVariant::KeyType)i)); i++; keyTypeEdit->insertItem(TVVariant::typeToName((TVVariant::KeyType)i)); i++; keyTypeEdit->insertItem(TVVariant::typeToName((TVVariant::KeyType)i)); i++; keyTypeEdit->insertItem(TVVariant::typeToName((TVVariant::KeyType)i)); KeyListIterator it(*ts->kRep); while(it.current()) { if(t->kRep->validIndex(it.currentKey())) { new TVKEListViewItem(it.current()->name(), it.current()->type(), it.currentKey(), display); } ++it; } num_keys = ts->kRep->getNumFields(); if(display->childCount() > 0) { display->setCurrentItem(display->firstChild()); setTerm(display->currentItem()); } else { deleteKeyButton->setEnabled(FALSE); clearKeysButton->setEnabled(FALSE); keyNameEdit->setEnabled(FALSE); keyTypeEdit->setEnabled(FALSE); } display->setSorting(0); #ifdef Q_WS_QWS - showMaximized(); + QPEApplication::showDialog( this ); #endif } /*! - Destroys the TVKeyEdit widget + Destroys the TVKeyEdit widget */ TVKeyEdit::~TVKeyEdit() { } /* SLOTS */ -void TVKeyEdit::newTerm() +void TVKeyEdit::newTerm() { /* new item, make current Item */ int i; i = working_state.addKey("<New Key>", TVVariant::String); //working_state.setNewFlag(i, TRUE); TVKEListViewItem *nItem = new TVKEListViewItem("<New Key>", TVVariant::String, i, display); display->setCurrentItem(nItem); setTerm(nItem); num_keys++; if(display->childCount() == 1) { deleteKeyButton->setEnabled(TRUE); clearKeysButton->setEnabled(TRUE); keyNameEdit->setEnabled(TRUE); keyTypeEdit->setEnabled(TRUE); } } void TVKeyEdit::updateTerm(const QString &newName) { /* TODO if name matches a deleted term, prompt for renewing old data instead */ TVKEListViewItem *i = (TVKEListViewItem *)display->currentItem(); if(i) { i->setName(newName); working_state.setKeyName(i->getPos(), newName); } } void TVKeyEdit::updateTerm(int t) { /* t is an index to a combo in a menu, NOT a type */ t++; /* menu counts from 0, types count from 1 */ TVKEListViewItem *i = (TVKEListViewItem *)display->currentItem(); if (i) { i->setKeyType((TVVariant::KeyType)t); working_state.setKeyType(i->getPos(), (TVVariant::KeyType)t); } } /* deletes current term * really just marks key as deleted so is now invalid. * the actual delete will happen when data is 'cleaned' * or when file is saved. */ void TVKeyEdit::deleteTerm() { TVKEListViewItem *i = (TVKEListViewItem *)display->currentItem(); if (i) { working_state.setDeleteFlag(i->getPos(), TRUE); delete i; } if(!display->childCount()) { /* disable the delete and clear buttons, etc */ deleteKeyButton->setEnabled(FALSE); clearKeysButton->setEnabled(FALSE); keyNameEdit->setEnabled(FALSE); keyTypeEdit->setEnabled(FALSE); } } /* clears all terminations */ void TVKeyEdit::clearTerms() { /* should pop up a warning */ if (QMessageBox::warning(this, "Delete all keys", "Are you sure you want to\ndelete all the keys?", "Yes", "No") == 0) { while(display->currentItem()) deleteTerm(); } } void TVKeyEdit::setTerm(QListViewItem *target) { /* need to update the widgets to show keys values */ keyNameEdit->setText(((TVKEListViewItem *)target)->getName()); int t = (int)(((TVKEListViewItem *)target)->getKeyType()); t--; keyTypeEdit->setCurrentItem(t); } KeyList* TVKeyEdit::openEditKeysDialog(TableState *t, QWidget *parent = 0) { if(!t) return 0; if(!t->kRep) return 0; TVKeyEdit *dlg = new TVKeyEdit(t, parent); if ((dlg->exec() == QDialog::Accepted) && (dlg->working_state != *t->kRep)) { return (new KeyList(dlg->working_state)); } return 0; } diff --git a/noncore/apps/tinykate/libkate/view/kateview.cpp b/noncore/apps/tinykate/libkate/view/kateview.cpp index af3b30d..794fbdb 100644 --- a/noncore/apps/tinykate/libkate/view/kateview.cpp +++ b/noncore/apps/tinykate/libkate/view/kateview.cpp @@ -1,2923 +1,2923 @@ /*************************************************************************** kateview.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 "kateview.h" #include "../document/katedocument.h" #include "../document/katecmd.h" #include "../document/katehighlight.h" #include "kateviewdialog.h" #include "../document/katedialogs.h" #include <kateconfig.h> #include <qfocusdata.h> #include <kdebug.h> #include <kapplication.h> #include <qscrollbar.h> #include <qiodevice.h> #include <qpopupmenu.h> #include <kpopupmenu.h> #include <qkeycode.h> #include <qintdict.h> #include <qfont.h> #include <qpainter.h> #include <qpixmap.h> #include <qfileinfo.h> #include <qfile.h> #include <qevent.h> #include <qdir.h> #include <qvbox.h> #include <qprintdialog.h> #include <qpaintdevicemetrics.h> #include <qiodevice.h> #include <qbuffer.h> #include <qfocusdata.h> #include <klocale.h> #include <kglobal.h> #include <kdebug.h> #include <kmessagebox.h> #include <qregexp.h> #include <kdialogbase.h> #include <klineeditdlg.h> #include <qapplication.h> #include <kfiledialog.h> #include <kiconloader.h> #include "../document/katetextline.h" #include "kateviewdialog.h" #include "kateundohistory.h" #include <qlayout.h> +#include <qpe/qpeapplication.h> KateViewInternal::KateViewInternal(KateView *view, KateDocument *doc) : QWidget(view) { waitForPreHighlight=-1; myView = view; myDoc = doc; iconBorderWidth = 16; iconBorderHeight = 800; QWidget::setCursor(ibeamCursor); setBackgroundMode(NoBackground); setFocusPolicy(StrongFocus); xScroll = new QScrollBar(QScrollBar::Horizontal,myView); yScroll = new QScrollBar(QScrollBar::Vertical,myView); connect(xScroll,SIGNAL(valueChanged(int)),SLOT(changeXPos(int))); connect(yScroll,SIGNAL(valueChanged(int)),SLOT(changeYPos(int))); connect(yScroll,SIGNAL(valueChanged(int)),myView,SIGNAL(scrollValueChanged(int))); connect( doc, SIGNAL (preHighlightChanged(long)),this,SLOT(slotPreHighlightUpdate(long))); xPos = 0; yPos = 0; scrollTimer = 0; cursor.x = 0; cursor.y = 0; cursorOn = false; cursorTimer = 0; cXPos = 0; cOldXPos = 0; startLine = 0; endLine = -1; exposeCursor = false; updateState = 0; numLines = 0; lineRanges = 0L; newXPos = -1; newYPos = -1; drawBuffer = new QPixmap (); drawBuffer->setOptimization (QPixmap::BestOptim); bm.sXPos = 0; bm.eXPos = -1; } KateViewInternal::~KateViewInternal() { delete [] lineRanges; delete drawBuffer; } void KateViewInternal::slotPreHighlightUpdate(long line) { //kdDebug()<<QString("slotPreHighlightUpdate - Wait for: %1, line: %2").arg(waitForPreHighlight).arg(line)<<endl; if (waitForPreHighlight!=-1) { if (line>=waitForPreHighlight) { waitForPreHighlight=-1; repaint(); } } } void KateViewInternal::doCursorCommand(VConfig &c, int cmdNum) { switch (cmdNum) { case KateView::cmLeft: cursorLeft(c); break; case KateView::cmRight: cursorRight(c); break; case KateView::cmWordLeft: wordLeft(c); break; case KateView::cmWordRight: wordRight(c); break; case KateView::cmHome: home(c); break; case KateView::cmEnd: end(c); break; case KateView::cmUp: cursorUp(c); break; case KateView::cmDown: cursorDown(c); break; case KateView::cmScrollUp: scrollUp(c); break; case KateView::cmScrollDown: scrollDown(c); break; case KateView::cmTopOfView: topOfView(c); break; case KateView::cmBottomOfView: bottomOfView(c); break; case KateView::cmPageUp: pageUp(c); break; case KateView::cmPageDown: pageDown(c); break; case KateView::cmTop: top_home(c); break; case KateView::cmBottom: bottom_end(c); break; } } void KateViewInternal::doEditCommand(VConfig &c, int cmdNum) { switch (cmdNum) { case KateView::cmCopy: myDoc->copy(c.flags); return; case KateView::cmSelectAll: myDoc->selectAll(); return; case KateView::cmDeselectAll: myDoc->deselectAll(); return; case KateView::cmInvertSelection: myDoc->invertSelection(); return; } if (myView->isReadOnly()) return; switch (cmdNum) { case KateView::cmReturn: if (c.flags & KateView::cfDelOnInput) myDoc->delMarkedText(c); myDoc->newLine(c); //emit returnPressed(); //e->ignore(); return; case KateView::cmDelete: if ((c.flags & KateView::cfDelOnInput) && myDoc->hasMarkedText()) myDoc->delMarkedText(c); else myDoc->del(c); return; case KateView::cmBackspace: if ((c.flags & KateView::cfDelOnInput) && myDoc->hasMarkedText()) myDoc->delMarkedText(c); else myDoc->backspace(c); return; case KateView::cmKillLine: myDoc->killLine(c); return; case KateView::cmCut: myDoc->cut(c); return; case KateView::cmPaste: if (c.flags & KateView::cfDelOnInput) myDoc->delMarkedText(c); myDoc->paste(c); return; case KateView::cmUndo: myDoc->undo(c); return; case KateView::cmRedo: myDoc->redo(c); return; case KateView::cmIndent: myDoc->indent(c); return; case KateView::cmUnindent: myDoc->unIndent(c); return; case KateView::cmCleanIndent: myDoc->cleanIndent(c); return; case KateView::cmComment: myDoc->comment(c); return; case KateView::cmUncomment: myDoc->unComment(c); return; } } void KateViewInternal::cursorLeft(VConfig &c) { cursor.x--; if (c.flags & KateView::cfWrapCursor && cursor.x < 0 && cursor.y > 0) { cursor.y--; cursor.x = myDoc->textLength(cursor.y); } cOldXPos = cXPos = myDoc->textWidth(cursor); changeState(c); } void KateViewInternal::cursorRight(VConfig &c) { if (c.flags & KateView::cfWrapCursor) { if (cursor.x >= myDoc->textLength(cursor.y)) { if (cursor.y == myDoc->lastLine()) return; cursor.y++; cursor.x = -1; } } cursor.x++; cOldXPos = cXPos = myDoc->textWidth(cursor); changeState(c); } void KateViewInternal::wordLeft(VConfig &c) { Highlight *highlight; highlight = myDoc->highlight(); TextLine::Ptr textLine = myDoc->getTextLine(cursor.y); if (cursor.x > 0) { do { cursor.x--; } while (cursor.x > 0 && !highlight->isInWord(textLine->getChar(cursor.x))); while (cursor.x > 0 && highlight->isInWord(textLine->getChar(cursor.x -1))) cursor.x--; } else { if (cursor.y > 0) { cursor.y--; textLine = myDoc->getTextLine(cursor.y); cursor.x = textLine->length(); } } cOldXPos = cXPos = myDoc->textWidth(cursor); changeState(c); } void KateViewInternal::wordRight(VConfig &c) { Highlight *highlight; int len; highlight = myDoc->highlight(); TextLine::Ptr textLine = myDoc->getTextLine(cursor.y); len = textLine->length(); if (cursor.x < len) { do { cursor.x++; } while (cursor.x < len && highlight->isInWord(textLine->getChar(cursor.x))); while (cursor.x < len && !highlight->isInWord(textLine->getChar(cursor.x))) cursor.x++; } else { if (cursor.y < myDoc->lastLine()) { cursor.y++; textLine = myDoc->getTextLine(cursor.y); cursor.x = 0; } } cOldXPos = cXPos = myDoc->textWidth(cursor); changeState(c); } void KateViewInternal::home(VConfig &c) { int lc; lc = (c.flags & KateView::cfSmartHome) ? myDoc->getTextLine(cursor.y)->firstChar() : 0; if (lc <= 0 || cursor.x == lc) { cursor.x = 0; cOldXPos = cXPos = 0; } else { cursor.x = lc; cOldXPos = cXPos = myDoc->textWidth(cursor); } changeState(c); } void KateViewInternal::end(VConfig &c) { cursor.x = myDoc->textLength(cursor.y); cOldXPos = cXPos = myDoc->textWidth(cursor); changeState(c); } void KateViewInternal::cursorUp(VConfig &c) { cursor.y--; cXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor,cursor,cOldXPos); changeState(c); } void KateViewInternal::cursorDown(VConfig &c) { int x; if (cursor.y == myDoc->lastLine()) { x = myDoc->textLength(cursor.y); if (cursor.x >= x) return; cursor.x = x; cXPos = myDoc->textWidth(cursor); } else { cursor.y++; cXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor, cursor, cOldXPos); } changeState(c); } void KateViewInternal::scrollUp(VConfig &c) { if (! yPos) return; newYPos = yPos - myDoc->fontHeight; if (cursor.y == (yPos + height())/myDoc->fontHeight -1) { cursor.y--; cXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor,cursor,cOldXPos); changeState(c); } } void KateViewInternal::scrollDown(VConfig &c) { if (endLine >= myDoc->lastLine()) return; newYPos = yPos + myDoc->fontHeight; if (cursor.y == (yPos + myDoc->fontHeight -1)/myDoc->fontHeight) { cursor.y++; cXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor,cursor,cOldXPos); changeState(c); } } void KateViewInternal::topOfView(VConfig &c) { cursor.y = (yPos + myDoc->fontHeight -1)/myDoc->fontHeight; cursor.x = 0; cOldXPos = cXPos = 0; changeState(c); } void KateViewInternal::bottomOfView(VConfig &c) { cursor.y = (yPos + height())/myDoc->fontHeight -1; if (cursor.y < 0) cursor.y = 0; if (cursor.y > myDoc->lastLine()) cursor.y = myDoc->lastLine(); cursor.x = 0; cOldXPos = cXPos = 0; changeState(c); } void KateViewInternal::pageUp(VConfig &c) { int lines = (endLine - startLine - 1); if (lines <= 0) lines = 1; if (!(c.flags & KateView::cfPageUDMovesCursor) && yPos > 0) { newYPos = yPos - lines * myDoc->fontHeight; if (newYPos < 0) newYPos = 0; } cursor.y -= lines; cXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor, cursor, cOldXPos); changeState(c); // cursorPageUp(c); } void KateViewInternal::pageDown(VConfig &c) { int lines = (endLine - startLine - 1); if (!(c.flags & KateView::cfPageUDMovesCursor) && endLine < myDoc->lastLine()) { if (lines < myDoc->lastLine() - endLine) newYPos = yPos + lines * myDoc->fontHeight; else newYPos = yPos + (myDoc->lastLine() - endLine) * myDoc->fontHeight; } cursor.y += lines; cXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor,cursor,cOldXPos); changeState(c); // cursorPageDown(c); } // go to the top, same X position void KateViewInternal::top(VConfig &c) { // cursor.x = 0; cursor.y = 0; cXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor,cursor,cOldXPos); // cOldXPos = cXPos = 0; changeState(c); } // go to the bottom, same X position void KateViewInternal::bottom(VConfig &c) { // cursor.x = 0; cursor.y = myDoc->lastLine(); cXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor,cursor,cOldXPos); // cOldXPos = cXPos = 0; changeState(c); } // go to the top left corner void KateViewInternal::top_home(VConfig &c) { cursor.y = 0; cursor.x = 0; cOldXPos = cXPos = 0; changeState(c); } // go to the bottom right corner void KateViewInternal::bottom_end(VConfig &c) { cursor.y = myDoc->lastLine(); cursor.x = myDoc->textLength(cursor.y); cOldXPos = cXPos = myDoc->textWidth(cursor); changeState(c); } void KateViewInternal::changeXPos(int p) { int dx; dx = xPos - p; xPos = p; if (QABS(dx) < width()) scroll(dx, 0); else update(); } void KateViewInternal::changeYPos(int p) { int dy; dy = yPos - p; yPos = p; clearDirtyCache(height()); if (QABS(dy) < height()) { scroll(0, dy); leftBorder->scroll(0, dy); } else update(); } void KateViewInternal::getVConfig(VConfig &c) { c.view = myView; c.cursor = cursor; c.cXPos = cXPos; c.flags = myView->configFlags; } void KateViewInternal::changeState(VConfig &c) { /* * we need to be sure to kill the selection on an attempted cursor * movement even if the cursor doesn't physically move, * but we need to be careful not to do some other things in this case, * like we don't want to expose the cursor */ // if (cursor.x == c.cursor.x && cursor.y == c.cursor.y) return; bool nullMove = (cursor.x == c.cursor.x && cursor.y == c.cursor.y); // if (cursor.y != c.cursor.y || c.flags & KateView::cfMark) myDoc->recordReset(); if (! nullMove) { exposeCursor = true; // mark old position of cursor as dirty if (cursorOn) { tagLines(c.cursor.y, c.cursor.y, c.cXPos -2, c.cXPos +3); cursorOn = false; } // mark old bracket mark position as dirty if (bm.sXPos < bm.eXPos) { tagLines(bm.cursor.y, bm.cursor.y, bm.sXPos, bm.eXPos); } // make new bracket mark myDoc->newBracketMark(cursor, bm); // remove trailing spaces when leaving a line if (c.flags & KateView::cfRemoveSpaces && cursor.y != c.cursor.y) { TextLine::Ptr textLine = myDoc->getTextLine(c.cursor.y); int newLen = textLine->lastChar(); if (newLen != textLine->length()) { textLine->truncate(newLen); // if some spaces are removed, tag the line as dirty myDoc->tagLines(c.cursor.y, c.cursor.y); } } } if (c.flags & KateView::cfMark) { if (! nullMove) myDoc->selectTo(c, cursor, cXPos); } else { if (!(c.flags & KateView::cfPersistent)) myDoc->deselectAll(); } } void KateViewInternal::insLine(int line) { if (line <= cursor.y) { cursor.y++; } if (line < startLine) { startLine++; endLine++; yPos += myDoc->fontHeight; } else if (line <= endLine) { tagAll(); } } void KateViewInternal::delLine(int line) { if (line <= cursor.y && cursor.y > 0) { cursor.y--; } if (line < startLine) { startLine--; endLine--; yPos -= myDoc->fontHeight; } else if (line <= endLine) { tagAll(); } } void KateViewInternal::updateCursor() { cOldXPos = cXPos = myDoc->textWidth(cursor); } void KateViewInternal::updateCursor(PointStruc &newCursor) { updateCursor(newCursor, myView->config()); } void KateViewInternal::updateCursor(PointStruc &newCursor, int flags) { if (!(flags & KateView::cfPersistent)) myDoc->deselectAll(); exposeCursor = true; if (cursorOn) { tagLines(cursor.y, cursor.y, cXPos -2, cXPos +3); cursorOn = false; } if (bm.sXPos < bm.eXPos) { tagLines(bm.cursor.y, bm.cursor.y, bm.sXPos, bm.eXPos); } myDoc->newBracketMark(newCursor, bm); cursor = newCursor; cOldXPos = cXPos = myDoc->textWidth(cursor); } // init the line dirty cache void KateViewInternal::clearDirtyCache(int height) { int lines, z; // calc start and end line of visible part startLine = yPos/myDoc->fontHeight; endLine = (yPos + height -1)/myDoc->fontHeight; updateState = 0; lines = endLine - startLine +1; if (lines > numLines) { // resize the dirty cache numLines = lines*2; delete [] lineRanges; lineRanges = new LineRange[numLines]; } for (z = 0; z < lines; z++) { // clear all lines lineRanges[z].start = 0xffffff; lineRanges[z].end = -2; } newXPos = newYPos = -1; } void KateViewInternal::tagLines(int start, int end, int x1, int x2) { LineRange *r; int z; start -= startLine; if (start < 0) start = 0; end -= startLine; if (end > endLine - startLine) end = endLine - startLine; if (x1 <= 0) x1 = -2; if (x1 < xPos-2) x1 = xPos-2; if (x2 > width() + xPos-2) x2 = width() + xPos-2; if (x1 >= x2) return; r = &lineRanges[start]; for (z = start; z <= end; z++) { if (x1 < r->start) r->start = x1; if (x2 > r->end) r->end = x2; r++; updateState |= 1; } } void KateViewInternal::tagAll() { updateState = 3; } void KateViewInternal::setPos(int x, int y) { newXPos = x; newYPos = y; } void KateViewInternal::center() { newXPos = 0; newYPos = cursor.y*myDoc->fontHeight - height()/2; if (newYPos < 0) newYPos = 0; } void KateViewInternal::updateView(int flags) { int fontHeight; int oldXPos, oldYPos; int w, h; int z; bool b; int xMax, yMax; int cYPos; int cXPosMin, cXPosMax, cYPosMin, cYPosMax; int dx, dy; int pageScroll; int scrollbarWidth = style().scrollBarExtent().width(); //debug("upView %d %d %d %d %d", exposeCursor, updateState, flags, newXPos, newYPos); if (exposeCursor || flags & KateView::ufDocGeometry) { emit myView->newCurPos(); } else { if (updateState == 0 && newXPos < 0 && newYPos < 0) return; } if (cursorTimer) { killTimer(cursorTimer); cursorTimer = startTimer(KApplication::cursorFlashTime() / 2); cursorOn = true; } oldXPos = xPos; oldYPos = yPos; /* if (flags & ufPos) { xPos = newXPos; yPos = newYPos; exposeCursor = true; }*/ if (newXPos >= 0) xPos = newXPos; if (newYPos >= 0) yPos = newYPos; fontHeight = myDoc->fontHeight; cYPos = cursor.y*fontHeight; z = 0; do { w = myView->width() - 4; h = myView->height() - 4; xMax = myDoc->textWidth() - w; b = (xPos > 0 || xMax > 0); if (b) h -= scrollbarWidth; yMax = myDoc->textHeight() - h; if (yPos > 0 || yMax > 0) { w -= scrollbarWidth; xMax += scrollbarWidth; if (!b && xMax > 0) { h -= scrollbarWidth; yMax += scrollbarWidth; } } if (!exposeCursor) break; // if (flags & KateView::ufNoScroll) break; /* if (flags & KateView::ufCenter) { cXPosMin = xPos + w/3; cXPosMax = xPos + (w*2)/3; cYPosMin = yPos + h/3; cYPosMax = yPos + ((h - fontHeight)*2)/3; } else {*/ cXPosMin = xPos + 4; cXPosMax = xPos + w - 8; cYPosMin = yPos; cYPosMax = yPos + (h - fontHeight); // } if (cXPos < cXPosMin) { xPos -= cXPosMin - cXPos; } if (xPos < 0) xPos = 0; if (cXPos > cXPosMax) { xPos += cXPos - cXPosMax; } if (cYPos < cYPosMin) { yPos -= cYPosMin - cYPos; } if (yPos < 0) yPos = 0; if (cYPos > cYPosMax) { yPos += cYPos - cYPosMax; } z++; } while (z < 2); if (xMax < xPos) xMax = xPos; if (yMax < yPos) yMax = yPos; if (xMax > 0) { pageScroll = w - (w % fontHeight) - fontHeight; if (pageScroll <= 0) pageScroll = fontHeight; xScroll->blockSignals(true); xScroll->setGeometry(2,h + 2,w,scrollbarWidth); xScroll->setRange(0,xMax); xScroll->setValue(xPos); xScroll->setSteps(fontHeight,pageScroll); xScroll->blockSignals(false); xScroll->show(); } else xScroll->hide(); if (yMax > 0) { pageScroll = h - (h % fontHeight) - fontHeight; if (pageScroll <= 0) pageScroll = fontHeight; yScroll->blockSignals(true); yScroll->setGeometry(w + 2,2,scrollbarWidth,h); yScroll->setRange(0,yMax); yScroll->setValue(yPos); yScroll->setSteps(fontHeight,pageScroll); yScroll->blockSignals(false); yScroll->show(); } else yScroll->hide(); if (w != width() || h != height()) { clearDirtyCache(h); resize(w,h); } else { dx = oldXPos - xPos; dy = oldYPos - yPos; b = updateState == 3; if (flags & KateView::ufUpdateOnScroll) { b |= dx || dy; } else { b |= QABS(dx)*3 > w*2 || QABS(dy)*3 > h*2; } if (b) { clearDirtyCache(h); update(); } else { if (dy) leftBorder->scroll(0, dy); if (updateState > 0) paintTextLines(oldXPos, oldYPos); clearDirtyCache(h); if (dx || dy) { scroll(dx,dy); // kapp->syncX(); // scroll2(dx - dx/2,dy - dy/2); // } else { } if (cursorOn) paintCursor(); if (bm.eXPos > bm.sXPos) paintBracketMark(); } } exposeCursor = false; // updateState = 0; } void KateViewInternal::paintTextLines(int xPos, int yPos) { // int xStart, xEnd; int line;//, z; int h; LineRange *r; if (!drawBuffer) return; if (drawBuffer->isNull()) return; QPainter paint; paint.begin(drawBuffer); h = myDoc->fontHeight; r = lineRanges; for (line = startLine; line <= endLine; line++) { if (r->start < r->end) { //debug("painttextline %d %d %d", line, r->start, r->end); myDoc->paintTextLine(paint, line, r->start, r->end, myView->configFlags & KateView::cfShowTabs); bitBlt(this, r->start - (xPos-2), line*h - yPos, drawBuffer, 0, 0, r->end - r->start, h); leftBorder->paintLine(line); } r++; } paint.end(); } void KateViewInternal::paintCursor() { int h, y, x; static int cx = 0, cy = 0, ch = 0; h = myDoc->fontHeight; y = h*cursor.y - yPos; x = cXPos - (xPos-2); if(myDoc->myFont != font()) setFont(myDoc->myFont); if(cx != x || cy != y || ch != h){ cx = x; cy = y; ch = h; setMicroFocusHint(cx, cy, 0, ch - 2); } QPainter paint; if (cursorOn) { paint.begin(this); paint.setClipping(false); paint.setPen(myDoc->cursorCol(cursor.x,cursor.y)); h += y - 1; paint.drawLine(x, y, x, h); paint.end(); } else { if (drawBuffer && !drawBuffer->isNull()) { paint.begin(drawBuffer); myDoc->paintTextLine(paint, cursor.y, cXPos - 2, cXPos + 3, myView->configFlags & KateView::cfShowTabs); bitBlt(this,x - 2,y, drawBuffer, 0, 0, 5, h); paint.end(); } } } void KateViewInternal::paintBracketMark() { int y; y = myDoc->fontHeight*(bm.cursor.y +1) - yPos -1; QPainter paint; paint.begin(this); paint.setPen(myDoc->cursorCol(bm.cursor.x, bm.cursor.y)); paint.drawLine(bm.sXPos - (xPos-2), y, bm.eXPos - (xPos-2) -1, y); paint.end(); } void KateViewInternal::placeCursor(int x, int y, int flags) { VConfig c; getVConfig(c); c.flags |= flags; cursor.y = (yPos + y)/myDoc->fontHeight; cXPos = cOldXPos = myDoc->textWidth(c.flags & KateView::cfWrapCursor, cursor,xPos-2 + x); changeState(c); } // given physical coordinates, report whether the text there is selected bool KateViewInternal::isTargetSelected(int x, int y) { y = (yPos + y) / myDoc->fontHeight; TextLine::Ptr line = myDoc->getTextLine(y); if (!line) return false; x = myDoc->textPos(line, x); return line->isSelected(x); } void KateViewInternal::focusInEvent(QFocusEvent *) { // debug("got focus %d",cursorTimer); if (!cursorTimer) { cursorTimer = startTimer(KApplication::cursorFlashTime() / 2); cursorOn = true; paintCursor(); } } void KateViewInternal::focusOutEvent(QFocusEvent *) { // debug("lost focus %d", cursorTimer); if (cursorTimer) { killTimer(cursorTimer); cursorTimer = 0; } if (cursorOn) { cursorOn = false; paintCursor(); } } void KateViewInternal::keyPressEvent(QKeyEvent *e) { VConfig c; // int ascii; /* if (e->state() & AltButton) { e->ignore(); return; }*/ // debug("ascii %i, key %i, state %i",e->ascii(), e->key(), e->state()); getVConfig(c); // ascii = e->ascii(); if (!myView->isReadOnly()) { if (c.flags & KateView::cfTabIndents && myDoc->hasMarkedText()) { if (e->key() == Qt::Key_Tab) { myDoc->indent(c); myDoc->updateViews(); return; } if (e->key() == Qt::Key_Backtab) { myDoc->unIndent(c); myDoc->updateViews(); return; } } if ( !(e->state() & ControlButton ) && myDoc->insertChars(c, e->text())) { myDoc->updateViews(); e->accept(); return; } } e->ignore(); } void KateViewInternal::mousePressEvent(QMouseEvent *e) { if (e->button() == LeftButton) { int flags; flags = 0; if (e->state() & ShiftButton) { flags |= KateView::cfMark; if (e->state() & ControlButton) flags |= KateView::cfMark | KateView::cfKeepSelection; } placeCursor(e->x(), e->y(), flags); scrollX = 0; scrollY = 0; if (!scrollTimer) scrollTimer = startTimer(50); myDoc->updateViews(); } if (e->button() == MidButton) { placeCursor(e->x(), e->y()); if (! myView->isReadOnly()) myView->paste(); } if (myView->rmbMenu && e->button() == RightButton) { myView->rmbMenu->popup(mapToGlobal(e->pos())); } myView->mousePressEvent(e); // this doesn't do anything, does it? // it does :-), we need this for KDevelop, so please don't uncomment it again -Sandy } void KateViewInternal::mouseDoubleClickEvent(QMouseEvent *e) { if (e->button() == LeftButton) { VConfig c; getVConfig(c); myDoc->selectWord(c.cursor, c.flags); myDoc->updateViews(); } } void KateViewInternal::mouseReleaseEvent(QMouseEvent *e) { if (e->button() == LeftButton) { if (myView->config() & KateView::cfMouseAutoCopy) myView->copy(); killTimer(scrollTimer); scrollTimer = 0; } } void KateViewInternal::mouseMoveEvent(QMouseEvent *e) { if (e->state() & LeftButton) { int flags; int d; int x = e->x(), y = e->y(); mouseX = e->x(); mouseY = e->y(); scrollX = 0; scrollY = 0; d = myDoc->fontHeight; if (mouseX < 0) { mouseX = 0; scrollX = -d; } if (mouseX > width()) { mouseX = width(); scrollX = d; } if (mouseY < 0) { mouseY = 0; scrollY = -d; } if (mouseY > height()) { mouseY = height(); scrollY = d; } //debug("modifiers %d", ((KGuiCmdApp *) kapp)->getModifiers()); flags = KateView::cfMark; if (e->state() & ControlButton) flags |= KateView::cfKeepSelection; placeCursor(mouseX, mouseY, flags); myDoc->updateViews(/*ufNoScroll*/); } } void KateViewInternal::wheelEvent( QWheelEvent *e ) { if( yScroll->isVisible() == true ) { QApplication::sendEvent( yScroll, e ); } } void KateViewInternal::paintEvent(QPaintEvent *e) { int xStart, xEnd; int h; int line, y, yEnd; QRect updateR = e->rect(); if (!drawBuffer) return; if (drawBuffer->isNull()) return; QPainter paint; paint.begin(drawBuffer); xStart = xPos-2 + updateR.x(); xEnd = xStart + updateR.width(); h = myDoc->fontHeight; line = (yPos + updateR.y()) / h; y = line*h - yPos; yEnd = updateR.y() + updateR.height(); waitForPreHighlight=myDoc->needPreHighlight(waitForPreHighlight=line+((long)(yEnd-y)/h)+5); while (y < yEnd) { TextLine *textLine; int ctxNum = 0; myDoc->paintTextLine(paint, line, xStart, xEnd, myView->configFlags & KateView::cfShowTabs); bitBlt(this, updateR.x(), y, drawBuffer, 0, 0, updateR.width(), h); leftBorder->paintLine(line); line++; y += h; } paint.end(); if (cursorOn) paintCursor(); if (bm.eXPos > bm.sXPos) paintBracketMark(); } void KateViewInternal::resizeEvent(QResizeEvent *) { drawBuffer->resize (width(), myDoc->fontHeight); leftBorder->resize(iconBorderWidth, height()); } void KateViewInternal::timerEvent(QTimerEvent *e) { if (e->timerId() == cursorTimer) { cursorOn = !cursorOn; paintCursor(); } if (e->timerId() == scrollTimer && (scrollX | scrollY)) { xScroll->setValue(xPos + scrollX); yScroll->setValue(yPos + scrollY); placeCursor(mouseX, mouseY, KateView::cfMark); myDoc->updateViews(/*ufNoScroll*/); } } uint KateView::uniqueID = 0; KateView::KateView(KateDocument *doc, QWidget *parent, const char * name) : Kate::View (doc, parent, name) { myViewID = uniqueID; uniqueID++; active = false; myIconBorder = false; myDoc = doc; myViewInternal = new KateViewInternal (this,doc); myViewInternal->move(2, 2); myViewInternal->leftBorder = new KateIconBorder(this, myViewInternal); myViewInternal->leftBorder->setGeometry(2, 2, myViewInternal->iconBorderWidth, myViewInternal->iconBorderHeight); myViewInternal->leftBorder->hide(); doc->addView( this ); // some defaults configFlags = KateView::cfAutoIndent | KateView::cfBackspaceIndents | KateView::cfTabIndents | KateView::cfKeepIndentProfile | KateView::cfRemoveSpaces | KateView::cfDelOnInput | KateView::cfMouseAutoCopy | KateView::cfWrapCursor | KateView::cfGroupUndo | KateView::cfShowTabs | KateView::cfSmartHome; searchFlags = 0; replacePrompt = 0L; rmbMenu = 0L; setFocusProxy( myViewInternal ); myViewInternal->setFocus(); resize(parent->width() -4, parent->height() -4); myViewInternal->installEventFilter( this ); //setupActions(); connect( this, SIGNAL( newStatus() ), this, SLOT( slotUpdate() ) ); connect( this, SIGNAL( newUndo() ), this, SLOT( slotNewUndo() ) ); connect( doc, SIGNAL( fileNameChanged() ), this, SLOT( slotFileStatusChanged() ) ); connect( doc, SIGNAL( highlightChanged() ), this, SLOT( slotHighlightChanged() ) ); readConfig(); // setHighlight->setCurrentItem(getHl()); slotUpdate(); } KateView::~KateView() { writeConfig(); if (myDoc && !myDoc->m_bSingleViewMode) myDoc->removeView( this ); delete myViewInternal; } #if 0 void KateView::setupActions() { #if 0 KStdAction::close( this, SLOT(flush()), actionCollection(), "file_close" ); KStdAction::save(this, SLOT(save()), actionCollection()); // setup edit menu editUndo = KStdAction::undo(this, SLOT(undo()), actionCollection()); editRedo = KStdAction::redo(this, SLOT(redo()), actionCollection()); editUndoHist = new KAction(i18n("Undo/Redo &History..."), 0, this, SLOT(undoHistory()), actionCollection(), "edit_undoHistory"); KStdAction::cut(this, SLOT(cut()), actionCollection()); KStdAction::copy(this, SLOT(copy()), actionCollection()); KStdAction::paste(this, SLOT(paste()), actionCollection()); if ( myDoc->hasBrowserExtension() ) { KStdAction::saveAs(this, SLOT(saveAs()), myDoc->actionCollection()); KStdAction::find(this, SLOT(find()), myDoc->actionCollection(), "find"); KStdAction::findNext(this, SLOT(findAgain()), myDoc->actionCollection(), "find_again"); KStdAction::findPrev(this, SLOT(findPrev()), myDoc->actionCollection(), "find_prev"); KStdAction::gotoLine(this, SLOT(gotoLine()), myDoc->actionCollection(), "goto_line" ); new KAction(i18n("&Configure Editor..."), 0, this, SLOT(configDialog()),myDoc->actionCollection(), "set_confdlg"); setHighlight = new KSelectAction(i18n("&Highlight Mode"), 0, myDoc->actionCollection(), "set_highlight"); KStdAction::selectAll(this, SLOT(selectAll()), myDoc->actionCollection(), "select_all"); new KAction(i18n("&Deselect All"), 0, this, SLOT(deselectAll()), myDoc->actionCollection(), "unselect_all"); new KAction(i18n("Invert &Selection"), 0, this, SLOT(invertSelection()), myDoc->actionCollection(), "invert_select"); new KAction(i18n("Increase Font Sizes"), "viewmag+", 0, this, SLOT(slotIncFontSizes()), myDoc->actionCollection(), "incFontSizes"); new KAction(i18n("Decrease Font Sizes"), "viewmag-", 0, this, SLOT(slotDecFontSizes()), myDoc->actionCollection(), "decFontSizes"); } else { KStdAction::saveAs(this, SLOT(saveAs()), actionCollection()); KStdAction::find(this, SLOT(find()), actionCollection()); KStdAction::findNext(this, SLOT(findAgain()), actionCollection()); KStdAction::findPrev(this, SLOT(findPrev()), actionCollection(), "edit_find_prev"); KStdAction::gotoLine(this, SLOT(gotoLine()), actionCollection()); new KAction(i18n("&Configure Editor..."), 0, this, SLOT(configDialog()),actionCollection(), "set_confdlg"); setHighlight = new KSelectAction(i18n("&Highlight Mode"), 0, actionCollection(), "set_highlight"); KStdAction::selectAll(this, SLOT(selectAll()), actionCollection()); new KAction(i18n("&Deselect All"), 0, this, SLOT(deselectAll()), actionCollection(), "edit_deselectAll"); new KAction(i18n("Invert &Selection"), 0, this, SLOT(invertSelection()), actionCollection(), "edit_invertSelection"); new KAction(i18n("Increase Font Sizes"), "viewmag+", 0, this, SLOT(slotIncFontSizes()), actionCollection(), "incFontSizes"); new KAction(i18n("Decrease Font Sizes"), "viewmag-", 0, this, SLOT(slotDecFontSizes()), actionCollection(), "decFontSizes"); } new KAction(i18n("Apply Word Wrap"), 0, myDoc, SLOT(applyWordWrap()), actionCollection(), "edit_apply_wordwrap"); KStdAction::replace(this, SLOT(replace()), actionCollection()); new KAction(i18n("Editing Co&mmand"), Qt::CTRL+Qt::Key_M, this, SLOT(slotEditCommand()), actionCollection(), "edit_cmd"); // setup bookmark menu bookmarkToggle = new KAction(i18n("Toggle &Bookmark"), Qt::CTRL+Qt::Key_B, this, SLOT(toggleBookmark()), actionCollection(), "edit_bookmarkToggle"); bookmarkClear = new KAction(i18n("Clear Bookmarks"), 0, this, SLOT(clearBookmarks()), actionCollection(), "edit_bookmarksClear"); // connect settings menu aboutToshow bookmarkMenu = new KActionMenu(i18n("&Bookmarks"), actionCollection(), "bookmarks"); connect(bookmarkMenu->popupMenu(), SIGNAL(aboutToShow()), this, SLOT(bookmarkMenuAboutToShow())); new KToggleAction(i18n("Show &IconBorder"), Key_F6, this, SLOT(toggleIconBorder()), actionCollection(), "view_border"); // setup Tools menu KStdAction::spelling(this, SLOT(spellcheck()), actionCollection()); new KAction(i18n("&Indent"), "indent", Qt::CTRL+Qt::Key_I, this, SLOT(indent()), actionCollection(), "tools_indent"); new KAction(i18n("&Unindent"), "unindent", Qt::CTRL+Qt::Key_U, this, SLOT(unIndent()), actionCollection(), "tools_unindent"); new KAction(i18n("&Clean Indentation"), 0, this, SLOT(cleanIndent()), actionCollection(), "tools_cleanIndent"); new KAction(i18n("C&omment"), CTRL+Qt::Key_NumberSign, this, SLOT(comment()), actionCollection(), "tools_comment"); new KAction(i18n("Unco&mment"), CTRL+SHIFT+Qt::Key_NumberSign, this, SLOT(uncomment()), actionCollection(), "tools_uncomment"); setVerticalSelection = new KToggleAction(i18n("&Vertical Selection"), Key_F4, this, SLOT(toggleVertical()), actionCollection(), "set_verticalSelect"); connect(setHighlight, SIGNAL(activated(int)), this, SLOT(setHl(int))); QStringList list; for (int z = 0; z < HlManager::self()->highlights(); z++) list.append(HlManager::self()->hlName(z)); setHighlight->setItems(list); setEndOfLine = new KSelectAction(i18n("&End Of Line"), 0, actionCollection(), "set_eol"); connect(setEndOfLine, SIGNAL(activated(int)), this, SLOT(setEol(int))); list.clear(); list.append("&Unix"); list.append("&Windows/Dos"); list.append("&Macintosh"); setEndOfLine->setItems(list); #endif } #endif void KateView::slotUpdate() { int cfg = config(); #warning fixme setVerticalSelection->setChecked(cfg & KateView::cfVerticalSelect); slotNewUndo(); } void KateView::slotFileStatusChanged() { int eol = getEol(); eol = eol>=1 ? eol : 0; #warning fixme setEndOfLine->setCurrentItem(eol); } void KateView::slotNewUndo() { #if 0 int state = undoState(); editUndoHist->setEnabled(state & 1 || state & 2); QString t = i18n("Und&o"); // it would be nicer to fetch the original string if (state & 1) { editUndo->setEnabled(true); t += ' '; t += i18n(undoTypeName(nextUndoType())); } else { editUndo->setEnabled(false); } editUndo->setText(t); t = i18n("Re&do"); // it would be nicer to fetch the original string if (state & 2) { editRedo->setEnabled(true); t += ' '; t += i18n(undoTypeName(nextRedoType())); } else { editRedo->setEnabled(false); } editRedo->setText(t); #endif } void KateView::slotHighlightChanged() { // setHighlight->setCurrentItem(getHl()); } void KateView::keyPressEvent( QKeyEvent *ev ) { switch ( ev->key() ) { case Key_Left: if ( ev->state() & ShiftButton ) { if ( ev->state() & ControlButton ) shiftWordLeft(); else shiftCursorLeft(); } else if ( ev->state() & ControlButton ) wordLeft(); else cursorLeft(); break; case Key_Right: if ( ev->state() & ShiftButton ) { if ( ev->state() & ControlButton ) shiftWordRight(); else shiftCursorRight(); } else if ( ev->state() & ControlButton ) wordRight(); else cursorRight(); break; case Key_Home: if ( ev->state() & ShiftButton ) { if ( ev->state() & ControlButton ) shiftTop(); else shiftHome(); } else if ( ev->state() & ControlButton ) top(); else home(); break; case Key_End: if ( ev->state() & ShiftButton ) { if ( ev->state() & ControlButton ) shiftBottom(); else shiftEnd(); } else if ( ev->state() & ControlButton ) bottom(); else end(); break; case Key_Up: if ( ev->state() & ShiftButton ) shiftUp(); else if ( ev->state() & ControlButton ) scrollUp(); else up(); break; case Key_Down: if ( ev->state() & ShiftButton ) shiftDown(); else if ( ev->state() & ControlButton ) scrollDown(); else down(); break; case Key_PageUp: if ( ev->state() & ShiftButton ) shiftPageUp(); else if ( ev->state() & ControlButton ) topOfView(); else pageUp(); break; case Key_PageDown: if ( ev->state() & ShiftButton ) shiftPageDown(); else if ( ev->state() & ControlButton ) bottomOfView(); else pageDown(); break; case Key_Return: case Key_Enter: keyReturn(); break; case Key_Delete: if ( ev->state() & ControlButton ) { VConfig c; shiftWordRight(); myViewInternal->getVConfig(c); myDoc->delMarkedText(c); myViewInternal->update(); } else keyDelete(); break; case Key_Backspace: if ( ev->state() & ControlButton ) { VConfig c; shiftWordLeft(); myViewInternal->getVConfig(c); myDoc->delMarkedText(c); myViewInternal->update(); } else backspace(); break; case Key_Insert: toggleInsert(); break; case Key_K: if ( ev->state() & ControlButton ) { killLine(); break; } default: KTextEditor::View::keyPressEvent( ev ); return; break; } ev->accept(); } void KateView::setCursorPosition( int line, int col, bool /*mark*/ ) { setCursorPositionInternal( line, col ); } void KateView::getCursorPosition( int *line, int *col ) { if ( line ) *line = currentLine(); if ( col ) *col = currentColumn(); } int KateView::currentLine() { return myViewInternal->cursor.y; } int KateView::currentColumn() { return myDoc->currentColumn(myViewInternal->cursor); } int KateView::currentCharNum() { return myViewInternal->cursor.x; } void KateView::setCursorPositionInternal(int line, int col) { PointStruc cursor; cursor.x = col; cursor.y = line; myViewInternal->updateCursor(cursor); myViewInternal->center(); // myViewInternal->updateView(ufPos, 0, line*myDoc->fontHeight - height()/2); // myDoc->updateViews(myViewInternal); //uptade all other views except this one myDoc->updateViews(); } int KateView::config() { int flags; flags = configFlags; if (myDoc->singleSelection()) flags |= KateView::cfSingleSelection; return flags; } void KateView::setConfig(int flags) { bool updateView; // cfSingleSelection is a doc-property myDoc->setSingleSelection(flags & KateView::cfSingleSelection); flags &= ~KateView::cfSingleSelection; if (flags != configFlags) { // update the view if visibility of tabs has changed updateView = (flags ^ configFlags) & KateView::cfShowTabs; configFlags = flags; emit newStatus(); if (updateView) myViewInternal->update(); } } int KateView::tabWidth() { return myDoc->tabChars; } void KateView::setTabWidth(int w) { myDoc->setTabWidth(w); myDoc->updateViews(); } void KateView::setEncoding (QString e) { myDoc->setEncoding (e); myDoc->updateViews(); } int KateView::undoSteps() { return myDoc->undoSteps; } void KateView::setUndoSteps(int s) { myDoc->setUndoSteps(s); } bool KateView::isReadOnly() { return myDoc->readOnly; } bool KateView::isModified() { return myDoc->modified; } void KateView::setReadOnly(bool m) { myDoc->setReadOnly(m); } void KateView::setModified(bool m) { myDoc->setModified(m); } bool KateView::isLastView() { return myDoc->isLastView(1); } KateDocument *KateView::doc() { return myDoc; } int KateView::undoState() { if (isReadOnly()) return 0; else return myDoc->undoState; } int KateView::nextUndoType() { return myDoc->nextUndoType(); } int KateView::nextRedoType() { return myDoc->nextRedoType(); } void KateView::undoTypeList(QValueList<int> &lst) { myDoc->undoTypeList(lst); } void KateView::redoTypeList(QValueList<int> &lst) { myDoc->redoTypeList(lst); } const char * KateView::undoTypeName(int type) { return KateActionGroup::typeName(type); } QColor* KateView::getColors() { return myDoc->colors; } void KateView::applyColors() { myDoc->tagAll(); myDoc->updateViews(); } bool KateView::isOverwriteMode() const { return ( configFlags & KateView::cfOvr ); } void KateView::setOverwriteMode( bool b ) { if ( isOverwriteMode() && !b ) setConfig( configFlags ^ KateView::cfOvr ); else setConfig( configFlags | KateView::cfOvr ); } void KateView::toggleInsert() { setConfig(configFlags ^ KateView::cfOvr); } void KateView::toggleVertical() { setConfig(configFlags ^ KateView::cfVerticalSelect); } int KateView::numLines() { return myDoc->numLines(); } QString KateView::text() { return myDoc->text(); } QString KateView::currentTextLine() { TextLine::Ptr textLine = myDoc->getTextLine(myViewInternal->cursor.y); return QString(textLine->getText(), textLine->length()); } QString KateView::textLine(int num) { TextLine::Ptr textLine = myDoc->getTextLine(num); return QString(textLine->getText(), textLine->length()); } QString KateView::currentWord() { return myDoc->getWord(myViewInternal->cursor); } QString KateView::word(int x, int y) { PointStruc cursor; cursor.y = (myViewInternal->yPos + y)/myDoc->fontHeight; if (cursor.y < 0 || cursor.y > myDoc->lastLine()) return QString(); cursor.x = myDoc->textPos(myDoc->getTextLine(cursor.y), myViewInternal->xPos-2 + x); return myDoc->getWord(cursor); } void KateView::setText(const QString &s) { myDoc->setText(s); myDoc->updateViews(); } void KateView::insertText(const QString &s, bool /*mark*/) { VConfig c; myViewInternal->getVConfig(c); myDoc->insert(c, s); myDoc->updateViews(); } bool KateView::hasMarkedText() { return myDoc->hasMarkedText(); } QString KateView::markedText() { return myDoc->markedText(configFlags); } bool KateView::canDiscard() { int query; if (isModified()) { query = KMessageBox::warningYesNoCancel(this, i18n("The current Document has been modified.\nWould you like to save it?")); switch (query) { case KMessageBox::Yes: //yes if (save() == CANCEL) return false; if (isModified()) { query = KMessageBox::warningContinueCancel(this, i18n("Could not save the document.\nDiscard it and continue?"), QString::null, i18n("&Discard")); if (query == KMessageBox::Cancel) return false; } break; case KMessageBox::Cancel: //cancel return false; } } return true; } void KateView::flush() { if (canDiscard()) myDoc->flush(); } KateView::fileResult KateView::save() { int query = KMessageBox::Yes; if (isModified()) { return saveAs(); } return OK; } KateView::fileResult KateView::saveAs() { return OK; } void KateView::doCursorCommand(int cmdNum) { VConfig c; myViewInternal->getVConfig(c); if (cmdNum & selectFlag) c.flags |= KateView::cfMark; if (cmdNum & multiSelectFlag) c.flags |= KateView::cfMark | KateView::cfKeepSelection; cmdNum &= ~(selectFlag | multiSelectFlag); myViewInternal->doCursorCommand(c, cmdNum); myDoc->updateViews(); } void KateView::doEditCommand(int cmdNum) { VConfig c; myViewInternal->getVConfig(c); myViewInternal->doEditCommand(c, cmdNum); myDoc->updateViews(); } void KateView::undoMultiple(int count) { if (isReadOnly()) return; VConfig c; myViewInternal->getVConfig(c); myDoc->undo(c, count); myDoc->updateViews(); } void KateView::redoMultiple(int count) { if (isReadOnly()) return; VConfig c; myViewInternal->getVConfig(c); myDoc->redo(c, count); myDoc->updateViews(); } void KateView::undoHistory() { UndoHistory *undoH; undoH = new UndoHistory(this, this, "UndoHistory", true); undoH->setCaption(i18n("Undo/Redo History")); connect(this,SIGNAL(newUndo()),undoH,SLOT(newUndo())); connect(undoH,SIGNAL(undo(int)),this,SLOT(undoMultiple(int))); connect(undoH,SIGNAL(redo(int)),this,SLOT(redoMultiple(int))); undoH->exec(); delete undoH; } static void kwview_addToStrList(QStringList &list, const QString &str) { if (list.count() > 0) { if (list.first() == str) return; QStringList::Iterator it; it = list.find(str); if (*it != 0L) list.remove(it); if (list.count() >= 16) list.remove(list.fromLast()); } list.prepend(str); } void KateView::find() { SearchDialog *searchDialog; if (!myDoc->hasMarkedText()) searchFlags &= ~KateView::sfSelected; searchDialog = new SearchDialog(this, myDoc->searchForList, myDoc->replaceWithList, searchFlags & ~KateView::sfReplace); // If the user has marked some text we use that otherwise // use the word under the cursor. QString str; if (myDoc->hasMarkedText()) str = markedText(); if (str.isEmpty()) str = currentWord(); if (!str.isEmpty()) { str.replace(QRegExp("^\n"), ""); int pos=str.find("\n"); if (pos>-1) str=str.left(pos); searchDialog->setSearchText( str ); } myViewInternal->focusOutEvent(0L);// QT bug ? if (searchDialog->exec() == QDialog::Accepted) { kwview_addToStrList(myDoc->searchForList, searchDialog->getSearchFor()); searchFlags = searchDialog->getFlags() | (searchFlags & KateView::sfPrompt); initSearch(s, searchFlags); findAgain(s); } delete searchDialog; } void KateView::replace() { SearchDialog *searchDialog; if (isReadOnly()) return; if (!myDoc->hasMarkedText()) searchFlags &= ~KateView::sfSelected; searchDialog = new SearchDialog(this, myDoc->searchForList, myDoc->replaceWithList, searchFlags | KateView::sfReplace); // If the user has marked some text we use that otherwise // use the word under the cursor. QString str; if (myDoc->hasMarkedText()) str = markedText(); if (str.isEmpty()) str = currentWord(); if (!str.isEmpty()) { str.replace(QRegExp("^\n"), ""); int pos=str.find("\n"); if (pos>-1) str=str.left(pos); searchDialog->setSearchText( str ); } myViewInternal->focusOutEvent(0L);// QT bug ? if (searchDialog->exec() == QDialog::Accepted) { // myDoc->recordReset(); kwview_addToStrList(myDoc->searchForList, searchDialog->getSearchFor()); kwview_addToStrList(myDoc->replaceWithList, searchDialog->getReplaceWith()); searchFlags = searchDialog->getFlags(); initSearch(s, searchFlags); replaceAgain(); } delete searchDialog; } void KateView::gotoLine() { GotoLineDialog *dlg; PointStruc cursor; dlg = new GotoLineDialog(this, myViewInternal->cursor.y + 1, myDoc->numLines()); // dlg = new GotoLineDialog(myViewInternal->cursor.y + 1, this); if (dlg->exec() == QDialog::Accepted) { // myDoc->recordReset(); cursor.x = 0; cursor.y = dlg->getLine() - 1; myDoc->needPreHighlight(cursor.y); myViewInternal->updateCursor(cursor); myViewInternal->center(); myViewInternal->updateView(KateView::ufUpdateOnScroll); myDoc->updateViews(this); //uptade all other views except this one } delete dlg; } void KateView::initSearch(SConfig &s, int flags) { s.flags = flags; s.setPattern(myDoc->searchForList.first()); if (!(s.flags & KateView::sfFromBeginning)) { // If we are continuing a backward search, make sure we do not get stuck // at an existing match. s.cursor = myViewInternal->cursor; TextLine::Ptr textLine = myDoc->getTextLine(s.cursor.y); QString const txt(textLine->getText(),textLine->length()); const QString searchFor= myDoc->searchForList.first(); int pos = s.cursor.x-searchFor.length()-1; if ( pos < 0 ) pos = 0; pos= txt.find(searchFor, pos, s.flags & KateView::sfCaseSensitive); if ( s.flags & KateView::sfBackward ) { if ( pos <= s.cursor.x ) s.cursor.x= pos-1; } else if ( pos == s.cursor.x ) s.cursor.x++; } else { if (!(s.flags & KateView::sfBackward)) { s.cursor.x = 0; s.cursor.y = 0; } else { s.cursor.x = -1; s.cursor.y = myDoc->lastLine(); } s.flags |= KateView::sfFinished; } if (!(s.flags & KateView::sfBackward)) { if (!(s.cursor.x || s.cursor.y)) s.flags |= KateView::sfFinished; } s.startCursor = s.cursor; } void KateView::continueSearch(SConfig &s) { if (!(s.flags & KateView::sfBackward)) { s.cursor.x = 0; s.cursor.y = 0; } else { s.cursor.x = -1; s.cursor.y = myDoc->lastLine(); } s.flags |= KateView::sfFinished; s.flags &= ~KateView::sfAgain; } void KateView::findAgain(SConfig &s) { int query; PointStruc cursor; QString str; QString searchFor = myDoc->searchForList.first(); if( searchFor.isEmpty() ) { find(); return; } do { query = KMessageBox::Cancel; if (myDoc->doSearch(s,searchFor)) { cursor = s.cursor; if (!(s.flags & KateView::sfBackward)) s.cursor.x += s.matchedLength; myViewInternal->updateCursor(s.cursor); //does deselectAll() exposeFound(cursor,s.matchedLength,(s.flags & KateView::sfAgain) ? 0 : KateView::ufUpdateOnScroll,false); } else { if (!(s.flags & KateView::sfFinished)) { // ask for continue if (!(s.flags & KateView::sfBackward)) { // forward search str = i18n("End of document reached.\n" "Continue from the beginning?"); query = KMessageBox::warningContinueCancel(this, str, i18n("Find"), i18n("Continue")); } else { // backward search str = i18n("Beginning of document reached.\n" "Continue from the end?"); query = KMessageBox::warningContinueCancel(this, str, i18n("Find"), i18n("Continue")); } continueSearch(s); } else { // wrapped KMessageBox::sorry(this, i18n("Search string '%1' not found!").arg(searchFor), i18n("Find")); } } } while (query == KMessageBox::Continue); } void KateView::replaceAgain() { if (isReadOnly()) return; replaces = 0; if (s.flags & KateView::sfPrompt) { doReplaceAction(-1); } else { doReplaceAction(KateView::srAll); } } void KateView::doReplaceAction(int result, bool found) { int rlen; PointStruc cursor; bool started; QString searchFor = myDoc->searchForList.first(); QString replaceWith = myDoc->replaceWithList.first(); rlen = replaceWith.length(); switch (result) { case KateView::srYes: //yes myDoc->recordStart(this, s.cursor, configFlags, KateActionGroup::ugReplace, true); myDoc->recordReplace(s.cursor, s.matchedLength, replaceWith); replaces++; if (s.cursor.y == s.startCursor.y && s.cursor.x < s.startCursor.x) s.startCursor.x += rlen - s.matchedLength; if (!(s.flags & KateView::sfBackward)) s.cursor.x += rlen; myDoc->recordEnd(this, s.cursor, configFlags | KateView::cfPersistent); break; case KateView::srNo: //no if (!(s.flags & KateView::sfBackward)) s.cursor.x += s.matchedLength; break; case KateView::srAll: //replace all deleteReplacePrompt(); do { started = false; while (found || myDoc->doSearch(s,searchFor)) { if (!started) { found = false; myDoc->recordStart(this, s.cursor, configFlags, KateActionGroup::ugReplace); started = true; } myDoc->recordReplace(s.cursor, s.matchedLength, replaceWith); replaces++; if (s.cursor.y == s.startCursor.y && s.cursor.x < s.startCursor.x) s.startCursor.x += rlen - s.matchedLength; if (!(s.flags & KateView::sfBackward)) s.cursor.x += rlen; } if (started) myDoc->recordEnd(this, s.cursor, configFlags | KateView::cfPersistent); } while (!askReplaceEnd()); return; case KateView::srCancel: //cancel deleteReplacePrompt(); return; default: replacePrompt = 0L; } do { if (myDoc->doSearch(s,searchFor)) { //text found: highlight it, show replace prompt if needed and exit cursor = s.cursor; if (!(s.flags & KateView::sfBackward)) cursor.x += s.matchedLength; myViewInternal->updateCursor(cursor); //does deselectAll() exposeFound(s.cursor,s.matchedLength,(s.flags & KateView::sfAgain) ? 0 : KateView::ufUpdateOnScroll,true); if (replacePrompt == 0L) { replacePrompt = new ReplacePrompt(this); myDoc->setPseudoModal(replacePrompt);//disable(); connect(replacePrompt,SIGNAL(clicked()),this,SLOT(replaceSlot())); replacePrompt->show(); //this is not modal } return; //exit if text found } //nothing found: repeat until user cancels "repeat from beginning" dialog } while (!askReplaceEnd()); deleteReplacePrompt(); } void KateView::exposeFound(PointStruc &cursor, int slen, int flags, bool replace) { int x1, x2, y1, y2, xPos, yPos; VConfig c; myViewInternal->getVConfig(c); myDoc->selectLength(cursor,slen,c.flags); TextLine::Ptr textLine = myDoc->getTextLine(cursor.y); x1 = myDoc->textWidth(textLine,cursor.x) -10; x2 = myDoc->textWidth(textLine,cursor.x + slen) +20; y1 = myDoc->fontHeight*cursor.y -10; y2 = y1 + myDoc->fontHeight +30; xPos = myViewInternal->xPos; yPos = myViewInternal->yPos; if (x1 < 0) x1 = 0; if (replace) y2 += 90; if (x1 < xPos || x2 > xPos + myViewInternal->width()) { xPos = x2 - myViewInternal->width(); } if (y1 < yPos || y2 > yPos + myViewInternal->height()) { xPos = x2 - myViewInternal->width(); yPos = myDoc->fontHeight*cursor.y - height()/3; } myViewInternal->setPos(xPos, yPos); myViewInternal->updateView(flags);// | ufPos,xPos,yPos); myDoc->updateViews(this); } void KateView::deleteReplacePrompt() { myDoc->setPseudoModal(0L); } bool KateView::askReplaceEnd() { QString str; int query; myDoc->updateViews(); if (s.flags & KateView::sfFinished) { // replace finished str = i18n("%1 replacement(s) made").arg(replaces); KMessageBox::information(this, str, i18n("Replace")); return true; } // ask for continue if (!(s.flags & KateView::sfBackward)) { // forward search str = i18n("%1 replacement(s) made.\n" "End of document reached.\n" "Continue from the beginning?").arg(replaces); query = KMessageBox::questionYesNo(this, str, i18n("Replace"), i18n("Continue"), i18n("Stop")); } else { // backward search str = i18n("%1 replacement(s) made.\n" "Beginning of document reached.\n" "Continue from the end?").arg(replaces); query = KMessageBox::questionYesNo(this, str, i18n("Replace"), i18n("Continue"), i18n("Stop")); } replaces = 0; continueSearch(s); return (query == KMessageBox::No); } void KateView::replaceSlot() { doReplaceAction(replacePrompt->result(),true); } void KateView::installPopup(QPopupMenu *rmb_Menu) { rmbMenu = rmb_Menu; } void KateView::readConfig() { KateConfig *config = KGlobal::config(); config->setGroup("Kate View"); searchFlags = config->readNumEntry("SearchFlags", KateView::sfPrompt); configFlags = config->readNumEntry("ConfigFlags", configFlags) & ~KateView::cfMark; // config->sync(); } void KateView::writeConfig() { KateConfig *config = KGlobal::config(); config->setGroup("Kate View"); config->writeEntry("SearchFlags",searchFlags); config->writeEntry("ConfigFlags",configFlags); // config->sync(); } void KateView::readSessionConfig(KateConfig *config) { PointStruc cursor; myViewInternal->xPos = config->readNumEntry("XPos"); myViewInternal->yPos = config->readNumEntry("YPos"); cursor.x = config->readNumEntry("CursorX"); cursor.y = config->readNumEntry("CursorY"); myViewInternal->updateCursor(cursor); myIconBorder = config->readBoolEntry("IconBorder on"); setIconBorder(myIconBorder); } void KateView::writeSessionConfig(KateConfig *config) { config->writeEntry("XPos",myViewInternal->xPos); config->writeEntry("YPos",myViewInternal->yPos); config->writeEntry("CursorX",myViewInternal->cursor.x); config->writeEntry("CursorY",myViewInternal->cursor.y); config->writeEntry("IconBorder on", myIconBorder); } void KateView::configDialog() { #warning fixme #if 1 KDialogBase *kd = new KDialogBase(KDialogBase::IconList, i18n("Configure Editor"), KDialogBase::Ok | KDialogBase::Cancel | KDialogBase::Help , KDialogBase::Ok, this, "tabdialog"); // color options QFrame *page=kd->addPage(i18n("Colors")); (new QVBoxLayout(page))->setAutoAdd(true); ColorConfig *colorConfig = new ColorConfig(page); QColor* colors = getColors(); colorConfig->setColors(colors); page = kd->addPage(i18n("Fonts")); (new QVBoxLayout(page))->setAutoAdd(true); FontConfig *fontConfig = new FontConfig(page); fontConfig->setFont (myDoc->getFont()); // indent options page=kd->addPage(i18n("Indent")); (new QVBoxLayout(page))->setAutoAdd(true); IndentConfigTab *indentConfig = new IndentConfigTab(page, this); // select options page=kd->addPage(i18n("Select")); (new QVBoxLayout(page))->setAutoAdd(true); SelectConfigTab *selectConfig = new SelectConfigTab(page, this); // edit options page=kd->addPage(i18n("Edit")); (new QVBoxLayout(page))->setAutoAdd(true); EditConfigTab *editConfig = new EditConfigTab(page, this); HighlightDialogPage *hlPage; HlManager *hlManager; HlDataList hlDataList; ItemStyleList defaultStyleList; hlManager = HlManager::self(); defaultStyleList.setAutoDelete(true); hlManager->getDefaults(defaultStyleList); hlDataList.setAutoDelete(true); //this gets the data from the KateConfig object hlManager->getHlDataList(hlDataList); page=kd->addPage(i18n("Highlighting")); (new QVBoxLayout(page))->setAutoAdd(true); hlPage = new HighlightDialogPage(hlManager, &defaultStyleList, &hlDataList, 0, page); - kd->showMaximized(); - if (kd->exec()) { + if ( QPEApplication::execDialog( kd )) { // color options colorConfig->getColors(colors); myDoc->setFont (fontConfig->getFont()); applyColors(); // indent options indentConfig->getData(this); // select options selectConfig->getData(this); // edit options editConfig->getData(this); // spell checker hlManager->setHlDataList(hlDataList); hlManager->setDefaults(defaultStyleList); hlPage->saveData(); } // delete kd; #endif } int KateView::getHl() { return myDoc->highlightNum(); } void KateView::setDontChangeHlOnSave() { myDoc->setDontChangeHlOnSave(); } void KateView::setHl(int n) { myDoc->setHighlight(n); myDoc->setDontChangeHlOnSave(); myDoc->updateViews(); } int KateView::getEol() { return myDoc->eolMode; } void KateView::setEol(int eol) { if (isReadOnly()) return; myDoc->eolMode = eol; myDoc->setModified(true); } void KateView::paintEvent(QPaintEvent *e) { int x, y; QRect updateR = e->rect(); // update rectangle // debug("Update rect = ( %i, %i, %i, %i )", // updateR.x(),updateR.y(), updateR.width(), updateR.height() ); int ux1 = updateR.x(); int uy1 = updateR.y(); int ux2 = ux1 + updateR.width(); int uy2 = uy1 + updateR.height(); QPainter paint; paint.begin(this); QColorGroup g = colorGroup(); x = width(); y = height(); paint.setPen(g.dark()); if (uy1 <= 0) paint.drawLine(0,0,x-2,0); if (ux1 <= 0) paint.drawLine(0,1,0,y-2); paint.setPen(black); if (uy1 <= 1) paint.drawLine(1,1,x-3,1); if (ux1 <= 1) paint.drawLine(1,2,1,y-3); paint.setPen(g.midlight()); if (uy2 >= y-1) paint.drawLine(1,y-2,x-3,y-2); if (ux2 >= x-1) paint.drawLine(x-2,1,x-2,y-2); paint.setPen(g.light()); if (uy2 >= y) paint.drawLine(0,y-1,x-2,y-1); if (ux2 >= x) paint.drawLine(x-1,0,x-1,y-1); x -= 2 + 16; y -= 2 + 16; if (ux2 > x && uy2 > y) { paint.fillRect(x,y,16,16,g.background()); } paint.end(); } void KateView::resizeEvent(QResizeEvent *) { // debug("Resize %d, %d",e->size().width(),e->size().height()); //myViewInternal->resize(width() -20, height() -20); myViewInternal->tagAll(); myViewInternal->updateView(0/*ufNoScroll*/); } // Applies a new pattern to the search context. void SConfig::setPattern(QString &newPattern) { bool regExp = (flags & KateView::sfRegularExpression); m_pattern = newPattern; if (regExp) { m_regExp.setCaseSensitive(flags & KateView::sfCaseSensitive); m_regExp.setPattern(m_pattern); } } // Applies the search context to the given string, and returns whether a match was found. If one is, // the length of the string matched is also returned. int SConfig::search(QString &text, int index) { bool regExp = (flags & KateView::sfRegularExpression); bool caseSensitive = (flags & KateView::sfCaseSensitive); if (flags & KateView::sfBackward) { if (regExp) { index = text.findRev(m_regExp, index); } else { index = text.findRev(m_pattern, index, caseSensitive); } } else { if (regExp) { index = text.find(m_regExp, index); } else { index = text.find(m_pattern, index, caseSensitive); } } // Work out the matched length. if (index != -1) { if (regExp) { m_regExp.match(text, index, &matchedLength, false); } else { matchedLength = m_pattern.length(); } } return index; } void KateView::setActive (bool b) { active = b; } bool KateView::isActive () { return active; } void KateView::setFocus () { QWidget::setFocus (); emit gotFocus (this); } bool KateView::eventFilter (QObject *object, QEvent *event) { if ( (event->type() == QEvent::FocusIn) ) emit gotFocus (this); if ( (event->type() == QEvent::KeyPress) ) { QKeyEvent * ke=(QKeyEvent *)event; if ((ke->key()==Qt::Key_Tab) || (ke->key()==Qt::Key_BackTab)) { myViewInternal->keyPressEvent(ke); return true; } } return QWidget::eventFilter (object, event); } void KateView::findAgain (bool back) { bool b= (searchFlags & sfBackward) > 0; initSearch(s, (searchFlags & ((b==back)?~sfBackward:~0) & ~sfFromBeginning) // clear flag for forward searching | sfPrompt | sfAgain | ((b!=back)?sfBackward:0) ); if (s.flags & sfReplace) replaceAgain(); else KateView::findAgain(s); } void KateView::slotEditCommand () { #warning fixme /* bool ok; QString cmd = KLineEditDlg::getText("Editing Command", "", &ok, this); if (ok) myDoc->cmd()->execCmd (cmd, this);*/ } void KateView::setIconBorder (bool enable) { myIconBorder = enable; if (myIconBorder) { myViewInternal->move(myViewInternal->iconBorderWidth+2, 2); myViewInternal->leftBorder->show(); } else { myViewInternal->leftBorder->hide(); myViewInternal->move(2, 2); } } void KateView::toggleIconBorder () { setIconBorder (!myIconBorder); } void KateView::gotoMark (Kate::Mark *mark) { PointStruc cursor; cursor.x = 0; cursor.y = mark->line; myDoc->needPreHighlight(cursor.y); myViewInternal->updateCursor(cursor); myViewInternal->center(); myViewInternal->updateView(KateView::ufUpdateOnScroll); myDoc->updateViews(this); } void KateView::toggleBookmark () { TextLine::Ptr line = myDoc->getTextLine (currentLine()); if (line->mark()&KateDocument::Bookmark) line->delMark(KateDocument::Bookmark); else line->addMark(KateDocument::Bookmark); myDoc->tagLines (currentLine(), currentLine()); myDoc->updateViews(); } void KateView::clearBookmarks() { QList<Kate::Mark> list = myDoc->marks(); for (int i=0; (uint) i < list.count(); i++) { if (list.at(i)->type&KateDocument::Bookmark) { myDoc->getTextLine(list.at(i)->line)->delMark(KateDocument::Bookmark); myDoc->tagLines(list.at(i)->line, list.at(i)->line); } } myDoc->updateViews(); } void KateView::bookmarkMenuAboutToShow() { #warning fixme #if 0 bookmarkMenu->popupMenu()->clear (); bookmarkToggle->plug (bookmarkMenu->popupMenu()); bookmarkClear->plug (bookmarkMenu->popupMenu()); bookmarkMenu->popupMenu()->insertSeparator (); list = myDoc->marks(); for (int i=0; (uint) i < list.count(); i++) { if (list.at(i)->type&KateDocument::Bookmark) { QString bText = textLine(list.at(i)->line); bText.truncate(32); bText.append ("..."); bookmarkMenu->popupMenu()->insertItem ( QString("%1 - \"%2\"").arg(list.at(i)->line).arg(bText), this, SLOT (gotoBookmark(int)), 0, i ); } } #endif } void KateView::gotoBookmark (int n) { gotoMark (list.at(n)); } int KateView::getHlCount () { return HlManager::self()->highlights(); } QString KateView::getHlName (int z) { return HlManager::self()->hlName(z); } QString KateView::getHlSection (int z) { return HlManager::self()->hlSection (z); } void KateView::slotIncFontSizes () { QFont font = myDoc->getFont(); font.setPointSize (font.pointSize()+2); myDoc->setFont (font); } void KateView::slotDecFontSizes () { QFont font = myDoc->getFont(); font.setPointSize (font.pointSize()-2); myDoc->setFont (font); } const char*bookmark_xpm[]={ "12 16 4 1", "b c #808080", "a c #000080", "# c #0000ff", ". c None", "............", "............", "........###.", ".......#...a", "......#.##.a", ".....#.#..aa", "....#.#...a.", "...#.#.a.a..", "..#.#.a.a...", ".#.#.a.a....", "#.#.a.a.....", "#.#a.a...bbb", "#...a..bbb..", ".aaa.bbb....", "............", "............"}; const char* breakpoint_xpm[]={ "11 16 6 1", "c c #c6c6c6", ". c None", "# c #000000", "d c #840000", "a c #ffffff", "b c #ff0000", "...........", "...........", "...#####...", "..#aaaaa#..", ".#abbbbbb#.", "#abbbbbbbb#", "#abcacacbd#", "#abbbbbbbb#", "#abcacacbd#", "#abbbbbbbb#", ".#bbbbbbb#.", "..#bdbdb#..", "...#####...", "...........", "...........", "..........."}; const char*breakpoint_bl_xpm[]={ "11 16 7 1", "a c #c0c0ff", "# c #000000", "c c #0000c0", "e c #0000ff", "b c #dcdcdc", "d c #ffffff", ". c None", "...........", "...........", "...#####...", "..#ababa#..", ".#bcccccc#.", "#acccccccc#", "#bcadadace#", "#acccccccc#", "#bcadadace#", "#acccccccc#", ".#ccccccc#.", "..#cecec#..", "...#####...", "...........", "...........", "..........."}; const char*breakpoint_gr_xpm[]={ "11 16 6 1", "c c #c6c6c6", "d c #2c2c2c", "# c #000000", ". c None", "a c #ffffff", "b c #555555", "...........", "...........", "...#####...", "..#aaaaa#..", ".#abbbbbb#.", "#abbbbbbbb#", "#abcacacbd#", "#abbbbbbbb#", "#abcacacbd#", "#abbbbbbbb#", ".#bbbbbbb#.", "..#bdbdb#..", "...#####...", "...........", "...........", "..........."}; const char*ddd_xpm[]={ "11 16 4 1", "a c #00ff00", "b c #000000", ". c None", "# c #00c000", "...........", "...........", "...........", "#a.........", "#aaa.......", "#aaaaa.....", "#aaaaaaa...", "#aaaaaaaaa.", "#aaaaaaa#b.", "#aaaaa#b...", "#aaa#b.....", "#a#b.......", "#b.........", "...........", "...........", "..........."}; KateIconBorder::KateIconBorder(KateView *view, KateViewInternal *internalView) : QWidget(view), myView(view), myInternalView(internalView) { lmbSetsBreakpoints = true; } KateIconBorder::~KateIconBorder() { } void KateIconBorder::paintLine(int i) { if (!myView->myIconBorder) return; QPainter p(this); int fontHeight = myView->doc()->fontHeight; int y = i*fontHeight - myInternalView->yPos; p.fillRect(0, y, myInternalView->iconBorderWidth-2, fontHeight, colorGroup().background()); p.setPen(white); p.drawLine(myInternalView->iconBorderWidth-2, y, myInternalView->iconBorderWidth-2, y + fontHeight); p.setPen(QColor(colorGroup().background()).dark()); p.drawLine(myInternalView->iconBorderWidth-1, y, myInternalView->iconBorderWidth-1, y + fontHeight); TextLine *line = myView->doc()->getTextLine(i); if (!line) return; if (line->mark()&KateDocument::Bookmark) p.drawPixmap(2, y, QPixmap(bookmark_xpm)); /* if (line && (line->breakpointId() != -1)) { if (!line->breakpointEnabled()) p.drawPixmap(2, y, QPixmap(breakpoint_gr_xpm)); else if (line->breakpointPending()) p.drawPixmap(2, y, QPixmap(breakpoint_bl_xpm)); else p.drawPixmap(2, y, QPixmap(breakpoint_xpm)); } if (line->isExecutionPoint()) p.drawPixmap(2, y, QPixmap(ddd_xpm)); */ } void KateIconBorder::paintEvent(QPaintEvent* e) { if (!myView->myIconBorder) return; int lineStart = 0; int lineEnd = 0; QRect updateR = e->rect(); KateDocument *doc = myView->doc(); int h = doc->fontHeight; int yPos = myInternalView->yPos; if (h) { lineStart = (yPos + updateR.y()) / h; lineEnd = QMAX((yPos + updateR.y() + updateR.height()) / h, (int)doc->numLines()); } for(int i = lineStart; i <= lineEnd; ++i) paintLine(i); } void KateIconBorder::mousePressEvent(QMouseEvent* e) { myInternalView->placeCursor( 0, e->y(), 0 ); KateDocument *doc = myView->doc(); int cursorOnLine = (e->y() + myInternalView->yPos) / doc->fontHeight; TextLine *line = doc->getTextLine(cursorOnLine); switch (e->button()) { case LeftButton: if (!line) break; else { if (line->mark()&KateDocument::Bookmark) line->delMark (KateDocument::Bookmark); else line->addMark (KateDocument::Bookmark); doc->tagLines(cursorOnLine, cursorOnLine); doc->updateViews(); } break; /* case RightButton: { if (!line) break; KPopupMenu popup; popup.setCheckable(true); popup.insertTitle(i18n("Breakpoints/Bookmarks")); int idToggleBookmark = popup.insertItem(i18n("Toggle bookmark")); popup.insertSeparator(); int idToggleBreakpoint = popup.insertItem(i18n("Toggle breakpoint")); int idEditBreakpoint = popup.insertItem(i18n("Edit breakpoint")); int idEnableBreakpoint = popup.insertItem(i18n("Disable breakpoint")); popup.insertSeparator(); popup.insertSeparator(); int idLmbSetsBreakpoints = popup.insertItem(i18n("LMB sets breakpoints")); int idLmbSetsBookmarks = popup.insertItem(i18n("LMB sets bookmarks")); popup.setItemChecked(idLmbSetsBreakpoints, lmbSetsBreakpoints); popup.setItemChecked(idLmbSetsBookmarks, !lmbSetsBreakpoints); if (line->breakpointId() == -1) { popup.setItemEnabled(idEditBreakpoint, false); popup.setItemEnabled(idEnableBreakpoint, false); popup.changeItem(idEnableBreakpoint, i18n("Enable breakpoint")); } int res = popup.exec(mapToGlobal(e->pos())); if (res == idToggleBookmark) { line->toggleBookmark(); doc->tagLines(cursorOnLine, cursorOnLine); doc->updateViews(); } else if (res == idToggleBreakpoint) emit myView->toggledBreakpoint(cursorOnLine); else if (res == idEditBreakpoint) emit myView->editedBreakpoint(cursorOnLine); else if (res == idEnableBreakpoint) emit myView->toggledBreakpointEnabled(cursorOnLine+1); else if (res == idLmbSetsBreakpoints || res == idLmbSetsBookmarks) lmbSetsBreakpoints = !lmbSetsBreakpoints; break; } case MidButton: line->toggleBookmark(); doc->tagLines(cursorOnLine, cursorOnLine); doc->updateViews(); break; */ default: break; } } diff --git a/noncore/apps/zsafe/scqtfileedit.cpp b/noncore/apps/zsafe/scqtfileedit.cpp index effd86b..7a3d906 100644 --- a/noncore/apps/zsafe/scqtfileedit.cpp +++ b/noncore/apps/zsafe/scqtfileedit.cpp @@ -1,756 +1,758 @@ /*************************************************************************** scqtfileedit.cpp - description ------------------- begin : Mon Sep 3 2001 copyright : (C) 2001 by Werner Schulte email : sc@schulte-ac.de ***************************************************************************/ /* $Id$ */ /*************************************************************************** * * * 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 <stdio.h> #include <stdlib.h> #include "qdir.h" #include "qdialog.h" #include "qpixmap.h" #include "qlistview.h" #include "qlineedit.h" #include "qtoolbutton.h" #include "scqtfileedit.h" +#include <qpe/qpeapplication.h> + // #define DEBUGFILEEDIT /* XPM */ static const char* const file_xpm[]={ "16 16 5 1", ". c #7f7f7f", "# c None", "c c #000000", "b c #bfbfbf", "a c #ffffff", "################", "..........######", ".aaaaaaaab.#####", ".aaaaaaaaba.####", ".aaaaaaaacccc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".bbbbbbbbbbbc###", "ccccccccccccc###"}; /* XPM */ static const char * const link_file_xpm[]={ "16 16 10 1", "h c #808080", "g c #a0a0a0", "d c #c3c3c3", ". c #7f7f7f", "c c #000000", "b c #bfbfbf", "f c #303030", "e c #585858", "a c #ffffff", "# c None", "################", "..........######", ".aaaaaaaab.#####", ".aaaaaaaaba.####", ".aaaaaaaacccc###", ".aaaaaaaaaabc###", ".aaaaaaaaaabc###", ".aaaaaaaaaadc###", ".aaaaaaaaaadc###", ".aaaacccccccc###", ".aaaacaaaaaac###", ".aaaacaeaeaac###", ".aaaacaefcfac###", ".aaaacaagchac###", ".ddddcaaahaac###", "ccccccccccccc###"}; /* XPM */ static const char * const closed_xpm[]={ "16 16 6 1", ". c None", "b c #ffff00", "d c #000000", "* c #999999", "a c #cccccc", "c c #ffffff", "................", "................", "..*****.........", ".*ababa*........", "*abababa******..", "*cccccccccccc*d.", "*cbababababab*d.", "*cabababababa*d.", "*cbababababab*d.", "*cabababababa*d.", "*cbababababab*d.", "*cabababababa*d.", "*cbababababab*d.", "**************d.", ".dddddddddddddd.", "................"}; /* XPM */ static const char* const cdtoparent_xpm[]={ "15 13 3 1", ". c None", "* c #000000", "a c #ffff99", "..*****........", ".*aaaaa*.......", "***************", "*aaaaaaaaaaaaa*", "*aaaa*aaaaaaaa*", "*aaa***aaaaaaa*", "*aa*****aaaaaa*", "*aaaa*aaaaaaaa*", "*aaaa*aaaaaaaa*", "*aaaa******aaa*", "*aaaaaaaaaaaaa*", "*aaaaaaaaaaaaa*", "***************"}; ScQtFileEditDlg::ScQtFileEditDlg( QWidget *parent, const char *name, const QString &path, const QString &filter ) : ScQtFileDlg( parent, name, TRUE ), QDir( path, filter ) { // ListView->setRootIsDecorated ( TRUE ); #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg:: constructor name=%s", name ); printf ("\n path=%s", (const char *)path ); printf ("\n filter=%s", (const char *)filter ); printf ("\n parent=%p", parent ); fflush(stdout); #endif bpath = path; bfilter = filter; exflag = false; ListView->setAllColumnsShowFocus( TRUE ); ListView->setColumnAlignment( 1, Qt::AlignRight ); fileIcon = new QPixmap( (const char **)file_xpm); dirIcon = new QPixmap( (const char **)closed_xpm); linkIcon = new QPixmap( (const char **)link_file_xpm); cdToParentIcon = new QPixmap( (const char **)cdtoparent_xpm); #ifdef QWS - showMaximized(); + QPEApplication::execDialog( this ); #endif mkdirflag = false; MkDirButton->setEnabled( false ); initDirCombo( bpath ); initTypeCombo( bfilter ); dirstr = tr("dir"); filestr = tr("file"); linkstr = tr("link"); rFlag = false; showTimer.stop(); connect( &showTimer, SIGNAL(timeout()), SLOT( slotShowDir() ) ); fmode = QDir::All; fnfilter = false; fsorting = false; } ScQtFileEditDlg::~ScQtFileEditDlg() { #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg::destructor called" ); fflush(stdout); #endif if ( fileIcon != NULL ) { delete fileIcon; fileIcon = NULL; } if ( dirIcon != NULL ) { delete dirIcon; dirIcon = NULL; } if ( linkIcon != NULL ) { delete linkIcon; linkIcon = NULL; } if ( cdToParentIcon != NULL ) { delete cdToParentIcon; cdToParentIcon = NULL; } } void ScQtFileEditDlg::readIt( ) { qfil = readDir( bpath, bfilter ); slotShowDir( ); } void ScQtFileEditDlg::setAutoExtension( bool ex ) { exflag = ex; } int ScQtFileEditDlg::checkComboEntryExists( QComboBox *com, const QString &str ) { int i; if ( com ) { for ( i = 0; i < com->count(); i++ ) { if ( com->text( i ) == str ) { com->setCurrentItem( i ); return( 1 ); } } } return( 0 ); } void ScQtFileEditDlg::initDirCombo( const QString &str ) { DirComboBox->clear(); DirComboBox->insertItem( "/" ); if ( str.isEmpty() ) return; DirComboBox->insertItem( str, -1 ); } void ScQtFileEditDlg::initTypeCombo( const QString &str ) { TypeComboBox->clear(); TypeComboBox->insertItem( "*" ); if ( str.isEmpty() ) return; TypeComboBox->insertItem( str, -1 ); } void ScQtFileEditDlg::insDirCombo( const QString &str ) { if ( str.isEmpty() ) return; if ( !checkComboEntryExists( DirComboBox, str ) ) { if ( DirComboBox->count() >= MAXDIRCOMBOCOUNT ) { // 2. Item loeschen (das erste ist "/") DirComboBox->removeItem( 1 ); } // neues Item anhaengen DirComboBox->insertItem( str, -1 ); DirComboBox->setCurrentItem( DirComboBox->count() - 1 ); } } void ScQtFileEditDlg::insTypeCombo( const QString &str ) { if ( str.isEmpty() ) return; if ( !checkComboEntryExists( TypeComboBox, str ) ) { if ( TypeComboBox->count() >= MAXTYPECOMBOCOUNT ) { // 2. Item loeschen (das erste ist "/") TypeComboBox->removeItem( 1 ); } // neues Item anhaengen TypeComboBox->insertItem( str, -1 ); TypeComboBox->setCurrentItem( TypeComboBox->count() - 1 ); } } const QFileInfoList *ScQtFileEditDlg::readDir( const QString &path, const QString &filter ) { static QString qpath, qfilter; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg::readDir called, path = %s", (const char *)path ); printf ("\n filter = %s", (const char *)filter ); fflush(stdout); #endif rFlag = true; if ( path.isEmpty() ) qpath = "/"; else qpath = path; if ( filter.isEmpty() ) qfilter = "*"; else qfilter = filter; insDirCombo( qpath ); insTypeCombo( qfilter ); setFilter( fmode ); if ( fsorting ) setSorting( QDir::DirsFirst | QDir::Name ); if ( fnfilter ) setNameFilter( qfilter ); setPath( qpath ); const QFileInfoList *dirlist = entryInfoList(); if ( !dirlist ) { rFlag = false; return( 0 ); } rFlag = false; return( dirlist ); } QString ScQtFileEditDlg::getResult( ) { static QString qstr; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg::getResult called" ); fflush(stdout); #endif qstr = bpath + "/"; qstr = qstr + filename; bpath = cleanDirPath( qstr ); return( bpath ); } QString ScQtFileEditDlg::getFileName( ) { int a; static QString qstr; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg::getFileName called" ); fflush(stdout); #endif a = bpath.findRev( "/", -1, TRUE ); if (a == -1) qstr = bpath; // Nicht gefunden else qstr = bpath.right( bpath.length() - a - 1 ); return( qstr ); } // Ab hier die Slots ----------------------------------- void ScQtFileEditDlg::slotShowDir() { static QListViewItem *qlvitem; static QString ftypestr, fsizestr; static QFileInfo *fi; // pointer for traversing if ( !qfil ) // pointer war Null return; ListView->clear(); // ersma loeschen QFileInfoListIterator it( *qfil ); // create list iterator if ( !it ) // pointer war Null return; while ( (fi=it.current()) ) { // for each file... if ( !fi ) // current war 0 return; if ( !fi->fileName().isNull() ) { if ( fi->isDir() == TRUE ) { ftypestr = dirstr; fsizestr = "" ; } else if ( fi->isSymLink() == TRUE ) { ftypestr = linkstr; fsizestr = "" ; } else if ( fi->isFile() == TRUE ) { ftypestr = filestr; fsizestr.sprintf( "%d", fi->size() ); } else { printf( "something else\n" ); fflush(stdout); } if ( !(fi->fileName() == "." ) ) // der wird ausgespart { qlvitem = new QListViewItem ( ListView, fi->fileName(), fsizestr, ftypestr ); if ( fi->fileName() == ".." ) qlvitem->setPixmap( 0, *cdToParentIcon ); else if ( fi->isDir() == TRUE ) qlvitem->setPixmap( 0, *dirIcon ); else if ( fi->isSymLink() == TRUE ) qlvitem->setPixmap( 0, *linkIcon ); else if ( fi->isFile() == TRUE ) qlvitem->setPixmap( 0, *fileIcon ); } } ++it; // goto next list element } } void ScQtFileEditDlg::slotDirComboBoxChanged( int item ) { if ( !rFlag ) { bpath = DirComboBox->currentText( ); qfil = readDir( bpath, bfilter ); slotShowDir( ); } } void ScQtFileEditDlg::slotTypeComboBoxChanged( int item ) { if ( !rFlag ) { bfilter = TypeComboBox->currentText( ); qfil = readDir( bpath, bfilter ); slotShowDir( ); } } void ScQtFileEditDlg::slotFileTextChanged( const QString &txt ) { filename = txt; } void ScQtFileEditDlg::slotSelectionChanged( QListViewItem *item ) { static QString qstr, rstr; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg::slotSelectionChanged called" ); fflush(stdout); #endif if ( item ) { if ( !item->text(2) ) return; if ( item->text(2) == dirstr ) { if ( !rFlag ) { rstr = bpath; qstr = bpath + "/"; qstr = qstr + item->text(0); bpath = cleanDirPath( qstr ); qfil = readDir( bpath, bfilter ); if ( qfil == 0 ) { bpath = rstr; // Nochmal lesen, um die ComboBoxen zu setzten qfil = readDir( bpath, bfilter ); } showTimer.start( 10, true ); } } else if ( item->text(2) == filestr ) { FNameLineEdit->setText( item->text(0) ); filename = item->text(0); } } } void ScQtFileEditDlg::slotMkDir( ) { QString qstr; if ( !FNameLineEdit->text().isEmpty() ) { qstr = bpath + "/"; qstr = qstr + FNameLineEdit->text(); mkdir( qstr, true ); qfil = readDir( bpath, bfilter ); FNameLineEdit->setText( "" ); slotShowDir( ); } } void ScQtFileEditDlg::slotDoubleClicked( QListViewItem *item ) { static QString qstr, rstr; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg::slotDoubleClicked called" ); fflush(stdout); #endif if ( item ) { if ( item->text(2) == dirstr ) { if ( !rFlag ) { rstr = bpath; qstr = bpath + "/"; qstr = qstr + item->text(0); bpath = cleanDirPath( qstr ); qfil = readDir( bpath, bfilter ); if ( qfil == 0 ) { bpath = rstr; // Nochmal lesen, um die ComboBoxen zu setzten qfil = readDir( bpath, bfilter ); } showTimer.start( 10, TRUE ); } } } } void ScQtFileEditDlg::autoExtension( ) { QString qstr; int len; if ( exflag ) { qstr = TypeComboBox->currentText( ); if ( qstr != "*" ) { len = qstr.findRev( ".", -1 ); if ( len >= 0 ) { qstr = qstr.right( qstr.length() - len ); len = filename.findRev( qstr, -1 ); if ( len < 0 ) filename = filename + qstr; } } } } void ScQtFileEditDlg::setMode( int mode ) { fmode = mode; } void ScQtFileEditDlg::setNFilter( bool ff ) { fnfilter = ff; } void ScQtFileEditDlg::setFSorting( bool ff ) { fsorting = ff; } void ScQtFileEditDlg::allowMkDir( bool mkdir ) { mkdirflag = mkdir; MkDirButton->setEnabled( mkdir ); } void ScQtFileEditDlg::slotOK( ) { #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg::slotOK called" ); fflush(stdout); #endif autoExtension(); accept(); } void ScQtFileEditDlg::slotCancel( ) { #ifdef DEBUGFILEEDIT printf ("\nScQtFileEditDlg::slotCancel called" ); fflush(stdout); #endif reject(); } /************************************************************************** ***************************************************************************/ ScQtFileEdit::ScQtFileEdit( QWidget *parent, const char *name ) { #ifdef DEBUGFILEEDIT printf ("\nScQtFileEdit constructor called"); fflush(stdout); #endif } ScQtFileEdit::~ScQtFileEdit() { #ifdef DEBUGFILEEDIT printf ("\nScQtFileEdit destructor called"); fflush(stdout); #endif } QString ScQtFileEdit::getOpenFileName( QWidget *parent, const char *name, const QString &path, const QString &filter ) { static ScQtFileEditDlg *fd; static QString fname; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEdit::getOpenFileName name=%s", name ); printf ("\n path=%s", (const char *)path ); printf ("\n filter=%s", (const char *)filter ); fflush(stdout); #endif fd = new ScQtFileEditDlg( parent, name, path, filter ); fd->setAutoExtension( false ); fd->setMode( QDir::All|QDir::System ); fd->setNFilter( true ); fd->setFSorting( true ); fd->readIt(); fd->exec(); if ( fd->result() == QDialog::Accepted ) fname = fd->getResult(); else fname = ""; delete fd; return( fname ); } QString ScQtFileEdit::getSaveAsFileName( QWidget *parent, const char *name, const QString &path, const QString &filter ) { static ScQtFileEditDlg *fd; static QString fname; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEdit::getSaveAsFileName name=%s", name ); printf ("\n path=%s", (const char *)path ); printf ("\n filter=%s", (const char *)filter ); fflush(stdout); #endif fd = new ScQtFileEditDlg( parent, name, path, filter ); fd->allowMkDir( true ); // CS: fd->setAutoExtension( true ); fd->setNFilter( true ); fd->setFSorting( true ); fd->readIt(); fd->exec(); if ( fd->result() == QDialog::Accepted ) fname = fd->getResult(); else fname = ""; delete fd; return( fname ); } QString ScQtFileEdit::getDirName( QWidget *parent, const char *name, const QString &path ) { static ScQtFileEditDlg *fd; static QString fname; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEdit::getDirName name=%s", name ); printf ("\n path=%s", (const char *)path ); fflush(stdout); #endif fd = new ScQtFileEditDlg( parent, name, path ); fd->setMode( QDir::Dirs ); fd->setNFilter( false ); fd->setFSorting( true ); fd->readIt(); fd->exec(); if ( fd->result() == QDialog::Accepted ) fname = fd->getResult(); else fname = ""; delete fd; return( fname ); } QString ScQtFileEdit::mkDir( QWidget *parent, const char *name, const QString &path, const QString &filter ) { static ScQtFileEditDlg *fd; static QString fname; #ifdef DEBUGFILEEDIT printf ("\nScQtFileEdit::mkDir name=%s", name ); printf ("\n basepath=%s", (const char *)path ); printf ("\n filter=%s", (const char *)filter ); fflush(stdout); #endif fd = new ScQtFileEditDlg( parent, name, path, filter ); fd->setAutoExtension( true ); fd->allowMkDir( true ); fd->setNFilter( false ); fd->setFSorting( true ); fd->readIt(); fd->exec(); if ( fd->result() == QDialog::Accepted ) fname = fd->getResult(); else fname = ""; delete fd; return( fname ); } diff --git a/noncore/apps/zsafe/zsafe.cpp b/noncore/apps/zsafe/zsafe.cpp index ee1da77..bdd2aed 100644 --- a/noncore/apps/zsafe/zsafe.cpp +++ b/noncore/apps/zsafe/zsafe.cpp @@ -1,3254 +1,3237 @@ /**************************************************************************** ** ** Created: Sat Apr 6 17:57:45 2002 ** ** Author: Carsten Schneider <CarstenSchneider@t-online.de> ** ** $Id$ ** ** Homepage: http://home.t-online.de/home/CarstenSchneider/zsafe/index.html ** ** Compile Flags: ** Zaurus arm : -DNO_OPIE ** Zaurus Opie arm: none ** Linux Desktop : -DDESKTOP ** Windows Desktop: -DDESKTOP -DWIN32 ** ** for japanese version additional use: -DJPATCH_HDE ** ****************************************************************************/ #include "zsafe.h" #include "newdialog.h" #include "searchdialog.h" #include "categorydialog.h" #include "passworddialog.h" #include "infoform.h" #include "zlistview.h" #include "shadedlistitem.h" #ifndef DESKTOP #ifndef NO_OPIE #include <opie/ofiledialog.h> #else #include "scqtfileedit.h" #endif #endif #include <qclipboard.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #ifndef WIN32 #include <unistd.h> #endif #include <string.h> #include <errno.h> #include <qmenubar.h> #include <qpopupmenu.h> #ifdef DESKTOP #include <qfiledialog.h> #ifndef WIN32 #include <qsettings.h> #else #include "qsettings.h" #endif #include <qapplication.h> #else #include <qfile.h> #include <qpe/fileselector.h> #include <qpe/global.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/config.h> #endif #include <qtimer.h> #include <qlayout.h> #include <qmessagebox.h> #include <qfile.h> #include <qtextstream.h> #include <qheader.h> #include <qlistview.h> #include <qtoolbutton.h> #include <qlayout.h> #include <qvariant.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h> #include <qlineedit.h> #include <qmultilineedit.h> #include <qregexp.h> #include <qdir.h> #include <qtextbrowser.h> #include <qlabel.h> #include <qcombobox.h> #include "krc2.h" #include "wait.h" extern int DeskW, DeskH; #ifdef DESKTOP extern QApplication *appl; #else extern QPEApplication *appl; #endif #ifdef JPATCH_HDE #define tr(arg) arg #endif #ifdef DESKTOP #ifndef WIN32 const QString APP_KEY="/.zsafe/"; #else const QString APP_KEY=""; #endif #else const QString APP_KEY=""; #endif // include xmp images #include "pics/zsafe/copy.xpm" #include "pics/zsafe/cut.xpm" #include "pics/zsafe/edit.xpm" #include "pics/zsafe/editdelete.xpm" #include "pics/zsafe/find.xpm" #include "pics/zsafe/folder_open.xpm" #include "pics/zsafe/help_icon.xpm" #include "pics/zsafe/new.xpm" #include "pics/zsafe/paste.xpm" #include "pics/zsafe/quit_icon.xpm" #include "pics/zsafe/save.xpm" #include "pics/zsafe/trash.xpm" #include "pics/zsafe/expand.xpm" #include "pics/zsafe/export.xpm" #include "pics/zsafe/import.xpm" #include "pics/zsafe/zsafe.xpm" static const char* const bank_cards_data[] = { "14 14 16 1", ". c None", "# c #000000", "b c #0000de", "a c #0000e6", "j c #41de83", "k c #4acecd", "h c #4aced5", "g c #5a40cd", "d c #5a44d5", "l c #9440d5", "m c #b4ce4a", "n c #cd4883", "e c #d5ae10", "f c #de3ce6", "i c #e640e6", "c c #ffffff", "..............", ".###########..", ".#ababababa#..", ".#babbbabbb#..", ".#ccccccccc#..", ".#cdcefcghc#..", ".#ccccccccc#..", ".#cicjkclic#..", ".#ccccccccc#..", ".#cmchlcnec#..", ".#ccccccccc#..", ".###########..", "..............", ".............."}; static const char* const passwords_data[] = { "16 16 20 1", ". c None", "# c #000000", "r c #000083", "p c #0000c5", "q c #0000ff", "n c #008100", "l c #00c200", "m c #00ff00", "j c #838100", "a c #c55900", "h c #c5c200", "o c #c5c2ff", "k c #c5ffc5", "f c #ff0000", "d c #ff8100", "b c #ffaa5a", "e c #ffc2c5", "c c #ffdeac", "i c #ffff00", "g c #ffffc5", "............###.", "...........#abb#", "..........#cbab#", ".........#cbdd#.", "######..#cbdd#..", "#eeff#..#add#...", "#eeff#######....", "#ccdbdd#........", "#dddbdd###......", "#gghihhjj#......", "#hhhihhjj###....", "#kklmllnnnn#....", "#lllmllnnnn#....", "#oopqpprprr#....", "#oopqpprprr#....", "############...."}; static const char* const software_data[] = { "16 16 5 1", ". c None", "# c #000000", "b c #838183", "c c #c5ffff", "a c #ffffff", "................", ".##############.", "#aaaaaaaaaaaaaa#", "#abbbbbbbbbbbbb#", "#ab##########ab#", "#ab#c########ab#", "#ab#c#c######ab#", "#ab##########ab#", "#ab##########ab#", "#ab##########ab#", "#ab##########ab#", "#ab##########ab#", "#aaaaaaaaaaaaab#", "#bbbbbbbbbbbbbb#", ".##############.", "................"}; static const char* const general_data[] = { "14 14 98 2", "Qt c None", ".k c #000000", "#x c #080808", "#F c #101008", "#q c #101010", "#i c #101410", "## c #101810", ".m c #181818", ".3 c #181c18", ".I c #182018", ".T c #202420", "#D c #202820", "#y c #292c29", ".c c #293029", ".d c #313031", "#E c #313429", "#r c #313831", ".j c #393c31", "#j c #394039", "#C c #414841", ".w c #4a554a", ".a c #4a594a", ".# c #525052", ".l c #52594a", "#f c #525952", "#v c #525d52", ".O c #5a4c4a", ".9 c #5a595a", ".A c #5a5d52", ".B c #624c52", ".0 c #625552", "#o c #626562", ".R c #626962", "#. c #626d5a", "#p c #626d62", ".2 c #627162", "#h c #6a6d62", "#z c #6a7562", "#w c #6a756a", ".C c #73656a", ".P c #73696a", "#a c #737d6a", ".U c #738573", ".E c #7b817b", "#B c #7b857b", "#s c #7b897b", "#n c #7b917b", ".b c #838d83", ".7 c #839583", ".n c #8b7d7b", "#g c #8b8583", ".g c #8b858b", ".r c #8b898b", ".s c #8b8d8b", ".i c #8b9183", ".8 c #8b918b", "#A c #8b9d8b", ".S c #8ba183", ".Z c #94918b", ".N c #949994", ".F c #949d94", ".x c #94a18b", ".v c #94a194", ".Y c #94aa94", ".h c #9c999c", ".Q c #9ca19c", "#u c #9ca59c", ".H c #9caa9c", "#e c #9cb29c", "#m c #a4b29c", "#t c #a4b2a4", ".M c #a4b69c", "#l c #a4b6a4", ".z c #a4baa4", ".f c #aca5ac", ".q c #acaaac", "#d c #acbeac", ".6 c #acc2ac", ".o c #b4b2b4", ".t c #b4beb4", "#k c #b4c2ac", ".5 c #b4cab4", ".D c #bdb6bd", ".G c #bdc6b4", "#c c #bdceb4", ".X c #bdd2bd", ".4 c #bdd6bd", ".1 c #c5bec5", ".e c #c5c2c5", ".u c #c5cac5", "#b c #c5d6c5", ".J c #c5dec5", ".p c #cdcacd", ".W c #cddecd", ".L c #cde2cd", ".K c #d5eacd", ".V c #d5ead5", ".y c #d5eed5", "QtQtQtQtQtQtQtQtQtQtQtQtQtQt", "QtQtQt.#.a.b.cQtQtQtQtQtQtQt", "QtQt.d.e.f.g.h.i.c.j.dQt.kQt", ".a.l.m.n.o.p.q.r.s.t.u.v.wQt", ".x.y.z.A.B.C.D.p.q.E.F.G.H.I", ".I.J.K.L.M.N.O.P.o.p.Q.R.S.T", "Qt.U.V.L.W.X.Y.Z.0.P.1.s.2.3", "Qt.3.X.W.4.X.5.6.7.8.9.s#.##", "QtQt#a.X#b#c.5.6#d#e#f#g#h#i", "QtQtQt#j.7#k.6#d#l#m#n#o#p#q", "QtQtQtQt.k#r#s#m#t.H#u#v#w#x", "QtQtQtQtQtQt.k#y#z.v#A#B#C#x", "QtQtQtQtQtQtQtQt.k#D.w#s#E.k", "QtQtQtQtQtQtQtQtQtQtQt#x#FQt"}; // exit ZSafe and clear the clipboard for security reasons void ZSafe::exitZs (int ec) { QClipboard *cb = QApplication::clipboard(); cb->clear(); exit (ec); } // save the configuration into the file void ZSafe::saveConf () { if (conf) { delete conf; #ifdef DESKTOP #ifndef WIN32 conf = new QSettings (); conf->insertSearchPath (QSettings::Unix, QDir::homeDirPath()); #else conf = new QSettings (cfgFile); conf->insertSearchPath (QSettings::Unix, cfgFile); #endif #else conf = new Config (cfgFile, Config::File); conf->setGroup ("zsafe"); #endif } } /* * Constructs a ZSafe which is a child of 'parent', with the * name 'name' and widget flags set to 'f' * * The dialog will by default be modeless, unless you set 'modal' to * TRUE to construct a modal dialog. */ ZSafe::ZSafe( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ), Edit(0l), Delete(0l), Find(0l), New(0l), ListView(0l) { IsCut = false; IsCopy = false; modified = false; // set the config file cfgFile=QDir::homeDirPath(); cfgFile += "/.zsafe.cfg"; // set the icon path #ifdef NO_OPIE QString qpedir ((const char *)getenv("QPEDIR")); #else QString qpedir ((const char *)getenv("OPIEDIR")); #endif #ifdef DESKTOP iconPath = QDir::homeDirPath() + "/pics/"; #else if (qpedir.isEmpty()) iconPath = "/home/QtPalmtop/pics/"; else iconPath = qpedir + "/pics/"; #endif // create a zsafe configuration object #ifdef DESKTOP #ifndef WIN32 conf = new QSettings (); conf->insertSearchPath (QSettings::Unix, QDir::homeDirPath()); #else conf = new QSettings (cfgFile); conf->insertSearchPath (QSettings::Unix, cfgFile); #endif #else conf = new Config (cfgFile, Config::File); conf->setGroup ("zsafePrefs"); #endif #ifdef DESKTOP // #ifndef WIN32 expandTree = conf->readBoolEntry(APP_KEY+"expandTree", false); // #endif #else expandTree = conf->readNumEntry(APP_KEY+"expandTree", 0); #endif #ifndef DESKTOP conf->setGroup ("zsafe"); #endif QPixmap copy_img((const char**) copy_xpm); QPixmap cut_img((const char**) cut_xpm); QPixmap edit_img((const char**) edit_xpm); QPixmap editdelete_img((const char**) editdelete_xpm); QPixmap find_img((const char**) find_xpm); QPixmap folder_open_img((const char**) folder_open_xpm); QPixmap help_icon_img((const char**) help_icon_xpm); QPixmap new_img((const char**) new_xpm); QPixmap paste_img((const char**) paste_xpm); QPixmap quit_icon_img((const char**) quit_icon_xpm); QPixmap save_img((const char**) save_xpm); QPixmap trash_img((const char**) trash_xpm); QPixmap expand_img((const char**) expand_xpm); QPixmap export_img((const char**) export_xpm); QPixmap import_img((const char**) import_xpm); QPixmap bank_cards( ( const char** ) bank_cards_data ); QPixmap passwords( ( const char** ) passwords_data ); QPixmap software( ( const char** ) software_data ); QPixmap general( ( const char** ) general_data ); if ( !name ) setName( "ZSafe" ); #ifdef DESKTOP #ifdef WIN32 setGeometry(100, 150, DeskW, DeskH-30 ); #else resize( DeskW, DeskH-30 ); #endif #else #ifdef JPATCH_HDE int DeskS; if(DeskW > DeskH) { DeskS = DeskW; } else { DeskS = DeskH; } resize( DeskW, DeskH ); setMinimumSize( QSize( DeskS, DeskS ) ); setMaximumSize( QSize( DeskS, DeskS ) ); #else resize( DeskW, DeskH-30 ); #endif #endif // setCaption( tr( "ZSafe" ) ); filename = conf->readEntry(APP_KEY+"document"); if (filename.isEmpty() || filename.isNull()) { // check if the directory application exists, if not // create it // #ifndef WIN32 // QString d1("Documents/application"); // #else QString d1(QDir::homeDirPath() + "/Documents/application"); // #endif QDir pd1(d1); if (!pd1.exists()) { QDir pd1("Documents"); if (!pd1.mkdir("application", FALSE)) { QMessageBox::critical( 0, tr("ZSafe"), #ifdef JPATCH_HDE tr("Can't create directory\n.../Documents/application\n\nZSafe will now exit.")); #else tr("Can't create directory\n%1\n\nZSafe will now exit.").arg(d1)); #endif exitZs (1); } } QString d2(QDir::homeDirPath() + "/Documents/application/zsafe"); QDir pd2(d2); if (!pd2.exists()) { QDir pd2(QDir::homeDirPath() + "Documents/application"); if (!pd2.mkdir("zsafe", FALSE)) { QMessageBox::critical( 0, tr("ZSafe"), #ifdef JPATCH_HDE tr("Can't create directory\n...//Documents/application/zsafe\n\nZSafe will now exit.")); #else tr("Can't create directory\n%1\n\nZSafe will now exit.").arg(d2)); #endif exitZs (1); } } // set the default filename filename=d2 + "/passwords.zsf"; // save the current filename to the config file conf->writeEntry(APP_KEY+"document", filename); saveConf(); } //if (filename == "INVALIDPWD") //filename = ""; QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); #ifdef WIN32 this->setCaption("Qt ZSafe: " + ti); #else this->setCaption("ZSafe: " + ti); #endif selectedItem = NULL; lastSearchedCategory = NULL; lastSearchedItem = NULL; lastSearchedName = ""; lastSearchedUsername = ""; lastSearchedComment = ""; infoForm = new InfoForm(); categoryDialog = NULL; // add a menu bar QMenuBar *menu = new QMenuBar( this ); // add file menu // QPopupMenu *file = new QPopupMenu( this ); file = new QPopupMenu( this ); // #ifdef DESKTOP file->insertItem( new_img, tr("&New document"), this, SLOT(newDocument()) ); file->insertItem( folder_open_img, tr("&Open document"), this, SLOT(loadDocument()) ); file->insertItem( save_img, tr("&Save document as .."), this, SLOT(saveDocumentAs()) ); file->insertSeparator(); // #endif file->insertItem( save_img, tr("&Save document"), this, SLOT(saveDocumentWithoutPwd()) ); file->insertItem( save_img, tr("S&ave document with new Password"), this, SLOT(saveDocumentWithPwd()) ); file->insertSeparator(); file->insertItem( export_img, tr("&Export text file"), this, SLOT(writeAllEntries()) ); file->insertItem( import_img, tr("&Import text file"), this, SLOT(readAllEntries()) ); file->insertItem( trash_img, tr("&Remove text file"), this, SLOT(removeAsciiFile()) ); file->insertSeparator(); file->insertItem( expand_img, tr("&Open entries expanded"), this, SLOT(setExpandFlag()), 0, 'o'); file->setItemChecked('o', expandTree); file->insertSeparator(); file->insertItem( quit_icon_img, tr("E&xit"), this, SLOT(quitMe()) ); menu->insertItem( tr("&File"), file ); QPopupMenu *cat = new QPopupMenu( this ); cat->insertItem( new_img, tr("&New"), this, SLOT(addCategory()) ); cat->insertItem( edit_img, tr("&Edit"), this, SLOT(editCategory()) ); cat->insertItem( trash_img, tr("&Delete"), this, SLOT(delCategory()) ); menu->insertItem( tr("&Category"), cat ); QPopupMenu *it = new QPopupMenu( this ); it->insertItem( cut_img, tr("&Cut"), this, SLOT(cutItem()) ); it->insertItem( copy_img, tr("C&opy"), this, SLOT(copyItem()) ); it->insertItem( paste_img, tr("&Paste"), this, SLOT(pasteItem()) ); it->insertSeparator(); it->insertItem( new_img, tr("&New"), this, SLOT(newPwd()) ); it->insertItem( edit_img, tr("&Edit"), this, SLOT(editPwd()) ); it->insertItem( trash_img, tr("&Delete"), this, SLOT(deletePwd()) ); it->insertItem( find_img, tr("&Search"), this, SLOT(findPwd()) ); menu->insertItem( tr("&Entry"), it ); QPopupMenu *help = new QPopupMenu( this ); help->insertItem( help_icon_img, tr("&About"), this, SLOT(about()) ); menu->insertItem( tr("&Help"), help ); // toolbar icons New = new QToolButton( menu, "New" ); New->setGeometry( QRect( DeskW-84, 2, 20, 20 ) ); New->setMouseTracking( TRUE ); New->setText( tr( "" ) ); New->setPixmap( new_img ); QToolTip::add( New, tr( "New entry" ) ); Edit = new QToolButton( menu, "Edit" ); Edit->setGeometry( QRect( DeskW-64, 2, 20, 20 ) ); Edit->setText( tr( "" ) ); Edit->setPixmap( edit_img ); QToolTip::add( Edit, tr( "Edit category or entry" ) ); Delete = new QToolButton( menu, "Delete" ); Delete->setGeometry( QRect( DeskW-44, 2, 20, 20 ) ); Delete->setText( tr( "" ) ); Delete->setPixmap( trash_img ); QToolTip::add( Delete, tr( "Delete category or entry" ) ); Find = new QToolButton( menu, "Find" ); Find->setGeometry( QRect( DeskW-24, 2, 20, 20 ) ); Find->setText( tr( "" ) ); Find->setPixmap( find_img ); QToolTip::add( Find, tr( "Find entry" ) ); /* QBoxLayout * h = new QHBoxLayout( this ); h->addWidget (menu); h->addWidget (New); h->addWidget (Edit); h->addWidget (Delete); h->addWidget (Find); */ ListView = new ZListView( this, "ListView" ); ListView->addColumn( tr( "Name" ) ); ListView->addColumn( tr( "Field 2" ) ); ListView->addColumn( tr( "Field 3" ) ); ListView->addColumn( tr( "Comment" ) ); ListView->addColumn( tr( "Field 4" ) ); ListView->addColumn( tr( "Field 5" ) ); ListView->setAllColumnsShowFocus(TRUE); #ifdef DESKTOP ListView->setResizePolicy(QScrollView::AutoOneFit); // ListView->setGeometry( QRect( 0, 22, this->width(), this->height() - 30 ) ); #else ListView->setResizePolicy(QScrollView::AutoOneFit); // ListView->setGeometry( QRect( 0, 22, // this->width(), this->height() - 30 ) ); // ListView->setMaximumSize( QSize( 440, 290 ) ); #endif ListView->setVScrollBarMode( QListView::Auto ); QBoxLayout * l = new QVBoxLayout( this ); l->addWidget (menu); l->addWidget (ListView); #ifndef DESKTOP // start a timer (100 ms) to load the default document docuTimer.start( 100, true ); connect( &docuTimer, SIGNAL(timeout()), SLOT( slotLoadDocu() ) ); raiseFlag = true; connect( &raiseTimer, SIGNAL(timeout()), SLOT( slotRaiseTimer() ) ); #else // open the default document openDocument(filename); #endif // signals and slots connections for QTollButton connect( New, SIGNAL( clicked() ), this, SLOT( newPwd() ) ); connect( Edit, SIGNAL( clicked() ), this, SLOT( editPwd() ) ); connect( Delete, SIGNAL( clicked() ), this, SLOT( deletePwd() ) ); connect( Find, SIGNAL( clicked() ), this, SLOT( findPwd() ) ); // signals and slots connections for QListView connect( ListView, SIGNAL( selectionChanged( QListViewItem* ) ), this, SLOT( listViewSelected( QListViewItem* ) ) ); connect( ListView, SIGNAL( doubleClicked( QListViewItem* ) ), this, SLOT( showInfo( QListViewItem* ) ) ); connect( ListView, SIGNAL( returnPressed( QListViewItem* ) ), this, SLOT( showInfo( QListViewItem* ) ) ); } const QColor *ZSafe::evenRowColor = &Qt::white; // const QColor *ZSafe::oddRowColor = &Qt::lightGray; const QColor *ZSafe::oddRowColor = new QColor(216,240,255); /* * Destroys the object and frees any allocated resources */ ZSafe::~ZSafe() { // no need to delete child widgets, Qt does it all for us quitMe(); } // load the default document void ZSafe::slotLoadDocu() { openDocument (filename); } void ZSafe::deletePwd() { if (!selectedItem) return; if (!isCategory(selectedItem)) { switch( QMessageBox::information( this, tr("ZSafe"), tr("Do you want to delete?"), tr("&Delete"), tr("D&on't Delete"), 0 // Enter == button 0 ) ) { // Escape == button 2 case 0: // Delete clicked, Alt-S or Enter pressed. // Delete modified = true; selectedItem->parent()->takeItem(selectedItem); selectedItem = NULL; break; case 1: // Don't delete break; } } else { delCategory(); } } void ZSafe::editPwd() { if (!selectedItem) return; if (!isCategory(selectedItem)) { // open the 'New Entry' dialog NewDialog *dialog = new NewDialog(this, tr("Edit Entry"), TRUE); #ifdef WIN32 dialog->setCaption ("Qt " + tr("Edit Entry")); dialog->setGeometry(200, 250, 220, 310 ); #endif // set the labels dialog->Name->setText(getFieldLabel (selectedItem, "1", tr("Name"))); dialog->Username->setText(getFieldLabel (selectedItem, "2", tr("Username"))); dialog->Password->setText(getFieldLabel (selectedItem, "3", tr("Password"))); dialog->Comment->setText(getFieldLabel (selectedItem, "4", tr("Comment"))); dialog->Field5Label->setText(getFieldLabel (selectedItem,"5", tr("Field 4"))); dialog->Field6Label->setText(getFieldLabel (selectedItem,"6", tr("Field 5"))); // set the fields dialog->NameField->setText(selectedItem->text (0)); dialog->UsernameField->setText(selectedItem->text (1)); dialog->PasswordField->setText(selectedItem->text (2)); QString comment = selectedItem->text (3); comment.replace (QRegExp("<br>"), "\n"); dialog->Field5->setText(selectedItem->text (4)); dialog->Field6->setText(selectedItem->text (5)); dialog->CommentField->insertLine(comment); dialog->CommentField->setCursorPosition(0,0); -#ifdef DESKTOP -#ifndef WIN32 - dialog->show(); -#endif -#else - dialog->showMaximized(); -#endif - DialogCode result = (DialogCode) dialog->exec(); + + DialogCode result = (DialogCode) QPEApplication::execDialog( dialog ); #ifdef DESKTOP result = Accepted; #endif if (result == Accepted) { modified = true; // edit the selected item QString name = dialog->NameField->text(); selectedItem->setText (0, tr (name)); QString user = dialog->UsernameField->text(); selectedItem->setText (1, tr (user)); QString pwd = dialog->PasswordField->text(); selectedItem->setText (2, tr (pwd)); QString comment = dialog->CommentField->text(); comment.replace (QRegExp("\n"), "<br>"); selectedItem->setText (3, tr (comment)); QString f5 = dialog->Field5->text(); selectedItem->setText (4, tr (f5)); QString f6 = dialog->Field6->text(); selectedItem->setText (5, tr (f6)); } delete dialog; } else { editCategory(); } } void ZSafe::newPwd() { if (!selectedItem) return; if (!isCategory(selectedItem)) selectedItem = selectedItem->parent(); if (isCategory(selectedItem)) { QString cat = selectedItem->text(0); // open the 'New Entry' dialog NewDialog *dialog = new NewDialog(this, tr("New Entry"), TRUE); #ifdef WIN32 dialog->setCaption ("Qt " + tr("New Entry")); dialog->setGeometry(200, 250, 220, 310 ); #endif // set the labels dialog->Name->setText(getFieldLabel (selectedItem, "1", tr("Name"))); dialog->Username->setText(getFieldLabel (selectedItem, "2", tr("Username"))); dialog->Password->setText(getFieldLabel (selectedItem, "3", tr("Password"))); dialog->Comment->setText(getFieldLabel (selectedItem, "4", tr("Comment"))); dialog->Field5Label->setText(getFieldLabel (selectedItem,"5", tr("Field 4"))); dialog->Field6Label->setText(getFieldLabel (selectedItem,"6", tr("Field 5"))); retype: -#ifdef DESKTOP -#ifndef WIN32 - dialog->show(); -#endif -#else - dialog->showMaximized(); -#endif - DialogCode result = (DialogCode) dialog->exec(); + + DialogCode result = (DialogCode) QPEApplication::execDialog( dialog ); #ifdef DESKTOP result = Accepted; #endif if (result == Accepted) { - + QString name = dialog->NameField->text(); if (cat == name) { QMessageBox::critical( 0, tr("ZSafe"), tr("Entry name must be different\nfrom the category name.") ); goto retype; // it's not a good programming style :-) } modified = true; // add the new item QListViewItem *i = new ShadedListItem (0, selectedItem); i->setOpen (TRUE); i->setText (0, tr (name)); QString user = dialog->UsernameField->text(); i->setText (1, tr (user)); QString pwd = dialog->PasswordField->text(); i->setText (2, tr (pwd)); QString comment = dialog->CommentField->text(); comment.replace (QRegExp("\n"), "<br>"); i->setText (3, tr (comment)); QString f5 = dialog->Field5->text(); i->setText (4, tr (f5)); QString f6 = dialog->Field6->text(); i->setText (5, tr (f6)); } delete dialog; } } void ZSafe::findPwd() { // open the 'Search' dialog SearchDialog *dialog = new SearchDialog(this, tr("Search"), TRUE); #ifdef WIN32 dialog->setCaption ("Qt " + tr("Search")); #endif #ifdef DESKTOP #endif if (lastSearchedName) dialog->NameField->setText(lastSearchedName); else dialog->NameField->setText(""); if (lastSearchedUsername) dialog->UsernameField->setText(lastSearchedUsername); else dialog->UsernameField->setText(""); if (lastSearchedComment) dialog->CommentField->setText(lastSearchedComment); else dialog->CommentField->setText(""); DialogCode result = (DialogCode) dialog->exec(); #ifdef DESKTOP result = Accepted; #endif QString name; QString username; QString comment; if (result == Accepted) { name = dialog->NameField->text(); username = dialog->UsernameField->text(); comment = dialog->CommentField->text(); qWarning (name); } else { delete dialog; return; } if (!name.isEmpty() && name != lastSearchedName || lastSearchedName.isEmpty() && !name.isEmpty()) { // set search at the beginning if a new name is given lastSearchedCategory = NULL; lastSearchedItem = NULL; } lastSearchedName = name; if (!username.isEmpty() && username != lastSearchedUsername || lastSearchedUsername.isEmpty() && !username.isEmpty()) { // set search at the beginning if a new name is given lastSearchedCategory = NULL; lastSearchedItem = NULL; } lastSearchedUsername = username; if (!comment.isEmpty() && comment != lastSearchedComment || lastSearchedComment.isEmpty() && !comment.isEmpty()) { // set search at the beginning if a new name is given lastSearchedCategory = NULL; lastSearchedItem = NULL; } lastSearchedComment = comment; ListView->clearSelection(); bool found=FALSE; // step through all categories QListViewItem *i; if (lastSearchedCategory) i = lastSearchedCategory; else i = ListView->firstChild(); for (; i != NULL; i = i->nextSibling()) { qWarning (i->text(0)); i->setSelected(FALSE); // step through all subitems QListViewItem *si; if (lastSearchedItem) si = lastSearchedItem; else si = i->firstChild(); // for (si = i->firstChild(); for (; si != NULL; si = si->nextSibling()) { qWarning (si->text(0)); if (si->isSelected()) si->setSelected(FALSE); // ListView->repaintItem(si); bool n=TRUE; bool u=TRUE; bool c=TRUE; if (!name.isEmpty()) n = (si->text(0)).contains (name, FALSE); if (!username.isEmpty()) u = (si->text(1)).contains (username, FALSE); if (!comment.isEmpty()) c = (si->text(3)).contains (comment, FALSE); if ((n && u && c ) && !found) { qWarning ("Found"); selectedItem = si; si->setSelected(TRUE); ListView->setCurrentItem(si); ListView->ensureItemVisible(si); ListView->triggerUpdate(); lastSearchedCategory = i; // set to the next item lastSearchedItem = si->nextSibling(); if (!lastSearchedItem) { // no next item within category -> set next category lastSearchedCategory = i->nextSibling(); if (!lastSearchedCategory) lastSearchedItem = NULL; // END } found = TRUE; delete dialog; update(); return; } } lastSearchedCategory = i->nextSibling(); lastSearchedItem = NULL; } lastSearchedCategory = NULL; lastSearchedItem = NULL; delete dialog; update(); QMessageBox::information( this, tr("ZSafe"), tr("Entry not found"), tr("&OK"), 0); } QString ZSafe::getFieldLabel (QListViewItem *_item, QString field, QString def) { QString category; if (_item) { if (isCategory(_item)) { category = _item->text(0); } else { QListViewItem *cat = _item->parent(); category = cat->text(0); } } else { return def; } QString app_key = APP_KEY; #ifndef DESKTOP #ifndef WIN32 conf->setGroup ("fieldDefs"); #endif #else #ifndef WIN32 app_key += "/fieldDefs/"; #endif #endif // #ifndef WIN32 QString label = conf->readEntry(app_key+category+"-field"+field,def); // #else // QString label(def); // #endif #ifndef DESKTOP conf->setGroup ("zsafe"); #endif return label; } QString ZSafe::getFieldLabel (QString category, QString field, QString def) { QString app_key = APP_KEY; #ifndef DESKTOP conf->setGroup ("fieldDefs"); #else #ifndef WIN32 app_key += "/fieldDefs/"; #endif #endif // #ifndef WIN32 QString label = conf->readEntry(app_key+category+"-field"+field, def); // #else // QString label(def); // #endif #ifndef DESKTOP conf->setGroup ("zsafe"); #endif return label; } void ZSafe::showInfo( QListViewItem *_item) { if (!_item) return; if (selectedItem != NULL) selectedItem->setSelected(FALSE); selectedItem = _item; selectedItem->setSelected(TRUE); if (!isCategory(_item)) { /* QString label=selectedItem->text(0); label+="\n"; label+=selectedItem->text(1); label+="\n"; label+=selectedItem->text(2); label+="\n"; label+=selectedItem->text(3); */ QString text; QString entry; text = "<html><body><div align=""center""><u><b>"; text += selectedItem->text(0); text += "</b></u><br></div><br>"; entry = selectedItem->text(1); if (!entry.isEmpty() && entry.compare(" ")) { text += "<u><b>"; text += getFieldLabel (selectedItem, "2", tr("Username")); text += ":<br></b></u><blockquote>"; text += entry; text += "</blockquote>"; // text += "<br>"; } entry = selectedItem->text(2); if (!entry.isEmpty() && entry.compare(" ")) { text += "<u><b>"; text += getFieldLabel (selectedItem, "3", tr("Password")); text += ":<br> </b></u><blockquote>"; text += entry; text += "</blockquote>"; // text += "<br>"; } entry = selectedItem->text(4); if (!entry.isEmpty() && entry.compare(" ")) { text += "<u><b>"; text += getFieldLabel (selectedItem, "5", tr("Field 4")); text += ":<br> </b></u><blockquote>"; text += entry; text += "</blockquote>"; // text += "<br>"; } entry = selectedItem->text(5); if (!entry.isEmpty() && entry.compare(" ")) { text += "<u><b>"; text += getFieldLabel (selectedItem, "6", tr("Field 5")); text += ":<br> </b></u><blockquote>"; text += entry; text += "</blockquote>"; // text += "<br>"; } entry = selectedItem->text(3); if (!entry.isEmpty() && entry.compare(" ")) { text += "<u><b>"; text += getFieldLabel (selectedItem, "4", tr("Comment")); text += ":<br> </b></u>"; QString comment = selectedItem->text(3); comment.replace (QRegExp("\n"), "<br>"); text += comment; // text += "<br>"; } text += "</body></html>"; infoForm->InfoText->setText(text); infoForm->hide(); -#ifdef DESKTOP - infoForm->show(); -#else - infoForm->showMaximized(); -#endif - + QPEApplication::showDialog( infoForm ); } } void ZSafe::listViewSelected( QListViewItem *_item) { if (!_item) return; if (selectedItem != NULL) selectedItem->setSelected(FALSE); - + selectedItem = _item; #ifndef DESKTOP // set the column text dependent on the selected item ListView->setColumnText(0, getFieldLabel (selectedItem, "1", tr("Name"))); ListView->setColumnText(1, getFieldLabel (selectedItem, "2", tr("Field 2"))); ListView->setColumnText(2, getFieldLabel (selectedItem, "3", tr("Field 3"))); ListView->setColumnText(3, getFieldLabel (selectedItem, "4", tr("Comment"))); ListView->setColumnText(4, getFieldLabel (selectedItem, "5", tr("Field 4"))); ListView->setColumnText(5, getFieldLabel (selectedItem, "6", tr("Field 5"))); #endif #ifdef WIN32 // set the column text dependent on the selected item ListView->setColumnText(0, getFieldLabel (selectedItem, "1", tr("Name"))); ListView->setColumnText(1, getFieldLabel (selectedItem, "2", tr("Field 2"))); ListView->setColumnText(2, getFieldLabel (selectedItem, "3", tr("Field 3"))); ListView->setColumnText(3, getFieldLabel (selectedItem, "4", tr("Comment"))); ListView->setColumnText(4, getFieldLabel (selectedItem, "5", tr("Field 4"))); ListView->setColumnText(5, getFieldLabel (selectedItem, "6", tr("Field 5"))); #endif } bool ZSafe::isCategory(QListViewItem *_item) { if (_item == NULL) return FALSE; QString categoryName = _item->text (0); if (categories.find (categoryName)) return TRUE; else return FALSE; } void ZSafe::removeAsciiFile() { // QString fn = filename + ".txt"; // open the file dialog #ifndef DESKTOP #ifndef NO_OPIE QMap<QString, QStringList> mimeTypes; mimeTypes.insert(tr("All"), QStringList() ); mimeTypes.insert(tr("Text"), "text/*" ); QString fn = OFileDialog::getOpenFileName( OFileSelector::EXTENDED_ALL, QDir::homeDirPath() + "/Documents/application/zsafe", QString::null, mimeTypes, this, tr ("Remove text file")); #else QString fn = ScQtFileEdit::getOpenFileName(this, tr ("Remove text file"), QDir::homeDirPath() + "/Documents/application/zsafe", "*.txt"); #endif #else QString fn = QFileDialog::getOpenFileName( QDir::homeDirPath() + "/Documents/application/zsafe", "ZSafe (*.txt)", this, "ZSafe File Dialog" "Choose a text file" ); #endif if (fn && fn.length() > 0 ) { QFile f( fn ); if ( !f.remove() ) { qWarning( QString("Could not remove file %1").arg(fn), 2000 ); QMessageBox::critical( 0, tr("ZSafe"), tr("Could not remove text file.") ); return; } } } void ZSafe::writeAllEntries() { if (filename.isEmpty()) { QMessageBox::critical( 0, tr("ZSafe"), tr("No document defined.\nYou have to create a new document")); return; } // open the file dialog #ifndef DESKTOP #ifndef NO_OPIE QMap<QString, QStringList> mimeTypes; mimeTypes.insert(tr("All"), QStringList() ); mimeTypes.insert(tr("Text"), "text/*" ); QString fn = OFileDialog::getSaveFileName( OFileSelector::EXTENDED_ALL, QDir::homeDirPath() + "/Documents/application/zsafe", QString::null, mimeTypes, this, tr ("Export text file")); #else QString fn = ScQtFileEdit::getSaveAsFileName(this, tr ("Export text file"), QDir::homeDirPath() + "/Documents/application/zsafe", "*.txt"); #endif #else QString fn = QFileDialog::getSaveFileName( QDir::homeDirPath() + "/Documents/application/zsafe", "ZSafe (*.txt)", this, "ZSafe File Dialog" "Choose a text file" ); #endif // open the new document if (fn && fn.length() > 0 ) { QFile f( fn ); if ( !f.open( IO_WriteOnly ) ) { qWarning( QString("Could not write to file %1").arg(fn), 2000 ); QMessageBox::critical( 0, "ZSafe", QString("Could not export to text file.") ); return; } QTextStream t( &f ); QListViewItem *i; // step through all categories for (i = ListView->firstChild(); i != NULL; i = i->nextSibling()) { // step through all subitems QListViewItem *si; for (si = i->firstChild(); si != NULL; si = si->nextSibling()) { QString oneEntry; oneEntry += "\""; oneEntry += i->text(0); oneEntry += "\";"; oneEntry += "\""; oneEntry += si->text(0); oneEntry += "\";"; oneEntry += "\""; oneEntry += si->text(1); oneEntry += "\";"; oneEntry += "\""; oneEntry += si->text(2); oneEntry += "\";"; oneEntry += "\""; QString comment = si->text(3); comment.replace (QRegExp("\n"), "<br>"); oneEntry += comment; oneEntry += "\";"; oneEntry += "\""; oneEntry += si->text(4); oneEntry += "\";"; oneEntry += "\""; oneEntry += si->text(5); oneEntry += "\""; // qWarning (oneEntry); t << oneEntry << endl; // qWarning (si->text(0)); } } f.close(); } } void ZSafe::readAllEntries() { if (filename.isEmpty()) { QMessageBox::critical( 0, tr("ZSafe"), tr("No document defined.\nYou have to create a new document")); return; } // open the file dialog #ifndef DESKTOP #ifndef NO_OPIE QMap<QString, QStringList> mimeTypes; mimeTypes.insert(tr("All"), QStringList() ); mimeTypes.insert(tr("Text"), "text/*" ); QString fn = OFileDialog::getOpenFileName( OFileSelector::EXTENDED_ALL, QDir::homeDirPath() + "/Documents/application/zsafe", QString::null, mimeTypes, this, tr ("Import text file")); #else QString fn = ScQtFileEdit::getOpenFileName(this, tr ("Import text file"), QDir::homeDirPath() + "/Documents/application/zsafe", "*.txt"); #endif #else QString fn = QFileDialog::getOpenFileName( QDir::homeDirPath() + "/Documents/application/zsafe", "ZSafe (*.txt)", this, "ZSafe File Dialog" "Choose a text file" ); #endif if (fn && fn.length() > 0 ) { QFile f( fn ); if ( !f.open( IO_ReadOnly ) ) { qWarning( QString("Could not read file %1").arg(fn), 2000 ); QMessageBox::critical( 0, "ZSafe", QString("Could not import text file.") ); return; } modified = true; // clear the password list selectedItem = NULL; QListViewItem *i; // step through all categories for (i = ListView->firstChild(); i != NULL; i = i->nextSibling()) { // step through all subitems QListViewItem *si; for (si = i->firstChild(); si != NULL; ) // si = si->nextSibling()) { QListViewItem *_si = si; si = si->nextSibling(); i->takeItem(_si); // remove from view list if (_si) delete _si; } } qWarning ("ReadAllEntries(): "); QTextStream t(&f); while ( !t.eof() ) { QString s = t.readLine(); s.replace (QRegExp("\";\""), "\"|\""); // char buffer[1024]; #ifndef WIN32 char buffer[s.length()+1]; #else char buffer[4048]; #endif /* modify QString -> QCString::utf8 */ strcpy (buffer, s.utf8()); QString name; QString user; QString password; QString comment; QString field5=""; QString field6=""; // separete the entries char *i = strtok (buffer, "|"); QString category(QString::fromUtf8(&i[1])); category.truncate(category.length() -1); int idx=0; while ((i = strtok (NULL, "|")) != NULL) { switch (idx) { case 0: name = QString::fromUtf8(&i[1]); name.truncate(name.length() -1); // name break; case 1: // user user = QString::fromUtf8(&i[1]); user.truncate(user.length() -1); break; case 2: // password password = QString::fromUtf8(&i[1]); password.truncate(password.length() -1); break; case 3: // comment comment = QString::fromUtf8(&i[1]); comment.truncate(comment.length() -1); break; case 4: // field5 field5 = QString::fromUtf8(&i[1]); field5.truncate(field5.length() -1); break; case 5: // field6 field6 = QString::fromUtf8(&i[1]); field6.truncate(field6.length() -1); break; } idx++; } Category *cat= categories.find (category); if (cat) { // use the existend item QListViewItem *catItem = cat->getListItem(); if (catItem) { QListViewItem * item = new ShadedListItem( 0, catItem ); item->setText( 0, tr( name ) ); item->setText( 1, tr( user ) ); item->setText( 2, tr( password ) ); item->setText( 3, tr( comment ) ); item->setText( 4, tr( field5 ) ); item->setText( 5, tr( field6 ) ); catItem->setOpen( TRUE ); } } else { QListViewItem *catI = new ShadedListItem( 1, ListView ); // create and insert a new item QListViewItem * item = new ShadedListItem( 0, catI ); item->setText( 0, tr( name ) ); item->setText( 1, tr( user ) ); item->setText( 2, tr( password ) ); item->setText( 3, tr( comment ) ); item->setText( 4, tr( field5 ) ); item->setText( 5, tr( field6 ) ); catI->setOpen( TRUE ); Category *c1 = new Category(); c1->setCategoryName(category); QString icon; QString fullIconPath; QPixmap *pix; // #ifndef WIN32 icon = conf->readEntry(APP_KEY+category); // #endif bool isIconAv = false; if (!icon.isEmpty() && !icon.isNull()) { // build the full path fullIconPath = iconPath + icon; pix = new QPixmap (fullIconPath); if (pix) { QImage img = pix->convertToImage(); pix->convertFromImage(img.smoothScale(14,14)); c1->setIconName (icon); c1->setIcon (*pix); isIconAv = true; } } if (!isIconAv) { c1->setIcon (*getPredefinedIcon(category)); } c1->setListItem (catI); c1->initListItem(); categories.insert (c1->getCategoryName(), c1); } } f.close(); } else { } } #ifdef UNUSED void ZSafe::writeAllEntries() { // open the file for writing QString fn = filename + ".txt"; QFile f( fn ); if ( !f.open( IO_WriteOnly ) ) { qWarning( QString("Could not write to file %1").arg(fn), 2000 ); QMessageBox::critical( 0, tr("ZSafe"), tr("Could not export to text file.") ); return; } QTextStream t( &f ); QListViewItem *i; // step through all categories for (i = ListView->firstChild(); i != NULL; i = i->nextSibling()) { // step through all subitems QListViewItem *si; for (si = i->firstChild(); si != NULL; si = si->nextSibling()) { QString oneEntry; oneEntry += "\""; oneEntry += i->text(0); oneEntry += "\";"; oneEntry += "\""; oneEntry += si->text(0); oneEntry += "\";"; oneEntry += "\""; oneEntry += si->text(1); oneEntry += "\";"; oneEntry += "\""; oneEntry += si->text(2); oneEntry += "\";"; oneEntry += "\""; // oneEntry += si->text(3); QString comment = si->text(3); comment.replace (QRegExp("\n"), "<br>"); oneEntry += comment; oneEntry += "\""; // qWarning (oneEntry); t << oneEntry << endl; // qWarning (si->text(0)); } } f.close(); } void ZSafe::readAllEntries() { QString fn = filename + ".txt"; QFile f( fn ); if ( !f.open( IO_ReadOnly ) ) { qWarning( QString("Could not read file %1").arg(fn), 2000 ); QMessageBox::critical( 0, tr("ZSafe"), tr("Could not import text file.") ); return; } modified = true; // clear the password list selectedItem = NULL; QListViewItem *i; // step through all categories for (i = ListView->firstChild(); i != NULL; i = i->nextSibling()) { // step through all subitems QListViewItem *si; for (si = i->firstChild(); si != NULL; ) // si = si->nextSibling()) { QListViewItem *_si = si; si = si->nextSibling(); i->takeItem(_si); // remove from view list if (_si) delete _si; } } qWarning ("ReadAllEntries(): "); QTextStream t(&f); while ( !t.eof() ) { QString s = t.readLine(); s.replace (QRegExp("\";\""), "\"|\""); // char buffer[1024]; int len=s.length()+1; #ifdef WIN32 char buffer[512]; #else char buffer[len]; #endif strcpy (buffer, s); QString name; QString user; QString password; QString comment; // separete the entries char *i = strtok (buffer, "|"); QString category(&i[1]); category.truncate(category.length() -1); int idx=0; while (i = strtok (NULL, "|")) { switch (idx) { case 0: name = &i[1]; name.truncate(name.length() -1); // name break; case 1: // user user = &i[1]; user.truncate(user.length() -1); break; case 2: // password password = &i[1]; password.truncate(password.length() -1); break; case 3: // comment comment = &i[1]; comment.truncate(comment.length() -1); break; } idx++; } Category *cat= categories.find (category); if (cat) { // use the existend item QListViewItem *catItem = cat->getListItem(); if (catItem) { QListViewItem * item = new ShadedListItem( 0, catItem ); item->setText( 0, tr( name ) ); item->setText( 1, tr( user ) ); item->setText( 2, tr( password ) ); item->setText( 3, tr( comment ) ); catItem->setOpen( TRUE ); } } else { QListViewItem *catI = new ShadedListItem( 1, ListView ); // create and insert a new item QListViewItem * item = new ShadedListItem( 0, catI ); item->setText( 0, tr( name ) ); item->setText( 1, tr( user ) ); item->setText( 2, tr( password ) ); item->setText( 3, tr( comment ) ); catI->setOpen( TRUE ); Category *c1 = new Category(); c1->setCategoryName(category); QString icon; QString fullIconPath; QPixmap *pix; // #ifndef WIN32 icon = conf->readEntry(APP_KEY+category); // #endif bool isIconAv = false; if (!icon.isEmpty() && !icon.isNull()) { // build the full path fullIconPath = iconPath + icon; pix = new QPixmap (fullIconPath); if (pix) { QImage img = pix->convertToImage(); pix->convertFromImage(img.smoothScale(14,14)); c1->setIconName (icon); c1->setIcon (*pix); isIconAv = true; } } if (!isIconAv) { c1->setIcon (*getPredefinedIcon(category)); } c1->setListItem (catI); c1->initListItem(); categories.insert (c1->getCategoryName(), c1); } } f.close(); } #endif // UNUSED void ZSafe::resume(int) { qWarning ("Resume"); // hide the main window infoForm->hide(); // open zsafe again m_password = ""; selectedItem = NULL; // clear the password list QListViewItem *i; // step through all categories for (i = ListView->firstChild(); i != NULL; i = i->nextSibling()) { // step through all subitems QListViewItem *si; for (si = i->firstChild(); si != NULL; ) { QListViewItem *_si = si; si = si->nextSibling(); i->takeItem(_si); // remove from view list if (_si) delete _si; } } // ask for password and read again openDocument(filename); } //--------------------------------------------- bool ZSafe::openDocument(const char* _filename, const char* ) { int retval; char* entry[FIELD_SIZE]; // #ifndef WIN32 int validationFlag = conf->readNumEntry(APP_KEY+"valzsafe", 1); // #else // int validationFlag = 1; // #endif int pwdOk = 0; int numberOfTries = 3; for (int i=0; i < numberOfTries; i++) { QFile f(_filename); if (f.exists()) { // ask with a dialog for the password if (m_password.isEmpty()) getDocPassword(tr("Enter Password")); if (m_password.isEmpty() && validationFlag == 0) { qWarning ("Wrong password"); QMessageBox::critical( 0, tr("ZSafe"), tr("Wrong password.\n\nZSafe will now exit.") ); exitZs (1); } retval = loadInit(_filename, m_password); if (retval != PWERR_GOOD) { qWarning ("Error loading Document"); return false; } } else { #ifdef WIN32 this->setCaption("Qt ZSafe"); #else this->setCaption("ZSafe"); #endif filename = ""; return false; } // load the validation entry if (validationFlag == 0) { pwdOk = 1; break; } retval = loadEntry(entry); if (retval == 1 && !strcmp (entry[0], "ZSAFECATEGORY") && !strcmp (entry[1], "name") && !strcmp (entry[2], "username") && !strcmp (entry[3], "password") && !strcmp (entry[4], "comment") ) { for (int count = 0; count < FIELD_SIZE; count++) free(entry[count]); pwdOk = 1; break; } else // for (int count = 0; count < FIELD_SIZE; count++) free(entry[count]); fclose (fd); m_password = ""; if (i < numberOfTries - 1) { switch( QMessageBox::warning( this, tr("ZSafe"), tr("Wrong password.\nEnter again?"), tr("&Yes"), tr("&No."), 0 ) ) { case 1: // No exitZs (1); break; case 0: // Yes continue; } } } if (pwdOk == 0) { // unset the document entry conf->writeEntry(APP_KEY+"document", "INVALIDPWD"); if (conf) delete conf; exitZs (1); } retval = loadEntry(entry); int numberOfEntries=0; while (retval == 1) { QString category( QString::fromUtf8(entry[0]) ); QString name( QString::fromUtf8(entry[1]) ); QString user( QString::fromUtf8(entry[2]) ); QString password( QString::fromUtf8(entry[3]) ); QString comment( QString::fromUtf8(entry[4]) ); QString field5( QString::fromUtf8(entry[5]) ); QString field6( QString::fromUtf8(entry[6]) ); // add the subitems to the categories Category *cat= categories.find (category); if (cat) { // use the existend item QListViewItem *catItem = cat->getListItem(); if (catItem) { QListViewItem * item = new ShadedListItem( 0, catItem ); item->setText( 0, tr( name ) ); item->setText( 1, tr( user ) ); item->setText( 2, tr( password ) ); item->setText( 3, tr( comment ) ); item->setText( 4, tr( field5 ) ); item->setText( 5, tr( field6 ) ); if (expandTree) catItem->setOpen( TRUE ); numberOfEntries++; } } else { QListViewItem *catI = new ShadedListItem( 1, ListView ); // create and insert a new item QListViewItem * item = new ShadedListItem( 0, catI ); item->setText( 0, tr( name ) ); item->setText( 1, tr( user ) ); item->setText( 2, tr( password ) ); item->setText( 3, tr( comment ) ); item->setText( 4, tr( field5 ) ); item->setText( 5, tr( field6 ) ); if (expandTree) catI->setOpen( TRUE ); Category *c1 = new Category(); c1->setCategoryName(category); QString icon; QString fullIconPath; QPixmap *pix; // #ifndef WIN32 icon = conf->readEntry(APP_KEY+category); // #endif bool isIconAv = false; if (!icon.isEmpty() && !icon.isNull()) { // build the full path fullIconPath = iconPath + icon; pix = new QPixmap (fullIconPath); if (pix) { QImage img = pix->convertToImage(); pix->convertFromImage(img.smoothScale(14,14)); c1->setIconName (icon); c1->setIcon (*pix); isIconAv = true; } } if (!isIconAv) { c1->setIcon (*getPredefinedIcon(category)); } c1->setListItem (catI); c1->initListItem(); categories.insert (c1->getCategoryName(), c1); numberOfEntries++; } for (int count = 0; count < FIELD_SIZE; count++) { free(entry[count]); } retval = loadEntry(entry); if (retval == 2) { // m_parent->slotStatusHelpMsg("Last entry loaded"); } } // end while if (numberOfEntries == 0) { switch( QMessageBox::warning( this, tr("ZSafe"), tr("Empty document or\nwrong password.\nContinue?"), tr("&No"), tr("&Yes."), 0 ) ) { case 0: // No retval = loadFinalize(); exitZs (1); break; case 1: // Yes break; } } retval = loadFinalize(); return true; } int ZSafe::loadInit(const char* _filename, const char *password) { unsigned int j = 0; unsigned int keylength=0; int count=0, count2=0, count3=0; unsigned char charbuf[8]; unsigned short ciphertext[4]; char key[128]; Krc2* krc2 = new Krc2(); fd = fopen (_filename, "rb"); QFileInfo f (_filename); load_buffer_length = f.size(); load_buffer_length = ((load_buffer_length / 1024)+1) * 1024 * 2; if (fd == NULL) return PWERR_OPEN; buffer = (char *)malloc(load_buffer_length); for (j = 0; password[j] != '\0'; j++) { key[j] = password[j]; } keylength = j; krc2->rc2_expandkey (key, keylength, 128); #ifndef WIN32 size = read(fileno (fd), (unsigned char *) (charbuf + count), 8); #else printf ("LoadInit() read1"); size = fread ((unsigned char *) (charbuf + count), sizeof(unsigned char), 8, fd); #endif if (size < 8) return PWERR_DATA; for (count = 0; count < 4; count++) { count2 = count << 1; iv[count] = charbuf[count2] << 8; iv[count] += charbuf[count2 + 1]; } size = 0; bufferIndex = 0; #ifndef WIN32 while ((count = read (fileno (fd), (unsigned char *) charbuf, 8)) > 0) { while (count < 8) { count2 = read (fileno (fd), (unsigned char *) (charbuf + count), 8); #else printf ("LoadInit() read2"); while ((count = fread ((unsigned char *) (charbuf), sizeof(unsigned char), 8, fd)) > 0) { while (count < 8) { count2 = fread ((unsigned char *) (charbuf + count), sizeof(unsigned char), 8, fd); #endif if (count2 == 0) { return PWERR_DATA; } count += count2; } /* while (count < 8) */ size += 8; for (count2 = 0; count2 < 8; count2 += 2) { count3 = count2 >> 1; ciphertext[count3] = charbuf[count2] << 8; ciphertext[count3] += charbuf[count2 + 1]; plaintext[count3] = ciphertext[count3] ^ iv[count3]; iv[count3] = plaintext[count3]; } /* for (count2) */ krc2->rc2_decrypt (plaintext); memcpy ((unsigned char *) (buffer + bufferIndex), plaintext, 8); bufferIndex += 8; buffer[bufferIndex + 1] = '\0'; } /* while ((count = read (fileno (fd), (unsigned char *) charbuf, 8)) > 0) */ size -= buffer[size - 1]; lastcount = 0; /* This will point to the starting index */ bufferIndex = 0; return PWERR_GOOD; } int ZSafe::loadEntry(char *entry[FIELD_SIZE]) { /* Strip off PKCS 5 padding * Should check to make sure it's good here */ int count, count1=0; for (count = lastcount; count < size; count++) { if ((unsigned char) (buffer[count]) == 255) { if (buffer[bufferIndex] == '\0') { bufferIndex++; } entry[count1] = (char *) malloc (count - bufferIndex + 1); memcpy (entry[count1], (unsigned char *) (buffer + bufferIndex), count - bufferIndex); entry[count1][count - bufferIndex] = '\0'; count++; bufferIndex = count; count1++; if (count1 == FIELD_SIZE) { lastcount = count; return 1; } } /* if ((unsigned char) (buffer[count]) == 255) */ } /* for (count = 0; count < size; count++) */ return 2; } int ZSafe::loadFinalize(void) { fclose (fd); if (buffer) free(buffer); return PWERR_GOOD; } bool ZSafe::saveDocument(const char* _filename, bool withPwd, const char* ) { if (filename.isEmpty()) { QMessageBox::critical( 0, tr("ZSafe"), tr("No document defined.\nYou have to create a new document")); return false; } // if (m_password.isEmpty()) // withPwd = true; // the document must be saved with a valid password if (withPwd) { bool pwdOk = FALSE; while (!pwdOk) { getDocPassword(tr("Enter Password")); if (m_password.isEmpty()) { QMessageBox::critical( 0, tr("ZSafe"), tr("Password is empty.\nPlease enter again.")); continue; } QString firstPasswd = m_password; getDocPassword(tr("Reenter Password")); if (m_password.isEmpty()) { QMessageBox::critical( 0, tr("ZSafe"), tr("Password is empty.\nPlease enter again.")); continue; } if (firstPasswd != m_password) { QMessageBox::critical( 0, tr("ZSafe"), tr("Passwords must be identical.\nPlease enter again.")); continue; } pwdOk = TRUE; modified = false; } } else if (modified) { QString fns(_filename); fns = fns.right (fns.length() - fns.findRev ('/') - 1); switch( QMessageBox::information( this, tr("ZSafe"), tr("Do you want to save ") + fns + tr("\nbefore continuing?"), tr("&Save"), tr("&Don't Save"), 0 // Enter == button 0 ) ) { // Escape == button 2 case 0: // Save clicked, Alt-S or Enter pressed. modified = false; break; case 1: // Don't Save clicked or Alt-D pressed modified = false; return true; } } modified = false; if (m_password.isEmpty()) return false; int retval = saveInit(_filename, m_password); // int retval = saveInit(_filename, "test"); if (retval != PWERR_GOOD) { return false; } char* entry[FIELD_SIZE]; // save the validation entry { int i=0; entry[i] = (char*)malloc(strlen("ZSAFECATEGORY")+1); strcpy(entry[i++], "ZSAFECATEGORY"); entry[i] = (char*)malloc(strlen("name")+1); strcpy(entry[i++], "name"); entry[i] = (char*)malloc(strlen("username")+1); strcpy(entry[i++], "username"); entry[i] = (char*)malloc(strlen("password")+1); strcpy(entry[i++], "password"); entry[i] = (char*)malloc(strlen("comment")+1); strcpy(entry[i++], "comment"); entry[i] = (char*)malloc(strlen("field5")+1); strcpy(entry[i++], "field5"); entry[i] = (char*)malloc(strlen("field6")+1); strcpy(entry[i++], "field6"); retval = saveEntry(entry); for (int z=0; z<i; z++) free(entry[z]); if (retval == PWERR_DATA) { qWarning("1: Error writing file, contents not saved"); saveFinalize(); return false; } // #ifndef WIN32 conf->writeEntry(APP_KEY+"valzsafe", 1); // #endif saveConf(); } QListViewItem *i; // step through all categories for (i = ListView->firstChild(); i != NULL; i = i->nextSibling()) { // step through all subitems QListViewItem *si; for (si = i->firstChild(); si != NULL; si = si->nextSibling()) { int j=0; entry[j] = (char*)malloc(strlen(i->text(0).utf8())+1); strcpy(entry[j++], i->text(0).utf8()); entry[j] = (char*)malloc(strlen(si->text(0).utf8())+1); strcpy(entry[j++], si->text(0).utf8()); entry[j] = (char*)malloc(strlen(si->text(1).utf8())+1); strcpy(entry[j++], si->text(1).utf8()); entry[j] = (char*)malloc(strlen(si->text(2).utf8())+1); strcpy(entry[j++], si->text(2).utf8()); entry[j] = (char*)malloc(strlen(si->text(3).utf8())+1); strcpy(entry[j++], si->text(3).utf8()); entry[j] = (char*)malloc(strlen(si->text(4).utf8())+1); strcpy(entry[j++], si->text(4).utf8()); entry[j] = (char*)malloc(strlen(si->text(5).utf8())+1); strcpy(entry[j++], si->text(5).utf8()); retval = saveEntry(entry); for (int z=0; z<j; z++) { free(entry[z]); } if (retval == PWERR_DATA) { qWarning("1: Error writing file, contents not saved"); saveFinalize(); return false; } } } if (saveFinalize() == PWERR_DATA) { qWarning("2: Error writing file, contents not saved"); return false; } else { #ifndef DESKTOP Global::statusMessage (tr("Password file saved.")); #endif modified = false; return true; } } PasswordForm *newPwdDialog; bool newPwdDialogResult = false; void ZSafe::setPasswordDialogDone() { newPwdDialogResult = true; newPwdDialog->close(); } void ZSafe::getDocPassword(QString title) { qWarning ("getDocPassword"); // open the 'Password' dialog PasswordForm *dialog = new PasswordForm(this, title, TRUE); newPwdDialog = dialog; newPwdDialogResult = false; connect( dialog->PasswordField, SIGNAL( returnPressed() ), this, SLOT( setPasswordDialogDone() ) ); // CS: !!! // int pos = filename.findRev ('/'); QString ti = filename.right (filename.length() - filename.findRev ('/') - 1); #ifdef WIN32 dialog->setCaption("Qt " + ti); #else dialog->setCaption(ti); #endif // dialog->setCaption(title); dialog->PasswordField->setFocus(); DialogCode result = (DialogCode) dialog->exec(); #ifdef DESKTOP result = Accepted; #endif QString password; if (result == Accepted || newPwdDialogResult) { m_password = dialog->PasswordField->text(); } else { exitZs (1); } } int ZSafe::saveInit(const char *_filename, const char *password) { char key[128]; unsigned int j = 0; unsigned int keylength; // int val; int count2; Krc2* krc2 = new Krc2(); /* first we should check the permissions of the filename */ /* if (QFile::exists(_filename)) { val = checkFile(_filename); if (val != PWERR_GOOD) return val; } else { val = creat (_filename, (S_IRUSR | S_IWUSR)); if (val == -1) return PWERR_OPEN; else close(val); } */ QFileInfo f (_filename); save_buffer_length = f.size(); save_buffer_length = ((save_buffer_length / 1024)+1) * 1024; fd = fopen (_filename, "wb"); if (fd == NULL) return PWERR_OPEN; buffer = (char*)malloc(save_buffer_length); /* make the key ready */ for (j = 0; password[j] != '\0'; j++) { key[j] = password[j]; } keylength = j; krc2->rc2_expandkey (key, keylength, 128); /* First, we make the IV */ for (count2 = 0; count2 < 4; count2++) { iv[count2] = rand (); putc ((unsigned char) (iv[count2] >> 8), fd); putc ((unsigned char) (iv[count2] & 0xff), fd); } bufferIndex = 0; return PWERR_GOOD; } int ZSafe::saveEntry(char *entry[FIELD_SIZE]) { char *text1; int count2, count3; unsigned short ciphertext[4]; Krc2* krc2 = new Krc2(); buffer = (char*)memset(buffer, '\0', save_buffer_length); for (count2 = 0; count2 < FIELD_SIZE; count2++) { text1 = entry[count2]; if (strlen (text1) == 0) { strncat(buffer, " ", strlen(" ")); } else { strncat(buffer, text1, strlen(text1)); } /* Use 255 as the marker. \n is too tough to test for */ buffer[strlen (buffer)] = 255; } /*for (count2 = 0; count2 < 5; count2++)*/ count2 = 0; /* I'm using CBC mode and encrypting the data straight from top down. * At the bottom, encrypted, I will append an MD5 hash of the file, eventually. * PKCS 5 padding (explained at the code section */ while (count2 < (int)strlen (buffer)) { #ifndef WORDS_BIGENDIAN plaintext[bufferIndex] = buffer[count2 + 1] << 8; plaintext[bufferIndex] += buffer[count2] & 0xff; #endif #ifdef WORDS_BIGENDIAN plaintext[bufferIndex] = buffer[count2] << 8; plaintext[bufferIndex] += buffer[count2 + 1] & 0xff; #endif bufferIndex++; if (bufferIndex == 4) { krc2->rc2_encrypt (plaintext); for (count3 = 0; count3 < 4; count3++) { ciphertext[count3] = iv[count3] ^ plaintext[count3]; /* Now store the ciphertext as the iv */ iv[count3] = plaintext[count3]; /* reset the buffer index */ bufferIndex = 0; if (putc ((unsigned char) (ciphertext[count3] >> 8), fd) == EOF) return PWERR_DATA; if (putc ((unsigned char) (ciphertext[count3] & 0xff), fd) == EOF) return PWERR_DATA; } /*for (count3 = 0; count3 < 5; count3++)*/ } /*if (bufferIndex == 5)*/ /* increment a short, not a byte */ count2 += 2; } /*while (count2 < strlen (buffer))*/ int ret = PWERR_GOOD; return ret; } int ZSafe::saveFinalize(void) { int count1, retval = PWERR_GOOD; unsigned short ciphertext[4]; Krc2* krc2 = new Krc2(); /* Tack on the PKCS 5 padding * How it works is we fill up the last n bytes with the value n * * So, if we have, say, 13 bytes, 8 of which are used, we have 5 left * over, leaving us 3 short, so we fill it in with 3's. * * If we come out even, we fill it with 8 8s * * um, except that in this instance we are using 4 shorts instead of 8 bytes. * so, half everything */ for (count1 = bufferIndex; count1 < 4; count1++) { plaintext[count1] = (4 - bufferIndex); } krc2->rc2_encrypt (plaintext); for (count1 = 0; count1 < 4; count1++) { ciphertext[count1] = iv[count1] ^ plaintext[count1]; if (putc ((unsigned char) (ciphertext[count1] >> 8), fd) == EOF) retval = PWERR_DATA; if (putc ((unsigned char) (ciphertext[count1] & 0xff), fd) == EOF) retval = PWERR_DATA; } fclose (fd); free(buffer); return retval; } void ZSafe::quitMe () { qWarning ("QUIT..."); if (modified) { switch( QMessageBox::information( this, tr("ZSafe"), tr("Do you want to save\nbefore exiting?"), tr("&Save"), tr("S&ave with\nnew\npassword"), tr("&Don't Save"), 0 // Enter == button 0 ) ) { // Escape == button 2 case 0: // Save clicked, Alt-S or Enter pressed. // save modified = false; saveDocument(filename, FALSE); exitZs (1); break; case 1: // // Save with new password modified = false; saveDocument(filename, TRUE); exitZs (1); break; case 2: // Don't Save clicked or Alt-D pressed // don't save but exitZs exitZs (1); break; } } exitZs (1); } void ZSafe::categoryFieldActivated( const QString& category) { if (categoryDialog) setCategoryDialogFields(categoryDialog, category); } void ZSafe::addCategory() { if (filename.isEmpty()) { QMessageBox::critical( 0, tr("ZSafe"), tr("No document defined.\nYou have to create a new document")); return; } else { // open the 'Category' dialog bool initIcons = false; // open the 'Category' dialog CategoryDialog *dialog; if (categoryDialog) { dialog = categoryDialog; } else { categoryDialog = new CategoryDialog(this, tr("Category"), TRUE); #ifdef WIN32 categoryDialog->setCaption ("Qt " + tr("Category")); #endif dialog = categoryDialog; connect( dialog->CategoryField, SIGNAL( activated ( const QString &)), this, SLOT( categoryFieldActivated( const QString & ) ) ); initIcons = true; } #ifdef DESKTOP #ifndef WIN32 QStringList list = conf->entryList( APP_KEY+"/fieldDefs" ); #else // read all categories from the config file and store // into a list QFile f (cfgFile); QStringList list; if ( f.open(IO_ReadOnly) ) { // file opened successfully QTextStream t( &f ); // use a text stream QString s; int n = 1; while ( !t.eof() ) { // until end of file... s = t.readLine(); // line of text excluding '\n' list.append(s); } f.close(); } #endif #else // read all categories from the config file and store // into a list QFile f (cfgFile); QStringList list; if ( f.open(IO_ReadOnly) ) { // file opened successfully QTextStream t( &f ); // use a text stream QString s; while ( !t.eof() ) { // until end of file... s = t.readLine(); // line of text excluding '\n' list.append(s); } f.close(); } #endif QStringList::Iterator it = list.begin(); QString categ; QString firstCategory; dialog->CategoryField->clear(); // remove all items while( it != list.end() ) { QString *cat = new QString (*it); if (cat->contains("-field1", FALSE)) { #ifdef DESKTOP #ifndef WIN32 categ = cat->section ("-field1", 0, 0); #else int pos = cat->find ("-field1"); categ = cat->left (pos); #endif #else int pos = cat->find ("-field1"); cat->truncate(pos); categ = *cat; #endif if (!categ.isEmpty()) { dialog->CategoryField->insertItem (categ, -1); if (firstCategory.isEmpty()) firstCategory = categ; } } ++it; } if (firstCategory.isEmpty()) setCategoryDialogFields(dialog); else setCategoryDialogFields(dialog, firstCategory); // CategoryDialog *dialog = new CategoryDialog(this, "Category", TRUE); if (initIcons) { Wait waitDialog(this, tr("Wait dialog")); waitDialog.waitLabel->setText(tr("Gathering icons...")); waitDialog.show(); qApp->processEvents(); #ifdef DESKTOP QDir d(iconPath); #else QDir d(QPEApplication::qpeDir() + "/pics/"); #endif d.setFilter( QDir::Files); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); // create list iterator QFileInfo *fi; // pointer for traversing dialog->IconField->insertItem("predefined"); while ( (fi=it.current()) ) { // for each file... QString fileName = fi->fileName(); if(fileName.right(4) == ".png"){ fileName = fileName.mid(0,fileName.length()-4); #ifdef DESKTOP QPixmap imageOfFile; imageOfFile.load(iconPath + fi->fileName()); #else QPixmap imageOfFile(Resource::loadPixmap(fileName)); #endif QImage foo = imageOfFile.convertToImage(); foo = foo.smoothScale(16,16); imageOfFile.convertFromImage(foo); dialog->IconField->insertItem(imageOfFile,fileName); } ++it; } waitDialog.hide(); } #ifndef WIN32 dialog->show(); #endif #ifndef DESKTOP // dialog->move (20, 100); #endif DialogCode result = (DialogCode) dialog->exec(); #ifdef DESKTOP result = Accepted; #endif QString category; QString icon; QString fullIconPath; QPixmap *pix; if (result == Accepted) { modified = true; category = dialog->CategoryField->currentText(); icon = dialog->IconField->currentText()+".png"; qWarning (category); QListViewItem *li = new ShadedListItem( 1, ListView ); Category *c1 = new Category(); c1->setCategoryName(category); // if (!icon.isEmpty() && !icon.isNull()) if (icon != "predefined.png") { // build the full path fullIconPath = iconPath + icon; pix = new QPixmap (fullIconPath); // pix->resize(14, 14); if (pix) { // save the full pixmap name into the config file // #ifndef WIN32 conf->writeEntry(APP_KEY+category, icon); // #endif saveConf(); QImage img = pix->convertToImage(); pix->convertFromImage(img.smoothScale(14,14)); c1->setIcon (*pix); c1->setIconName(icon); } else { QPixmap folder( ( const char** ) general_data ); c1->setIcon (folder); } } else { c1->setIcon (*getPredefinedIcon(category)); } c1->setListItem (li); c1->initListItem(); categories.insert (c1->getCategoryName(), c1); saveCategoryDialogFields(dialog); } else { // delete dialog; dialog->hide(); return; } } } void ZSafe::delCategory() { if (!selectedItem) return; if (isCategory(selectedItem)) { switch( QMessageBox::information( this, tr("ZSafe"), tr("Do you want to delete?"), tr("&Delete"), tr("D&on't Delete"), 0 // Enter == button 0 ) ) { // Escape == button 2 case 0: // Delete clicked, Alt-S or Enter pressed. // Delete from the category list modified = true; categories.remove (selectedItem->text(0)); // #ifndef WIN32 conf->removeEntry (selectedItem->text(0)); // #endif saveConf(); // Delete the selected item and all subitems // step through all subitems QListViewItem *si; for (si = selectedItem->firstChild(); si != NULL; ) { QListViewItem *_si = si; si = si->nextSibling(); selectedItem->takeItem(_si); // remove from view list if (_si) delete _si; } ListView->takeItem(selectedItem); delete selectedItem; selectedItem = NULL; break; case 1: // Don't delete break; } } } void ZSafe::setCategoryDialogFields(CategoryDialog *dialog) { if (!dialog) return; QString icon; if (selectedItem) { dialog->Field1->setText(getFieldLabel (selectedItem, "1", tr("Name"))); dialog->Field2->setText(getFieldLabel (selectedItem, "2", tr("Username"))); dialog->Field3->setText(getFieldLabel (selectedItem, "3", tr("Password"))); dialog->Field4->setText(getFieldLabel (selectedItem, "4", tr("Comment"))); dialog->Field5->setText(getFieldLabel (selectedItem, "5", tr("Field 4"))); dialog->Field6->setText(getFieldLabel (selectedItem, "6", tr("Field 5"))); Category *cat= categories.find (selectedItem->text(0)); if (cat) { icon = cat->getIconName(); } else icon = conf->readEntry(APP_KEY+selectedItem->text(0)); } else { dialog->Field1->setText(tr("Name")); dialog->Field2->setText(tr("Username")); dialog->Field3->setText(tr("Password")); dialog->Field4->setText(tr("Comment")); dialog->Field5->setText(tr("Field 4")); dialog->Field6->setText(tr("Field 5")); } #ifdef DESKTOP QDir d(iconPath); #else QDir d(QPEApplication::qpeDir() + "/pics/"); #endif d.setFilter( QDir::Files); const QFileInfoList *list = d.entryInfoList(); int i=0; QFileInfoListIterator it( *list ); // create list iterator QFileInfo *fi; // pointer for traversing if (icon.isEmpty() || icon.isNull()) { dialog->IconField->setCurrentItem(0); } else { while ( (fi=it.current()) ) { // for each file... QString fileName = fi->fileName(); if(fileName.right(4) == ".png") { fileName = fileName.mid(0,fileName.length()-4); if(fileName+".png"==icon) { dialog->IconField->setCurrentItem(i+1); break; } ++i; } ++it; } } } void ZSafe::setCategoryDialogFields(CategoryDialog *dialog, QString category) { if (!dialog) return; dialog->Field1->setText(getFieldLabel (category, "1", tr("Name"))); dialog->Field2->setText(getFieldLabel (category, "2", tr("Username"))); dialog->Field3->setText(getFieldLabel (category, "3", tr("Password"))); dialog->Field4->setText(getFieldLabel (category, "4", tr("Comment"))); dialog->Field5->setText(getFieldLabel (category, "5", tr("Field 4"))); dialog->Field6->setText(getFieldLabel (category, "6", tr("Field 5"))); QString icon; Category *cat= categories.find (category); if (cat) { icon = cat->getIconName(); } else icon = conf->readEntry(APP_KEY+category); #ifdef DESKTOP QDir d(iconPath); #else QDir d(QPEApplication::qpeDir() + "/pics/"); #endif d.setFilter( QDir::Files); const QFileInfoList *list = d.entryInfoList(); int i=0; QFileInfoListIterator it( *list ); // create list iterator QFileInfo *fi; // pointer for traversing if (icon.isEmpty() || icon.isNull()) { dialog->IconField->setCurrentItem(0); } else { while ( (fi=it.current()) ) { // for each file... QString fileName = fi->fileName(); if(fileName.right(4) == ".png") { fileName = fileName.mid(0,fileName.length()-4); if(fileName+".png"==icon) { dialog->IconField->setCurrentItem(i+1); break; } ++i; } ++it; } } } void ZSafe::saveCategoryDialogFields(CategoryDialog *dialog) { QString app_key = APP_KEY; #ifndef DESKTOP conf->setGroup ("fieldDefs"); #else #ifndef WIN32 app_key += "/fieldDefs/"; #endif #endif QString category = dialog->CategoryField->currentText(); // #ifndef WIN32 conf->writeEntry(app_key+category+"-field1", dialog->Field1->text()); conf->writeEntry(app_key+category+"-field2", dialog->Field2->text()); conf->writeEntry(app_key+category+"-field3", dialog->Field3->text()); conf->writeEntry(app_key+category+"-field4", dialog->Field4->text()); conf->writeEntry(app_key+category+"-field5", dialog->Field5->text()); conf->writeEntry(app_key+category+"-field6", dialog->Field6->text()); // #endif saveConf(); #ifndef DESKTOP conf->setGroup ("zsafe"); #endif } void ZSafe::editCategory() { if (!selectedItem) return; if (isCategory(selectedItem)) { QString category = selectedItem->text(0); bool initIcons = false; // open the 'Category' dialog CategoryDialog *dialog; if (categoryDialog) { dialog = categoryDialog; } else { categoryDialog = new CategoryDialog(this, tr("Category"), TRUE); #ifdef WIN32 categoryDialog->setCaption ("Qt " + tr("Category")); #endif dialog = categoryDialog; connect( dialog->CategoryField, SIGNAL( activated ( const QString &)), this, SLOT( categoryFieldActivated( const QString & ) ) ); initIcons = true; } setCategoryDialogFields(dialog); #ifdef DESKTOP #ifndef WIN32 QStringList list = conf->entryList( APP_KEY+"/fieldDefs" ); #else // read all categories from the config file and store // into a list QFile f (cfgFile); QStringList list; if ( f.open(IO_ReadOnly) ) { // file opened successfully QTextStream t( &f ); // use a text stream QString s; int n = 1; while ( !t.eof() ) { // until end of file... s = t.readLine(); // line of text excluding '\n' list.append(s); } f.close(); } #endif #else // read all categories from the config file and store // into a list QFile f (cfgFile); QStringList list; if ( f.open(IO_ReadOnly) ) { // file opened successfully QTextStream t( &f ); // use a text stream QString s; while ( !t.eof() ) { // until end of file... s = t.readLine(); // line of text excluding '\n' list.append(s); } f.close(); } #endif QStringList::Iterator it = list.begin(); QString categ; dialog->CategoryField->clear(); // remove all items int i=0; bool foundCategory = false; while( it != list.end() ) { QString *cat = new QString (*it); if (cat->contains("-field1", FALSE)) { #ifdef DESKTOP #ifndef WIN32 categ = cat->section ("-field1", 0, 0); #else int pos = cat->find ("-field1"); categ = cat->left (pos); #endif #else int pos = cat->find ("-field1"); cat->truncate(pos); categ = *cat; #endif if (!categ.isEmpty()) { dialog->CategoryField->insertItem (categ, i); if (category.compare(categ) == 0) { dialog->CategoryField->setCurrentItem(i); foundCategory = true; } i++; } } ++it; } if (!foundCategory) { dialog->CategoryField->insertItem (category, i); dialog->CategoryField->setCurrentItem(i); } QString icon; Category *cat= categories.find (selectedItem->text(0)); if (cat) { icon = cat->getIconName(); } if (initIcons) { Wait waitDialog(this, tr("Wait dialog")); waitDialog.waitLabel->setText(tr("Gathering icons...")); waitDialog.show(); qApp->processEvents(); #ifdef DESKTOP QDir d(iconPath); #else QDir d(QPEApplication::qpeDir() + "/pics/"); #endif d.setFilter( QDir::Files); const QFileInfoList *list = d.entryInfoList(); int i=0; QFileInfoListIterator it( *list ); // create list iterator QFileInfo *fi; // pointer for traversing if (icon.isEmpty() || icon.isNull()) { dialog->IconField->setCurrentItem(0); } dialog->IconField->insertItem("predefined"); while ( (fi=it.current()) ) { // for each file... QString fileName = fi->fileName(); if(fileName.right(4) == ".png") { fileName = fileName.mid(0,fileName.length()-4); #ifdef DESKTOP QPixmap imageOfFile; imageOfFile.load(iconPath + fi->fileName()); #else QPixmap imageOfFile(Resource::loadPixmap(fileName)); #endif QImage foo = imageOfFile.convertToImage(); foo = foo.smoothScale(16,16); imageOfFile.convertFromImage(foo); dialog->IconField->insertItem(imageOfFile,fileName); if(fileName+".png"==icon) dialog->IconField->setCurrentItem(i+1); ++i; } ++it; } waitDialog.hide(); } else { #ifdef DESKTOP // QDir d(QDir::homeDirPath() + "/pics/"); QDir d(iconPath); #else QDir d(QPEApplication::qpeDir() + "/pics/"); #endif d.setFilter( QDir::Files); const QFileInfoList *list = d.entryInfoList(); int i=0; QFileInfoListIterator it( *list ); // create list iterator QFileInfo *fi; // pointer for traversing if (icon.isEmpty() || icon.isNull()) { dialog->IconField->setCurrentItem(0); } else { while ( (fi=it.current()) ) { // for each file... QString fileName = fi->fileName(); if(fileName.right(4) == ".png") { fileName = fileName.mid(0,fileName.length()-4); if(fileName+".png"==icon) { dialog->IconField->setCurrentItem(i+1); break; } ++i; } ++it; } } } // dialog->show(); #ifndef DESKTOP // dialog->move (20, 100); #endif DialogCode result = (DialogCode) dialog->exec(); #ifdef DESKTOP result = Accepted; #endif QString fullIconPath; QPixmap *pix; if (result == Accepted) { modified = true; if (category != dialog->CategoryField->currentText()) { categories.remove (category); // #ifndef WIN32 conf->removeEntry(category); // #endif saveConf(); } category = dialog->CategoryField->currentText(); icon = dialog->IconField->currentText()+".png"; if (cat) { qWarning("Category found"); // if (!icon.isEmpty() && !icon.isNull()) if (icon != "predefined.png") { // build the full path fullIconPath = iconPath + icon; pix = new QPixmap (fullIconPath); if (pix) { // save the full pixmap name into the config file // #ifndef WIN32 conf->writeEntry(APP_KEY+category, icon); // #endif saveConf(); QImage img = pix->convertToImage(); pix->convertFromImage(img.smoothScale(14,14)); cat->setIconName (icon); cat->setIcon (*pix); } } else { // #ifndef WIN32 conf->removeEntry (category); // #endif saveConf(); cat->setIcon (*getPredefinedIcon(category)); } // change the category name of the selected category QListViewItem *catItem = cat->getListItem(); if (catItem) { qWarning (category); catItem->setText( 0, tr( category ) ); cat->setCategoryName (tr(category)); cat->initListItem(); categories.insert (category, cat); } } saveCategoryDialogFields(dialog); } else { diff --git a/noncore/comm/keypebble/kvnc.cpp b/noncore/comm/keypebble/kvnc.cpp index 25c8919..2fa8d1f 100644 --- a/noncore/comm/keypebble/kvnc.cpp +++ b/noncore/comm/keypebble/kvnc.cpp @@ -1,295 +1,292 @@ #include <qiconset.h> #include <qdialog.h> #include <qpixmap.h> #include <qdom.h> #include <qaction.h> #include <qmenubar.h> #include <qstatusbar.h> #include <qpopupmenu.h> #include <qpushbutton.h> #include <qpe/qpetoolbar.h> #include <qtimer.h> #include <qmessagebox.h> #include <qspinbox.h> #include <qlistbox.h> #include <qlineedit.h> #include <qpe/qpeapplication.h> #include <qpe/global.h> #include <qpe/qpetoolbar.h> #include <qpe/resource.h> #include <assert.h> #include "kvnc.h" #include "krfbcanvas.h" #include "krfbconnection.h" #include "kvncconndlg.h" #include "krfbserver.h" static int u_id = 1; static int get_unique_id() { return u_id++; } /* XPM */ static char * menu_xpm[] = { "12 12 5 1", " c None", ". c #000000", "+ c #FFFDAD", "@ c #FFFF00", "# c #E5E100", " ", " ", " ......... ", " .+++++++. ", " .+@@@@#. ", " .+@@@#. ", " .+@@#. ", " .+@#. ", " .+#. ", " .+. ", " .. ", " "}; const int StatusTextId = 0; KVNC::KVNC( QWidget *parent, const char *name, WFlags f) : QMainWindow( 0, name ,WStyle_ContextHelp) { setCaption( tr("VNC Viewer") ); fullscreen = false; stack = new QWidgetStack( this ); setCentralWidget( stack ); bookmarkSelector=new KVNCBookmarkDlg(); stack->addWidget(bookmarkSelector,get_unique_id()); stack->raiseWidget( bookmarkSelector ); canvas = new KRFBCanvas( stack, "canvas" ); stack->addWidget(canvas,get_unique_id()); setCentralWidget( stack ); connect( bookmarkSelector->bookmarkList, SIGNAL(clicked(QListBoxItem *)), this, SLOT(openConnection(QListBoxItem *)) ); connect( canvas->connection(), SIGNAL(statusChanged(const QString &)), this, SLOT(statusMessage(const QString &)) ); connect( canvas->connection(), SIGNAL(error(const QString &)), this, SLOT(error(const QString &)) ); connect( canvas->connection(), SIGNAL(connected()), this, SLOT(connected()) ); connect( canvas->connection(), SIGNAL(loggedIn()), this, SLOT(loggedIn()) ); connect( canvas->connection(), SIGNAL(disconnected()), this, SLOT(disconnected()) ); setupActions(); cornerButton = new QPushButton( this ); cornerButton->setPixmap( QPixmap( (const char**)menu_xpm ) ); connect( cornerButton, SIGNAL(pressed()), this, SLOT(showMenu()) ); canvas->setCornerWidget( cornerButton ); stack->raiseWidget( bookmarkSelector ); bar= new QToolBar( this ); setToolBarsMovable( false ); setRightJustification(false); QAction *n = new QAction( tr( "New Connection" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); connect( n, SIGNAL( activated() ), this, SLOT( newConnection() ) ); n->addTo( bar ); QAction *o = new QAction( tr( "Open Bookmark" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); connect( o, SIGNAL( activated() ), this, SLOT( openConnection() ) ); o->addTo( bar ); QAction *d = new QAction( tr( "Delete Bookmark" ), Resource::loadPixmap( "trash" ), QString::null, 0, this, 0 ); connect( d, SIGNAL( activated() ), this, SLOT( deleteBookmark() ) ); d->addTo( bar ); } KVNC::~KVNC() { } void KVNC::newConnection() { curServer=new KRFBServer; KVNCConnDlg dlg( curServer,this); - dlg.showMaximized(); - if ( dlg.exec()) { + if ( QPEApplication::execDialog( &dlg )) { if (!curServer->name.isEmpty()) bookmarkSelector->addBookmark(curServer); canvas->openConnection(*curServer); } else curServer=0; } void KVNC::openConnection( QString name) { curServer=bookmarkSelector->getServer(name); if (curServer) { KVNCConnDlg dlg( curServer,this); - dlg.showMaximized(); - - if ( dlg.exec() ) { + if ( QPEApplication::execDialog( &dlg ) ) { canvas->openConnection(*curServer); bookmarkSelector->writeBookmarks(); } else curServer=0; } } void KVNC::openConnection( void ) { openConnection( bookmarkSelector->selectedBookmark()); } void KVNC::openConnection( QListBoxItem * item) { if (item) openConnection(item->text()); } void KVNC::setupActions() { cornerMenu = new QPopupMenu( this ); fullScreenAction = new QAction( tr("Full Screen"), QString::null, 0, 0 ); connect( fullScreenAction, SIGNAL(activated()), this, SLOT( toggleFullScreen() ) ); fullScreenAction->addTo( cornerMenu ); fullScreenAction->setEnabled( false ); ctlAltDelAction = new QAction( tr("Send Contrl-Alt-Delete"), QString::null, 0, 0 ); connect( ctlAltDelAction, SIGNAL(activated()), canvas, SLOT( sendCtlAltDel() ) ); ctlAltDelAction->addTo( cornerMenu ); ctlAltDelAction->setEnabled( false ); disconnectAction = new QAction( tr("Disconnect"), QString::null, 0, 0 ); connect( disconnectAction, SIGNAL(activated()), this, SLOT( closeConnection() ) ); disconnectAction->addTo( cornerMenu ); disconnectAction->setEnabled( false ); doubleClickAction = new QAction( tr("Next Click is Double Click"), QString::null, 0, 0 ); connect( doubleClickAction, SIGNAL(activated()), canvas, SLOT( markDoubleClick() ) ); doubleClickAction->addTo( cornerMenu ); doubleClickAction->setEnabled( false ); rightClickAction = new QAction( tr("Next Click is Right Click"), QString::null, 0, 0 ); connect( rightClickAction, SIGNAL(activated()), canvas, SLOT( markRightClick() ) ); rightClickAction->addTo( cornerMenu ); rightClickAction->setEnabled( false ); } void KVNC::toggleFullScreen() { if ( fullscreen ) { canvas->releaseKeyboard(); canvas->reparent( stack, 0, QPoint(0,0), false ); canvas->setFrameStyle( QFrame::Panel | QFrame::Sunken ); setCentralWidget( stack ); stack->addWidget(canvas,get_unique_id()); stack->raiseWidget(canvas); canvas->show(); stack->show(); fullScreenAction->setText( tr("Full Screen") ); } else { canvas->setFrameStyle( QFrame::NoFrame ); stack->removeWidget(canvas); canvas->reparent( 0,WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop, QPoint(0,0),false); canvas->resize(qApp->desktop()->width(), qApp->desktop()->height()); canvas->raise(); canvas->setFocus(); canvas->grabKeyboard(); canvas->show(); fullScreenAction->setText( tr("Stop Full Screen") ); } fullscreen = !fullscreen; } void KVNC::closeConnection() { if ( fullscreen ) toggleFullScreen(); canvas->closeConnection(); } void KVNC::showMenu() { QPoint pt = mapToGlobal(cornerButton->pos()); QSize s = cornerMenu->sizeHint(); pt.ry() -= s.height(); pt.rx() -= s.width(); cornerMenu->popup( pt ); } void KVNC::connected() { static QString msg = tr( "Connected to remote host" ); statusMessage( msg ); ctlAltDelAction->setEnabled(true); disconnectAction->setEnabled( true ); fullScreenAction->setEnabled( true ); doubleClickAction->setEnabled( false ); rightClickAction->setEnabled( true ); stack->raiseWidget(canvas); bar->hide(); } void KVNC::loggedIn() { static QString msg = tr( "Logged in to remote host" ); statusMessage( msg ); } void KVNC::disconnected() { if ( fullscreen ) toggleFullScreen(); static QString msg = tr( "Connection closed" ); statusMessage( msg ); ctlAltDelAction->setEnabled(false); disconnectAction->setEnabled( false ); fullScreenAction->setEnabled( false ); doubleClickAction->setEnabled( false ); rightClickAction->setEnabled( false ); stack->raiseWidget(bookmarkSelector); bar->show(); } void KVNC::statusMessage( const QString &m ) { Global::statusMessage( m ); } void KVNC::error( const QString &msg ) { statusMessage( msg ); QMessageBox::warning( this, tr("VNC Viewer"), msg ); } void KVNC::deleteBookmark(void) { bookmarkSelector->deleteBookmark(bookmarkSelector->selectedBookmark()); } |