158 files changed, 755 insertions, 755 deletions
diff --git a/noncore/applets/memoryapplet/swapfile.cpp b/noncore/applets/memoryapplet/swapfile.cpp index 04da8bb..9416db3 100644 --- a/noncore/applets/memoryapplet/swapfile.cpp +++ b/noncore/applets/memoryapplet/swapfile.cpp @@ -1,434 +1,434 @@ /********************************************************************** ** 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 "swapfile.h" #include <qfile.h> #include <qtextstream.h> #include <qlabel.h> #include <qtimer.h> #include <qlayout.h> #include <qpushbutton.h> #include <qhbuttongroup.h> #include <qradiobutton.h> #include <qlineedit.h> #include <qprogressbar.h> #include <qcombobox.h> #include <qvgroupbox.h> #include <qhbox.h> #include <qmessagebox.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <qcopchannel_qws.h> #include <qpe/resource.h> #include <unistd.h> #include <fcntl.h> #include <sys/vfs.h> #include <mntent.h> #include <unistd.h> #include <sys/types.h> Swapfile::Swapfile( QWidget *parent, const char *name, WFlags f ) : QWidget( parent, name, f ) { // are we running as root? isRoot = geteuid() == 0; QVBoxLayout* vb = new QVBoxLayout(this, 5); QHButtonGroup* cfsdRBG = new QHButtonGroup(tr("Swapfile location"), this); cfsdRBG->setRadioButtonExclusive(true); vb->addWidget(cfsdRBG); ramRB = new QRadioButton(tr("RAM"), cfsdRBG); cfRB = new QRadioButton(tr("CF Card"), cfsdRBG); sdRB = new QRadioButton(tr("SD Card"), cfsdRBG); QHBox *hb1 = new QHBox(this); hb1->setSpacing(5); swapPath1 = new QLineEdit(hb1); swapPath1->setEnabled(false); QPushButton* swapOn = new QPushButton(tr(" On "), hb1); QPushButton* swapOff = new QPushButton(tr(" Off "), hb1); vb->addWidget(hb1); QVGroupBox* box1 = new QVGroupBox(tr("Manage Swapfile"), this); vb->addWidget(box1); QHBox *hb2 = new QHBox(box1); hb2->setSpacing(5); QPushButton* mkSwap = new QPushButton(tr("Generate"), hb2); QPushButton* rmSwap = new QPushButton(tr("Remove"), hb2); QHBox *hb3 = new QHBox(box1); hb3->setSpacing(5); swapSize = new QComboBox(hb3); swapSize->insertStringList(QStringList::split(",", tr("2 Mb,4 Mb,6 Mb,8 Mb"))); mkswapProgress = new QProgressBar(3, hb3); mkswapProgress->setCenterIndicator(true); QHBox *hb4 = new QHBox(this); hb4->setSpacing(5); swapStatusIcon = new QLabel(hb4); swapStatus = new QLabel(tr(""), hb4); hb4->setStretchFactor(swapStatus, 99); vb->addWidget(hb4); connect(swapOn, SIGNAL(clicked()), this, SLOT(swapon())); connect(swapOff, SIGNAL(clicked()), this, SLOT(swapoff())); connect(cfRB, SIGNAL(clicked()), this, SLOT(cfsdchecked())); connect(sdRB, SIGNAL(clicked()), this, SLOT(cfsdchecked())); connect(ramRB, SIGNAL(clicked()), this, SLOT(cfsdchecked())); connect(mkSwap, SIGNAL(clicked()), this, SLOT(makeswapfile())); connect(rmSwap, SIGNAL(clicked()), this, SLOT(removeswapfile())); cfRB->setEnabled(FALSE); sdRB->setEnabled(FALSE); QCopChannel *pcmciaChannel = new QCopChannel("QPE/Card", this); - connect(pcmciaChannel, SIGNAL(received(const QCString &, const QByteArray &)), this, SLOT(cardnotify(const QCString &, const QByteArray &))); + connect(pcmciaChannel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(cardnotify(const QCString&,const QByteArray&))); QCopChannel *sdChannel = new QCopChannel("QPE/Card", this); - connect(sdChannel, SIGNAL(received(const QCString &, const QByteArray &)), this, SLOT(cardnotify(const QCString &, const QByteArray &))); + connect(sdChannel, SIGNAL(received(const QCString&,const QByteArray&)), this, SLOT(cardnotify(const QCString&,const QByteArray&))); cardInPcmcia0 = FALSE; cardInPcmcia1 = FALSE; cardInSd = FALSE; Swapfile::status(); Swapfile::getStatusPcmcia(); Swapfile::getStatusSd(); } int Swapfile::exec(const QString& arg) { return system((!isRoot ? "sudo " : "") + arg); } Swapfile::~Swapfile() { } void Swapfile::cardnotify(const QCString & msg, const QByteArray &) { if (msg == "stabChanged()") { getStatusPcmcia(); } else if (msg == "mtabChanged()") { getStatusSd(); } } void Swapfile::getStatusPcmcia() { bool cardWas0 = cardInPcmcia0; // remember last state bool cardWas1 = cardInPcmcia1; QString fileName; // one of these 3 files should exist if (QFile::exists("/var/run/stab")) { fileName = "/var/run/stab"; } else if (QFile::exists("/var/state/pcmcia/stab")) { fileName = "/var/state/pcmcia/stab"; } else { fileName = "/var/lib/pcmcia/stab"; } QFile f(fileName); if (f.open(IO_ReadOnly)) { QStringList list; QTextStream stream(&f); QString streamIn; streamIn = stream.read(); list = QStringList::split("\n", streamIn); for (QStringList::Iterator line = list.begin(); line != list.end(); line++) { if ((*line).startsWith("Socket 0:")) { if ((*line).startsWith("Socket 0: empty") && cardInPcmcia0) { cardInPcmcia0 = FALSE; } else if (!(*line).startsWith("Socket 0: empty") && !cardInPcmcia0) { cardInPcmcia0 = TRUE; } } else if ((*line).startsWith("Socket 1:")) { if ((*line).startsWith("Socket 1: empty") && cardInPcmcia1) { cardInPcmcia1 = FALSE; } else if (!(*line).startsWith("Socket 1: empty") && !cardInPcmcia1) { cardInPcmcia1 = TRUE; } } } f.close(); if (cardWas0 != cardInPcmcia0 || cardWas1 != cardInPcmcia1) { QString text = QString::null; QString what = QString::null; if (cardWas0 != cardInPcmcia0) { if (cardInPcmcia0) { cfRB->setEnabled(TRUE); } else { cfRB->setChecked(FALSE); cfRB->setEnabled(FALSE); } } if (cardWas1 != cardInPcmcia1) { if (cardInPcmcia1) { cfRB->setEnabled(TRUE); } else { cfRB->setChecked(FALSE); cfRB->setEnabled(FALSE); } } } } else { // no file found qDebug("no file found"); cardInPcmcia0 = FALSE; cardInPcmcia1 = FALSE; } Swapfile::cfsdchecked(); } void Swapfile::getStatusSd() { bool cardWas = cardInSd; // remember last state cardInSd = FALSE; #if defined(_OS_LINUX_) || defined(Q_OS_LINUX) struct mntent *me; FILE *mntfp = setmntent("/etc/mtab", "r"); if (mntfp) { while ((me = getmntent(mntfp)) != 0) { QString fs = me->mnt_fsname; if (fs.left(14) == "/dev/mmc/part1" || fs.left(7) == "/dev/sd" || fs.left(9) == "/dev/mmcd") { cardInSd = TRUE; show(); } } endmntent(mntfp); } if (cardWas != cardInSd) { QString text = QString::null; QString what = QString::null; if (cardInSd) { sdRB->setEnabled(TRUE); } else { sdRB->setChecked(FALSE); sdRB->setEnabled(FALSE); } } #else #error "Not on Linux" #endif Swapfile::cfsdchecked(); } int rc=0; void Swapfile::swapon() { char swapcmd[128] ="swapon "; Swapfile::cfsdchecked(); strcat(swapcmd,swapPath1->text()); char *runcmd = swapcmd; rc = exec(QString("%1").arg(runcmd)); if (rc != 0) { setStatusMessage("Failed to attach swapfile.", true); } else { /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ setStatusMessage("Swapfile activated."); } Swapfile::status(); } void Swapfile::setStatusMessage(const QString& text, bool error /* = false */) { swapStatus->setText("<b>" + text + "</b>"); swapStatusIcon->setPixmap(Resource::loadPixmap(error ? "close" : "done")); } void Swapfile::swapoff() { char swapcmd[128] ="swapoff "; if (Swapfile::cfRB->isChecked() == TRUE) Swapfile::cfsdchecked(); strcat(swapcmd,swapPath1->text()); char *runcmd = swapcmd; rc = exec(QString("%1").arg(runcmd)); if (rc != 0) { setStatusMessage(tr("Failed to detach swapfile."), true); } else { /* QMessageBox::information(this, "Information", "Swapfile is inactive!"); */ setStatusMessage(tr("Swapfile deactivated.")); /* Swapfile::swapPath->clear();*/ } Swapfile::status(); } void Swapfile::cfsdchecked() { /* Swapfile::swapPath->clear();*/ Swapfile::swapPath1->clear(); if (Swapfile::ramRB->isChecked() == TRUE) { Swapfile::swapPath1->insert("/home/swapfile"); } if (Swapfile::sdRB->isChecked() == TRUE) { Swapfile::swapPath1->insert("/mnt/card/swapfile"); } if (Swapfile::cfRB->isChecked() == TRUE) { Swapfile::swapPath1->insert("/mnt/cf/swapfile"); } /* Swapfile::swapPath->insert(Swapfile::swapPath1->text());*/ } void Swapfile::makeswapfile() { int i = swapSize->currentItem(); mkswapProgress->setProgress(1); switch ( i ) { case 0: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=2048").arg(swapPath1->text())); break; case 1: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=4096").arg(swapPath1->text())); break; case 2: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=6144").arg(swapPath1->text())); break; case 3: rc=exec(QString("dd if=/dev/zero of=%1 bs=1k count=8192").arg(swapPath1->text())); break; } if (rc != 0) { setStatusMessage(tr("Failed to create swapfile."), true); } mkswapProgress->setProgress(2); rc=exec(QString("mkswap %1").arg(swapPath1->text())); if (rc != 0) { setStatusMessage(tr("Failed to initialize swapfile."), true); } mkswapProgress->setProgress(3); mkswapProgress->reset(); setStatusMessage(tr("Swapfile created.")); } void Swapfile::removeswapfile() { exec(QString("swapoff %1").arg(swapPath1->text())); rc=exec(QString("rm -rf %1").arg(swapPath1->text())); if (rc != 0) { setStatusMessage(tr("Failed to remove swapfile."), true); } Swapfile::status(); Swapfile::cfsdchecked(); setStatusMessage(tr("Swapfile removed.")); } void Swapfile::status() { FILE *fp; char buffer[128], swapfile[128], temp[128]; int swapsize=2000, i=1; fp=fopen("/proc/swaps", "r"); while ( (fgets(buffer,128,fp)) != NULL ) { sscanf(buffer, "%s %s %d %s %s\n", swapfile, temp, &swapsize, temp, temp); } fclose(fp); ramRB->setChecked(FALSE); cfRB->setChecked(FALSE); sdRB->setChecked(FALSE); i=strcmp(swapfile, "/home/swapfile"); if ( i == 0 ) { ramRB->setChecked(TRUE); /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ setStatusMessage(tr("Swapfile activated.")); } i=strcmp(swapfile, "/usr/mnt.rom/cf/swapfile"); if ( i == 0 ) { cfRB->setChecked(TRUE); /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ setStatusMessage(tr("Swapfile activated.")); } i=strcmp(swapfile, "/mnt/cf/swapfile"); if ( i == 0 ) { cfRB->setChecked(TRUE); /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ setStatusMessage(tr("Swapfile activated.")); } i=strcmp(swapfile, "/usr/mnt.rom/card/swapfile"); if ( i == 0 ) { sdRB->setChecked(TRUE); /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ setStatusMessage(tr("Swapfile activated.")); } i=strcmp(swapfile, "/mnt/card/swapfile"); if ( i == 0 ) { sdRB->setChecked(TRUE); /* QMessageBox::information(this, "Information", "Swapfile is active!"); */ setStatusMessage(tr("Swapfile activated.")); } Swapfile::cfsdchecked(); swapsize /=1000; switch ( swapsize ) { case 2: swapSize->setCurrentItem(0); break; case 4: swapSize->setCurrentItem(1); break; case 6: swapSize->setCurrentItem(2); break; case 8: swapSize->setCurrentItem(3); break; } } diff --git a/noncore/applets/notesapplet/notes.cpp b/noncore/applets/notesapplet/notes.cpp index 1142028..9b5e475 100644 --- a/noncore/applets/notesapplet/notes.cpp +++ b/noncore/applets/notesapplet/notes.cpp @@ -1,514 +1,514 @@ /********************************************************************** ** Copyright (C) 2002 L.J. Potter <llornkcor@handhelds.org> ** All rights reserved. ** ** 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. ** **********************************************************************/ #include "notes.h" #include <qapplication.h> #include <stdlib.h> #include <qstringlist.h> #include <opie2/otaskbarapplet.h> #include <qpe/filemanager.h> #include <qpe/qpeapplication.h> #include <qpe/timestring.h> #include <qpe/applnk.h> #include <qpe/ir.h> #include <qpe/config.h> // #include <qsocket.h> // #include <qclipboard.h> #include <qmultilineedit.h> #include <qlistbox.h> #include <qpopupmenu.h> #include <qmessagebox.h> #include <qdir.h> #include <qfile.h> #include <qpoint.h> #include <qpushbutton.h> #include <qpainter.h> #include <qlayout.h> #include <qframe.h> #include <qpixmap.h> #include <qstring.h> #include <qtimer.h> /* XPM */ static char * notes_xpm[] = { "16 16 11 1", " c None", ". c #000000", "+ c #7F7F7F", "@ c #BFBFBF", "# c #BFC1FF", "$ c #FF0000", "% c #FFFFFF", "& c #00037F", "* c #0006FF", "= c #0005BF", "- c #7F0000", " .. ", " .. ", " ... ", " .+ ", " .@. ", " . .+ ", " ..#.@. ", " ..###.+.. ", " ..###$...##.. ", "..###$$$%+$$##&.", ".*=####$-###&=&.", ".=**=###==&=&=..", " ..=**=#&=&=.. ", " ..=*=&=.. ", " ..=.. ", " . "}; NotesControl::NotesControl( QWidget *, const char * ) : QVBox( 0, "NotesControl",/* WDestructiveClose | */WStyle_StaysOnTop ) // : QFrame( parent, name, WDestructiveClose | WStyle_StaysOnTop | WType_Popup ) { QDir d( QDir::homeDirPath()+"/notes"); if( !d.exists()) { qDebug("make dir"); if(!d.mkdir( QDir::homeDirPath()+"/notes", true)) qDebug("<<<<<<<<<<<<<<<<<<<<<<<<<<<make dir failed"); } Config cfg("Notes"); cfg.setGroup("Options"); showMax = cfg.readBoolEntry("ShowMax", false); setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); loaded=false; edited=false; doPopulate=true; isNew=false; QVBox *vbox = new QVBox( this, "Vlayout" ); QHBox *hbox = new QHBox( this, "HLayout" ); view = new QMultiLineEdit(vbox, "OpieNotesView"); box = new QListBox(vbox, "OpieNotesBox"); QPEApplication::setStylusOperation( box->viewport(),QPEApplication::RightOnHold); box->setFixedHeight(50); vbox->setMargin( 6 ); vbox->setSpacing( 3 ); setFocusPolicy(QWidget::StrongFocus); newButton= new QPushButton( hbox, "newButton" ); newButton->setText(tr("New")); saveButton= new QPushButton( hbox, "saveButton" ); saveButton->setText(tr("Save")); deleteButton= new QPushButton( hbox, "deleteButton" ); deleteButton->setText(tr("Delete")); - connect( box, SIGNAL( mouseButtonPressed( int, QListBoxItem *, const QPoint&)), - this,SLOT( boxPressed(int, QListBoxItem *, const QPoint&)) ); + connect( box, SIGNAL( mouseButtonPressed(int,QListBoxItem*,const QPoint&)), + this,SLOT( boxPressed(int,QListBoxItem*,const QPoint&)) ); - connect(box, SIGNAL(highlighted(const QString&)), this, SLOT(slotBoxSelected(const QString &))); + connect(box, SIGNAL(highlighted(const QString&)), this, SLOT(slotBoxSelected(const QString&))); connect( &menuTimer, SIGNAL( timeout() ), SLOT( showMenu() ) ); connect(view,SIGNAL( textChanged() ), this, SLOT(slotViewEdited() ) ); connect(newButton, SIGNAL(clicked()), this, SLOT(slotNewButton())); connect(saveButton, SIGNAL(clicked()), this, SLOT(slotSaveButton())); connect(deleteButton, SIGNAL(clicked()), this, SLOT(slotDeleteButtonClicked())); populateBox(); load(); setCaption("Notes"); // parent->setFocus(); } void NotesControl::slotSaveButton() { slotNewButton(); populateBox(); } void NotesControl::slotDeleteButtonClicked() { switch ( QMessageBox::warning(this,tr("Delete?") ,tr("Do you really want to<BR><B> delete</B> this note ?") ,tr("Yes"),tr("No"),0,1,1) ) { case 0: slotDeleteButton(); break; }; } void NotesControl::slotDeleteButton() { QString selectedText = box->currentText(); qDebug("deleting "+selectedText); if( !selectedText.isEmpty()) { Config cfg("Notes"); cfg.setGroup("Docs"); int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); QString entryName, entryName2;; for ( int i = 0; i < noOfFiles; i++ ) { entryName.sprintf( "File%i", i + 1 ); if(selectedText == cfg.readEntry( entryName )) { qDebug("removing %s, %d", selectedText.latin1(), i); for ( int j = i; j < noOfFiles; j++ ) { entryName.sprintf( "File%i", i + 1 ); entryName2.sprintf( "File%i", i + 2 ); QString temp = cfg.readEntry(entryName2); qDebug("move "+temp); cfg.writeEntry(entryName, temp); i++; } cfg.writeEntry("NumberOfFiles", noOfFiles-1 ); entryName.sprintf( "File%i", noOfFiles ); cfg.removeEntry(entryName); cfg.write(); DocLnk nf(selectedText); nf.removeFiles(); QString fi=QPEApplication::documentDir()+"/text/plain/"+selectedText+".desktop"; qDebug(fi); QFile f( fi); if( !f.remove()) qDebug(".desktop file not removed"); } } view->clear(); populateBox(); } } void NotesControl::slotNewButton() { if(edited) save(); view->clear(); view->setFocus(); edited=false; isNew=false; } void NotesControl::slotBeamButton() { Ir ir; if(!ir.supported()){ } else { this->hide(); QString selectedText = box->currentText(); if( !selectedText.isEmpty()) { QString file = QDir::homeDirPath()+"/"+selectedText; QFile f(file); Ir *irFile = new Ir(this, "IR"); - connect( irFile, SIGNAL(done(Ir*)), this, SLOT( slotBeamFinished( Ir * ))); + connect( irFile, SIGNAL(done(Ir*)), this, SLOT( slotBeamFinished(Ir*))); irFile->send( file, "Note", "text/plain" ); } } } void NotesControl::slotBeamFinished(Ir *) { this->show(); } void NotesControl::boxPressed(int mouse, QListBoxItem *, const QPoint&) { switch (mouse) { case 1:{ } break; case 2: menuTimer.start( 500, TRUE ); break; }; } void NotesControl::slotBoxSelected(const QString &itemString) { if(edited) { save(); } loaded=false; edited=false; load(itemString); } void NotesControl::showMenu() { QPopupMenu *m = new QPopupMenu(0); m->insertItem( tr( "Beam Out" ), this, SLOT( slotBeamButton() )); m->insertItem( tr( "Search For..." ), this, SLOT( slotSearch() )); m->insertItem( tr( "Toggle Maximized" ), this, SLOT( slotShowMax() )); m->insertSeparator(); m->insertItem( tr( "Delete" ), this, SLOT( slotDeleteButton() )); m->setFocus(); m->exec( QCursor::pos() ); if(m) delete m; } void NotesControl::focusOutEvent ( QFocusEvent * e) { if( e->reason() == QFocusEvent::Popup) save(); else { if(!loaded) { populateBox(); load(); } } QWidget::focusOutEvent(e); } void NotesControl::save() { Config cfg("Notes"); cfg.setGroup("Docs"); if( edited) { // qDebug("is edited"); QString rt = view->text(); if( rt.length()>1) { QString pt = rt.simplifyWhiteSpace(); int i = pt.find( ' ', pt.find( ' ' )+2 ); QString docname = pt; if ( i > 0 ) docname = pt.left(i); // remove "." at the beginning while( docname.startsWith( "." ) ) docname = docname.mid( 1 ); docname.replace( QRegExp("/"), "_" ); // cut the length. filenames longer than that don't make sense // and something goes wrong when they get too long. if ( docname.length() > 40 ) docname = docname.left(40); if ( docname.isEmpty() ) docname = "Empty Text"; // qDebug(docname); if( oldDocName != docname) { int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); QString entryName; entryName.sprintf( "File%i", noOfFiles + 1 ); cfg.writeEntry( entryName,docname ); cfg.writeEntry("NumberOfFiles", noOfFiles+1 ); cfg.write(); } // else // qDebug("oldname equals docname"); doc = new DocLnk(docname); if(QFile(doc->linkFile()).exists()) qDebug("puppie"); doc->setType("text/plain"); doc->setName(docname); QString temp = docname.replace( QRegExp(" "), "_" ); doc->setFile( QDir::homeDirPath()+"/notes/"+temp); FileManager fm; if ( !fm.saveFile( *doc, rt ) ) { } oldDocName=docname; edited=false; // qDebug("save"); if (doPopulate) populateBox(); } cfg.writeEntry( "LastDoc",oldDocName ); cfg.write(); } } void NotesControl::populateBox() { box->clear(); // qDebug("populate"); Config cfg("Notes"); cfg.setGroup("Docs"); int noOfFiles = cfg.readNumEntry("NumberOfFiles", 0 ); QStringList list; QString entryName; for ( int i = 0; i < noOfFiles; i++ ) { entryName.sprintf( "File%i", i + 1 ); list.append(cfg.readEntry( entryName )); } list.sort(); box->insertStringList(list,-1); doPopulate=false; update(); } void NotesControl::load() { if(!loaded) { Config cfg("Notes"); cfg.setGroup("Docs"); QString lastDoc=cfg.readEntry( "LastDoc","notes"); DocLnk nf; nf.setType("text/plain"); nf.setFile(lastDoc); loadDoc(nf); loaded=true; oldDocName=lastDoc; cfg.writeEntry( "LastDoc",oldDocName ); cfg.write(); } } void NotesControl::load(const QString & file) { qDebug("loading "+file); QString name = file; QString temp; if( !QFile( QDir::homeDirPath()+"/"+file).exists() ) temp = QDir::homeDirPath()+"/notes/"+ name.replace( QRegExp(" "), "_" ); else temp = name; if(!loaded) { DocLnk nf; nf.setType("text/plain"); nf.setFile( temp); if(!temp.isEmpty()) loadDoc(nf); loaded=true; } // view->setFocus(); oldDocName=file; Config cfg("Notes"); cfg.setGroup("Docs"); cfg.writeEntry( "LastDoc",oldDocName ); cfg.write(); } void NotesControl::loadDoc( const DocLnk &f) { FileManager fm; QString txt; if ( !fm.loadFile( f, txt ) ) { qDebug("could not load file "+f.file()); return; } view->setText(txt); } void NotesControl::slotViewEdited() { if(loaded) { edited=true; } } void NotesControl::slotShowMax() { Config cfg("Notes"); cfg.setGroup("Options"); showMax=!showMax; cfg.writeEntry("ShowMax", showMax); cfg.write(); hide(); } void NotesControl::slotSearch() { int boxCount = box->count(); for(int i=0;i< boxCount;i++) { } } // void NotesControl::keyReleaseEvent( QKeyEvent *e) { // switch ( e->state() ) { // case ControlButton: // if(e->key() == Key_C) { //copy // qDebug("copy"); // QClipboard *cb = QApplication::clipboard(); // QString text; // // Copy text from the clipboard (paste) // text = cb->text(); // } // if(e->key() == Key_X) { //cut // } // if(e->key() == Key_V) { //paste // QClipboard *cb = QApplication::clipboard(); // QString text; // //view // cb->setText(); // } // break; // }; // QWidget::keyReleaseEvent(e); // } //=========================================================================== NotesApplet::NotesApplet( QWidget *parent, const char *name ) : QWidget( parent, name ) { setFixedHeight( 18 ); setFixedWidth( 14 ); vc = new NotesControl; } NotesApplet::~NotesApplet() { delete vc; } int NotesApplet::position() { return 6; } void NotesApplet::mousePressEvent( QMouseEvent *) { if( !vc->isHidden()) { vc->doPopulate=false; vc->save(); vc->close(); } else { // vc = new NotesControl; // QPoint curPos = mapToGlobal( rect().topLeft() ); if(vc->showMax) { qDebug("show max"); vc->showMaximized(); } else { qDebug("no show max"); QWidget *wid = QPEApplication::desktop(); QRect rect = QApplication::desktop()->geometry(); vc->setGeometry( ( wid->width() / 2) - ( vc->width() / 2 ) , 28 , wid->width() -10 , 180); vc->move ( (rect.center()/2) - (vc->rect().center()/2)); // vc->move( (( wid->width() / 2) - ( vc->width() / 2 ))-4, 28); } vc->show(); vc->doPopulate=true; vc->populateBox(); vc->doPopulate=false; vc->loaded=false; vc->load(); // this->setFocus(); vc->view->setFocus(); } } void NotesApplet::paintEvent( QPaintEvent* ) { QPainter p(this); p.drawPixmap( 0, 1, ( const char** ) notes_xpm ); } Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( OTaskbarAppletWrapper<NotesApplet> ); } diff --git a/noncore/applets/wirelessapplet/wireless.cpp b/noncore/applets/wirelessapplet/wireless.cpp index 9ce6618..6ef2e44 100644 --- a/noncore/applets/wirelessapplet/wireless.cpp +++ b/noncore/applets/wirelessapplet/wireless.cpp @@ -1,518 +1,518 @@ /********************************************************************** ** Copyright (C) 2002-2004 Michael 'Mickey' Lauer <mickey@vanille.de> ** ** 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. ** **********************************************************************/ #include "wireless.h" #include "mgraph.h" #include "advancedconfig.h" #include "connect0.xpm" #include "connect1.xpm" #include "connect2.xpm" #include "connect3.xpm" #include "connect4.xpm" #include "connect5.xpm" #include "nowireless.xpm" /* OPIE */ #include <opie2/onetwork.h> #include <opie2/otaskbarapplet.h> #include <qpe/config.h> /* QT */ #include <qradiobutton.h> #include <qpushbutton.h> #include <qpainter.h> #include <qlabel.h> #include <qslider.h> #include <qbuttongroup.h> #include <qlayout.h> #include <qfile.h> #include <qtextstream.h> /* STD */ #include <sys/types.h> #include <signal.h> #define STYLE_BARS 0 #define STYLE_ANTENNA 1 //#define MDEBUG #undef MDEBUG WirelessControl::WirelessControl( WirelessApplet *applet, QWidget *parent, const char *name ) : QFrame( parent, name, WStyle_StaysOnTop | WType_Popup ), applet( applet ) { readConfig(); writeConfigEntry( "UpdateFrequency", updateFrequency ); writeConfigEntry( "DisplayStyle", displayStyle ); setFrameStyle( QFrame::PopupPanel | QFrame::Raised ); QGridLayout *grid = new QGridLayout( this, 3, 2, 6, 2, "top layout" ); /* status label */ statusLabel = new QLabel( this, "statuslabel" ); QString text( "Wireless Status:<br>" "*** Unknown ***<br>" "Card not inserted ?<br>" "Or Sharp ROM ?<br>" "CELL: 00:00:00:00:00:00" ); /* QString text( "Station: Unknown<br>" "ESSID: Unknown<br>" "MODE: Unknown<br>" "FREQ: Unknown<br>" "CELL: AA:BB:CC:DD:EE:FF" ); */ statusLabel->setText( text ); statusLabel->setFixedSize( statusLabel->sizeHint() ); grid->addWidget( statusLabel, 0, 0 ); /* visualization group box */ QButtonGroup* group = new QButtonGroup( 1, Qt::Horizontal, "Visualization", this ); QRadioButton* r1 = new QRadioButton( "Color Bars", group ); QRadioButton* r2 = new QRadioButton( "Antenna", group ); r1->setFocusPolicy( QWidget::NoFocus ); r2->setFocusPolicy( QWidget::NoFocus ); group->setFocusPolicy( QWidget::NoFocus ); group->setButton( displayStyle ); grid->addWidget( group, 0, 1 ); /* quality graph */ mgraph = new MGraph( this ); mgraph->setFrameStyle( QFrame::Panel | QFrame::Sunken ); mgraph->setMin( 0 ); mgraph->setMax( 92 ); grid->addWidget( mgraph, 1, 0 ); mgraph->setFocusPolicy( QWidget::NoFocus ); /* advanced configuration Button */ QPushButton* advanced = new QPushButton( "Advanced...", this ); advanced->setFocusPolicy( QWidget::NoFocus ); grid->addWidget( advanced, 2, 0, Qt::AlignCenter ); connect( advanced, SIGNAL( clicked() ), this, SLOT( advancedConfigClicked() ) ); /* update Frequency Label */ updateLabel = new QLabel( this ); text.sprintf( "Update every %d s", updateFrequency ); updateLabel->setText( text ); grid->addWidget( updateLabel, 2, 1 ); /* update Frequency Slider */ QSlider* updateSlider = new QSlider( QSlider::Horizontal, this ); updateSlider->setRange( 0, 9 ); updateSlider->setValue( updateFrequency ); updateSlider->setTickmarks( QSlider::Both ); updateSlider->setTickInterval( 1 ); updateSlider->setSteps( 1, 1 ); updateSlider->setFocusPolicy( QWidget::NoFocus ); grid->addWidget( updateSlider, 1, 1 ); - connect( updateSlider, SIGNAL( valueChanged( int ) ), - this, SLOT( updateDelayChange( int ) ) ); + connect( updateSlider, SIGNAL( valueChanged(int) ), + this, SLOT( updateDelayChange(int) ) ); setFixedSize( sizeHint() ); setFocusPolicy( QWidget::NoFocus ); applet->displayStyleChange( displayStyle ); applet->updateDelayChange( updateFrequency ); - connect( group, SIGNAL( clicked( int ) ), - this, SLOT( displayStyleChange( int ) ) ); + connect( group, SIGNAL( clicked(int) ), + this, SLOT( displayStyleChange(int) ) ); applet->updateDHCPConfig( rocESSID, rocFREQ, rocAP, rocMODE ); } void WirelessControl::advancedConfigClicked() { AdvancedConfig * a = new AdvancedConfig( this, "dialog", TRUE ); int result = a->exec(); a->hide(); delete a; if ( result == QDialog::Accepted ) { readConfig(); applet->updateDHCPConfig( rocESSID, rocFREQ, rocAP, rocMODE ); } } void WirelessControl::updateDelayChange( int delay ) { QString text; text.sprintf( "Update every %d s", delay ); updateLabel->setText( text ); applet->updateDelayChange( delay ); writeConfigEntry( "UpdateFrequency", delay ); } void WirelessControl::displayStyleChange( int style ) { applet->displayStyleChange( style ); writeConfigEntry( "DisplayStyle", style ); } void WirelessControl::show ( bool ) { QPoint curPos = applet->mapToGlobal( QPoint ( 0, 0 ) ); int w = sizeHint().width(); int x = curPos.x() - ( w / 2 ); if ( ( x + w ) > QPEApplication::desktop() ->width() ) x = QPEApplication::desktop ( ) -> width ( ) - w; move( x, curPos.y () - sizeHint().height () ); QFrame::show(); } void WirelessControl::readConfig() { Config cfg( "qpe" ); cfg.setGroup( "Wireless" ); updateFrequency = cfg.readNumEntry( "UpdateFrequency", 2 ); displayStyle = cfg.readNumEntry( "DisplayStyle", STYLE_ANTENNA ); rocESSID = cfg.readBoolEntry( "renew_dhcp_on_essid_change", false ); rocFREQ = cfg.readBoolEntry( "renew_dhcp_on_freq_change", false ); rocAP = cfg.readBoolEntry( "renew_dhcp_on_ap_change", false ); rocMODE = cfg.readBoolEntry( "renew_dhcp_on_mode_change", false ); } void WirelessControl::writeConfigEntry( const char *entry, int val ) { Config cfg( "qpe" ); cfg.setGroup( "Wireless" ); cfg.writeEntry( entry, val ); } //=========================================================================== WirelessApplet::WirelessApplet( QWidget *parent, const char *name ) : QWidget( parent, name ), visualStyle( STYLE_ANTENNA ), timer( 0 ), interface( 0 ), oldiface( 0 ), rocESSID( false ), rocFREQ( false ), rocAP( false ), rocMODE( false ) { setFixedHeight( 18 ); setFixedWidth( 14 ); status = new WirelessControl( this, this, "wireless status" ); } void WirelessApplet::checkInterface() { interface = 0L; ONetwork* net = ONetwork::instance(); net->synchronize(); ONetwork::InterfaceIterator it = net->iterator(); while ( it.current() && !it.current()->isWireless() ) ++it; if ( it.current() && it.current()->isWireless() ) interface = static_cast<OWirelessNetworkInterface*>( it.current() ); if ( interface ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: using interface '%s'", ( const char* ) interface->name() ); #endif } else { #ifdef MDEBUG qDebug( "WIFIAPPLET: D'oh! No Wireless interface present... :(" ); #endif hide(); } } void WirelessApplet::renewDHCP() { #ifdef MDEBUG qDebug( "WIFIAPPLET: Going to request a DHCP configuration renew." ); #endif QString pidfile; if ( !interface ) return ; QString ifacename( interface->name() ); // At first we are trying dhcpcd pidfile.sprintf( "/var/run/dhcpcd-%s.pid", ( const char* ) ifacename ); #ifdef MDEBUG qDebug( "WIFIAPPLET: dhcpcd pidfile is '%s'", ( const char* ) pidfile ); #endif int pid; QFile pfile( pidfile ); bool hasFile = pfile.open( IO_ReadOnly ); QTextStream s( &pfile ); if ( hasFile ) { s >> pid; #ifdef MDEBUG qDebug( "WIFIAPPLET: sent SIGALARM to pid %d", pid ); #endif kill( pid, SIGALRM ); return ; } // No dhcpcd, so we are trying udhcpc #ifdef MDEBUG qDebug( "WIFIAPPLET: dhcpcd not available." ); #endif pidfile.sprintf( "/var/run/udhcpc.%s.pid", ( const char* ) ifacename ); #ifdef MDEBUG qDebug( "WIFIAPPLET: udhcpc pidfile is '%s'", ( const char* ) pidfile ); #endif QFile pfile2( pidfile ); hasFile = pfile2.open( IO_ReadOnly ); QTextStream s2( &pfile2 ); if ( hasFile ) { s2 >> pid; #ifdef MDEBUG qDebug( "WIFIAPPLET: sent SIGUSR1 to pid %d", pid ); #endif kill( pid, SIGUSR1 ); return ; } } void WirelessApplet::updateDHCPConfig( bool ESSID, bool FREQ, bool AP, bool MODE ) { rocESSID = ESSID; rocFREQ = FREQ; rocAP = AP; rocMODE = MODE; } void WirelessApplet::updateDelayChange( int delay ) { if ( timer ) killTimer( timer ); delay *= 1000; if ( delay == 0 ) delay = 50; timer = startTimer( delay ); } void WirelessApplet::displayStyleChange( int style ) { visualStyle = style; repaint(); } WirelessApplet::~WirelessApplet() {} void WirelessApplet::timerEvent( QTimerEvent* ) { #ifdef MDEBUG qDebug( "WirelessApplet::timerEvent" ); #endif if ( interface ) { if ( !ONetwork::instance()->isPresent( (const char*) interface->name() ) ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: Interface no longer present." ); #endif interface = 0L; mustRepaint(); return; } if ( mustRepaint() ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: A value has changed -> repainting." ); #endif repaint(); } if ( status->isVisible() ) { updatePopupWindow(); } } else { checkInterface(); } } void WirelessApplet::mousePressEvent( QMouseEvent * ) { if ( status->isVisible() ) status->hide(); else status->show( true ); } bool WirelessApplet::mustRepaint() { // check if there are enough changes to justify a (flickering) repaint // has the interface changed? if ( interface != oldiface ) { oldiface = interface; if ( interface ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: We had no interface but now we have one! :-)" ); #endif show(); } else { #ifdef MDEBUG qDebug( "WIFIAPPLET: We had a interface but now we don't have one! ;-(" ); #endif hide(); return true; } } const char** pixmap = getQualityPixmap(); if ( pixmap && ( pixmap != oldpixmap ) ) { oldpixmap = pixmap; return true; } int noiseH = 50; // iface->noisePercent() * ( height() - 3 ) / 100; int signalH = interface->signalStrength() * ( height() - 3 ) / 100; int qualityH = 50; // iface->qualityPercent() * ( height() - 3 ) / 100; if ( ( noiseH != oldnoiseH ) || ( signalH != oldsignalH ) || ( qualityH != oldqualityH ) ) { oldnoiseH = noiseH; oldsignalH = signalH; oldqualityH = qualityH; return true; } if ( rocESSID && ( oldESSID != interface->SSID() ) ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: ESSID has changed." ); #endif renewDHCP(); } else if ( rocFREQ && ( oldFREQ != interface->frequency() ) ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: FREQ has changed." ); #endif renewDHCP(); } else if ( rocAP && ( oldAP != interface->associatedAP().toString() ) ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: AP has changed." ); #endif renewDHCP(); } else if ( rocMODE && ( oldMODE != interface->mode() ) ) { #ifdef MDEBUG qDebug( "WIFIAPPLET: MODE has changed." ); #endif renewDHCP(); } oldESSID = interface->SSID(); oldMODE = interface->mode(); oldFREQ = interface->frequency(); oldAP = interface->associatedAP().toString(); return false; } void WirelessApplet::updatePopupWindow() { int qualityH = interface->signalStrength(); if ( status->mgraph ) status->mgraph->addValue( qualityH, false ); QString freqString; QString cell = ( interface->mode() == "Managed" ) ? "AP: " : "Cell: "; freqString.sprintf( "%.3f GHz", interface->frequency() ); status->statusLabel->setText( "Station: " + interface->nickName() + "<br>" + "ESSID: " + interface->SSID() + "<br>" + "MODE: " + interface->mode() + "<br>" + "FREQ: " + freqString + "<br>" + cell + " " + interface->associatedAP().toString() ); } const char** WirelessApplet::getQualityPixmap() { if ( !interface ) return ( const char** ) nowireless_xpm; int qualityH = interface->signalStrength(); if ( qualityH < 0 ) return ( const char** ) nowireless_xpm; if ( visualStyle == STYLE_ANTENNA ) { if ( qualityH < 1 ) return ( const char** ) connect0_xpm; if ( qualityH < 17 ) return ( const char** ) connect1_xpm; if ( qualityH < 34 ) return ( const char** ) connect2_xpm; if ( qualityH < 50 ) return ( const char** ) connect3_xpm; if ( qualityH < 65 ) return ( const char** ) connect4_xpm; return ( const char** ) connect5_xpm; } return 0; // please draw your bars } void WirelessApplet::paintEvent( QPaintEvent* ) { QPainter p( this ); QColor color; const char** pixmap = getQualityPixmap(); if ( pixmap ) p.drawPixmap( 0, 1, pixmap ); else { int noiseH = 30; // iface->noisePercent() * ( height() - 3 ) / 100; int signalH = 50; // iface->signalPercent() * ( height() - 3 ) / 100; int qualityH = interface->signalStrength(); // iface->qualityPercent() * ( height() - 3 ) / 100; double intensity; int pixelHeight; int pixelWidth = 2; int Hue; int barSpace = 3; int leftoffset = 0; int bottomoffset = 2; // draw noise indicator pixelHeight = noiseH; Hue = 50; for ( int i = 0; i < pixelHeight; ++i ) { intensity = 50 + ( ( double ) i / ( double ) pixelHeight ) * 205; color.setHsv( Hue, 255, intensity ); p.setPen ( color ); p.drawLine( leftoffset, height() - bottomoffset - i, pixelWidth + leftoffset, height() - bottomoffset - i ); diff --git a/noncore/applets/zkbapplet/zkbwidget.cpp b/noncore/applets/zkbapplet/zkbwidget.cpp index 0b5ab78..0083e9b 100644 --- a/noncore/applets/zkbapplet/zkbwidget.cpp +++ b/noncore/applets/zkbapplet/zkbwidget.cpp @@ -1,162 +1,162 @@ #include <opie2/otaskbarapplet.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/applnk.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <stdio.h> #include <unistd.h> #include "zkbwidget.h" #include "zkbcfg.h" ZkbWidget::ZkbWidget(QWidget* parent):QLabel(parent),keymap(0), disabled(Resource::loadPixmap("zkb-disabled")) { labels = new QPopupMenu(); connect(labels, SIGNAL(activated(int)), this, SLOT(labelChanged(int))); loadKeymap(); channel = new QCopChannel("QPE/zkb", this); - connect(channel, SIGNAL(received(const QCString&, const QByteArray&)), - this, SLOT(signalReceived(const QCString&, const QByteArray&))); + connect(channel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT(signalReceived(const QCString&,const QByteArray&))); setFixedWidth ( AppLnk::smallIconSize() ); setFixedHeight ( AppLnk::smallIconSize() ); } ZkbWidget::~ZkbWidget() { } int ZkbWidget::position() { return 8; } bool ZkbWidget::loadKeymap() { ZkbConfig c(QPEApplication::qpeDir()+"/share/zkb"); QFontMetrics fm(font()); if (keymap != 0) { delete keymap; keymap = 0; } Keymap* km = new Keymap(); if (!c.load("zkb.xml", *km, "")) { delete km; setPixmap(disabled); return false; } connect(km, SIGNAL(stateChanged(const QString&)), this, SLOT(stateChanged(const QString&))); qwsServer->setKeyboardFilter(km); Keymap* oldkm = keymap; keymap = km; if (oldkm != 0) { delete oldkm; } setText(keymap->getCurrentLabel()); labels->clear(); QStringList l = keymap->listLabels(); labels->insertItem(disabled, 0, 0); int n = 1; w = 0; for(QStringList::Iterator it = l.begin(); it != l.end(); ++it, n++) { // printf("label: %s\n", (const char*) (*it).utf8()); labels->insertItem(*it, n, n); int lw = fm.width(*it); if (lw > w) { w = lw; } } if (w == 0) { hide(); } else { show(); } return true; } QSize ZkbWidget::sizeHint() const { return QSize(AppLnk::smallIconSize(),AppLnk::smallIconSize()); } void ZkbWidget::stateChanged(const QString& s) { // qDebug("stateChanged: %s\n", (const char*) s.utf8()); setText(s); } void ZkbWidget::labelChanged(int id) { if (id == 0) { keymap->disable(); setPixmap(disabled); return; } keymap->enable(); QStringList l = keymap->listLabels(); QString lbl = l[id-1]; // printf("labelChanged: %s\n", (const char*) lbl.utf8()); State* state = keymap->getStateByLabel(lbl); if (state != 0) { keymap->setCurrentState(state); setText(lbl); } } void ZkbWidget::mouseReleaseEvent(QMouseEvent*) { QSize sh = labels->sizeHint(); QPoint p = mapToGlobal(QPoint((width()-sh.width())/2,-sh.height())); labels->exec(p); } void ZkbWidget::signalReceived(const QCString& msg, const QByteArray& data) { QDataStream stream(data, IO_ReadOnly); if (msg == "enable()") { keymap->enable(); } else if (msg == "disable()") { keymap->disable(); } else if (msg == "reload()") { QCopEnvelope("QPE/System", "busy()"); QTimer::singleShot(0, this, SLOT(reload())); } else if (msg == "switch(QString)") { QString lbl; stream >> lbl; if (keymap != 0) { State* state = keymap->getStateByLabel(lbl); if (state != 0) { keymap->setCurrentState(state); setText(lbl); } } } else if (msg == "debug(QString)") { QString flag; stream >> flag; } } void ZkbWidget::reload() { loadKeymap(); QCopEnvelope("QPE/System", "notBusy()"); } Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( OTaskbarAppletWrapper<ZkbWidget> ); } diff --git a/noncore/apps/advancedfm/advancedfm.cpp b/noncore/apps/advancedfm/advancedfm.cpp index c44d387..2ba3dca 100644 --- a/noncore/apps/advancedfm/advancedfm.cpp +++ b/noncore/apps/advancedfm/advancedfm.cpp @@ -1,437 +1,437 @@ /*************************************************************************** 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. * ***************************************************************************/ #define DEVELOPERS_VERSION #include "advancedfm.h" #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <qpe/mimetype.h> #include <qpe/applnk.h> #include <qpe/resource.h> #include <qpe/menubutton.h> #include <qcombobox.h> #include <qpopupmenu.h> #include <qlistview.h> #include <qmessagebox.h> #include <qlineedit.h> #include <sys/stat.h> #include <time.h> #include <dirent.h> #include <fcntl.h> #include <sys/vfs.h> #include <mntent.h> #ifdef NOQUICKLAUNCH AdvancedFm::AdvancedFm( ) #else AdvancedFm::AdvancedFm(QWidget *,const char*, WFlags ) #endif : QMainWindow( ) { init(); renameBox = 0; unknownXpm = Resource::loadImage( "UnknownDocument" ).smoothScale( AppLnk::smallIconSize(), AppLnk::smallIconSize() ); initConnections(); whichTab=1; rePopulate(); currentPathCombo->setFocus(); channel = new QCopChannel( "QPE/Application/advancedfm", this ); - connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), - this, SLOT( qcopReceive(const QCString&, const QByteArray&)) ); + connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT( qcopReceive(const QCString&,const QByteArray&)) ); } AdvancedFm::~AdvancedFm() { } void AdvancedFm::cleanUp() { QString sfile=QDir::homeDirPath(); if(sfile.right(1) != "/") sfile+="/._temp"; else sfile+="._temp"; QFile file( sfile); if(file.exists()) file.remove(); } void AdvancedFm::tabChanged(QWidget *) { // qWarning("tab changed"); QString path = CurrentDir()->canonicalPath(); currentPathCombo->lineEdit()->setText( path ); if(whichTab == 1) { viewMenu->setItemChecked(viewMenu->idAt(0), true); viewMenu->setItemChecked(viewMenu->idAt(1), false); } else { viewMenu->setItemChecked(viewMenu->idAt(0), false); viewMenu->setItemChecked(viewMenu->idAt(1), true); } QString fs= getFileSystemType( (const QString &) path); setCaption(tr("AdvancedFm :: ")+fs+" :: " +checkDiskSpace( (const QString &) path )+ tr(" kB free") ); chdir( path.latin1()); } void AdvancedFm::populateView() { // qWarning("PopulateView"); QPixmap pm; QListView *thisView = CurrentView(); QDir *thisDir = CurrentDir(); QString path = thisDir->canonicalPath(); //qWarning("path is "+path); thisView->clear(); thisDir->setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); thisDir->setMatchAllDirs(TRUE); thisDir->setNameFilter(filterStr); QString fileL, fileS, fileDate; QString fs= getFileSystemType((const QString &) path); setCaption(tr("AdvancedFm :: ")+fs+" :: " +checkDiskSpace((const QString &) path)+ tr(" kB free") ); bool isDir=FALSE; const QFileInfoList *list = thisDir->entryInfoList( /*QDir::All*/ /*, QDir::SortByMask*/); QFileInfoListIterator it(*list); QFileInfo *fi; while ( (fi=it.current()) ) { if (fi->isSymLink() ) { QString symLink=fi->readLink(); QFileInfo sym( symLink); fileS.sprintf( "%10i", sym.size() ); fileL = fi->fileName() +" -> " + sym.filePath().data(); fileDate = sym.lastModified().toString(); } else { fileS.sprintf( "%10i", fi->size() ); fileL = fi->fileName(); fileDate= fi->lastModified().toString(); if( QDir(QDir::cleanDirPath( path +"/"+fileL)).exists() ) { // if(fileL == "..") fileL += "/"; isDir=TRUE; } } QFileInfo fileInfo( path + "/" + fileL); if(fileL !="./" && fi->exists()) { item = new QListViewItem( thisView, fileL, fileS , fileDate); if(isDir || fileL.find("/",0,TRUE) != -1) { if( !QDir( fi->filePath() ).isReadable()) //is directory pm = Resource::loadPixmap( "lockedfolder" ); else pm= Resource::loadPixmap( "folder" ); } else if ( fs == "vfat" && fileInfo.filePath().contains("/bin") ) { pm = Resource::loadPixmap( "exec"); } else if( (fileInfo.permission( QFileInfo::ExeUser) | fileInfo.permission( QFileInfo::ExeGroup) | fileInfo.permission( QFileInfo::ExeOther)) && fs != "vfat" ) { pm = Resource::loadPixmap( "exec"); } else if( !fi->isReadable() ) { pm = Resource::loadPixmap( "locked" ); } else { //everything else goes by mimetype MimeType mt(fi->filePath()); pm=mt.pixmap(); //sets the correct pixmap for mimetype if(pm.isNull()) { pm = unknownXpm; } } if( fi->isSymLink() || fileL.find("->",0,TRUE) != -1) { // qDebug(" overlay link image"); pm= Resource::loadPixmap( "advancedfm/symlink" ); // pm= Resource::loadPixmap( "folder" ); // QPixmap lnk = Resource::loadPixmap( "opie/symlink" ); // QPainter painter( &pm ); // painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk ); // pm.setMask( pm.createHeuristicMask( FALSE ) ); } item->setPixmap( 0,pm); } isDir=FALSE; ++it; } if( path.find("dev",0,TRUE) != -1) { struct stat buf; dev_t devT; DIR *dir; struct dirent *mydirent; if((dir = opendir( path.latin1())) != NULL) while ((mydirent = readdir(dir)) != NULL) { lstat( mydirent->d_name, &buf); // qDebug(mydirent->d_name); fileL.sprintf("%s", mydirent->d_name); devT = buf.st_dev; fileS.sprintf("%d, %d", (int) ( devT >>8) &0xFF, (int)devT &0xFF); fileDate.sprintf("%s", ctime( &buf.st_mtime)); if( fileL.find(".") == -1 ) { item= new QListViewItem( thisView, fileL, fileS, fileDate); pm = unknownXpm; item->setPixmap( 0,pm); } } closedir(dir); } thisView->setSorting( 3,FALSE); fillCombo( (const QString &) path ); } void AdvancedFm::rePopulate() { populateView(); setOtherTabCurrent(); populateView(); // int tmpTab = whichTab; // // qDebug("%d", tmpTab); // for(int i =1; i < 3; i++) { // TabWidget->setCurrentWidget(i - 1); // populateView(); // } // TabWidget->setCurrentWidget( tmpTab - 1); } void AdvancedFm::ListClicked(QListViewItem *selectedItem) { //qWarning("listclicked"); if(selectedItem) { QString strItem=selectedItem->text(0); // qWarning(strItem); QString strSize=selectedItem->text(1); strSize=strSize.stripWhiteSpace(); bool isDirectory = false; QString strItem2; if(strItem.find("@",0,TRUE) !=-1 || strItem.find("->",0,TRUE) !=-1 ) {//if symlink strItem2 = dealWithSymName((const QString&)strItem); if(QDir(strItem2).exists() ) strItem = strItem2; } if( strItem.find(". .",0,TRUE) && strItem.find("/",0,TRUE)!=-1 ) { if(QDir(strItem).exists()) isDirectory = true; } if( isDirectory ) { CurrentDir()->cd( strItem, TRUE); populateView(); CurrentView()->ensureItemVisible( CurrentView()->firstChild()); } chdir( strItem.latin1()); } } void AdvancedFm::ListPressed( int mouse, QListViewItem *item, const QPoint& , int ) { dealWithSchmooSchmaa( item->listView()); switch (mouse) { case 1: { if(renameBox != 0 ) { cancelRename(); } } break; case 2: menuTimer.start( 500, TRUE ); break; }; } void AdvancedFm::switchToLocalTab() { //qWarning("switch to local view"); TabWidget->setCurrentWidget(0); Local_View->setFocus(); } void AdvancedFm::switchToRemoteTab() { //qWarning("switch to local view"); TabWidget->setCurrentWidget(1); Remote_View->setFocus(); } void AdvancedFm::readConfig() { Config cfg("AdvancedFm"); } void AdvancedFm::writeConfig() { Config cfg("AdvancedFm"); } void AdvancedFm::currentPathComboChanged() { if(QDir( currentPathCombo->lineEdit()->text()).exists()) { CurrentDir()->setPath( currentPathCombo->lineEdit()->text() ); populateView(); } else { QMessageBox::message(tr("Note"),tr("That directory does not exist")); } } void AdvancedFm::fillCombo(const QString ¤tPath) { if ( whichTab == 1) { currentPathCombo->lineEdit()->setText( currentPath); if( localDirPathStringList.grep( currentPath,TRUE).isEmpty() ) { currentPathCombo->clear(); localDirPathStringList.prepend( currentPath ); currentPathCombo->insertStringList( localDirPathStringList,-1); } } else { currentPathCombo->lineEdit()->setText( currentPath); if( remoteDirPathStringList.grep( currentPath,TRUE).isEmpty() ) { currentPathCombo->clear(); remoteDirPathStringList.prepend( currentPath ); currentPathCombo->insertStringList( remoteDirPathStringList,-1); } } } void AdvancedFm::currentPathComboActivated(const QString & currentPath) { chdir( currentPath.latin1() ); CurrentDir()->cd( currentPath, TRUE); populateView(); update(); } QStringList AdvancedFm::getPath() { QStringList strList; QListView *thisView=CurrentView(); QList<QListViewItem> * getSelectedItems( QListView * thisView ); QListViewItemIterator it( thisView ); for ( ; it.current(); ++it ) { if ( it.current()->isSelected() ) { strList << it.current()->text(0); // qDebug(it.current()->text(0)); } } return strList; } void AdvancedFm::homeButtonPushed() { QString current = QDir::homeDirPath(); chdir( current.latin1() ); CurrentDir()->cd( current, TRUE); populateView(); update(); } void AdvancedFm::docButtonPushed() { QString current = QPEApplication::documentDir(); chdir( current.latin1() ); CurrentDir()->cd( current, TRUE); populateView(); update(); } void AdvancedFm::SDButtonPushed() { QString current = "/mnt/card";// this can change so fix chdir( current.latin1() ); CurrentDir()->cd( current, TRUE); populateView(); update(); } void AdvancedFm::CFButtonPushed() { QString current; if(zaurusDevice) current= "/mnt/cf"; //zaurus else current = "/mnt/hda"; //ipaq chdir( current.latin1() ); CurrentDir()->cd( current, TRUE); populateView(); update(); } void AdvancedFm::doAbout() { QMessageBox::message("AdvancedFm",tr("Advanced FileManager\n" "is copyright 2002-2003 by\n" "L.J.Potter<llornkcor@handhelds.org>\n" "and is licensed by the GPL")); } void AdvancedFm::keyPressEvent( QKeyEvent *e) { // qWarning("key %d", e->key()); // if( CurrentView()->hasFocus() ) { switch ( e->key() ) { case Key_Left: upDir(); break; case Key_Next: break; case Key_Return: case Key_Enter: navigateToSelected(); break; case Key_Tab: { setOtherTabCurrent(); } break; case Key_Delete: del(); break; case Key_A: copyAs(); break; case Key_C: copy(); break; case Key_E: runThis(); break; case Key_G: { currentPathCombo->lineEdit()->setFocus(); } break; case Key_H: showHidden(); break; case Key_I: fileStatus(); break; case Key_M: move(); break; case Key_N: mkDir(); break; case Key_P: filePerms(); break; case Key_R: rn(); break; case Key_U: upDir(); break; case Key_1: diff --git a/noncore/apps/advancedfm/advancedfmData.cpp b/noncore/apps/advancedfm/advancedfmData.cpp index 763ae34..f791c77 100644 --- a/noncore/apps/advancedfm/advancedfmData.cpp +++ b/noncore/apps/advancedfm/advancedfmData.cpp @@ -1,286 +1,286 @@ /*************************************************************************** advancedfmData.cpp ------------------- ** Created: Mon 09-23-2002 13:24:11 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 <qpe/storage.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/menubutton.h> #include <qlayout.h> #include <qhbox.h> #include <qmenubar.h> #include <qcombobox.h> #include <qtoolbutton.h> #include <qlineedit.h> #include <qlistview.h> #include <sys/utsname.h> void AdvancedFm::init() { #if defined(QT_QWS_OPIE) qDebug("<<<<<<<<<<<<<<<<<<<<<<<< OPIE!!!"); #endif setCaption( tr( "AdvancedFm" ) ); QVBoxLayout *layout = new QVBoxLayout( this ); layout->setSpacing( 2); layout->setMargin( 2); QMenuBar *menuBar = new QMenuBar(this); fileMenu = new QPopupMenu( this ); viewMenu = new QPopupMenu( this ); // customDirMenu = new QPopupMenu( this ); layout->addWidget( menuBar ); menuBar->insertItem( tr( "File" ), fileMenu); menuBar->insertItem( tr( "View" ), viewMenu); cdUpButton = new QToolButton( 0,"cdUpButton"); cdUpButton->setPixmap(Resource::loadPixmap("up")); cdUpButton->setAutoRaise( true ); menuBar->insertItem( cdUpButton ); QHBox *lineBox = new QHBox( this ); qpeDirButton= new QToolButton( 0,"QPEButton"); qpeDirButton->setPixmap( Resource::loadPixmap("launcher/opielogo16x16"));//,"",this,"QPEButton"); qpeDirButton->setAutoRaise( true ); menuBar->insertItem( qpeDirButton ); cfButton = new QToolButton( 0, "CFButton"); cfButton->setPixmap(Resource::loadPixmap("cardmon/pcmcia")); cfButton->setAutoRaise( true ); menuBar->insertItem( cfButton ); sdButton = new QToolButton( 0, "SDButton"); sdButton->setPixmap(Resource::loadPixmap("advancedfm/sdcard")); sdButton->setAutoRaise( true ); menuBar->insertItem( sdButton ); docButton = new QToolButton( 0,"docsButton"); docButton->setPixmap(Resource::loadPixmap("DocsIcon")); docButton->setAutoRaise( true ); menuBar->insertItem( docButton ); homeButton = new QToolButton( 0, "homeButton"); homeButton->setPixmap(Resource::loadPixmap("home")); homeButton->setAutoRaise( true ); menuBar->insertItem( homeButton ); fileMenu->insertItem( tr( "Show Hidden Files" ), this, SLOT( showMenuHidden() )); fileMenu->setItemChecked( fileMenu->idAt(0),TRUE); fileMenu->insertSeparator(); fileMenu->insertItem( tr( "File Search" ), this, SLOT( openSearch() )); fileMenu->insertSeparator(); fileMenu->insertItem( tr( "Make Directory" ), this, SLOT( mkDir() )); fileMenu->insertItem( tr( "Rename" ), this, SLOT( rn() )); fileMenu->insertItem( tr( "Run Command" ), this, SLOT( runCommandStd() )); fileMenu->insertItem( tr( "Run Command with Output" ), this, SLOT( runCommand() )); fileMenu->insertSeparator(); fileMenu->insertItem( tr( "Make Symlink" ), this, SLOT( mkSym() )); fileMenu->insertItem( tr( "Select All" ), this, SLOT( selectAll() )); fileMenu->insertItem( tr( "Add To Documents" ), this, SLOT( addToDocs() )); fileMenu->insertItem( tr( "Delete" ), this, SLOT( del() )); fileMenu->setCheckable(TRUE); viewMenu->insertItem( tr( "Switch to View 1" ), this, SLOT( switchToLocalTab())); viewMenu->insertItem( tr( "Switch to View 2" ), this, SLOT( switchToRemoteTab())); // viewMenu->insertSeparator(); // viewMenu->insertItem( tr( "About" ), this, SLOT( doAbout() )); viewMenu->setCheckable(true); viewMenu->setItemChecked( viewMenu->idAt(0), true); viewMenu->setItemChecked( viewMenu->idAt(1), false); s_addBookmark = tr("Bookmark Directory"); s_removeBookmark = tr("Remove Current Directory from Bookmarks"); // menuButton->insertItem(""); // customDirMenu->insertItem(tr("Add This Directory")); // customDirMenu->insertItem(tr("Remove This Directory")); // customDirMenu->insertSeparator(); menuButton = new MenuButton( lineBox ); menuButton->setUseLabel(false); menuButton->setMaximumWidth( 20 ); menuButton->insertItem( s_addBookmark); menuButton->insertItem( s_removeBookmark); menuButton->insertSeparator(); menuButton->setFocusPolicy(NoFocus); customDirsToMenu(); currentPathCombo = new QComboBox( FALSE, lineBox, "currentPathCombo" ); currentPathCombo->setEditable(TRUE); currentPathCombo->lineEdit()->setText( currentDir.canonicalPath()); currentPathCombo->setFocusPolicy(NoFocus); layout->addWidget( lineBox ); TabWidget = new OSplitter( Horizontal, this, "TabWidget" ); // TabWidget = new QTabWidget( this, "TabWidget" ); layout->addWidget( TabWidget, 4 ); tab = new QWidget( TabWidget, "tab" ); tabLayout = new QGridLayout( tab ); tabLayout->setSpacing( 2); tabLayout->setMargin( 2); Local_View = new QListView( tab, "Local_View" ); Local_View->addColumn( tr("File"),130); Local_View->addColumn( tr("Size"),-1); Local_View->setColumnAlignment(1,QListView::AlignRight); Local_View->addColumn( tr("Date"),-1); Local_View->setColumnAlignment(2,QListView::AlignRight); Local_View->setAllColumnsShowFocus(TRUE); Local_View->setMultiSelection( TRUE ); Local_View->setSelectionMode(QListView::Extended); Local_View->setFocusPolicy(StrongFocus); Local_View->installEventFilter( this ); QPEApplication::setStylusOperation( Local_View->viewport(),QPEApplication::RightOnHold); tabLayout->addWidget( Local_View, 0, 0 ); TabWidget->addWidget( tab,"advancedfm/smFileBrowser.png", tr("1")); // TabWidget->insertTab( tab, tr("1")); tab_2 = new QWidget( TabWidget, "tab_2" ); tabLayout_2 = new QGridLayout( tab_2 ); tabLayout_2->setSpacing( 2); tabLayout_2->setMargin( 2); Remote_View = new QListView( tab_2, "Remote_View" ); Remote_View->addColumn( tr("File"),130); Remote_View->addColumn( tr("Size"),-1); Remote_View->setColumnAlignment(1,QListView::AlignRight); Remote_View->addColumn( tr("Date"),-1); Remote_View->setColumnAlignment(2,QListView::AlignRight); Remote_View->setAllColumnsShowFocus(TRUE); Remote_View->setMultiSelection( TRUE ); Remote_View->setSelectionMode(QListView::Extended); Remote_View->setFocusPolicy(StrongFocus); Remote_View->installEventFilter( this ); QPEApplication::setStylusOperation( Remote_View->viewport(),QPEApplication::RightOnHold); tabLayout_2->addWidget( Remote_View, 0, 0 ); TabWidget->addWidget( tab_2, "advancedfm/smFileBrowser.png",tr( "2")); TabWidget->setSizeChange( 370 ); // TabWidget->insertTab( tab_2, tr( "2")); /* tab_3 = new QWidget( TabWidget, "tab_3" ); tabLayout_3 = new QGridLayout( tab_3 ); tabLayout_3->setSpacing( 2); tabLayout_3->setMargin( 2); // OFileDialog fileDialog; // fileDialog; // fileSelector = new FileSelector( "*",tab_3, "fileselector" , FALSE, FALSE); //buggy // fileDialog = new OFileDialog("bangalow", tab_3, 4, 2, "Bungalow"); // OFileSelector fileDialog = new OFileSelector( tab_3, 4, 2,"/"); QListView *fileTree; fileTree = new QListView( tab_3, "tree" ); tabLayout_3->addMultiCellWidget( fileTree, 0, 0, 0, 3 ); TabWidget->insertTab( tab_3, tr( "Remote" ) ); */ /////////////// if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" )) zaurusDevice=TRUE; else zaurusDevice=FALSE; if( !StorageInfo::hasSd() || !StorageInfo::hasMmc()) { qDebug("not have sd"); sdButton->hide(); } if( !StorageInfo::hasCf() ) { qDebug("not have cf"); cfButton->hide(); } currentDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All); currentDir.setPath( QDir::currentDirPath()); currentRemoteDir.setFilter( QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All); currentRemoteDir.setPath( QDir::currentDirPath()); // b = TRUE; filterStr="*"; b=FALSE; showMenuHidden(); TabWidget->setCurrentWidget(0); } void AdvancedFm::initConnections() { connect( qApp,SIGNAL( aboutToQuit()), this, SLOT( cleanUp()) ); connect( qpeDirButton ,SIGNAL(released()), this,SLOT( QPEButtonPushed()) ); connect( cfButton ,SIGNAL(released()), this,SLOT( CFButtonPushed()) ); connect( sdButton ,SIGNAL(released()), this,SLOT( SDButtonPushed()) ); connect( cdUpButton ,SIGNAL(released()), this,SLOT( upDir()) ); connect( docButton,SIGNAL(released()), this,SLOT( docButtonPushed()) ); connect( homeButton,SIGNAL(released()), this,SLOT( homeButtonPushed()) ); - connect( currentPathCombo, SIGNAL( activated( const QString & ) ), - this, SLOT( currentPathComboActivated( const QString & ) ) ); + connect( currentPathCombo, SIGNAL( activated(const QString&) ), + this, SLOT( currentPathComboActivated(const QString&) ) ); connect( currentPathCombo->lineEdit(),SIGNAL(returnPressed()), this,SLOT(currentPathComboChanged())); - connect( Local_View, SIGNAL( clicked( QListViewItem*)), - this,SLOT( ListClicked(QListViewItem *)) ); + connect( Local_View, SIGNAL( clicked(QListViewItem*)), + this,SLOT( ListClicked(QListViewItem*)) ); - connect( Local_View, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), - this,SLOT( ListPressed(int, QListViewItem *, const QPoint&, int)) ); + connect( Local_View, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int)), + this,SLOT( ListPressed(int,QListViewItem*,const QPoint&,int)) ); connect( Local_View, SIGNAL( selectionChanged() ), SLOT( cancelMenuTimer() ) ); - connect( Remote_View, SIGNAL( clicked( QListViewItem*)), - this,SLOT( ListClicked(QListViewItem *)) ); - connect( Remote_View, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), - this,SLOT( ListPressed(int, QListViewItem *, const QPoint&, int)) ); + connect( Remote_View, SIGNAL( clicked(QListViewItem*)), + this,SLOT( ListClicked(QListViewItem*)) ); + connect( Remote_View, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int)), + this,SLOT( ListPressed(int,QListViewItem*,const QPoint&,int)) ); - connect( TabWidget,SIGNAL(currentChanged(QWidget *)), + connect( TabWidget,SIGNAL(currentChanged(QWidget*)), this,SLOT(tabChanged(QWidget*))); connect( &menuTimer, SIGNAL( timeout() ), SLOT( showFileMenu() ) ); - connect( menuButton, SIGNAL( selected(const QString &)), SLOT(gotoCustomDir(const QString&))); -// connect( menuButton, SIGNAL( selected( int)), SLOT( dirMenuSelected(int))); - connect( viewMenu, SIGNAL( activated(int )), this, SLOT(slotSwitchMenu(int ))); + connect( menuButton, SIGNAL( selected(const QString&)), SLOT(gotoCustomDir(const QString&))); +// connect( menuButton, SIGNAL( selected(int)), SLOT( dirMenuSelected(int))); + connect( viewMenu, SIGNAL( activated(int)), this, SLOT(slotSwitchMenu(int))); // connect( customDirMenu, SIGNAL( activated(int)), this, SLOT( dirMenuSelected(int))); } diff --git a/noncore/apps/advancedfm/advancedfmMenu.cpp b/noncore/apps/advancedfm/advancedfmMenu.cpp index 9ad1146..9e740d0 100644 --- a/noncore/apps/advancedfm/advancedfmMenu.cpp +++ b/noncore/apps/advancedfm/advancedfmMenu.cpp @@ -300,537 +300,537 @@ void AdvancedFm::copy() { 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 * )));
+ 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(processExited(OProcess*)),
+ this, SLOT( processEnded(OProcess*)));
- connect(process, SIGNAL( receivedStderr(OProcess *, char *, int)),
- this, SLOT( oprocessStderr(OProcess *, char *, int)));
+ 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/advancedfm/output.cpp b/noncore/apps/advancedfm/output.cpp index 7dc2416..0bba1d8 100644 --- a/noncore/apps/advancedfm/output.cpp +++ b/noncore/apps/advancedfm/output.cpp @@ -1,276 +1,276 @@ /**************************************************************************** ** outputEdit.cpp ** ** Copyright: Fri Apr 12 15:12:58 2002 L.J. Potter <ljp@llornkcor.com> ****************************************************************************/ #include "output.h" #include <qpe/qpeapplication.h> #include <qpe/applnk.h> #include <qfile.h> #include <qmultilineedit.h> #include <qpushbutton.h> #include <qlayout.h> #include <errno.h> /* XPM */ static char * filesave_xpm[] = { "16 16 78 1", " c None", ". c #343434", "+ c #A0A0A0", "@ c #565656", "# c #9E9E9E", "$ c #525252", "% c #929292", "& c #676767", "* c #848484", "= c #666666", "- c #D8D8D8", "; c #FFFFFF", "> c #DBDBDB", ", c #636363", "' c #989898", ") c #2D2D2D", "! c #909090", "~ c #AEAEAE", "{ c #EAEAEA", "] c #575757", "^ c #585858", "/ c #8A8A8A", "( c #828282", "_ c #6F6F6F", ": c #C9C9C9", "< c #050505", "[ c #292929", "} c #777777", "| c #616161", "1 c #3A3A3A", "2 c #BEBEBE", "3 c #2C2C2C", "4 c #7C7C7C", "5 c #F6F6F6", "6 c #FCFCFC", "7 c #6B6B6B", "8 c #959595", "9 c #4F4F4F", "0 c #808080", "a c #767676", "b c #818181", "c c #B8B8B8", "d c #FBFBFB", "e c #F9F9F9", "f c #CCCCCC", "g c #030303", "h c #737373", "i c #7A7A7A", "j c #7E7E7E", "k c #6A6A6A", "l c #FAFAFA", "m c #505050", "n c #9D9D9D", "o c #333333", "p c #7B7B7B", "q c #787878", "r c #696969", "s c #494949", "t c #555555", "u c #949494", "v c #E6E6E6", "w c #424242", "x c #515151", "y c #535353", "z c #3E3E3E", "A c #D4D4D4", "B c #0C0C0C", "C c #353535", "D c #474747", "E c #ECECEC", "F c #919191", "G c #7D7D7D", "H c #000000", "I c #404040", "J c #858585", "K c #323232", "L c #D0D0D0", "M c #1C1C1C", " ...+ ", " @#$%&..+ ", " .*=-;;>,..+ ", " ')!~;;;;;;{]..", " ^/(-;;;;;;;_:<", " [}|;;;;;;;{12$", " #34-55;;;;678$+", " 90ab=c;dd;e1fg ", " [ahij((kbl0mn$ ", " op^q^^7r&]s/$+ ", "@btu;vbwxy]zAB ", "CzDEvEv;;DssF$ ", "G.H{E{E{IxsJ$+ ", " +...vEKxzLM ", " +...z]n$ ", " +... "}; Output::Output( const QStringList commands, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog( parent, name, modal, fl ) { QStringList cmmds; // cmmds=QStringList::split( " ", commands, false); cmmds=commands; // qDebug("count %d", cmmds.count()); if ( !name ) setName( tr("Output")); resize( 196, 269 ); setCaption( name ); OutputLayout = new QGridLayout( this ); OutputLayout->setSpacing( 2); OutputLayout->setMargin( 2); QPushButton *docButton; docButton = new QPushButton( QPixmap(( const char** ) filesave_xpm ) ,"",this,"saveButton"); docButton->setFixedSize( QSize( 20, 20 ) ); connect( docButton,SIGNAL(released()),this,SLOT( saveOutput() )); // docButton->setFlat(TRUE); OutputLayout->addMultiCellWidget( docButton, 0,0,3,3 ); OutputEdit = new QMultiLineEdit( this, "OutputEdit" ); OutputLayout->addMultiCellWidget( OutputEdit, 1,1,0,3 ); proc = new OProcess(); - connect(proc, SIGNAL(processExited(OProcess *)), + connect(proc, SIGNAL(processExited(OProcess*)), this, SLOT( processFinished())); - connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), - this, SLOT(commandStdout(OProcess *, char *, int))); + connect(proc, SIGNAL(receivedStdout(OProcess*,char*,int)), + this, SLOT(commandStdout(OProcess*,char*,int))); - connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)), - this, SLOT(commandStderr(OProcess *, char *, int))); + connect(proc, SIGNAL(receivedStderr(OProcess*,char*,int)), + this, SLOT(commandStderr(OProcess*,char*,int))); -// connect( , SIGNAL(received(const QByteArray &)), -// this, SLOT(commandStdin(const QByteArray &))); +// connect( , SIGNAL(received(const QByteArray&)), +// this, SLOT(commandStdin(const QByteArray&))); // * proc << commands.latin1(); for ( QStringList::Iterator it = cmmds.begin(); it != cmmds.end(); ++it ) { qDebug( "%s", (*it).latin1() ); * proc << (*it).latin1(); } if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) { OutputEdit->append(tr("Process could not start") ); OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); perror("Error: "); QString errorMsg=tr("Error\n")+(QString)strerror(errno); OutputEdit->append( errorMsg); OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); } } Output::~Output() { } void Output::saveOutput() { InputDialog *fileDlg; fileDlg = new InputDialog(this,tr("Save output to file (name only)"),TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { QString filename = QPEApplication::documentDir(); if(filename.right(1).find('/') == -1) filename+="/"; QString name = fileDlg->LineEdit1->text(); filename+="text/plain/"+name; qDebug(filename); QFile f(filename); f.open( IO_WriteOnly); if( f.writeBlock( OutputEdit->text(), qstrlen( OutputEdit->text()) ) != -1) { DocLnk lnk; lnk.setName(name); //sets file name lnk.setFile(filename); //sets File property lnk.setType("text/plain"); if(!lnk.writeLink()) { qDebug("Writing doclink did not work"); } } else qWarning("Could not write file"); f.close(); } } void Output::commandStdout(OProcess*, char *buffer, int buflen) { qWarning("received stdout %d bytes", buflen); // QByteArray data(buflen); // data.fill(*buffer, buflen); // for (uint i = 0; i < data.count(); i++ ) { // printf("%c", buffer[i] ); // } // printf("\n"); QString lineStr = buffer; lineStr=lineStr.left(lineStr.length()-1); OutputEdit->append(lineStr); OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); } void Output::commandStdin( const QByteArray &data) { qWarning("received stdin %d bytes", data.size()); // recieved data from the io layer goes to sz proc->writeStdin(data.data(), data.size()); } void Output::commandStderr(OProcess*, char *buffer, int buflen) { qWarning("received stderrt %d bytes", buflen); QString lineStr = buffer; // lineStr=lineStr.left(lineStr.length()-1); OutputEdit->append(lineStr); OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); } void Output::processFinished() { delete proc; OutputEdit->append( tr("\nFinished\n") ); OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); // close(); -// disconnect( layer(), SIGNAL(received(const QByteArray &)), -// this, SLOT(commandStdin(const QByteArray &))); +// disconnect( layer(), SIGNAL(received(const QByteArray&)), +// this, SLOT(commandStdin(const QByteArray&))); } //============================== InputDialog::InputDialog( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { if ( !name ) setName( "InputDialog" ); resize( 234, 50 ); setMaximumSize( QSize( 240, 50 ) ); setCaption( tr(name ) ); LineEdit1 = new QLineEdit( this, "LineEdit1" ); LineEdit1->setGeometry( QRect( 10, 10, 216, 22 ) ); LineEdit1->setFocus(); LineEdit1->setFocus(); connect(LineEdit1,SIGNAL(returnPressed()),this,SLOT(returned() )); } InputDialog::~InputDialog() { inputText = LineEdit1->text(); } void InputDialog::setInputText(const QString &string) { LineEdit1->setText( string); } void InputDialog::returned() { inputText = LineEdit1->text(); this->accept(); } diff --git a/noncore/apps/checkbook/checkbook.cpp b/noncore/apps/checkbook/checkbook.cpp index 26b2533..1b933f2 100644 --- a/noncore/apps/checkbook/checkbook.cpp +++ b/noncore/apps/checkbook/checkbook.cpp @@ -1,628 +1,628 @@ /* 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 "cfg.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 *) ) ); + 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 & ) ) ); + 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 & ) ) ); + 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 & ) ) ); + 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 * ) ), + 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 ); 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 ); 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(); diff --git a/noncore/apps/checkbook/listedit.cpp b/noncore/apps/checkbook/listedit.cpp index 37f05f0..d00e305 100644 --- a/noncore/apps/checkbook/listedit.cpp +++ b/noncore/apps/checkbook/listedit.cpp @@ -1,344 +1,344 @@ /* 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 "listedit.h" #include <qlayout.h> #include <qlineedit.h> #include <qlistview.h> #include <qwidgetstack.h> #include <qcombobox.h> #include <qpushbutton.h> #include <qpe/resource.h> // --- ListEdit --------------------------------------------------------------- ListEdit::ListEdit( QWidget *parent, const char *sName ) : QWidget(parent, sName), TableDef(sName) { // get font height int fh = fontMetrics().height(); // create layout QGridLayout *layout=new QGridLayout(this); layout->setSpacing( 2 ); layout->setMargin( 4 ); // type table _typeTable = new QListView( this ); ColumnDef *def=first(); while( def ) { _typeTable->addColumn( def->getName() ); def=next(); } - connect( _typeTable, SIGNAL( clicked(QListViewItem *, const QPoint &, int) ), this, SLOT( slotClick(QListViewItem *, const QPoint &, int ) ) ); + connect( _typeTable, SIGNAL( clicked(QListViewItem*,const QPoint&,int) ), this, SLOT( slotClick(QListViewItem*,const QPoint&,int) ) ); layout->addMultiCellWidget(_typeTable, 0,4,0,4); _currentItem=NULL; // edit field _stack=new QWidgetStack( this ); _stack->setMaximumHeight(fh+5); layout->addMultiCellWidget(_stack, 5,5,0,2); _typeEdit = new QLineEdit( _stack ); _stack->raiseWidget(_typeEdit ); - connect( _typeEdit, SIGNAL( textChanged(const QString &) ), this, SLOT( slotEditChanged(const QString &) ) ); + connect( _typeEdit, SIGNAL( textChanged(const QString&) ), this, SLOT( slotEditChanged(const QString&) ) ); // combo box _box=new QComboBox( _stack ); - connect( _box, SIGNAL( activated(const QString &) ), this, SLOT( slotActivated(const QString &) ) ); + connect( _box, SIGNAL( activated(const QString&) ), this, SLOT( slotActivated(const QString&) ) ); // add button QPushButton *btn = new QPushButton( Resource::loadPixmap( "checkbook/add" ), tr( "Add" ), this ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotAdd() ) ); layout->addWidget( btn, 5, 3 ); // delete button btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), this ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotDel() ) ); layout->addWidget( btn, 5, 4 ); } // --- ~ListEdit -------------------------------------------------------------- ListEdit::~ListEdit() { } // --- slotEditTypeChanged ---------------------------------------------------- void ListEdit::slotEditChanged(const QString &str) { if( !_currentItem || _currentColumn<0 ) return; _currentItem->setText(_currentColumn, str); } // --- slotAddType ------------------------------------------------------------ void ListEdit::slotAdd() { // construct new row QString args[8]; ColumnDef *pCol=this->first(); int i=0; while( pCol && i<8 ) { args[i++]=pCol->getNewValue(); pCol=this->next(); } _currentItem=new QListViewItem(_typeTable, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7] ); // fix uniques fixTypes(); // display col 0 of new value QPoint pnt; slotClick(_currentItem, pnt, 0); _typeTable->setSelected( _currentItem, true ); // make it selected _typeEdit->setCursorPosition(0); _typeEdit->setSelection(0, _typeEdit->text().length() ); } // --- slotDel ------------------------------------------------------------- void ListEdit::slotDel() { if( !_currentItem ) return; delete _currentItem; _currentItem=NULL; _typeEdit->setText(""); _stack->raiseWidget(_typeEdit); } // --- fixTypes ---------------------------------------------------------------- // Makes sure all entries have a unique name and empty entries are replaced // by a generic string. The first version performs the operation on a particular // column, whereas the 2nd does it for all unique columns. class ColMap { public: ColMap(QString sValue, QListViewItem *pEntry) { _sValue=sValue; _pEntry=pEntry; } QString &getValue() { return(_sValue); } QListViewItem *getItem() { return(_pEntry); } protected: QString _sValue; QListViewItem *_pEntry; }; class ColList : public QList<QString> { public: ColList() : QList<QString>() { } protected: int compareItems(QCollection::Item, QCollection::Item); }; int ColList::compareItems(QCollection::Item i1, QCollection::Item i2) { return( ((QString *)i1)->compare(*(QString *)i2) ); } void ListEdit::fixTypes(int iColumn) { // get column def ColumnDef *pDef=this->at(iColumn); // create map of entries if( !_typeTable->childCount() ) return; ColMap **colMap=new (ColMap *)[_typeTable->childCount()]; QListViewItem *cur=_typeTable->firstChild(); ColList lst; for(int i=0; i<_typeTable->childCount(); i++) { colMap[i]=new ColMap(cur->text(iColumn), cur); lst.append( &(colMap[i]->getValue()) ); cur=cur->nextSibling(); } // fix empty entries int i=0; for(QString *ptr=lst.first(); ptr; ptr=lst.next()) { *ptr=ptr->stripWhiteSpace(); if( ptr->isEmpty() ) { i++; if( i==1 ) *ptr=pDef->getNewValue(); else ptr->sprintf("%s %d", (const char *)pDef->getNewValue(), i); } } // fix dups lst.sort(); QString repl; for(uint iCur=0; iCur<lst.count()-1; iCur++) { QString *current=lst.at(iCur); for(uint iNext=iCur+1; iNext<lst.count(); iNext++ ) { if( *current!=*lst.at(iNext) ) continue; for(int i=2; ; i++) { repl.sprintf("%s %d", (const char *)*current, i); bool bDup=false; uint iChk=iNext+1; while( iChk<lst.count() ) { QString *chk=lst.at(iChk); if( !chk->startsWith(*current) ) break; if( *chk==repl ) { bDup=true; break; } iChk++; } if( !bDup ) { *lst.at(iNext)=repl; break; } } } } lst.sort(); // copy back clean up col map for(int i=0; i<_typeTable->childCount(); i++) { colMap[i]->getItem()->setText(iColumn, colMap[i]->getValue()); delete colMap[i]; } delete colMap; } void ListEdit::fixTypes() { int i; ColumnDef *pDef; for(pDef=this->first(), i=0; pDef; pDef=this->next(), i++) { if( pDef->hasFlag(ColumnDef::typeUnique) ) fixTypes(i); } _typeTable->sort(); } // --- storeInList ------------------------------------------------------------ void ListEdit::storeInList(QStringList &lst) { // delete old content lst.clear(); // add new one fixTypes(); QListViewItem *itm=_typeTable->firstChild(); while( itm ) { int i=0; QString sAdd; ColumnDef *pDef; for(pDef=this->first(), i=0; pDef; pDef=this->next(), i++) { if( i>=1 ) sAdd+=";"; sAdd += itm->text(i); } lst.append( sAdd ); itm=itm->nextSibling(); } } // --- slotClicked ------------------------------------------------------------ void ListEdit::slotClick(QListViewItem *itm, const QPoint &pnt, int col) { (void)pnt; // get rid of unused warning; // save values _currentItem=itm; _currentColumn=col; if( itm==NULL ) { _typeEdit->setText(""); _stack->raiseWidget(_typeEdit); return; } // display value if( _currentColumn<0 ) _currentColumn=0; ColumnDef *pDef=this->at(_currentColumn); if( pDef->isType(ColumnDef::typeString) ) { _typeEdit->setText( _currentItem->text(_currentColumn) ); _stack->raiseWidget(_typeEdit); } else if( pDef->isType(ColumnDef::typeList) ){ _box->clear(); _box->insertStringList( pDef->getValueList() ); QStringList::Iterator itr; int i=0; for(itr=pDef->getValueList().begin(); itr!=pDef->getValueList().end(); itr++) { if( (*itr)==_currentItem->text(_currentColumn) ) { _box->setCurrentItem(i); i=-1; break; } i++; } if( i>=0 ) { _box->insertItem( _currentItem->text(_currentColumn) ); _box->setCurrentItem(i); } _stack->raiseWidget(_box); } else { qDebug( "Unsupported column type for column %s", (const char *)pDef->getName() ); _typeEdit->setText(""); _stack->raiseWidget(_typeEdit); } } // --- addColumnDef ----------------------------------------------------------- void ListEdit::addColumnDef(ColumnDef *pDef) { _typeTable->addColumn( pDef->getName() ); _vColumns.append(pDef); } // --- addData ---------------------------------------------------------------- void ListEdit::addData(QStringList &lst) { // run through list QStringList::Iterator itr; for(itr=lst.begin(); itr!=lst.end(); itr++) { QStringList split=QStringList::split(";", *itr, true); QStringList::Iterator entry; QString args[8]; int i=0; for(entry=split.begin(); entry!=split.end() && i<8; entry++, i++) { args[i]= (*entry); } while(i<8) { args[i++]=""; } new QListViewItem(_typeTable, args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]); } } // --- slotActivated ---------------------------------------------------------- void ListEdit::slotActivated(const QString &str) { if( _currentItem==NULL || _currentColumn<0 ) return; _currentItem->setText(_currentColumn, str); } diff --git a/noncore/apps/checkbook/mainwindow.cpp b/noncore/apps/checkbook/mainwindow.cpp index d0fac3b..254ce6a 100644 --- a/noncore/apps/checkbook/mainwindow.cpp +++ b/noncore/apps/checkbook/mainwindow.cpp @@ -1,358 +1,358 @@ /* 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 <qpe/config.h> #include <qpe/qpeapplication.h> #include <qpe/qpemessagebox.h> #include <qpe/qpetoolbar.h> #include <qpe/resource.h> #include <qmenubar.h> #include <qaction.h> #include <qdir.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 ) ), + 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 ); 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 ); 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 ); 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/checkbook/password.cpp b/noncore/apps/checkbook/password.cpp index f381271..89a6bc6 100644 --- a/noncore/apps/checkbook/password.cpp +++ b/noncore/apps/checkbook/password.cpp @@ -1,97 +1,97 @@ /* 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 "password.h" #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include <qpushbutton.h> static const char* const showhideimage_data[] = { "16 16 2 1", ". c None", "# c #000000", "................", "...#...###...##.", "..#.#..#..#.##..", "..###..###.##...", ".#...#.#..##....", ".#...#.#.##.....", "........##.#..#.", "..##...##...##..", ".#..#.###...##..", ".#...##..#.#..#.", ".#..##..........", ".#.##.#..#.#..#.", "..##...##...##..", ".##....##...##..", ".#....#..#.#..#.", "................"}; Password::Password( QWidget *parent, const char *caption, const char *prompt ) : QDialog( parent, 0x0, TRUE, 0x0 ) { setCaption( caption ); QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 2 ); layout->setMargin( 4 ); QLabel *label = new QLabel( prompt, this ); label->setAlignment( AlignLeft | AlignTop | WordBreak ); layout->addMultiCellWidget( label, 0, 0, 0, 1 ); pw = new QLineEdit( this ); pw->setEchoMode( QLineEdit::Password ); layout->addWidget( pw, 1, 0 ); QPixmap *pic = new QPixmap( ( const char** ) showhideimage_data ); QPushButton *btn = new QPushButton( ( QIconSet ) *pic, QString::null, this ); btn->setMaximumSize( pic->width() + 10, pic->height() + 10 ); btn->setToggleButton( TRUE ); - connect( btn, SIGNAL( toggled( bool ) ), this, SLOT( slotTogglePassword( bool ) ) ); + connect( btn, SIGNAL( toggled(bool) ), this, SLOT( slotTogglePassword(bool) ) ); layout->addWidget( btn, 1, 1 ); password == ""; } Password::~Password() { } void Password::accept() { password = pw->text(); QDialog::accept(); } void Password::slotTogglePassword( bool showPW ) { showPW ? pw->setEchoMode( QLineEdit::Normal ) : pw->setEchoMode( QLineEdit::Password ); } diff --git a/noncore/apps/checkbook/transaction.cpp b/noncore/apps/checkbook/transaction.cpp index a72a48b..1b08b24 100644 --- a/noncore/apps/checkbook/transaction.cpp +++ b/noncore/apps/checkbook/transaction.cpp @@ -1,337 +1,337 @@ /* 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 "transaction.h" #include "traninfo.h" #include "cfg.h" #include "checkbook.h" #include <qpe/datebookmonth.h> #include <qbuttongroup.h> #include <qcombobox.h> #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include <qmultilineedit.h> #include <qradiobutton.h> #include <qwhatsthis.h> Transaction::Transaction( QWidget *parent, bool bNew, const QString &acctname, TranInfo *info, Cfg *pCfg ) : QDialog( parent, 0, TRUE, WStyle_ContextHelp ) { QString tempstr = tr( "Transaction for " ); tempstr.append( acctname ); setCaption( tempstr ); _bNew=bNew; tran = info; _pCfg=pCfg; QVBoxLayout *vb = new QVBoxLayout( this ); QScrollView *sv = new QScrollView( this ); 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 ); // Withdrawal/Deposit QButtonGroup *btngrp = new QButtonGroup( container ); btngrp->setColumnLayout(0, Qt::Vertical ); btngrp->layout()->setSpacing( 0 ); btngrp->layout()->setMargin( 0 ); btngrp->setMaximumWidth( 220 ); QGridLayout *layout2 = new QGridLayout( btngrp->layout() ); layout2->setSpacing( 2 ); layout2->setMargin( 2 ); withBtn = new QRadioButton( tr( "Withdrawal" ), btngrp ); QWhatsThis::add( withBtn, tr( "Select whether the transaction is a withdrawal or deposit here." ) ); layout2->addWidget( withBtn, 0, 0 ); connect( withBtn, SIGNAL( clicked() ), this, SLOT( slotWithdrawalClicked() ) ); depBtn = new QRadioButton( tr( "Deposit" ), btngrp ); QWhatsThis::add( depBtn, tr( "Select whether the transaction is a withdrawal or deposit here." ) ); layout2->addWidget( depBtn, 0, 1 ); btngrp->setMaximumSize( 320, withBtn->height() ); connect( depBtn, SIGNAL( clicked() ), this, SLOT( slotDepositClicked() ) ); layout->addMultiCellWidget( btngrp, 0, 0, 0, 3 ); // Date QLabel *label = new QLabel( tr( "Date:" ), container ); QWhatsThis::add( label, tr( "Select date of transaction here." ) ); layout->addWidget( label, 1, 0 ); dateBtn = new QPushButton( TimeString::shortDate( QDate::currentDate() ), container ); QWhatsThis::add( dateBtn, tr( "Select date of transaction here." ) ); QPopupMenu *m1 = new QPopupMenu( container ); datePicker = new DateBookMonth( m1, 0, TRUE ); m1->insertItem( datePicker ); dateBtn->setPopup( m1 ); - connect( datePicker, SIGNAL( dateClicked( int, int, int ) ), - this, SLOT( slotDateChanged( int, int, int ) ) ); + connect( datePicker, SIGNAL( dateClicked(int,int,int) ), + this, SLOT( slotDateChanged(int,int,int) ) ); layout->addWidget( dateBtn, 1, 1 ); // Check number label = new QLabel( tr( "Number:" ), container ); QWhatsThis::add( label, tr( "Enter check number here." ) ); layout->addWidget( label, 1, 2 ); numEdit = new QLineEdit( container ); QWhatsThis::add( numEdit, tr( "Enter check number here." ) ); numEdit->setMaximumWidth( 40 ); layout->addWidget( numEdit, 1, 3 ); // Description label = new QLabel( tr( "Description:" ), container ); QWhatsThis::add( label, tr( "Enter description of transaction here." ) ); layout->addWidget( label, 2, 0 ); _cbDesc=new QComboBox( true, container ); _cbDesc->insertStringList( _pCfg->getPayees() ); QWhatsThis::add( _cbDesc, tr( "Enter description of transaction here." ) ); layout->addMultiCellWidget( _cbDesc, 2, 2, 1, 3 ); - connect( _cbDesc, SIGNAL( activated(const QString &) ), this, SLOT( slotActivated(const QString &) ) ); + connect( _cbDesc, SIGNAL( activated(const QString&) ), this, SLOT( slotActivated(const QString&) ) ); // Category label = new QLabel( tr( "Category:" ), container ); QWhatsThis::add( label, tr( "Select transaction category here." ) ); layout->addWidget( label, 3, 0 ); catList = new QComboBox( container ); QWhatsThis::add( catList, tr( "Select transaction category here." ) ); layout->addMultiCellWidget( catList, 3, 3, 1, 3 ); // Type label = new QLabel( tr( "Type:" ), container ); QWhatsThis::add( label, tr( "Select transaction type here.\n\nThe options available vary based on whether the transaction is a deposit or withdrawal." ) ); layout->addWidget( label, 4, 0 ); typeList = new QComboBox( container ); QWhatsThis::add( typeList, tr( "Select transaction type here.\n\nThe options available vary based on whether the transaction is a deposit or withdrawal." ) ); layout->addMultiCellWidget( typeList, 4, 4, 1, 3 ); // Amount label = new QLabel( tr( "Amount:" ), container ); QWhatsThis::add( label, tr( "Enter the amount of transaction here.\n\nThe value entered should always be positive." ) ); layout->addWidget( label, 5, 0 ); amtEdit = new QLineEdit( container ); QWhatsThis::add( amtEdit, tr( "Enter the amount of transaction here.\n\nThe value entered should always be positive." ) ); layout->addMultiCellWidget( amtEdit, 5, 5, 1, 3 ); // Fee label = new QLabel( tr( "Fee:" ), container ); QWhatsThis::add( label, tr( "Enter any fee amount assoiciated with this transaction.\n\nThe value entered should always be positive." ) ); layout->addWidget( label, 6, 0 ); feeEdit = new QLineEdit( container ); QWhatsThis::add( feeEdit, tr( "Enter any fee amount assoiciated with this transaction.\n\nThe value entered should always be positive." ) ); layout->addMultiCellWidget( feeEdit, 6, 6, 1, 3 ); // Notes label = new QLabel( tr( "Notes:" ), container ); QWhatsThis::add( label, tr( "Enter any additional information for this transaction here." ) ); layout->addWidget( label, 7, 0 ); noteEdit = new QMultiLineEdit( container ); QWhatsThis::add( noteEdit, tr( "Enter any additional information for this transaction here." ) ); layout->addMultiCellWidget( noteEdit, 8, 8, 0, 3 ); // init date initFromInfo( info ); // not new handlers connect( withBtn, SIGNAL( toggled(bool) ), this, SLOT( slotNotNew() ) ); connect( depBtn, SIGNAL( toggled(bool) ), this, SLOT( slotNotNew() ) ); - connect( catList, SIGNAL(activated(const QString &)), this, SLOT( slotNotNew() ) ); - connect( typeList, SIGNAL(activated(const QString &)), this, SLOT( slotNotNew() ) ); - connect( amtEdit, SIGNAL(textChanged(const QString &)), this, SLOT( slotNotNew() ) ); - connect( feeEdit, SIGNAL(textChanged(const QString &)), this, SLOT( slotNotNew() ) ); + connect( catList, SIGNAL(activated(const QString&)), this, SLOT( slotNotNew() ) ); + connect( typeList, SIGNAL(activated(const QString&)), this, SLOT( slotNotNew() ) ); + connect( amtEdit, SIGNAL(textChanged(const QString&)), this, SLOT( slotNotNew() ) ); + connect( feeEdit, SIGNAL(textChanged(const QString&)), this, SLOT( slotNotNew() ) ); connect( noteEdit, SIGNAL(textChanged()), this, SLOT( slotNotNew() ) ); } // --- initFromInfo ----------------------------------------------------------- void Transaction::initFromInfo(TranInfo *info, bool bPopulateOld) { // Populate current values if provided if ( info ) { if ( info->withdrawal() ) { withBtn->setChecked( TRUE ); slotWithdrawalClicked(); } else { depBtn->setChecked( TRUE ); slotDepositClicked(); } if( !bPopulateOld ) { QDate dt = info->date(); slotDateChanged( dt.year(), dt.month(), dt.day() ); datePicker->setDate( dt ); numEdit->setText( info->number() ); } QString temptext = info->category(); // set description field int i; for(i=_cbDesc->count()-1; i>=0; i--) { if( _cbDesc->text(i)==info->desc() ) { _cbDesc->setCurrentItem(i); break; } } if( i<=0 ) _cbDesc->setEditText( info->desc() ); i = catList->count(); while ( i > 0 ) { i--; catList->setCurrentItem( i ); if ( catList->currentText() == temptext ) { break; } } temptext = info->type(); i = typeList->count(); while ( i > 0 ) { i--; typeList->setCurrentItem( i ); if ( typeList->currentText() == temptext ) { break; } } amtEdit->setText( QString( "%1" ).arg( info->amount(), 0, 'f', 2 ) ); feeEdit->setText( QString( "%1" ).arg( info->fee(), 0, 'f', 2 ) ); noteEdit->setText( info->notes() ); } else { withBtn->setChecked( TRUE ); } } // --- ~Transaction ----------------------------------------------------------- Transaction::~Transaction() { } // --- accept ----------------------------------------------------------------- void Transaction::accept() { tran->setDesc( _cbDesc->currentText() ); tran->setDate( datePicker->selectedDate() ); tran->setWithdrawal( withBtn->isChecked() ); tran->setType( typeList->currentText() ); tran->setCategory( catList->currentText() ); bool ok; tran->setAmount( amtEdit->text().toFloat( &ok ) ); tran->setFee( feeEdit->text().toFloat( &ok ) ); tran->setNumber( numEdit->text() ); tran->setNotes( noteEdit->text() ); QDialog::accept(); } void Transaction::slotWithdrawalClicked() { catList->clear(); CategoryList *pCatList=_pCfg->getCategoryList(); for(Category *pCat=pCatList->first(); pCat; pCat=pCatList->next()) { if( !pCat->isIncome() ) catList->insertItem( pCat->getName() ); } catList->setCurrentItem(0); typeList->clear(); typeList->insertItem( tr( "Debit Charge" ) ); typeList->insertItem( tr( "Written Check" ) ); typeList->insertItem( tr( "Transfer" ) ); typeList->insertItem( tr( "Credit Card" ) ); } void Transaction::slotDepositClicked() { catList->clear(); CategoryList *pCatList=_pCfg->getCategoryList(); for(Category *pCat=pCatList->first(); pCat; pCat=pCatList->next()) { if( pCat->isIncome() ) catList->insertItem( pCat->getName() ); } catList->setCurrentItem( 0 ); typeList->clear(); typeList->insertItem( tr( "Written Check" ) ); typeList->insertItem( tr( "Automatic Payment" ) ); typeList->insertItem( tr( "Transfer" ) ); typeList->insertItem( tr( "Cash" ) ); } // --- slotDateChanged -------------------------------------------------------- void Transaction::slotDateChanged( int y, int m, int d ) { QDate date; date.setYMD( y, m, d ); dateBtn->setText( TimeString::shortDate( date ) ); } // --- slotActivated ---------------------------------------------------------- // Search for the most recent transaction with this description/payee and // fill amount etc here, as long the new flag is set void Transaction::slotActivated(const QString &arg ) { if( !_bNew ) return; TranInfoList *pTl=((Checkbook *)parentWidget())->getTranList(); if( pTl ) { TranInfo *pTi=pTl->findMostRecentByDesc( arg ); if( pTi ) { initFromInfo( pTi, true ); amtEdit->setFocus(); amtEdit->setSelection(0, amtEdit->text().length() ); amtEdit->setCursorPosition(0); } } } // slotNotNew ----------------------------------------------------------------- void Transaction::slotNotNew() { qDebug("Not new"); _bNew=false; } diff --git a/noncore/apps/confedit/mainwindow.cpp b/noncore/apps/confedit/mainwindow.cpp index 5f7ad50..6ef1043 100644 --- a/noncore/apps/confedit/mainwindow.cpp +++ b/noncore/apps/confedit/mainwindow.cpp @@ -1,189 +1,189 @@ /*************************************************************************** * * * 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. * * * ***************************************************************************/ // (c) 2002 Patrick S. Vogt <tille@handhelds.org> #include "mainwindow.h" #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include "listviewconfdir.h" #include "listviewitemconfigentry.h" MainWindow::MainWindow( QWidget *parent, const char *name, WFlags f ) : QMainWindow( parent, name, f ), _currentItem(0), _fileItem(0) { setCaption( tr("Conf File Editor") ); // setBaseSize( qApp->globalStrut() ); setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));//, sizePolicy().hasHeightForWidth() ) ); mainLayout = new QVBoxLayout( this ); mainLayout->setSpacing( 0 ); mainLayout->setMargin( 0 ); qDebug("creating settingList"); settingList = new ListViewConfDir( QDir::homeDirPath() + "/Settings", this, "settingslist"); settingList->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));//, sizePolicy().hasHeightForWidth() ) ); mainLayout->addWidget( settingList, 0); qDebug("creating editor"); editor = new EditWidget(this); editor->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Maximum));//, sizePolicy().hasHeightForWidth() ) ); mainLayout->addWidget( editor, 1 ); editor->layoutType( ListViewItemConf::File ); makeMenu(); connect(settingList, SIGNAL( pressed(QListViewItem*) ), this, SLOT(setCurrent(QListViewItem*))); - connect( settingList, SIGNAL( clicked( QListViewItem* ) ), - this, SLOT( stopTimer( QListViewItem* ) ) ); + connect( settingList, SIGNAL( clicked(QListViewItem*) ), + this, SLOT( stopTimer(QListViewItem*) ) ); connect( editor->LineEditGroup, SIGNAL( textChanged(const QString&) ), SLOT( groupChanged(const QString&) ) ); connect( editor->LineEditKey, SIGNAL( textChanged(const QString&) ), SLOT( keyChanged(const QString&) ) ); connect( editor->LineEditValue, SIGNAL( textChanged(const QString&) ), SLOT( valueChanged(const QString&) ) ); setCurrent(0); editor->layoutType(EditWidget::File); } void MainWindow::makeMenu() { popupTimer = new QTimer(this); popupMenuFile = new QPopupMenu(this); popupMenuEntry = new QPopupMenu(this); popupActionSave = new QAction( tr("Save"),QString::null, 0, this, 0 ); popupActionSave->addTo( popupMenuFile ); // popupActionSave->addTo( popupMenuEntry ); connect( popupActionSave, SIGNAL( activated() ), this , SLOT( saveConfFile() ) ); popupActionRevert = new QAction( tr("Revert"),QString::null, 0, this, 0 ); popupActionRevert->addTo( popupMenuFile ); popupActionRevert->addTo( popupMenuEntry ); connect( popupActionRevert, SIGNAL( activated() ), this , SLOT( revertConfFile() ) ); popupActionDelete = new QAction( tr("Delete"),QString::null, 0, this, 0 ); popupActionDelete->addTo( popupMenuFile ); popupActionDelete->addTo( popupMenuEntry ); connect( popupActionDelete, SIGNAL( activated() ), this , SLOT( removeConfFile() ) ); connect( popupTimer, SIGNAL(timeout()), this, SLOT(showPopup()) ); } MainWindow::~MainWindow() { } void MainWindow::setCurrent(QListViewItem *item) { // qDebug("MainWindow::setCurrent"); if (!item) return; _item = (ListViewItemConf*) item; if (!_item) return; popupTimer->start( 750, true ); if (_item->getType() == ListViewItemConf::File) { editor->layoutType(EditWidget::File); _currentItem=0; _fileItem = (ListViewItemConfFile*)item; return; } _fileItem = 0; _currentItem = (ListViewItemConfigEntry*)item; if (!_currentItem) return; QString file = _currentItem->getFile(); QString group = _currentItem->getGroup(); QString key = _currentItem->getKey(); QString val = _currentItem->getValue(); editor->TextFileName->setText(file); editor->LineEditGroup->setText(group); if (!key.isEmpty()) { editor->layoutType(EditWidget::Entry); editor->LineEditKey->setText(key); editor->LineEditValue->setText(val); }else{ editor->layoutType(EditWidget::Group); } } void MainWindow::groupChanged(const QString &g) { if (!_currentItem) return; _currentItem->setGroup(g); } void MainWindow::keyChanged(const QString &k) { if (!_currentItem) return; _currentItem->keyChanged(k); } void MainWindow::valueChanged(const QString &v) { if (!_currentItem) return; _currentItem->valueChanged(v); } void MainWindow::stopTimer( QListViewItem* ) { popupTimer->stop(); } void MainWindow::saveConfFile() { if (!_fileItem) return; _fileItem->save(); } void MainWindow::revertConfFile() { if (!_item) return; _item->revert(); } void MainWindow::removeConfFile() { if (!_item) return; _item->remove(); } void MainWindow::showPopup() { qDebug("showPopup"); if (!_item) return; popupActionRevert->setEnabled(_item->revertable()); popupActionSave->setEnabled(_item->isChanged()); if (_fileItem) { popupActionSave->setEnabled(_fileItem->isChanged()); popupMenuFile->popup( QCursor::pos() ); }else if(_currentItem) { popupMenuEntry->popup( QCursor::pos() ); } } diff --git a/noncore/apps/odict/odict.cpp b/noncore/apps/odict/odict.cpp index d5c6d75..4c99964 100644 --- a/noncore/apps/odict/odict.cpp +++ b/noncore/apps/odict/odict.cpp @@ -1,215 +1,215 @@ /*************************************************************************** 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 "odict.h" #include "configdlg.h" #include "dingwidget.h" #include <qmenubar.h> #include <qmessagebox.h> #include <qvbox.h> #include <qlabel.h> #include <qpushbutton.h> #include <qlineedit.h> #include <qaction.h> #include <qtextbrowser.h> #include <qcombobox.h> #include <qpe/resource.h> #include <qpe/config.h> ODict::ODict(QWidget* parent, const char* name, WFlags fl ) : QMainWindow(parent, name, fl ) { activated_name = QString::null; vbox = new QVBox( this ); setCaption( tr( "Opie-Dictionary" ) ); setupMenus(); QHBox *hbox = new QHBox( vbox ); QLabel* query_label = new QLabel( tr( "Query:" ) , hbox ); query_label->show(); query_le = new QLineEdit( hbox ); query_co = new QComboBox( hbox ); connect( query_co , SIGNAL( activated(const QString&) ), this, SLOT( slotMethodChanged(const QString&) ) ); ok_button = new QPushButton( tr( "&Ok" ), hbox ); connect( ok_button, SIGNAL( released() ), this, SLOT( slotStartQuery() ) ); top_name = new QLabel( vbox ); top_name->setAlignment( AlignHCenter ); browser_top = new QTextBrowser( vbox ); bottom_name = new QLabel( vbox ); bottom_name->setAlignment( AlignHCenter ); browser_bottom = new QTextBrowser( vbox ); ding = new DingWidget(); loadConfig(); setCentralWidget( vbox ); } void ODict::loadConfig() { /* * the name of the last used dictionary */ QString lastname; Config cfg ( "odict" ); cfg.setGroup( "generalsettings" ); casesens = cfg.readEntry( "casesens" ).toInt(); QString lastDict = cfg.readEntry( "lastdict" ); int i = 0, e = 0; QStringList groupListCfg = cfg.groupList().grep( "Method_" ); query_co->clear(); for ( QStringList::Iterator it = groupListCfg.begin() ; it != groupListCfg.end() ; ++it ) { QString name; cfg.setGroup( *it ); name = cfg.readEntry( "Name" ); query_co->insertItem( name ); /* * this check is to look up what dictionary has been used the * last time */ if ( lastDict == name ) { e = i; lastname = name; } i++; } /* * now set the two names of the dictionary and the correct QComboBox-Entry */ lookupLanguageNames( lastname ); ding->loadDict( lastname ); ding->loadValues(); query_co->setCurrentItem( e ); top_name->setText( top_name_content ); bottom_name->setText( bottom_name_content ); } void ODict::lookupLanguageNames( QString dictname ) { Config cfg ( "odict" ); cfg.setGroup( "Method_"+dictname ); top_name_content = cfg.readEntry( "Lang1" ); bottom_name_content = cfg.readEntry( "Lang2" ); } void ODict::saveConfig() { Config cfg ( "odict" ); cfg.setGroup( "generalsettings" ); cfg.writeEntry( "casesens" , casesens ); cfg.writeEntry( "lastdict" , query_co->currentText() ); } void ODict::slotStartQuery() { QString querystring = query_le->text(); if ( !querystring.isEmpty() ) { /* * if the user has not yet defined a dictionary */ if ( !query_co->currentText() ) { switch ( QMessageBox::information( this, tr( "OPIE-Dictionary" ), tr( "No dictionary defined" ), tr( "&Define one" ), tr( "&Cancel" ), 0, // Define a dict 1 ) ) // Cancel choosen { case 0: slotSettings(); break; case 1: // stop here return; } } /* * ok, the user has defined a dict */ ding->setCaseSensitive( casesens ); BroswerContent test = ding->setText( querystring ); browser_top->setText( test.top ); browser_bottom->setText( test.bottom ); } } void ODict::slotSettings() { ConfigDlg dlg( this, "Config" , true); if ( dlg.exec() == QDialog::Accepted ) saveConfig(); } void ODict::slotSetParameter( int count ) { if ( count == 0 ) { if ( casesens ) casesens = false; else casesens = true; } saveConfig(); } void ODict::slotMethodChanged( const QString& methodnumber ) { activated_name = methodnumber; if ( activated_name != ding->loadedDict() ) { ding->loadDict(activated_name); lookupLanguageNames( activated_name ); top_name->setText( top_name_content ); bottom_name->setText( bottom_name_content ); } } void ODict::setupMenus() { menu = new QMenuBar( this ); settings = new QPopupMenu( menu ); setting_a = new QAction(tr( "Configuration" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); connect( setting_a, SIGNAL( activated() ), this, SLOT( slotSettings() ) ); setting_a->addTo( settings ); setting_b = new QAction(tr( "Searchmethods" ), Resource::loadPixmap( "edit" ), QString::null, 0, this, 0 ); parameter = new QPopupMenu( menu ); - connect( parameter, SIGNAL( activated( int ) ), this, SLOT( slotSetParameter( int ) ) ); + connect( parameter, SIGNAL( activated(int) ), this, SLOT( slotSetParameter(int) ) ); parameter->insertItem( tr( "C&ase sensitive" ), 0 ,0 ); parameter->insertSeparator(); menu->insertItem( tr( "Settings" ) , settings ); menu->insertItem( tr( "Parameter" ) , parameter ); } diff --git a/noncore/apps/opie-bartender/bartender.cpp b/noncore/apps/opie-bartender/bartender.cpp index 3c010e9..b6401ed 100644 --- a/noncore/apps/opie-bartender/bartender.cpp +++ b/noncore/apps/opie-bartender/bartender.cpp @@ -1,432 +1,432 @@ /**************************************************************************** ** ** 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 "showdrinks.h" #include "inputDialog.h" #include "searchresults.h" #include "bac.h" #include <qpe/qpetoolbar.h> #include <qmenubar.h> //#include <opie2/colorpopupmenu.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qlineedit.h> #include <qdir.h> #include <qpushbutton.h> #include <qlistbox.h> #include <qmultilineedit.h> #include <qmessagebox.h> #include <qtextstream.h> #include <qaction.h> #include <qheader.h> #include <qlistview.h> #include <qlayout.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))); + 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; 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; } } } 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->ListBox1->insertStringList( searchList,-1); 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; 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); 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-bartender/searchresults.cpp b/noncore/apps/opie-bartender/searchresults.cpp index 4900d1f..a511a57 100644 --- a/noncore/apps/opie-bartender/searchresults.cpp +++ b/noncore/apps/opie-bartender/searchresults.cpp @@ -1,43 +1,43 @@ /**************************************************************************** ** Created: Sat Jul 20 08:23:27 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 "searchresults.h" #include <qlistbox.h> #include <qlayout.h> Search_Results::Search_Results( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { if ( !name ) setName( drinkName); drinkName = name; setCaption( drinkName ); Layout5 = new QGridLayout( this ); Layout5->setSpacing( 6 ); Layout5->setMargin( 4 ); ListBox1 = new QListBox( this, "ListBox1" ); Layout5->addMultiCellWidget( ListBox1, 0, 1, 0, 3 ); - connect( ListBox1, SIGNAL( clicked( QListBoxItem *)), SLOT( listSelected( QListBoxItem *)) ); + connect( ListBox1, SIGNAL( clicked(QListBoxItem*)), SLOT( listSelected(QListBoxItem*)) ); } Search_Results::~Search_Results() { } void Search_Results::listSelected(QListBoxItem *) { QDialog::accept(); } diff --git a/noncore/apps/opie-console/btconfigwidget.cpp b/noncore/apps/opie-console/btconfigwidget.cpp index 64046d8..0ac337f 100644 --- a/noncore/apps/opie-console/btconfigwidget.cpp +++ b/noncore/apps/opie-console/btconfigwidget.cpp @@ -1,190 +1,190 @@ #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include <qcombobox.h> #include <qhbox.h> #include <qradiobutton.h> #include "iolayerbase.h" #include "btconfigwidget.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 ); } } BTConfigWidget::BTConfigWidget( const QString& name, QWidget* parent, const char* na ) : ProfileDialogConnectionWidget( name, parent, na ) { m_lay = new QVBoxLayout( this ); m_device = new QLabel( tr( "Device" ), this ); QHBox *deviceBox = new QHBox( this ); m_devRadio = new QRadioButton( deviceBox ); - connect( m_devRadio, SIGNAL( toggled( bool ) ), this, SLOT( slotDevRadio( bool ) ) ); + connect( m_devRadio, SIGNAL( toggled(bool) ), this, SLOT( slotDevRadio(bool) ) ); m_deviceCmb = new QComboBox( deviceBox ); m_deviceCmb->setEditable( TRUE ); QLabel *macLabel = new QLabel( this ); macLabel->setText( tr( "Or peer mac address" ) ); QHBox *macBox = new QHBox( this ); m_macRadio = new QRadioButton( macBox ); - connect( m_macRadio, SIGNAL( toggled( bool ) ), this, SLOT( slotMacRadio( bool ) ) ); + connect( m_macRadio, SIGNAL( toggled(bool) ), this, SLOT( slotMacRadio(bool) ) ); m_mac = new QLineEdit( macBox ); m_base = new IOLayerBase(this, "base"); m_lay->addWidget( m_device ); m_lay->addWidget( deviceBox ); m_lay->addWidget( macLabel ); m_lay->addWidget( macBox ); m_lay->addWidget( m_base ); m_deviceCmb->insertItem( "/dev/ttyU0" ); m_deviceCmb->insertItem( "/dev/ttyU1" ); } BTConfigWidget::~BTConfigWidget() { } void BTConfigWidget::load( const Profile& prof ) { int rad_flow = prof.readNumEntry("Flow"); int rad_parity = prof.readNumEntry("Parity"); int speed = prof.readNumEntry("Speed"); QString mac = prof.readEntry("Mac"); if (!mac.isEmpty() ) { m_mac->setText( mac ); } else { m_devRadio->setChecked( true ); } 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 ( prof.readEntry("Device").isEmpty() ) return; setCurrent( prof.readEntry("Device"), m_deviceCmb ); } /* * save speed, * flow, * parity */ void BTConfigWidget::save( Profile& prof ) { int flow, parity, speed; flow = parity = speed = 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; default: case IOLayerBase::Baud_9600: speed = 9600; break; } prof.writeEntry("Flow", flow); prof.writeEntry("Parity", parity); prof.writeEntry("Speed", speed); prof.writeEntry("Mac", m_mac->text() ); } void BTConfigWidget::slotMacRadio( bool on ) { if ( on ) { m_devRadio->setChecked( false ); m_deviceCmb->setEnabled( false ); m_mac->setEnabled( true ); } else { m_devRadio->setChecked( true ); } } void BTConfigWidget::slotDevRadio( bool on ) { if ( on ) { m_macRadio->setChecked( false ); m_deviceCmb->setEnabled( true ); m_mac->setEnabled( false ); } else { m_macRadio->setChecked( true ); } } diff --git a/noncore/apps/opie-console/dialdialog.cpp b/noncore/apps/opie-console/dialdialog.cpp index 6bc1240..526d55e 100644 --- a/noncore/apps/opie-console/dialdialog.cpp +++ b/noncore/apps/opie-console/dialdialog.cpp @@ -1,98 +1,98 @@ #include <qlayout.h> #include <qlabel.h> #include <qpushbutton.h> #include <qbuttongroup.h> #include "dialdialog.h" DialDialog::DialDialog( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { setCaption( tr( "Enter number" ) ); QVBoxLayout *mainLayout = new QVBoxLayout( this ); QLabel *textLabel = new QLabel( this ); textLabel->setTextFormat( QLabel::RichText ); textLabel->setText( tr("Enter the number you want to dial. When finished, press ok") ); m_dialLine = new QLineEdit( this ); m_dialLine->setReadOnly( true ); m_dialLine->setFrame( false ); m_dialLine->setAlignment( Qt::AlignLeft ); QFont dialLine_font( m_dialLine->font() ); dialLine_font.setBold( TRUE ); dialLine_font.setPointSize( 18 ); m_dialLine->setFont( dialLine_font ); QWidget* dialWidget = new QWidget( this ); QGridLayout *layout = new QGridLayout( dialWidget , 4, 3 ); QButtonGroup *dialButtons = new QButtonGroup( ); QPushButton *number0 = new QPushButton( dialWidget ); number0->setText( QString( "0" ) ); QFont number0_font( number0->font() ); number0_font.setBold( TRUE ); number0->setFont( number0_font ); layout->addWidget( number0, 4, 1 ); dialButtons->insert( number0 ); int x = 0, y = 0; for ( int i = 0 ; i < 9; i++ ) { QPushButton *number = new QPushButton( dialWidget ); number->setText( QString( "%1" ).arg( i + 1 ) ); QFont number_font( number->font() ); number_font.setBold( TRUE ); number->setFont( number_font ); dialButtons->insert( number ); layout->addWidget( number, x, y ); if ( y < 2 ) { y++; } else { x++; y = 0; } } - connect( dialButtons, SIGNAL( clicked( int ) ), this, SLOT( slotEnterNumber( int ) ) ); + connect( dialButtons, SIGNAL( clicked(int) ), this, SLOT( slotEnterNumber(int) ) ); mainLayout->addStretch( 2 ); mainLayout->addWidget( textLabel ); mainLayout->addStretch( 1 ); mainLayout->addWidget( m_dialLine ); mainLayout->addStretch( 2 ); mainLayout->addWidget( dialWidget ); mainLayout->addStretch( 4 ); } void DialDialog::slotEnterNumber( int number ) { // pretty stupid, just for testing .-) m_number.append(QString("%1").arg(number)); setNumber(m_number); } DialDialog::~DialDialog() { } QString DialDialog::number() { return m_number; } void DialDialog::setNumber( QString number ) { m_dialLine->setText( QString("%1").arg( number ) ); } diff --git a/noncore/apps/opie-console/emulation_handler.cpp b/noncore/apps/opie-console/emulation_handler.cpp index 2c1d888..99d069f 100644 --- a/noncore/apps/opie-console/emulation_handler.cpp +++ b/noncore/apps/opie-console/emulation_handler.cpp @@ -1,206 +1,206 @@ #include "TEmuVt102.h" #include "profile.h" #include "emulation_handler.h" #include "script.h" EmulationHandler::EmulationHandler( const Profile& prof, QWidget* parent,const char* name ) : QObject(0, name ) { m_teWid = new TEWidget( parent, "TerminalMain"); // use setWrapAt(0) for classic behaviour (wrap at screen width, no scrollbar) // use setWrapAt(80) for normal console with scrollbar setWrap(prof.readNumEntry("Wrap", 0) ? 0 : 80); m_teWid->setMinimumSize(150, 70 ); m_script = 0; parent->resize( m_teWid->calcSize(80, 24 ) ); m_teEmu = new TEmuVt102(m_teWid ); - connect(m_teEmu,SIGNAL(ImageSizeChanged(int, int) ), - this, SIGNAL(changeSize(int, int) ) ); - connect(m_teEmu, SIGNAL(sndBlock(const char*, int) ), - this, SLOT(recvEmulation(const char*, int) ) ); + connect(m_teEmu,SIGNAL(ImageSizeChanged(int,int) ), + this, SIGNAL(changeSize(int,int) ) ); + connect(m_teEmu, SIGNAL(sndBlock(const char*,int) ), + this, SLOT(recvEmulation(const char*,int) ) ); m_teEmu->setConnect( true ); m_teEmu->setHistory( TRUE ); load( prof ); } TEmulation* EmulationHandler::emulation() { return m_teEmu; } EmulationHandler::~EmulationHandler() { if (isRecording()) clearScript(); delete m_teEmu; delete m_teWid; } void EmulationHandler::load( const Profile& prof) { m_teWid->setVTFont( font( prof.readNumEntry("Font") ) ); int num = prof.readNumEntry("Color"); setColor( foreColor(num), backColor(num) ); m_teWid->setBackgroundColor(backColor(num) ); int term = prof.readNumEntry("Terminal", 0) ; switch(term) { default: case Profile::VT102: case Profile::VT100: m_teEmu->setKeytrans("vt100.keytab"); break; case Profile::Linux: m_teEmu->setKeytrans("linux.keytab"); break; case Profile::XTerm: m_teEmu->setKeytrans("default.Keytab"); break; } } void EmulationHandler::recv( const QByteArray& ar) { m_teEmu->onRcvBlock(ar.data(), ar.count() ); } void EmulationHandler::recvEmulation(const char* src, int len ) { QByteArray ar(len); memcpy(ar.data(), src, sizeof(char) * len ); if (isRecording()) m_script->append(ar); emit send(ar); } QWidget* EmulationHandler::widget() { return m_teWid; } /* * allocate a new table of colors */ void EmulationHandler::setColor( const QColor& fore, const QColor& back ) { ColorEntry table[TABLE_COLORS]; const ColorEntry *defaultCt = m_teWid->getdefaultColorTable(); for (int i = 0; i < TABLE_COLORS; i++ ) { if ( i == 0 || i == 10 ) { table[i].color = fore; }else if ( i == 1 || i == 11 ) { table[i].color = back; table[i].transparent = 0; }else { table[i].color = defaultCt[i].color; } } m_teWid->setColorTable(table ); m_teWid->update(); } QFont EmulationHandler::font( int id ) { QString name; int size = 0; switch(id ) { default: // fall through case 0: name = QString::fromLatin1("Micro"); size = 4; break; case 1: name = QString::fromLatin1("Fixed"); size = 7; break; case 2: name = QString::fromLatin1("Fixed"); size = 12; break; } QFont font(name, size, QFont::Normal ); font.setFixedPitch(TRUE ); return font; } QColor EmulationHandler::foreColor(int col) { QColor co; /* we need to switch it */ switch( col ) { default: case Profile::White: /* color is black */ co = Qt::white; break; case Profile::Black: co = Qt::black; break; case Profile::Green: qWarning("Foreground green"); co = Qt::green; break; case Profile::Orange: qWarning("Foreground orange"); co.setRgb( 231, 184, 98 ); break; } return co; } QColor EmulationHandler::backColor(int col ) { QColor co; /* we need to switch it */ switch( col ) { default: case Profile::White: /* color is white */ co = Qt::black; break; case Profile::Black: co = Qt::white; break; case Profile::Green: qWarning("Background black"); co = Qt::black; break; case Profile::Orange: qWarning("Background black"); co = Qt::black; break; } return co; } QPushButton* EmulationHandler::cornerButton() { return m_teWid->cornerButton(); } Script *EmulationHandler::script() { return m_script; } bool EmulationHandler::isRecording() { return (m_script != 0); } void EmulationHandler::startRecording() { if (!isRecording()) m_script = new Script(); } void EmulationHandler::clearScript() { if (isRecording()) { delete m_script; m_script = 0; } } void EmulationHandler::runScript(const Script *script) { emit send(script->script()); } void EmulationHandler::copy() { m_teWid->emitSelection(); } void EmulationHandler::paste() { m_teWid->pasteClipboard(); } void EmulationHandler::setWrap(int columns) { m_teWid->setWrapAt(columns); } diff --git a/noncore/apps/opie-console/emulation_layer.cpp b/noncore/apps/opie-console/emulation_layer.cpp index 2bef801..fd30ad7 100644 --- a/noncore/apps/opie-console/emulation_layer.cpp +++ b/noncore/apps/opie-console/emulation_layer.cpp @@ -1,371 +1,371 @@ /* -------------------------------------------------------------------------- */ /* */ /* [emulation_layer.cpp] Terminal Emulation Decoder */ /* */ /* -------------------------------------------------------------------------- */ /* */ /* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ /* */ /* This file is part of Konsole - an X terminal for KDE */ /* */ /* -------------------------------------------------------------------------- */ /* */ /* Ported Konsole to Qt/Embedded */ /* */ /* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ /* */ /* -------------------------------------------------------------------------- */ /* */ /* Modified to suit opie-console */ /* */ /* Copyright (C) 2002 by opie developers <opie@handhelds.org> */ /* */ /* -------------------------------------------------------------------------- */ /*! \class EmulationLayer \brief Mediator between Widget and Screen. This class is responsible to scan the escapes sequences of the terminal emulation and to map it to their corresponding semantic complements. Thus this module knows mainly about decoding escapes sequences and is a stateless device w.r.t. the semantics. It is also responsible to refresh the Widget by certain rules. \sa Widget \sa Screen \par A note on refreshing Although the modifications to the current screen image could immediately be propagated via `Widget' to the graphical surface, we have chosen another way here. The reason for doing so is twofold. First, experiments show that directly displaying the operation results in slowing down the overall performance of emulations. Displaying individual characters using X11 creates a lot of overhead. Second, by using the following refreshing method, the screen operations can be completely separated from the displaying. This greatly simplifies the programmer's task of coding and maintaining the screen operations, since one need not worry about differential modifications on the display affecting the operation of concern. We use a refreshing algorithm here that has been adoped from rxvt/kvt. By this, refreshing is driven by a timer, which is (re)started whenever a new bunch of data to be interpreted by the emulation arives at `onRcvBlock'. As soon as no more data arrive for `BULK_TIMEOUT' milliseconds, we trigger refresh. This rule suits both bulk display operation as done by curses as well as individual characters typed. (BULK_TIMEOUT < 1000 / max characters received from keyboard per second). Additionally, we trigger refreshing by newlines comming in to make visual snapshots of lists as produced by `cat', `ls' and likely programs, thereby producing the illusion of a permanent and immediate display operation. As a sort of catch-all needed for cases where none of the above conditions catch, the screen refresh is also triggered by a count of incoming bulks (`bulk_incnt'). */ /* FIXME - evtl. the bulk operations could be made more transparent. */ #include "emulation_layer.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> /* ------------------------------------------------------------------------- */ /* */ /* EmulationLayer */ /* */ /* ------------------------------------------------------------------------- */ #define CNTL(c) ((c)-'@') /*! */ EmulationLayer::EmulationLayer( WidgetLayer* gui ) : decoder((QTextDecoder*)NULL) { this->gui = gui; screen[0] = new Screen(gui->lines(),gui->columns()); screen[1] = new Screen(gui->lines(),gui->columns()); scr = screen[0]; bulk_nlcnt = 0; // reset bulk newline counter bulk_incnt = 0; // reset bulk counter connected = FALSE; QObject::connect(&bulk_timer, SIGNAL( timeout() ), this, SLOT( showBulk() ) ); - QObject::connect(gui,SIGNAL( imageSizeChanged( int, int ) ), - this,SLOT( onImageSizeChange( int, int ) ) ); - QObject::connect(gui,SIGNAL( changedHistoryCursor( int ) ), - this,SLOT( historyCursorChange( int ) ) ); - QObject::connect(gui,SIGNAL( keyPressed( QKeyEvent* ) ), - this,SLOT( onKeyPress( QKeyEvent* ) ) ); - QObject::connect(gui,SIGNAL( selectionBegin( const int, const int) ), - this,SLOT( onSelectionBegin( const int, const int ) ) ); - QObject::connect(gui,SIGNAL( selectionExtended( const int, const int ) ), - this,SLOT( onSelectionExtend( const int,const int ) ) ); - QObject::connect(gui,SIGNAL( selectionEnd( const bool ) ), - this,SLOT( setSelection( const bool ) ) ); + QObject::connect(gui,SIGNAL( imageSizeChanged(int,int) ), + this,SLOT( onImageSizeChange(int,int) ) ); + QObject::connect(gui,SIGNAL( changedHistoryCursor(int) ), + this,SLOT( historyCursorChange(int) ) ); + QObject::connect(gui,SIGNAL( keyPressed(QKeyEvent*) ), + this,SLOT( onKeyPress(QKeyEvent*) ) ); + QObject::connect(gui,SIGNAL( selectionBegin(const int,const int) ), + this,SLOT( onSelectionBegin(const int,const int) ) ); + QObject::connect(gui,SIGNAL( selectionExtended(const int,const int) ), + this,SLOT( onSelectionExtend(const int,const int) ) ); + QObject::connect(gui,SIGNAL( selectionEnd(const bool) ), + this,SLOT( setSelection(const bool) ) ); QObject::connect(gui,SIGNAL( selectionCleared() ), this,SLOT( clearSelection() ) ); } /*! */ EmulationLayer::~EmulationLayer() { delete screen[0]; delete screen[1]; bulk_timer.stop(); } /*! change between primary and alternate screen */ void EmulationLayer::setScreen(int n) { scr = screen[n&1]; } void EmulationLayer::setHistory(bool on) { screen[0]->setScroll(on); if (!connected) return; showBulk(); } bool EmulationLayer::history() { return screen[0]->hasScroll(); } void EmulationLayer::setCodec(int c) { //FIXME: check whether we have to free codec codec = c ? QTextCodec::codecForName("utf8") : QTextCodec::codecForLocale(); if (decoder) delete decoder; decoder = codec->makeDecoder(); } void EmulationLayer::setKeytrans(int no) { keytrans = KeyTrans::find(no); } void EmulationLayer::setKeytrans(const char * no) { keytrans = KeyTrans::find(no); } // Interpreting Codes --------------------------------------------------------- /* This section deals with decoding the incoming character stream. Decoding means here, that the stream is first seperated into `tokens' which are then mapped to a `meaning' provided as operations by the `Screen' class. */ /*! */ void EmulationLayer::onRcvChar(int c) // process application unicode input to terminal // this is a trivial scanner { c &= 0xff; switch (c) { case '\b' : scr->BackSpace(); break; case '\t' : scr->Tabulate(); break; case '\n' : scr->NewLine(); break; case '\r' : scr->Return(); break; case 0x07 : gui->bell(); break; default : scr->ShowCharacter(c); break; }; } /* ------------------------------------------------------------------------- */ /* */ /* Keyboard Handling */ /* */ /* ------------------------------------------------------------------------- */ /*! */ void EmulationLayer::onKeyPress( QKeyEvent* ev ) { if (!connected) return; // someone else gets the keys if (scr->getHistCursor() != scr->getHistLines()); scr->setHistCursor(scr->getHistLines()); if (!ev->text().isEmpty()) { // A block of text // Note that the text is proper unicode. // We should do a conversion here, but since this // routine will never be used, we simply emit plain ascii. sendString( ev->text().ascii() ); //,ev->text().length()); } else if (ev->ascii()>0) { QByteArray c = QByteArray( 1 ); c.at( 0 ) = ev->ascii(); // ibot: qbytearray is emited not char* emit sndBlock( (QByteArray) c ); } } // Unblocking, Byte to Unicode translation --------------------------------- -- /* We are doing code conversion from locale to unicode first. */ void EmulationLayer::onRcvBlock(const QByteArray &s ) { bulkStart(); bulk_incnt += 1; for (int i = 0; i < s.size(); i++) { //TODO: ibot: maybe decoding qbytearray to unicode in io_layer? QString result = decoder->toUnicode(&s[i],1); int reslen = result.length(); for (int j = 0; j < reslen; j++) onRcvChar(result[j].unicode()); if (s[i] == '\n') bulkNewline(); } bulkEnd(); } // Selection --------------------------------------------------------------- -- void EmulationLayer::onSelectionBegin(const int x, const int y) { if (!connected) return; scr->setSelBeginXY(x,y); showBulk(); } void EmulationLayer::onSelectionExtend(const int x, const int y) { if (!connected) return; scr->setSelExtentXY(x,y); showBulk(); } void EmulationLayer::setSelection(const BOOL preserve_line_breaks) { if (!connected) return; QString t = scr->getSelText(preserve_line_breaks); if (!t.isNull()) gui->setSelection(t); } void EmulationLayer::clearSelection() { if (!connected) return; scr->clearSelection(); showBulk(); } // Refreshing -------------------------------------------------------------- -- #define BULK_TIMEOUT 20 /*! called when \n comes in. Evtl. triggers showBulk at endBulk */ void EmulationLayer::bulkNewline() { bulk_nlcnt += 1; bulk_incnt = 0; // reset bulk counter since `nl' rule applies } /*! */ void EmulationLayer::showBulk() { bulk_nlcnt = 0; // reset bulk newline counter bulk_incnt = 0; // reset bulk counter if (connected) { QArray<Character> image = scr->getCookedImage(); // get the image gui->setImage(image, scr->getLines(), scr->getColumns()); // actual refresh delete image; //FIXME: check that we do not trigger other draw event here. gui->setScroll(scr->getHistCursor(),scr->getHistLines()); } } void EmulationLayer::bulkStart() { if (bulk_timer.isActive()) bulk_timer.stop(); } void EmulationLayer::bulkEnd() { if ( bulk_nlcnt > gui->lines() || bulk_incnt > 20 ) showBulk(); // resets bulk_??cnt to 0, too. else bulk_timer.start(BULK_TIMEOUT,TRUE); } void EmulationLayer::setConnect(bool c) { connected = c; if ( connected) { onImageSizeChange(gui->lines(), gui->columns()); showBulk(); } else { scr->clearSelection(); } } // --------------------------------------------------------------------------- /*! triggered by image size change of the Widget `gui'. This event is simply propagated to the attached screens and to the related serial line. */ void EmulationLayer::onImageSizeChange(int lines, int columns) { if (!connected) return; screen[0]->resizeImage(lines,columns); screen[1]->resizeImage(lines,columns); showBulk(); emit ImageSizeChanged(lines,columns); // propagate event to serial line } void EmulationLayer::onHistoryCursorChange(int cursor) { if (!connected) return; scr->setHistCursor(cursor); showBulk(); } void EmulationLayer::setColumns(int columns) { //FIXME: this goes strange ways. // Can we put this straight or explain it at least? emit changeColumns(columns); } diff --git a/noncore/apps/opie-console/function_keyboard.cpp b/noncore/apps/opie-console/function_keyboard.cpp index c232d89..eb32551 100644 --- a/noncore/apps/opie-console/function_keyboard.cpp +++ b/noncore/apps/opie-console/function_keyboard.cpp @@ -1,426 +1,426 @@ #include "function_keyboard.h" #include <qlayout.h> #include <qlistbox.h> #include <qlabel.h> #include <qdir.h> #define DEFAULT_ROWS 2 #define DEFAULT_COLS 12 /* FunctionKeyboard {{{1 */ FunctionKeyboard::FunctionKeyboard(QWidget *parent) : QFrame(parent), numRows(DEFAULT_ROWS), numCols(DEFAULT_COLS), pressedRow(0), pressedCol(0) { setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed)); /* * all the saving/loading is now done in a profile. downside is that you cant modify * the keyboard for all profiles, but must do it on a profile-basis * Config conf("opie-console-keys"); conf.setGroup("keys"); for (uint r = 0; r < numRows; r++) for (uint c = 0; c < numCols; c++) { QString handle = "r" + QString::number(r) + "c" + QString::number(c); QStringList value_list = conf.readListEntry( handle, '|'); if (value_list.isEmpty()) continue; keys.insert( handle, FKey (value_list[0], value_list[1], value_list[2].toUShort(), value_list[3].toUShort()) ); } //qWarning("loaded %d keys", keys.count()); */ if (keys.isEmpty()) loadDefaults(); } FunctionKeyboard::~FunctionKeyboard() {} void FunctionKeyboard::changeRows(int r) { numRows = r; // have to do this so the whole thing gets redrawn hide(); show(); } void FunctionKeyboard::changeCols(int c) { numCols = c; keyWidth = (double)width()/numCols; // have to reset this thing too repaint(false); } void FunctionKeyboard::load (const Profile& prof) { keys.clear(); numRows = prof.readNumEntry("keb_rows", 2); numCols = prof.readNumEntry("keb_cols", 10); keyWidth = (double)width()/numCols; // have to reset this thing too /* load all the keys to the keyboard */ for (ushort i = 0; i <= numRows - 1; i++) for (ushort j = 0; j <= numCols - 1; j++) { QString h = "r" + QString::number(i) + "c" + QString::number(j); QString values = prof.readEntry("keb_" + h); if (!values.isEmpty()) { QStringList l = QStringList::split(QChar('|'), values, TRUE); keys[h] = FKey(l[0], l[1], l[2].toInt(), l[3].toInt()); // load pixmap if used if (!l[1].isEmpty()) { keys[h].pix = new QPixmap( Resource::loadPixmap( "console/keys/" + l[1] ) ); } } } if (keys.isEmpty()) loadDefaults(); hide(); show(); } void FunctionKeyboard::paintEvent(QPaintEvent *e) { QPainter p(this); p.setClipRect(e->rect()); p.fillRect(0, 0, width(), height(), QColor(255,255,255)); p.setPen(QColor(0,0,0)); /* those decimals do count! becomes short if use plain int */ for (double i = 0; i <= width(); i += keyWidth) { p.drawLine((int)i, 0, (int)i, height()); } // sometimes the last line doesnt get drawn p.drawLine(width() -1, 0, width() -1, height()); for (int i = 0; i <= height(); i += keyHeight) { p.drawLine(0, i, width(), i); } for (uint r = 0; r < numRows; r++) { for (uint c = 0; c < numCols; c++) { QString handle = "r" + QString::number(r) + "c" + QString::number(c); if (keys.contains(handle)) { if (keys[handle].pixFile.isEmpty()) p.drawText( c * keyWidth + 1, r * keyHeight + 1, keyWidth, keyHeight, Qt::AlignHCenter | Qt::AlignVCenter, keys[handle].label ); else { ushort centerX = (ushort)(c *keyWidth) + (ushort)(keyWidth - keys[handle].pix->width()) / 2; ushort centerY = r * keyHeight + (keyHeight - keys[handle].pix->height()) / 2; p.drawPixmap(centerX, centerY, *keys[handle].pix); } } } } } void FunctionKeyboard::paintKey(uint row, uint col) { QPainter p(this); p.fillRect(QRect(QPoint(col * keyWidth + 1, row * keyHeight + 1), QPoint((col + 1) * keyWidth - 1, row * keyHeight + keyHeight- 1)), (pressedRow != -1 && pressedCol != -1 ) ? QColor(97,119,155) : QColor(255,255,255)); QString handle ("r" + QString::number(row) + "c" + QString::number(col)); if (keys[handle].pixFile.isEmpty()) p.drawText( col * keyWidth + 1, row * keyHeight + 1, keyWidth, keyHeight, Qt::AlignHCenter | Qt::AlignVCenter, keys[handle].label ); else { ushort centerX = (ushort)(col *keyWidth) + (ushort)(keyWidth - keys[handle].pix->width()) / 2; ushort centerY = row * keyHeight + (keyHeight - keys[handle].pix->height()) / 2; p.drawPixmap(centerX, centerY, *keys[handle].pix); } if (col == numCols - 1) { // sometimes it doesnt draw the last line p.drawLine((col+1) * keyWidth -1, row * keyHeight, (col+1) * keyWidth -1, (row + 1) * keyHeight ); } } void FunctionKeyboard::mousePressEvent(QMouseEvent *e) { pressedRow = e->y() / keyHeight; pressedCol = (int) (e->x() / keyWidth); paintKey(pressedRow, pressedCol); // emit that sucker! FKey k = keys["r" + QString::number(pressedRow) + "c" + QString::number(pressedCol)]; emit keyPressed(k, pressedRow, pressedCol, 1); } void FunctionKeyboard::mouseReleaseEvent(QMouseEvent *) { if (pressedRow != -1 && pressedRow != -1) { int row = pressedRow; pressedRow = -1; int col = pressedCol; pressedCol = -1; paintKey(row, col); FKey k = keys["r" + QString::number(row) + "c" + QString::number(col)]; emit keyPressed(k, row, col, 0); } } void FunctionKeyboard::resizeEvent(QResizeEvent*) { /* set he default font height/width */ QFontMetrics fm=fontMetrics(); keyHeight = fm.lineSpacing() + 2; keyWidth = (double)width()/numCols; } QSize FunctionKeyboard::sizeHint() const { return QSize(width(), keyHeight * numRows + 1); } void FunctionKeyboard::loadDefaults() { numRows = DEFAULT_ROWS; numCols = DEFAULT_COLS; keyWidth = (double)width()/numCols; // have to reset this thing too keys.insert( "r0c0", FKey ("Enter", "enter", Qt::Key_Enter, 0)); keys.insert( "r0c1", FKey ("Space", "space", Qt::Key_Space, Qt::Key_Space)); keys.insert( "r0c2", FKey ("Tab", "tab", Qt::Key_Tab, 0)); keys.insert( "r0c3", FKey ("Up", "up", Qt::Key_Up, 0)); keys.insert( "r0c4", FKey ("Down", "down", Qt::Key_Down, 0)); keys.insert( "r0c7", FKey ("Ho", 0, 4112, 0)); keys.insert( "r0c8", FKey ("End", 0, 4113, 0)); keys.insert( "r0c9", FKey ("Pu", 0, 4118, 0)); keys.insert( "r0c10", FKey ("Pd", 0, 4119, 0)); keys.insert( "r0c11", FKey ("Esc", 0, Qt::Key_Escape, 0xfff)); keys.insert( "r1c0", FKey ("F1", 0, 4144, 0)); keys.insert( "r1c1", FKey ("F2", 0, 4145, 0)); keys.insert( "r1c2", FKey ("F3", 0, 4146, 0)); keys.insert( "r1c3", FKey ("F4", 0, 4147, 0)); keys.insert( "r1c4", FKey ("F5", 0, 4148, 0)); keys.insert( "r1c5", FKey ("F6", 0, 4149, 0)); keys.insert( "r1c6", FKey ("F7", 0, 4150, 0)); keys.insert( "r1c7", FKey ("F8", 0, 4151, 0)); keys.insert( "r1c8", FKey ("F9", 0, 4152, 0)); keys.insert( "r1c9", FKey ("F10", 0, 4153, 0)); keys.insert( "r1c10", FKey ("F11", 0, 4154, 0)); keys.insert( "r1c11", FKey ("F12", 0, 4155, 0)); } /* FunctionKeyboardConfig {{{1 */ FunctionKeyboardConfig::FunctionKeyboardConfig(const QString& name, QWidget* parent, const char* na ) : ProfileDialogKeyWidget(name, parent, na), selectedRow(0), selectedCol(0) { qWarning("FunctionKeyboardConfig"); kb = new FunctionKeyboard(this); - connect (kb, SIGNAL(keyPressed(FKey, ushort, ushort, bool)), - this, SLOT(slotKeyPressed(FKey, ushort, ushort, bool))); + connect (kb, SIGNAL(keyPressed(FKey,ushort,ushort,bool)), + this, SLOT(slotKeyPressed(FKey,ushort,ushort,bool))); QGroupBox *dimentions = new QGroupBox(2, Qt::Horizontal, tr("Dimensions"), this); QLabel *l = new QLabel("Rows", dimentions); m_rowBox = new QSpinBox(1, 15, 1, dimentions); connect (m_rowBox, SIGNAL(valueChanged(int)), this, SLOT(slotChangeRows(int))); l = new QLabel("Columns", dimentions); m_colBox = new QSpinBox(1, 15, 1, dimentions); connect (m_colBox, SIGNAL(valueChanged(int)), this, SLOT(slotChangeCols(int))); QGroupBox *editKey = new QGroupBox(2, Qt::Horizontal, tr("Edit Key"), this); l = new QLabel("Label", editKey); m_labels = new QComboBox(true, editKey); m_labels->setInsertionPolicy(QComboBox::AtCurrent); m_labels->insertItem(""); QStringList files = QDir( QPEApplication::qpeDir() + "pics/console/keys/", "*.png").entryList(); for (uint i = 0; i < files.count(); i++) { m_labels->insertItem( Resource::loadPixmap("console/keys/" + files[i]), files[i]); } connect (m_labels, SIGNAL(activated(int)), this, SLOT(slotChangeIcon(int))); - connect (m_labels, SIGNAL(textChanged(const QString &)), this, SLOT(slotChangeLabelText(const QString&))); + connect (m_labels, SIGNAL(textChanged(const QString&)), this, SLOT(slotChangeLabelText(const QString&))); l = new QLabel("Q Keycode", editKey); m_qvalues = new QComboBox(true, editKey); m_qvalues->setInsertionPolicy(QComboBox::AtTop); m_qvalues->setDuplicatesEnabled(false); m_qvalues->insertItem(""); - connect (m_qvalues, SIGNAL(textChanged(const QString &)), this, SLOT(slotChangeQCode(const QString&))); + connect (m_qvalues, SIGNAL(textChanged(const QString&)), this, SLOT(slotChangeQCode(const QString&))); l = new QLabel("Unicode Value", editKey); m_uniValues = new QComboBox(true, editKey); m_uniValues->setInsertionPolicy(QComboBox::AtTop); m_uniValues->setDuplicatesEnabled(false); m_uniValues->insertItem(""); - connect (m_uniValues, SIGNAL(textChanged(const QString &)), this, SLOT(slotChangeUnicode(const QString&))); + connect (m_uniValues, SIGNAL(textChanged(const QString&)), this, SLOT(slotChangeUnicode(const QString&))); QVBoxLayout *root = new QVBoxLayout(this, 2); root->addWidget(kb); root->addWidget(dimentions); root->addWidget(editKey); } FunctionKeyboardConfig::~FunctionKeyboardConfig() { } void FunctionKeyboardConfig::load (const Profile& prof) { kb->keys.clear(); kb->loadDefaults(); m_rowBox->setValue(prof.readNumEntry("keb_rows", 2)); m_colBox->setValue(prof.readNumEntry("keb_cols", 10)); /* load all the keys to the keyboard */ for (int i = 0; i <= m_rowBox->value() -1; i++) for (int j = 0; j <= m_colBox->value() -1; j++) { QString h = "r" + QString::number(i) + "c" + QString::number(j); QString values = prof.readEntry("keb_" + h); if (!values.isEmpty()) { QStringList l = QStringList::split(QChar('|'), values, TRUE); kb->keys[h] = FKey(l[0], l[1], l[2].toInt(), l[3].toInt()); // load pixmap if used if (!l[1].isEmpty()) { kb->keys[h].pix = new QPixmap( Resource::loadPixmap( "console/keys/" + l[1] ) ); } } } } void FunctionKeyboardConfig::save (Profile& prof) { prof.writeEntry("keb_rows", m_rowBox->value()); prof.writeEntry("keb_cols", m_colBox->value()); QMap<QString, FKey>::Iterator it; for ( it = kb->keys.begin(); it != kb->keys.end(); it++) { FKey k = it.data(); QString entry = k.label + "|" + k.pixFile + "|" + QString::number(k.qcode) + "|" + QString::number(k.unicode); prof.writeEntry("keb_" + it.key(), entry); } } void FunctionKeyboardConfig::slotChangeRows(int r) { kb->changeRows(r); } void FunctionKeyboardConfig::slotChangeCols(int c) { kb->changeCols(c); } void FunctionKeyboardConfig::slotKeyPressed(FKey k, ushort r, ushort c, bool pressed) { if (!pressed) return; selectedHandle = "r" + QString::number(r) + "c" + QString::number(c); selectedRow = r; selectedCol = c; if (k.pixFile.isEmpty()) { m_labels->setEditable(true); m_labels->setCurrentItem(0); m_labels->changeItem(k.label, 0); } else { // any better way to select the pixmap? m_labels->setCurrentItem((m_labels->listBox())->index((m_labels->listBox())->findItem(kb->keys[selectedHandle].pixFile))); m_labels->setEditable(false); } m_qvalues->changeItem(QString::number(k.qcode), 0); m_uniValues->changeItem(QString::number(k.unicode), 0); } void FunctionKeyboardConfig::slotChangeIcon(int index) { if (index == 0) { // is text m_labels->setEditable(true); // why tf does the text get erased unless i do this? m_labels->changeItem(m_labels->text(0), 0); kb->keys[selectedHandle].pixFile = ""; delete kb->keys[selectedHandle].pix; } else { // is a pixmap m_labels->setEditable(false); kb->keys[selectedHandle].pixFile = m_labels->currentText(); kb->keys[selectedHandle].pix = new QPixmap( Resource::loadPixmap( "console/keys/" + m_labels->currentText() ) ); } kb->paintKey(selectedRow, selectedCol); } void FunctionKeyboardConfig::slotChangeLabelText(const QString &label) { kb->keys[selectedHandle].label = label; kb->paintKey(selectedRow, selectedCol); } void FunctionKeyboardConfig::slotChangeQCode(const QString& qcode) { kb->keys[selectedHandle].qcode = qcode.toUInt(); } void FunctionKeyboardConfig::slotChangeUnicode(const QString& uni) { kb->keys[selectedHandle].unicode = uni.toUInt(); } diff --git a/noncore/apps/opie-console/io_bt.cpp b/noncore/apps/opie-console/io_bt.cpp index 37bf797..1a8c979 100644 --- a/noncore/apps/opie-console/io_bt.cpp +++ b/noncore/apps/opie-console/io_bt.cpp @@ -1,92 +1,92 @@ #include "io_bt.h" IOBt::IOBt( const Profile &config ) : IOSerial( config ) { m_attach = 0; } IOBt::~IOBt() { if ( m_attach ) { delete m_attach; } } void IOBt::close() { IOSerial::close(); // still need error handling if ( m_attach ) { delete m_attach; m_attach = 0; } } bool IOBt::open() { bool ret = false; // only set up bt stuff if mac address was set, otherwise use the device set if ( !m_mac.isEmpty() ) { // now it should also be checked, if there is a connection to the device with that mac allready // hciattach here m_attach = new OProcess(); *m_attach << "hciattach /dev/ttyS2 any 57600"; // then start hcid, then rcfomm handling (m_mac) - connect( m_attach, SIGNAL( processExited( OProcess* ) ), - this, SLOT( slotExited( OProcess* ) ) ); + connect( m_attach, SIGNAL( processExited(OProcess*) ), + this, SLOT( slotExited(OProcess*) ) ); if ( m_attach->start() ) { ret = IOSerial::open(); } else { qWarning("could not attach to device"); delete m_attach; m_attach = 0; } } else { // directly to the normal serial // TODO: look first if the connection really exists. ( is set up ) ret =IOSerial::open(); } return ret; } void IOBt::reload( const Profile &config ) { m_device = config.readEntry("Device", BT_DEFAULT_DEVICE); m_mac = config.readEntry("Mac", BT_DEFAULT_MAC); m_baud = config.readNumEntry("Baud", BT_DEFAULT_BAUD); m_parity = config.readNumEntry("Parity", BT_DEFAULT_PARITY); m_dbits = config.readNumEntry("DataBits", BT_DEFAULT_DBITS); m_sbits = config.readNumEntry("StopBits", BT_DEFAULT_SBITS); m_flow = config.readNumEntry("Flow", BT_DEFAULT_FLOW); } QString IOBt::identifier() const { return "bluetooth"; } QString IOBt::name() const { return "BLuetooth IO Layer"; } void IOBt::slotExited( OProcess* proc ){ close(); delete proc; } QBitArray IOBt::supports() const { return QBitArray( 3 ); } bool IOBt::isConnected() { return false; } void IOBt::send(const QByteArray &data) { qDebug( "Please overload me..." ); } diff --git a/noncore/apps/opie-console/io_irda.cpp b/noncore/apps/opie-console/io_irda.cpp index e360fb4..b281b7d 100644 --- a/noncore/apps/opie-console/io_irda.cpp +++ b/noncore/apps/opie-console/io_irda.cpp @@ -1,77 +1,77 @@ #include "io_irda.h" IOIrda::IOIrda( const Profile &config ) : IOSerial( config ) { m_attach = 0; } IOIrda::~IOIrda() { if ( m_attach ) { delete m_attach; } } void IOIrda::close() { IOSerial::close(); // still need error handling delete m_attach; } bool IOIrda::open() { bool ret; // irdaattach here m_attach = new OProcess(); *m_attach << "irattach /dev/ttyS2 -s"; - connect( m_attach, SIGNAL( processExited( OProcess* ) ), - this, SLOT( slotExited( OProcess* ) ) ); + connect( m_attach, SIGNAL( processExited(OProcess*) ), + this, SLOT( slotExited(OProcess*) ) ); if ( m_attach->start() ) { ret= IOSerial::open(); } else { // emit error!!! qWarning("could not attach to device"); delete m_attach; m_attach = 0l; } return ret; } void IOIrda::reload( const Profile &config ) { m_device = config.readEntry("Device", IRDA_DEFAULT_DEVICE); m_baud = config.readNumEntry("Baud", IRDA_DEFAULT_BAUD); m_parity = config.readNumEntry("Parity", IRDA_DEFAULT_PARITY); m_dbits = config.readNumEntry("DataBits", IRDA_DEFAULT_DBITS); m_sbits = config.readNumEntry("StopBits", IRDA_DEFAULT_SBITS); m_flow = config.readNumEntry("Flow", IRDA_DEFAULT_FLOW); } QString IOIrda::identifier() const { return "irda"; } QString IOIrda::name() const { return "Irda IO Layer"; } void IOIrda::slotExited(OProcess* proc ){ close(); delete proc; } QBitArray IOIrda::supports()const { return QBitArray( 3 ); } bool IOIrda::isConnected() { return false; } void IOIrda::send(const QByteArray &data) { qDebug( "Please overload me..." ); } diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp index 1d2385f..197f799 100644 --- a/noncore/apps/opie-console/mainwindow.cpp +++ b/noncore/apps/opie-console/mainwindow.cpp @@ -1,636 +1,636 @@ #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 <opie2/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))); + 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 ) ) ); + 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.setCaption( tr("New Connection") ); 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 = Opie::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() ); 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() { diff --git a/noncore/apps/opie-console/profileeditordialog.cpp b/noncore/apps/opie-console/profileeditordialog.cpp index 979e89d..6e1e23e 100644 --- a/noncore/apps/opie-console/profileeditordialog.cpp +++ b/noncore/apps/opie-console/profileeditordialog.cpp @@ -1,241 +1,241 @@ #include <qlayout.h> #include <qlineedit.h> #include <qlabel.h> #include <qmessagebox.h> #include <qcombobox.h> #include <qcheckbox.h> #include <qscrollview.h> #include "metafactory.h" #include "profileeditordialog.h" namespace { void setCurrent( const QString& str, QComboBox* bo ) { for (int i = 0; i < bo->count(); i++ ) { if ( bo->text(i) == str ) { bo->setCurrentItem( i ); } } }; } ProfileEditorDialog::ProfileEditorDialog( MetaFactory* fact, const Profile& prof ) : QDialog(0, 0, TRUE), m_fact( fact ), m_prof( prof ) { initUI(); // Apply current profile // plugin_plugin->load(profile); // ... (reset profile name line edit etc.) } ProfileEditorDialog::ProfileEditorDialog( MetaFactory* fact ) : QDialog(0, 0, TRUE), m_fact( fact ) { // Default profile m_prof = Profile(tr("New Profile"), "serial", "default", Profile::Black, Profile::White, Profile::VT102); initUI(); // Apply current profile // plugin_plugin->load(profile); } Profile ProfileEditorDialog::profile() const { return m_prof; } void ProfileEditorDialog::initUI() { m_con = m_term = m_key = 0l; QVBoxLayout *mainLayout = new QVBoxLayout( this ); tabWidget = new OTabWidget( this ); tabWidget->setTabStyle(OTabWidget::TextTab); mainLayout->add(tabWidget); /* base tabs */ tabprof = new QWidget(this); m_tabTerm = new QWidget(this); m_tabCon = new QWidget(this); m_tabKey = new QWidget(this); m_svCon = new QScrollView( m_tabCon ); m_svCon->setResizePolicy( QScrollView::AutoOneFit ); //m_svCon->setHScrollBarMode( QScrollView::AlwaysOff ); m_svCon->setFrameShape( QFrame::NoFrame ); m_svTerm = new QScrollView( m_tabTerm ); m_svTerm->setResizePolicy( QScrollView::AutoOneFit ); //m_svTerm->setHScrollBarMode( QScrollView::AlwaysOff ); m_svTerm->setFrameShape( QFrame::NoFrame ); /* base layout for tabs */ m_layCon = new QHBoxLayout( m_tabCon , 2 ); m_layTerm = new QHBoxLayout( m_tabTerm, 2 ); m_layKey = new QHBoxLayout( m_tabKey, 2 ); m_layCon->addWidget( m_svCon ); m_layTerm->addWidget( m_svTerm ); // profile tab QLabel *name = new QLabel(QObject::tr("Profile name"), tabprof); m_name = new QLineEdit(tabprof); QLabel *con = new QLabel(tr("Connection"), tabprof ); QLabel *term = new QLabel(tr("Terminal"), tabprof ); m_conCmb = new QComboBox( tabprof ); m_termCmb = new QComboBox( tabprof ); m_autoConnect = new QCheckBox(tr("Auto connect after load"), tabprof); // layouting QVBoxLayout *vbox3 = new QVBoxLayout(tabprof, 2); vbox3->add(name); vbox3->add(m_name); vbox3->add(con ); vbox3->add(m_conCmb ); vbox3->add(term ); vbox3->add(m_termCmb ); vbox3->add(m_autoConnect); vbox3->addStretch(1); m_showconntab = 0; tabWidget->addTab(tabprof, "", QObject::tr("Profile")); tabWidget->addTab(m_tabCon, "", QObject::tr("Connection")); tabWidget->addTab(m_tabTerm, "", QObject::tr("Terminal")); tabWidget->addTab(m_tabKey, "", QObject::tr("Special Keys")); tabWidget->setCurrentTab( tabprof ); // fill the comboboxes QStringList list = m_fact->connectionWidgets(); QStringList::Iterator it; for (it =list.begin(); it != list.end(); ++it ) { m_conCmb->insertItem( (*it) ); } list = m_fact->terminalWidgets(); for (it =list.begin(); it != list.end(); ++it ) { m_termCmb->insertItem( (*it) ); } // load profile values m_name->setText(m_prof.name()); slotKeyActivated( "Default Keyboard" ); setCurrent( m_fact->external(m_prof.ioLayerName() ), m_conCmb ); setCurrent( m_fact->external(m_prof.terminalName() ), m_termCmb ); slotConActivated( m_fact->external(m_prof.ioLayerName() ) ); slotTermActivated( m_fact->external(m_prof.terminalName() ) ); m_autoConnect->setChecked(m_prof.autoConnect()); // signal and slots - connect(m_conCmb, SIGNAL(activated(const QString& ) ), + connect(m_conCmb, SIGNAL(activated(const QString&) ), this, SLOT(slotConActivated(const QString&) ) ); - connect(m_termCmb, SIGNAL(activated(const QString& ) ), - this, SLOT(slotTermActivated(const QString& ) ) ); + connect(m_termCmb, SIGNAL(activated(const QString&) ), + this, SLOT(slotTermActivated(const QString&) ) ); } ProfileEditorDialog::~ProfileEditorDialog() { } void ProfileEditorDialog::accept() { if(profName().isEmpty()) { QMessageBox::information(this, QObject::tr("Invalid profile"), QObject::tr("Please enter a profile name.")); return; } // Save profile and plugin profile //if(plugin_plugin) plugin_plugin->save(); // Save general values m_prof.setName( profName() ); m_prof.setIOLayer( m_fact->internal(m_conCmb ->currentText() ) ); m_prof.setTerminalName( m_fact->internal(m_termCmb->currentText() ) ); m_prof.setAutoConnect( m_autoConnect->isChecked() ); if (m_con ) m_con->save( m_prof ); if (m_term ) m_term->save( m_prof ); if (m_key) m_key->save( m_prof ); QDialog::accept(); } QString ProfileEditorDialog::profName()const { return m_name->text(); } QCString ProfileEditorDialog::profType()const { /*QStringList w = m_fact->configWidgets(); for(QStringList::Iterator it = w.begin(); it != w.end(); it++) if(device_box->currentText() == m_fact->name((*it))) return (*it); */ return QCString(); } /* * we need to switch the widget */ void ProfileEditorDialog::slotConActivated( const QString& str ) { delete m_con; m_con = m_fact->newConnectionPlugin( str, m_svCon->viewport() ); if ( !m_con ) { m_con = new NoOptions( str, m_svCon->viewport(), "name"); } // FIXME ugly hack right. Right solution would be to look into the layer and see if it // supports auto connect and then set it as prefered if ( m_conCmb ->currentText() == tr("Local Console") ) { m_autoConnect->setChecked( true ); m_prof.writeEntry("Terminal", Profile::Linux ); slotTermActivated( m_fact->external (m_prof.terminalName() ) ); } else { m_prof.writeEntry("Terminal", Profile::VT102 ); slotTermActivated( m_fact->external (m_prof.terminalName() ) ); m_autoConnect->setChecked( false ); } m_con->load( m_prof ); m_svCon->addChild( m_con ); } /* * we need to switch the widget */ void ProfileEditorDialog::slotTermActivated( const QString& str ) { delete m_term; m_term = m_fact->newTerminalPlugin( str, m_svTerm->viewport() ); if ( m_term ) { m_term->load( m_prof ); m_svTerm->addChild( m_term ); } } void ProfileEditorDialog::slotKeyActivated(const QString &str) { delete m_key; m_key = m_fact->newKeyboardPlugin( str, m_tabKey ); if (m_key) { m_key->load(m_prof); m_layKey->addWidget(m_key); } } diff --git a/noncore/apps/opie-console/session.cpp b/noncore/apps/opie-console/session.cpp index 1034ede..b7f14c5 100644 --- a/noncore/apps/opie-console/session.cpp +++ b/noncore/apps/opie-console/session.cpp @@ -1,115 +1,115 @@ #include "file_layer.h" #include "emulation_handler.h" #include "session.h" Session::Session() { m_widget = 0l; m_layer = 0l; m_emu = 0l; m_transfer = 0l; } Session::Session( const QString& na, QWidgetStack* widget, IOLayer* lay) : m_name( na ), m_widget( widget ), m_layer( lay ) { // m_widLay = 0l; // m_emLay = 0l; m_emu = 0l; } Session::~Session() { delete m_layer; delete m_emu; delete m_widget; /* the widget layer should be deleted by the m_widget */ } QString Session::name()const { return m_name; } QWidgetStack* Session::widgetStack() { return m_widget; } IOLayer* Session::layer() { return m_layer; } EmulationHandler* Session::emulationHandler() { return m_emu; } QWidget* Session::widget() { if (!m_emu ) return 0l; return m_emu->widget(); } Profile Session::profile()const { return m_prof; } /* WidgetLayer* Session::emulationWidget() { return m_widLay; } */ void Session::connect() { if ( !m_layer || !m_emu ) return; QObject::connect(m_layer, SIGNAL(received(const QByteArray&) ), m_emu, SLOT(recv(const QByteArray&) ) ); QObject::connect(m_emu, SIGNAL(send(const QByteArray&) ), m_layer, SLOT(send(const QByteArray&) ) ); - QObject::connect(m_emu, SIGNAL(changeSize(int, int) ), - m_layer, SLOT(setSize(int, int) ) ); + QObject::connect(m_emu, SIGNAL(changeSize(int,int) ), + m_layer, SLOT(setSize(int,int) ) ); } void Session::disconnect() { if ( !m_layer || !m_emu ) return; QObject::disconnect(m_layer, SIGNAL(received(const QByteArray&) ), m_emu, SLOT(recv(const QByteArray&) ) ); QObject::disconnect(m_emu, SIGNAL(send(const QByteArray&) ), m_layer, SLOT(send(const QByteArray&) ) ); } void Session::setName( const QString& na){ m_name = na; } void Session::setWidgetStack( QWidgetStack* wid ) { delete m_emu; m_emu = 0l; delete m_widget; /* the EmulationLayer was destroyed... */ m_widget = wid; } void Session::setIOLayer( IOLayer* lay ) { delete m_layer; m_layer = lay; } void Session::setEmulationHandler( EmulationHandler* lay ) { delete m_emu; m_emu = lay; } void Session::setProfile( const Profile& prof ) { m_prof = prof; } /* void Session::setEmulationWidget( WidgetLayer* lay ) { delete m_widLay; m_widLay = lay; } */ void Session::setTransferDialog(QWidget *d) { m_transfer = d; } QWidget *Session::transferDialog() { return m_transfer; } diff --git a/noncore/apps/opie-console/sz_transfer.cpp b/noncore/apps/opie-console/sz_transfer.cpp index c47e73e..2f82417 100644 --- a/noncore/apps/opie-console/sz_transfer.cpp +++ b/noncore/apps/opie-console/sz_transfer.cpp @@ -1,84 +1,84 @@ #include "sz_transfer.h" #include <qfile.h> #include <stdio.h> #include <sys/termios.h> SzTransfer::SzTransfer(Type t, IOLayer *layer) : FileTransferLayer(layer), m_t(t) { } SzTransfer::~SzTransfer() { } void SzTransfer::sendFile(const QFile& file) { sendFile(file.name()); } void SzTransfer::sendFile(const QString& file) { //setcbreak(2); /* raw no echo */ proc = new OProcess; *proc << "sz"; *proc << "-v" << "-v" << "-b" << file; - connect(proc, SIGNAL(processExited(OProcess *)), + connect(proc, SIGNAL(processExited(OProcess*)), this, SLOT(sent())); - connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), - this, SLOT(SzReceivedStdout(OProcess *, char *, int))); - connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)), - this, SLOT(SzReceivedStderr(OProcess *, char *, int))); - connect(layer(), SIGNAL(received(const QByteArray &)), - this, SLOT(receivedStdin(const QByteArray &))); + connect(proc, SIGNAL(receivedStdout(OProcess*,char*,int)), + this, SLOT(SzReceivedStdout(OProcess*,char*,int))); + connect(proc, SIGNAL(receivedStderr(OProcess*,char*,int)), + this, SLOT(SzReceivedStderr(OProcess*,char*,int))); + connect(layer(), SIGNAL(received(const QByteArray&)), + this, SLOT(receivedStdin(const QByteArray&))); proc->start(OProcess::NotifyOnExit, OProcess::All); } void SzTransfer::SzReceivedStdout(OProcess *, char *buffer, int buflen) { qWarning("recieved from sz on stdout %d bytes", buflen); QByteArray data(buflen); data.fill(*buffer, buflen); for (uint i = 0; i < data.count(); i++ ) { printf("%c", buffer[i] ); } printf("\n"); // send out through the io layer layer()->send(data); } void SzTransfer::SzReceivedStderr(OProcess *, char *buffer, int length) { // parse and show data in a progress dialog/widget printf("stderr:\n"); //for (int i = 0; i < length; i++) // printf("%c", buffer[i]); //printf("\n"); } void SzTransfer::receivedStdin(const QByteArray &data) { qWarning("recieved from io_serial %d bytes", data.size()); // recieved data from the io layer goes to sz proc->writeStdin(data.data(), data.size()); } void SzTransfer::sent() { qWarning("sent file"); //setcbreak(0); /* default */ delete proc; - disconnect(layer(), SIGNAL(received(const QByteArray &)), - this, SLOT(receivedStdin(const QByteArray &))); + disconnect(layer(), SIGNAL(received(const QByteArray&)), + this, SLOT(receivedStdin(const QByteArray&))); } diff --git a/noncore/apps/opie-console/test/senderui.cpp b/noncore/apps/opie-console/test/senderui.cpp index 4a7202d..b1725db 100644 --- a/noncore/apps/opie-console/test/senderui.cpp +++ b/noncore/apps/opie-console/test/senderui.cpp @@ -1,77 +1,77 @@ #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <sys/termios.h> #include <qmultilineedit.h> #include <qsocketnotifier.h> #include "../profile.h" #include "../io_serial.h" #include "../filetransfer.h" #include "../filereceive.h" #include <opie2/oprocess.h> #include "senderui.h" SenderUI::SenderUI() : Sender() { /* we do that manually */ Profile prof; QString str = "/dev/bty0"; prof.writeEntry("Device",str ); prof.writeEntry("Baud", 19200 ); qWarning("prof " + prof.readEntry("Device") + " " + str); ser = new IOSerial(prof); - connect(ser, SIGNAL(received(const QByteArray& ) ), + connect(ser, SIGNAL(received(const QByteArray&) ), this, SLOT(got(const QByteArray&) ) ); if ( ser->open() ) qWarning("opened!!!"); else qWarning("could not open"); } SenderUI::~SenderUI() { } void SenderUI::slotSendFile() { sz = new FileTransfer(FileTransfer::SY, ser); sz->sendFile("/home/ich/bootopie-v06-13.jffs2"); connect (sz, SIGNAL(sent()), this, SLOT(fileTransComplete())); } void SenderUI::slotSend() { QCString str = MultiLineEdit1->text().utf8(); qWarning("sending: %s", str.data() ); str = str.replace( QRegExp("\n"), "\r"); ser->send( str ); } void SenderUI::got(const QByteArray& ar) { qWarning("got:"); for ( uint i = 0; i < ar.count(); i++ ) { printf("%c", ar[i] ); } printf("\n"); } void SenderUI::fileTransComplete() { qWarning("file transfer complete"); } void SenderUI::send() { } void SenderUI::slotRev(){ qWarning("Going to receive!"); FileReceive *rev = new FileReceive( FileReceive::SZ, ser ); rev->receive(); } diff --git a/noncore/apps/opie-console/transferdialog.cpp b/noncore/apps/opie-console/transferdialog.cpp index 30e7caf..d494a6c 100644 --- a/noncore/apps/opie-console/transferdialog.cpp +++ b/noncore/apps/opie-console/transferdialog.cpp @@ -1,275 +1,275 @@ #include <qlayout.h> #include <qcombobox.h> #include <qlabel.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qmessagebox.h> #include <qprogressbar.h> #include <qradiobutton.h> #include <qbuttongroup.h> #include <opie2/ofiledialog.h> #include "metafactory.h" #include "mainwindow.h" #include "transferdialog.h" TransferDialog::TransferDialog(QWidget *parent, MainWindow *mainwindow, const char *) : QDialog(parent, 0l, false), m_win(mainwindow) { m_lay = 0l; m_recvlay = 0l; QVBoxLayout *vbox, *vbox2; QHBoxLayout *hbox, *hbox2, *hbox3; QLabel *file, *mode, *progress, *status; QButtonGroup *group; QRadioButton *mode_send, *mode_receive; m_autocleanup = 0; m_running = true; group = new QButtonGroup(QObject::tr("Transfer mode"), this); mode_send = new QRadioButton(QObject::tr("Send"), group); mode_receive = new QRadioButton(QObject::tr("Receive"), group); group->insert(mode_send, id_send); group->insert(mode_receive, id_receive); vbox2 = new QVBoxLayout(group, 2); vbox2->addSpacing(10); hbox3 = new QHBoxLayout(vbox2, 2); hbox3->add(mode_send); hbox3->add(mode_receive); mode_send->setChecked(true); m_transfermode = id_send; file = new QLabel(QObject::tr("Send file"), this); mode = new QLabel(QObject::tr("Transfer protocol"), this); progress = new QLabel(QObject::tr("Progress"), this); status = new QLabel(QObject::tr("Status"), this); statusbar = new QLabel(QObject::tr("Ready"), this); statusbar->setFrameStyle(QFrame::Panel | QFrame::Sunken); protocol = new QComboBox(this); QStringList list = m_win->factory()->fileTransferLayers(); for (QStringList::Iterator it = list.begin(); it != list.end(); ++it) protocol->insertItem((*it)); filename = new QLineEdit(this); progressbar = new QProgressBar(this); progressbar->setProgress(0); selector = new QPushButton("...", this); ok = new QPushButton(QObject::tr("Start transfer"), this); cancel = new QPushButton(QObject::tr("Cancel"), this); vbox = new QVBoxLayout(this, 2); vbox->add(group); vbox->add(file); hbox = new QHBoxLayout(vbox, 0); hbox->add(filename); hbox->add(selector); vbox->add(mode); vbox->add(protocol); vbox->add(progress); vbox->add(progressbar); vbox->add(status); vbox->add(statusbar); vbox->addStretch(1); hbox2 = new QHBoxLayout(vbox, 2); hbox2->add(ok); hbox2->add(cancel); setCaption(QObject::tr("File transfer")); show(); connect(selector, SIGNAL(clicked()), SLOT(slotFilename())); connect(ok, SIGNAL(clicked()), SLOT(slotTransfer())); connect(cancel, SIGNAL(clicked()), SLOT(slotCancel())); connect(group, SIGNAL(clicked(int)), SLOT(slotMode(int))); } TransferDialog::~TransferDialog() { } void TransferDialog::slotFilename() { QString f; f = Opie::OFileDialog::getOpenFileName(0); if(!f.isNull()) filename->setText(f); } void TransferDialog::slotTransfer() { if((m_transfermode == id_send) && (filename->text().isEmpty())) { QMessageBox::information(this, QObject::tr("Attention"), QObject::tr("No file has been specified.")); return; } ok->setEnabled(false); cleanup(); m_autocleanup = 0; if(m_transfermode == id_send) statusbar->setText(QObject::tr("Sending...")); else statusbar->setText(QObject::tr("Receiving...")); if(m_transfermode == id_send) { m_lay = m_win->factory()->newFileTransfer(protocol->currentText(), m_win->currentSession()->layer()); m_lay->sendFile(filename->text()); - connect(m_lay, SIGNAL(progress(const QString&, int, int, int, int, int)), - SLOT(slotProgress(const QString&, int, int, int, int, int))); - connect(m_lay, SIGNAL(error(int, const QString&)), SLOT(slotError(int, const QString&))); + connect(m_lay, SIGNAL(progress(const QString&,int,int,int,int,int)), + SLOT(slotProgress(const QString&,int,int,int,int,int))); + connect(m_lay, SIGNAL(error(int,const QString&)), SLOT(slotError(int,const QString&))); connect(m_lay, SIGNAL(sent()), SLOT(slotSent())); } else { m_recvlay = m_win->factory()->newReceive(protocol->currentText(), m_win->currentSession()->layer()); m_recvlay->receive(); - connect(m_recvlay, SIGNAL(progress(const QString&, int, int, int, int, int)), - SLOT(slotProgress(const QString&, int, int, int, int, int))); - connect(m_recvlay, SIGNAL(error(int, const QString&)), SLOT(slotError(int, const QString&))); + connect(m_recvlay, SIGNAL(progress(const QString&,int,int,int,int,int)), + SLOT(slotProgress(const QString&,int,int,int,int,int))); + connect(m_recvlay, SIGNAL(error(int,const QString&)), SLOT(slotError(int,const QString&))); connect(m_recvlay, SIGNAL(received(const QString&)), SLOT(slotReceived(const QString&))); } } void TransferDialog::cleanup() { if(m_lay) { m_lay->cancel(); delete m_lay; m_lay = 0l; } if(m_recvlay) { m_recvlay->cancel(); delete m_recvlay; m_recvlay = 0l; } } void TransferDialog::slotCancel() { ok->setEnabled(true); statusbar->setText(QObject::tr("Ready")); if((m_lay) || (m_recvlay)) { cleanup(); if(m_autocleanup) { m_running = false; close(); } else { QMessageBox::information(this, QObject::tr("Cancelled"), QObject::tr("The file transfer has been cancelled.")); } } else { m_running = false; close(); } } void TransferDialog::slotProgress(const QString& , int progress, int , int , int, int ) { progressbar->setProgress(progress); } void TransferDialog::slotError(int error, const QString& ) { statusbar->setText(QObject::tr("Ready")); switch(error) { case FileTransferLayer::NotSupported: QMessageBox::critical(this, QObject::tr("Error"), QObject::tr("Operation not supported.")); break; case FileTransferLayer::StartError: QMessageBox::critical(this, QObject::tr("Error"), QObject::tr("Transfer could not be started.")); break; case FileTransferLayer::NoError: QMessageBox::critical(this, QObject::tr("Error"), QObject::tr("No error.")); break; case FileTransferLayer::Undefined: QMessageBox::critical(this, QObject::tr("Error"), QObject::tr("Undefined error occured.")); break; case FileTransferLayer::Incomplete: QMessageBox::critical(this, QObject::tr("Error"), QObject::tr("Incomplete transfer.")); break; case FileTransferLayer::Unknown: default: QMessageBox::critical(this, QObject::tr("Error"), QObject::tr("Unknown error occured.")); break; } m_autocleanup = 1; } void TransferDialog::slotSent() { progressbar->setProgress(100); QMessageBox::information(this, QObject::tr("Sent"), QObject::tr("File has been sent.")); ok->setEnabled(true); progressbar->setProgress(0); statusbar->setText(QObject::tr("Ready")); m_autocleanup = 1; } void TransferDialog::slotReceived(const QString& ) { progressbar->setProgress(100); QMessageBox::information(this, QObject::tr("Received"), QObject::tr("File has been received.")); //QMessageBox::information(this, QObject::tr("Sent"), QObject::tr("File has been received as %1.").arg(file)); ok->setEnabled(true); progressbar->setProgress(0); statusbar->setText(QObject::tr("Ready")); m_autocleanup = 1; } void TransferDialog::slotMode(int id) { if(id == id_send) { selector->setEnabled(true); filename->setEnabled(true); } else { selector->setEnabled(false); filename->setEnabled(false); } m_transfermode = id; } bool TransferDialog::isRunning() { return m_running; } diff --git a/noncore/apps/opie-reader/QTReaderApp.cpp b/noncore/apps/opie-reader/QTReaderApp.cpp index e759249..b0d589e 100644 --- a/noncore/apps/opie-reader/QTReaderApp.cpp +++ b/noncore/apps/opie-reader/QTReaderApp.cpp @@ -1,1186 +1,1186 @@ /********************************************************************** ** 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 "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( 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 & ) ) ); + 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( 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& ) ) ); + connect( searchEdit, SIGNAL( textChanged(const QString&) ), + this, SLOT( search(const QString&) ) ); #else - connect( searchEdit, SIGNAL( returnPressed( ) ), - this, SLOT( search( ) ) ); + 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( ) ), + 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& ) ), + connect( m_fontSelector, SIGNAL( activated(const QString&) ), this, SLOT( do_setfont(const QString&) ) ); - connect( m_fontSelector, SIGNAL( activated(int ) ), + 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&) ) ); + 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(); diff --git a/noncore/apps/opie-reader/fileBrowser.cpp b/noncore/apps/opie-reader/fileBrowser.cpp index ebd14f3..e1cde6c 100644 --- a/noncore/apps/opie-reader/fileBrowser.cpp +++ b/noncore/apps/opie-reader/fileBrowser.cpp @@ -1,266 +1,266 @@ /**************************************************************************** Derived from a file browser which was ** copyright 2001 ljp ljp@llornkcor.com Extensive modification by Tim Wentford to allow it to work in rotated mode ****************************************************************************/ #include "fileBrowser.h" #include "QtrListView.h" #include <qlineedit.h> #include <qpushbutton.h> #ifndef _WINDOWS #include <unistd.h> #endif #include <qlayout.h> #ifdef _WINDOWS #include <direct.h> #endif #include <qpe/qpeapplication.h> fileBrowser::fileBrowser( bool allownew, QWidget* parent, const char* name, bool modal, WFlags fl , const QString filter, const QString iPath ) : QDialog( parent, name, true, fl/* | WStyle_Customize | WStyle_Tool*/), filterspec(QDir::All) { // showMaximized(); if ( !name ) setName( "fileBrowser" ); /* if (parent != NULL) { #ifdef OPIE move(0,0); resize( parent->width(), parent->height() ); #else setGeometry(parent->x(), parent->y(), parent->width(), parent->height() ); #endif } */ // showFullScreen(); setCaption(tr( "Browse for file" ) ); filterStr=filter; buttonOk = new QPushButton( this, "buttonOk" ); buttonOk->setFixedSize( 25, 25 ); buttonOk->setAutoDefault( false ); buttonOk->setText( tr( "/" ) ); buttonShowHidden = new QPushButton( this, "buttonShowHidden" ); // buttonShowHidden->setFixedSize( 50, 25 ); buttonShowHidden->setText( tr( "Hidden" ) ); buttonShowHidden->setAutoDefault( false ); buttonShowHidden->setToggleButton( true ); buttonShowHidden->setOn( false ); dirLabel = new QLabel(this, "DirLabel"); dirLabel->setAlignment(AlignLeft | AlignVCenter | ExpandTabs | WordBreak); dirLabel->setText(currentDir.canonicalPath()); ListView = new QtrListView( this, "ListView" ); ListView->addColumn( tr( "Name" ) ); ListView->setSorting( 2, FALSE); ListView->addColumn( tr( "Size" ) ); ListView->setSelectionMode(QListView::Single); ListView->setAllColumnsShowFocus( TRUE ); ListView->setColumnWidthMode(0, QListView::Manual); ListView->setColumnWidthMode(1, QListView::Manual); // signals and slots connections connect( buttonShowHidden, SIGNAL( toggled(bool) ), this, SLOT( setHidden(bool) ) ); connect( buttonOk, SIGNAL( clicked() ), this, SLOT( OnRoot() ) ); - connect( ListView, SIGNAL(doubleClicked( QListViewItem*)), SLOT(listDoubleClicked(QListViewItem *)) ); - connect( ListView, SIGNAL(clicked( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); - connect( ListView, SIGNAL(OnOKButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); - connect( ListView, SIGNAL(OnCentreButton( QListViewItem*)), SLOT(listClicked(QListViewItem *)) ); + connect( ListView, SIGNAL(doubleClicked(QListViewItem*)), SLOT(listDoubleClicked(QListViewItem*)) ); + connect( ListView, SIGNAL(clicked(QListViewItem*)), SLOT(listClicked(QListViewItem*)) ); + connect( ListView, SIGNAL(OnOKButton(QListViewItem*)), SLOT(listClicked(QListViewItem*)) ); + connect( ListView, SIGNAL(OnCentreButton(QListViewItem*)), SLOT(listClicked(QListViewItem*)) ); connect( ListView, SIGNAL(OnCancelButton()), SLOT(OnCancel()) ); QVBoxLayout* grid = new QVBoxLayout(this); QHBoxLayout* hgrid = new QHBoxLayout(grid); hgrid->addWidget(dirLabel,1); hgrid->addWidget(buttonShowHidden); hgrid->addWidget(buttonOk); grid->addWidget(ListView,1); if (allownew) { m_filename = new QLineEdit(this); grid->addWidget(m_filename); connect( m_filename, SIGNAL( returnPressed() ), this, SLOT( onReturn() )); } else { m_filename = NULL; } if (QFileInfo(iPath).exists()) { currentDir.setPath(iPath); #ifdef _WINDOWS _chdir(iPath.latin1()); #else chdir(iPath.latin1()); #endif } else { currentDir.setPath(QDir::currentDirPath()); chdir(QDir::currentDirPath().latin1()); } populateList(); if (modal) QPEApplication::showDialog( this ); } void fileBrowser::resizeEvent(QResizeEvent* e) { ListView->setColumnWidth(1,(ListView->width())/4); ListView->setColumnWidth(0,ListView->width()-20-ListView->columnWidth(1)); } fileBrowser::~fileBrowser() { } void fileBrowser::populateList() { ListView->clear(); ////qDebug(currentDir.canonicalPath()); // 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 1fb2a3d..061748e 100644 --- a/noncore/apps/opie-sheet/mainwindow.cpp +++ b/noncore/apps/opie-sheet/mainwindow.cpp @@ -1,1007 +1,1007 @@ /*************************************************************************** * * * 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/resource.h> #include <qpe/qpeapplication.h> #include <qmessagebox.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(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 &))); + 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(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); 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); 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); QPEApplication::showDialog( &dialogFind ); dialogFind.exec(sheet); } diff --git a/noncore/apps/opie-sheet/sheet.cpp b/noncore/apps/opie-sheet/sheet.cpp index f303d33..d4419af 100644 --- a/noncore/apps/opie-sheet/sheet.cpp +++ b/noncore/apps/opie-sheet/sheet.cpp @@ -1,431 +1,431 @@ /*************************************************************************** * * * 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 "sheet.h" #include <qmessagebox.h> #include <math.h> #include <stdlib.h> #include <stdio.h> #include <time.h> #define DEFAULT_COL_WIDTH 50 Sheet::Sheet(int numRows, int numCols, QWidget *parent) :QTable(numRows, numCols, parent) { defaultBorders.right=defaultBorders.bottom=QPen(Qt::gray, 1, Qt::SolidLine); defaultCellData.data=""; defaultCellData.background=QBrush(Qt::white, Qt::SolidPattern); defaultCellData.alignment=(Qt::AlignmentFlags)(Qt::AlignLeft | Qt::AlignTop); defaultCellData.fontColor=Qt::black; defaultCellData.font=font(); defaultCellData.borders=defaultBorders; clicksLocked=FALSE; selectionNo=-1; setSelectionMode(QTable::Single); sheetData.setAutoDelete(TRUE); clipboardData.setAutoDelete(TRUE); for (int i=0; i<numCols; ++i) horizontalHeader()->setLabel(i, getHeaderString(i+1), DEFAULT_COL_WIDTH); - connect(this, SIGNAL(currentChanged(int, int)), this, SLOT(slotCellSelected(int, int))); - connect(this, SIGNAL(valueChanged(int, int)), this, SLOT(slotCellChanged(int, int))); + connect(this, SIGNAL(currentChanged(int,int)), this, SLOT(slotCellSelected(int,int))); + connect(this, SIGNAL(valueChanged(int,int)), this, SLOT(slotCellChanged(int,int))); } Sheet::~Sheet() { } typeCellData *Sheet::findCellData(int row, int col) { typeCellData *tempCellData; for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next()) { if (tempCellData->row==row && tempCellData->col==col) return tempCellData; } return NULL; } void Sheet::slotCellSelected(int row, int col) { typeCellData *cellData=findCellData(row, col); if (cellData) { emit currentDataChanged(cellData->data); }else emit currentDataChanged(""); } typeCellData *Sheet::createCellData(int row, int col) { if (row<0 || col<0) return NULL; typeCellData *cellData=new typeCellData; cellData->row=row; cellData->col=col; cellData->data=defaultCellData.data; cellData->borders=defaultCellData.borders; cellData->alignment=defaultCellData.alignment; cellData->font=defaultCellData.font; cellData->fontColor=defaultCellData.fontColor; cellData->background=defaultCellData.background; sheetData.append(cellData); return cellData; } void Sheet::slotCellChanged(int row, int col) { typeCellData *cellData=findCellData(row, col); if (!cellData) cellData=createCellData(row, col); if (cellData) cellData->data=text(row, col); for (cellData=sheetData.first(); cellData; cellData=sheetData.next()) { // modified by Toussis Manolis koppermind@panafonet.gr // the parser was crashing if there were no closed parenthesis. int w1,ii=0; for(w1=0;w1<=(int)text(row, col).length();w1++) { if(text(row,col)[w1]=='(') ii++; if(text(row,col)[w1]==')') ii--; }; if(ii==0) setText(cellData->row, cellData->col, dataParser(findCellName(cellData->row, cellData->col), cellData->data)); //end of modification // old was plain: //setText(cellData->row, cellData->col, dataParser(findCellName(cellData->row, cellData->col), cellData->data)); }; emit sheetModified(); } void Sheet::ReCalc(void) { typeCellData* cellData; for (cellData=sheetData.first(); cellData; cellData=sheetData.next()) { //printf("cellchanged:%d, %d\r\n",cellData->row,cellData->col); slotCellChanged(cellData->row,cellData->col); }; }; void Sheet::swapCells(int row1, int col1, int row2, int col2) { typeCellData *cellData1=findCellData(row1, col1), *cellData2=findCellData(row2, col2); if (!cellData1) cellData1=createCellData(row1, col1); if (!cellData2) cellData2=createCellData(row2, col2); if (cellData1 && cellData2) { QString tempData(cellData1->data); cellData1->data=cellData2->data; cellData2->data=tempData; setText(cellData1->row, cellData1->col, dataParser(findCellName(cellData1->row, cellData1->col), cellData1->data)); setText(cellData2->row, cellData2->col, dataParser(findCellName(cellData2->row, cellData2->col), cellData2->data)); emit sheetModified(); } } QString Sheet::getParameter(const QString ¶meters, int paramNo, bool giveError, const QString funcName) { QString params(parameters); int position; for (int i=0; i<paramNo; ++i) { position=params.find(','); if (position<0) { if (giveError) QMessageBox::critical(this, tr("Error"), tr("Too few arguments to function '"+funcName+'\'')); //printf("params:%s\r\n",parameters.ascii()); return QString(NULL); } params=params.mid(position+1); } position=params.find(','); if (position<0) return params; return params.left(position); } bool Sheet::findRange(const QString &variable1, const QString &variable2, int *row1, int *col1, int *row2, int *col2) { int row, col; if (!findRowColumn(variable1, row1, col1, FALSE) || !findRowColumn(variable2, row2, col2, FALSE)) return FALSE; if (*row1>*row2) { row=*row1; *row1=*row2; *row2=row; } if (*col1>*col2) { col=*col1; *col1=*col2; *col2=col; } return TRUE; } bool Sheet::findRowColumn(const QString &variable, int *row, int *col, bool giveError) { int position=variable.find(QRegExp("\\d")); if (position<1) { if (giveError) QMessageBox::critical(this, tr("Error"), tr("Invalid variable: '"+variable+'\'')); return FALSE; } *row=variable.mid(position).toInt()-1; *col=getHeaderColumn(variable.left(position))-1; return TRUE; } QString Sheet::calculateVariable(const QString &variable) { bool ok; printf("calculateVariable=%s,len=%d\r\n",variable.ascii(),variable.length()); if(variable.left(1)=="\"") return QString(variable.mid(1,variable.length()-2)); double tempResult=variable.toDouble(&ok); if (ok) { if(tempResult!=0.0) { return QString::number(tempResult); } else { if(variable!="0" || variable!="0.0") return QString(variable); // hereis a string variable return QString::number(tempResult); }; }; int row, col; if(findRowColumn(variable, &row, &col, FALSE)) return dataParser(variable, text(row,col)); //return (findRowColumn(variable, &row, &col, TRUE) ? dataParser(variable, text(row, col)) : 0); return QString(variable); } double Sheet::BesselI0(double x) { //Returns the modi ed Bessel function I0(x) for any real x. double ax,ans; double y; if ((ax=fabs(x)) < 3.75) { y=x/3.75; y*=y; ans=1.0+y*(3.5156229+y*(3.0899424+y*(1.2067492 +y*(0.2659732+y*(0.360768e-1+y*0.45813e-2))))); }else { y=3.75/ax; ans=(exp(ax)/sqrt(ax))*(0.39894228+y*(0.1328592e-1 +y*(0.225319e-2+y*(-0.157565e-2+y*(0.916281e-2 +y*(-0.2057706e-1+y*(0.2635537e-1+y*(-0.1647633e-1 +y*0.392377e-2)))))))); } return ans; }; double Sheet::BesselI1(double x) { double ax,ans; double y; if ((ax=fabs(x)) < 3.75) { y=x/3.75; y*=y; ans=ax*(0.5+y*(0.87890594+y*(0.51498869+y*(0.15084934 +y*(0.2658733e-1+y*(0.301532e-2+y*0.32411e-3)))))); } else { y=3.75/ax; ans=0.2282967e-1+y*(-0.2895312e-1+y*(0.1787654e-1 -y*0.420059e-2)); ans=0.39894228+y*(-0.3988024e-1+y*(-0.362018e-2 +y*(0.163801e-2+y*(-0.1031555e-1+y*ans)))); ans *= (exp(ax)/sqrt(ax)); } return x < 0.0 ? -ans : ans; }; double Sheet::BesselI(int n, double x) { double ACC=40.0; double BIGNO=1.0e10; double BIGNI=1.0e-10; int j; double bi,bim,bip,tox,ans; if (n < 2) return 0.0; if (x == 0.0) return 0.0; else { tox=2.0/fabs(x); bip=ans=0.0; bi=1.0; for (j=2*(n+(int) sqrt(ACC*n));j>0;j--) { bim=bip+j*tox*bi; bip=bi; bi=bim; if (fabs(bi) > BIGNO) { ans *= BIGNI; bi *= BIGNI; bip *= BIGNI; } if (j == n) ans=bip; } ans *= BesselI0(x)/bi; return x < 0.0 && (n & 1) ? -ans : ans; } }; double Sheet::BesselK0(double x) { double y,ans; if (x <= 2.0) { y=x*x/4.0; ans=(-log(x/2.0)*BesselI0(x))+(-0.57721566+y*(0.42278420 +y*(0.23069756+y*(0.3488590e-1+y*(0.262698e-2 +y*(0.10750e-3+y*0.74e-5)))))); } else { y=2.0/x; ans=(exp(-x)/sqrt(x))*(1.25331414+y*(-0.7832358e-1 +y*(0.2189568e-1+y*(-0.1062446e-1+y*(0.587872e-2 +y*(-0.251540e-2+y*0.53208e-3)))))); } return ans; }; double Sheet::BesselK1(double x) { double y,ans; if (x <= 2.0) { y=x*x/4.0; ans=(log(x/2.0)*BesselI1(x))+(1.0/x)*(1.0+y*(0.15443144 +y*(-0.67278579+y*(-0.18156897+y*(-0.1919402e-1 +y*(-0.110404e-2+y*(-0.4686e-4))))))); } else { y=2.0/x; ans=(exp(-x)/sqrt(x))*(1.25331414+y*(0.23498619 +y*(-0.3655620e-1+y*(0.1504268e-1+y*(-0.780353e-2 +y*(0.325614e-2+y*(-0.68245e-3))))))); } return ans; }; double Sheet::BesselK(int n, double x) { int j; double bk,bkm,bkp,tox; if (n < 2) return 0.0; tox=2.0/x; bkm=BesselK0(x); bk=BesselK1(x); for (j=1;j<n;j++) { bkp=bkm+j*tox*bk; bkm=bk; bk=bkp; } return bk; }; double Sheet::BesselJ0(double x) { double ax,z; double xx,y,ans,ans1,ans2; if ((ax=fabs(x)) < 8.0) { y=x*x; ans1=57568490574.0+y*(-13362590354.0+y*(651619640.7 +y*(-11214424.18+y*(77392.33017+y*(-184.9052456))))); ans2=57568490411.0+y*(1029532985.0+y*(9494680.718 +y*(59272.64853+y*(267.8532712+y*1.0)))); ans=ans1/ans2; } else { z=8.0/ax; y=z*z; xx=ax-0.785398164; ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4 +y*(-0.2073370639e-5+y*0.2093887211e-6))); ans2 = -0.1562499995e-1+y*(0.1430488765e-3 +y*(-0.6911147651e-5+y*(0.7621095161e-6 -y*0.934935152e-7))); ans=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2); } return ans; }; double Sheet::BesselY0(double x) { double z; double xx,y,ans,ans1,ans2; if (x < 8.0) { y=x*x; ans1 = -2957821389.0+y*(7062834065.0+y*(-512359803.6 +y*(10879881.29+y*(-86327.92757+y*228.4622733)))); ans2=40076544269.0+y*(745249964.8+y*(7189466.438 +y*(47447.26470+y*(226.1030244+y*1.0)))); ans=(ans1/ans2)+0.636619772*BesselJ0(x)*log(x); } else { z=8.0/x; y=z*z; xx=x-0.785398164; ans1=1.0+y*(-0.1098628627e-2+y*(0.2734510407e-4 +y*(-0.2073370639e-5+y*0.2093887211e-6))); ans2 = -0.1562499995e-1+y*(0.1430488765e-3 +y*(-0.6911147651e-5+y*(0.7621095161e-6 +y*(-0.934945152e-7)))); ans=sqrt(0.636619772/x)*(sin(xx)*ans1+z*cos(xx)*ans2); } return ans; }; double Sheet::BesselJ1(double x) { double ax,z; double xx,y,ans,ans1,ans2; if ((ax=fabs(x)) < 8.0) { y=x*x; ans1=x*(72362614232.0+y*(-7895059235.0+y*(242396853.1 +y*(-2972611.439+y*(15704.48260+y*(-30.16036606)))))); ans2=144725228442.0+y*(2300535178.0+y*(18583304.74 +y*(99447.43394+y*(376.9991397+y*1.0)))); ans=ans1/ans2; } else { z=8.0/ax; y=z*z; xx=ax-2.356194491; ans1=1.0+y*(0.183105e-2+y*(-0.3516396496e-4 +y*(0.2457520174e-5+y*(-0.240337019e-6)))); ans2=0.04687499995+y*(-0.2002690873e-3 +y*(0.8449199096e-5+y*(-0.88228987e-6 +y*0.105787412e-6))); ans=sqrt(0.636619772/ax)*(cos(xx)*ans1-z*sin(xx)*ans2); if (x < 0.0) ans = -ans; } return ans; }; double Sheet::BesselY1(double x) { double z; double xx,y,ans,ans1,ans2; if (x < 8.0) { y=x*x; ans1=x*(-0.4900604943e13+y*(0.1275274390e13 +y*(-0.5153438139e11+y*(0.7349264551e9 +y*(-0.4237922726e7+y*0.8511937935e4))))); ans2=0.2499580570e14+y*(0.4244419664e12 +y*(0.3733650367e10+y*(0.2245904002e8 +y*(0.1020426050e6+y*(0.3549632885e3+y))))); ans=(ans1/ans2)+0.636619772*(BesselJ1(x)*log(x)-1.0/x); } else { z=8.0/x; y=z*z; xx=x-2.356194491; ans1=1.0+y*(0.183105e-2+y*(-0.3516396496e-4 +y*(0.2457520174e-5+y*(-0.240337019e-6)))); ans2=0.04687499995+y*(-0.2002690873e-3 +y*(0.8449199096e-5+y*(-0.88228987e-6 +y*0.105787412e-6))); ans=sqrt(0.636619772/x)*(sin(xx)*ans1+z*cos(xx)*ans2); } return ans; }; double Sheet::BesselY(int n, double x) { int j; double by,bym,byp,tox; if (n < 2) return 0.0; tox=2.0/x; by=BesselY1(x); bym=BesselY0(x); for (j=1;j<n;j++) { diff --git a/noncore/apps/opie-write/mainwindow.cpp b/noncore/apps/opie-write/mainwindow.cpp index 6bb524f..90e1a70 100644 --- a/noncore/apps/opie-write/mainwindow.cpp +++ b/noncore/apps/opie-write/mainwindow.cpp @@ -1,574 +1,574 @@ /********************************************************************** ** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** ** This file is part of the Qtopia Environment. ** ** Licensees holding valid Qtopia Developer license may use this ** file in accordance with the Qtopia Developer License Agreement ** provided with the Software. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING ** THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR ** PURPOSE. ** ** email sales@trolltech.com for information about Qtopia License ** Agreements. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "mainwindow.h" #include <qpe/fileselector.h> #include <qpe/applnk.h> #include <qpe/resource.h> #include <qpe/fontdatabase.h> //#include "qspellchecker.h" #include "qtextedit.h" #include <qaction.h> #include <qtoolbar.h> #include <qtoolbutton.h> #include <qtabwidget.h> #include <qapplication.h> #include <qfontdatabase.h> #include <qcombobox.h> #include <qlineedit.h> #include <qfileinfo.h> #include <qfile.h> #include <qfiledialog.h> #include <qprinter.h> #include <qpaintdevicemetrics.h> #include <qmenubar.h> #include <qpopupmenu.h> #include <qcolordialog.h> #include <qpainter.h> #include <qstyle.h> class ButtonMenu : public QToolButton { Q_OBJECT public: ButtonMenu( QWidget *parent, const char *name=0 ) : QToolButton( parent, name ), current(0) { setPopup( new QPopupMenu( this ) ); setPopupDelay( 1 ); connect( popup(), SIGNAL(activated(int)), this, SLOT(selected(int)) ); } int insertItem(const QIconSet &icon, const QString &text, int id ) { if ( !popup()->count() ) { setIconSet( icon ); current = id; } return popup()->insertItem( icon, text, id ); } void setCurrentItem( int id ) { if ( id != current ) { current = id; setIconSet( *popup()->iconSet( id ) ); } } virtual QSize sizeHint() const { return QToolButton::sizeHint() + QSize( 4, 0 ); } signals: void activated( int id ); protected slots: void selected( int id ) { current = id; setIconSet( *popup()->iconSet( id ) ); emit activated( id ); } protected: virtual void drawButtonLabel( QPainter *p ) { p->translate( -4, 0 ); QToolButton::drawButtonLabel( p ); p->translate( 4, 0 ); } private: int current; }; //=========================================================================== MainWindow::MainWindow( QWidget *parent, const char *name, WFlags fl ) : QMainWindow( parent, name, fl ), doc( 0 ) { setRightJustification(TRUE); editorStack = new QWidgetStack( this ); fileSelector = new FileSelector( "text/html", editorStack, "fileselector" ); fileSelector->setCloseVisible( FALSE ); editorStack->addWidget( fileSelector, 0 ); editor = new Qt3::QTextEdit( editorStack ); editor->setTextFormat( Qt::RichText ); editorStack->addWidget( editor, 1 ); setupActions(); QObject::connect( fileSelector, SIGNAL(closeMe()), this, SLOT(showEditTools()) ); - QObject::connect( fileSelector, SIGNAL(fileSelected(const DocLnk &)), - this, SLOT(openFile(const DocLnk &)) ); + QObject::connect( fileSelector, SIGNAL(fileSelected(const DocLnk&)), + this, SLOT(openFile(const DocLnk&)) ); QObject::connect( fileSelector, SIGNAL(newSelected(const DocLnk&)), this, SLOT(newFile(const DocLnk&)) ); if ( fileSelector->fileCount() < 1 ) fileNew(); else { fileOpen(); } doConnections( editor ); setCentralWidget( editorStack ); } MainWindow::~MainWindow() { save(); } void MainWindow::setupActions() { setToolBarsMovable(false); tbMenu = new QToolBar( this ); tbMenu->setHorizontalStretchable( TRUE ); QMenuBar *menu = new QMenuBar( tbMenu ); tbEdit = new QToolBar( this ); QPopupMenu *file = new QPopupMenu( this ); menu->insertItem( tr("File"), file ); QPopupMenu *edit = new QPopupMenu( this ); menu->insertItem( tr("Edit"), edit ); // ### perhaps these shortcut keys should have some // IPaq keys defined??? QAction *a; a = new QAction( tr( "New" ), Resource::loadPixmap("new"), QString::null, 0, this, 0 ); connect( a, SIGNAL(activated()), this, SLOT(fileNew()) ); a->addTo( file ); a = new QAction( tr( "Open" ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); connect( a, SIGNAL(activated()), this, SLOT(fileOpen()) ); a->addTo( file ); a = new QAction( tr( "Undo" ), Resource::loadIconSet("undo"), QString::null, 0, this, "editUndo" ); connect( a, SIGNAL( activated() ), this, SLOT( editUndo() ) ); connect( editor, SIGNAL(undoAvailable(bool)), a, SLOT(setEnabled(bool)) ); a->addTo( tbEdit ); a->addTo( edit ); a = new QAction( tr( "Redo" ), Resource::loadIconSet("redo"), QString::null, 0, this, "editRedo" ); connect( a, SIGNAL( activated() ), this, SLOT( editRedo() ) ); connect( editor, SIGNAL(redoAvailable(bool)), a, SLOT(setEnabled(bool)) ); a->addTo( tbEdit ); a->addTo( edit ); edit->insertSeparator(); a = new QAction( tr( "Copy" ), Resource::loadIconSet("copy"), QString::null, 0, this, "editCopy" ); connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) ); connect( editor, SIGNAL(copyAvailable(bool)), a, SLOT(setEnabled(bool)) ); a->addTo( tbEdit ); a->addTo( edit ); a = new QAction( tr( "Cut" ), Resource::loadIconSet("cut"), QString::null, 0, this, "editCut" ); connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); connect( editor, SIGNAL(copyAvailable(bool)), a, SLOT(setEnabled(bool)) ); a->addTo( tbEdit ); a->addTo( edit ); a = new QAction( tr( "Paste" ), Resource::loadPixmap("paste"), QString::null, 0, this, "editPaste" ); connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); a->addTo( tbEdit ); a->addTo( edit ); tbFont = new QToolBar( this ); tbFont->setLabel( "Font Actions" ); tbFont->setHorizontalStretchable(TRUE); comboFont = new QComboBox( FALSE, tbFont ); FontDatabase db; QStringList f= db.families(); comboFont->insertStringList( db.families() ); - connect( comboFont, SIGNAL( activated( const QString & ) ), - this, SLOT( textFamily( const QString & ) ) ); + connect( comboFont, SIGNAL( activated(const QString&) ), + this, SLOT( textFamily(const QString&) ) ); comboFont->setCurrentItem( comboFont->listBox()->index( comboFont->listBox()->findItem( QApplication::font().family() ) ) ); comboFont->setMaximumWidth(90); comboSize = new QComboBox( TRUE, tbFont ); QValueList<int> sizes = db.standardSizes(); QValueList<int>::Iterator it = sizes.begin(); for ( ; it != sizes.end(); ++it ) comboSize->insertItem( QString::number( *it ) ); - connect( comboSize, SIGNAL( activated( const QString & ) ), - this, SLOT( textSize( const QString & ) ) ); + connect( comboSize, SIGNAL( activated(const QString&) ), + this, SLOT( textSize(const QString&) ) ); comboSize->lineEdit()->setText( QString::number( QApplication::font().pointSize() ) ); comboSize->setFixedWidth( 38 ); tbStyle = new QToolBar( this ); tbStyle->setLabel( "Style Actions" ); actionTextBold = new QAction( tr( "Bold" ), Resource::loadPixmap("bold"), QString::null, CTRL + Key_B, this, "textBold" ); connect( actionTextBold, SIGNAL( activated() ), this, SLOT( textBold() ) ); actionTextBold->addTo( tbStyle ); actionTextBold->setToggleAction( TRUE ); actionTextItalic = new QAction( tr( "Italic" ), Resource::loadPixmap("italic"), tr( "&Italic" ), CTRL + Key_I, this, "textItalic" ); connect( actionTextItalic, SIGNAL( activated() ), this, SLOT( textItalic() ) ); actionTextItalic->addTo( tbStyle ); actionTextItalic->setToggleAction( TRUE ); actionTextUnderline = new QAction( tr( "Underline" ), Resource::loadPixmap("underline"), tr( "&Underline" ), CTRL + Key_U, this, "textUnderline" ); connect( actionTextUnderline, SIGNAL( activated() ), this, SLOT( textUnderline() ) ); actionTextUnderline->addTo( tbStyle ); actionTextUnderline->setToggleAction( TRUE ); alignMenu = new ButtonMenu( tbStyle ); alignMenu->insertItem( Resource::loadPixmap("left"), tr("Left"), AlignLeft ); alignMenu->insertItem( Resource::loadPixmap("center"), tr("Center"), AlignCenter ); alignMenu->insertItem( Resource::loadPixmap("right"), tr("Right"), AlignRight ); alignMenu->insertItem( Resource::loadPixmap("opie-write/justify"), tr("Full"), Qt3::AlignJustify ); connect( alignMenu, SIGNAL(activated(int)), this, SLOT(textAlign(int)) ); } Qt3::QTextEdit *MainWindow::currentEditor() const { return editor; } void MainWindow::doConnections( Qt3::QTextEdit *e ) { - connect( e, SIGNAL( currentFontChanged( const QFont & ) ), - this, SLOT( fontChanged( const QFont & ) ) ); - connect( e, SIGNAL( currentColorChanged( const QColor & ) ), - this, SLOT( colorChanged( const QColor & ) ) ); - connect( e, SIGNAL( currentAlignmentChanged( int ) ), - this, SLOT( alignmentChanged( int ) ) ); + connect( e, SIGNAL( currentFontChanged(const QFont&) ), + this, SLOT( fontChanged(const QFont&) ) ); + connect( e, SIGNAL( currentColorChanged(const QColor&) ), + this, SLOT( colorChanged(const QColor&) ) ); + connect( e, SIGNAL( currentAlignmentChanged(int) ), + this, SLOT( alignmentChanged(int) ) ); } void MainWindow::updateFontSizeCombo( const QFont &f ) { comboSize->clear(); FontDatabase fdb; QValueList<int> sizes = fdb.pointSizes( f.family() ); QValueList<int>::Iterator it = sizes.begin(); for ( ; it != sizes.end(); ++it ) comboSize->insertItem( QString::number( *it ) ); } void MainWindow::editUndo() { if ( !currentEditor() ) return; currentEditor()->undo(); } void MainWindow::editRedo() { if ( !currentEditor() ) return; currentEditor()->redo(); } void MainWindow::editCut() { if ( !currentEditor() ) return; currentEditor()->cut(); } void MainWindow::editCopy() { if ( !currentEditor() ) return; currentEditor()->copy(); } void MainWindow::editPaste() { if ( !currentEditor() ) return; currentEditor()->paste(); } void MainWindow::textBold() { if ( !currentEditor() ) return; currentEditor()->setBold( actionTextBold->isOn() ); } void MainWindow::textUnderline() { if ( !currentEditor() ) return; currentEditor()->setUnderline( actionTextUnderline->isOn() ); } void MainWindow::textItalic() { if ( !currentEditor() ) return; currentEditor()->setItalic( actionTextItalic->isOn() ); } void MainWindow::textFamily( const QString &f ) { if ( !currentEditor() ) return; currentEditor()->setFamily( f ); currentEditor()->viewport()->setFocus(); } void MainWindow::textSize( const QString &p ) { if ( !currentEditor() ) return; currentEditor()->setPointSize( p.toInt() ); currentEditor()->viewport()->setFocus(); } void MainWindow::textStyle( int i ) { if ( !currentEditor() ) return; if ( i == 0 ) currentEditor()->setParagType( Qt3::QStyleSheetItem::DisplayBlock, Qt3::QStyleSheetItem::ListDisc ); else if ( i == 1 ) currentEditor()->setParagType( Qt3::QStyleSheetItem::DisplayListItem, Qt3::QStyleSheetItem::ListDisc ); else if ( i == 2 ) currentEditor()->setParagType( Qt3::QStyleSheetItem::DisplayListItem, Qt3::QStyleSheetItem::ListCircle ); else if ( i == 3 ) currentEditor()->setParagType( Qt3::QStyleSheetItem::DisplayListItem, Qt3::QStyleSheetItem::ListSquare ); else if ( i == 4 ) currentEditor()->setParagType( Qt3::QStyleSheetItem::DisplayListItem, Qt3::QStyleSheetItem::ListDecimal ); else if ( i == 5 ) currentEditor()->setParagType( Qt3::QStyleSheetItem::DisplayListItem, Qt3::QStyleSheetItem::ListLowerAlpha ); else if ( i == 6 ) currentEditor()->setParagType( Qt3::QStyleSheetItem::DisplayListItem, Qt3::QStyleSheetItem::ListUpperAlpha ); currentEditor()->viewport()->setFocus(); } void MainWindow::textAlign( int a ) { if ( !currentEditor() ) return; editor->setAlignment( a ); } void MainWindow::fontChanged( const QFont &f ) { comboFont->setCurrentItem( comboFont->listBox()->index( comboFont->listBox()->findItem( f.family() ) ) ); updateFontSizeCombo( f ); comboSize->lineEdit()->setText( QString::number( f.pointSize() ) ); actionTextBold->setOn( f.bold() ); actionTextItalic->setOn( f.italic() ); actionTextUnderline->setOn( f.underline() ); } void MainWindow::colorChanged( const QColor & ) { } void MainWindow::alignmentChanged( int a ) { if ( ( a == Qt3::AlignAuto ) || ( a & AlignLeft )) { alignMenu->setCurrentItem(AlignLeft); } else if ( ( a & AlignCenter ) ) { alignMenu->setCurrentItem(AlignCenter); } else if ( ( a & AlignRight ) ) { alignMenu->setCurrentItem(AlignRight); } else if ( ( a & Qt3::AlignJustify ) ) { alignMenu->setCurrentItem(Qt3::AlignJustify); } } void MainWindow::editorChanged( QWidget * ) { if ( !currentEditor() ) return; fontChanged( currentEditor()->font() ); colorChanged( currentEditor()->color() ); alignmentChanged( currentEditor()->alignment() ); } void MainWindow::fileOpen() { save(); editorStack->raiseWidget( fileSelector ); fileSelector->reread(); hideEditTools(); fileSelector->setNewVisible( TRUE ); clear(); updateCaption(); } void MainWindow::fileRevert() { qDebug( "QMainWindow::fileRevert needs to be done" ); } void MainWindow::fileNew() { editor->setTextFormat( Qt::RichText ); save(); newFile(DocLnk()); } void MainWindow::insertTable() { qDebug( "MainWindow::insertTable() needs to be done" ); } void MainWindow::newFile( const DocLnk &dl ) { DocLnk nf = dl; nf.setType( "text/html" ); clear(); editorStack->raiseWidget( editor ); editor->viewport()->setFocus(); doc = new DocLnk( nf ); updateCaption(); } void MainWindow::openFile( const DocLnk &dl ) { FileManager fm; QString txt; if ( !fm.loadFile( dl, txt ) ) qDebug( "couldn't open file" ); clear(); editorStack->raiseWidget( editor ); editor->viewport()->setFocus(); doc = new DocLnk( dl ); editor->setText( txt ); editor->setModified( FALSE ); updateCaption(); } void MainWindow::showEditTools( void ) { tbMenu->show(); tbEdit->show(); tbFont->show(); tbStyle->show(); } void MainWindow::hideEditTools( void ) { // let's reset the buttons... actionTextBold->setOn( FALSE ); actionTextItalic->setOn( FALSE ); actionTextUnderline->setOn( FALSE ); //comboFont->setCurrentText( QApplication::font().family() ); comboSize->lineEdit()->setText( QString::number(QApplication::font().pointSize() ) ); tbMenu->hide(); tbEdit->hide(); tbFont->hide(); tbStyle->hide(); } void MainWindow::save() { if ( !doc ) return; if ( !editor->isModified() ) return; QString rt = editor->text(); // quick hack to get around formatting... editor->setTextFormat( Qt::PlainText ); QString pt = editor->text(); editor->setTextFormat( Qt::RichText ); 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 MainWindow::clear() { delete doc; doc = 0; editor->clear(); } void MainWindow::updateCaption() { if ( !doc ) setCaption( tr("Rich Text Editor") ); else { QString s = doc->name(); if ( s.isEmpty() ) s = tr( "Unnamed" ); setCaption( s + " - " + tr("Rich Text Editor") ); } } void MainWindow::closeEvent( QCloseEvent *e ) { if ( editorStack->visibleWidget() == editor ) { // call fileOpen instead, don't close it fileOpen(); e->ignore(); } else { e->accept(); } } #include "mainwindow.moc" diff --git a/noncore/apps/opie-write/qtextedit.cpp b/noncore/apps/opie-write/qtextedit.cpp index 27dd515..73b7b7b 100644 --- a/noncore/apps/opie-write/qtextedit.cpp +++ b/noncore/apps/opie-write/qtextedit.cpp @@ -296,770 +296,770 @@ static bool block_set_alignment = FALSE; Use setSelection() to select text. The setSelectionAttributes() function is used to indicate how selected text should be displayed. Use hasSelectedText() to find out if any text is selected. The currently selected text's position is available using getSelection() and the selected text itself is returned by selectedText(). The selection can be copied to the clipboard with copy(), or cut to the clipboard with cut(). It can be deleted with removeSelectedText(). The entire text can be selected (or unselected) using selectAll(). QTextEdit supports multiple selections. Most of the selection functions operate on the default selection, selection 0. If the user presses a non-selecting key, e.g. a cursor key without also holding down Shift, all selections are cleared. Set and get the position of the cursor with setCursorPosition() and getCursorPosition() respectively. When the cursor is moved, the signals currentFontChanged(), currentColorChanged() and currentAlignmentChanged() are emitted to reflect the font, color and alignment at the new cursor position. If the text changes, the textChanged() signal is emitted, and if the user inserts a new line by pressing Return or Enter, returnPressed() is emitted. The isModified() function will return TRUE if the text has been modified. QTextEdit provides command-based undo and redo. To set the depth of the command history use setUndoDepth() which defaults to 100 steps. To undo or redo the last operation call undo() or redo(). The signals undoAvailable() and redoAvailable() indicate whether the undo and redo operations can be executed. The indent() function is used to reindent a paragraph. It is useful for code editors, for example in <em>Qt Designer</em>'s code editor \e{Ctrl+I} invokes the indent() function. \section2 Editing key bindings The list of key-bindings which are implemented for editing: \table \header \i Keypresses \i Action \row \i \e{Backspace} \i Delete the character to the left of the cursor \row \i \e{Delete} \i Delete the character to the right of the cursor \row \i \e{Ctrl+A} \i Move the cursor to the beginning of the line \row \i \e{Ctrl+B} \i Move the cursor one character left \row \i \e{Ctrl+C} \i Copy the marked text to the clipboard (also \e{Ctrl+Insert} under Windows) \row \i \e{Ctrl+D} \i Delete the character to the right of the cursor \row \i \e{Ctrl+E} \i Move the cursor to the end of the line \row \i \e{Ctrl+F} \i Move the cursor one character right \row \i \e{Ctrl+H} \i Delete the character to the left of the cursor \row \i \e{Ctrl+K} \i Delete to end of line \row \i \e{Ctrl+N} \i Move the cursor one line down \row \i \e{Ctrl+P} \i Move the cursor one line up \row \i \e{Ctrl+V} \i Paste the clipboard text into line edit (also \e{Shift+Insert} under Windows) \row \i \e{Ctrl+X} \i Cut the marked text, copy to clipboard (also \e{Shift+Delete} under Windows) \row \i \e{Ctrl+Z} \i Undo the last operation \row \i \e{Ctrl+Y} \i Redo the last operation \row \i \e{LeftArrow} \i Move the cursor one character left \row \i \e{Ctrl+LeftArrow} \i Move the cursor one word left \row \i \e{RightArrow} \i Move the cursor one character right \row \i \e{Ctrl+RightArrow} \i Move the cursor one word right \row \i \e{UpArrow} \i Move the cursor one line up \row \i \e{Ctrl+UpArrow} \i Move the cursor one word up \row \i \e{DownArrow} \i Move the cursor one line down \row \i \e{Ctrl+Down Arrow} \i Move the cursor one word down \row \i \e{PageUp} \i Move the cursor one page up \row \i \e{PageDown} \i Move the cursor one page down \row \i \e{Home} \i Move the cursor to the beginning of the line \row \i \e{Ctrl+Home} \i Move the cursor to the beginning of the text \row \i \e{End} \i Move the cursor to the end of the line \row \i \e{Ctrl+End} \i Move the cursor to the end of the text \row \i \e{Shift+Wheel} \i Scroll the page horizontally (the Wheel is the mouse wheel) \row \i \e{Ctrl+Wheel} \i Zoom the text \endtable To select (mark) text hold down the Shift key whilst pressing one of the movement keystrokes, for example, <i>Shift+Right Arrow</i> will select the character to the right, and <i>Shift+Ctrl+Right Arrow</i> will select the word to the right, etc. By default the text edit widget operates in insert mode so all text that the user enters is inserted into the text edit and any text to the right of the cursor is moved out of the way. The mode can be changed to overwrite, where new text overwrites any text to the right of the cursor, using setOverwriteMode(). */ /*! \enum QTextEdit::KeyboardAction This enum is used by doKeyboardAction() to specify which action should be executed: \value ActionBackspace Delete the character to the left of the cursor. \value ActionDelete Delete the character to the right of the cursor. \value ActionReturn Split the paragraph at the cursor position. \value ActionKill If the cursor is not at the end of the paragraph, delete the text from the cursor position until the end of the paragraph. If the cursor is at the end of the paragraph, delete the hard line break at the end of the paragraph - this will cause this paragraph to be joined with the following paragraph. */ /*! \enum QTextEdit::VerticalAlignment This enum is used to set the vertical alignment of the text. \value AlignNormal Normal alignment \value AlignSuperScript Superscript \value AlignSubScript Subscript */ /*! \fn void QTextEdit::copyAvailable (bool yes) This signal is emitted when text is selected or de-selected in the text edit. When text is selected this signal will be emitted with \a yes set to TRUE. If no text has been selected or if the selected text is de-selected this signal is emitted with \a yes set to FALSE. If \a yes is TRUE then copy() can be used to copy the selection to the clipboard. If \a yes is FALSE then copy() does nothing. \sa selectionChanged() */ /*! \fn void QTextEdit::textChanged() This signal is emitted whenever the text in the text edit changes. \sa setText() append() */ /*! \fn void QTextEdit::selectionChanged() This signal is emitted whenever the selection changes. \sa setSelection() copyAvailable() */ /*! \fn QTextDocument *QTextEdit::document() const \internal This function returns the QTextDocument which is used by the text edit. */ /*! \fn void QTextEdit::setDocument( QTextDocument *doc ) \internal This function sets the QTextDocument which should be used by the text edit to \a doc. This can be used, for example, if you want to display a document using multiple views. You would create a QTextDocument and set it to the text edits which should display it. You would need to connect to the textChanged() and selectionChanged() signals of all the text edits and update them all accordingly (preferably with a slight delay for efficiency reasons). */ /*! \enum QTextEdit::CursorAction This enum is used by moveCursor() to specify in which direction the cursor should be moved: \value MoveBackward Moves the cursor one character backward \value MoveWordBackward Moves the cursor one word backward \value MoveForward Moves the cursor one character forward \value MoveWordForward Moves the cursor one word forward \value MoveUp Moves the cursor up one line \value MoveDown Moves the cursor down one line \value MoveLineStart Moves the cursor to the beginning of the line \value MoveLineEnd Moves the cursor to the end of the line \value MoveHome Moves the cursor to the beginning of the document \value MoveEnd Moves the cursor to the end of the document \value MovePgUp Moves the cursor one page up \value MovePgDown Moves the cursor one page down */ /*! \property QTextEdit::overwriteMode \brief the text edit's overwrite mode If FALSE (the default) characters entered by the user are inserted with any characters to the right being moved out of the way. If TRUE, the editor is in overwrite mode, i.e. characters entered by the user overwrite any characters to the right of the cursor position. */ /*! \fn void QTextEdit::setCurrentFont( const QFont &f ) Sets the font of the current format to \a f. \sa font() setPointSize() setFamily() */ /*! \property QTextEdit::undoDepth \brief the depth of the undo history The maximum number of steps in the undo/redo history. The default is 100. \sa undo() redo() */ /*! \fn void QTextEdit::undoAvailable( bool yes ) This signal is emitted when the availability of undo changes. If \a yes is TRUE, then undo() will work until undoAvailable( FALSE ) is next emitted. \sa undo() undoDepth() */ /*! \fn void QTextEdit::modificationChanged( bool m ) This signal is emitted when the modification of the document changed. If \a m is TRUE, the document was modified, otherwise the modification state has been reset to unmodified. \sa modified */ /*! \fn void QTextEdit::redoAvailable( bool yes ) This signal is emitted when the availability of redo changes. If \a yes is TRUE, then redo() will work until redoAvailable( FALSE ) is next emitted. \sa redo() undoDepth() */ /*! \fn void QTextEdit::currentFontChanged( const QFont &f ) This signal is emitted if the font of the current format has changed. The new font is \a f. \sa setCurrentFont() */ /*! \fn void QTextEdit::currentColorChanged( const QColor &c ) This signal is emitted if the color of the current format has changed. The new color is \a c. \sa setColor() */ /*! \fn void QTextEdit::currentVerticalAlignmentChanged( VerticalAlignment a ) This signal is emitted if the vertical alignment of the current format has changed. The new vertical alignment is \a a. \sa setVerticalAlignment() */ /*! \fn void QTextEdit::currentAlignmentChanged( int a ) This signal is emitted if the alignment of the current paragraph has changed. The new alignment is \a a. \sa setAlignment() */ /*! \fn void QTextEdit::cursorPositionChanged( QTextCursor *c ) This signal is emitted if the position of the cursor changed. \a c points to the text cursor object. \sa setCursorPosition() */ /*! \overload void QTextEdit::cursorPositionChanged( int para, int pos ) This signal is emitted if the position of the cursor changed. \a para contains the paragraph index and \a pos contains the character position within the paragraph. \sa setCursorPosition() */ /*! \fn void QTextEdit::returnPressed() This signal is emitted if the user pressed the Return or the Enter key. */ /*! \fn QTextCursor *QTextEdit::textCursor() const Returns the text edit's text cursor. \warning QTextCursor is not in the public API, but in special circumstances you might wish to use it. */ /*! Constructs an empty QTextEdit with parent \a parent and name \a name. */ QTextEdit::QTextEdit( QWidget *parent, const char *name ) : QScrollView( parent, name, WStaticContents | WRepaintNoErase | WResizeNoErase ), doc( new QTextDocument( 0 ) ), undoRedoInfo( doc ) { init(); } /*! Constructs a QTextEdit with parent \a parent and name \a name. The text edit will display the text \a text using context \a context. The \a context is a path which the text edit's QMimeSourceFactory uses to resolve the locations of files and images. It is passed to the mimeSourceFactory() when quering data. For example if the text contains an image tag, \c{<img src="image.png">}, and the context is "path/to/look/in", the QMimeSourceFactory will try to load the image from "path/to/look/in/image.png". If the tag was \c{<img src="/image.png">}, the context will not be used (because QMimeSourceFactory recognizes that we have used an absolute path) and will try to load "/image.png". The context is applied in exactly the same way to \e hrefs, for example, \c{<a href="target.html">Target</a>}, would resolve to "path/to/look/in/target.html". */ QTextEdit::QTextEdit( const QString& text, const QString& context, QWidget *parent, const char *name) : QScrollView( parent, name, WStaticContents | WRepaintNoErase | WResizeNoErase ), doc( new QTextDocument( 0 ) ), undoRedoInfo( doc ) { init(); setText( text, context ); } /*! \reimp */ QTextEdit::~QTextEdit() { delete undoRedoInfo.d; undoRedoInfo.d = 0; delete cursor; delete doc; delete d; } void QTextEdit::init() { setFrameStyle( Sunken ); undoEnabled = TRUE; readonly = TRUE; setReadOnly( FALSE ); d = new QTextEditPrivate; - connect( doc, SIGNAL( minimumWidthChanged( int ) ), - this, SLOT( documentWidthChanged( int ) ) ); + connect( doc, SIGNAL( minimumWidthChanged(int) ), + this, SLOT( documentWidthChanged(int) ) ); mousePressed = FALSE; inDoubleClick = FALSE; modified = FALSE; onLink = QString::null; overWrite = FALSE; wrapMode = WidgetWidth; wrapWidth = -1; wPolicy = AtWhiteSpace; inDnD = FALSE; doc->setFormatter( new QTextFormatterBreakWords ); doc->formatCollection()->defaultFormat()->setFont( QScrollView::font() ); doc->formatCollection()->defaultFormat()->setColor( colorGroup().color( QColorGroup::Text ) ); currentFormat = doc->formatCollection()->defaultFormat(); currentAlignment = Qt3::AlignAuto; viewport()->setBackgroundMode( PaletteBase ); viewport()->setAcceptDrops( TRUE ); resizeContents( 0, doc->lastParagraph() ? ( doc->lastParagraph()->paragId() + 1 ) * doc->formatCollection()->defaultFormat()->height() : 0 ); setKeyCompression( TRUE ); viewport()->setMouseTracking( TRUE ); #ifndef QT_NO_CURSOR viewport()->setCursor( isReadOnly() ? arrowCursor : ibeamCursor ); #endif cursor = new QTextCursor( doc ); formatTimer = new QTimer( this ); connect( formatTimer, SIGNAL( timeout() ), this, SLOT( formatMore() ) ); lastFormatted = doc->firstParagraph(); scrollTimer = new QTimer( this ); connect( scrollTimer, SIGNAL( timeout() ), this, SLOT( autoScrollTimerDone() ) ); interval = 0; changeIntervalTimer = new QTimer( this ); connect( changeIntervalTimer, SIGNAL( timeout() ), this, SLOT( doChangeInterval() ) ); cursorVisible = TRUE; blinkTimer = new QTimer( this ); connect( blinkTimer, SIGNAL( timeout() ), this, SLOT( blinkCursor() ) ); #ifndef QT_NO_DRAGANDDROP dragStartTimer = new QTimer( this ); connect( dragStartTimer, SIGNAL( timeout() ), this, SLOT( startDrag() ) ); #endif formatMore(); blinkCursorVisible = FALSE; viewport()->setFocusProxy( this ); viewport()->setFocusPolicy( WheelFocus ); viewport()->installEventFilter( this ); installEventFilter( this ); } void QTextEdit::paintDocument( bool drawAll, QPainter *p, int cx, int cy, int cw, int ch ) { bool drawCur = hasFocus() || viewport()->hasFocus(); if ( hasSelectedText() || isReadOnly() || !cursorVisible ) drawCur = FALSE; QColorGroup g = colorGroup(); if ( doc->paper() ) g.setBrush( QColorGroup::Base, *doc->paper() ); if ( contentsY() < doc->y() ) { p->fillRect( contentsX(), contentsY(), visibleWidth(), doc->y(), g.brush( QColorGroup::Base ) ); } if ( drawAll && doc->width() - contentsX() < cx + cw ) { p->fillRect( doc->width() - contentsX(), cy, cx + cw - doc->width() + contentsX(), ch, g.brush( QColorGroup::Base ) ); } p->setBrushOrigin( -contentsX(), -contentsY() ); lastFormatted = doc->draw( p, cx, cy, cw, ch, g, !drawAll, drawCur, cursor ); if ( lastFormatted == doc->lastParagraph() ) resizeContents( contentsWidth(), doc->height() ); if ( contentsHeight() < visibleHeight() && ( !doc->lastParagraph() || doc->lastParagraph()->isValid() ) && drawAll ) p->fillRect( 0, contentsHeight(), visibleWidth(), visibleHeight() - contentsHeight(), g.brush( QColorGroup::Base ) ); } /*! \reimp */ void QTextEdit::drawContents( QPainter *p, int cx, int cy, int cw, int ch ) { paintDocument( TRUE, p, cx, cy, cw, ch ); int v; p->setPen( foregroundColor() ); if ( document()->isPageBreakEnabled() && ( v = document()->flow()->pageSize() ) > 0 ) { int l = int(cy / v) * v; while ( l < cy + ch ) { p->drawLine( cx, l, cx + cw - 1, l ); l += v; } } } /*! \reimp */ void QTextEdit::drawContents( QPainter * ) { } /*! \reimp */ bool QTextEdit::event( QEvent *e ) { if ( e->type() == QEvent::AccelOverride && !isReadOnly() ) { QKeyEvent* ke = (QKeyEvent*) e; if ( ke->state() == NoButton || ke->state() == Keypad ) { if ( ke->key() < Key_Escape ) { ke->accept(); } else { switch ( ke->key() ) { case Key_Return: case Key_Enter: case Key_Delete: case Key_Home: case Key_End: case Key_Backspace: ke->accept(); default: break; } } } else if ( ke->state() & ControlButton ) { switch ( ke->key() ) { // Those are too frequently used for application functionality /* case Key_A: case Key_B: case Key_D: case Key_E: case Key_F: case Key_H: case Key_I: case Key_K: case Key_N: case Key_P: case Key_T: */ case Key_C: case Key_V: case Key_X: case Key_Y: case Key_Z: case Key_Left: case Key_Right: case Key_Up: case Key_Down: case Key_Home: case Key_End: case Key_Tab: #if defined (Q_WS_WIN) case Key_Insert: case Key_Delete: #endif ke->accept(); default: break; } } else { switch ( ke->key() ) { #if defined (Q_WS_WIN) case Key_Insert: ke->accept(); #endif default: break; } } } if ( e->type() == QEvent::Show ) { if ( d->ensureCursorVisibleInShowEvent ) { sync(); ensureCursorVisible(); d->ensureCursorVisibleInShowEvent = FALSE; } if ( !d->scrollToAnchor.isEmpty() ) { scrollToAnchor( d->scrollToAnchor ); d->scrollToAnchor = QString::null; } } return QWidget::event( e ); } /*! Processes the key event, \a e. By default key events are used to provide keyboard navigation and text editing. */ void QTextEdit::keyPressEvent( QKeyEvent *e ) { changeIntervalTimer->stop(); interval = 10; bool unknown = FALSE; if ( isReadOnly() ) { if ( !handleReadOnlyKeyEvent( e ) ) QScrollView::keyPressEvent( e ); changeIntervalTimer->start( 100, TRUE ); return; } bool selChanged = FALSE; for ( int i = 1; i < doc->numSelections(); ++i ) // start with 1 as we don't want to remove the Standard-Selection selChanged = doc->removeSelection( i ) || selChanged; if ( selChanged ) { cursor->paragraph()->document()->nextDoubleBuffered = TRUE; repaintChanged(); } bool clearUndoRedoInfo = TRUE; switch ( e->key() ) { case Key_Left: case Key_Right: { // a bit hacky, but can't change this without introducing new enum values for move and keeping the // correct semantics and movement for BiDi and non BiDi text. CursorAction a; if ( cursor->paragraph()->string()->isRightToLeft() == (e->key() == Key_Right) ) a = e->state() & ControlButton ? MoveWordBackward : MoveBackward; else a = e->state() & ControlButton ? MoveWordForward : MoveForward; moveCursor( a, e->state() & ShiftButton ); break; } case Key_Up: moveCursor( e->state() & ControlButton ? MovePgUp : MoveUp, e->state() & ShiftButton ); break; case Key_Down: moveCursor( e->state() & ControlButton ? MovePgDown : MoveDown, e->state() & ShiftButton ); break; case Key_Home: moveCursor( e->state() & ControlButton ? MoveHome : MoveLineStart, e->state() & ShiftButton ); break; case Key_End: moveCursor( e->state() & ControlButton ? MoveEnd : MoveLineEnd, e->state() & ShiftButton ); break; case Key_Prior: moveCursor( MovePgUp, e->state() & ShiftButton ); break; case Key_Next: moveCursor( MovePgDown, e->state() & ShiftButton ); break; case Key_Return: case Key_Enter: if ( doc->hasSelection( QTextDocument::Standard, FALSE ) ) removeSelectedText(); if ( textFormat() == Qt::RichText && ( e->state() & ControlButton ) ) { // Ctrl-Enter inserts a line break in rich text mode insert( QString( QChar( 0x2028) ), TRUE, FALSE, TRUE ); } else { #ifndef QT_NO_CURSOR viewport()->setCursor( isReadOnly() ? arrowCursor : ibeamCursor ); #endif clearUndoRedoInfo = FALSE; doKeyboardAction( ActionReturn ); emit returnPressed(); } break; case Key_Delete: #if defined (Q_WS_WIN) if ( e->state() & ShiftButton ) { cut(); break; } else #endif if ( doc->hasSelection( QTextDocument::Standard, TRUE ) ) { removeSelectedText(); break; } doKeyboardAction( ActionDelete ); clearUndoRedoInfo = FALSE; break; case Key_Insert: if ( e->state() & ShiftButton ) paste(); #if defined (Q_WS_WIN) else if ( e->state() & ControlButton ) copy(); #endif break; case Key_Backspace: if ( doc->hasSelection( QTextDocument::Standard, TRUE ) ) { removeSelectedText(); break; } doKeyboardAction( ActionBackspace ); clearUndoRedoInfo = FALSE; break; case Key_F16: // Copy key on Sun keyboards copy(); break; case Key_F18: // Paste key on Sun keyboards paste(); break; case Key_F20: // Cut key on Sun keyboards cut(); break; default: { if ( e->text().length() && ( !( e->state() & ControlButton ) && !( e->state() & AltButton ) || ( ( e->state() & ControlButton | AltButton ) == (ControlButton|AltButton) ) ) && ( !e->ascii() || e->ascii() >= 32 || e->text() == "\t" ) ) { clearUndoRedoInfo = FALSE; if ( e->key() == Key_Tab ) { if ( textFormat() == Qt::RichText && cursor->paragraph()->isListItem() ) { clearUndoRedo(); undoRedoInfo.type = UndoRedoInfo::Style; undoRedoInfo.id = cursor->paragraph()->paragId(); undoRedoInfo.eid = undoRedoInfo.id; undoRedoInfo.styleInformation = QTextStyleCommand::readStyleInformation( doc, undoRedoInfo.id, undoRedoInfo.eid ); cursor->paragraph()->setListDepth( cursor->paragraph()->listDepth() +1 ); clearUndoRedo(); drawCursor( FALSE ); repaintChanged(); drawCursor( TRUE ); break; } } if ( textFormat() == Qt::RichText && !cursor->paragraph()->isListItem() ) { if ( cursor->index() == 0 && ( e->text()[0] == '-' || e->text()[0] == '*' ) ) { clearUndoRedo(); undoRedoInfo.type = UndoRedoInfo::Style; undoRedoInfo.id = cursor->paragraph()->paragId(); undoRedoInfo.eid = undoRedoInfo.id; undoRedoInfo.styleInformation = QTextStyleCommand::readStyleInformation( doc, undoRedoInfo.id, undoRedoInfo.eid ); setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListDisc ); clearUndoRedo(); drawCursor( FALSE ); repaintChanged(); drawCursor( TRUE ); break; } } if ( overWrite && !cursor->atParagEnd() ) cursor->remove(); QString t = e->text(); QTextParagraph *p = cursor->paragraph(); if ( p && p->string() && p->string()->isRightToLeft() ) { QChar *c = (QChar *)t.unicode(); int l = t.length(); while( l-- ) { if ( c->mirrored() ) *c = c->mirroredChar(); c++; } } insert( t, TRUE, FALSE, TRUE ); break; } else if ( e->state() & ControlButton ) { switch ( e->key() ) { case Key_C: case Key_F16: // Copy key on Sun keyboards copy(); break; case Key_V: paste(); break; case Key_X: cut(); break; diff --git a/noncore/apps/qashmoney/accountdisplay.cpp b/noncore/apps/qashmoney/accountdisplay.cpp index 5ef5454..0fe5b09 100755 --- a/noncore/apps/qashmoney/accountdisplay.cpp +++ b/noncore/apps/qashmoney/accountdisplay.cpp @@ -1,446 +1,446 @@ #include <qmessagebox.h> #include <qheader.h> #include "accountdisplay.h" #include "newaccount.h" #include "transaction.h" #include "transferdialog.h" #include "transfer.h" extern Account *account; extern Transaction *transaction; extern Transfer *transfer; extern Preferences *preferences; AccountDisplay::AccountDisplay ( QWidget *parent ) : QWidget ( parent ) { cleared = 0; firstline = new QHBox ( this ); firstline->setSpacing ( 2 ); newaccount = new QPushButton ( firstline ); newaccount->setPixmap ( QPixmap ("/opt/QtPalmtop/pics/new.png") ); - connect ( newaccount, SIGNAL ( released () ), this, SLOT ( addAccount () ) ); + connect ( newaccount, SIGNAL ( released() ), this, SLOT ( addAccount() ) ); editaccount = new QPushButton ( firstline ); editaccount->setPixmap ( QPixmap ("/opt/QtPalmtop/pics/edit.png") ); - connect ( editaccount, SIGNAL ( released () ), this, SLOT ( editAccount () ) ); + connect ( editaccount, SIGNAL ( released() ), this, SLOT ( editAccount() ) ); deleteaccount = new QPushButton ( firstline ); deleteaccount->setPixmap( QPixmap ( "/opt/QtPalmtop/pics/delete.png") ); - connect ( deleteaccount, SIGNAL ( released () ), this, SLOT ( deleteAccount () ) ); + connect ( deleteaccount, SIGNAL ( released() ), this, SLOT ( deleteAccount() ) ); transferbutton = new QPushButton ( firstline ); transferbutton->setPixmap( QPixmap ( "/opt/QtPalmtop/pics/transfer.png") ); transferbutton->setToggleButton ( TRUE ); - connect ( transferbutton, SIGNAL ( toggled ( bool ) ), this, SLOT ( accountTransfer ( bool ) ) ); + connect ( transferbutton, SIGNAL ( toggled(bool) ), this, SLOT ( accountTransfer(bool) ) ); listview = new QListView ( this ); listview->setAllColumnsShowFocus ( TRUE ); listview->setShowSortIndicator ( TRUE ); listview->setRootIsDecorated ( TRUE ); listview->setMultiSelection ( FALSE ); - connect ( listview, SIGNAL ( expanded ( QListViewItem * ) ), this, SLOT ( setAccountExpanded ( QListViewItem * ) ) ); - connect ( listview, SIGNAL ( collapsed ( QListViewItem * ) ), this, SLOT ( setAccountCollapsed ( QListViewItem * ) ) ); + connect ( listview, SIGNAL ( expanded(QListViewItem*) ), this, SLOT ( setAccountExpanded(QListViewItem*) ) ); + connect ( listview, SIGNAL ( collapsed(QListViewItem*) ), this, SLOT ( setAccountCollapsed(QListViewItem*) ) ); listview->header()->setTracking ( FALSE ); - connect ( listview->header(), SIGNAL ( sizeChange ( int, int, int ) ), this, SLOT ( saveColumnSize ( int, int, int ) ) ); - connect ( listview->header(), SIGNAL ( clicked ( int ) ), this, SLOT ( saveSortingPreference ( int ) ) ); + connect ( listview->header(), SIGNAL ( sizeChange(int,int,int) ), this, SLOT ( saveColumnSize(int,int,int) ) ); + connect ( listview->header(), SIGNAL ( clicked(int) ), this, SLOT ( saveSortingPreference(int) ) ); layout = new QVBoxLayout ( this, 2, 5 ); layout->addWidget ( firstline ); layout->addWidget ( listview ); } void AccountDisplay::setTabs ( QWidget *newtab2, QTabWidget *newtabs ) { tab2 = newtab2; maintabs = newtabs; } void AccountDisplay::addAccount () { // initialize local variables int parentid = 0; type = 0; QString parentlist [ listview->childCount() + 1 ] [ 3 ] ; // create new account window for entering data NewAccount *newaccount = new NewAccount ( this ); int width = this->width(); newaccount->accountbox->setMaximumWidth ( ( int ) ( width * 0.5 ) ); newaccount->datebox->setMaximumWidth ( ( int ) ( width * 0.4 ) ); newaccount->childbox->setMaximumWidth ( ( int ) ( width * 0.5 ) ); newaccount->balancebox->setMaximumWidth ( ( int ) ( width * 0.4 ) ); newaccount->creditlimitbox->setMaximumWidth ( ( int ) ( width * 0.4 ) ); // if there are no accounts, disable the child check box if ( account->getNumberOfAccounts () == 0 ) newaccount->childcheckbox->setEnabled ( FALSE ); // if there are accounts, fill up the pulldown menu for // selecting a parent account. We should only add those parents without transactions else { int c = 0; QListViewItemIterator it ( listview ); for ( ; it.current(); ++it ) { int id = it.current()->text ( getIDColumn() ).toInt(); // iterate through accountdisplay listview and add parents with no transactions // add this item to the list box only if it is a parent and has no transactions if ( transfer->getNumberOfTransfers ( id ) == 0 && transaction->getNumberOfTransactions ( id ) == 0 && it.current()->parent() == 0 ) { newaccount->childbox->insertItem ( it.current()->text ( 0 ) ); parentlist [ c ] [ 0 ] = it.current()->text ( 0 ); parentlist [ c ] [ 1 ] = it.current()->text ( getIDColumn() ); parentlist [ c ] [ 2 ] = QString::number ( c ); c++; } } } if ( preferences->getPreference ( 4 ) == 0 ) newaccount->currencybox->setEnabled ( FALSE ); // enter today's date in the date box as default QDate today = QDate::currentDate (); int defaultday = today.day(); int defaultmonth = today.month(); int defaultyear = today.year(); newaccount->startdate->setText ( preferences->getDate ( defaultyear, defaultmonth, defaultday ) ); //add account information if user pushes OK button if ( newaccount->exec() == QDialog::Accepted ) { if ( newaccount->childcheckbox->isChecked () == TRUE ) // set a parent id and type for a child account { // go through the parentlist we created and determine the parent accountid // we can't use the name of the account because there may be two accounts // with the same name. This function does it all by accountid int counter; for ( counter = 0; counter < listview->childCount() + 1; counter++ ) if ( ( parentlist [ counter ] [ 2 ].toInt() ) == newaccount->childbox->currentItem() ) { parentid = parentlist [ counter ] [ 1 ].toInt(); break; } type = ( newaccount->accounttype->currentItem() ) + 6; // sets account ids for child accounts. See accountdisplay.h for types } else { parentid = -1; type = newaccount->accounttype->currentItem(); // sets account ids for parent accounts } // add the new account if ( newaccount->getDateEdited () == TRUE ) account->addAccount ( newaccount->accountname->text(), parentid, newaccount->accountbalance->text().toFloat(), type, newaccount->getDescription(), newaccount->creditlimit->text().toFloat(), newaccount->getYear(), newaccount->getMonth(), newaccount->getDay(), newaccount->accountbalance->text().toFloat(), newaccount->currencybox->currencybox->currentText() ); else account->addAccount ( newaccount->accountname->text (), parentid, newaccount->accountbalance->text().toFloat(), type, newaccount->getDescription(), newaccount->creditlimit->text().toFloat(), defaultyear, defaultmonth, defaultday, newaccount->accountbalance->text().toFloat(), newaccount->currencybox->currencybox->currentText() ); if ( parentid != -1 ) account->changeParentAccountBalance ( parentid ); // redisplay accounts // this function clears the account display first account->displayAccounts ( listview ); setToggleButton(); } maintabs->setTabEnabled ( tab2, FALSE ); } void AccountDisplay::deleteAccount () { if ( listview->selectedItem() == 0 ) QMessageBox::warning ( this, "QashMoney", "Please select an account\nto delete."); else if ( listview->selectedItem()->parent() == 0 && listview->selectedItem()->childCount() != 0 ) QMessageBox::warning ( this, "QashMoney", "Can't delete parent accounts\nwith children"); else { QMessageBox mb ( "Delete Account", "This will delete all transactions\nand transfers for this account.", QMessageBox::Information, QMessageBox::Ok, QMessageBox::Cancel, QMessageBox::NoButton ); if ( mb.exec() == QMessageBox::Ok ) { int accountid = listview->selectedItem()->text ( getIDColumn() ).toInt (); int parentid = account->getParentAccountID ( accountid ); // delete all the transactions and transfers for the account transaction->deleteAllTransactions ( accountid ); transfer->deleteAllTransfers ( accountid ); // delete the account account->deleteAccount ( accountid ); // update account balances if ( parentid != -1 ) account->changeParentAccountBalance ( parentid ); //redisplay accounts account->displayAccounts ( listview ); //remove all the columns from the accountdisplay if there are not any accounts if ( account->getNumberOfAccounts() == 0 ) { int columns = listview->columns(); int counter; for ( counter = 0; counter <= columns; counter++ ) listview->removeColumn ( 0 ); } setToggleButton(); } } maintabs->setTabEnabled ( tab2, FALSE ); } void AccountDisplay::setToggleButton () { // iterate through account display and determine how many "transferable" accounts we have // if there are less than two, disable the transfer button QListViewItemIterator it ( listview ); int counter = 0; for ( ; it.current(); ++it ) { // add one to counter if we find a transferable account if ( it.current()->parent() != 0 || ( it.current()->childCount() ) == 0 ) counter++; } if ( counter > 1 ) transferbutton->show(); else transferbutton->hide(); } void AccountDisplay::accountTransfer ( bool state ) { if ( state == TRUE ) { firstaccountid = -1; secondaccountid = -1; listview->clearSelection (); listview->setMultiSelection ( TRUE ); disableParentsWithChildren (); - connect ( listview, SIGNAL ( clicked ( QListViewItem * ) ), this, SLOT ( getTransferAccounts ( QListViewItem * ) ) ); + connect ( listview, SIGNAL ( clicked(QListViewItem*) ), this, SLOT ( getTransferAccounts(QListViewItem*) ) ); } else { firstaccountid = -1; secondaccountid = -1; listview->clearSelection (); listview->setMultiSelection ( FALSE ); enableAccounts (); - disconnect ( listview, SIGNAL ( clicked ( QListViewItem * ) ), this, SLOT ( getTransferAccounts ( QListViewItem * ) ) ); + disconnect ( listview, SIGNAL ( clicked(QListViewItem*) ), this, SLOT ( getTransferAccounts(QListViewItem*) ) ); } } void AccountDisplay::getTransferAccounts ( QListViewItem * item ) { if ( item->parent() != 0 || item->childCount() == 0 ) // only set an account for transfer if its a child or parent with no children { if ( firstaccountid == -1 ) firstaccountid = item->text ( getIDColumn() ).toInt(); // set first account if we've selected a valid account else if ( item->text ( getIDColumn() ).toInt() != firstaccountid ) // set the second account if its not equal to the first secondaccountid = item->text ( getIDColumn() ).toInt(); } // open transfer window if both accounts are set if ( firstaccountid != -1 && secondaccountid != -1 ) { // construct the transferdialog window TransferDialog *td = new TransferDialog ( this, firstaccountid, secondaccountid ); // enter today's date in the date box as default QDate today = QDate::currentDate (); int defaultday = today.day(); int defaultmonth = today.month(); int defaultyear = today.year(); td->date->setText ( preferences->getDate ( defaultyear, defaultmonth, defaultday ) ); if ( td->exec() == QDialog::Accepted ) { // set the cleared integer if the checkbox is checked if ( td->clearedcheckbox->isChecked() == TRUE ) cleared = 1; qDebug("Year from transferdialog = %i",td->getYear()); // add the transfer with a new date if its been edited or use the default date if ( td->getDateEdited () == TRUE ) transfer->addTransfer ( firstaccountid, account->getParentAccountID ( firstaccountid ), secondaccountid, account->getParentAccountID ( secondaccountid ), td->getDay(), td->getMonth(), td->getYear(), td->amount->text().toFloat(), cleared ); else transfer->addTransfer ( firstaccountid, account->getParentAccountID ( firstaccountid ), secondaccountid, account->getParentAccountID ( secondaccountid ), defaultday, defaultmonth, defaultyear, td->amount->text().toFloat(), cleared ); // update account balances of both accounts and parents if necessary account->updateAccountBalance ( firstaccountid ); if ( account->getParentAccountID ( firstaccountid ) != -1 ) account->changeParentAccountBalance ( account->getParentAccountID ( firstaccountid ) ); account->updateAccountBalance ( secondaccountid ); if ( account->getParentAccountID ( secondaccountid ) != -1 ) account->changeParentAccountBalance ( account->getParentAccountID ( secondaccountid ) ); // redisplay accounts account->displayAccounts ( listview ); } else { firstaccountid = -1; secondaccountid = -1; listview->clearSelection (); listview->setMultiSelection ( FALSE ); - disconnect ( listview, SIGNAL ( clicked ( QListViewItem * ) ), this, SLOT ( getTransferAccounts ( QListViewItem * ) ) ); + disconnect ( listview, SIGNAL ( clicked(QListViewItem*) ), this, SLOT ( getTransferAccounts(QListViewItem*) ) ); } // reset the accounts display window transferbutton->toggle(); // toggling this button with clear the window as well // reenable all the accounts so the transaction tab will be properly set enableAccounts (); } } void AccountDisplay::disableParentsWithChildren () { // iterate through accountdisplay listview and disable all the parents that have children QListViewItemIterator it ( listview ); for ( ; it.current(); ++it ) { if ( it.current()->parent() == 0 && it.current()->childCount() != 0 ) it.current()->setSelectable ( FALSE ); } } void AccountDisplay::enableAccounts () { // iterate through accountdisplay listview and enable all accounts QListViewItemIterator it ( listview ); for ( ; it.current(); ++it ) it.current()->setSelectable ( TRUE ); } void AccountDisplay::saveColumnSize ( int column, int oldsize, int newsize ) { switch ( column ) { case 0: if ( listview->columns() == 3 ) preferences->changeColumnPreference ( 1, newsize ); else preferences->changeColumnPreference ( 10, newsize ); break; case 1: if ( listview->columns() == 3 ) preferences->changeColumnPreference ( 2, newsize ); else preferences->changeColumnPreference ( 11, newsize ); break; case 2: preferences->changeColumnPreference ( 12, newsize ); break; } } void AccountDisplay::saveSortingPreference ( int column ) { preferences->changeSortingPreference ( 1, column ); } int AccountDisplay::getIDColumn () { int counter; int columns = listview->columns(); for ( counter = 0; counter <= columns; counter++ ) if ( listview->header()->label ( counter ).length() == 0 ) return counter; } void AccountDisplay::editAccount () { if ( listview->selectedItem() == 0 ) QMessageBox::warning ( this, "QashMoney", "Please select an account\nto edit."); else { // set the accountid int accountid = listview->selectedItem()->text ( getIDColumn() ).toInt(); //construct new dialog box QDialog *editaccountwindow = new QDialog ( this, 0, TRUE ); editaccountwindow->setCaption ( "Edit Account" ); // construct the items which will go in the dialog bix QLabel *namelabel = new QLabel ( "Account Name", editaccountwindow ); QLineEdit *accountname = new QLineEdit ( editaccountwindow ); QLabel *descriptionlabel = new QLabel ( "Account Description", editaccountwindow ); QLineEdit *accountdescription = new QLineEdit ( editaccountwindow ); Currency *currencybox = new Currency ( editaccountwindow ); QVBoxLayout *layout = new QVBoxLayout ( editaccountwindow, 5, 2 ); layout->addWidget ( namelabel ); layout->addWidget ( accountname ); layout->addWidget ( descriptionlabel ); layout->addWidget ( accountdescription ); layout->addWidget ( currencybox ); //set the account name accountname->setText ( listview->selectedItem()->text ( 0 ) ); //set the account description accountdescription->setText ( account->getAccountDescription ( accountid ) ); if ( preferences->getPreference ( 4 ) == 1 ) { // get currency code for this account then iterate through the currency box // to find the one we want int count = currencybox->currencybox->count(); QString code = account->getCurrencyCode ( accountid ); for ( int counter = 0; count - 1; counter++ ) { if ( QString::compare ( currencybox->currencybox->text ( counter ), code ) == 0 ) { currencybox->currencybox->setCurrentItem ( counter ); break; } } } else currencybox->setEnabled ( FALSE ); //execute the dialog box int response = editaccountwindow->exec(); if ( response == 1 ) { account->updateAccount ( accountname->text(), accountdescription->text(), currencybox->currencybox->currentText(), accountid ); account->displayAccounts ( listview ); // Try and select the same account that was just edited QListViewItemIterator it ( listview ); for ( ; it.current(); ++it ) { if ( it.current()->text ( 0 ) == accountname->text() ) { listview->setSelected ( it.current(), TRUE ); return; } } maintabs->setTabEnabled ( tab2, FALSE ); } } } void AccountDisplay::setAccountExpanded ( QListViewItem *item ) { int accountid = item->text ( getIDColumn() ).toInt(); account->setAccountExpanded ( 1, accountid ); } void AccountDisplay::setAccountCollapsed ( QListViewItem *item ) { int accountid = item->text ( getIDColumn() ).toInt(); account->setAccountExpanded ( 0, accountid ); } diff --git a/noncore/apps/qashmoney/budgetdisplay.cpp b/noncore/apps/qashmoney/budgetdisplay.cpp index d4047bf..3fc4e6c 100755 --- a/noncore/apps/qashmoney/budgetdisplay.cpp +++ b/noncore/apps/qashmoney/budgetdisplay.cpp @@ -1,417 +1,417 @@ #include <qmessagebox.h> #include <qheader.h> #include <sqlite.h> #include "budgetdisplay.h" #include "budget.h" #include "datepicker.h" #include "transaction.h" extern Preferences *preferences; extern Budget *budget; extern Transaction *transaction; BudgetDisplay::BudgetDisplay ( QWidget *parent ) : QWidget ( parent ) { QFont font = this->font(); font.setWeight ( QFont::Bold ); //set the default date to today newDate = QDate::currentDate (); year = newDate.year(); month = newDate.month(); day = newDate.day(); datelabel = preferences->getDate ( year, month ); setCaption ( "Budget" ); firstline = new QHBox ( this ); firstline->setSpacing ( 2 ); secondline = new QHBox ( this ); secondline->setSpacing ( 10 ); menu = new QMenuBar ( this ); menu->setFrameStyle ( QFrame::Box | QFrame::Sunken ); budgetmenu = new QPopupMenu ( this ); lineitemsmenu = new QPopupMenu ( this ); datemenu = new QPopupMenu ( this ); menu->insertItem ( "Budget", budgetmenu ); menu->insertItem ( "Line Item", lineitemsmenu ); menu->insertItem ( "Date", datemenu ); - budgetmenu->insertItem ( "New", this, SLOT ( newBudget () ), 0, 1 ); - budgetmenu->insertItem ( "Edit", this, SLOT ( editBudget () ), 0, 2 ); - budgetmenu->insertItem ( "Delete", this, SLOT ( deleteBudget () ), 0, 3 ); - lineitemsmenu->insertItem ( "New", this, SLOT ( newLineItem () ), 0, 1 ); - lineitemsmenu->insertItem ( "Edit", this, SLOT ( editLineItem () ), 0, 2 ); - lineitemsmenu->insertItem ( "Delete", this, SLOT ( deleteLineItem () ), 0, 3 ); + budgetmenu->insertItem ( "New", this, SLOT ( newBudget() ), 0, 1 ); + budgetmenu->insertItem ( "Edit", this, SLOT ( editBudget() ), 0, 2 ); + budgetmenu->insertItem ( "Delete", this, SLOT ( deleteBudget() ), 0, 3 ); + lineitemsmenu->insertItem ( "New", this, SLOT ( newLineItem() ), 0, 1 ); + lineitemsmenu->insertItem ( "Edit", this, SLOT ( editLineItem() ), 0, 2 ); + lineitemsmenu->insertItem ( "Delete", this, SLOT ( deleteLineItem() ), 0, 3 ); datemenu->insertItem ( "Change", this, SLOT ( showCalendar() ) ); budgetbox = new QComboBox ( firstline ); - connect ( budgetbox, SIGNAL ( activated ( int ) ), this, SLOT ( setCurrentBudget ( int ) ) ); + connect ( budgetbox, SIGNAL ( activated(int) ), this, SLOT ( setCurrentBudget(int) ) ); budgetview = new QComboBox ( firstline ); budgetview->insertItem ( "Month" ); budgetview->insertItem ( "Year" ); - connect ( budgetview, SIGNAL ( activated ( int ) ), this, SLOT ( setCurrentView ( int ) ) ); + connect ( budgetview, SIGNAL ( activated(int) ), this, SLOT ( setCurrentView(int) ) ); budgeted = new QLabel ( secondline ); budgeted->setFont ( font ); actual = new QLabel ( secondline ); actual->setFont ( font ); date = new QLabel ( secondline ); date->setFont ( font ); listview = new QListView ( this ); listview->setAllColumnsShowFocus ( TRUE ); listview->setShowSortIndicator ( TRUE ); listview->setRootIsDecorated ( TRUE ); listview->setMultiSelection ( FALSE ); listview->addColumn ( "Line Item", preferences->getColumnPreference ( 13 ) ); // column id 13 listview->addColumn ( "Budget", preferences->getColumnPreference ( 14 ) ); // column id 14 listview->addColumn ( "Actual", preferences->getColumnPreference ( 15 ) ); // column id 15 listview->addColumn ( "", 0 ); // line item ids listview->setColumnWidthMode ( 0, QListView::Manual ); listview->setColumnWidthMode ( 1, QListView::Manual ); listview->setColumnWidthMode ( 2, QListView::Manual ); listview->setColumnAlignment ( 1, Qt::AlignRight ); listview->setColumnAlignment ( 2, Qt::AlignRight ); listview->setColumnWidthMode ( 3, QListView::Manual ); listview->header()->setTracking ( FALSE ); - connect ( listview->header(), SIGNAL ( sizeChange ( int, int, int ) ), this, SLOT ( saveColumnSize ( int, int, int ) ) ); - connect ( listview->header(), SIGNAL ( clicked ( int ) ), this, SLOT ( saveSortingPreference ( int ) ) ); + connect ( listview->header(), SIGNAL ( sizeChange(int,int,int) ), this, SLOT ( saveColumnSize(int,int,int) ) ); + connect ( listview->header(), SIGNAL ( clicked(int) ), this, SLOT ( saveSortingPreference(int) ) ); // pull the column sorting preference from the preferences table, and configure the listview accordingly int column = 0; int direction = 0; preferences->getSortingPreference ( 3, &column, &direction ); listview->setSorting ( column, direction ); displayBudgetNames(); layout = new QVBoxLayout ( this, 2, 2 ); layout->setMenuBar ( menu ); layout->addWidget ( firstline ); layout->addWidget ( secondline ); layout->addWidget ( listview ); } void BudgetDisplay::deleteBudget () { listview->clear(); transaction->clearBudgetIDs ( currentbudget ); budget->deleteBudget ( currentbudget ); if ( budgetbox->count() != 0 ) displayBudgetNames(); checkBudgets(); } void BudgetDisplay::saveColumnSize ( int column, int oldsize, int newsize ) { switch ( column ) { case 0: preferences->changeColumnPreference ( 13, newsize ); break; case 1: preferences->changeColumnPreference ( 14, newsize ); break; case 2: preferences->changeColumnPreference ( 15, newsize ); break; } } void BudgetDisplay::saveSortingPreference ( int column ) { preferences->changeSortingPreference ( 3, column ); } int BudgetDisplay::getIDColumn () { int counter; int columns = listview->columns(); for ( counter = 0; counter <= columns; counter++ ) if ( listview->header()->label ( counter ).length() == 0 ) return counter; } void BudgetDisplay::newBudget () { constructBudgetWindow(); int response = nb->exec(); if ( response == 1 ) { // open a new budget object int addedbudget = budget->addBudget ( budgetname->text(), 0, description->text(), currencybox->currencybox->currentText(), day, month, year, day, month, year, 0 ); transaction->clearBudgetIDs ( addedbudget ); displayBudgetNames(); } checkBudgets(); } void BudgetDisplay::constructBudgetWindow () { //construct and format the new budget window nb = new QDialog ( this, 0, TRUE ); nb->setCaption ( "Budget" ); QLabel *namelabel = new QLabel ( "Budget Name", nb ); budgetname = new QLineEdit ( nb ); QLabel *descriptionlabel = new QLabel ( "Description", nb ); description = new QLineEdit ( nb ); currencybox = new Currency ( nb ); QBoxLayout *layout = new QVBoxLayout ( nb, 2, 2 ); layout->addWidget ( namelabel ); layout->addWidget ( budgetname ); layout->addWidget ( descriptionlabel ); layout->addWidget ( description ); layout->addWidget ( currencybox ); } void BudgetDisplay::displayBudgetNames () { budgetbox->clear(); if ( budget->getNumberOfBudgets() != 0 ) { ids = budget->getBudgetIDs(); for ( QStringList::Iterator it = ids->begin(); it != ids->end(); ++it ) { QString flag = "/opt/QtPalmtop/pics/flags/"; flag.append ( budget->getCurrency ( (*it).toInt() ) ); flag.append ( ".png" ); budgetbox->insertItem ( QPixmap ( flag ), budget->getBudgetName ( (*it).toInt() ) ); } setCurrentBudget ( 0 ); } else checkBudgets(); } void BudgetDisplay::setCurrentBudget ( int index ) { currentbudget = ( ids->operator[] ( index ).toInt() ); displayLineItems(); } void BudgetDisplay::setCurrentView ( int index ) { displayLineItems(); } void BudgetDisplay::showCalendar () { // create new calendar object and show it DatePicker *dp = new DatePicker ( QDate ( year, month, day ) ); dp->daylabel->hide(); dp->daybox->hide(); if ( budgetview->currentItem() == 1 ) { dp->monthlabel->hide(); dp->monthbox->hide(); } dp->setMaximumWidth ( ( int ) ( this->size().width() * 0.9 ) ); int response = dp->exec(); if ( response == 1 ) { // Set date integers year = dp->getYear(); if ( budgetview->currentItem() == 0 ) month = dp->getMonth(); else month = newDate.month(); datelabel = preferences->getDate ( year, month ); displayLineItems(); } } void BudgetDisplay::newLineItem () { //construct and format the new line item window constructLineItemWindow (); int response = newlineitem->exec(); if ( response == 1 ) { float amount; if ( lineitemtime->currentItem() == 0 ) amount = lineitemamount->text().toFloat(); else if ( lineitemtime->currentItem() == 1 ) amount = lineitemamount->text().toFloat() * 12; else amount = lineitemamount->text().toFloat() * 52; int lineitemadded = budget->addLineItem ( currentbudget, lineitemname->text(), amount, lineitemtime->currentItem() ); transaction->clearBudgetIDs ( currentbudget, lineitemadded ); displayLineItems(); } checkBudgets(); } void BudgetDisplay::constructLineItemWindow () { //construct and format the new budget window newlineitem = new QDialog ( this, 0, TRUE ); newlineitem->setCaption ( "Line Item" ); QLabel *namelabel = new QLabel ( "Line Item Name", newlineitem ); lineitemname = new QLineEdit ( newlineitem ); QLabel *budgetamountlabel = new QLabel ( "Budget Amount", newlineitem ); lineitemamount = new QLineEdit ( newlineitem ); QLabel *lineitemtimelabel = new QLabel ( "Per:", newlineitem ); lineitemtime = new QComboBox ( newlineitem ); lineitemtime->insertItem ( "Year" ); // type 0 lineitemtime->insertItem ( "Month" ); // type 1 lineitemtime->insertItem ( "Week" ); // type 2 QBoxLayout *layout = new QVBoxLayout ( newlineitem, 2, 2 ); layout->addWidget ( namelabel ); layout->addWidget ( lineitemname ); layout->addWidget ( budgetamountlabel ); layout->addWidget ( lineitemamount ); layout->addWidget ( lineitemtimelabel ); layout->addWidget ( lineitemtime ); } void BudgetDisplay::deleteLineItem () { if ( listview->selectedItem() != 0 ) { int lineitemid = listview->selectedItem()->text ( getIDColumn() ).toInt(); transaction->clearBudgetIDs ( currentbudget, lineitemid ); budget->deleteLineItem ( currentbudget, lineitemid ); displayBudgetNames(); } else QMessageBox::warning ( this, "QashMoney", "Please select a line item to delete." ); checkBudgets(); } void BudgetDisplay::displayLineItems () { listview->clear(); if ( budget->getNumberOfBudgets() != 0 ) { QString budgettable = budgetbox->currentText(); budgettable.append ( QString::number ( currentbudget ) ); budget->displayLineItems ( currentbudget, listview, month, year, budgetview->currentItem() ); totalactual = transaction->getActualTotal ( currentbudget, year, month, budgetview->currentItem() ); totalbudget = budget->getBudgetTotal ( currentbudget, budgetview->currentItem() ); updateBudgetInformation(); } } void BudgetDisplay::checkBudgets () { if ( budget->getNumberOfBudgets() == 0 ) { budgetview->setEnabled ( FALSE ); budgetmenu->setItemEnabled ( 2, FALSE ); budgetmenu->setItemEnabled ( 3, FALSE ); lineitemsmenu->setItemEnabled ( 1, FALSE ); lineitemsmenu->setItemEnabled ( 2, FALSE ); lineitemsmenu->setItemEnabled ( 3, FALSE ); } else { budgetview->setEnabled ( TRUE ); budgetmenu->setItemEnabled ( 2, TRUE ); budgetmenu->setItemEnabled ( 3, TRUE ); lineitemsmenu->setItemEnabled ( 1, TRUE ); lineitemsmenu->setItemEnabled ( 2, FALSE ); lineitemsmenu->setItemEnabled ( 3, FALSE ); if ( budget->getNumberOfLineItems ( currentbudget ) != 0 ) { lineitemsmenu->setItemEnabled ( 2, TRUE ); lineitemsmenu->setItemEnabled ( 3, TRUE ); } } } void BudgetDisplay::updateBudgetInformation () { if ( budgetview->currentItem() == 0 ) { datelabel = preferences->getDate ( year, month ); datelabel.prepend ( "Date: " ); date->setText ( datelabel ); } else date->setText ( QString::number ( year ) ); QString budget = "Budget: "; budget.append ( totalbudget ); budgeted->setText ( budget ); QString actualamount = "Actual: "; actualamount.append ( totalactual ); actual->setText ( actualamount ); } void BudgetDisplay::editBudget () { constructBudgetWindow(); //set the title budgetname->setText ( budget->getBudgetName ( currentbudget ) ); //set the description description->setText ( budget->getBudgetDescription ( currentbudget ) ); // retrieve the two character currency code then // go through the currencty box and find the code //set the currency box to that index number int count = currencybox->currencybox->count(); QString code = budget->getCurrency ( currentbudget ); for ( int counter = 0; count - 1; counter++ ) { if ( QString::compare (currencybox->currencybox->text ( counter ), code ) == 0 ) { currencybox->currencybox->setCurrentItem ( counter ); break; } } int response = nb->exec(); if ( response == 1 ) { budget->updateBudget ( budgetname->text(), description->text(), currencybox->currencybox->currentText(), currentbudget ); displayBudgetNames(); } } void BudgetDisplay::editLineItem () { if ( listview->selectedItem() != 0 ) { constructLineItemWindow(); // set the line item name lineitemname->setText ( listview->selectedItem()->text( 0 ) ); // set the line item time combobox int lineitemtype = budget->getLineItemTime ( currentbudget, listview->selectedItem()->text ( 3 ).toInt() ); lineitemtime->setCurrentItem ( lineitemtype ); // set the line item amount float amount = budget->getLineItemAmount ( currentbudget, listview->selectedItem()->text ( 3 ).toInt() ); if ( lineitemtype == 1 ) amount = amount / 12; else if ( lineitemtype == 2 ) amount = amount / 52; lineitemamount->setText ( QString::number ( amount ) ); int response = newlineitem->exec(); if ( response == 1 ) { float amount; if ( lineitemtime->currentItem() == 0 ) amount = lineitemamount->text().toFloat(); else if ( lineitemtime->currentItem() == 1 ) amount = lineitemamount->text().toFloat() * 12; else amount = lineitemamount->text().toFloat() * 52; budget->updateLineItem ( lineitemname->text(), amount, lineitemtime->currentItem(), currentbudget, listview->selectedItem()->text ( 3 ).toInt() ); displayLineItems(); } } else QMessageBox::warning ( this, "QashMoney", "Please select a line item to edit." ); } diff --git a/noncore/apps/qashmoney/calculator.cpp b/noncore/apps/qashmoney/calculator.cpp index 0e0a043..2c92103 100755 --- a/noncore/apps/qashmoney/calculator.cpp +++ b/noncore/apps/qashmoney/calculator.cpp @@ -1,113 +1,113 @@ #include "calculator.h" #include <qpushbutton.h> Calculator::Calculator ( QWidget* parent ) : QDialog ( parent, 0, TRUE ) { display = new QLineEdit ( this, "display" ); display->setFrame ( FALSE ); display->setAlignment ( Qt::AlignRight ); QPushButton *one = new QPushButton ( "1", this, "one" ); // make buttons for first row one->setFlat ( TRUE ); - connect ( one, SIGNAL ( released () ), this, SLOT ( displayOne () ) ); + connect ( one, SIGNAL ( released() ), this, SLOT ( displayOne() ) ); QPushButton *two = new QPushButton ( "2", this, "two" ); two->setFlat ( TRUE ); - connect ( two, SIGNAL ( released () ), this, SLOT ( displayTwo () ) ); + connect ( two, SIGNAL ( released() ), this, SLOT ( displayTwo() ) ); QPushButton *three = new QPushButton ( "3", this, "three" ); three->setFlat ( TRUE ); - connect ( three, SIGNAL ( released () ), this, SLOT ( displayThree () ) ); + connect ( three, SIGNAL ( released() ), this, SLOT ( displayThree() ) ); QPushButton *four = new QPushButton ( "4", this, "four" ); // make buttons for second row four->setFlat ( TRUE ); - connect ( four, SIGNAL ( released () ), this, SLOT ( displayFour () ) ); + connect ( four, SIGNAL ( released() ), this, SLOT ( displayFour() ) ); QPushButton *five = new QPushButton ( "5", this, "five" ); five->setFlat ( TRUE ); - connect ( five, SIGNAL ( released () ), this, SLOT ( displayFive () ) ); + connect ( five, SIGNAL ( released() ), this, SLOT ( displayFive() ) ); QPushButton *six = new QPushButton ( "6", this, "six" ); six->setFlat ( TRUE ); - connect ( six, SIGNAL ( released () ), this, SLOT ( displaySix () ) ); + connect ( six, SIGNAL ( released() ), this, SLOT ( displaySix() ) ); QPushButton *seven = new QPushButton ( "7", this, "seven" ); // make buttons for third row seven->setFlat ( TRUE ); - connect ( seven, SIGNAL ( released () ), this, SLOT ( displaySeven () ) ); + connect ( seven, SIGNAL ( released() ), this, SLOT ( displaySeven() ) ); QPushButton *eight = new QPushButton ( "8", this, "eight" ); eight->setFlat ( TRUE ); - connect ( eight, SIGNAL ( released () ), this, SLOT ( displayEight () ) ); + connect ( eight, SIGNAL ( released() ), this, SLOT ( displayEight() ) ); QPushButton *nine = new QPushButton ( "9", this, "nine" ); nine->setFlat ( TRUE ); - connect ( nine, SIGNAL ( released () ), this, SLOT ( displayNine () ) ); + connect ( nine, SIGNAL ( released() ), this, SLOT ( displayNine() ) ); QPushButton *zero = new QPushButton ( "0", this, "zero" ); zero->setFlat ( TRUE ); - connect ( zero, SIGNAL ( released () ), this, SLOT ( displayZero () ) ); + connect ( zero, SIGNAL ( released() ), this, SLOT ( displayZero() ) ); QPushButton *dp = new QPushButton ( ".", this, "dp" ); dp->setFlat ( TRUE ); - connect ( dp, SIGNAL ( released () ), this, SLOT ( displayPoint () ) ); + connect ( dp, SIGNAL ( released() ), this, SLOT ( displayPoint() ) ); QPushButton *back = new QPushButton ( "<-", this, "back" ); back->setFlat ( TRUE ); - connect ( back, SIGNAL ( released () ), this, SLOT ( back () ) ); + connect ( back, SIGNAL ( released() ), this, SLOT ( back() ) ); layout = new QGridLayout ( this, 5, 3, 5, 1, "calculatorlayout" ); layout->addMultiCellWidget ( display, 0, 0, 0, 2 ); layout->addWidget ( one, 1, 0 ); layout->addWidget ( two, 1, 1 ); layout->addWidget ( three, 1, 2 ); layout->addWidget ( four, 2, 0 ); layout->addWidget ( five, 2, 1 ); layout->addWidget ( six, 2, 2 ); layout->addWidget ( seven, 3, 0 ); layout->addWidget ( eight, 3, 1 ); layout->addWidget ( nine, 3, 2 ); layout->addWidget ( zero, 4, 0 ); layout->addWidget ( dp, 4, 1 ); layout->addWidget ( back, 4, 2 ); } void Calculator::displayOne () { display->insert ( "1" ); } void Calculator::displayTwo () { display->insert ( "2" ); } void Calculator::displayThree () { display->insert ( "3" ); } void Calculator::displayFour () { display->insert ( "4" ); } void Calculator::displayFive () { display->insert ( "5" ); } void Calculator::displaySix () { display->insert ( "6" ); } void Calculator::displaySeven () { display->insert ( "7" ); } void Calculator::displayEight () { display->insert ( "8" ); } void Calculator::displayNine () { display->insert ( "9" ); } void Calculator::displayZero () { display->insert ( "0" ); } void Calculator::displayPoint () { display->insert ( "." ); } void Calculator::back () { display->backspace(); } diff --git a/noncore/apps/qashmoney/datepicker.cpp b/noncore/apps/qashmoney/datepicker.cpp index 02fbcf3..7997c0b 100755 --- a/noncore/apps/qashmoney/datepicker.cpp +++ b/noncore/apps/qashmoney/datepicker.cpp @@ -1,95 +1,95 @@ #include "datepicker.h" DatePicker::DatePicker ( QDate entrydate ) : QDialog ( 0, 0, TRUE ) { setCaption ( "Select Date" ); date = entrydate; day = date.day(); month = date.month(); year = date.year(); daylabel = new QLabel ( "Day", this ); monthlabel = new QLabel ( "Month", this ); yearlabel = new QLabel ( "Year", this ); daybox = new QComboBox ( this, "daybox" ); - connect ( daybox, SIGNAL ( activated ( int ) ), this, SLOT ( setDay ( int ) ) ); + connect ( daybox, SIGNAL ( activated(int) ), this, SLOT ( setDay(int) ) ); displayDays ( daybox ); monthbox = new QComboBox ( this, "monthbox" ); - connect ( monthbox, SIGNAL ( activated ( int ) ), this, SLOT ( setMonth ( int ) ) ); + connect ( monthbox, SIGNAL ( activated(int) ), this, SLOT ( setMonth(int) ) ); displayMonths ( monthbox ); yearbox = new QComboBox ( this, "yearbox" ); - connect ( yearbox, SIGNAL ( activated ( int ) ), this, SLOT ( setYear ( int ) ) ); + connect ( yearbox, SIGNAL ( activated(int) ), this, SLOT ( setYear(int) ) ); displayYears ( yearbox ); layout = new QGridLayout ( this, 2, 3, 5, 5, "datepickerlayout" ); layout->addWidget ( daylabel, 0, 2 ); layout->addWidget ( monthlabel, 0, 1 ); layout->addWidget ( yearlabel, 0, 0 ); layout->addWidget ( daybox, 1, 2 ); layout->addWidget ( monthbox, 1, 1 ); layout->addWidget ( yearbox, 1, 0 ); } void DatePicker::displayDays ( QComboBox *daybox ) { int counter; int days = date.daysInMonth(); for ( counter = 1; counter <= days; counter++ ) daybox->insertItem ( QString::number ( counter ) ); daybox->setCurrentItem ( ( date.day() ) - 1 ); } void DatePicker::displayMonths ( QComboBox *monthbox ) { int counter; for ( counter = 1; counter <= 12; counter++ ) monthbox->insertItem ( QString::number ( counter ) ); monthbox->setCurrentItem ( ( date.month() ) - 1 ); } void DatePicker::displayYears ( QComboBox *yearbox ) { int counter; int indexcounter = 0; int yearindex = 0; int year = date.year(); for ( counter = ( year - 1 ); counter <= ( year + 1 ); counter++ ) { yearbox->insertItem ( QString::number ( counter ) ); if ( date.year() == counter ) yearindex = indexcounter; indexcounter ++; } yearbox->setCurrentItem ( yearindex ); } void DatePicker::setDay ( int index ) { day = daybox->text ( index ).toInt(); } void DatePicker::setMonth ( int index ) { month = monthbox->text( index ).toInt(); } void DatePicker::setYear ( int index ) { year = yearbox->text ( index ).toInt(); } int DatePicker::getDay () { return day; } int DatePicker::getMonth () { return month; } int DatePicker::getYear () { return year; } diff --git a/noncore/apps/qashmoney/memorydialog.cpp b/noncore/apps/qashmoney/memorydialog.cpp index e9ebd54..ba11540 100755 --- a/noncore/apps/qashmoney/memorydialog.cpp +++ b/noncore/apps/qashmoney/memorydialog.cpp @@ -1,86 +1,86 @@ #include "memorydialog.h" #include "memory.h" #include <qmessagebox.h> extern Memory *memory; MemoryDialog::MemoryDialog () : QDialog ( 0, 0, TRUE ) { setCaption ( tr ( "Edit Memory" ) ); listbox = new QListBox ( this, "listbox" ); memory->displayMemoryItems ( listbox ); listbox->clearSelection(); secondline = new QHBox ( this ); newbutton = new QPushButton ( secondline ); newbutton->setPixmap( QPixmap ("/opt/QtPalmtop/pics/new.png") ); - connect ( newbutton, SIGNAL ( released () ), this, SLOT ( addItem () ) ); + connect ( newbutton, SIGNAL ( released() ), this, SLOT ( addItem() ) ); editbutton = new QPushButton ( secondline ); editbutton->setPixmap( QPixmap ("/opt/QtPalmtop/pics/edit.png") ); - connect ( editbutton, SIGNAL ( released () ), this, SLOT ( editItem () ) ); + connect ( editbutton, SIGNAL ( released() ), this, SLOT ( editItem() ) ); deletebutton = new QPushButton( secondline ); deletebutton->setPixmap( QPixmap ("/opt/QtPalmtop/pics/delete.png") ); - connect ( deletebutton, SIGNAL ( released () ), this, SLOT ( deleteItem () ) ); + connect ( deletebutton, SIGNAL ( released() ), this, SLOT ( deleteItem() ) ); lineedit = new QLineEdit ( this ); layout = new QVBoxLayout ( this, 2, 2 ); layout->addWidget ( listbox ); layout->addWidget ( secondline ); layout->addWidget ( lineedit ); } MemoryDialog::~MemoryDialog() { } void MemoryDialog::addItem () { if ( lineedit->text().length() != 0 ) { memory->addMemoryItem ( lineedit->text() ); listbox->clear (); memory->displayMemoryItems ( listbox ); listbox->clearFocus(); listbox->clearSelection (); lineedit->clear(); } } void MemoryDialog::editItem () { if ( listbox->currentItem() != -1 ) { lineedit->setText ( listbox->currentText() ); memory->deleteMemoryItem ( listbox->currentText() ); listbox->clear (); memory->displayMemoryItems ( listbox ); listbox->clearSelection(); } else QMessageBox::warning ( this, "QashMoney", "Please select an item to edit." ); } void MemoryDialog::deleteItem () { if ( listbox->currentItem() != -1 ) { memory->deleteMemoryItem ( listbox->currentText() ); listbox->clear (); memory->displayMemoryItems ( listbox ); listbox->clearSelection(); } else QMessageBox::warning ( this, "QashMoney", "Please select an item to delete." ); } diff --git a/noncore/apps/qashmoney/newaccount.cpp b/noncore/apps/qashmoney/newaccount.cpp index 7e57a18..5932182 100755 --- a/noncore/apps/qashmoney/newaccount.cpp +++ b/noncore/apps/qashmoney/newaccount.cpp @@ -1,206 +1,206 @@ #include "newaccount.h" #include "calculator.h" #include "datepicker.h" #include <qmultilineedit.h> extern Preferences *preferences; NewAccount::NewAccount ( QWidget *parent, const char *name, bool modal ) : QDialog ( parent, name, modal ) { accountdescription = ""; dateedited = FALSE; setCaption( tr( "Account" ) ); namelabel = new QLabel ( "Account Name", this ); accountbox = new QHBox ( this ); accountname = new QLineEdit ( accountbox ); descriptionbutton = new QPushButton ( accountbox ); descriptionbutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/info.png" ) ); datelabel = new QLabel ( "Date", this ); datebox = new QHBox ( this ); startdate = new QLineEdit ( datebox ); startdate->setDisabled ( TRUE ); datebutton = new QPushButton ( datebox ); datebutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/date.png" ) ); childcheckbox = new QCheckBox ( this ); childcheckbox->setText( tr ( "Child Account" ) ); childlabel = new QLabel ( "Child of", this ); childbox = new QComboBox ( FALSE, this ); hideChildPulldownMenu (); balancelabel = new QLabel ( "Balance", this ); balancebox = new QHBox ( this ); accountbalance = new QLineEdit ( balancebox ); accountbalance->setText ( "0.00" ); balancecalculator = new QPushButton( balancebox ); balancecalculator->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/kcalc.png" ) ); creditlimitlabel = new QLabel ( "Credit Limit", this ); creditlimitbox = new QHBox ( this ); creditlimit = new QLineEdit ( creditlimitbox ); creditlimitbox->setEnabled ( FALSE ); creditlimitcalculator = new QPushButton( creditlimitbox ); creditlimitcalculator->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/kcalc.png" ) ); currencybox = new Currency ( this ); typelabel = new QLabel ( "Type", this ); accounttype = new QComboBox ( FALSE, this ); accounttype->insertItem( tr( "Bank" ) ); accounttype->insertItem( tr( "Cash" ) ); accounttype->insertItem( tr( "Credit Card" ) ); accounttype->insertItem( tr( "Equity" ) ); accounttype->insertItem( tr( "Asset" ) ); accounttype->insertItem( tr( "Liability" ) ); layout = new QGridLayout ( this, 7, 2, 4, 2 ); layout->addWidget ( namelabel , 0, 0, Qt::AlignLeft ); layout->addWidget ( accountbox, 1, 0, Qt::AlignLeft ); layout->addWidget ( datelabel, 2, 0, Qt::AlignLeft ); layout->addWidget ( datebox, 3, 0, Qt::AlignLeft ); layout->addWidget ( childcheckbox, 4, 0, Qt::AlignLeft ); layout->addWidget ( childlabel, 5, 0, Qt::AlignLeft ); layout->addWidget ( childbox, 6, 0, Qt::AlignLeft ); layout->addWidget ( balancelabel, 0, 1, Qt::AlignLeft ); layout->addWidget ( balancebox, 1, 1, Qt::AlignLeft ); layout->addWidget ( creditlimitlabel, 2, 1, Qt::AlignLeft ); layout->addWidget ( creditlimitbox, 3, 1, Qt::AlignLeft ); layout->addWidget ( currencybox, 4, 1, Qt::AlignLeft ); layout->addWidget ( typelabel, 5, 1, Qt::AlignLeft ); layout->addWidget ( accounttype, 6, 1, Qt::AlignLeft ); - connect ( childcheckbox, SIGNAL ( clicked () ), this, SLOT ( showChildPulldownMenu() ) ); + connect ( childcheckbox, SIGNAL ( clicked() ), this, SLOT ( showChildPulldownMenu() ) ); connect ( balancecalculator, SIGNAL ( released() ), this, SLOT ( showCalculator() ) ); connect ( creditlimitcalculator, SIGNAL ( released() ), this, SLOT ( showCreditLimitCalculator() ) ); - connect ( accounttype, SIGNAL ( activated ( int ) ), this, SLOT ( activateCreditLimit ( int ) ) ); - connect ( datebutton, SIGNAL ( released () ), this, SLOT ( showCalendar () ) ); - connect ( descriptionbutton, SIGNAL ( released () ), this, SLOT ( addAccountDescription() ) ); + connect ( accounttype, SIGNAL ( activated(int) ), this, SLOT ( activateCreditLimit(int) ) ); + connect ( datebutton, SIGNAL ( released() ), this, SLOT ( showCalendar() ) ); + connect ( descriptionbutton, SIGNAL ( released() ), this, SLOT ( addAccountDescription() ) ); } NewAccount::~NewAccount () { } void NewAccount::showChildPulldownMenu () { if ( childcheckbox->isChecked() == TRUE ) { childlabel->setEnabled ( TRUE ); childbox->setEnabled ( TRUE ); } else hideChildPulldownMenu(); } void NewAccount::hideChildPulldownMenu () { childlabel->setEnabled ( FALSE ); childbox->setEnabled ( FALSE ); } void NewAccount::showCalculator () { Calculator *calculator = new Calculator ( this ); calculator->setMaximumWidth ( ( int ) ( this->size().width() * 0.9 ) ); if ( calculator->exec () == QDialog::Accepted ) accountbalance->setText ( calculator->display->text() ); } void NewAccount::showCreditLimitCalculator () { Calculator *calculator = new Calculator ( this ); calculator->setMaximumWidth ( ( int ) ( this->size().width() * 0.9 ) ); if ( calculator->exec () == QDialog::Accepted ) creditlimit->setText ( calculator->display->text() ); } void NewAccount::activateCreditLimit ( int index ) { if ( index == 2 || index == 5 ) creditlimitbox->setEnabled ( TRUE ); else { creditlimit->clear (); creditlimitbox->setEnabled ( FALSE ); } } void NewAccount::showCalendar () { QDate newDate = QDate::currentDate (); DatePicker *dp = new DatePicker ( newDate ); dp->setMaximumWidth ( ( int ) ( this->size().width() * 0.9 ) ); int response = dp->exec(); if ( response == QDialog::Accepted ) { // Set date integers year = dp->getYear(); month = dp->getMonth(); day = dp->getDay(); // Set dateedited to TRUE // This tells the accountdisplay object that the user edited an account // and did change the date dateedited = TRUE; // Display date with our selected format startdate->setText ( preferences->getDate ( year, month, day ) ); } } bool NewAccount::getDateEdited () { return dateedited; } int NewAccount::getDay () { return day; } int NewAccount::getMonth () { return month; } int NewAccount::getYear () { return year; } QString NewAccount::getDescription () { return accountdescription; } void NewAccount::setDescription ( QString description ) { accountdescription = description; } void NewAccount::addAccountDescription () { // Function for adding or editing an account description. QDialog *description = new QDialog ( this, "description", TRUE ); description->setCaption ( "Notes" ); QMultiLineEdit *enter = new QMultiLineEdit ( description ); enter->setFixedSize ( ( int ) (this->width() * 0.75 ), ( int ) ( this->height() * 0.5 ) ); enter->setWrapColumnOrWidth ( ( int ) (this->width() * 0.75 ) ); enter->setWordWrap ( QMultiLineEdit::WidgetWidth ); if ( accountdescription != "(NULL)" ) enter->setText ( accountdescription ); if ( description->exec () == QDialog::Accepted ) accountdescription = enter->text (); } diff --git a/noncore/apps/qashmoney/newtransaction.cpp b/noncore/apps/qashmoney/newtransaction.cpp index 5c78139..87b7f7e 100755 --- a/noncore/apps/qashmoney/newtransaction.cpp +++ b/noncore/apps/qashmoney/newtransaction.cpp @@ -1,274 +1,274 @@ #include "newtransaction.h" #include "calculator.h" #include "datepicker.h" #include "budget.h" #include <qmultilineedit.h> extern Budget *budget; extern Preferences *preferences; NewTransaction::NewTransaction ( QWidget* parent ) : QDialog ( parent, 0, TRUE ) { transactiondescription = ""; currentlineitem = -1; currentbudget = -1; dateedited = FALSE; setCaption( tr( "Transaction" ) ); // START FIRST COLUMN namelabel = new QLabel ( "Transaction", this ); transactionnamebox = new QHBox ( this ); transactionname = new QComboBox ( transactionnamebox ); transactionname->setEditable ( TRUE ); descriptionbutton = new QPushButton ( transactionnamebox ); descriptionbutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/info.png" ) ); - connect ( descriptionbutton, SIGNAL ( released () ), this, SLOT ( addTransactionDescription() ) ); + connect ( descriptionbutton, SIGNAL ( released() ), this, SLOT ( addTransactionDescription() ) ); amountlabel = new QLabel ( "Amount", this ); transactionamountbox = new QHBox ( this ); transactionamount = new QLineEdit ( transactionamountbox ); transactionamount->setAlignment ( Qt::AlignRight ); transactionamount->setText ( "0.00" ); calculatorbutton = new QPushButton( transactionamountbox ); calculatorbutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/kcalc.png" ) ); connect ( calculatorbutton, SIGNAL ( released() ), this, SLOT ( showCalculator() ) ); datelabel = new QLabel ( "Date", this ); transactiondatebox = new QHBox ( this ); transactiondate = new QLineEdit ( transactiondatebox ); transactiondate->setAlignment ( Qt::AlignRight ); transactiondate->setDisabled ( TRUE ); datebutton = new QPushButton( transactiondatebox ); datebutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/date.png" ) ); - connect ( datebutton, SIGNAL ( released () ), this, SLOT ( showCalendar () ) ); + connect ( datebutton, SIGNAL ( released() ), this, SLOT ( showCalendar() ) ); clearedcheckbox = new QCheckBox ( "Cleared", this ); depositbox = new QCheckBox ( "Credit", this ); // START SECOND COLUMN numberlabel = new QLabel ( "Number", this ); transactionnumber = new QLineEdit ( this ); budgetlabel = new QLabel ( "Budget", this ); budgetbox = new QComboBox ( FALSE, this ); lineitemlabel = new QLabel ( "LineItem", this ); lineitembox = new QComboBox ( FALSE, this ); layout = new QGridLayout ( this, 7, 2, 2, 2 ); layout->addWidget ( namelabel, 0, 0, Qt::AlignLeft ); layout->addWidget ( transactionnamebox, 1, 0, Qt::AlignLeft ); layout->addWidget ( amountlabel, 2, 0, Qt::AlignLeft ); layout->addWidget ( transactionamountbox, 3, 0, Qt::AlignLeft ); layout->addWidget ( datelabel, 4, 0, Qt::AlignLeft ); layout->addWidget ( transactiondatebox, 5, 0, Qt::AlignLeft ); layout->addWidget ( clearedcheckbox, 6, 0, Qt::AlignLeft ); layout->addWidget ( numberlabel, 0, 1, Qt::AlignLeft ); layout->addWidget ( transactionnumber, 1, 1, Qt::AlignLeft ); layout->addWidget ( budgetlabel, 2, 1, Qt::AlignLeft ); layout->addWidget ( budgetbox, 3, 1, Qt::AlignLeft ); layout->addWidget ( lineitemlabel, 4, 1, Qt::AlignLeft ); layout->addWidget ( lineitembox, 5, 1, Qt::AlignLeft ); layout->addWidget ( depositbox, 6, 1, Qt::AlignLeft ); if ( budget->getNumberOfBudgets() != 0 ) { budgetnameslist = budget->getBudgetNames(); budgetidslist = budget->getBudgetIDs(); budgetbox->insertStringList ( *budgetnameslist ); lineitemlabel->setEnabled ( FALSE ); lineitembox->setEnabled ( FALSE ); - connect ( budgetbox, SIGNAL ( activated ( int ) ), this, SLOT ( setCurrentBudget ( int ) ) ); - connect ( lineitembox, SIGNAL ( activated ( int ) ), this, SLOT ( setCurrentLineItem ( int ) ) ); + connect ( budgetbox, SIGNAL ( activated(int) ), this, SLOT ( setCurrentBudget(int) ) ); + connect ( lineitembox, SIGNAL ( activated(int) ), this, SLOT ( setCurrentLineItem(int) ) ); } else { budgetlabel->setEnabled ( FALSE ); budgetbox->setEnabled ( FALSE ); lineitemlabel->setEnabled ( FALSE ); lineitembox->setEnabled ( FALSE ); } } NewTransaction::~NewTransaction () { } void NewTransaction::showCalculator () { Calculator *calculator = new Calculator ( this ); calculator->setMaximumWidth ( ( int ) ( this->size().width() * 0.9 ) ); if ( calculator->exec () == QDialog::Accepted ) transactionamount->setText ( calculator->display->text() ); } void NewTransaction::showCalendar () { QDate newDate = QDate::currentDate (); DatePicker *dp = new DatePicker ( newDate ); dp->setMaximumWidth ( ( int ) ( this->size().width() * 0.9 ) ); int response = dp->exec(); if ( response == QDialog::Accepted ) { // Set date integers year = dp->getYear(); month = dp->getMonth(); day = dp->getDay(); // Set dateedited to TRUE // This tells the transactiondisplay object that the user edited an transaction // and did change the date3 dateedited = TRUE; // Display date with our selected format transactiondate->setText ( preferences->getDate ( year, month, day ) ); } } bool NewTransaction::getDateEdited () { return dateedited; } int NewTransaction::getDay () { return day; } int NewTransaction::getMonth () { return month; } int NewTransaction::getYear () { return year; } QString NewTransaction::getDescription () { return transactiondescription; } void NewTransaction::setDescription ( QString description ) { transactiondescription = description; } void NewTransaction::addTransactionDescription () { // Function for adding or editing an transaction description. QDialog *description = new QDialog ( this, "description", TRUE ); description->setCaption ( "Notes" ); QMultiLineEdit *enter = new QMultiLineEdit ( description ); enter->setFixedSize ( ( int ) (this->width() * 0.75 ), ( int ) ( this->height() * 0.5 ) ); enter->setWrapColumnOrWidth ( ( int ) (this->width() * 0.75 ) ); enter->setWordWrap ( QMultiLineEdit::WidgetWidth ); if ( transactiondescription != "(NULL)" ) enter->setText ( transactiondescription ); if ( description->exec () == QDialog::Accepted ) transactiondescription = enter->text (); } int NewTransaction::getNameIndex ( QString name ) { int counter; int items = transactionname->count(); for ( counter = 0; ( items - 1 ); counter++ ) { if ( name == transactionname->text ( counter ) ) { return counter; break; } } return 0; } void NewTransaction::setCurrentBudget ( int index ) { if ( index != 0 ) { currentbudget = budgetidslist->operator[] ( index - 1 ).toInt(); lineitemslist = budget->getLineItems ( currentbudget ); lineitemidslist = budget->getLineItemIDs ( currentbudget ); lineitemlabel->setEnabled ( TRUE ); lineitembox->setEnabled ( TRUE ); lineitembox->clear(); lineitembox->insertStringList ( lineitemslist ); setCurrentLineItem ( 0 ); } else { lineitembox->clear(); lineitemlabel->setEnabled ( FALSE ); lineitembox->setEnabled ( FALSE ); currentlineitem = -1; currentbudget = -1; } } void NewTransaction::setCurrentLineItem ( int index ) { currentlineitem = ( lineitemidslist.operator[] ( index ).toInt() ); } int NewTransaction::getCurrentBudget () { return currentbudget; } int NewTransaction::getBudgetIndex ( int budgetid ) { currentbudget = budgetid; const QString budget = QString::number ( budgetid ); return budgetidslist->findIndex ( budget ); } int NewTransaction::getLineItemIndex ( int lineitemid ) { currentlineitem = lineitemid; const QString lineitem = QString::number ( lineitemid ); return lineitemidslist.findIndex ( lineitem ); } void NewTransaction::setLineItems () { lineitemslist = budget->getLineItems ( currentbudget ); lineitemidslist = budget->getLineItemIDs ( currentbudget ); lineitemlabel->setEnabled ( TRUE ); lineitembox->setEnabled ( TRUE ); lineitembox->clear(); lineitembox->insertStringList ( lineitemslist ); } int NewTransaction::getCurrentLineItem () { return currentlineitem; } void NewTransaction::setComboBoxes ( int budgetid, int lineitemid ) { const QString budgetname = QString::number ( budgetid ); budgetbox->setCurrentItem ( ( budgetidslist->findIndex ( budgetname ) ) ); currentbudget = budgetidslist->operator[] ( budgetbox->currentItem() - 1 ).toInt(); lineitemslist = budget->getLineItems ( currentbudget ); lineitemidslist = budget->getLineItemIDs ( currentbudget ); lineitemlabel->setEnabled ( TRUE ); lineitembox->setEnabled ( TRUE ); lineitembox->clear(); lineitembox->insertStringList ( lineitemslist ); const QString lineitem = QString::number ( lineitemid ); lineitembox->setCurrentItem ( lineitemidslist.findIndex ( lineitem ) ); currentlineitem = ( lineitemidslist.operator[] ( lineitembox->currentItem() ).toInt() ); } diff --git a/noncore/apps/qashmoney/preferencedialogs.cpp b/noncore/apps/qashmoney/preferencedialogs.cpp index 5408a5b..b83c957 100755 --- a/noncore/apps/qashmoney/preferencedialogs.cpp +++ b/noncore/apps/qashmoney/preferencedialogs.cpp @@ -1,216 +1,216 @@ #include "preferencedialogs.h" #include "preferences.h" extern Preferences *preferences; DatePreferences::DatePreferences ( QWidget* parent ) : QDialog ( parent, 0, TRUE ) { setCaption( tr( "Date" ) ); QLabel *datelabel = new QLabel ( "Format", this ); dateformat = new QComboBox ( this ); dateformat->setEditable ( FALSE ); dateformat->insertItem ( "yyyymmdd" ); dateformat->insertItem ( "yymmdd" ); dateformat->insertItem ( "mmddyyyy" ); dateformat->insertItem ( "mmddyy" ); dateformat->insertItem ( "yyyyddmm" ); dateformat->insertItem ( "yyddmm" ); dateformat->insertItem ( "ddmmyyyy" ); dateformat->insertItem ( "ddmmyy" ); - connect ( dateformat, SIGNAL ( activated ( int ) ), this, SLOT ( changeDateFormat ( int ) ) ); + connect ( dateformat, SIGNAL ( activated(int) ), this, SLOT ( changeDateFormat(int) ) ); QLabel *dateseparatorlabel = new QLabel ( "Separator", this ); dateseparator = new QComboBox ( this ); dateseparator->insertItem ( "/" ); dateseparator->insertItem ( "-" ); dateseparator->insertItem ( "." ); - connect ( dateseparator, SIGNAL ( activated ( int ) ), this, SLOT ( changeDateSeparator ( int ) ) ); + connect ( dateseparator, SIGNAL ( activated(int) ), this, SLOT ( changeDateSeparator(int) ) ); defaults = new QPushButton ( QPixmap ( "/opt/QtPalmtop/pics/defaults.png" ), "Defaults", this ); - connect ( defaults, SIGNAL ( released () ), this, SLOT ( setDefaultDatePreferences () ) ); + connect ( defaults, SIGNAL ( released() ), this, SLOT ( setDefaultDatePreferences() ) ); dateformat->setCurrentItem ( ( preferences->getPreference ( 1 ) ) - 1 ); dateseparator->setCurrentItem ( ( preferences->getPreference ( 2 ) ) - 1 ); layout = new QVBoxLayout ( this, 2, 2 ); layout->addWidget ( datelabel ); layout->addWidget ( dateformat ); layout->addWidget ( dateseparatorlabel ); layout->addWidget ( dateseparator ); layout->insertSpacing ( 4, 5 ); layout->addWidget ( defaults ); } DatePreferences::~DatePreferences () { } void DatePreferences::changeDateFormat ( int index ) { index ++; preferences->changePreference ( 1, index ); } void DatePreferences::changeDateSeparator ( int index ) { index ++; preferences->changePreference ( 2, index ); } void DatePreferences::setDefaultDatePreferences () { preferences->setDefaultDatePreferences (); dateformat->setCurrentItem ( ( preferences->getPreference ( 1 ) ) - 1 ); dateseparator->setCurrentItem ( ( preferences->getPreference ( 2 ) ) - 1 ); } // START TRANSACTION PREFERENCES TransactionPreferences::TransactionPreferences ( QWidget* parent ) : QDialog ( parent, 0, TRUE ) { setCaption( tr ( "Transaction" ) ); showclearedtransactions = new QCheckBox ( this ); showclearedtransactions->setText ( "Show Cleared Transactions" ); limittransactionsbox = new QHBox ( this ); limittransactionsbox->setSpacing ( 2 ); limittransactionslabel = new QLabel ( "Show ", limittransactionsbox ); limittransactions = new QComboBox ( limittransactionsbox ); QLabel *limittransactionslabel2 = new QLabel ( "of cleared transactions. ", limittransactionsbox ); limittransactions->insertItem ( "14 days" ); limittransactions->insertItem ( "30 days" ); limittransactions->insertItem ( "90 days" ); limittransactions->insertItem ( "180 days" ); limittransactions->insertItem ( "365 days" ); limittransactions->insertItem ( "All" ); limittransactions->setCurrentItem ( preferences->getPreference ( 7 ) ); excludetransfers = new QCheckBox ( this ); excludetransfers->setText ( "Include Transfers In Limit View" ); if ( preferences->getPreference ( 3 ) == 1 ) showclearedtransactions->setChecked ( TRUE ); else showclearedtransactions->setChecked ( FALSE ); if ( preferences->getPreference ( 6 ) == 1 ) excludetransfers->setChecked ( TRUE ); else excludetransfers->setChecked ( FALSE ); defaults = new QPushButton ( QPixmap ( "/opt/QtPalmtop/pics/defaults.png" ), "Defaults", this ); - connect ( defaults, SIGNAL ( released () ), this, SLOT ( setDefaultTransactionPreferences () ) ); + connect ( defaults, SIGNAL ( released() ), this, SLOT ( setDefaultTransactionPreferences() ) ); layout = new QVBoxLayout ( this, 2, 2 ); layout->addWidget ( showclearedtransactions ); layout->addWidget ( limittransactionsbox ); layout->addWidget ( excludetransfers ); layout->insertSpacing ( 3, 5 ); layout->addWidget ( defaults ); - connect ( showclearedtransactions, SIGNAL ( toggled ( bool ) ), this, SLOT ( changeShowClearedPreference ( bool ) ) ); - connect ( excludetransfers, SIGNAL ( toggled ( bool ) ), this, SLOT ( changeExcludeTranfersPreference ( bool ) ) ); - connect ( limittransactions, SIGNAL ( activated ( int ) ), this, SLOT ( changeLimitTransactionsPreference ( int ) ) ); + connect ( showclearedtransactions, SIGNAL ( toggled(bool) ), this, SLOT ( changeShowClearedPreference(bool) ) ); + connect ( excludetransfers, SIGNAL ( toggled(bool) ), this, SLOT ( changeExcludeTranfersPreference(bool) ) ); + connect ( limittransactions, SIGNAL ( activated(int) ), this, SLOT ( changeLimitTransactionsPreference(int) ) ); } TransactionPreferences::~TransactionPreferences () { } void TransactionPreferences::changeLimitTransactionsPreference ( int pref ) { preferences->changePreference ( 7, pref ); } void TransactionPreferences::changeShowClearedPreference ( bool state ) { if ( state == TRUE ) preferences->changePreference ( 3, 1 ); else preferences->changePreference ( 3, 0 ); } void TransactionPreferences::changeExcludeTranfersPreference ( bool state ) { if ( state == TRUE ) preferences->changePreference ( 6, 1 ); else preferences->changePreference ( 6, 0 ); } void TransactionPreferences::setDefaultTransactionPreferences () { preferences->changePreference ( 3, 0 ); preferences->changePreference ( 6, 0 ); preferences->changePreference ( 7, 0 ); showclearedtransactions->setChecked ( FALSE ); limittransactions->setCurrentItem ( 0 ); } // START ACCOUNT PREFERNCES AccountPreferences::AccountPreferences ( QWidget* parent ) : QDialog ( parent, 0, TRUE ) { setCaption( tr ( "Account" ) ); currencysupport = new QCheckBox ( this ); currencysupport->setText ( "Enable Currency Support" ); onetouch = new QCheckBox ( this ); onetouch->setText ( "One Touch Account Viewing" ); if ( preferences->getPreference ( 4 ) == 1 ) currencysupport->setChecked ( TRUE ); else currencysupport->setChecked ( FALSE ); if ( preferences->getPreference ( 5 ) == 1 ) onetouch->setChecked ( TRUE ); else onetouch->setChecked ( FALSE ); defaults = new QPushButton ( QPixmap ( "/opt/QtPalmtop/pics/defaults.png" ), "Defaults", this ); - connect ( defaults, SIGNAL ( released () ), this, SLOT ( setDefaultAccountPreferences () ) ); + connect ( defaults, SIGNAL ( released() ), this, SLOT ( setDefaultAccountPreferences() ) ); layout = new QVBoxLayout ( this, 2, 2 ); layout->addWidget ( currencysupport ); layout->addWidget ( onetouch ); layout->insertSpacing ( 2, 5 ); layout->addWidget ( defaults ); - connect ( currencysupport, SIGNAL ( toggled ( bool ) ), this, SLOT ( changeCurrencySupport ( bool ) ) ); - connect ( onetouch, SIGNAL ( toggled ( bool ) ), this, SLOT ( changeOneTouchViewing ( bool ) ) ); + connect ( currencysupport, SIGNAL ( toggled(bool) ), this, SLOT ( changeCurrencySupport(bool) ) ); + connect ( onetouch, SIGNAL ( toggled(bool) ), this, SLOT ( changeOneTouchViewing(bool) ) ); } AccountPreferences::~AccountPreferences () { } void AccountPreferences::changeCurrencySupport ( bool state ) { if ( state == TRUE ) preferences->changePreference ( 4, 1 ); else preferences->changePreference ( 4, 0 ); } void AccountPreferences::changeOneTouchViewing ( bool state ) { if ( state == TRUE ) preferences->changePreference ( 5, 1 ); else preferences->changePreference ( 5, 0 ); } void AccountPreferences::setDefaultAccountPreferences () { preferences->changePreference ( 4, 0 ); preferences->changePreference ( 5, 0 ); currencysupport->setChecked ( FALSE ); onetouch->setChecked ( FALSE ); } diff --git a/noncore/apps/qashmoney/qashmoney.cpp b/noncore/apps/qashmoney/qashmoney.cpp index d4cbc14..1455eb0 100755 --- a/noncore/apps/qashmoney/qashmoney.cpp +++ b/noncore/apps/qashmoney/qashmoney.cpp @@ -1,402 +1,402 @@ #include "qashmoney.h" #include "preferencedialogs.h" #include "memorydialog.h" #include <qheader.h> Budget *budget = new Budget (); Preferences *preferences = new Preferences (); Account *account = new Account (); Transaction *transaction = new Transaction (); Transfer *transfer = new Transfer (); Memory *memory = new Memory (); QashMoney::QashMoney () : QWidget () { preferences->addPreferences (); preferences->initializeColumnPreferences (); preferences->initializeSortingPreferences (); // set the text in the upper part of the frame setCaption ( tr ( "QashMoney" ) ); // Create new menubar for our mainwindow // and add menu items mainmenu = new QMenuBar ( this ); mainmenu->setFrameStyle ( QFrame::PopupPanel | QFrame::Raised ); preferencesmenu = new QPopupMenu ( this ); utilitiesmenu = new QPopupMenu ( this ); mainmenu->insertItem ( "Preferences", preferencesmenu ); mainmenu->insertItem ( "Utilities", utilitiesmenu ); - preferencesmenu->insertItem ( "Date", this, SLOT ( displayDatePreferencesDialog () ) ); - preferencesmenu->insertItem ( "Account", this, SLOT ( displayAccountPreferencesDialog () ) ); - preferencesmenu->insertItem ( "Transaction", this, SLOT ( displayTransactionPreferencesDialog () ) ); - utilitiesmenu->insertItem ( "Memory", this, SLOT ( displayMemoryDialog () ) ); + preferencesmenu->insertItem ( "Date", this, SLOT ( displayDatePreferencesDialog() ) ); + preferencesmenu->insertItem ( "Account", this, SLOT ( displayAccountPreferencesDialog() ) ); + preferencesmenu->insertItem ( "Transaction", this, SLOT ( displayTransactionPreferencesDialog() ) ); + utilitiesmenu->insertItem ( "Memory", this, SLOT ( displayMemoryDialog() ) ); // create the main tabwidget for displaying accounts and transactions maintabs = new QTabWidget ( this ); tab = new QWidget ( this ); tab_2 = new QWidget ( this ); tab_3 = new QWidget ( this ); maintabs->addTab ( tab, "Accounts" ); maintabs->addTab ( tab_2, "Transactions" ); maintabs->addTab ( tab_3, "Budgets" ); tabheight = tab->height(); maintabs->setTabEnabled ( tab_2, FALSE ); // create a new account display object accountdisplay = new AccountDisplay ( maintabs ); accountdisplay->setTabs ( tab_2, maintabs ); - connect ( accountdisplay->listview, SIGNAL ( selectionChanged () ), this, SLOT ( setTransactionTab () ) ); + connect ( accountdisplay->listview, SIGNAL ( selectionChanged() ), this, SLOT ( setTransactionTab() ) ); // set the connection to disable the one touch account viewing if we are transfering money - connect ( accountdisplay->transferbutton, SIGNAL ( toggled ( bool ) ), this, SLOT ( toggleOneTouchViewing ( bool ) ) ); + connect ( accountdisplay->transferbutton, SIGNAL ( toggled(bool) ), this, SLOT ( toggleOneTouchViewing(bool) ) ); // create a new transactiondisplay object transactiondisplay = new TransactionDisplay ( maintabs ); transactiondisplay->hide(); // create new budgetdisplay object budgetdisplay = new BudgetDisplay ( maintabs ); budgetdisplay->hide(); tabslayout = new QVBoxLayout ( maintabs, 4, 2 ); tabslayout->addSpacing ( tabheight ); tabslayout->addWidget ( accountdisplay ); tabslayout->addWidget ( transactiondisplay ); tabslayout->addWidget ( budgetdisplay ); // connect a change in the maintabs with changing the tab display - connect ( maintabs, SIGNAL ( currentChanged ( QWidget * ) ), this, SLOT ( changeTabDisplay () ) ); + connect ( maintabs, SIGNAL ( currentChanged(QWidget*) ), this, SLOT ( changeTabDisplay() ) ); // create layout that will contain the menubar and the maintabs layout = new QVBoxLayout ( this, 2, 2 ); layout->setMenuBar ( mainmenu ); layout->addWidget ( maintabs ); } QashMoney::~QashMoney () { delete budget; delete preferences; delete account; delete transaction; delete transfer; delete memory; } void QashMoney::changeTabDisplay () { // if the user pressed the transactions tab, hide the account display // object and create a new transaction display if ( maintabs->currentPageIndex() == 1 ) { // initialize variables bool children = FALSE; // hide the account display and define accountid int accountid = accountdisplay->listview->selectedItem()->text ( accountdisplay->getIDColumn() ).toInt(); //remove all the columns from the transactiondisplay int columns = transactiondisplay->listview->columns(); int counter; for ( counter = 0; counter <= columns; counter++ ) transactiondisplay->listview->removeColumn ( 0 ); // set the account name and account balance QString name = account->getAccountName ( accountid ); QString balance = account->getAccountBalance ( accountid ); transactiondisplay->name->setText ( name ); transactiondisplay->balance->setText ( balance ); // clear the limitbox transactiondisplay->limitbox->clear(); // get parent account id int parentaccountid = account->getParentAccountID ( accountid ); // add columns based on which account is selected // this first if determines if we selected a parent with no children or a child // in these cases, we add standard three columns for date, transaction, amount transactiondisplay->listview->addColumn ( "Date", 0 ); transactiondisplay->listview->addColumn ( "Transaction", 0 ); transactiondisplay->listview->addColumn ( "Amt", 0); transactiondisplay->listview->setColumnAlignment ( 2, Qt::AlignRight ); transactiondisplay->listview->addColumn ( "", 0 ); if ( accountdisplay->listview->selectedItem()->parent() == 0 && accountdisplay->listview->selectedItem()->childCount() != 0 ) // we selected a parent with children { // add an extra column for the account name for eac child transaction transactiondisplay->listview->addColumn ( "Acct", 0 ); children = TRUE; // hide the new transaction button transactiondisplay->newtransaction->setEnabled ( FALSE ); } else //we selected a parent without children or a child transactiondisplay->newtransaction->setEnabled ( TRUE ); // disable the transactionid column so it can't be red transactiondisplay->listview->header()->setResizeEnabled ( FALSE, 3 ); // set the accountid and children variables transactiondisplay->setChildren ( children ); transactiondisplay->setAccountID ( accountid ); setTransactionDisplayDate (); // display transactions transactiondisplay->listview->clear(); QString displaytext = "%"; displaytext.prepend ( transactiondisplay->limitbox->text() ); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( transactiondisplay->listview, accountid, children, displaytext, newdate ); // display transfers transfer->displayTransfers ( transactiondisplay->listview, accountid, children, newdate ); // open a new preferences object and resize the transaction display columns // each column will have a different size based on whether we are looking at a child // account or children through a parent if ( parentaccountid != -1 || accountdisplay->listview->selectedItem()->childCount() == 0 ) // a parent with no children or a child - three columns { transactiondisplay->listview->setColumnWidth ( 0, preferences->getColumnPreference ( 3 ) ); // normal transaction date width transactiondisplay->listview->setColumnWidthMode ( 0, QListView::Manual ); transactiondisplay->listview->setColumnWidth ( 1, preferences->getColumnPreference ( 4 ) ); // normal transaction name width transactiondisplay->listview->setColumnWidthMode ( 1, QListView::Manual ); transactiondisplay->listview->setColumnWidth ( 2, preferences->getColumnPreference ( 5 ) ); // normal transaction amount width transactiondisplay->listview->setColumnWidthMode ( 2, QListView::Manual ); } else { transactiondisplay->listview->setColumnWidth ( 0, preferences->getColumnPreference ( 6 ) ); // extended transaction date width transactiondisplay->listview->setColumnWidthMode ( 0, QListView::Manual ); transactiondisplay->listview->setColumnWidth ( 1, preferences->getColumnPreference ( 7 ) ); // extended transaction name width transactiondisplay->listview->setColumnWidthMode ( 1, QListView::Manual ); transactiondisplay->listview->setColumnWidth ( 2, preferences->getColumnPreference ( 8 ) ); // extended transaction amount width transactiondisplay->listview->setColumnWidthMode ( 2, QListView::Manual ); transactiondisplay->listview->setColumnWidth ( 4, preferences->getColumnPreference ( 9 ) ); // transaction account width transactiondisplay->listview->setColumnWidthMode ( 4, QListView::Manual ); } // pull the column sorting preference from the preferences table, and configure the listview accordingly int column = 0; int direction = 0; preferences->getSortingPreference ( 2, &column, &direction ); transactiondisplay->listview->setSorting ( column, direction ); // show the window transactiondisplay->show(); // hide the account display and define accountid accountdisplay->hide(); // hide the budget display budgetdisplay->hide(); } else if ( maintabs->currentPageIndex() == 0 ) { disableOneTouchViewing(); // clear the account display selection accountdisplay->listview->clearSelection(); // resize the account display columns accountdisplay->listview->setColumnWidth ( 0, preferences->getColumnPreference ( 1 ) ); accountdisplay->listview->setColumnWidth ( 1, preferences->getColumnPreference ( 2 ) ); // set sorting preference on account display columns int column = 0; int direction = 0; preferences->getSortingPreference ( 1, &column, &direction ); accountdisplay->listview->setSorting ( column, direction ); // display the accounts if ( account->getNumberOfAccounts() != 0 ) account->displayAccounts ( accountdisplay->listview ); maintabs->setTabEnabled ( tab_2, FALSE ); // set the toggle button accountdisplay->setToggleButton (); // show the account display accountdisplay->show(); // hide the transaction display transactiondisplay->hide(); // hide the budget display budgetdisplay->hide(); enableOneTouchViewing (); } else { budgetdisplay->displayLineItems(); budgetdisplay->show(); transactiondisplay->hide(); accountdisplay->hide(); } } void QashMoney::setTransactionTab () { if ( accountdisplay->listview->selectedItem() == 0 ) maintabs->setTabEnabled ( tab_2, FALSE ); else maintabs->setTabEnabled ( tab_2, TRUE ); } void QashMoney::displayDatePreferencesDialog () { // this shows a dialog to set preferences for formatting the date DatePreferences *pd = new DatePreferences ( this ); pd->exec (); if ( transactiondisplay->isVisible() ) { // set the account id int accountid = accountdisplay->listview->selectedItem()->text ( accountdisplay->getIDColumn() ).toInt(); // set children so we can let displayTransfers know if there are children for the selected account bool children; if ( accountdisplay->listview->selectedItem()->parent() == 0 && accountdisplay->listview->selectedItem()->childCount() != 0 ) children = TRUE; else children = FALSE; // redisplay transactions if they are visible incorporating // any changes to the date format transactiondisplay->listview->clear(); QString displaytext = "%"; displaytext.prepend ( transactiondisplay->limitbox->text() ); setTransactionDisplayDate(); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( transactiondisplay->listview, accountid, children, displaytext, newdate ); if ( transfer->getNumberOfTransfers() != 0 ) transfer->displayTransfers ( transactiondisplay->listview, accountid, children, newdate ); } else if ( accountdisplay->isVisible() ) { accountdisplay->listview->clearSelection(); maintabs->setTabEnabled ( tab_2, FALSE ); } else budgetdisplay->updateBudgetInformation(); } void QashMoney::displayTransactionPreferencesDialog () { // display a dialog for setting preferences for transactions TransactionPreferences *td = new TransactionPreferences ( this ); td->exec (); if ( transactiondisplay->isVisible() ) { // set the account id int accountid = accountdisplay->listview->selectedItem()->text ( accountdisplay->getIDColumn() ).toInt(); // set children so we can let displayTransfers know if there are children for the selected account bool children; if ( accountdisplay->listview->selectedItem()->parent() == 0 && accountdisplay->listview->selectedItem()->childCount() != 0 ) children = TRUE; else children = FALSE; // redisplay transactions incorporating any transaction preference changes transactiondisplay->listview->clear(); QString displaytext = "%"; displaytext.prepend ( transactiondisplay->limitbox->text() ); setTransactionDisplayDate(); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( transactiondisplay->listview, accountid, children, displaytext, newdate ); if ( transfer->getNumberOfTransfers() != 0 ) transfer->displayTransfers ( transactiondisplay->listview, accountid, children, newdate ); } else { accountdisplay->listview->clearSelection(); maintabs->setTabEnabled ( tab_2, FALSE ); } } void QashMoney::displayAccountPreferencesDialog () { // display a dialog for setting preferences for accounts AccountPreferences *ap = new AccountPreferences ( this ); ap->exec (); if ( accountdisplay->isVisible() && account->getNumberOfAccounts() != 0 ) { accountdisplay->listview->clear(); account->displayAccounts ( accountdisplay->listview ); accountdisplay->listview->clearSelection(); maintabs->setTabEnabled ( tab_2, FALSE ); } changeTabDisplay(); } void QashMoney::displayMemoryDialog () { // opens a dialog to add, edit and delete memory items MemoryDialog *md = new MemoryDialog (); md->exec(); } void QashMoney::showTransactions () { maintabs->setCurrentPage ( 1 ); } void QashMoney::enableOneTouchViewing () { if ( preferences->getPreference ( 5 ) == 1 ) - connect ( accountdisplay->listview, SIGNAL ( selectionChanged () ), this, SLOT ( showTransactions () ) ); + connect ( accountdisplay->listview, SIGNAL ( selectionChanged() ), this, SLOT ( showTransactions() ) ); else - disconnect ( accountdisplay->listview, SIGNAL ( selectionChanged () ), this, SLOT ( showTransactions () ) ); + disconnect ( accountdisplay->listview, SIGNAL ( selectionChanged() ), this, SLOT ( showTransactions() ) ); } void QashMoney::disableOneTouchViewing () { - disconnect ( accountdisplay->listview, SIGNAL ( selectionChanged () ), this, SLOT ( showTransactions () ) ); + disconnect ( accountdisplay->listview, SIGNAL ( selectionChanged() ), this, SLOT ( showTransactions() ) ); } void QashMoney::toggleOneTouchViewing ( bool state ) { if ( state == TRUE ) disableOneTouchViewing(); else enableOneTouchViewing(); } void QashMoney::setTransactionDisplayDate () { // determine how many days of transactions to show int limittype = preferences->getPreference ( 7 ); if ( limittype != 5 ) // set today's date if we are not showing all transactions { QDate today = QDate::currentDate (); switch ( limittype ) // if we are not showing all transactions { case 0: // viewing two weeks newdate = today.addDays ( -14 ); break; case 1: // viewing one month newdate = today.addDays ( -30 ); break; case 2: // three months newdate = today.addDays ( -90 ); break; case 3: // six months newdate = today.addDays ( -180 ); break; case 4: // one year newdate = today.addDays ( -365 ); break; } } else newdate = QDate ( 1900, 1, 1 ); } diff --git a/noncore/apps/qashmoney/transactiondisplay.cpp b/noncore/apps/qashmoney/transactiondisplay.cpp index 474f11e..0b94d62 100755 --- a/noncore/apps/qashmoney/transactiondisplay.cpp +++ b/noncore/apps/qashmoney/transactiondisplay.cpp @@ -1,600 +1,600 @@ #include "transactiondisplay.h" #include "newtransaction.h" #include "account.h" #include "budget.h" #include "memory.h" #include "transfer.h" #include "calculator.h" #include "datepicker.h" #include <qmessagebox.h> #include <qheader.h> #include <qmultilineedit.h> extern Transaction *transaction; extern Budget *budget; extern Account *account; extern Preferences *preferences; extern Memory *memory; extern Transfer *transfer; TransactionDisplay::TransactionDisplay ( QWidget* parent ) : QWidget ( parent ) { // set transactiondisplay variables; accountid = 0; children = TRUE; firstline = new QHBox ( this ); firstline->setSpacing ( 2 ); newtransaction = new QPushButton ( firstline ); newtransaction->setPixmap ( QPixmap ("/opt/QtPalmtop/pics/new.png") ); - connect ( newtransaction, SIGNAL ( released () ), this, SLOT ( addTransaction () ) ); + connect ( newtransaction, SIGNAL ( released() ), this, SLOT ( addTransaction() ) ); edittransaction = new QPushButton ( firstline ); edittransaction->setPixmap( QPixmap ("/opt/QtPalmtop/pics/edit.png") ); - connect ( edittransaction, SIGNAL ( released () ), this, SLOT ( checkListViewEdit () ) ); + connect ( edittransaction, SIGNAL ( released() ), this, SLOT ( checkListViewEdit() ) ); deletetransaction = new QPushButton ( firstline ); deletetransaction->setPixmap( QPixmap ( "/opt/QtPalmtop/pics/delete.png") ); - connect ( deletetransaction, SIGNAL ( released () ), this, SLOT ( checkListViewDelete () ) ); + connect ( deletetransaction, SIGNAL ( released() ), this, SLOT ( checkListViewDelete() ) ); toggletransaction = new QPushButton ( firstline ); toggletransaction->setPixmap( QPixmap ( "/opt/QtPalmtop/pics/redo.png") ); - connect ( toggletransaction, SIGNAL ( released () ), this, SLOT ( checkListViewToggle () ) ); + connect ( toggletransaction, SIGNAL ( released() ), this, SLOT ( checkListViewToggle() ) ); viewtransactionnotes = new QPushButton ( firstline ); viewtransactionnotes->setPixmap( QPixmap ( "/opt/QtPalmtop/pics/info.png") ); - connect ( viewtransactionnotes, SIGNAL ( released () ), this, SLOT ( showTransactionNotes () ) ); + connect ( viewtransactionnotes, SIGNAL ( released() ), this, SLOT ( showTransactionNotes() ) ); secondline = new QHBox ( this ); secondline->setSpacing ( 5 ); name = new QLabel ( secondline ); balance = new QLabel ( secondline ); QLabel *limit = new QLabel ( "Limit", secondline ); limitbox = new QLineEdit ( secondline ); limitbox->setMinimumWidth ( ( int ) ( this->width() / 6 ) ); - connect ( limitbox, SIGNAL ( textChanged ( const QString & ) ), this, SLOT ( limitDisplay ( const QString & ) ) ); + connect ( limitbox, SIGNAL ( textChanged(const QString&) ), this, SLOT ( limitDisplay(const QString&) ) ); listview = new QListView ( this ); listview->setAllColumnsShowFocus ( TRUE ); listview->setShowSortIndicator ( TRUE ); listview->header()->setTracking ( FALSE ); - connect ( listview->header(), SIGNAL ( sizeChange ( int, int, int ) ), this, SLOT ( saveColumnSize ( int, int, int ) ) ); - connect ( listview->header(), SIGNAL ( clicked ( int ) ), this, SLOT ( saveSortingPreference ( int ) ) ); + connect ( listview->header(), SIGNAL ( sizeChange(int,int,int) ), this, SLOT ( saveColumnSize(int,int,int) ) ); + connect ( listview->header(), SIGNAL ( clicked(int) ), this, SLOT ( saveSortingPreference(int) ) ); layout = new QVBoxLayout ( this, 2, 2 ); layout->addWidget ( firstline ); layout->addWidget ( secondline ); layout->addWidget ( listview ); } void TransactionDisplay::addTransaction () { // create local variables int cleared = -1; // create new transaction window NewTransaction *newtransaction = new NewTransaction ( this ); int width = this->size().width(); newtransaction->transactionname->setMaximumWidth ( ( int ) ( width * 0.45 ) ); newtransaction->transactionname->setMinimumWidth ( ( int ) ( width * 0.35 ) ); newtransaction->lineitembox->setMaximumWidth ( ( int ) ( width * 0.45 ) ); newtransaction->transactiondatebox->setMaximumWidth ( ( int ) ( width * 0.4 ) ); newtransaction->transactionamountbox->setMaximumWidth ( ( int ) ( width * 0.4 ) ); newtransaction->transactionnumber->setMaximumWidth ( ( int ) ( width * 0.25 ) ); // enter today's date in the date box as defaul QDate today = QDate::currentDate (); int defaultday = today.day(); int defaultmonth = today.month(); int defaultyear = today.year(); newtransaction->transactiondate->setText ( preferences->getDate ( defaultyear, defaultmonth, defaultday ) ); // add memory items to the transactionname combobox memory->displayMemoryItems ( newtransaction->transactionname ); newtransaction->transactionname->insertItem ( "", 0 ); if ( newtransaction->exec () == QDialog::Accepted ) { if ( newtransaction->clearedcheckbox->isChecked () == TRUE ) // set a parent id and type for a child transaction cleared = 1; else cleared = 0; float amount = newtransaction->transactionamount->text().toFloat(); if ( newtransaction->depositbox->isChecked() == FALSE ) amount = amount * -1; // add the transaction name to the memory items memory->addMemoryItem ( newtransaction->transactionname->currentText() ); // add the transaction if ( newtransaction->getDateEdited () == TRUE ) transaction->addTransaction ( newtransaction->getDescription(), newtransaction->transactionname->currentText(), accountid, account->getParentAccountID ( accountid ), newtransaction->transactionnumber->text().toInt(), newtransaction->getDay(), newtransaction->getMonth(), newtransaction->getYear(), amount, cleared, newtransaction->getCurrentBudget(), newtransaction->getCurrentLineItem() ); else transaction->addTransaction ( newtransaction->getDescription(), newtransaction->transactionname->currentText(), accountid, account->getParentAccountID ( accountid ), newtransaction->transactionnumber->text().toInt(), defaultday, defaultmonth, defaultyear, amount, cleared, newtransaction->getCurrentBudget(), newtransaction->getCurrentLineItem() ); // redisplay transactions listview->clear(); QString displaytext = "%"; displaytext.prepend ( limitbox->text() ); setTransactionDisplayDate (); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( listview, accountid, children, displaytext, displaydate ); // redisplay transfers if ( transfer->getNumberOfTransfers() > 0 ) transfer->displayTransfers ( listview, accountid, children, displaydate ); // add the transaction amount to the account it's associated with // and update its parent account balance if necessary account->updateAccountBalance ( accountid ); if ( account->getParentAccountID ( accountid ) != -1 ) account->changeParentAccountBalance ( account->getParentAccountID ( accountid ) ); // format then reset the account balance redisplayAccountBalance (); } } void TransactionDisplay::checkListViewEdit () { if ( listview->selectedItem() == 0 ) QMessageBox::warning ( this, "QashMoney", "Please select a transaction\nto edit."); else if ( listview->currentItem()->text ( getIDColumn() ).toInt() < 0 ) editTransfer (); else editTransaction(); } void TransactionDisplay::showCalculator () { Calculator *calculator = new Calculator ( this ); if ( calculator->exec () == QDialog::Accepted ) amount->setText ( calculator->display->text() ); } void TransactionDisplay::showCalendar () { QDate newDate = QDate::currentDate (); DatePicker *dp = new DatePicker ( newDate ); if ( dp->exec () == QDialog::Accepted ) { year = dp->getYear(); month = dp->getMonth(); day = dp->getDay(); date->setText ( preferences->getDate ( year, month, day ) ); } } void TransactionDisplay::editTransfer () { transferid = listview->currentItem()->text ( getIDColumn() ).toInt(); fromaccount = transfer->getFromAccountID ( transferid ); toaccount = transfer->getToAccountID ( transferid ); year = transfer->getYear ( transferid ); month = transfer->getMonth ( transferid ); day = transfer->getDay ( transferid ); QDialog *editransfer = new QDialog ( this, "edittransfer", TRUE ); editransfer->setCaption ( "Transfer" ); QStringList accountnames = account->getAccountNames(); QStringList accountids = account->getAccountIDs(); QLabel *fromaccountlabel = new QLabel ( "From Account:", editransfer ); QFont f = this->font(); f.setWeight ( QFont::Bold ); fromaccountlabel->setFont ( f ); QComboBox *fromaccountbox = new QComboBox ( editransfer ); fromaccountbox->insertStringList ( accountnames ); fromaccountbox->setCurrentItem ( accountids.findIndex ( QString::number ( fromaccount ) ) ); QLabel *toaccountlabel = new QLabel ( "To Account:", editransfer ); toaccountlabel->setFont ( f ); QComboBox *toaccountbox = new QComboBox ( editransfer ); toaccountbox->insertStringList ( accountnames ); toaccountbox->setCurrentItem ( accountids.findIndex ( QString::number ( toaccount ) ) ); QLabel *datelabel = new QLabel ( "Date", editransfer ); QHBox *datebox = new QHBox ( editransfer ); datebox->setSpacing ( 2 ); date = new QLineEdit ( datebox ); date->setAlignment ( Qt::AlignRight ); date->setDisabled ( TRUE ); date->setText ( preferences->getDate ( year, month, day ) ); QPushButton *datebutton = new QPushButton ( datebox ); datebutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/date.png" ) ); - connect ( datebutton, SIGNAL ( released () ), this, SLOT ( showCalendar () ) ); + connect ( datebutton, SIGNAL ( released() ), this, SLOT ( showCalendar() ) ); QLabel *amounttlabel = new QLabel ( "Amount", editransfer ); QHBox *amountbox = new QHBox ( editransfer ); amountbox->setSpacing ( 2 ); amount = new QLineEdit ( amountbox ); amount->setAlignment ( Qt::AlignRight ); amount->setText ( transfer->getAmount ( transferid ) ); QPushButton *calculatorbutton = new QPushButton( amountbox ); calculatorbutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/kcalc.png" ) ); connect ( calculatorbutton, SIGNAL ( released() ), this, SLOT ( showCalculator() ) ); QCheckBox *clearedcheckbox = new QCheckBox ( "Cleared", editransfer ); QBoxLayout *layout = new QVBoxLayout ( editransfer, 4, 2 ); layout->addWidget ( fromaccountlabel, Qt::AlignLeft ); layout->addWidget ( fromaccountbox, Qt::AlignLeft ); layout->addWidget ( toaccountlabel, Qt::AlignLeft ); layout->addWidget ( toaccountbox, Qt::AlignLeft ); layout->addSpacing ( 5 ); layout->addWidget ( datelabel, Qt::AlignLeft ); layout->addWidget ( datebox, Qt::AlignLeft ); layout->addWidget ( amounttlabel, Qt::AlignLeft ); layout->addWidget ( amountbox, Qt::AlignLeft ); layout->addWidget ( clearedcheckbox, Qt::AlignLeft ); if ( editransfer->exec() == QDialog::Accepted ) { //get fromaccount fromaccount = ( accountids.operator[] ( fromaccountbox->currentItem() ) ).toInt(); //get to account toaccount = ( accountids.operator[] ( toaccountbox->currentItem() ) ).toInt(); //set cleared flag int cleared = 0; if ( clearedcheckbox->isChecked() == TRUE ) cleared = 1; //update transfer transfer->updateTransfer ( fromaccount, account->getParentAccountID ( fromaccount ), toaccount, account->getParentAccountID ( toaccount ), day, month, year, amount->text().toFloat(), cleared, transferid ); account->updateAccountBalance ( fromaccount ); if ( account->getParentAccountID ( fromaccount ) != -1 ) account->changeParentAccountBalance ( account->getParentAccountID ( fromaccount ) ); updateAndDisplay ( toaccount ); } } void TransactionDisplay::editTransaction () { int cleared; // set the transaction id and budgetid int transactionid = listview->currentItem()->text ( getIDColumn() ).toInt(); int budgetid = transaction->getBudgetID ( transactionid ); int lineitemid = transaction->getLineItemID ( transactionid ); // create edit transaction window NewTransaction *newtransaction = new NewTransaction ( this ); int width = this->width(); newtransaction->transactionname->setMaximumWidth ( ( int ) ( width * 0.45 ) ); newtransaction->transactionname->setMinimumWidth ( ( int ) ( width * 0.35 ) ); newtransaction->lineitembox->setMaximumWidth ( ( int ) ( width * 0.45 ) ); newtransaction->transactiondatebox->setMaximumWidth ( ( int ) ( width * 0.4 ) ); newtransaction->transactionamountbox->setMaximumWidth ( ( int ) ( width * 0.4 ) ); newtransaction->transactionnumber->setMaximumWidth ( ( int ) ( width * 0.25 ) ); // enter the date in the date box newtransaction->year = transaction->getYear ( transactionid ); newtransaction->month = transaction->getMonth ( transactionid ); newtransaction->day = transaction->getDay ( transactionid ); newtransaction->transactiondate->setText ( preferences->getDate ( newtransaction->year, newtransaction->month, newtransaction->day ) ); // set the description newtransaction->setDescription ( transaction->getTransactionDescription ( transactionid ) ); // add memory items to the transactionname combobox memory->displayMemoryItems ( newtransaction->transactionname ); // add correct transaction name newtransaction->transactionname->setEditText ( transaction->getPayee ( transactionid ) ); // add transaction number newtransaction->transactionnumber->setText ( transaction->getNumber ( transactionid ) ); // add transaction amount newtransaction->transactionamount->setText ( transaction->getAbsoluteAmount ( transactionid ) ); // check for and set the correct budget if ( budgetid >= 1 ) // only do it if this transaction has a budget and line item { newtransaction->budgetbox->setCurrentItem ( newtransaction->getBudgetIndex ( budgetid ) + 1 ); if ( lineitemid >= 1 ) { newtransaction->setLineItems (); newtransaction->lineitembox->setCurrentItem ( newtransaction->getLineItemIndex ( lineitemid ) ); } else { newtransaction->lineitemlabel->setEnabled ( FALSE ); newtransaction->lineitembox->setEnabled ( FALSE ); } } else { newtransaction->lineitemlabel->setEnabled ( FALSE ); newtransaction->lineitembox->setEnabled ( FALSE ); } // check cleared checkbox if necessary if ( transaction->getCleared ( transactionid ) == 1 ) newtransaction->clearedcheckbox->setChecked ( TRUE ); // check deposit box if necessary if ( transaction->getAmount ( transactionid ).toFloat() > 0 ) newtransaction->depositbox->setChecked ( TRUE ); if ( newtransaction->exec () == QDialog::Accepted ) { if ( newtransaction->clearedcheckbox->isChecked () == TRUE ) cleared = 1; else cleared = 0; float amount = newtransaction->transactionamount->text().toFloat(); if ( newtransaction->depositbox->isChecked() == FALSE ) amount = amount * -1; // add the transaction name to the memory items memory->addMemoryItem ( newtransaction->transactionname->currentText() ); // update the transaction transaction->updateTransaction ( newtransaction->getDescription(), newtransaction->transactionname->currentText(), newtransaction->transactionnumber->text().toInt(), newtransaction->getDay(), newtransaction->getMonth(), newtransaction->getYear(), amount, cleared, newtransaction->getCurrentBudget(), newtransaction->getCurrentLineItem(), transactionid ); updateAndDisplay ( transaction->getAccountID ( transactionid ) ); } } void TransactionDisplay::updateAndDisplay ( int id ) { // redisplay transactions listview->clear(); QString displaytext = "%"; displaytext.prepend ( limitbox->text() ); setTransactionDisplayDate (); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( listview, accountid, children, displaytext, displaydate ); // redisplay transfers if ( transfer->getNumberOfTransfers() > 0 ) transfer->displayTransfers ( listview, accountid, children, displaydate ); // add the transaction amount to the account it's associated with // and update its parent account balance if necessary account->updateAccountBalance ( id ); if ( account->getParentAccountID ( id ) != -1 ) account->changeParentAccountBalance ( account->getParentAccountID ( id ) ); // format then reset the account balance redisplayAccountBalance (); } void TransactionDisplay::checkListViewDelete () { if ( listview->selectedItem() == 0 ) QMessageBox::warning ( this, "QashMoney", "Please select a transaction to\ndelete."); else deleteTransaction (); } void TransactionDisplay::deleteTransaction () { int transactionid = listview->currentItem()->text ( getIDColumn() ).toInt(); if ( transactionid > 0 ) // takes care of deleting transactions { // check if we are viewing child transactions through a parent // in that case we will have to update balances for the parent // which is represented by accountid and the child account // which will be represented by childaccountid int childaccountid = -1; if ( listview->columns() == 5 ) childaccountid = transaction->getAccountID ( transactionid ); transaction->deleteTransaction ( transactionid ); listview->clear(); QString displaytext = "%"; displaytext.prepend ( limitbox->text() ); setTransactionDisplayDate (); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( listview, accountid, children, displaytext, displaydate ); if ( transfer->getNumberOfTransfers() > 0 ) transfer->displayTransfers ( listview, accountid, children, displaydate ); // if we are viewing different child accounts through the parent account // ie if there are five columns and the parentid is -1 // update the accountid ( which is the parent ) and update the child account // balance. Get its accountid from the transactionid account->updateAccountBalance ( accountid ); // will update either a parent or child if ( account->getParentAccountID ( accountid ) != -1 ) // update its parent if there is one account->changeParentAccountBalance ( account->getParentAccountID ( accountid ) ); if ( childaccountid != -1 ) // we've set childaccountid account->updateAccountBalance ( childaccountid ); // format then reset the account balance redisplayAccountBalance (); } else // takes care of deleting transfers { // get the accountids before we delete the transfer int fromaccountid = transfer->getFromAccountID ( transactionid ); int toaccountid = transfer->getToAccountID ( transactionid ); // delete the transfer and redisplay transactions transfer->deleteTransfer ( transactionid ); listview->clear(); QString displaytext = "%"; displaytext.prepend ( limitbox->text() ); setTransactionDisplayDate (); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( listview, accountid, children, displaytext, displaydate ); if ( transfer->getNumberOfTransfers() > 0 ) transfer->displayTransfers ( listview, accountid, children, displaydate ); // for the from account account->updateAccountBalance ( fromaccountid ); if ( account->getParentAccountID ( fromaccountid ) != -1 ) account->changeParentAccountBalance ( account->getParentAccountID ( fromaccountid ) ); // for the to account account->updateAccountBalance ( toaccountid ); if ( account->getParentAccountID ( toaccountid ) != -1 ) account->changeParentAccountBalance ( account->getParentAccountID ( toaccountid ) ); // format then reset the account balance redisplayAccountBalance (); } } void TransactionDisplay::checkListViewToggle () { if ( listview->selectedItem() == 0 ) QMessageBox::warning ( this, "QashMoney", "Please select a transaction to\nclear or reset."); else toggleTransaction (); } void TransactionDisplay::toggleTransaction () { //get the transaction of the selected transaction to determine if its a transaction or transfer int transactionid = listview->currentItem()->text ( getIDColumn() ).toInt(); if ( transactionid > 0 ) // if this is a transaction { if ( transaction->getCleared ( transactionid ) == 0 ) transaction->setCleared ( transactionid, 1 ); else transaction->setCleared ( transactionid, 0 ); } else { if ( transfer->getCleared ( transactionid ) == 0 ) transfer->setCleared ( transactionid, 1 ); else transfer->setCleared ( transactionid, 0 ); } listview->clear(); QString displaytext = "%"; displaytext.prepend ( limitbox->text() ); setTransactionDisplayDate (); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( listview, accountid, children, displaytext, displaydate ); if ( transfer->getNumberOfTransfers() != 0 ) transfer->displayTransfers ( listview, accountid, children, displaydate ); } void TransactionDisplay::redisplayAccountBalance () { QString accountbalance = account->getAccountBalance ( accountid ); balance->setText ( accountbalance ); } void TransactionDisplay::setChildren ( bool c ) { children = c; } void TransactionDisplay::setAccountID ( int id ) { accountid = id; } ColorListItem::ColorListItem ( QListView *parent ) : QListViewItem ( parent ) { } ColorListItem::ColorListItem ( QListView *parent, QString label1, QString label2, QString label3, QString label4 ) : QListViewItem ( parent, label1, label2, label3, label4 ) { } ColorListItem::ColorListItem ( QListView *parent, QString label1, QString label2, QString label3, QString label4, QString label5 ) : QListViewItem ( parent, label1, label2, label3, label4, label5 ) { } void ColorListItem::paintCell ( QPainter *p, const QColorGroup &cg, int column, int width, int alignment ) { QColorGroup _cg ( cg ); _cg.setColor ( QColorGroup::Text, Qt::red ); QListViewItem::paintCell ( p, _cg, column, width, alignment ); } void TransactionDisplay::saveColumnSize ( int column, int oldsize, int newsize ) { if ( listview->columns() == 4 ) preferences->changeColumnPreference ( column + 3, newsize ); else if ( listview->columns() == 5 && column != 4 ) preferences->changeColumnPreference ( column + 6, newsize ); else preferences->changeColumnPreference ( 9, newsize ); } void TransactionDisplay::saveSortingPreference ( int column ) { preferences->changeSortingPreference ( 2, column ); } void TransactionDisplay::limitDisplay ( const QString &text ) { listview->clear (); QString displaytext = "%"; displaytext.prepend ( text ); setTransactionDisplayDate (); if ( transaction->getNumberOfTransactions() > 0 ) transaction->displayTransactions ( listview, accountid, children, displaytext, displaydate ); if ( displaytext.length() == 1 || preferences->getPreference ( 6 ) == 1 ) transfer->displayTransfers ( listview, accountid, children, displaydate ); } int TransactionDisplay::getIDColumn () { int counter; int columns = listview->columns(); for ( counter = 0; counter <= columns; counter++ ) if ( listview->header()->label ( counter ).length() == 0 ) return counter; } void TransactionDisplay::showTransactionNotes () { if ( listview->selectedItem() == 0 || listview->currentItem()->text ( getIDColumn() ).toInt() < 0 ) QMessageBox::warning ( this, "QashMoney", "Please select a valid\ntransaction to view notes."); else { int transactionid = listview->selectedItem()->text ( getIDColumn() ).toInt (); QDialog *description = new QDialog ( this, "description", TRUE ); description->setCaption ( "Notes" ); QMultiLineEdit *notes = new QMultiLineEdit ( description ); notes->setFixedSize ( ( int ) (this->width() * 0.75 ), ( int ) ( this->height() * 0.5 ) ); notes->setWrapColumnOrWidth ( ( int ) (this->width() * 0.75 ) ); notes->setWordWrap ( QMultiLineEdit::WidgetWidth ); notes->setEnabled ( FALSE ); notes->setText ( transaction->getTransactionDescription ( transactionid ) ); description->show(); } } void TransactionDisplay::setTransactionDisplayDate () { // determine how many days of transactions to show int limittype = preferences->getPreference ( 7 ); diff --git a/noncore/apps/qashmoney/transferdialog.cpp b/noncore/apps/qashmoney/transferdialog.cpp index 558abec..7a12fbf 100755 --- a/noncore/apps/qashmoney/transferdialog.cpp +++ b/noncore/apps/qashmoney/transferdialog.cpp @@ -1,112 +1,112 @@ #include "transferdialog.h" #include "datepicker.h" #include "calculator.h" extern Preferences *preferences; extern Account *account; TransferDialog::TransferDialog ( QWidget *parent, int fromaccountid, int toaccountid ) : QDialog ( parent, 0, TRUE ) { dateedited = FALSE; setCaption ( "Transfer" ); fromaccountlabel = new QLabel ( "From account:", this ); QFont f = this->font(); f.setWeight ( QFont::Bold ); fromaccountlabel->setFont ( f ); fromaccount = new QLabel ( account->getAccountName ( fromaccountid ), this ); toaccountlabel = new QLabel ( "To Account:", this ); toaccountlabel->setFont ( f ); toaccount = new QLabel ( account->getAccountName ( toaccountid ), this ); datelabel = new QLabel ( "Date", this ); datebox = new QHBox ( this ); datebox->setSpacing ( 2 ); date = new QLineEdit ( datebox ); date->setAlignment ( Qt::AlignRight ); date->setDisabled ( TRUE ); datebutton = new QPushButton ( datebox ); datebutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/date.png" ) ); - connect ( datebutton, SIGNAL ( released () ), this, SLOT ( showCalendar () ) ); + connect ( datebutton, SIGNAL ( released() ), this, SLOT ( showCalendar() ) ); amounttlabel = new QLabel ( "Amount", this ); amountbox = new QHBox ( this ); amountbox->setSpacing ( 2 ); amount = new QLineEdit ( amountbox ); amount->setAlignment ( Qt::AlignRight ); calculatorbutton = new QPushButton( amountbox ); calculatorbutton->setPixmap ( QPixmap ( "/opt/QtPalmtop/pics/kcalc.png" ) ); connect ( calculatorbutton, SIGNAL ( released() ), this, SLOT ( showCalculator() ) ); clearedcheckbox = new QCheckBox ( "Cleared", this ); layout = new QVBoxLayout ( this, 4, 2 ); layout->addWidget ( fromaccountlabel, Qt::AlignLeft ); layout->addWidget ( fromaccount, Qt::AlignLeft ); layout->addWidget ( toaccountlabel, Qt::AlignLeft ); layout->addWidget ( toaccount, Qt::AlignLeft ); layout->addSpacing ( 5 ); layout->addWidget ( datelabel, Qt::AlignLeft ); layout->addWidget ( datebox, Qt::AlignLeft ); layout->addWidget ( amounttlabel, Qt::AlignLeft ); layout->addWidget ( amountbox, Qt::AlignLeft ); layout->addWidget ( clearedcheckbox, Qt::AlignLeft ); } bool TransferDialog::getDateEdited () { return dateedited; } void TransferDialog::showCalendar () { QDate newDate = QDate::currentDate (); DatePicker *dp = new DatePicker ( newDate ); if ( dp->exec () == QDialog::Accepted ) { // Set date integers year = dp->getYear(); month = dp->getMonth(); day = dp->getDay(); // Set dateedited to TRUE // This tells the accountdisplay object that the user edited an account // and did change the date dateedited = TRUE; // Display date with our selected format date->setText ( preferences->getDate ( year, month, day ) ); } } int TransferDialog::getDay () { return day; } int TransferDialog::getMonth () { return month; } int TransferDialog::getYear () { return year; } void TransferDialog::showCalculator () { Calculator *calculator = new Calculator ( this ); if ( calculator->exec () == QDialog::Accepted ) amount->setText ( calculator->display->text() ); } diff --git a/noncore/apps/tableviewer/tableviewer.cpp b/noncore/apps/tableviewer/tableviewer.cpp index f35dfcd..4c6d809 100644 --- a/noncore/apps/tableviewer/tableviewer.cpp +++ b/noncore/apps/tableviewer/tableviewer.cpp @@ -1,480 +1,480 @@ /********************************************************************** ** 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. ** **********************************************************************/ /* local includes */ #include "tableviewer.h" #include "ui/tvbrowseview.h" #include "ui/tvfilterview.h" #include "ui/tvlistview.h" #include "ui/tveditview.h" #include "ui/tvkeyedit.h" #include "db/datacache.h" /* QPE includes */ #include <qpe/fileselector.h> #include <qpe/resource.h> #include <qpe/qpetoolbar.h> /* QTE includes */ #include <qmenubar.h> #include <qpopupmenu.h> #include <qapplication.h> #include <qwidgetstack.h> #include <qlayout.h> #include <qbuffer.h> /*! \class TableViewerWindow \brief The main window widget of the application This is the main widget of the table viewer application. It is the co-ordination point. */ /*! Constructs a new TableViewerWindow */ TableViewerWindow::TableViewerWindow(QWidget *parent, const char *name, WFlags f) : QMainWindow(parent, name, f) { setCaption(tr("Table Viewer")); /* Build data */ ds = new DBStore(); doc.setType("text/x-xml-tableviewer"); doc.setName("table"); dirty = FALSE; ts.current_column = 0; ts.kRep = ds->getKeys(); /* build menus */ menu = new QMenuBar(this, 0); QPopupMenu *file_menu = new QPopupMenu; file_menu->insertItem("New", this, SLOT(newDocument())); file_menu->insertItem("Open", this, SLOT(selectDocument())); file_menu->insertSeparator(); file_menu->insertItem("Properties"); /* later will want to set this up to clean up first via this, SLOT(quit) */ menu->insertItem("Document", file_menu); QPopupMenu *edit_menu = new QPopupMenu; edit_menu->insertItem("Edit Item", this, SLOT(editItemSlot())); edit_menu->insertItem("Edit Keys", this, SLOT(editKeysSlot())); edit_menu->insertItem("Edit filters", this, SLOT(filterViewSlot())); menu->insertItem("Edit", edit_menu); QPopupMenu *view_menu = new QPopupMenu; view_menu->insertItem("Browse View", this, SLOT(browseViewSlot())); view_menu->insertItem("List View", this, SLOT(listViewSlot())); menu->insertItem("View", view_menu); QVBoxLayout *main_layout = new QVBoxLayout; /* Build tool bar */ navigation = new QToolBar(this, "navigation"); QToolButton *newItemButton = new QToolButton( QIconSet(Resource::loadPixmap("new")), "New Item", QString::null, this, SLOT(newItemSlot()), navigation, "New Item"); QToolButton *editItemButton = new QToolButton( QIconSet(Resource::loadPixmap("edit")), "Edit Item", QString::null, this, SLOT(editItemSlot()), navigation, "Edit Item"); QToolButton *deleteItemButton = new QToolButton( QIconSet(Resource::loadPixmap("trash")), "Delete Item", QString::null, this, SLOT(deleteItemSlot()), navigation, "Delete Item"); navigation->addSeparator(); QToolButton *firstItemButton = new QToolButton( QIconSet(Resource::loadPixmap("fastback")), "First Item", QString::null, this, SLOT(firstItem()), navigation, "First Item"); QToolButton *previousItemButton = new QToolButton( QIconSet(Resource::loadPixmap("back")), "Previous Item", QString::null, this, SLOT(previousItem()), navigation, "Previous Item"); QToolButton *nextItemButton = new QToolButton( QIconSet(Resource::loadPixmap("forward")), "Next Item", QString::null, this, SLOT(nextItem()), navigation, "Next Item"); QToolButton *lastItemButton = new QToolButton( QIconSet(Resource::loadPixmap("fastforward")), "Last Item", QString::null, this, SLOT(lastItem()), navigation, "Last Item"); navigation->addSeparator(); QToolButton *browseButton = new QToolButton( QIconSet(Resource::loadPixmap("day")), "View Single Item", QString::null, this, SLOT(browseViewSlot()), navigation, "View Single Item"); QToolButton *listButton = new QToolButton( QIconSet(Resource::loadPixmap("month")), "View Multiple Items", QString::null, this, SLOT(listViewSlot()), navigation, "View Multiple Items"); setToolBarsMovable(FALSE); setToolBarsMovable(FALSE); setToolBarsMovable(FALSE); /* Build widgets */ browseView = new TVBrowseView(&ts, this, 0); listView = new TVListView(&ts, this, 0); filterView = new TVFilterView(&ts, this, 0); fileSelector = new FileSelector("text/csv;text/x-xml-tableviewer", this, "fileselector"); fileSelector->setNewVisible(FALSE); fileSelector->setCloseVisible(FALSE); cw = new QWidgetStack(this, 0); cw->addWidget(listView, ListState); cw->addWidget(browseView, BrowseState); cw->addWidget(filterView, FilterState); cw->addWidget(fileSelector, FileState); current_view = FileState; cw->raiseWidget(current_view); fileSelector->reread(); - connect(browseView, SIGNAL(searchOnKey(int, TVVariant)), - this, SLOT(searchOnKey(int, TVVariant))); + connect(browseView, SIGNAL(searchOnKey(int,TVVariant)), + this, SLOT(searchOnKey(int,TVVariant))); connect(browseView, SIGNAL(sortChanged(int)), this, SLOT(setPrimaryKey(int))); connect(fileSelector, SIGNAL(closeMe()), this, SLOT(browseViewSlot())); - connect(fileSelector, SIGNAL(fileSelected(const DocLnk &)), - this, SLOT(openDocument(const DocLnk &))); + connect(fileSelector, SIGNAL(fileSelected(const DocLnk&)), + this, SLOT(openDocument(const DocLnk&))); main_layout->addWidget(menu); main_layout->addWidget(cw); setCentralWidget(cw); } /*! Destroys the TableViewerWindow */ TableViewerWindow::~TableViewerWindow() { if(dirty) saveDocument(); } /*! Opens a file dialog and loads the file specified by the dialog */ void TableViewerWindow::selectDocument() { if(dirty) saveDocument(); current_view = FileState; cw->raiseWidget(current_view); fileSelector->reread(); } void TableViewerWindow::saveDocument() { if(!dirty) return; FileManager fm; QIODevice *dev = fm.saveFile(doc); if(!ds->saveSource(dev, doc.type())){ qWarning("Save unsuccessful"); return; } dev->close(); dirty = FALSE; } void TableViewerWindow::newDocument() { DocLnk nf; nf.setType("text/x-xml-tableviewer"); nf.setName("table"); delete ds; ds = new DBStore(); ts.current_column = 0; ts.kRep = ds->getKeys(); browseView->reset(); listView->reset(); filterView->reset(); doc = nf; dirty = FALSE; current_view = BrowseState; cw->raiseWidget(current_view); /* now set up for editing the keys */ ts.kRep->addKey("key", TVVariant::String); editKeysSlot(); } void TableViewerWindow::setDocument(const QString &f) { openDocument(DocLnk(f, TRUE)); } void TableViewerWindow::openDocument(const DocLnk &f) { if (!f.isValid()) return; FileManager fm; QIODevice *dev = fm.openFile(f); doc = f; if(ds->openSource(dev, doc.type())) { DataElem *d; browseView->reset(); listView->reset(); filterView->reset(); current_view = BrowseState; cw->raiseWidget(current_view); /* set up new table state and ensure sub widgets have a reference */ ts.current_column = 0; ts.kRep = ds->getKeys(); browseView->rebuildKeys(); listView->rebuildKeys(); filterView->rebuildKeys(); ds->first(); /* set up the list view */ listView->clearItems(); do { d = ds->getCurrentData(); if(d) listView->addItem(d); } while(ds->next()); /* Set up browse view, Will be based of structure of listView */ listView->first(); ts.current_elem = listView->getCurrentData(); browseView->rebuildData(); listView->rebuildData(); QString scratch = "Table Viewer";/* later take from constant */ scratch += " - "; scratch += ds->getName(); setCaption(tr(scratch)); dirty = FALSE; } else { qWarning(tr("could not load Document")); } dev->close(); } /*! Moves to the first item of the current table */ void TableViewerWindow::firstItem() { listView->first(); ts.current_elem = listView->getCurrentData(); browseView->rebuildData(); } /*! Moves to the lat item of the current table */ void TableViewerWindow::lastItem() { listView->last(); ts.current_elem = listView->getCurrentData(); browseView->rebuildData(); } /*! Moves to the next item of the current table */ void TableViewerWindow::nextItem() { listView->next(); ts.current_elem = listView->getCurrentData(); browseView->rebuildData(); } /*! Moves to the previous item of the current table */ void TableViewerWindow::previousItem() { listView->previous(); ts.current_elem = listView->getCurrentData(); browseView->rebuildData(); } /*! Raises the List View. This is a mode change for the application. */ void TableViewerWindow::listViewSlot() { if(current_view == FilterState) applyFilter(); current_view = ListState; cw->raiseWidget(current_view); } void TableViewerWindow::applyFilter() { DataElem *d; listView->clearItems(); ds->first(); do { d = ds->getCurrentData(); if(d) if(filterView->passesFilter(d)) listView->addItem(d); } while(ds->next()); listView->first(); listView->rebuildData(); } /*! Raises the Browse View. This is a mode change for the application. */ void TableViewerWindow::browseViewSlot() { if(current_view == FilterState) applyFilter(); ts.current_elem = listView->getCurrentData(); browseView->rebuildData(); current_view = BrowseState; cw->raiseWidget(current_view); } /*! Raises the List View. This is a mode change for the application. */ void TableViewerWindow::filterViewSlot() { current_view = FilterState; cw->raiseWidget(current_view); } void TableViewerWindow::editItemSlot() { if(TVEditView::openEditItemDialog(&ts, ts.current_elem, this)) { listView->rebuildData(); browseView->rebuildData(); dirty = TRUE; } } void TableViewerWindow::newItemSlot() { DataElem *d = new DataElem(ds); if (TVEditView::openEditItemDialog(&ts, d, this)) { ds->addItem(d); ts.current_elem = d; applyFilter(); listView->rebuildData(); browseView->rebuildData(); dirty = TRUE; } } void TableViewerWindow::deleteItemSlot() { /* delete the actual item, then do a 'filter' */ DataElem *to_remove = ts.current_elem; if(!to_remove) return; listView->removeItem(); ds->removeItem(to_remove); applyFilter(); listView->rebuildData(); browseView->rebuildData(); dirty = TRUE; } void TableViewerWindow::editKeysSlot() { DataElem *d; KeyList *k = TVKeyEdit::openEditKeysDialog(&ts, this); if(k) { /* set as new keys */ ds->setKeys(k); ts.current_column = 0; ts.kRep = k; browseView->reset(); listView->reset(); filterView->reset(); browseView->rebuildKeys(); listView->rebuildKeys(); filterView->rebuildKeys(); ds->first(); /* set up the list view */ listView->clearItems(); do { d = ds->getCurrentData(); if(d) listView->addItem(d); } while(ds->next()); /* Set up browse view, Will be based of structure of listView */ dirty = TRUE; } } /*! A Slot that allows for widgets above to indicate a search should be done on a specified key index for a specified value */ void TableViewerWindow::searchOnKey(int i, TVVariant v) { listView->findItem(i, v); ts.current_elem = listView->getCurrentData(); browseView->rebuildData(); } void TableViewerWindow::setPrimaryKey(int i) { ts.current_column = i; listView->rebuildData(); browseView->rebuildData(); } diff --git a/noncore/apps/tableviewer/ui/commonwidgets.cpp b/noncore/apps/tableviewer/ui/commonwidgets.cpp index 4c47951..e82018c 100644 --- a/noncore/apps/tableviewer/ui/commonwidgets.cpp +++ b/noncore/apps/tableviewer/ui/commonwidgets.cpp @@ -1,210 +1,210 @@ /********************************************************************** ** 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 <qlineedit.h> #include <qlayout.h> #include <qlabel.h> #include <qcombobox.h> #include <qpe/datebookmonth.h> #include <qpopupmenu.h> #include <qspinbox.h> #include "commonwidgets.h" DateEdit::DateEdit( QWidget *parent, const char *name, WFlags f ) : QToolButton(parent, name) { QPopupMenu *m1 = new QPopupMenu(this); dateSelector = new DateBookMonth(m1, 0, TRUE); m1->insertItem(dateSelector); setPopup(m1); setPopupDelay(0); - connect(dateSelector, SIGNAL(dateClicked(int, int, int)), + connect(dateSelector, SIGNAL(dateClicked(int,int,int)), this, SLOT(subValueChanged())); setText(dateSelector->selectedDate().toString()); } DateEdit::~DateEdit() {} QDate DateEdit::date() const { return dateSelector->selectedDate(); } void DateEdit::setDate(QDate d) { dateSelector->setDate(d.year(), d.month(), d.day()); setText(d.toString()); } QSizePolicy DateEdit::sizePolicy() const { QSizePolicy sp; sp.setHorData(QToolButton::sizePolicy().horData()); sp.setVerData(QSizePolicy::Fixed); return sp; } void DateEdit::clear() { QDate today = QDate::currentDate(); dateSelector->setDate(today.year(), today.month(), today.day()); setText(today.toString()); } void DateEdit::subValueChanged() { QDate current = dateSelector->selectedDate(); setText(current.toString()); emit valueChanged(current); } TimeEdit::TimeEdit( QWidget *parent, const char *name, WFlags f ) : QWidget(parent, name, f) { QHBoxLayout *layout = new QHBoxLayout(this, 0); layout->addWidget(hourKey = new QSpinBox(1, 12, 1, this)); hourKey->setWrapping(true); hourKey->setMinimumWidth(30); hourKey->setMaximumWidth(35); layout->addWidget(new QLabel(" : ", this)); layout->addWidget(minuteKey = new QSpinBox(0, 59, 1, this)); minuteKey->setWrapping(true); minuteKey->setMinimumWidth(30); minuteKey->setMaximumWidth(35); layout->addWidget(new QLabel(" : ", this)); layout->addWidget(secondKey = new QSpinBox(0, 59, 1, this, 0)); secondKey->setWrapping(true); secondKey->setMinimumWidth(30); secondKey->setMaximumWidth(35); layout->addWidget(ampm = new QComboBox(this)); ampm->insertItem("AM"); ampm->insertItem("PM"); layout->addStretch(-1); clear(); connect(secondKey, SIGNAL(valueChanged(const QString&)), this, SLOT(subValueChanged())); connect(minuteKey, SIGNAL(valueChanged(const QString&)), this, SLOT(subValueChanged())); connect(hourKey, SIGNAL(valueChanged(const QString&)), this, SLOT(subValueChanged())); connect(ampm, SIGNAL(activated(int)), this, SLOT(subValueChanged())); } TimeEdit::~TimeEdit() {} QTime TimeEdit::time() const { int s,m,h; s = secondKey->text().toInt(); m = minuteKey->text().toInt(); h = hourKey->text().toInt(); if(ampm->currentItem() == 1) { /* pm */ h = h + 12; } /* hour now ranges 1->24 */ if (h == 12) h = 0; if (h == 24) h = 12; if(QTime::isValid(h, m, s)) return QTime(h, m, s); return QTime(0, 0, 0); } void TimeEdit::setTime(QTime t) { int h = t.hour(); secondKey->setValue(t.second()); minuteKey->setValue(t.minute()); /* h 0..23 */ if (h > 11) { h -= 12; ampm->setCurrentItem(1); } else { ampm->setCurrentItem(0); } if (h == 0) h = 12; hourKey->setValue(h); } QSizePolicy TimeEdit::sizePolicy() const { QSizePolicy sp; sp.setHorData(QSizePolicy::Preferred); sp.setVerData(QSizePolicy::Fixed); return sp; } void TimeEdit::clear() { secondKey->setValue(0); minuteKey->setValue(0); hourKey->setValue(12); ampm->setCurrentItem(0); } void TimeEdit::subValueChanged() { emit valueChanged(time()); } IntEdit::IntEdit( QWidget *parent, const char *name, WFlags f ) : QSpinBox(INT_MIN, INT_MAX, 1, parent, name) { setValue(0); } IntEdit::~IntEdit() {} int IntEdit::value() { return cleanText().toInt(); } void IntEdit::clear() { setValue(0); } diff --git a/noncore/apps/tableviewer/ui/tvbrowseview.cpp b/noncore/apps/tableviewer/ui/tvbrowseview.cpp index 22bac55..8a65ed1 100644 --- a/noncore/apps/tableviewer/ui/tvbrowseview.cpp +++ b/noncore/apps/tableviewer/ui/tvbrowseview.cpp @@ -1,123 +1,123 @@ /********************************************************************** ** 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 "tvbrowseview.h" #include "browsekeyentry.h" #include <qtoolbutton.h> #include <qtextview.h> #include <qtextbrowser.h> #include <qlayout.h> #include "../xmlencodeattr.h" /*! \class TVBrowseView \brief The widget describing how to draw the browse view user interface This widget allows for the user to browse through the table, one element at a time, or search on a single key. Its main goal is to show a single element in a readable format and make it easy for the user to rapidly find specific elements in the table. */ /*! Constructs a new TVBrowseView widget */ TVBrowseView::TVBrowseView(TableState *t, QWidget* parent, const char *name, WFlags fl ) { if (!name) setName("BrowseView"); // setSizePolicy(QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding, 0, 0, sizePolicy().hasHeightForWidth() ) ); QVBoxLayout *vlayout = new QVBoxLayout(this); textViewDisplay = new QTextBrowser(this, "textViewDisplay"); vlayout->addWidget( textViewDisplay ); keyEntry = new TVBrowseKeyEntry(this, "keyEntry"); vlayout->addWidget( keyEntry ); /* connect the signals down */ - connect(keyEntry, SIGNAL(searchOnKey(int, TVVariant)), - this, SIGNAL(searchOnKey(int, TVVariant))); + connect(keyEntry, SIGNAL(searchOnKey(int,TVVariant)), + this, SIGNAL(searchOnKey(int,TVVariant))); connect(keyEntry, SIGNAL(sortChanged(int)), this, SIGNAL(sortChanged(int))); ts = t; keyEntry->setTableState(t); } /*! Destroys the TVBrowseView widget */ TVBrowseView::~TVBrowseView() { } void TVBrowseView::rebuildData() { if(!ts) return; if(!ts->current_elem) { /* also disable buttons */ textViewDisplay->setText(""); return; } setDisplayText(ts->current_elem); } /* Reset to initial state */ void TVBrowseView::reset() { textViewDisplay->setText(""); keyEntry->reset(); } /*! sets the data element to be displayed to element */ void TVBrowseView::setDisplayText(const DataElem *element) { QString rep = ""; KeyListIterator it(*ts->kRep); while (it.current()) { if (element->hasValidValue(it.currentKey())) { if(it.currentKey() == ts->current_column) { rep += "<A name=\"ckey\"></A><B><FONT COLOR=#FF0000>" + encodeAttr(it.current()->name()) + ":</FONT></B> "; } else { rep += "<B>" + encodeAttr(it.current()->name()) + ":</B> "; } rep += encodeAttr(element->toQString(it.currentKey())) + "<BR>"; } ++it; } textViewDisplay->setText(rep); textViewDisplay->scrollToAnchor("ckey"); } void TVBrowseView::rebuildKeys() { keyEntry->rebuildKeys(); } diff --git a/noncore/apps/tableviewer/ui/tvfilterview.cpp b/noncore/apps/tableviewer/ui/tvfilterview.cpp index b03e846..22f1fb7 100644 --- a/noncore/apps/tableviewer/ui/tvfilterview.cpp +++ b/noncore/apps/tableviewer/ui/tvfilterview.cpp @@ -1,306 +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> #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 *))); + SLOT(setTerm(QListViewItem*))); ts = t; current = 0; terms.setAutoDelete(true); do_filter = false; #ifdef Q_WS_QWS 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/tvlistview.cpp b/noncore/apps/tableviewer/ui/tvlistview.cpp index b25e813..b10ff1d 100644 --- a/noncore/apps/tableviewer/ui/tvlistview.cpp +++ b/noncore/apps/tableviewer/ui/tvlistview.cpp @@ -1,315 +1,315 @@ /********************************************************************** ** 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 "tvlistview.h" #include "../db/common.h" #include <qtoolbutton.h> #include <qlistview.h> #include <qlayout.h> void TVListViewPrivate::setColumnWidth(int column, int width) { if(width > 70) width = 70; QListView::setColumnWidth(column, width); } void TVListViewPrivate::setSorting(int column, bool increasing) { emit sortChanged(column); QListView::setSorting(column, increasing); } TVListViewPrivate::TVListViewPrivate(QWidget *parent, const char* name, WFlags fl) : QListView(parent, name, fl) { ; } class TVListViewItem : public QListViewItem { public: TVListViewItem(QListView *parent, DataElem *d); ~TVListViewItem(); QString text(int i) const { return data_reference->toQString(i); } /* Do nothing... all data for this item should be generated */ void setText(int i, const QString &) { ; } QString key(int i, bool a) const { return data_reference->toSortableQString(i); } void setDataElem(DataElem *d) { data_reference = d; } DataElem *getDataElem() { return data_reference; } private: DataElem *data_reference; }; TVListViewItem::TVListViewItem(QListView *parent, DataElem *d) : QListViewItem(parent) { data_reference = d; } TVListViewItem::~TVListViewItem() { data_reference = 0; } TVListView::TVListView(TableState *t, QWidget* parent, const char *name, WFlags fl ) : QWidget(parent, name, fl) { if (!name) setName("TVListView"); // the next two lines need to be rationalized. resize(318,457); setSizePolicy(QSizePolicy((QSizePolicy::SizeType)7, (QSizePolicy::SizeType)7, sizePolicy().hasHeightForWidth())); setCaption(tr("List View")); QVBoxLayout *layout = new QVBoxLayout(this); layout->setSpacing(0); layout->setMargin(0); listViewDisplay = new TVListViewPrivate(this, "listViewDisplay"); layout->addWidget(listViewDisplay); - connect(listViewDisplay, SIGNAL(currentChanged(QListViewItem *)), this, - SLOT(setCurrent(QListViewItem *))); + connect(listViewDisplay, SIGNAL(currentChanged(QListViewItem*)), this, + SLOT(setCurrent(QListViewItem*))); connect(listViewDisplay, SIGNAL(sortChanged(int)), this, SLOT(setSorting(int))); listViewDisplay->setShowSortIndicator(true); it = new QListViewItemIterator(listViewDisplay); ts = t; } TVListView::~TVListView() { } void TVListView::addItem(DataElem *d) { TVListViewItem *i = new TVListViewItem(listViewDisplay, d); delete it; it = new QListViewItemIterator(i); } /* remove current (it) item */ void TVListView::removeItem() { QListViewItemIterator other(*it); QListViewItemIterator tmp = *it; (*it)++; if (!it->current()) { *it = tmp; (*it)--; if (!it->current()) { delete it; it = 0; } } delete other.current(); } void TVListView::clearItems() { /* This is ok since the destructor for TVListItem does not know about the data_reference pointer.. and hence will leave it alone */ listViewDisplay->clear(); delete it; it = new QListViewItemIterator(listViewDisplay); } void TVListView::first() { delete it; it = new QListViewItemIterator(listViewDisplay); } void TVListView::last() { qWarning("TVListView::last not yet implemented"); } void TVListView::next() { QListViewItemIterator tmp = *it; (*it)++; if (!it->current()) { *it = tmp; } } void TVListView::previous() { QListViewItemIterator tmp = *it; (*it)--; if (!it->current()) { *it = tmp; } } DataElem *TVListView::getCurrentData() { if (it->current()) { return ((TVListViewItem *)it->current())->getDataElem(); } return NULL; } /*! Now to implement the closest match function */ void TVListView::findItem(int keyId, TVVariant value) { QListViewItem *i; TVListViewItem *best_so_far = NULL; /* start at the beginning... go through till find the closest elem */ i = listViewDisplay->firstChild(); while (i) { /* search stuff */ if(best_so_far) { if (DataElem::closer( ((TVListViewItem *)i)->getDataElem(), best_so_far->getDataElem(), value, keyId)) best_so_far = (TVListViewItem *)i; } else { if (DataElem::closer( ((TVListViewItem *)i)->getDataElem(), NULL, value, keyId)) best_so_far = (TVListViewItem *)i; } i = i->itemBelow(); } if (best_so_far) { /* set best_so_far to current element */ delete it; it = new QListViewItemIterator(best_so_far); } } void TVListView::rebuildKeys() { int i; if(!ts) return; if(!ts->kRep) return; i = listViewDisplay->columns(); while(i > 0) listViewDisplay->removeColumn(--i); KeyListIterator kit(*ts->kRep); i = 0; while(kit.current()) { if(!kit.current()->delFlag()) { listViewDisplay->addColumn(kit.current()->name()); keyIds.insert(i, kit.currentKey()); ++i; } ++kit; } } void TVListView::setSorting(int column) { /* Without table state can't do anything */ if (ts == 0) return; if (keyIds[column] != ts->current_column) { ts->current_column = keyIds[column]; } } void TVListView::rebuildData() { int i; QMap<int, int>::Iterator kit; /* Need to set sort order */ if(!ts) return; /* revers lookup the column */ i = -1; for(kit = keyIds.begin(); kit != keyIds.end(); ++kit) { if (kit.data() == ts->current_column) { i = kit.key(); break; } } if (i == -1) return; listViewDisplay->setSorting(i); listViewDisplay->sort(); /* reset current element */ listViewDisplay->setCurrentItem(it->current()); listViewDisplay->setSelected(it->current(), true); listViewDisplay->ensureItemVisible(it->current()); } void TVListView::reset() { int i; listViewDisplay->clear(); i = listViewDisplay->columns(); while (i > 0) listViewDisplay->removeColumn(--i); keyIds.clear(); } void TVListView::setCurrent(QListViewItem *i) { /* cast */ TVListViewItem *t = (TVListViewItem *)i; if(!t) { /* set current to null */ ts->current_elem = 0; return; } ts->current_elem = t->getDataElem(); /* now also set up the iterator */ delete it; it = new QListViewItemIterator(i); //emit browseView(); } diff --git a/noncore/apps/tinykate/libkate/document/katedialogs.cpp b/noncore/apps/tinykate/libkate/document/katedialogs.cpp index 2f0ed7b..f4edd7e 100644 --- a/noncore/apps/tinykate/libkate/document/katedialogs.cpp +++ b/noncore/apps/tinykate/libkate/document/katedialogs.cpp @@ -1,588 +1,588 @@ /*************************************************************************** katedialogs.cpp - description ------------------- copyright : (C) 2001 by The Kate Team (C) 2002 by Joseph Wenninger email : kwrite-devel@kde.org jowenn@kde.org ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "katedialogs.h" #include <klocale.h> #include <kdebug.h> #include <qgroupbox.h> #include <qvgroupbox.h> #include <qhgroupbox.h> #include <qhbox.h> #include <qvbox.h> #include <qlayout.h> #include <qpushbutton.h> #include <qwidgetstack.h> #include <qlabel.h> #include <qlistview.h> #include <qlineedit.h> #include <qcombobox.h> #include <qcheckbox.h> //FIXME #include <kcharsets.h> #include <kglobal.h> #include <qmap.h> #include <kmessagebox.h> #include <kstddirs.h> /******************************************************************************************************************* * Context Editor * *******************************************************************************************************************/ StyleChanger::StyleChanger( QWidget *parent ) : QWidget(parent) { QLabel *label; QGridLayout *glay = new QGridLayout( this, 4, 3, 0, KDialog::spacingHint() ); CHECK_PTR(glay); glay->addColSpacing( 1, KDialog::spacingHint() ); // Looks better glay->setColStretch( 2, 10 ); col = new KColorButton(this); CHECK_PTR(col); - connect(col,SIGNAL(changed(const QColor &)),this,SLOT(changed())); + connect(col,SIGNAL(changed(const QColor&)),this,SLOT(changed())); label = new QLabel(col,i18n("Normal:"),this); CHECK_PTR(label); glay->addWidget(label,0,0); glay->addWidget(col,1,0); selCol = new KColorButton(this); CHECK_PTR(selCol); - connect(selCol,SIGNAL(changed(const QColor &)),this,SLOT(changed())); + connect(selCol,SIGNAL(changed(const QColor&)),this,SLOT(changed())); label = new QLabel(selCol,i18n("Selected:"),this); CHECK_PTR(label); glay->addWidget(label,2,0); glay->addWidget(selCol,3,0); bold = new QCheckBox(i18n("Bold"),this); CHECK_PTR(bold); connect(bold,SIGNAL(clicked()),SLOT(changed())); glay->addWidget(bold,1,2); italic = new QCheckBox(i18n("Italic"),this); CHECK_PTR(italic); connect(italic,SIGNAL(clicked()),SLOT(changed())); glay->addWidget(italic,2,2); } void StyleChanger::setRef(ItemStyle *s) { style = s; col->setColor(style->col); selCol->setColor(style->selCol); bold->setChecked(style->bold); italic->setChecked(style->italic); } void StyleChanger::setEnabled(bool enable) { col->setEnabled(enable); selCol->setEnabled(enable); bold->setEnabled(enable); italic->setEnabled(enable); } void StyleChanger::changed() { if (style) { style->col = col->color(); style->selCol = selCol->color(); style->bold = bold->isChecked(); style->italic = italic->isChecked(); } } HighlightDialog::HighlightDialog( HlManager *hlManager, ItemStyleList *styleList, HlDataList *highlightDataList, int hlNumber, QWidget *parent, const char *name, bool modal ) :KDialogBase(parent,name,modal,i18n("Highlight Settings"), Ok|Cancel, Ok) { // QVBox *page = makeVBoxMainWidget(); QFrame *page=addPage("FIXME"); (new QVBoxLayout(page))->setAutoAdd(true); content=new HighlightDialogPage(hlManager,styleList,highlightDataList,hlNumber,page); } void HighlightDialog::done(int r) { kdDebug(13010)<<"HighlightDialod done"<<endl; content->saveData(); KDialogBase::done(r); } HighlightDialogPage::HighlightDialogPage(HlManager *hlManager, ItemStyleList *styleList, HlDataList* highlightDataList, int hlNumber,QWidget *parent, const char *name) :QTabWidget(parent,name),defaultItemStyleList(styleList),hlData(0L) { // defaults ========================================================= QFrame *page1 = new QFrame(this); addTab(page1,i18n("&Defaults")); QGridLayout *grid = new QGridLayout(page1, 1, 1); QVGroupBox *dvbox1 = new QVGroupBox( i18n("Default Item Styles"), page1 ); /*QLabel *label = */new QLabel( i18n("Item:"), dvbox1 ); QComboBox *styleCombo = new QComboBox( false, dvbox1 ); defaultStyleChanger = new StyleChanger( dvbox1 ); for( int i = 0; i < hlManager->defaultStyles(); i++ ) { styleCombo->insertItem(hlManager->defaultStyleName(i)); } connect(styleCombo, SIGNAL(activated(int)), this, SLOT(defaultChanged(int))); grid->addWidget(dvbox1, 0,0); defaultChanged(0); // highlight modes ===================================================== QFrame *page2 = new QFrame(this); addTab(page2,i18n("&Highlight Modes")); //grid = new QGridLayout(page2,2,2); QVBoxLayout *bl=new QVBoxLayout(page2); bl->setAutoAdd(true); QHGroupBox *hbox1 = new QHGroupBox( i18n("Config Select"), page2 ); hbox1->layout()->setMargin(5); QVBox *vbox1=new QVBox(hbox1); // grid->addMultiCellWidget(vbox1,0,0,0,1); QVGroupBox *vbox2 = new QVGroupBox( i18n("Item Style"), page2 ); // grid->addWidget(vbox2,1,0); QVGroupBox *vbox3 = new QVGroupBox( i18n("Highlight Auto Select"), hbox1 ); //grid->addWidget(vbox3,1,1); QLabel *label = new QLabel( i18n("Highlight:"), vbox1 ); hlCombo = new QComboBox( false, vbox1 ); QHBox *modHl = new QHBox(vbox1); // connect(new QPushButton(i18n("New"),modHl),SIGNAL(clicked()),this,SLOT(hlNew())); // connect(new QPushButton(i18n("Edit"),modHl),SIGNAL(clicked()),this,SLOT(hlEdit())); connect( hlCombo, SIGNAL(activated(int)), this, SLOT(hlChanged(int)) ); for( int i = 0; i < hlManager->highlights(); i++) { hlCombo->insertItem(hlManager->hlName(i)); } hlCombo->setCurrentItem(hlNumber); label = new QLabel( i18n("Item:"), vbox2 ); itemCombo = new QComboBox( false, vbox2 ); connect( itemCombo, SIGNAL(activated(int)), this, SLOT(itemChanged(int)) ); label = new QLabel( i18n("File Extensions:"), vbox3 ); wildcards = new QLineEdit( vbox3 ); label = new QLabel( i18n("Mime Types:"), vbox3 ); mimetypes = new QLineEdit( vbox3 ); styleDefault = new QCheckBox(i18n("Default"), vbox2 ); connect(styleDefault,SIGNAL(clicked()),SLOT(changed())); styleChanger = new StyleChanger( vbox2 ); hlDataList = highlightDataList; hlChanged(hlNumber); } void HighlightDialogPage::defaultChanged(int z) { defaultStyleChanger->setRef(defaultItemStyleList->at(z)); } void HighlightDialogPage::hlChanged(int z) { writeback(); hlData = hlDataList->at(z); wildcards->setText(hlData->wildcards); mimetypes->setText(hlData->mimetypes); itemCombo->clear(); for (ItemData *itemData = hlData->itemDataList.first(); itemData != 0L; itemData = hlData->itemDataList.next()) { kdDebug(13010) << itemData->name << endl; itemCombo->insertItem(i18n(itemData->name.latin1())); } itemChanged(0); } void HighlightDialogPage::itemChanged(int z) { itemData = hlData->itemDataList.at(z); styleDefault->setChecked(itemData->defStyle); styleChanger->setRef(itemData); } void HighlightDialogPage::changed() { itemData->defStyle = styleDefault->isChecked(); } void HighlightDialogPage::writeback() { if (hlData) { hlData->wildcards = wildcards->text(); hlData->mimetypes = mimetypes->text(); } } void HighlightDialogPage::saveData() { kdDebug(13010)<<"HighlightDialogPage::saveData()"<<endl; writeback(); } void HighlightDialogPage::hlEdit() { HlEditDialog diag(0,0,"hlEdit", true,hlData); diag.show(); } void HighlightDialogPage::hlNew() { HlEditDialog diag(0,0,"hlEdit",true,0); diag.show(); } HlEditDialog::HlEditDialog(HlManager *,QWidget *parent, const char *name, bool modal,HlData *data) :KDialogBase(KDialogBase::Swallow, i18n("Highlight Conditions"), Ok|Cancel, Ok, parent, name, modal) { currentItem=0; transTableCnt=0; QHBox *wid=new QHBox(this); QVBox *lbox=new QVBox(wid); contextList=new KListView(lbox); contextList->setRootIsDecorated(true); contextList->addColumn(i18n("Syntax structure")); contextList->setSorting(-1); QHBox *bbox=new QHBox(lbox); QPushButton *addContext=new QPushButton(i18n("New Context"),bbox); QPushButton *addItem=new QPushButton(i18n("New Item"),bbox); QVGroupBox *opt = new QVGroupBox( i18n("Options"), wid); stack=new QWidgetStack(opt); initContextOptions(contextOptions=new QVBox(stack)); stack->addWidget(contextOptions,HlEContext); initItemOptions(itemOptions=new QVBox(stack)); stack->addWidget(itemOptions,HlEItem); stack->raiseWidget(HlEContext); setMainWidget(wid); if (data!=0) loadFromDocument(data); else newDocument(); - connect(contextList,SIGNAL(currentChanged( QListViewItem*)),this,SLOT(currentSelectionChanged ( QListViewItem * ))); + connect(contextList,SIGNAL(currentChanged(QListViewItem*)),this,SLOT(currentSelectionChanged(QListViewItem*))); connect(addContext,SIGNAL(clicked()),this,SLOT(contextAddNew())); connect(addItem,SIGNAL(clicked()),this,SLOT(ItemAddNew())); } void HlEditDialog::newDocument() { KStandardDirs *dirs = KGlobal::dirs(); QStringList list=dirs->findAllResources("data","kate/syntax/syntax.template",false,true); for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { HlData data("","",*it); loadFromDocument(&data); return; } KMessageBox::error(this,i18n("Can't find template file")); } void HlEditDialog::initContextOptions(QVBox *co) { if( co!=0) { QHBox *tmp = new QHBox(co); (void) new QLabel(i18n("Description:"),tmp); ContextDescr=new QLineEdit(tmp); tmp= new QHBox(co); (void) new QLabel(i18n("Attribute:"),tmp); ContextAttribute=new QComboBox(tmp); tmp= new QHBox(co); (void) new QLabel(i18n("LineEnd:"),tmp); ContextLineEnd = new QComboBox(tmp); connect(ContextDescr,SIGNAL(textChanged(const QString&)),this,SLOT(contextDescrChanged(const QString&))); connect(ContextLineEnd,SIGNAL(activated(int)),this,SLOT(contextLineEndChanged(int))); connect(ContextAttribute,SIGNAL(activated(int)),this,SLOT(contextAttributeChanged(int))); } else kdDebug(13010)<<"initContextOptions: Widget is 0"<<endl; } void HlEditDialog::insertTranslationList(QString tag, QString trans,int length) { ItemInfo data(trans,length); id2tag.insert(transTableCnt,tag); id2info.insert(transTableCnt,data); tag2id.insert(tag,transTableCnt); transTableCnt++; } void HlEditDialog::initItemOptions(QVBox *co) { if (co!=0) { QHBox *tmp = new QHBox(co); (void) new QLabel(i18n("Type:"),tmp); ItemType = new QComboBox(tmp); tmp= new QHBox(co); (void) new QLabel(i18n("Parameter:"),tmp); ItemParameter= new QLineEdit(tmp); tmp= new QHBox(co); (void) new QLabel(i18n("Attribute:"),tmp); ItemAttribute= new QComboBox(tmp); (void) new QLabel(i18n("Context switch:"),tmp); ItemContext = new QComboBox(tmp); co->setSpacing(15); QPushButton *delItem=new QPushButton(i18n("Delete this item"),co); /* init translation lists */ insertTranslationList("CharDetect","CharDetect",1); insertTranslationList("2CharDetect","2CharDetect",2); insertTranslationList("RangeDetect","RangeDetect",2); insertTranslationList("StringDetect","StringDetect",-1); insertTranslationList("AnyChar","AnyChar",-1); insertTranslationList("RegExpr","RegExpr",-1); insertTranslationList("Int","Int",0); insertTranslationList("Float","Float",0); insertTranslationList("keyword","keyword",0); insertTranslationList("dataType","dataType",0); ItemType->clear(); for (int i=0; i<transTableCnt; i++) ItemType->insertItem(id2info[i].trans_i18n); connect(ItemType,SIGNAL(activated(int)),this,SLOT(ItemTypeChanged(int))); connect(ItemParameter,SIGNAL(textChanged(const QString&)),this,SLOT(ItemParameterChanged(const QString&))); connect(ItemAttribute,SIGNAL(activated(int)),this,SLOT(ItemAttributeChanged(int))); connect(ItemContext,SIGNAL(activated(int)),this,SLOT(ItemContextChanged(int))); } else kdDebug(13010)<<"initItemOptions: Widget is 0"<<endl; } void HlEditDialog::loadFromDocument(HlData *hl) { struct syntaxContextData *data; QListViewItem *last=0,*lastsub=0; HlManager::self()->syntax->setIdentifier(hl->identifier); data=HlManager::self()->syntax->getGroupInfo("highlighting","context"); int i=0; if (data) { while (HlManager::self()->syntax->nextGroup(data)) //<context tags> { kdDebug(13010)<< "Adding context to list"<<endl; last= new QListViewItem(contextList,last, HlManager::self()->syntax->groupData(data,QString("name")), QString("%1").arg(i), HlManager::self()->syntax->groupData(data,QString("attribute")), HlManager::self()->syntax->groupData(data,QString("lineEndContext"))); i++; lastsub=0; while (HlManager::self()->syntax->nextItem(data)) { kdDebug(13010)<< "Adding item to list"<<endl; lastsub=addContextItem(last,lastsub,data); } } if (data) HlManager::self()->syntax->freeGroupInfo(data); } ContextAttribute->clear(); ItemAttribute->clear(); data=HlManager::self()->syntax->getGroupInfo("highlighting","itemData"); while (HlManager::self()->syntax->nextGroup(data)) { ContextAttribute->insertItem(HlManager::self()->syntax->groupData(data,QString("name"))); ItemAttribute->insertItem(HlManager::self()->syntax->groupData(data,QString("name"))); } if (data) HlManager::self()->syntax->freeGroupInfo(data); } QListViewItem *HlEditDialog::addContextItem(QListViewItem *_parent,QListViewItem *prev,struct syntaxContextData *data) { kdDebug(13010)<<HlManager::self()->syntax->groupItemData(data,QString("name")) << endl; QString dataname=HlManager::self()->syntax->groupItemData(data,QString("")); QString attr=(HlManager::self()->syntax->groupItemData(data,QString("attribute"))); QString context=(HlManager::self()->syntax->groupItemData(data,QString("context"))); char chr; if (! HlManager::self()->syntax->groupItemData(data,QString("char")).isEmpty()) chr= (HlManager::self()->syntax->groupItemData(data,QString("char")).latin1())[0]; else chr=0; QString stringdata=HlManager::self()->syntax->groupItemData(data,QString("String")); char chr1; if (! HlManager::self()->syntax->groupItemData(data,QString("char1")).isEmpty()) chr1= (HlManager::self()->syntax->groupItemData(data,QString("char1")).latin1())[0]; else chr1=0; bool insensitive=(HlManager::self()->syntax->groupItemData(data,QString("insensitive"))==QString("TRUE")); QString param(""); if ((dataname=="keyword") || (dataname=="dataType")) param=dataname; else if (dataname=="CharDetect") param=chr; else if ((dataname=="2CharDetect") || (dataname=="RangeDetect")) param=QString("%1%2").arg(chr).arg(chr1); else if ((dataname=="StringDetect") || (dataname=="AnyChar") || (dataname=="RegExpr")) param=stringdata; else kdDebug(13010)<<"***********************************"<<endl<<"Unknown entry for Context:"<<dataname<<endl; kdDebug(13010)<<dataname << endl; return new QListViewItem(_parent,prev,i18n(dataname.latin1())+" "+param,dataname,param,attr,context); } void HlEditDialog::currentSelectionChanged ( QListViewItem *it) { kdDebug(13010)<<"Update data view"<<endl<<"Depth:"<<it->depth()<<endl; currentItem=it; if (it->depth()==0) showContext(); else showItem(); } /****************************************************************************/ /* CONTEXTS */ /****************************************************************************/ void HlEditDialog::showContext() { stack->raiseWidget(HlEContext); ContextDescr->setText(currentItem->text(0)); ContextAttribute->setCurrentItem(currentItem->text(2).toInt()); ContextLineEnd->clear(); for (QListViewItem *it=contextList->firstChild();it;it=it->nextSibling()) ContextLineEnd->insertItem(it->text(0)); ContextLineEnd->setCurrentItem(currentItem->text(3).toInt()); // ContextAttribute->setText(currentItem->text(1)); // ContextLineEnd->setText(currentItem->text(2)); } void HlEditDialog::contextDescrChanged(const QString& name) { if (currentItem) { currentItem->setText(0,name); ContextLineEnd->changeItem(name,currentItem->text(3).toInt()); } } void HlEditDialog::contextAttributeChanged(int id) { if (currentItem) { currentItem->setText(2,QString("%1").arg(id)); } } void HlEditDialog::contextLineEndChanged(int id) { kdDebug(13010)<<"contextLineEndChanged"<<endl; if (currentItem) { currentItem->setText(3,QString("%1").arg(id)); } } void HlEditDialog::contextAddNew() { QListViewItem *it=contextList->firstChild(); for (;it->nextSibling()!=0;it=it->nextSibling()); it=new QListViewItem(contextList,it,i18n("New Context"),QString("%1").arg(it->text(1).toInt()),"0","0"); contextList->setSelected(it,true); } /****************************************************************************/ /* ITEMS */ /****************************************************************************/ void HlEditDialog::showItem() { stack->raiseWidget(HlEItem); ItemContext->clear(); for (QListViewItem *it=contextList->firstChild();it;it=it->nextSibling()) ItemContext->insertItem(it->text(0)); ItemContext->setCurrentItem(currentItem->text(4).toInt()); ItemAttribute->setCurrentItem(currentItem->text(3).toInt()); QMap<QString,int>::Iterator iter=tag2id.find(currentItem->text(1)); if (iter==tag2id.end()) kdDebug(13010)<<"Oops, unknown itemtype in showItem: "<<currentItem->text(1)<<endl; else { ItemType->setCurrentItem(*iter); if (id2info[*iter].length==0) ItemParameter->hide(); else { ItemParameter->setMaxLength(id2info[*iter].length); ItemParameter->show(); ItemParameter->setText(currentItem->text(2)); } } } void HlEditDialog::ItemTypeChanged(int id) { if (currentItem) { currentItem->setText(1,id2tag[id]); ItemParameter->setMaxLength(id2info[id].length); ItemParameterChanged(ItemParameter->text()); } } void HlEditDialog::ItemParameterChanged(const QString& name) { if (currentItem) { currentItem->setText(2,name); currentItem->setText(0,id2info[ItemType->currentItem()].trans_i18n+" "+currentItem->text(2)); } } void HlEditDialog::ItemAttributeChanged(int attr) { if (currentItem) { currentItem->setText(3,QString("%1").arg(attr)); } } void HlEditDialog::ItemContextChanged(int cont) { if (currentItem) { currentItem->setText(4,QString("%1").arg(cont)); } } void HlEditDialog::ItemAddNew() { QListViewItem *it; if (currentItem) { if (currentItem->depth()==0) it=currentItem->firstChild(); else it=currentItem; if (it) for (;it->nextSibling();it=it->nextSibling()); (void) new QListViewItem(it ? it->parent() : currentItem,it,"StringDetect "+i18n("New Item"),"StringDetect",i18n("New Item"),0,it ? it->parent()->text(1) : currentItem->text(1)); } } diff --git a/noncore/apps/tinykate/libkate/document/katedocument.cpp b/noncore/apps/tinykate/libkate/document/katedocument.cpp index f05e21a..0c742d7 100644 --- a/noncore/apps/tinykate/libkate/document/katedocument.cpp +++ b/noncore/apps/tinykate/libkate/document/katedocument.cpp @@ -1,555 +1,555 @@ /*************************************************************************** katedocument.cpp - description ------------------- begin : Mon Jan 15 2001 copyright : (C) 2001 by Christoph "Crossfire" Cullmann (C) 2002 by Joseph Wenninger email : crossfire@babylon2k.de jowenn@kde.org ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ /* Copyright (C) 1998, 1999 Jochen Wilhelmy digisnap@cs.tu-berlin.de This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "katedocument.h" #include <qfileinfo.h> #include <qdatetime.h> #include <kmessagebox.h> #include <qpe/config.h> #include <qstring.h> #include <sys/time.h> #include <unistd.h> #include <stdio.h> #include <qtimer.h> #include <qobject.h> #include <qapplication.h> #include <qclipboard.h> #include <qfont.h> #include <qpainter.h> #include <qfile.h> #include <qtextstream.h> #include <qtextcodec.h> #include <kglobal.h> //#include <kcharsets.h> #include <kdebug.h> //#include <kinstance.h> #include <kglobalsettings.h> //#include <kaction.h> //#include <kstdaction.h> #include "../view/kateview.h" #include "katebuffer.h" #include "katetextline.h" #include "katecmd.h" KateAction::KateAction(Action a, PointStruc &cursor, int len, const QString &text) : action(a), cursor(cursor), len(len), text(text) { } KateActionGroup::KateActionGroup(PointStruc &aStart, int type) : start(aStart), action(0L), undoType(type) { } KateActionGroup::~KateActionGroup() { KateAction *current, *next; current = action; while (current) { next = current->next; delete current; current = next; } } void KateActionGroup::insertAction(KateAction *a) { a->next = action; action = a; } const char * KateActionGroup::typeName(int type) { // return a short text description of the given undo group type suitable for a menu // not the lack of i18n's, the caller is expected to handle translation switch (type) { case ugPaste : return "Paste Text"; case ugDelBlock : return "Selection Overwrite"; case ugIndent : return "Indent"; case ugUnindent : return "Unindent"; case ugComment : return "Comment"; case ugUncomment : return "Uncomment"; case ugReplace : return "Text Replace"; case ugSpell : return "Spell Check"; case ugInsChar : return "Typing"; case ugDelChar : return "Delete Text"; case ugInsLine : return "New Line"; case ugDelLine : return "Delete Line"; } return ""; } const int KateDocument::maxAttribs = 32; QStringList KateDocument::searchForList = QStringList(); QStringList KateDocument::replaceWithList = QStringList(); uint KateDocument::uniqueID = 0; QPtrDict<KateDocument::KateDocPrivate>* KateDocument::d_ptr = 0; KateDocument::KateDocument(bool bSingleViewMode, bool bBrowserView, QWidget *parentWidget, const char *widgetName, QObject *, const char *) : Kate::Document (), myFont(KGlobalSettings::generalFont()), myFontBold(KGlobalSettings::generalFont()), myFontItalic(KGlobalSettings::generalFont()), myFontBI(KGlobalSettings::generalFont()), myFontMetrics (myFont), myFontMetricsBold (myFontBold), myFontMetricsItalic (myFontItalic), myFontMetricsBI (myFontBI), hlManager(HlManager::self ()) { d(this)->hlSetByUser = false; PreHighlightedTill=0; RequestPreHighlightTill=0; m_bSingleViewMode=bSingleViewMode; m_bBrowserView = bBrowserView; m_url = QString::null; // NOTE: QFont::CharSet doesn't provide all the charsets KDE supports // (esp. it doesn't distinguish between UTF-8 and iso10646-1) myEncoding = QString::fromLatin1(QTextCodec::codecForLocale()->name()); maxLength = -1; setFont (KGlobalSettings::generalFont()); myDocID = uniqueID; uniqueID++; myDocName = QString (""); fileInfo = new QFileInfo (); myCmd = new KateCmd (this); - connect(this,SIGNAL(modifiedChanged ()),this,SLOT(slotModChanged ())); + connect(this,SIGNAL(modifiedChanged()),this,SLOT(slotModChanged())); buffer = new KWBuffer; connect(buffer, SIGNAL(linesChanged(int)), this, SLOT(slotBufferChanged())); // connect(buffer, SIGNAL(textChanged()), this, SIGNAL(textChanged())); connect(buffer, SIGNAL(needHighlight(long,long)),this,SLOT(slotBufferHighlight(long,long))); colors[0] = KGlobalSettings::baseColor(); colors[1] = KGlobalSettings::highlightColor(); m_attribs = new Attribute[maxAttribs]; m_highlight = 0L; tabChars = 8; m_singleSelection = false; newDocGeometry = false; readOnly = false; newDoc = false; modified = false; undoList.setAutoDelete(true); undoState = 0; undoSteps = 50; pseudoModal = 0L; clear(); setHighlight(0); //calls updateFontData() // if the user changes the highlight with the dialog, notify the doc connect(hlManager,SIGNAL(changed()),SLOT(hlChanged())); newDocGeometry = false; readConfig(); setReadOnly(false); } void KateDocument::setDontChangeHlOnSave() { d(this)->hlSetByUser = true; } void KateDocument::setFont (QFont font) { kdDebug()<<"Kate:: setFont"<<endl; int oldwidth=myFontMetrics.width('W'); //Quick & Dirty Hack (by JoWenn) //Remove in KDE 3.0 myFont = font; myFontBold = QFont (font); myFontBold.setBold (true); myFontItalic = QFont (font); myFontItalic.setItalic (true); myFontBI = QFont (font); myFontBI.setBold (true); myFontBI.setItalic (true); myFontMetrics = CachedFontMetrics (myFont); myFontMetricsBold = CachedFontMetrics (myFontBold); myFontMetricsItalic = CachedFontMetrics (myFontItalic); myFontMetricsBI = CachedFontMetrics (myFontBI); int newwidth=myFontMetrics.width('W'); //Quick & Dirty Hack (by JoWenn) //Remove in KDE 3.0 maxLength=maxLength*(float)newwidth/(float)oldwidth; //Quick & Dirty Hack (by JoWenn) //Remove in KDE 3.0 updateFontData(); updateViews(); //Quick & Dirty Hack (by JoWenn) //Remove in KDE 3.0 } long KateDocument::needPreHighlight(long till) { int max=numLines()-1; if (till>max) { till=max; } if (PreHighlightedTill>=till) return -1; long tmp=RequestPreHighlightTill; if (RequestPreHighlightTill<till) { RequestPreHighlightTill=till; if (tmp<=PreHighlightedTill) QTimer::singleShot(10,this,SLOT(doPreHighlight())); } return RequestPreHighlightTill; } void KateDocument::doPreHighlight() { int from = PreHighlightedTill; int till = PreHighlightedTill+200; int max = numLines()-1; if (till > max) { till = max; } PreHighlightedTill = till; updateLines(from,till); emit preHighlightChanged(PreHighlightedTill); if (PreHighlightedTill<RequestPreHighlightTill) QTimer::singleShot(10,this,SLOT(doPreHighlight())); } KateDocument::~KateDocument() { m_highlight->release(); writeConfig(); if ( !m_bSingleViewMode ) { m_views.setAutoDelete( true ); m_views.clear(); m_views.setAutoDelete( false ); } delete_d(this); } void KateDocument::openURL(const QString &filename) { m_file=filename; fileInfo->setFile (m_file); setMTime(); if (!fileInfo->exists() || !fileInfo->isReadable()) { qDebug("File doesn't exit or couldn't be read"); return ; } buffer->clear(); #warning fixme // buffer->insertFile(0, m_file, KGlobal::charsets()->codecForName(myEncoding)); qDebug("Telling buffer to open file"); buffer->insertFile(0, m_file, QTextCodec::codecForLocale()); setMTime(); if (myWordWrap) wrapText (myWordWrapAt); int hl = hlManager->wildcardFind( m_file ); setHighlight(hl); updateLines(); updateViews(); emit fileNameChanged(); return ; } bool KateDocument::saveFile() { QFile f( m_file ); if ( !f.open( IO_WriteOnly ) ) return false; // Error QTextStream stream(&f); stream.setEncoding(QTextStream::RawUnicode); // disable Unicode headers #warning fixme // stream.setCodec(KGlobal::charsets()->codecForName(myEncoding)); stream.setCodec(QTextCodec::codecForLocale()); // this line sets the mapper to the correct codec int maxLine = numLines(); int line = 0; while(true) { stream << getTextLine(line)->getString(); line++; if (line >= maxLine) break; if (eolMode == KateDocument::eolUnix) stream << "\n"; else if (eolMode == KateDocument::eolDos) stream << "\r\n"; else if (eolMode == KateDocument::eolMacintosh) stream << '\r'; }; f.close(); fileInfo->setFile (m_file); setMTime(); if (!(d(this)->hlSetByUser)) { int hl = hlManager->wildcardFind( m_file ); setHighlight(hl); } emit fileNameChanged (); return (f.status() == IO_Ok); } KTextEditor::View *KateDocument::createView( QWidget *parent, const char *name ) { return new KateView( this, parent, name); } QString KateDocument::textLine( int line ) const { TextLine::Ptr l = getTextLine( line ); if ( !l ) return QString(); return l->getString(); } void KateDocument::replaceLine(const QString& s,int line) { remove_Line(line,false); insert_Line(s,line,true); } void KateDocument::insertLine( const QString &str, int l ) { insert_Line(str,l,true); } void KateDocument::insert_Line(const QString& s,int line, bool update) { kdDebug(13020)<<"KateDocument::insertLine "<<s<<QString(" %1").arg(line)<<endl; TextLine::Ptr TL=new TextLine(); TL->append(s.unicode(),s.length()); buffer->insertLine(line,TL); if (update) { newDocGeometry=true; updateLines(line); updateViews(); } } void KateDocument::insertAt( const QString &s, int line, int col, bool ) { VConfig c; c.view = 0; // ### FIXME c.cursor.x = col; c.cursor.y = line; c.cXPos = 0; // ### FIXME c.flags = 0; // ### FIXME insert( c, s ); } void KateDocument::removeLine( int line ) { remove_Line(line,true); } void KateDocument::remove_Line(int line,bool update) { kdDebug(13020)<<"KateDocument::removeLine "<<QString("%1").arg(line)<<endl; buffer->removeLine(line); // newDocGeometry=true; // if line==0) if (update) { updateLines(line); updateViews(); } } int KateDocument::length() const { return text().length(); } void KateDocument::setSelection( int , int , int , int ) { } bool KateDocument::hasSelection() const { return (selectEnd >= selectStart); } QString KateDocument::selection() const { uint flags = 0; TextLine::Ptr textLine; int len, z, start, end, i; len = 1; if (!(flags & KateView::cfVerticalSelect)) { for (z = selectStart; z <= selectEnd; z++) { textLine = getTextLine(z); len += textLine->numSelected(); if (textLine->isSelected()) len++; } QString s; len = 0; for (z = selectStart; z <= selectEnd; z++) { textLine = getTextLine(z); end = 0; do { start = textLine->findUnselected(end); end = textLine->findSelected(start); for (i = start; i < end; i++) { s[len] = textLine->getChar(i); len++; } } while (start < end); if (textLine->isSelected()) { s[len] = '\n'; len++; } } // s[len] = '\0'; return s; } else { for (z = selectStart; z <= selectEnd; z++) { textLine = getTextLine(z); len += textLine->numSelected() + 1; } QString s; len = 0; for (z = selectStart; z <= selectEnd; z++) { textLine = getTextLine(z); end = 0; do { start = textLine->findUnselected(end); end = textLine->findSelected(start); for (i = start; i < end; i++) { s[len] = textLine->getChar(i); len++; } } while (start < end); s[len] = '\n'; len++; } // s[len] = '\0'; // the final \0 is not counted in length() return s; } } int KateDocument::numLines() const { return buffer->count(); } TextLine::Ptr KateDocument::getTextLine(int line) const { // This is a hack to get this stuff working. return buffer->line(line); } int KateDocument::textLength(int line) { TextLine::Ptr textLine = getTextLine(line); if (!textLine) return 0; return textLine->length(); } void KateDocument::setTabWidth(int chars) { if (tabChars == chars) return; if (chars < 1) chars = 1; if (chars > 16) chars = 16; tabChars = chars; updateFontData(); maxLength = -1; for (int i=0; i < buffer->count(); i++) { TextLine::Ptr textLine = buffer->line(i); int len = textWidth(textLine,textLine->length()); if (len > maxLength) { maxLength = len; longestLine = textLine; } } } void KateDocument::setReadOnly(bool m) { KTextEditor::View *view; if (m != readOnly) { readOnly = m; // if (readOnly) recordReset(); for (view = m_views.first(); view != 0L; view = m_views.next() ) { emit static_cast<KateView *>( view )->newStatus(); } } diff --git a/noncore/apps/tinykate/libkate/view/kateviewdialog.cpp b/noncore/apps/tinykate/libkate/view/kateviewdialog.cpp index a85fb87..8e68262 100644 --- a/noncore/apps/tinykate/libkate/view/kateviewdialog.cpp +++ b/noncore/apps/tinykate/libkate/view/kateviewdialog.cpp @@ -154,418 +154,418 @@ void SearchDialog::slotOk() { if ( !m_search->currentText().isEmpty() ) { if ( !m_optRegExp->isChecked() ) { accept(); } else { // Check for a valid regular expression. QRegExp regExp( m_search->currentText() ); if ( regExp.isValid() ) accept(); } } } void SearchDialog::setSearchText( const QString &searchstr ) { m_search->insertItem( searchstr, 0 ); m_search->setCurrentItem( 0 ); m_search->lineEdit()->selectAll(); } // this dialog is not modal ReplacePrompt::ReplacePrompt( QWidget *parent ) : KDialogBase(parent, 0L, false, i18n( "Replace Text" ), User3 | User2 | User1 | Close, User3, true, i18n("&All"), i18n("&No"), i18n("&Yes")) { QWidget *page = new QWidget(this); setMainWidget(page); QBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() ); QLabel *label = new QLabel(i18n("Replace this occurence?"),page); topLayout->addWidget(label ); } void ReplacePrompt::slotUser1( void ) { // All done(KateView::srAll); } void ReplacePrompt::slotUser2( void ) { // No done(KateView::srNo); } void ReplacePrompt::slotUser3( void ) { // Yes accept(); } void ReplacePrompt::done(int r) { setResult(r); emit clicked(); } void ReplacePrompt::closeEvent(QCloseEvent *) { reject(); } GotoLineDialog::GotoLineDialog(QWidget *parent, int line, int max) : KDialogBase(parent, 0L, true, i18n("Goto Line"), Ok | Cancel, Ok) { QWidget *page = new QWidget(this); setMainWidget(page); QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() ); e1 = new QSpinBox(page); e1->setMinValue(1); e1->setMaxValue(max); e1->setValue((int)line); QLabel *label = new QLabel( e1,i18n("&Goto Line:"), page ); topLayout->addWidget(label); topLayout->addWidget(e1); topLayout->addSpacing(spacingHint()); // A little bit extra space topLayout->addStretch(10); e1->setFocus(); } int GotoLineDialog::getLine() { return e1->value(); } const int IndentConfigTab::flags[] = {KateView::cfAutoIndent, KateView::cfSpaceIndent, KateView::cfBackspaceIndents,KateView::cfTabIndents, KateView::cfKeepIndentProfile, KateView::cfKeepExtraSpaces}; IndentConfigTab::IndentConfigTab(QWidget *parent, KateView *view) : QWidget(parent, 0L) { QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint() ); int configFlags = view->config(); opt[0] = new QCheckBox(i18n("&Auto Indent"), this); layout->addWidget(opt[0], 0, AlignLeft); opt[0]->setChecked(configFlags & flags[0]); opt[1] = new QCheckBox(i18n("Indent With &Spaces"), this); layout->addWidget(opt[1], 0, AlignLeft); opt[1]->setChecked(configFlags & flags[1]); opt[2] = new QCheckBox(i18n("&Backspace Key Indents"), this); layout->addWidget(opt[2], 0, AlignLeft); opt[2]->setChecked(configFlags & flags[2]); opt[3] = new QCheckBox(i18n("&Tab Key Indents"), this); layout->addWidget(opt[3], 0, AlignLeft); opt[3]->setChecked(configFlags & flags[3]); opt[4] = new QCheckBox(i18n("Keep Indent &Profile"), this); layout->addWidget(opt[4], 0, AlignLeft); // opt[4]->setChecked(configFlags & flags[4]); opt[4]->setChecked(true); opt[4]->hide(); opt[5] = new QCheckBox(i18n("&Keep Extra Spaces"), this); layout->addWidget(opt[5], 0, AlignLeft); opt[5]->setChecked(configFlags & flags[5]); layout->addStretch(); // What is this? help QWhatsThis::add(opt[0], i18n("When <b>Auto indent</b> is on, KateView will indent new lines to equal the indent on the previous line.<p>If the previous line is blank, the nearest line above with text is used")); QWhatsThis::add(opt[1], i18n("Check this if you want to indent with spaces rather than tabs.<br>A Tab will be converted to <u>Tab-width</u> as set in the <b>edit</b> options")); QWhatsThis::add(opt[2], i18n("This allows the <b>backspace</b> key to be used to indent.")); QWhatsThis::add(opt[3], i18n("This allows the <b>tab</b> key to be used to indent.")); QWhatsThis::add(opt[4], i18n("This retains current indentation settings for future documents.")); QWhatsThis::add(opt[5], i18n("Indentations of more than the selected number of spaces will not be shortened.")); } void IndentConfigTab::getData(KateView *view) { int configFlags, z; configFlags = view->config(); for (z = 0; z < numFlags; z++) { configFlags &= ~flags[z]; if (opt[z]->isChecked()) configFlags |= flags[z]; } view->setConfig(configFlags); } const int SelectConfigTab::flags[] = {KateView::cfPersistent, KateView::cfDelOnInput, KateView::cfMouseAutoCopy, KateView::cfSingleSelection, KateView::cfVerticalSelect, KateView::cfXorSelect}; SelectConfigTab::SelectConfigTab(QWidget *parent, KateView *view) : QWidget(parent, 0L) { QVBoxLayout *layout = new QVBoxLayout(this, 0, KDialog::spacingHint() ); int configFlags = view->config(); opt[0] = new QCheckBox(i18n("&Persistent Selections"), this); layout->addWidget(opt[0], 0, AlignLeft); opt[0]->setChecked(configFlags & flags[0]); opt[1] = new QCheckBox(i18n("&Overwrite Selections"), this); layout->addWidget(opt[1], 0, AlignLeft); opt[1]->setChecked(configFlags & flags[1]); opt[2] = new QCheckBox(i18n("Mouse &Autocopy"), this); layout->addWidget(opt[2], 0, AlignLeft); opt[2]->setChecked(configFlags & flags[2]); opt[3] = new QCheckBox(i18n("&X11-like Single Selection"), this); layout->addWidget(opt[3], 0, AlignLeft); opt[3]->setChecked(configFlags & flags[3]); opt[4] = new QCheckBox(i18n("&Vertical Selections"), this); layout->addWidget(opt[4], 0, AlignLeft); opt[4]->setChecked(configFlags & flags[4]); opt[5] = new QCheckBox(i18n("&Toggle Old"), this); layout->addWidget(opt[5], 0, AlignLeft); opt[5]->setChecked(configFlags & flags[5]); layout->addStretch(); // What is this? help QWhatsThis::add(opt[0], i18n("Enabling this prevents key input or cursor movement by way of the arrow keys from causing the elimination of text selection.<p><b>Note:</b> If the Overwrite Selections option is activated then any typed character input or paste operation will replace the selected text.")); QWhatsThis::add(opt[1], i18n("When this is on, any keyed character input or paste operation will replace the selected text.")); QWhatsThis::add(opt[2], i18n("When this is on, any text selected with the mouse will be automatically copied to the clipboard.")); QWhatsThis::add(opt[3], i18n("Not implemented yet.")); QWhatsThis::add(opt[4], i18n("Enabling this allows you to make vertical selections.")); QWhatsThis::add(opt[5], i18n("Not yet implemented.")); } void SelectConfigTab::getData(KateView *view) { int configFlags, z; configFlags = view->config(); for (z = 0; z < numFlags; z++) { configFlags &= ~flags[z]; // clear flag if (opt[z]->isChecked()) configFlags |= flags[z]; // set flag if checked } view->setConfig(configFlags); } const int EditConfigTab::flags[] = {KateView::cfWordWrap, KateView::cfReplaceTabs, KateView::cfRemoveSpaces, KateView::cfAutoBrackets, KateView::cfGroupUndo, KateView::cfShowTabs, KateView::cfSmartHome, KateView::cfPageUDMovesCursor, KateView::cfWrapCursor}; EditConfigTab::EditConfigTab(QWidget *parent, KateView *view) : QWidget(parent, 0L) { QHBoxLayout *mainLayout; QVBoxLayout *cbLayout, *leLayout; int configFlags; mainLayout = new QHBoxLayout(this, 0, KDialog::spacingHint() ); // checkboxes cbLayout = new QVBoxLayout( mainLayout ); configFlags = view->config(); opt[0] = new QCheckBox(i18n("&Word wrap"), this); cbLayout->addWidget(opt[0], 0, AlignLeft); opt[0]->setChecked(view->doc()->wordWrap()); opt[1] = new QCheckBox(i18n("Replace &tabs with spaces"), this); cbLayout->addWidget(opt[1], 0, AlignLeft); opt[1]->setChecked(configFlags & flags[1]); opt[2] = new QCheckBox(i18n("&Remove trailing spaces"), this); cbLayout->addWidget(opt[2], 0, AlignLeft); opt[2]->setChecked(configFlags & flags[2]); opt[3] = new QCheckBox(i18n("&Auto brackets"), this); cbLayout->addWidget(opt[3], 0, AlignLeft); opt[3]->setChecked(configFlags & flags[3]); opt[4] = new QCheckBox(i18n("Group &undos"), this); cbLayout->addWidget(opt[4], 0, AlignLeft); opt[4]->setChecked(configFlags & flags[4]); opt[5] = new QCheckBox(i18n("&Show tabs"), this); cbLayout->addWidget(opt[5], 0, AlignLeft); opt[5]->setChecked(configFlags & flags[5]); opt[6] = new QCheckBox(i18n("Smart &home"), this); cbLayout->addWidget(opt[6], 0, AlignLeft); opt[6]->setChecked(configFlags & flags[6]); opt[7] = new QCheckBox(i18n("&Page up/down moves cursor"), this); cbLayout->addWidget(opt[7], 0, AlignLeft); opt[7]->setChecked(configFlags & flags[7]); opt[8] = new QCheckBox(i18n("Wrap &cursor"), this); cbLayout->addWidget(opt[8], 0, AlignLeft); opt[8]->setChecked(configFlags & flags[8]); cbLayout->addStretch(); // edit lines leLayout = new QVBoxLayout(); mainLayout->addLayout(leLayout,10); e1 = new QSpinBox(this); e1->setMinValue(20); e1->setMaxValue( 200); e1->setValue((int)(view->doc()->wordWrapAt())); #warning fixme e1->setLabel(i18n("Wrap Words At:")); e2 = new QSpinBox(this); e2->setMinValue(1); e2->setMaxValue(16); e2->setValue((int)view->tabWidth()); #warning fixme e2->setLabel(i18n("Tab/Indent Width:")); e3 = new QSpinBox(this); e3->setMinValue(5); e3->setMaxValue( 30000); #warning fixme e3->setLabel(i18n("Undo steps:")); e3->setValue((int)view->undoSteps()); leLayout->addWidget(e1, 0, AlignLeft); leLayout->addWidget(e2, 0, AlignLeft); leLayout->addWidget(e3, 0, AlignLeft); QVBox *box = new QVBox (this); leLayout->addWidget (box, 0, AlignLeft); new QLabel (i18n("Encoding:"), box); encoding = new QComboBox(box); #warning fixme #if 0 encoding->insertStringList (KGlobal::charsets()->availableEncodingNames()); encoding->setCurrentItem (KGlobal::charsets()->availableEncodingNames().findIndex(view->doc()->encoding())); #endif leLayout->addStretch(); // What is this? help QWhatsThis::add(opt[0], i18n("Word wrap is a feature that causes the editor to automatically start a new line of text and move (wrap) the cursor to the beginning of that new line. KateView will automatically start a new line of text when the current line reaches the length specified by the Wrap Words At: option.<p><b>NOTE:<b> Word Wrap will not change existing lines or wrap them for easy reading as in some applications.")); QWhatsThis::add(e1, i18n("If the Word Wrap option is selected this entry determines the length (in characters) at which the editor will automatically start a new line.")); QWhatsThis::add(opt[1], i18n("KateView will replace any tabs with the number of spaces indicated in the Tab Width: entry.")); QWhatsThis::add(e2, i18n("If the Replace Tabs By Spaces option is selected this entry determines the number of spaces with which the editor will automatically replace tabs.")); QWhatsThis::add(opt[2], i18n("KateView will automatically eliminate extra spaces at the ends of lines of text.")); QWhatsThis::add(opt[3], i18n("When the user types a left bracket ([,(, or {) KateView automatically enters the right bracket (}, ), or ]) to the right of the cursor.")); QWhatsThis::add(opt[4], i18n("Checking this will cause sequences of similar actions to be undone at once.")); QWhatsThis::add(opt[5], i18n("The editor will display a symbol to indicate the presence of a tab in the text.")); QWhatsThis::add(opt[6], i18n("Not yet implemented.")); QWhatsThis::add(opt[7], i18n("If this is selected, the insertion cursor will be moved to the first/last line when pressing the page up/down buttons.<p>If not selected, it will remain at it's relative position in the visible text.")); QWhatsThis::add(e3, i18n("Sets the number of undo/redo steps to record. More steps uses more memory.")); QWhatsThis::add(opt[8], i18n("When on, moving the insertion cursor using the <b>Left</b> and <b>Right</b> keys will go on to previous/next line at beginning/end of the line, similar to most editors.<p>When off, the insertion cursor cannot be moved left of the line start, but it can be moved off the line end, which can be very handy for programmers.")); } void EditConfigTab::getData(KateView *view) { int configFlags, z; configFlags = view->config(); for (z = 1; z < numFlags; z++) { configFlags &= ~flags[z]; if (opt[z]->isChecked()) configFlags |= flags[z]; } view->setConfig(configFlags); view->setEncoding (encoding->currentText()); view->doc()->setWordWrapAt(e1->value()); view->doc()->setWordWrap (opt[0]->isChecked()); view->setTabWidth(e2->value()); view->setUndoSteps(e3->value()); } ColorConfig::ColorConfig( QWidget *parent, char *name ) : QWidget( parent, name ) { QGridLayout *glay = new QGridLayout( this, 6, 2, 0, KDialog::spacingHint()); glay->setColStretch(1,1); glay->setRowStretch(5,1); QLabel *label; label = new QLabel( i18n("Background:"), this); label->setAlignment( AlignRight|AlignVCenter ); m_back = new KColorButton( this ); glay->addWidget( label, 0, 0 ); glay->addWidget( m_back, 0, 1 ); label = new QLabel( i18n("Selected:"), this); label->setAlignment( AlignRight|AlignVCenter ); m_selected = new KColorButton( this ); glay->addWidget( label, 2, 0 ); glay->addWidget( m_selected, 2, 1 ); // QWhatsThis help QWhatsThis::add(m_back, i18n("Sets the background color of the editing area")); QWhatsThis::add(m_selected, i18n("Sets the background color of the selection. To set the text color for selected text, use the "<b>Configure Highlighting</b>" dialog.")); } ColorConfig::~ColorConfig() { } void ColorConfig::setColors(QColor *colors) { m_back->setColor( colors[0] ); m_selected->setColor( colors[1] ); } void ColorConfig::getColors(QColor *colors) { colors[0] = m_back->color(); colors[1] = m_selected->color(); } FontConfig::FontConfig( QWidget *parent, char *name ) : QWidget( parent, name ) { // sizemanagment QGridLayout *grid = new QGridLayout( this, 1, 1 ); // QString familyStr = cfg. readEntry ( "FontFamily", "Helvetica" ); // QString styleStr = cfg. readEntry ( "FontStyle", "Regular" ); // int size = cfg. readNumEntry ( "FontSize", 10 ); // OFontSelector *m_fontselect; m_fontselect = new Opie::OFontSelector ( false, this, "FontTab" ); // m_fontselect-> setSelectedFont ( familyStr, styleStr, size ); // QWhatsThis::add( m_fontselect, // tr( "Select the desired name, style and size of the default font applications will use." ) ); - connect( m_fontselect, SIGNAL( fontSelected ( const QFont & )), - this, SLOT( slotFontSelected( const QFont & ))); + connect( m_fontselect, SIGNAL( fontSelected(const QFont&)), + this, SLOT( slotFontSelected(const QFont&))); grid->addWidget( m_fontselect, 0, 0); // #if 0 // m_fontchooser = new KFontChooser ( this ); // m_fontchooser->enableColumn(KFontChooser::StyleList, false); // grid->addWidget( m_fontchooser, 0, 0); -// connect (m_fontchooser, SIGNAL (fontSelected( const QFont & )), this, SLOT (slotFontSelected( const QFont & ))); +// connect (m_fontchooser, SIGNAL (fontSelected(const QFont&)), this, SLOT (slotFontSelected(const QFont&))); // #endif } FontConfig::~FontConfig() { } void FontConfig::setFont ( const QFont &font ) { //#if 0 m_fontselect->setFont (font); myFont = font; //#endif } void FontConfig::slotFontSelected( const QFont &font ) { myFont = font; } diff --git a/noncore/apps/tinykate/tinykate.cpp b/noncore/apps/tinykate/tinykate.cpp index 19a0127..32c1eab 100644 --- a/noncore/apps/tinykate/tinykate.cpp +++ b/noncore/apps/tinykate/tinykate.cpp @@ -1,278 +1,278 @@ /*************************************************************************** tinykate.cpp Tiny KATE mainwindow ------------------- begin : November 2002 copyright : (C) 2002 by Joseph Wenninger <jowenn@kde.org> ***************************************************************************/ /*************************************************************************** * * * This program is free softwaSre; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation. * * ONLY VERSION 2 OF THE LICENSE IS APPLICABLE * * * ***************************************************************************/ #include <qaction.h> #include <qtoolbutton.h> #include <qmenubar.h> #include <qpe/resource.h> #include <qpe/qpeapplication.h> #include <opie2/ofiledialog.h> #include "tinykate.h" #include <katedocument.h> #include <kglobal.h> TinyKate::TinyKate( QWidget *parent, const char *name, WFlags f) : QMainWindow( parent, name, f ) { shutDown=false; nextUnnamed=0; currentView=0; viewCount=0; setCaption(tr("TinyKATE")); KGlobal::setAppName("TinyKATE"); QMenuBar *mb = new QMenuBar( this ); mb->setMargin( 0 ); tabwidget=new OTabWidget(this); setCentralWidget(tabwidget); - connect(tabwidget,SIGNAL(currentChanged( QWidget *)),this,SLOT(slotCurrentChanged(QWidget *))); + connect(tabwidget,SIGNAL(currentChanged(QWidget*)),this,SLOT(slotCurrentChanged(QWidget*))); //FILE ACTIONS QPopupMenu *popup = new QPopupMenu( this ); // Action for creating a new document QAction *a = new QAction( tr( "New" ), Resource::loadPixmap( "new" ), QString::null, 0, this, 0 ); a->addTo( popup ); connect(a, SIGNAL(activated()), this, SLOT(slotNew())); // Action for opening an exisiting document a = new QAction( tr( "Open" ),Resource::loadPixmap( "fileopen" ) , QString::null, 0, this, 0 ); a->addTo(popup); connect(a, SIGNAL(activated()), this, SLOT(slotOpen())); // Action for saving document a = new QAction( tr( "Save" ), Resource::loadPixmap( "save" ) , QString::null, 0, this, 0 ); a->addTo(popup); connect(a, SIGNAL(activated()), this, SLOT(slotSave())); // Action for saving document to a new name a = new QAction( tr( "Save As" ),Resource::loadPixmap( "save" ) , QString::null, 0, this, 0 ); a->addTo(popup); connect(a, SIGNAL(activated()), this, SLOT(slotSaveAs())); // Action for closing the currently active document a = new QAction( tr( "Close" ), Resource::loadPixmap( "quit_icon" ) , QString::null, 0, this, 0 ); a->addTo(popup); connect(a, SIGNAL(activated()), this, SLOT(slotClose())); mb->insertItem(tr("File"),popup); //EDIT ACTIONS // Action for cutting text editCut = new QToolButton( 0 ); editCut->setAutoRaise( true ); editCut->setIconSet( Resource::loadPixmap( "cut" ) ); // Action for Copying text editCopy = new QToolButton( 0 ); editCopy->setAutoRaise( true ); editCopy->setIconSet( Resource::loadPixmap( "copy" ) ); // Action for pasting text editPaste = new QToolButton( 0 ); editPaste->setAutoRaise( true ); editPaste->setIconSet( Resource::loadPixmap( "paste" ) ); // Action for finding / replacing text editFindReplace = new QToolButton( 0 ); editFindReplace->setAutoRaise( true ); editFindReplace->setIconSet( Resource::loadPixmap("find") ); // Action for undo editUndo = new QToolButton( 0 ); editUndo->setAutoRaise( true ); editUndo->setIconSet( Resource::loadPixmap( "undo" ) ); // Action for redo editRedo = new QToolButton( 0 ); editRedo->setAutoRaise( true ); editRedo->setIconSet( Resource::loadPixmap( "redo" ) ); //VIEW ACITONS popup = new QPopupMenu( this ); viewIncFontSizes = new QAction( tr( "Font +" ), QString::null, 0, this, 0 ); viewIncFontSizes->addTo( popup ); viewDecFontSizes = new QAction( tr( "Font -" ), QString::null, 0, this, 0 ); viewDecFontSizes->addTo( popup ); mb->insertItem(tr("View"),popup); popup = new QPopupMenu( this ); mb->insertItem(tr("Utils"),popup); mb->insertItem( editCut ); mb->insertItem( editCopy ); mb->insertItem( editPaste ); mb->insertItem( editFindReplace ); mb->insertItem( editUndo ); mb->insertItem( editRedo ); //Highlight management hlmenu=new QPopupMenu(this); HlManager *hlm=HlManager::self(); for (int i=0;i<hlm->highlights();i++) { hlmenu->insertItem(hlm->hlName(i),i); } popup->insertItem(tr("Highlighting"),hlmenu); utilSettings = new QAction( tr( "Settings" ), QString::null, 0, this, 0 ); utilSettings->addTo( popup); if( qApp->argc() > 1) open(qApp->argv()[1]); else slotNew(); } TinyKate::~TinyKate( ) { qWarning("TinyKate destructor\n"); shutDown=true; while (currentView!=0) { slotClose(); } if( KGlobal::config() != 0 ) { qWarning("deleting KateConfig object..\n"); delete KGlobal::config(); } } void TinyKate::slotOpen( ) { QString filename = Opie::OFileDialog::getOpenFileName( OFileSelector::EXTENDED_ALL, QString::null); if (!filename.isEmpty()) { open(filename); } } void TinyKate::open(const QString & filename) { KateDocument *kd= new KateDocument(false, false, this,0,this); KTextEditor::View *kv; QFileInfo fi(filename); QString filenamed = fi.fileName(); tabwidget->addTab(kv=kd->createView(tabwidget,"bLAH"),"tinykate/tinykate", filenamed ); qDebug(filename); kd->setDocName( filenamed); kd->open( filename ); viewCount++; } void TinyKate::setDocument(const QString& fileref) { open( fileref ); } void TinyKate::slotCurrentChanged( QWidget * view) { if (currentView) { disconnect(editCopy,SIGNAL(activated()),currentView,SLOT(copy())); disconnect(editCut,SIGNAL(activated()),currentView,SLOT(cut())); disconnect(editPaste,SIGNAL(activated()),currentView,SLOT(paste())); disconnect(editUndo,SIGNAL(activated()),currentView,SLOT(undo())); disconnect(editRedo,SIGNAL(activated()),currentView,SLOT(redo())); disconnect(viewIncFontSizes,SIGNAL(activated()), currentView,SLOT(slotIncFontSizes())); disconnect(viewDecFontSizes,SIGNAL(activated()), currentView,SLOT(slotDecFontSizes())); disconnect(hlmenu,SIGNAL(activated(int)), currentView,SLOT(setHl(int))); disconnect(utilSettings,SIGNAL(activated()), currentView,SLOT(configDialog())); } currentView=(KTextEditor::View*)view; connect(editCopy,SIGNAL(clicked()),currentView,SLOT(copy())); connect(editCut,SIGNAL(clicked()),currentView,SLOT(cut())); connect(editPaste,SIGNAL(clicked()),currentView,SLOT(paste())); connect(editUndo,SIGNAL(clicked()),currentView,SLOT(undo())); connect(editRedo,SIGNAL(clicked()),currentView,SLOT(redo())); connect(viewIncFontSizes,SIGNAL(activated()), currentView,SLOT(slotIncFontSizes())); connect(viewDecFontSizes,SIGNAL(activated()), currentView,SLOT(slotDecFontSizes())); connect(hlmenu,SIGNAL(activated(int)), currentView,SLOT(setHl(int))); connect(utilSettings,SIGNAL(activated()), currentView,SLOT(configDialog())); } void TinyKate::slotNew( ) { KateDocument *kd= new KateDocument(false, false, this,0,this); KTextEditor::View *kv; tabwidget->addTab(kv=kd->createView(tabwidget,"BLAH"), "tinykate/tinykate", tr("Unnamed %1").arg(nextUnnamed++)); viewCount++; } void TinyKate::slotClose( ) { if (currentView==0) return; KTextEditor::View *dv=currentView; currentView=0; tabwidget->removePage(dv); delete dv->document(); viewCount--; if ((!viewCount) && (!shutDown)) slotNew(); } void TinyKate::slotSave() { // feel free to make this how you want if (currentView==0) return; // KateView *kv = (KateView*) currentView; KateDocument *kd = (KateDocument*) currentView->document(); // qDebug("saving file "+kd->docName()); if( kd->docName().isEmpty()) slotSaveAs(); else kd->saveFile(); // kv->save(); // kd->saveFile(); } void TinyKate::slotSaveAs() { if (currentView==0) return; KateDocument *kd = (KateDocument*) currentView->document(); QString filename= Opie::OFileDialog::getSaveFileName(OFileSelector::EXTENDED_ALL, QString::null); if (!filename.isEmpty()) { qDebug("saving file "+filename); QFileInfo fi(filename); QString filenamed = fi.fileName(); kd->setDocFile( filename); kd->setDocName( filenamed); kd->saveFile(); // KTextEditor::View *dv = currentView; // tabwidget->changeTab( dv, filenamed); // need to change tab label here } } diff --git a/noncore/apps/zsafe/scqtfiledlg.cpp b/noncore/apps/zsafe/scqtfiledlg.cpp index dd72fdf..52b8d0d 100644 --- a/noncore/apps/zsafe/scqtfiledlg.cpp +++ b/noncore/apps/zsafe/scqtfiledlg.cpp @@ -1,256 +1,256 @@ /**************************************************************************** ** Form implementation generated from reading ui file 'scqtfiledlg.ui' ** ** Created: Sun Jun 8 15:51:12 2003 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "scqtfiledlg.h" #include <qcombobox.h> #include <qlineedit.h> #include <qlistview.h> #include <qtoolbutton.h> #include <qlayout.h> #include <qtooltip.h> #include <qwhatsthis.h> static const char* const image0_data[] = { "24 16 3 1", ". c None", "# c #000040", "a c #808080", "........................", "........................", ".................####...", ".................####...", ".......##........#aa#...", "......###........#aa#...", ".....####........#aa#...", "....##############aa#...", "...###aaaaaaaaaaaaaa#...", "..####aaaaaaaaaaaaaa#...", "...###aaaaaaaaaaaaaa#...", "....#################...", ".....####...............", "......###...............", ".......##...............", "........................"}; static const char* const image1_data[] = { "24 16 4 1", ". c None", "a c #008080", "b c #808080", "# c #ff0000", "........................", "........................", "...####..........####...", "...#####........#####...", "....######.....#####a...", ".....######...#####ba...", ".....aa###########bba...", "....aaaaa#######aabba...", "...aaabbb######bbbbba...", "..aaaabb########bbbba...", "...aaa############bba...", "....a######aaa#####aa...", "....######.....######...", "...#####a........####...", "...####aa.........###...", "........................"}; static const char* const image2_data[] = { "17 15 4 1", "# c #000000", ". c #dcdcdc", "a c #ffff00", "b c #ffffff", ".................", "............#....", ".................", "............#....", ".........#.....#.", "....####..#.#.#..", "...#abab#..#.#...", "..##########..#.#", "..#babababab##...", "..#ababababa#.#..", "..#babababab#..#.", "..#ababababa#....", "..#babababab#....", "..#ababababa#....", "..###########...."}; /* * Constructs a ScQtFileDlg 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. */ ScQtFileDlg::ScQtFileDlg( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { QPixmap image0( ( const char** ) image0_data ); QPixmap image1( ( const char** ) image1_data ); QPixmap image2( ( const char** ) image2_data ); if ( !name ) setName( "ScQtFileDlg" ); resize( 196, 279 ); if (!name) setCaption( tr( "FileDlg" ) ); else setCaption(name); ScQtFileDlgLayout = new QVBoxLayout( this ); ScQtFileDlgLayout->setSpacing( 6 ); ScQtFileDlgLayout->setMargin( 11 ); Layout5 = new QVBoxLayout; Layout5->setSpacing( 6 ); Layout5->setMargin( 0 ); Layout4 = new QVBoxLayout; Layout4->setSpacing( 6 ); Layout4->setMargin( 0 ); Layout3 = new QHBoxLayout; Layout3->setSpacing( 6 ); Layout3->setMargin( 0 ); TypeComboBox = new QComboBox( FALSE, this, "TypeComboBox" ); TypeComboBox->setEditable( TRUE ); TypeComboBox->setInsertionPolicy( QComboBox::AtBottom ); TypeComboBox->setAutoCompletion( FALSE ); TypeComboBox->setDuplicatesEnabled( FALSE ); QToolTip::add( TypeComboBox, tr( "file type filter" ) ); QWhatsThis::add( TypeComboBox, tr( "ComboBox FileTypeFilter\n" "\n" "edit or select the filter" ) ); Layout3->addWidget( TypeComboBox ); QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); Layout3->addItem( spacer ); OkButton = new QToolButton( this, "OkButton" ); OkButton->setText( tr( "" ) ); OkButton->setPixmap( image0 ); OkButton->setUsesBigPixmap( FALSE ); QToolTip::add( OkButton, tr( "confirms the selection and closes the form" ) ); QWhatsThis::add( OkButton, tr( "OKButton" ) ); Layout3->addWidget( OkButton ); CancelButton = new QToolButton( this, "CancelButton" ); CancelButton->setText( tr( "" ) ); CancelButton->setPixmap( image1 ); CancelButton->setUsesBigPixmap( FALSE ); QToolTip::add( CancelButton, tr( "cancels the selection and closes the form" ) ); QWhatsThis::add( CancelButton, tr( "CancelButton" ) ); Layout3->addWidget( CancelButton ); Layout4->addLayout( Layout3 ); Layout3_2 = new QHBoxLayout; Layout3_2->setSpacing( 6 ); Layout3_2->setMargin( 0 ); FNameLineEdit = new QLineEdit( this, "FNameLineEdit" ); QToolTip::add( FNameLineEdit, tr( "shows the selected filename" ) ); QWhatsThis::add( FNameLineEdit, tr( "Filename LineEdit\n" "\n" "shows the selected file\n" "and allows the direct filename\n" "edit" ) ); Layout3_2->addWidget( FNameLineEdit ); MkDirButton = new QToolButton( this, "MkDirButton" ); MkDirButton->setText( tr( "" ) ); MkDirButton->setPixmap( image2 ); MkDirButton->setUsesBigPixmap( FALSE ); QToolTip::add( MkDirButton, tr( "confirms the selection and closes the form" ) ); QWhatsThis::add( MkDirButton, tr( "OKButton" ) ); Layout3_2->addWidget( MkDirButton ); Layout4->addLayout( Layout3_2 ); DirComboBox = new QComboBox( FALSE, this, "DirComboBox" ); DirComboBox->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, DirComboBox->sizePolicy().hasHeightForWidth() ) ); DirComboBox->setEditable( TRUE ); DirComboBox->setDuplicatesEnabled( FALSE ); QWhatsThis::add( DirComboBox, tr( "ComboBox Directory \n" "edit or select the directories name" ) ); Layout4->addWidget( DirComboBox ); Layout5->addLayout( Layout4 ); ListView = new QListView( this, "ListView" ); ListView->addColumn( tr( "Name" ) ); ListView->addColumn( tr( "size" ) ); ListView->addColumn( tr( "type" ) ); ListView->setRootIsDecorated( TRUE ); QToolTip::add( ListView, tr( "directory listview" ) ); QWhatsThis::add( ListView, tr( "Directory ListView\n" "\n" "shows the list of dirs and files" ) ); Layout5->addWidget( ListView ); ScQtFileDlgLayout->addLayout( Layout5 ); // signals and slots connections connect( OkButton, SIGNAL( clicked() ), this, SLOT( slotOK() ) ); - connect( DirComboBox, SIGNAL( activated(int) ), this, SLOT( slotDirComboBoxChanged( int ) ) ); - connect( TypeComboBox, SIGNAL( activated(int) ), this, SLOT( slotTypeComboBoxChanged( int ) ) ); + connect( DirComboBox, SIGNAL( activated(int) ), this, SLOT( slotDirComboBoxChanged(int) ) ); + connect( TypeComboBox, SIGNAL( activated(int) ), this, SLOT( slotTypeComboBoxChanged(int) ) ); connect( CancelButton, SIGNAL( clicked() ), this, SLOT( slotCancel() ) ); - connect( ListView, SIGNAL( returnPressed(QListViewItem*) ), this, SLOT( slotSelectionChanged(QListViewItem *) ) ); - connect( ListView, SIGNAL( selectionChanged(QListViewItem*) ), this, SLOT( slotSelectionChanged(QListViewItem *) ) ); - connect( ListView, SIGNAL( doubleClicked(QListViewItem*) ), this, SLOT( slotDoubleClicked(QListViewItem *) ) ); - connect( FNameLineEdit, SIGNAL( textChanged(const QString&) ), this, SLOT( slotFileTextChanged( const QString & ) ) ); + connect( ListView, SIGNAL( returnPressed(QListViewItem*) ), this, SLOT( slotSelectionChanged(QListViewItem*) ) ); + connect( ListView, SIGNAL( selectionChanged(QListViewItem*) ), this, SLOT( slotSelectionChanged(QListViewItem*) ) ); + connect( ListView, SIGNAL( doubleClicked(QListViewItem*) ), this, SLOT( slotDoubleClicked(QListViewItem*) ) ); + connect( FNameLineEdit, SIGNAL( textChanged(const QString&) ), this, SLOT( slotFileTextChanged(const QString&) ) ); connect( FNameLineEdit, SIGNAL( returnPressed() ), this, SLOT( slotOK() ) ); connect( MkDirButton, SIGNAL( clicked() ), this, SLOT( slotMkDir() ) ); } /* * Destroys the object and frees any allocated resources */ ScQtFileDlg::~ScQtFileDlg() { // no need to delete child widgets, Qt does it all for us } void ScQtFileDlg::slotCancel() { qWarning( "ScQtFileDlg::slotCancel(): Not implemented yet!" ); } void ScQtFileDlg::slotDirComboBoxChanged( int ) { qWarning( "ScQtFileDlg::slotDirComboBoxChanged( int ): Not implemented yet!" ); } void ScQtFileDlg::slotDoubleClicked(QListViewItem *) { qWarning( "ScQtFileDlg::slotDoubleClicked(QListViewItem *): Not implemented yet!" ); } void ScQtFileDlg::slotFileTextChanged( const QString & ) { qWarning( "ScQtFileDlg::slotFileTextChanged( const QString & ): Not implemented yet!" ); } void ScQtFileDlg::slotMkDir() { qWarning( "ScQtFileDlg::slotMkDir(): Not implemented yet!" ); } void ScQtFileDlg::slotOK() { qWarning( "ScQtFileDlg::slotOK(): Not implemented yet!" ); } void ScQtFileDlg::slotSelectionChanged(QListViewItem *) { qWarning( "ScQtFileDlg::slotSelectionChanged(QListViewItem *): Not implemented yet!" ); } void ScQtFileDlg::slotTypeComboBoxChanged( int ) { qWarning( "ScQtFileDlg::slotTypeComboBoxChanged( int ): Not implemented yet!" ); } diff --git a/noncore/apps/zsafe/zsafe.cpp b/noncore/apps/zsafe/zsafe.cpp index a3e805e..a3467e5 100644 --- a/noncore/apps/zsafe/zsafe.cpp +++ b/noncore/apps/zsafe/zsafe.cpp @@ -309,774 +309,774 @@ static const char* const general_data[] = { ".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* ) ) ); + 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); 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: 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); @@ -2198,1177 +2198,1177 @@ bool ZSafe::saveDocument(const char* _filename, 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 & ) ) ); + 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 & ) ) ); + 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 { // delete dialog; dialog->hide(); return; } } } void ZSafe::cutItem() { if (!selectedItem) return; if (!isCategory(selectedItem)) { IsCut = true; copiedItem = selectedItem; } } void ZSafe::copyItem() { if (!selectedItem) return; if (!isCategory(selectedItem)) { IsCopy = true; copiedItem = selectedItem; } } // paste item into category void ZSafe::pasteItem() { if (!selectedItem) return; if (isCategory(selectedItem)) { modified = true; if (IsCut) { if (copiedItem) { // add the new item QListViewItem *i = new ShadedListItem (0, selectedItem); // i->setOpen (TRUE); i->setText (0, copiedItem->text(0)); i->setText (1, copiedItem->text(1)); i->setText (2, copiedItem->text(2)); i->setText (3, copiedItem->text(3)); i->setText (4, copiedItem->text(4)); i->setText (5, copiedItem->text(5)); selectedItem->setOpen( TRUE ); // remove the cutted item copiedItem->parent()->takeItem(copiedItem); selectedItem = NULL; } } else if (IsCopy) { if (copiedItem) { // add the new item QListViewItem *i = new ShadedListItem (0, selectedItem); // i->setOpen (TRUE); i->setText (0, copiedItem->text(0)); i->setText (1, copiedItem->text(1)); i->setText (2, copiedItem->text(2)); i->setText (3, copiedItem->text(3)); i->setText (4, copiedItem->text(4)); i->setText (5, copiedItem->text(5)); selectedItem->setOpen( TRUE ); } } } IsCut = false; IsCopy = false; } void ZSafe::newDocument() { // open the file dialog #ifndef DESKTOP #ifndef NO_OPIE QMap<QString, QStringList> mimeTypes; mimeTypes.insert(tr("All"), QStringList() ); mimeTypes.insert(tr("ZSafe"), "zsafe/*" ); QString newFile = OFileDialog::getSaveFileName( OFileSelector::EXTENDED_ALL, QDir::homeDirPath() + "/Documents/application/zsafe", QString::null, mimeTypes, this, tr ("Create new ZSafe document")); #else QString newFile = ScQtFileEdit::getSaveAsFileName(this, tr ("Create new ZSafe document"), QDir::homeDirPath() + "/Documents/application/zsafe", "*.zsf"); #endif #else QString newFile = QFileDialog::getSaveFileName( QDir::homeDirPath() + "/Documents/application/zsafe", "ZSafe (*.zsf)", this, "ZSafe File Dialog" "Choose a ZSafe file" ); #endif // open the new document if (newFile && newFile.length() > 0 ) { // save the previous opened document if (!filename.isEmpty()) saveDocument(filename, FALSE); modified = true; // clear the password list QListViewItem *i; QListViewItem *c = NULL; // step through all categories for (i = ListView->firstChild(); i != NULL; i = i->nextSibling()) { if (c) delete c; // delete the previous category c = i; // step through all subitems QListViewItem *si; for (si = i->firstChild(); si != NULL; ) { QListViewItem *_si = si; diff --git a/noncore/comm/keypebble/krfbcanvas.cpp b/noncore/comm/keypebble/krfbcanvas.cpp index 75cba68..cd1fda0 100644 --- a/noncore/comm/keypebble/krfbcanvas.cpp +++ b/noncore/comm/keypebble/krfbcanvas.cpp @@ -1,200 +1,200 @@ #include "krfbconnection.h" #include "krfbcanvas.h" #include "krfbbuffer.h" #include <qpe/qpeapplication.h> #include <qclipboard.h> KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name ) : QScrollView( parent, name ) { connection_ = new KRFBConnection(); connect( connection_, SIGNAL( loggedIn() ), this, SLOT( loggedIn() ) ); loggedIn_ = false; //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold); viewport()->setFocusPolicy( QWidget::StrongFocus ); viewport()->setFocus(); nextRightClick=0; nextDoubleClick=0; } KRFBCanvas::~KRFBCanvas() { } void KRFBCanvas::openConnection(KRFBServer server) { QCString host = server.hostname.latin1(); password=server.password; connection_->connectTo( server); } void KRFBCanvas::openURL( const QUrl &url ) { if ( loggedIn_ ) { qWarning( "openURL invoked when logged in\n" ); return; } QCString host = url.host().latin1(); int display = url.port(); // connection_->connectTo( host, display ); } void KRFBCanvas::closeConnection() { loggedIn_ = false; connection_->disconnect(); viewport()->setMouseTracking( false ); viewport()->setBackgroundMode( PaletteDark ); setBackgroundMode( PaletteDark ); update(); } void KRFBCanvas::bell() { if ( connection_->options()->deIconify ) { topLevelWidget()->raise(); topLevelWidget()->show(); } } void KRFBCanvas::loggedIn() { qWarning( "Ok, we're logged in" ); // // Get ready for action // loggedIn_ = true; viewport()->setMouseTracking( true ); viewport()->setBackgroundMode( NoBackground ); setBackgroundMode( NoBackground ); // Start using the buffer - connect( connection_->buffer(), SIGNAL( sizeChanged( int, int ) ), + connect( connection_->buffer(), SIGNAL( sizeChanged(int,int) ), this, SLOT( resizeContents(int,int) ) ); - connect( connection_->buffer(), SIGNAL( updated( int, int, int, int ) ), + connect( connection_->buffer(), SIGNAL( updated(int,int,int,int) ), this, SLOT( viewportUpdate(int,int,int,int) ) ); connect( connection_->buffer(), SIGNAL( bell() ), this, SLOT( bell() ) ); connect( qApp->clipboard(), SIGNAL( dataChanged() ), this, SLOT( clipboardChanged() ) ); } void KRFBCanvas::viewportPaintEvent( QPaintEvent *e ) { QRect r = e->rect(); if ( loggedIn_ ) { QPixmap p; bitBlt( viewport(), r.x(), r.y(), connection_->buffer()->pixmap(), r.x() + contentsX(), r.y() + contentsY(), r.width(), r.height() ); } else { QScrollView::viewportPaintEvent( e ); } } void KRFBCanvas::viewportUpdate( int x, int y, int w, int h ) { updateContents( x, y, w, h ); } void KRFBCanvas::contentsMousePressEvent( QMouseEvent *e ) { if (nextDoubleClick) { connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonPress, e->pos(),LeftButton,LeftButton)); connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonRelease, e->pos(),LeftButton,0)); connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonRelease, e->pos(),LeftButton,0)); connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonPress, e->pos(),NoButton,NoButton)); connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonRelease, e->pos(),NoButton,0)); } if (nextRightClick) { connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonPress, e->pos(),RightButton,RightButton)); connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonRelease, e->pos(),RightButton,0)); connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonPress, e->pos(),NoButton,NoButton)); connection_->buffer()->mouseEvent( &QMouseEvent(QEvent::MouseButtonRelease, e->pos(),NoButton,0)); } else if ( loggedIn_ ) connection_->buffer()->mouseEvent( e ); } void KRFBCanvas::contentsMouseReleaseEvent( QMouseEvent *e ) { if ( loggedIn_ && !nextRightClick && !nextDoubleClick) { connection_->buffer()->mouseEvent( e ); } nextRightClick=0; nextDoubleClick=0; } void KRFBCanvas::contentsMouseMoveEvent( QMouseEvent *e ) { if ( loggedIn_ ) connection_->buffer()->mouseEvent( e ); } void KRFBCanvas::keyPressEvent( QKeyEvent *e ) { if ( loggedIn_ ) connection_->buffer()->keyPressEvent( e ); } void KRFBCanvas::keyReleaseEvent( QKeyEvent *e ) { if ( loggedIn_ ) connection_->buffer()->keyReleaseEvent( e ); } void KRFBCanvas::refresh() { if ( loggedIn_ ) connection_->refresh(); } void KRFBCanvas::clipboardChanged() { if ( loggedIn_ ) { connection_->sendCutText( qApp->clipboard()->text() ); } } void KRFBCanvas::sendCtlAltDel( void) { if ( loggedIn_ ) { connection_->buffer()->keyPressEvent( &QKeyEvent(QEvent::KeyPress,Qt::Key_Control, 0,0)); connection_->buffer()->keyPressEvent( &QKeyEvent(QEvent::KeyPress,Qt::Key_Alt, 0,0)); connection_->buffer()->keyPressEvent( &QKeyEvent(QEvent::KeyPress,Qt::Key_Delete, 0,0)); connection_->buffer()->keyPressEvent( &QKeyEvent(QEvent::KeyRelease,Qt::Key_Control, 0,0)); connection_->buffer()->keyPressEvent( &QKeyEvent(QEvent::KeyRelease,Qt::Key_Alt, 0,0)); connection_->buffer()->keyPressEvent( &QKeyEvent(QEvent::KeyRelease,Qt::Key_Delete, 0,0)); } } void KRFBCanvas::markDoubleClick( void) { nextRightClick=1; } void KRFBCanvas::markRightClick( void) { nextRightClick=1; } diff --git a/noncore/comm/keypebble/krfbconnection.cpp b/noncore/comm/keypebble/krfbconnection.cpp index e6c33c6..b447046 100644 --- a/noncore/comm/keypebble/krfbconnection.cpp +++ b/noncore/comm/keypebble/krfbconnection.cpp @@ -1,233 +1,233 @@ #include <assert.h> #include <qsocket.h> #include <qtimer.h> #include <string.h> #include "krfbconnection.h" #include "krfblogin.h" #include "krfbdecoder.h" #include "krfbbuffer.h" KRFBConnection::KRFBConnection( QObject *parent ) : QObject( parent, "KRFBConnection" ) { portBase_ = 5900; currentState_ = Disconnected; sock = 0; minData_ = 0; options_ = new KRFBServer(); updater = 0; decoder_ = 0; buffer_ = 0; } KRFBConnection::~KRFBConnection() { if ( ( currentState_ != Disconnected ) && ( currentState_ != Disconnecting ) && sock ) { disconnectDone(); } delete options_; } void KRFBConnection::connectTo( KRFBServer server) { if ( currentState_ != Disconnected ) disconnect(); (*options_)=server; sock = new QSocket( this, "rfbSocket" ); CHECK_PTR( sock ); // Connect to something to notice connection or error - connect( sock, SIGNAL( error( int ) ), SLOT( gotSocketError( int ) ) ); + connect( sock, SIGNAL( error(int) ), SLOT( gotSocketError(int) ) ); connect( sock, SIGNAL( connected() ), SLOT( gotSocketConnection() ) ); qWarning( "Connecting..." ); currentState_ = Connecting; sock->connectToHost( options_->hostname.latin1(), portBase_ + options_->display ); } void KRFBConnection::disconnect() { qWarning( "Disconnecting from server" ); if ( ( currentState_ != Disconnected ) && ( currentState_ != Disconnecting ) && sock ) { currentState_ = Disconnecting; connect( sock, SIGNAL( delayedCloseFinished() ), SLOT( disconnectDone() ) ); sock->close(); if ( sock->state() != QSocket::Closing ) disconnectDone(); } } void KRFBConnection::disconnectDone() { currentState_ = Disconnected; delete sock; sock = 0; minData_ = 0; delete updater; delete decoder_; delete buffer_; emit disconnected(); } void KRFBConnection::gotSocketConnection() { currentState_ = LoggingIn; qWarning( "Connected, logging in..." ); static QString statusMsg = tr( "Connected" ); emit statusChanged( statusMsg ); // Do some login stuff login = new KRFBLogin( this ); } void KRFBConnection::gotRFBConnection() { qWarning( "Logged into server" ); currentState_ = Connected; emit connected(); // Create the decoder and start doing stuff decoder_ = new KRFBDecoder( this ); CHECK_PTR( decoder_ ); buffer_ = new KRFBBuffer( decoder_, this, "RFB Buffer" ); CHECK_PTR( buffer_ ); decoder_->setBuffer( buffer_ ); - connect( decoder_, SIGNAL( status( const QString & ) ), - this, SIGNAL( statusChanged( const QString & ) ) ); + connect( decoder_, SIGNAL( status(const QString&) ), + this, SIGNAL( statusChanged(const QString&) ) ); emit loggedIn(); decoder_->start(); updater = new QTimer; connect( updater, SIGNAL( timeout() ), SLOT( updateTimer() ) ); updater->start( options_->updateRate ); } void KRFBConnection::gotSocketError( int err ) { currentState_ = Error; // Do some error handling stuff qWarning( "KRFBConnection: Socket error %d", err ); static QString refused = tr( "Connection Refused" ); static QString host = tr( "Host not found" ); static QString read = tr( "Read Error: QSocket reported an error reading\n" "data, the remote host has probably dropped the\n" "connection." ); static QString confused = tr( "QSocket reported an invalid error code" ); QString msg; switch ( err ) { case QSocket::ErrConnectionRefused: msg = refused; break; case QSocket::ErrHostNotFound: msg = host; break; case QSocket::ErrSocketRead: msg = read; break; default: msg = confused; }; QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) ); delete sock; sock = 0; currentState_ = Disconnected; emit error( msg ); } void KRFBConnection::gotMoreData() { assert( minData_ > 0 ); if ( sock->size() >= minData_ ) { minData_ = 0; QObject::disconnect( sock, SIGNAL( readyRead() ), this, SLOT( gotMoreData() ) ); emit gotEnoughData(); } } void KRFBConnection::waitForData( unsigned int sz ) { assert( minData_ == 0 ); assert( sz > 0 ); assert( currentState_ != Error ); if ( sock->size() >= sz ) { // qWarning( "No need to wait for data" ); emit gotEnoughData(); } else { // qWarning( "Waiting for %u bytes", sz ); minData_ = sz; connect( sock, SIGNAL( readyRead() ), SLOT( gotMoreData() ) ); } } int KRFBConnection::read( void *buf, int sz ) { return sock->readBlock( (char *) buf, sz ); } int KRFBConnection::write( void *buf, int sz ) { return sock->writeBlock( (const char *) buf, sz ); } KRFBConnection::State KRFBConnection::state() const { return currentState_; } void KRFBConnection::setPortBase( int base ) { portBase_ = base; } int KRFBConnection::portBase() const { return portBase_; } void KRFBConnection::updateTimer() { decoder_->sendUpdateRequest( true ); } void KRFBConnection::refresh() { decoder_->sendUpdateRequest( false ); } void KRFBConnection::sendCutText( const QString &text ) { decoder_->sendCutEvent( text ); } const QUrl &KRFBConnection::url() { url_.setProtocol( "vnc" ); url_.setPort( display() ); url_.setHost( host() ); url_.setPath( "/" ); return url_; } diff --git a/noncore/comm/keypebble/krfblogin.cpp b/noncore/comm/keypebble/krfblogin.cpp index 0b4a757..2bbd110 100644 --- a/noncore/comm/keypebble/krfblogin.cpp +++ b/noncore/comm/keypebble/krfblogin.cpp @@ -1,253 +1,253 @@ #include <assert.h> extern "C" { #include "vncauth.h" } #include "krfblogin.h" #include "krfbconnection.h" #include <qtimer.h> // The length of the various messages (used to decide how many bytes to // wait for). const int ServerVersionLength = 12; const int ClientVersionLength = 12; const int AuthSchemeLength = 4; const int FailureReasonSizeLength = 4; const int ChallengeLength = 16; const int AuthResultLength = 4; // Authentication results enum AuthResult { AuthOk, AuthFailed, AuthTooMany }; typedef unsigned char CARD8; typedef unsigned short CARD16; typedef unsigned long CARD32; const int endianTest = 1; // Endian stuff #define Swap16IfLE(s) \ (*(char *)&endianTest ? ((((s) & 0xff) << 8) | (((s) >> 8) & 0xff)) : (s)) #define Swap32IfLE(l) \ (*(char *)&endianTest ? ((((l) & 0xff000000) >> 24) | \ (((l) & 0x00ff0000) >> 8) | \ (((l) & 0x0000ff00) << 8) | \ (((l) & 0x000000ff) << 24)) : (l)) KRFBLogin::KRFBLogin( KRFBConnection *con ) : QObject( con, "RFB login manager" ) { assert( con ); this->con = con; currentState = AwaitingServerVersion; - connect( this, SIGNAL( error( const QString & ) ), - con, SIGNAL( error( const QString & ) ) ); + connect( this, SIGNAL( error(const QString&) ), + con, SIGNAL( error(const QString&) ) ); qWarning( "Waiting for server version..." ); static QString statusMsg = tr( "Waiting for server version..." ); emit status( statusMsg ); // Kick off the state machine connect( con, SIGNAL( gotEnoughData() ), SLOT( gotServerVersion() ) ); con->waitForData( ServerVersionLength ); } KRFBLogin::~KRFBLogin() { } KRFBLogin::State KRFBLogin::state() const { return currentState; } void KRFBLogin::gotServerVersion() { qWarning( "Got server version" ); disconnect( con, SIGNAL( gotEnoughData() ), this, SLOT( gotServerVersion() ) ); // Read the server's version message char serverVersion[ ServerVersionLength + 1 ]; con->read( serverVersion, ServerVersionLength ); serverVersion[ ServerVersionLength ] = '\0'; QCString rfbString( serverVersion, ServerVersionLength + 1 ); versionString = rfbString; QRegExp regexp( "RFB [0-9][0-9][0-9]\\.[0-9][0-9][0-9]\n" ); if ( rfbString.find( regexp ) == -1 ) { static QString msg = tr( "Error: Invalid server version, %1" ).arg( rfbString ); qWarning( msg ); emit error( msg ); currentState = Error; return; } // Calculate the actual version number serverMajor = (serverVersion[4] - '0') * 100 + (serverVersion[5] - '0') * 10 + (serverVersion[6] - '0'); serverMinor = (serverVersion[8] - '0') * 100 + (serverVersion[9] - '0') * 10 + (serverVersion[10] - '0'); qWarning("Server Version: %03d.%03d", serverMajor, serverMinor ); if ( serverMajor != 3 ) { QString msg = tr( "Error: Unsupported server version, %1" ) .arg( rfbString ); qWarning( msg ); emit error( msg ); currentState = Error; return; } if ( serverMinor != 3 ) { qWarning( "Minor version mismatch: %d", serverMinor ); } // Setup for the next state sendClientVersion(); connect( con, SIGNAL( gotEnoughData() ), SLOT( gotAuthScheme() ) ); con->waitForData( AuthSchemeLength ); } void KRFBLogin::gotAuthScheme() { disconnect( con, SIGNAL( gotEnoughData() ), this, SLOT( gotAuthScheme() ) ); // Got data CARD32 scheme; con->read( &scheme, AuthSchemeLength ); scheme = Swap32IfLE( scheme ); static QString statusMsgOk = tr( "Logged in" ); switch ( scheme ) { case 0: qWarning( "Failed" ); // Handle failure connect( con, SIGNAL( gotEnoughData() ), SLOT( gotFailureReasonSize() ) ); con->waitForData( FailureReasonSizeLength ); break; case 1: // Handle no auth emit status( statusMsgOk ); con->gotRFBConnection(); break; case 2: // Handle VNC auth connect( con, SIGNAL( gotEnoughData() ), SLOT( gotChallenge() ) ); con->waitForData( ChallengeLength ); break; default: qWarning( "Unknown authentication scheme, 0x%08lx", scheme ); currentState = Error; break; }; } void KRFBLogin::gotChallenge() { disconnect( con, SIGNAL( gotEnoughData() ), this, SLOT( gotChallenge() ) ); QTimer::singleShot( 0, this, SLOT(getPassword()) ); } void KRFBLogin::getPassword() { // Got data CARD8 challenge[ ChallengeLength ]; con->read( challenge, ChallengeLength ); // Last chance to enter a password if ( con->options_->password.isNull() ) { qWarning( "krfblogin needs a password" ); emit passwordRequired( con ); } if ( con->options_->password.isNull() ) { QString msg = tr( "Error: This server requires a password, but none " "has been specified.\n" ); emit error( msg ); return; } vncEncryptBytes( (unsigned char *) challenge, QCString(con->options_->password.latin1()).data() ); con->write( challenge, ChallengeLength ); connect( con, SIGNAL( gotEnoughData() ), SLOT( gotAuthResult() ) ); con->waitForData( AuthResultLength ); } void KRFBLogin::gotFailureReasonSize() { disconnect( con, SIGNAL( gotEnoughData() ), this, SLOT( gotFailureReasonSize() ) ); } void KRFBLogin::gotAuthResult() { // Got data disconnect( con, SIGNAL( gotEnoughData() ), this, SLOT( gotAuthResult() ) ); long result; con->read( &result, AuthResultLength ); result = Swap32IfLE( result ); qWarning( "Authentication Result is 0x%08lx", result ); static QString failed = tr( "Error: The password you specified was incorrect." ); static QString tooMany = tr( "Error: Too many invalid login attempts have been made\n" "to this account, please try later." ); static QString statusMsgOk = tr( "Logged in" ); static QString statusMsgFailed = tr( "Login Failed" ); static QString statusMsgTooMany = tr( "Too many failures" ); switch( result ) { case AuthOk: emit status( statusMsgOk ); con->gotRFBConnection(); break; case AuthFailed: qWarning( "Dammit" ); emit status( statusMsgFailed ); emit error( failed ); break; case AuthTooMany: emit status( statusMsgTooMany ); emit error( tooMany ); break; default: qWarning( "Invalid authentication result, %lx", result ); break; } } void KRFBLogin::sendClientVersion() { qWarning( "Sending client version" ); con->write( (void*)"RFB 003.003\n", ClientVersionLength ); } diff --git a/noncore/comm/keypebble/kvnc.cpp b/noncore/comm/keypebble/kvnc.cpp index c678edf..88cb50b 100644 --- a/noncore/comm/keypebble/kvnc.cpp +++ b/noncore/comm/keypebble/kvnc.cpp @@ -1,279 +1,279 @@ #include <qaction.h> #include <qpopupmenu.h> #include <qpushbutton.h> #include <qmessagebox.h> #include <qlistbox.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <assert.h> #include "kvnc.h" #include "krfbcanvas.h" #include "krfbconnection.h" #include "kvncconndlg.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( 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); 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); 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()); } diff --git a/noncore/games/bounce/game.cpp b/noncore/games/bounce/game.cpp index c07f453..1f1f8cd 100644 --- a/noncore/games/bounce/game.cpp +++ b/noncore/games/bounce/game.cpp @@ -1,605 +1,605 @@ /* * Copyright (C) 2000 Stefan Schimanski <1Stein@gmx.de> * * This program 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 program 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 program; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <stdlib.h> #include <qtimer.h> #include <qpe/qpeapplication.h> #include "game.h" #define TILE_SIZE 9 #define TILE_FIRST ((FIELD_WIDTH-2)*(FIELD_HEIGHT-2)) #define TILE_FREE (TILE_FIRST + 0) #define TILE_BORDER (TILE_FIRST + 1) #define TILE_WALLEND (TILE_FIRST + 2) #define TILE_WALLUP (TILE_FIRST + 3) #define TILE_WALLDOWN (TILE_FIRST + 4) #define TILE_WALLLEFT (TILE_FIRST + 5) #define TILE_WALLRIGHT (TILE_FIRST + 6) #define GAME_DELAY 15 #define BALL_ANIM_DELAY 60 #define WALL_DELAY 100 #define MS2TICKS( ms ) ((ms)/GAME_DELAY) Arrow::Arrow(QCanvasPixmapArray* array, QCanvas* canvas) : QCanvasSprite( array, canvas ) { m_vertical = true; move(3,3); } void Arrow::update() { if ( m_vertical ) setFrame( 0 ); else setFrame( 1 ); } void Arrow::changeDirection() { m_vertical = ! m_vertical; update(); } Ball::Ball(QCanvasPixmapArray* array, QCanvas* canvas) : QCanvasSprite( array, canvas ), m_animDelay( 0 ), m_soundDelay( MS2TICKS(BALL_ANIM_DELAY)/2 ) { } void Ball::update() { m_animDelay--; if ( m_animDelay<=0 ) { m_animDelay = MS2TICKS(BALL_ANIM_DELAY); int frameNum = frame(); frameNum++; if ( frameNum>=frameCount() ) frameNum = 0; setFrame( frameNum ); } } void Ball::advance(int stage) { bool reflectX = false; bool reflectY = false; // check for collisions if ( collide(xVelocity(), 0) ) reflectX = true; if ( collide(0, yVelocity()) ) reflectY = true; if ( !reflectX && !reflectY && collide(xVelocity(), yVelocity()) ) reflectX = reflectY = true; // emit collision QRect r = boundingRect(); r.moveBy( xVelocity(), yVelocity() ); JezzField* field = (JezzField *)canvas(); int ul = field->tile( r.left() / TILE_SIZE, r.top() / TILE_SIZE ); int ur = field->tile( r.right() / TILE_SIZE, r.top() / TILE_SIZE ); int bl = field->tile( r.left() / TILE_SIZE, r.bottom() / TILE_SIZE ); int br = field->tile( r.right() / TILE_SIZE, r.bottom() / TILE_SIZE ); if ( ul!=TILE_FREE ) field->emitBallCollisiton( this, r.left() / TILE_SIZE, r.top() / TILE_SIZE, ul ); else if ( ur!=TILE_FREE ) field->emitBallCollisiton( this, r.right() / TILE_SIZE, r.top() / TILE_SIZE, ur ); else if ( bl!=TILE_FREE ) field->emitBallCollisiton( this, r.left() / TILE_SIZE, r.bottom() / TILE_SIZE, bl ); else if ( br!=TILE_FREE ) field->emitBallCollisiton( this, r.right() / TILE_SIZE, r.bottom() / TILE_SIZE, br ); // apply reflection if ( reflectX ) setXVelocity( -xVelocity() ); if ( reflectY ) setYVelocity( -yVelocity() ); // update field update(); QCanvasSprite::advance( stage ); } bool Ball::collide( double dx, double dy ) { QRect r = boundingRect(); r.moveBy( dx, dy ); JezzField* field = (JezzField *)canvas(); int ul = field->tile( r.left() / TILE_SIZE, r.top() / TILE_SIZE ); int ur = field->tile( r.right() / TILE_SIZE, r.top() / TILE_SIZE ); int bl = field->tile( r.left() / TILE_SIZE, r.bottom() / TILE_SIZE ); int br = field->tile( r.right() / TILE_SIZE, r.bottom() / TILE_SIZE ); return ( ul!=TILE_FREE || ur!=TILE_FREE || bl!=TILE_FREE || br!=TILE_FREE ); } /*************************************************************************/ Wall::Wall( JezzField *field, int x, int y, Direction dir, int tile, QObject *parent, const char *name ) : QObject( parent, name ), m_dir( dir ), m_field( field ), m_startX( x ), m_startY( y ), m_tile( tile ), m_delay( MS2TICKS(WALL_DELAY)/2 ), m_active( true ) { // setup position and direction m_dx = 0; m_dy = 0; switch ( m_dir ) { case Up: m_dy = -1; break; case Down: m_dy = 1; break; case Left: m_dx = -1; break; case Right: m_dx = 1; break; } m_x = m_startX; m_y = m_startY; m_field->setTile( m_x, m_y, m_tile ); } void Wall::finish() { m_active = false; } bool Wall::isFree( int x, int y ) { if ( m_field->tile(x, y)==TILE_FREE ) { // check whether there is a ball at the moment QCanvasItemList cols = m_field->collisions( QRect(x*TILE_SIZE, y*TILE_SIZE, TILE_SIZE, TILE_SIZE) ); if ( cols.count()==0 ) return true; } return false; } void Wall::update() { } void Wall::advance() { update(); // move wall if ( m_active ) { m_delay--; if ( m_delay<=0 ) { m_delay = MS2TICKS(WALL_DELAY); // set previous tile m_field->setTile( m_x, m_y, m_tile ); // check whether next place is still free if ( isFree(m_x+m_dx, m_y+m_dy) ) { // move ball m_x += m_dx; m_y += m_dy; // set tile m_field->setTile( m_x, m_y, TILE_WALLEND ); } else { finish(); emit finished( this, m_field->tile( m_x+m_dx, m_y+m_dy ) ); } } } } void Wall::fill( bool black ) { if ( m_dx ) { for ( int x=m_startX ; x!=m_x; x+=m_dx ) if ( m_field->tile(x, m_startY)==m_tile ) m_field->setGameTile( x, m_startY, black ); m_field->setGameTile( m_x, m_startY, black ); } else { for ( int y=m_startY ; y!=m_y; y+=m_dy ) if ( m_field->tile(m_startX, y)==m_tile ) m_field->setGameTile( m_startX, y, black ); m_field->setGameTile( m_startX, m_y, black ); } } /*************************************************************************/ JezzField::JezzField( QPixmap tiles, QObject* parent, const char* name ) : QCanvas( parent, name ), m_tiles( tiles ) { setPixmaps( tiles ); } void JezzField::setGameTile( int x, int y, bool black ) { setTile( x, y, black ? TILE_BORDER : TILE_FREE ); } void JezzField::setPixmaps( QPixmap tiles ) { // create new tiles QPixmap allTiles( TILE_SIZE*(FIELD_WIDTH-2), TILE_SIZE*(FIELD_HEIGHT-1) ); // handle default tiles bitBlt( &allTiles, 0, TILE_SIZE*(FIELD_HEIGHT-2), &tiles, 0, 0, tiles.width(), tiles.height() ); // load tiles into canvas setTiles( allTiles, FIELD_WIDTH, FIELD_HEIGHT, TILE_SIZE, TILE_SIZE ); } /*************************************************************************/ JezzView::JezzView(QCanvas* viewing, QWidget* parent, const char* name, WFlags f) : QCanvasView( viewing, parent, name, f ), m_vertical( false ) { setResizePolicy( AutoOne ); setHScrollBarMode( AlwaysOff ); setVScrollBarMode( AlwaysOff ); setCursor( sizeHorCursor ); } void JezzView::viewportMouseReleaseEvent( QMouseEvent *ev ) { if ( ev->button() & LeftButton ) { emit buildWall( ev->x()/TILE_SIZE, ev->y()/TILE_SIZE, m_vertical ); } } void JezzView::changeCursor() { m_vertical = !m_vertical; if ( m_vertical ) { setCursor( sizeVerCursor ); } else { setCursor( sizeHorCursor ); } } /*************************************************************************/ JezzGame::JezzGame( int ballNum, QWidget *parent, const char *name ) : QWidget( parent, name ), m_wall1( 0 ), m_wall2( 0 ), m_text( 0 ), m_running( false ), m_percent( 0 ), m_pictured( false ) { QString path = QPEApplication::qpeDir()+"pics/bounce/"; // load gfx m_ballPixmaps = new QCanvasPixmapArray( path + "ball%1.png", 25 ); for ( unsigned n=0; n < m_ballPixmaps->count(); n++ ) m_ballPixmaps->image(n)->setOffset( 0, 0 ); m_arrowPixmaps = new QCanvasPixmapArray( path + "arrow%1.png", 2 ); for ( unsigned n=0; n < m_arrowPixmaps->count(); n++ ) m_arrowPixmaps->image(n)->setOffset( 0, 0 ); QPixmap tiles( path + "tiles.png" ); // create field m_field = new JezzField( tiles, this, "m_field" ); m_field->resize( TILE_SIZE*FIELD_WIDTH, TILE_SIZE*FIELD_HEIGHT ); for ( int x=0; x<FIELD_WIDTH; x++ ) m_field->setTile( x, 0, TILE_BORDER ); for ( int y=1; y<FIELD_HEIGHT-1; y++ ) { m_field->setTile( 0, y, TILE_BORDER ); for ( int x=1; x<FIELD_WIDTH-1; x++ ) m_field->setTile( x, y, TILE_FREE ); m_field->setTile( FIELD_WIDTH-1, y, TILE_BORDER ); } for ( int x=0; x<FIELD_WIDTH; x++ ) m_field->setTile( x, FIELD_HEIGHT-1, TILE_BORDER ); - connect( m_field, SIGNAL(ballCollision(Ball *, int, int, int)), this, SLOT(ballCollision(Ball *, int, int, int)) ); + connect( m_field, SIGNAL(ballCollision(Ball*,int,int,int)), this, SLOT(ballCollision(Ball*,int,int,int)) ); // create view m_view = new JezzView( m_field, this, "m_view" ); m_view->move( 0, 0 ); m_view->adjustSize(); - connect( m_view, SIGNAL(buildWall(int, int, bool)), this, SLOT(buildWall(int, int, bool)) ); + connect( m_view, SIGNAL(buildWall(int,int,bool)), this, SLOT(buildWall(int,int,bool)) ); // create balls for ( int n=0; n<ballNum; n++ ) { Ball *ball = new Ball( m_ballPixmaps, m_field ); m_balls.append( ball ); ball->setVelocity( ((rand() & 1)*2-1)*2, ((rand() & 1)*2-1)*2 ); ball->setFrame( rand() % 25 ); ball->move( 4*TILE_SIZE + ( rand() - 50 ) % ( (FIELD_WIDTH-8)*TILE_SIZE ), 4*TILE_SIZE + rand() % ( (FIELD_HEIGHT-8)*TILE_SIZE ) ); ball->show(); } // create arrow arrow = new Arrow( m_arrowPixmaps, m_field ); arrow->show(); // create text label m_text = new QCanvasText( m_field ); // create game clock m_clock = new QTimer( this ); connect( m_clock, SIGNAL(timeout()), this, SLOT(tick()) ); m_clock->start( GAME_DELAY ); // setup geometry setFixedSize( m_view->size() ); } JezzGame::~JezzGame() { m_balls.clear(); delete m_view; delete m_field; delete m_ballPixmaps; } void JezzGame::display( QString text, int size ) { qDebug("This function \"display\" shouldn't be called!!!"); if ( !text.isEmpty() ) { QFont font( "Helvetica", size, QFont::Bold ); font.setStyleHint( QFont::Helvetica ); m_text->setFont( font ); m_text->setText( text ); QRect size = m_text->boundingRect(); m_text->move( ( FIELD_WIDTH*TILE_SIZE - size.width() ) / 2, ( FIELD_HEIGHT*TILE_SIZE - size.height() ) / 2 ); m_text->show(); } else { m_text->hide(); } } void JezzGame::start() { m_running = true; } void JezzGame::stop() { m_running = false; } void JezzGame::makeBlack() { // copy current field into buffer for ( int y=0; y<FIELD_HEIGHT; y++ ) for ( int x=0; x<FIELD_WIDTH; x++ ) m_buf[x][y] = m_field->tile( x, y ); // fill areas that contains a ball for ( Ball *ball=m_balls.first(); ball!=0; ball=m_balls.next() ) fill( ball->x()/TILE_SIZE, ball->y()/TILE_SIZE ); // areas still free can be blacked now for ( int y=0; y<FIELD_HEIGHT; y++ ) for ( int x=0; x<FIELD_WIDTH; x++ ) { if ( m_buf[x][y]==TILE_FREE ) m_field->setGameTile( x, y, true ); } m_field->update(); m_view->repaint(); // count percent value of occupied area int p = percent(); if ( p!=m_percent ) { m_percent = p; emit newPercent( m_percent ); } } int JezzGame::percent() { int notFree = 0; for ( int y=1; y<FIELD_HEIGHT-1; y++ ) for ( int x=1; x<FIELD_WIDTH-1; x++ ) { if ( m_field->tile(x,y)!=TILE_FREE ) notFree++; } return 100 * notFree / ( (FIELD_WIDTH-1) * (FIELD_HEIGHT-1) ); } void JezzGame::fill( int x, int y ) { if ( m_buf[x][y]!=TILE_FREE) return; // go left int _x=x; for ( ; m_buf[_x][y]==TILE_FREE; _x-- ) m_buf[_x][y] = TILE_BORDER; int stopx = _x; // fill above for ( _x=x; _x>stopx; _x-- ) if ( m_buf[_x][y-1]==TILE_FREE ) fill( _x, y-1 ); // fill below for ( _x=x; _x>stopx; _x-- ) if ( m_buf[_x][y+1]==TILE_FREE ) fill( _x, y+1 ); // go right for ( _x=x+1; m_buf[_x][y]==TILE_FREE; _x++ ) m_buf[_x][y] = TILE_BORDER; stopx = _x; // fill above for ( _x=x+1; _x<stopx; _x++ ) if ( m_buf[_x][y-1]==TILE_FREE ) fill( _x, y-1 ); // fill below; for ( _x=x+1; _x<stopx; _x++ ) if ( m_buf[_x][y+1]==TILE_FREE ) fill( _x, y+1 ); } void JezzGame::ballCollision( Ball*, int, int, int tile ) { if ( tile!=TILE_BORDER && tile>TILE_FREE && tile!=TILE_WALLEND ) { // stop walls if ( (tile==TILE_WALLUP || tile==TILE_WALLLEFT) && m_wall1 ) { m_wall1->finish(); m_wall1->fill( false ); delete m_wall1; m_wall1 = 0; } if ( (tile==TILE_WALLDOWN || tile==TILE_WALLRIGHT) && m_wall2 ) { m_wall2->finish(); m_wall2->fill( false ); delete m_wall2; m_wall2 = 0; } // update view m_field->update(); m_view->repaint(); // send death msg emit died(); } } void JezzGame::buildWall( int x, int y, bool vertical ) { if ( !m_running ) return; if ( m_field->tile(x, y)==TILE_FREE ) { // check whether there is a ball at the moment QCanvasItemList cols = m_field->collisions( QRect(x*TILE_SIZE, y*TILE_SIZE, TILE_SIZE, TILE_SIZE) ); if ( cols.count()>0 ) { //kdDebug() << "Direct collision" << endl; emit ballCollision( (Ball*)cols.first(), x, y, TILE_WALLUP ); return; } // start walls if ( !m_wall1 ) { m_wall1 = new Wall( m_field, x, y, vertical? Wall::Up : Wall::Left, vertical? TILE_WALLUP : TILE_WALLLEFT, this, "m_wall1" ); - connect( m_wall1, SIGNAL(finished(Wall *, int)), - this, SLOT(wallFinished(Wall *, int)) ); } + connect( m_wall1, SIGNAL(finished(Wall*,int)), + this, SLOT(wallFinished(Wall*,int)) ); } if ( !m_wall2 ) { m_wall2 = new Wall( m_field, x, y, vertical? Wall::Down: Wall::Right, vertical? TILE_WALLDOWN : TILE_WALLRIGHT, this, "m_wall2" ); - connect( m_wall2, SIGNAL(finished(Wall *, int)), - this, SLOT(wallFinished(Wall *, int)) ); + connect( m_wall2, SIGNAL(finished(Wall*,int)), + this, SLOT(wallFinished(Wall*,int)) ); } } } void JezzGame::wallFinished( Wall *wall, int tile ) { if ( tile==TILE_WALLEND ) { if ( m_wall1 ) { m_wall1->fill( false ); delete m_wall1; m_wall1 = 0; } if ( m_wall2 ) { m_wall2->fill( false ); delete m_wall2; m_wall2 = 0; } } else { if ( m_wall1==wall && m_wall1 ) { m_wall1->fill( true ); delete m_wall1; m_wall1 = 0; } if ( m_wall2==wall && m_wall2 ) { m_wall2->fill( true ); delete m_wall2; m_wall2 = 0; } } m_field->update(); m_view->repaint(); makeBlack(); } void JezzGame::tick() { if ( m_running ) { if ( m_field ) m_field->advance(); if ( m_wall1 ) m_wall1->advance(); if ( m_wall2 ) m_wall2->advance(); } else { for ( Ball *ball=m_balls.first(); ball!=0; ball=m_balls.next() ) ball->update(); if ( m_field ) m_field->update(); if ( m_wall1 ) m_wall1->update(); if ( m_wall2 ) m_wall2->update(); } } void JezzGame::changeCursor() { arrow->changeDirection(); m_view->changeCursor(); } diff --git a/noncore/games/buzzword/buzzword.cpp b/noncore/games/buzzword/buzzword.cpp index 13eb481..b7f2573 100644 --- a/noncore/games/buzzword/buzzword.cpp +++ b/noncore/games/buzzword/buzzword.cpp @@ -1,181 +1,181 @@ /* * Copyright (C) 2002 Martin Imobersteg <imm@gmx.ch> * * 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,Life or (at your option) any later version. * * This program 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 program; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <qlayout.h> #include <qmainwindow.h> #include <qlabel.h> #include <qgrid.h> #include <qcolor.h> #include <qbutton.h> #include <qfile.h> #include <qtextstream.h> #include <qstringlist.h> #include <qmessagebox.h> #include <qdir.h> #include <math.h> #include <stdlib.h> #include <qpe/qpeapplication.h> #include "buzzword.h" BuzzLabel::BuzzLabel( QWidget *parent, const char *name ) : QLabel( parent, name ) { } void BuzzLabel::mousePressEvent(QMouseEvent *e) { if(e->button() == LeftButton) { emit clicked(); } } BuzzItem::BuzzItem( int row, int column, QString text, QWidget *parent, const char *name ) : QVBox( parent, name ), _row(row), _column(column) { setFrameStyle( QFrame::Panel | QFrame::Raised ); setLineWidth( 1 ); label = new BuzzLabel(this, "label"); label->setText(text); label->setAlignment( int( QLabel::AlignCenter ) ); connect( label, SIGNAL(clicked()), this, SLOT(flip()) ); } void BuzzItem::flip() { setLineWidth( 1 ); label->setBackgroundColor(label->colorGroup().highlight()); emit clicked(_row, _column); } BuzzWord::BuzzWord(QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { setCaption(tr("buZzword")); menu = menuBar(); game = new QPopupMenu; game->insertItem(tr("&New game"), this, SLOT(newGame()), Key_N ); menu->insertItem( tr("&Game"), game ); gridVal = 4; grid = NULL; gameOver = false; newGame(); } void BuzzWord::drawGrid() { QStringList l; QString path = QPEApplication::qpeDir()+"share/buzzword/"; QFile f( path + "buzzwords" ); if ( !f.open( IO_ReadOnly ) ) return; QTextStream t( &f ); while (!t.atEnd()) { l << t.readLine(); } f.close(); grid = new QGrid(gridVal, this); // grid->setFixedSize( 480, 480 ); for( int c = 0 ; c < gridVal ; c++ ) { for( int r = 0 ; r < gridVal ; r++ ) { uint pos = rand() % l. count(); QString word = QStringList::split(" ", l[pos]).join("\n"); BuzzItem* bi = new BuzzItem( c, r, word, grid ); - connect( bi, SIGNAL(clicked(int, int)), this, SLOT(clicked(int,int)) ); + connect( bi, SIGNAL(clicked(int,int)), this, SLOT(clicked(int,int)) ); map[c][r] = 0; l.remove( l.at( pos )); } } } void BuzzWord::clicked(int row, int column) { if ( ! gameOver ) { int rowTotal = 0; int columnTotal = 0; map[column][row] = 1; for( int c = 0 ; c < gridVal ; c++ ) { for( int r = 0 ; r < gridVal ; r++ ) { if ( map[c][r] == 1 ) rowTotal++; if ( rowTotal == 4 ) { bingo(); } } rowTotal = 0; } for( int r = 0 ; r < gridVal ; r++ ) { for( int c = 0 ; c < gridVal ; c++ ) { if ( map[c][r] == 1 ) columnTotal++; if ( columnTotal == 4 ) { bingo(); } } columnTotal = 0; } if ( map[0][0] && map[1][1] && map[2][2] && map[3][3] ) bingo(); if ( map[0][3] && map[1][2] && map[2][1] && map[3][0] ) bingo(); } } void BuzzWord::bingo() { gameOver = true; QMessageBox::information( this, "BUZZWORD", tr("<h1><b>BINGO !</b></h1>")); } void BuzzWord::newGame() { gameOver = false; delete grid; drawGrid(); setCentralWidget(grid); } diff --git a/noncore/games/kpacman/kpacman.cpp b/noncore/games/kpacman/kpacman.cpp index be2e46d..9820e5a 100644 --- a/noncore/games/kpacman/kpacman.cpp +++ b/noncore/games/kpacman/kpacman.cpp @@ -1,363 +1,363 @@ #include "portable.h" #if defined( KDE2_PORT ) #include <kpacman.h> #include <kpacman.moc> #include <kcolordlg.h> #elif defined( QPE_PORT ) #include <qmenubar.h> #include <qpe/config.h> #include <qapplication.h> #include "kpacman.h" #endif Kpacman::Kpacman(QWidget *parent, const char *name) : KTMainWindow(parent, name) { schemesPopup = new QList<QPopupMenu>; schemesPopup->setAutoDelete(TRUE); menu(); m_view = new QWidget( this, "m_view" ); m_view->setBackgroundColor( black ); m_layout = new QGridLayout( m_view ); m_layout->setMargin( 7 ); view = new KpacmanWidget( this, QString(name)+"widget"); m_layout->addWidget( view, 0, 0 ); setCaption( tr("KPacman") ); view->referee->setFocus(); - connect(view->referee, SIGNAL(setScore(int, int)), - view->score, SLOT(setScore(int, int))); + connect(view->referee, SIGNAL(setScore(int,int)), + view->score, SLOT(setScore(int,int))); connect(view->referee, SIGNAL(setPoints(int)), view->score, SLOT(set(int))); connect(view->referee, SIGNAL(setLifes(int)), view->status, SLOT(setLifes(int))); connect(view->referee, SIGNAL(setLevel(int)), view->status, SLOT(setLevel(int))); connect(view->referee, SIGNAL(forcedHallOfFame(bool)), this, SLOT(forcedHallOfFame(bool))); connect(view->referee, SIGNAL(togglePaused()), this, SLOT(togglePaused())); connect(view->referee, SIGNAL(toggleNew()), this, SLOT(toggleNew())); connect(view->score, SIGNAL(toggleNew()), this, SLOT(toggleNew())); connect(view->score, SIGNAL(forcedHallOfFame(bool)), this, SLOT(forcedHallOfFame(bool))); APP_CONFIG_BEGIN( cfg ); focusOutPause = !cfg->readBoolEntry("FocusOutPause", TRUE); focusInContinue = !cfg->readBoolEntry("FocusInContinue", TRUE); hideMouseCursor = !cfg->readBoolEntry("HideMouseCursor", TRUE); APP_CONFIG_END( cfg ); toggleFocusOutPause(); toggleFocusInContinue(); toggleHideMouseCursor(); setCentralWidget( m_view ); } Kpacman::~Kpacman() { /* APP_CONFIG_BEGIN( cfg ); cfg->writeEntry("FocusOutPause", focusOutPause); cfg->writeEntry("FocusInContinue", focusInContinue); cfg->writeEntry("HideMouseCursor", hideMouseCursor); APP_CONFIG_END( cfg ); */ delete _menuBar; } void Kpacman::menu() { gamePopup = new QPopupMenu(); CHECK_PTR( gamePopup ); newID = gamePopup->insertItem(tr("&New"), this, SLOT(newKpacman()),Key_F2); pauseID = gamePopup->insertItem(tr("&Pause"), this, SLOT(pauseKpacman()), Key_F3); hofID = gamePopup->insertItem(tr("&Hall of fame"), this, SLOT(toggleHallOfFame()), Key_F4); gamePopup->insertSeparator(); gamePopup->insertItem(tr("&Quit"), this, SLOT(quitKpacman()), CTRL+Key_Q); gamePopup->setCheckable(TRUE); optionsPopup = new QPopupMenu(); CHECK_PTR(optionsPopup); modesPopup = new QPopupMenu(); CHECK_PTR(modesPopup); hideMouseCursorID = optionsPopup->insertItem(tr("&Hide Mousecursor"), this, SLOT(toggleHideMouseCursor()), CTRL+Key_H); optionsPopup->insertSeparator(); if (lookupSchemes() > 0) { optionsPopup->insertItem(tr("&Select graphic scheme"), modesPopup); optionsPopup->insertSeparator(); } focusOutPauseID = optionsPopup->insertItem(tr("&Pause in Background"), this, SLOT(toggleFocusOutPause())); focusInContinueID = optionsPopup->insertItem(tr("&Continue in Foreground"), this, SLOT(toggleFocusInContinue())); optionsPopup->insertSeparator(); optionsPopup->insertItem(tr("Change &keys..."), this, SLOT(confKeys())); #ifndef QPE_PORT QString aboutText = tr("@PACKAGE@ - @VERSION@\n\n" "Joerg Thoennissen (joe@dsite.de)\n\n" "A pacman game for the KDE Desktop\n\n" "The program based on the source of ksnake\n" "by Michel Filippi (mfilippi@sade.rhein-main.de).\n" "The design was strongly influenced by the pacman\n" "(c) 1980 MIDWAY MFG.CO.\n\n" "I like to thank my girlfriend Elke Krueers for\n" "the last 10 years of her friendship.\n"); aboutText.replace(QRegExp("@PACKAGE@"), PACKAGE); aboutText.replace(QRegExp("@VERSION@"), VERSION); QPopupMenu *helpPopup = helpMenu(aboutText, FALSE); #endif //_menuBar = new KMenuBar(this); //CHECK_PTR( _menuBar ); //_menuBar->insertItem(tr("&Game"), gamePopup); //_menuBar->insertItem(tr("&Options"), optionsPopup); //_menuBar->insertSeparator(); #ifndef QPE_PORT _menuBar->insertItem(tr("&Help"), helpPopup); #endif } int Kpacman::lookupSchemes() { APP_CONFIG_BEGIN( cfg ); int ModeCount = cfg->readNumEntry("ModeCount", 0); int Mode = cfg->readNumEntry("Mode", 0); int SchemeCount = cfg->readNumEntry("SchemeCount", 0); int Scheme = cfg->readNumEntry("Scheme", 0); /* if (SchemeCount == 0 || Scheme == -1) { QMessageBox::warning(this, tr("Configuration Error"), tr("There are no schemes defined,\n" "or no scheme is selected.")); APP_CONFIG_END( cfg ); return 0; } */ connect(modesPopup, SIGNAL(activated(int)), this, SLOT(schemeChecked(int))); modeID.resize(ModeCount > 0 ? ModeCount : 0); if (!schemesPopup->isEmpty()) schemesPopup->clear(); SAVE_CONFIG_GROUP( cfg, oldgroup ); QString ModeGroup; QString ModeName; for (int m = 0; m < ModeCount; m++) { ModeGroup.sprintf("Mode %d", m); cfg->setGroup(ModeGroup); ModeName = cfg->readEntry("Description", ModeGroup); QPopupMenu *p = new QPopupMenu; p->setCheckable(TRUE); connect(p, SIGNAL(activated(int)), this, SLOT(schemeChecked(int))); schemesPopup->append(p); modeID[m] = modesPopup->insertItem(ModeName, schemesPopup->at(m)); modesPopup->setItemEnabled(modeID[m], FALSE); modesPopup->setItemChecked(modeID[m], m == Mode); } schemeID.resize(SchemeCount); schemeMode.resize(SchemeCount); QString SchemeGroup; QString SchemeName; int SchemeMode; for (int i = 0; i < SchemeCount; i++) { SchemeGroup.sprintf("Scheme %d", i); cfg->setGroup(SchemeGroup); SchemeName = cfg->readEntry("Description", SchemeGroup); SchemeMode = cfg->readNumEntry("Mode", -1); schemeMode[i] = SchemeMode; if (SchemeMode == -1) { schemeID[i] = modesPopup->insertItem(SchemeName); modesPopup->setItemChecked(schemeID[i], i == Scheme); } else { schemeID[i] = schemesPopup->at(SchemeMode)->insertItem(SchemeName); schemesPopup->at(SchemeMode)-> setItemChecked(schemeID[i], i == Scheme); modesPopup->setItemEnabled(modeID[SchemeMode], TRUE); } } RESTORE_CONFIG_GROUP( cfg, oldgroup ); APP_CONFIG_END( cfg ); return SchemeCount; } void Kpacman::quitKpacman() { APP_QUIT(); } void Kpacman::newKpacman() { if (!gamePopup->isItemEnabled(hofID)) gamePopup->setItemEnabled(hofID, TRUE); if (gamePopup->isItemChecked(hofID)) toggleHallOfFame(); if (gamePopup->isItemChecked(pauseID)) pauseKpacman(); view->referee->play(); } void Kpacman::pauseKpacman() { view->referee->pause(); view->score->setPause(gamePopup->isItemChecked(pauseID)); } void Kpacman::toggleHallOfFame() { gamePopup->setItemChecked(hofID, !gamePopup->isItemChecked(hofID)); view->referee->toggleHallOfFame(); if (gamePopup->isItemChecked(hofID)) { view->referee->lower(); view->status->lower(); } else { view->status->raise(); view->referee->raise(); view->referee->setFocus(); } } /* * Disable or enable the "Hall of fame"-menuitem if the referee says so. * This is done, to disable turning off the "hall of fame"-display, in the automated * sequence of displaying the introduction, the demonstration (or playing) and the * hall of fame. * If on == TRUE then also lower the referee and the status widgets. */ void Kpacman::forcedHallOfFame(bool on) { if (!on && !gamePopup->isItemChecked(hofID)) return; gamePopup->setItemEnabled(hofID, !on); gamePopup->setItemChecked(hofID, on); view->referee->toggleHallOfFame(); if (on) { view->referee->lower(); view->status->lower(); } else { view->status->raise(); view->referee->raise(); view->referee->setFocus(); view->referee->intro(); } } void Kpacman::togglePaused() { static bool checked = FALSE; checked = !checked; gamePopup->setItemChecked( pauseID, checked ); view->score->setPause(gamePopup->isItemChecked(pauseID)); } /* * This disables the "New Game" menuitem to prevent interruptions of the current * play. */ void Kpacman::toggleNew() { gamePopup->setItemEnabled(newID, !gamePopup->isItemEnabled(newID)); } void Kpacman::toggleHideMouseCursor() { hideMouseCursor = !hideMouseCursor; optionsPopup->setItemChecked(hideMouseCursorID, hideMouseCursor); if (hideMouseCursor) view->setCursor(blankCursor); else view->setCursor(arrowCursor); } void Kpacman::toggleFocusOutPause() { focusOutPause = !focusOutPause; optionsPopup->setItemChecked(focusOutPauseID, focusOutPause); view->referee->setFocusOutPause(focusOutPause); } void Kpacman::toggleFocusInContinue() { focusInContinue = !focusInContinue; optionsPopup->setItemChecked(focusInContinueID, focusInContinue); view->referee->setFocusInContinue(focusInContinue); } void Kpacman::confKeys() { Keys *keys = new Keys(); if (keys->exec() == QDialog::Accepted) { view->referee->initKeys(); view->score->initKeys(); } delete keys; } void Kpacman::schemeChecked(int id) { int mode = 0, scheme = -1; for (uint s = 0; s < schemeID.size(); s++) { if (schemeID[s] == id) { scheme = s; mode = schemeMode[s]; } if (schemeMode[s] == -1) { modesPopup->setItemChecked(schemeID[s], schemeID[s] == id); } else { modesPopup->setItemChecked(modeID[schemeMode[s]], schemeMode[s] == mode); schemesPopup->at(schemeMode[s])->setItemChecked(schemeID[s], schemeID[s] == id); } } /* APP_CONFIG_BEGIN( cfg ); cfg->writeEntry("Scheme", scheme); cfg->writeEntry("Mode", mode); APP_CONFIG_END( cfg ); */ view->setScheme(scheme, mode); view->updateGeometry(); updateGeometry(); update(); repaint(TRUE); show(); } diff --git a/noncore/games/oyatzee/oyatzee.cpp b/noncore/games/oyatzee/oyatzee.cpp index 86318db..a55aa73 100644 --- a/noncore/games/oyatzee/oyatzee.cpp +++ b/noncore/games/oyatzee/oyatzee.cpp @@ -1,687 +1,687 @@ #include "oyatzee.h" #include <qmessagebox.h> #include <qpushbutton.h> #include <qpainter.h> #include <qlayout.h> #include <stdlib.h> OYatzee::OYatzee( QWidget *parent , const char *name, WFlags fl ) : QMainWindow( parent , name , fl ) { QWidget *thing = new QWidget( this ); setCentralWidget( thing ); setCaption( tr( "OYatzee" ) ); setPlayerNumber( 4 ); setRoundsNumber( 1 ); lastPlayerFinished = false; currentPlayer = 1; ps.append( new Player( "Carsten" ) ); ps.append( new Player( "Julia" ) ); ps.append( new Player( "Christine" ) ); ps.append( new Player( "Stephan" ) ); QVBoxLayout *vbox = new QVBoxLayout( thing ); sb = new Scoreboard( ps, thing , "sb" ); - connect( sb->pb , SIGNAL( item( int ) ), this , SLOT( slotEndRound( int ) ) ); + connect( sb->pb , SIGNAL( item(int) ), this , SLOT( slotEndRound(int) ) ); dw = new DiceWidget( thing , "dw" ); dw->setMaximumHeight( this->height()/4 ); connect( dw->rollButton, SIGNAL( clicked() ), this , SLOT( slotRollDices() ) ); vbox->addWidget( sb ); vbox->addWidget( dw ); } void OYatzee::slotEndRound( int item ) { qDebug( "Der User hat Nummer %d ausgewählt" , item ); /* * if the user clicked on Total, Bonus or Score and thus not on a * selectable item return and do nothing */ if ( item == 7 || item == 8 || item == 16 ) return; /* * check if the user can really click on that item */ if ( posibilities.find( item ) == posibilities.end() ) return; QValueListInt numbers; Dice *d = dw->diceList.first(); for ( ; d != 0 ; d = dw->diceList.next() ) { numbers.append( d->hasValue() ); } int points = 0; switch ( item ) { case Ones: points = getPoints( 1 , numbers ); break; case Twos: points = getPoints( 2 , numbers ); break; case Threes: points = getPoints( 3 , numbers ); break; case Fours: points = getPoints( 4 , numbers ); break; case Fives: points = getPoints( 5 , numbers ); break; case Sixes: points = getPoints( 6 , numbers ); break; case ThreeOfAKind: points = oakPoints; break; case FourOfAKind: points = oakPoints; break; case FullHouse: points = 25; break; case SStraight: points = 30; break; case LStraight: points = 40; break; case Yatzee: points = 50; break; case Chance: points = getPoints ( Chance , numbers ); } sb->nextRB(currentPlayer-1)->updateMap( item , points ); nextPlayer(); qDebug( "Punkte: %d" , points ); } void OYatzee::nextPlayer() { currentPlayer++; if ( currentPlayer > numOfPlayers ) { currentPlayer = 1; } ps.at(currentPlayer-1)->turn = 0; } int OYatzee::getPoints( const int num , QValueListInt l) { QValueListInt::Iterator it = l.begin(); int c = 0; if ( num != Chance ) { for ( ; it != l.end() ; ++it ) { if ( *it == num ) c++; } return c * num; } else { for ( ; it != l.end() ; ++it ) { c += *it; } return c; } } OYatzee::~OYatzee() { } void OYatzee::detectPosibilities() { posibilities.clear(); qDebug( "running detectPosibilities()" ); Dice *d = dw->diceList.first(); QValueListInt numbers; for ( ; d != 0 ; d = dw->diceList.next() ) { numbers.append( d->hasValue() ); } //the 6 numbers QValueListInt::Iterator it; for ( int i = 1 ; i < 7 ; ++i ) // check for 1-->6 { bool cont = false; it = numbers.begin(); for ( ; it != numbers.end() ; ++it ) { if ( cont ) continue; if ( numbers.find( i ) != numbers.end() ) { posibilities.append( i ); cont = true; } } } //3er, 4er, Yatzee it = numbers.begin(); int count; int temp; int countFH = 0; //for the full-house-check for ( int i = 1 ; i < 7 ; ++i ) // check for 1-->6 at least 3 times { count = 0; temp = 0; it = numbers.begin(); for ( ; it != numbers.end() ; ++it ) { if ( *it == i ) { count++; temp++; } if ( temp == 2 ) countFH = temp; } if ( count >= 3 ) { posibilities.append( 9 ); //now we check if it is a full house if ( count == 3 && countFH == 2 ) //aka Full House posibilities.append( 11 ); if ( count >= 4 ) posibilities.append( 10 ); if ( count == 5 ) //Yatzee posibilities.append( 14 ); oakPoints = count * i; } } //S-Straight if ( numbers.find( 3 ) != numbers.end() && numbers.find( 4 ) != numbers.end() ) { bool isLong = false; bool isShort = true; //L-Straight if ( numbers.find( 2 ) != numbers.end() && numbers.find( 5 ) != numbers.end() ) { isShort = true; //12345 or 23456 if ( numbers.find( 1 ) != numbers.end() || numbers.find( 6) != numbers.end() ) isLong = true; } //1234 if ( numbers.find( 1 ) != numbers.end() && numbers.find( 2 ) != numbers.end() ) isShort = true; //3456 if ( numbers.find( 5 ) != numbers.end() && numbers.find( 6 ) != numbers.end() ) isShort = true; if ( isShort ) posibilities.append( 12 ); if ( isLong ) posibilities.append( 13 ); } posibilities.append( 13 ); //Chance, well, this is allways possible displayPossibilites(); } void OYatzee::displayPossibilites() { //X for ( QValueListInt::Iterator it = posibilities.begin() ; it != posibilities.end(); ++it ) //X { //X qDebug( QString::number( *it ) ); //X switch ( *it ) //X { //X case Ones: //X qDebug( "1er" ); //X break; //X case Twos: //X qDebug( "2er" ); //X break; //X case Threes: //X qDebug( "3er" ); //X break; //X case Fours: //X qDebug( "4er" ); //X break; //X case Fives: //X qDebug( "5er" ); //X break; //X case Sixes: //X qDebug( "6er" ); //X break; //X case ThreeOfAKind: //X qDebug( "3oaK" ); //X break; //X case FourOfAKind: //X qDebug( "4oaK" ); //X break; //X case FullHouse: //X qDebug( "Full House" ); //X break; //X case SStraight: //X qDebug( "Short S" ); //X break; //X case LStraight: //X qDebug( "Long S" ); //X break; //X case Yatzee: //X qDebug( "Yatzee!" ); //X break; //X case Chance: //X qDebug( "Chance" ); //X break; //X } //X } sb->pb->setIntlist( posibilities ); sb->pb->update(); } void OYatzee::startGame() { /* * TODO */ } void OYatzee::stopGame(){} void OYatzee::setPlayerNumber( const int num ) { numOfPlayers = num; } void OYatzee::setRoundsNumber( const int num ) { numOfRounds = num; } void OYatzee::slotStartGame() { } void OYatzee::slotRollDices() { qDebug( "Roll nummer: %d" , ps.at( currentPlayer-1 )->turn ); if ( ps.at( currentPlayer-1 )->turn == 3 ) { QMessageBox::information( this, "OYatzee", tr( "Only three rolls per turn allowed." ) ); return; } Dice *d = dw->diceList.first(); for ( ; d != 0 ; d = dw->diceList.next() ) { if ( !d->isSelected ) d->roll(); } // qDebug( "Roll nummer (vorher): %d" , ps.at( currentPlayer-1 )->turn ); ps.at(currentPlayer-1)->turn++; // qDebug( "Roll nummer (nachher): %d" , ps.at( currentPlayer-1 )->turn ); detectPosibilities(); } /* * Scoreboard */ Scoreboard::Scoreboard( playerList ps, QWidget *parent, const char *name ) : QWidget( parent , name ) { ps_ = ps; pb = new Possibilityboard( this , "pb" ); createResultboards( 4 ); QHBoxLayout *hbox = new QHBoxLayout( this ); hbox->addWidget( pb ); hbox->addSpacing( 25 ); Resultboard *r = rbList.first(); for ( ; r != 0 ; r = rbList.next() ) { hbox->addWidget( r ); } } Resultboard* Scoreboard::nextRB( int currentPlayer ) { Resultboard *b; b = rbList.at( currentPlayer ); qDebug( "Anzahl: %d" , rbList.count() ); return b; } void Scoreboard::createResultboards(const int num) { Player *p = ps_.first(); for ( int i = 0 ; i < num ; ++i , p = ps_.next() ) { QString n = p->playerName; rbList.append( new Resultboard( n , this ) ); } } void Scoreboard::paintEvent( QPaintEvent * ) { //X QPainter p; //X p.begin( this ); //X //X p.drawRect( 0,0, this->width() , this->height() ); } /* * Dice */ Dice::Dice( QWidget *parent , const char *name ) : QFrame( parent , name ) { QTime t = QTime::currentTime(); // set random seed srand(t.hour()*12+t.minute()*60+t.second()*60); connect( this , SIGNAL( selected() ), this , SLOT( slotSelected() ) ); } void Dice::slotSelected() { if ( isSelected ) isSelected = false; else isSelected = true; update(); } const int Dice::hasValue() const { return Value; } void Dice::roll() { Value = rand()%6; Value += 1; update(); } void Dice::mousePressEvent( QMouseEvent* /*e*/ ) { emit selected(); } void Dice::paintEvent( QPaintEvent * ) { QPainter p; p.begin( this ); p.drawRect( 0,0, this->width() , this->height() ); if ( isSelected ) p.drawRect( 20,20, 10,10 ); paintNumber( &p ); } void Dice::paintNumber( QPainter *p ) { p->setBrush( Qt::black ); int w = this->width(); int h = this->height(); int r = this->width(); r /= 10; switch ( Value ) { case 1: p->drawEllipse( (int)( 0.5*w - r ) , (int)( 0.5*h - r ) , r , r ) ; break; case 2: p->drawEllipse( (int)( 0.3*w - r ) , (int)( 0.3*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.7*w - r ) , (int)( 0.7*h - r ) , r , r ) ; break; case 3: p->drawEllipse( (int)( 0.5*w - r ) , (int)( 0.5*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.2*w - r ) , (int)( 0.2*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.8*w - r ) , (int)( 0.8*h - r ) , r , r ) ; break; case 4: p->drawEllipse( (int)( 0.2*w - r ) , (int)( 0.2*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.8*w - r ) , (int)( 0.8*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.8*w - r ) , (int)( 0.2*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.2*w - r ) , (int)( 0.8*h - r ) , r , r ) ; break; case 5: p->drawEllipse( (int)( 0.5*w - r ) , (int)( 0.5*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.2*w - r ) , (int)( 0.2*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.8*w - r ) , (int)( 0.8*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.8*w - r ) , (int)( 0.2*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.2*w - r ) , (int)( 0.8*h - r ) , r , r ) ; break; case 6: p->drawEllipse( (int)( 0.2*w - r ) , (int)( 0.2*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.8*w - r ) , (int)( 0.8*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.8*w - r ) , (int)( 0.2*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.2*w - r ) , (int)( 0.8*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.2*w - r ) , (int)( 0.5*h - r ) , r , r ) ; p->drawEllipse( (int)( 0.8*w - r ) , (int)( 0.5*h - r ) , r , r ) ; break; } } /* * DiceWidget */ DiceWidget::DiceWidget( QWidget *parent , const char *name ) : QWidget( parent , name ) { rollButton = new QPushButton( tr( "Roll" ) , this ) ; for ( int i = 0 ; i < 5 ; i++ ) { //appending the 5 dices of the game diceList.append( new Dice( this, "wuerfel" ) ); } QHBoxLayout *hbox = new QHBoxLayout( this ); Dice *d = diceList.first(); for ( ; d != 0 ; d = diceList.next() ) { hbox->addWidget( d ); } hbox->addWidget( rollButton ); } /* * Player */ Player::Player( QString name ) { playerName = name; setupResultList(); turn = 0; } void Player::setupResultList() { for ( int i = 1 ; i < 14 ; ++i ) { pResults.append( 0 ); } } /* * TODO: muss noch genutzt werden */ void Player::updateTotalPoints( pointMap m ) { pointMap::Iterator it = m.begin(); for ( ; it != m.end() ; ++it ) { totalPoints += it.data(); } } void Player::setResults( const int cat , const int points ) { QValueListInt::Iterator it = pResults.at( cat ); *it = points; } /* * Board */ Board::Board( QWidget *parent , const char* name ) : QWidget ( parent , name ) { } void Board::mousePressEvent( QMouseEvent *e ) { emit clicked( e->pos() ); } /* * Resultboard */ Resultboard::Resultboard( QString playerName , QWidget *parent , const char* name ) : Board ( parent , name ) { pName = playerName; } void Resultboard::paintEvent( QPaintEvent* ) { QPainter p; p.begin( this ); const int cell_width = this->width(); const int cell_height = this->height()/17; pointMap::Iterator it = pMap.begin(); for ( ; it != pMap.end() ; ++it ) { int i = it.key(); qDebug( "ok: %d , %d" , i , it.data() ); p.drawText( 0, i*cell_height , cell_width , cell_height , Qt::AlignCenter , QString::number( it.data() ) ); } p.drawText( 0,0,cell_width,cell_height, Qt::AlignCenter , pName ); //Playername } void Resultboard::updateMap( int item , int points ) { pMap.insert( item , points ); update(); } /* * Possibilityboard */ Possibilityboard::Possibilityboard( QWidget *parent , const char* name ) : Board ( parent , name ) { begriffe.append( "1er" ); begriffe.append( "2er" ); begriffe.append( "3er" ); begriffe.append( "4er" ); begriffe.append( "5er" ); begriffe.append( "6er" ); begriffe.append( "Total" ); begriffe.append( "Bonus" ); begriffe.append( "3oaK" ); begriffe.append( "4oaK" ); begriffe.append( "Full House" ); begriffe.append( "Short S" ); begriffe.append( "Long S" ); begriffe.append( "Yatzee!" ); begriffe.append( "Chance" ); begriffe.append( "Score" ); - connect( this , SIGNAL( clicked( QPoint ) ), this , SLOT( slotClicked( QPoint ) ) ); + connect( this , SIGNAL( clicked(QPoint) ), this , SLOT( slotClicked(QPoint) ) ); } void Possibilityboard::slotClicked( QPoint p) { emit item( p.y()/(this->height()/17) ); } void Possibilityboard::paintEvent( QPaintEvent* ) { QPainter p; p.begin( this ); const int cell_width = this->width(); const int cell_height = this->height()/17; p.setBrush( Qt::blue ); QValueListInt::Iterator listIt = list.begin(); for ( ; listIt != list.end() ; ++listIt ) { p.drawRect( 0 , (*listIt) * cell_height , cell_width , cell_height ); } p.setBrush( Qt::black ); p.setBrush( Qt::NoBrush ); QStringList::Iterator begriffeIt = begriffe.begin(); for ( int i = 1 ; i < 18 ; ++i ) { p.drawText( 0 , i*cell_height , cell_width , cell_height , Qt::AlignCenter , *begriffeIt ); ++begriffeIt; } } void Possibilityboard::setIntlist( QValueListInt &l ) { list = l; } diff --git a/noncore/multimedia/camera/gui/mainwindow.cpp b/noncore/multimedia/camera/gui/mainwindow.cpp index 2f42049..e4e1b6c 100644 --- a/noncore/multimedia/camera/gui/mainwindow.cpp +++ b/noncore/multimedia/camera/gui/mainwindow.cpp @@ -1,486 +1,486 @@ /********************************************************************** ** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. ** ** This file is part of Opie 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. ** **********************************************************************/ #include "mainwindow.h" #include "previewwidget.h" #include "zcameraio.h" #include "imageio.h" #include "avi.h" /* OPIE */ #include <opie2/ofiledialog.h> #include <opie2/odevice.h> #include <opie2/oapplication.h> #include <opie2/oconfig.h> #include <opie2/odebug.h> #include <qpe/global.h> #include <qpe/resource.h> #include <qpe/qcopenvelope_qws.h> using namespace Opie; /* QT */ #include <qapplication.h> #include <qaction.h> #include <qvbox.h> #include <qcombobox.h> #include <qcursor.h> #include <qdatastream.h> #include <qdir.h> #include <qfile.h> #include <qimage.h> #include <qlabel.h> #include <qlineedit.h> #include <qpopupmenu.h> #include <qprogressbar.h> #include <qpushbutton.h> #include <qmessagebox.h> #include <qlayout.h> #include <qdirectpainter_qws.h> /* STD */ #include <assert.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <errno.h> #include <unistd.h> #define CAPTUREFILE "/tmp/capture.dat" #define OUTPUTFILE "/tmp/output.avi" #define OUTPUT_TO_CUSTOM 250 #define OUTPUT_TO_DOCFOLDER 251 CameraMainWindow::CameraMainWindow( QWidget * parent, const char * name, WFlags f ) :QMainWindow( parent, name, f ), _rotation( 270 ), // FIXME: get this from current settings (ODevice?) _capturing( false ), _pics( 1 ), _videos( 1 ) { #ifdef QT_NO_DEBUG if ( !ZCameraIO::instance()->isOpen() ) { QVBox* v = new QVBox( this ); v->setMargin( 10 ); QLabel* l1 = new QLabel( v ); l1->setPixmap( Resource::loadPixmap( "camera/error" ) ); QLabel* l2 = new QLabel( v ); l2->setText( "<b>Sorry. could not detect your camera :-(</b><p>" "* Is the sharpzdc_cs module loaded ?<br>" "* Is /dev/sharpzdc read/writable ?<p>" ); connect( new QPushButton( "Exit", v ), SIGNAL( clicked() ), this, SLOT( close() ) ); setCentralWidget( v ); return; } #endif init(); _rotation = 270; //TODO: grab these from the actual settings preview = new PreviewWidget( this, "camera preview widget" ); //setCentralWidget( preview ); <--- don't do this! preview->resize( QSize( 240, 288 ) ); preview->show(); // construct a System Channel to receive setRotation messages _sysChannel = new QCopChannel( "QPE/System", this ); - connect( _sysChannel, SIGNAL( received( const QCString&, const QByteArray& ) ), - this, SLOT( systemMessage( const QCString&, const QByteArray& ) ) ); + connect( _sysChannel, SIGNAL( received(const QCString&,const QByteArray&) ), + this, SLOT( systemMessage(const QCString&,const QByteArray&) ) ); connect( preview, SIGNAL( contextMenuRequested() ), this, SLOT( showContextMenu() ) ); connect( ZCameraIO::instance(), SIGNAL( shutterClicked() ), this, SLOT( shutterClicked() ) ); updateCaption(); }; CameraMainWindow::~CameraMainWindow() { // write back configuration OConfigGroupSaver cgs( oApp->config(), "General" ); cgs.config()->writeEntry( "flip", flip ); cgs.config()->writeEntry( "quality", quality ); cgs.config()->writeEntry( "zoom", zoom ); cgs.config()->writeEntry( "captureX", captureX ); cgs.config()->writeEntry( "captureY", captureY ); cgs.config()->writeEntry( "captureFormat", captureFormat ); cgs.config()->writeEntry( "outputTo", outputTo ); cgs.config()->writeEntry( "prefix", prefix ); cgs.config()->writeEntry( "appendSettings", appendSettings ); } void CameraMainWindow::init() { // get values from configuration OConfigGroupSaver cgs( oApp->config(), "General" ); flip = cgs.config()->readEntry( "flip", "A" ); quality = cgs.config()->readNumEntry( "quality", 50 ); zoom = cgs.config()->readNumEntry( "zoom", 1 ); captureX = cgs.config()->readNumEntry( "captureX", 480 ); captureY = cgs.config()->readNumEntry( "captureY", 640 ); captureFormat = cgs.config()->readEntry( "captureFormat", "JPEG" ); outputTo = cgs.config()->readEntry( "outputTo", "Documents Folder" ); prefix = cgs.config()->readEntry( "prefix", "Untitled" ); appendSettings = cgs.config()->readBoolEntry( "appendSettings", true ); // create action groups QAction* a; resog = new QActionGroup( 0, "reso", true ); resog->setToggleAction( true ); new QAction( " 64 x 48", 0, 0, resog, "64x48", true ); new QAction( "128 x 96", 0, 0, resog, "128x96", true ); new QAction( "192 x 144", 0, 0, resog, "192x144", true ); new QAction( "256 x 192", 0, 0, resog, "256x192", true ); new QAction( "320 x 240", 0, 0, resog, "320x240", true ); new QAction( "384 x 288", 0, 0, resog, "384x288", true ); new QAction( "448 x 336", 0, 0, resog, "448x336", true ); new QAction( "512 x 384", 0, 0, resog, "512x384", true ); new QAction( "576 x 432", 0, 0, resog, "576x432", true ); new QAction( "640 x 480", 0, 0, resog, "640x480", true ); a = (QAction*) resog->child( QString().sprintf( "%dx%d", captureX>captureY ? captureX:captureY, captureX>captureY ? captureY:captureX ) ); if ( a ) a->setOn( true ); else owarn << "can't set resolution" << oendl; qualityg = new QActionGroup( 0, "quality", true ); qualityg->setToggleAction( true ); new QAction( " 0 (&minimal)", 0, 0, qualityg, "0", true ); new QAction( " 25 (&low)", 0, 0, qualityg, "25", true ); new QAction( " 50 (&good)", 0, 0, qualityg, "50", true ); new QAction( " 75 (&better)", 0, 0, qualityg, "75", true ); new QAction( "100 (bes&t)", 0, 0, qualityg, "100", true ); a = (QAction*) qualityg->child( QString().sprintf( "%d", quality ) ); if ( a ) a->setOn( true ); else owarn << "can't set quality" << oendl; zoomg = new QActionGroup( 0, "zoom", true ); zoomg->setToggleAction( true ); new QAction( "x 1", 0, 0, zoomg, "1", true ); new QAction( "x 2", 0, 0, zoomg, "2", true ); a = (QAction*) zoomg->child( QString().sprintf( "%d", zoom ) ); if ( a ) a->setOn( true ); else owarn << "can't set zoom" << oendl; flipg = new QActionGroup( 0, "flip", true ); flipg->setToggleAction( true ); new QAction( "Auto (recommended)", 0, 0, flipg, "A", true ); new QAction( "0 (always off)", 0, 0, flipg, "0", true ); new QAction( "X (always horizontal)", 0, 0, flipg, "X", true ); new QAction( "Y (always vertical)", 0, 0, flipg, "Y", true ); new QAction( "* (always both)", 0, 0, flipg, "*", true ); a = (QAction*) flipg->child( QString().sprintf( "%s", (const char*) flip ) ); if ( a ) a->setOn( true ); else owarn << "can't set flip" << oendl; outputTog = new QActionGroup( 0, "output", true ); outputTog->setToggleAction( true ); new QAction( "/tmp/", 0, 0, outputTog, "/tmp/", true ); new QAction( "/mnt/card/", 0, 0, outputTog, "/mnt/card/", true ); new QAction( "/mnt/cf/", 0, 0, outputTog, "/mnt/cf/", true ); docfolder = new QAction( "Documents Folder", 0, 0, outputTog, "Documents Folder", true ); custom = new QAction( "&Custom...", 0, 0, outputTog, "custom", true ); //TODO: How to save custom!? a = (QAction*) outputTog->child( QString().sprintf( "%s", (const char*) outputTo ) ); if ( a ) a->setOn( true ); else owarn << "can't set outputTo" << oendl; outputg = new QActionGroup( 0, "output", true ); outputg->setToggleAction( true ); new QAction( "JPEG", 0, 0, outputg, "JPEG", true ); new QAction( "PNG", 0, 0, outputg, "PNG", true ); new QAction( "BMP", 0, 0, outputg, "BMP", true ); new QAction( "AVI", 0, 0, outputg, "AVI", true ); a = (QAction*) outputg->child( QString().sprintf( "%s", (const char*) captureFormat ) ); if ( a ) a->setOn( true ); else owarn << "can't set output format" << oendl; connect( resog, SIGNAL( selected(QAction*) ), this, SLOT( resoMenuItemClicked(QAction*) ) ); connect( qualityg, SIGNAL( selected(QAction*) ), this, SLOT( qualityMenuItemClicked(QAction*) ) ); connect( zoomg, SIGNAL( selected(QAction*) ), this, SLOT( zoomMenuItemClicked(QAction*) ) ); connect( flipg, SIGNAL( selected(QAction*) ), this, SLOT( flipMenuItemClicked(QAction*) ) ); connect( outputTog, SIGNAL( selected(QAction*) ), this, SLOT( outputToMenuItemClicked(QAction*) ) ); connect( outputg, SIGNAL( selected(QAction*) ), this, SLOT( outputMenuItemClicked(QAction*) ) ); } void CameraMainWindow::systemMessage( const QCString& msg, const QByteArray& data ) { int _newrotation; QDataStream stream( data, IO_ReadOnly ); odebug << "received system message: " << msg << oendl; if ( msg == "setCurrentRotation(int)" ) { stream >> _newrotation; odebug << "received setCurrentRotation(" << _newrotation << ")" << oendl; switch ( _newrotation ) { case 270: preview->resize( QSize( 240, 288 ) ); break; case 180: preview->resize( QSize( 320, 208 ) ); break; default: QMessageBox::warning( this, "opie-camera", "This rotation is not supported.\n" "Supported are 180° and 270°" ); } if ( _newrotation != _rotation ) { int tmp = captureX; captureX = captureY; captureY = tmp; _rotation = _newrotation; } updateCaption(); } } void CameraMainWindow::changeZoom( int zoom ) { int z; switch ( zoom ) { case 0: z = 128; break; case 1: z = 256; break; case 2: z = 512; break; default: assert( 0 ); break; } ZCameraIO::instance()->setCaptureFrame( 240, 160, z ); } void CameraMainWindow::showContextMenu() { QPopupMenu reso; reso.setCheckable( true ); resog->addTo( &reso ); QPopupMenu quality; quality.setCheckable( true ); qualityg->addTo( &quality ); QPopupMenu flip; flip.setCheckable( true ); flipg->addTo( &flip ); QPopupMenu zoom; zoom.setCheckable( true ); zoomg->addTo( &zoom ); QPopupMenu prefix; prefix.insertItem( "&Choose...", this, SLOT( prefixItemChoosen() ) ); int id = prefix.insertItem( "&Append Settings", this, SLOT( appendSettingsChoosen() ) ); prefix.setItemChecked( id, appendSettings ); QPopupMenu outputTo; outputTo.setCheckable( true ); outputTog->addTo( &outputTo ); QPopupMenu output; output.setCheckable( true ); outputg->addTo( &output ); QPopupMenu m( this ); m.insertItem( "&Resolution", &reso ); m.insertItem( "&Zoom", &zoom ); m.insertItem( "&Flip", &flip ); m.insertItem( "&Quality", &quality ); m.insertSeparator(); m.insertItem( "&Prefix", &prefix ); m.insertItem( "Output &To", &outputTo ); m.insertItem( "&Output As", &output ); #ifndef QT_NO_DEBUG m.insertItem( "&Debug!", this, SLOT( doSomething() ) ); #endif m.exec( QCursor::pos() ); } void CameraMainWindow::resoMenuItemClicked( QAction* a ) { switch ( _rotation ) { case 270: captureY = a->text().left(3).toInt(); captureX = a->text().right(3).toInt(); break; case 180: captureX = a->text().left(3).toInt(); captureY = a->text().right(3).toInt(); break; default: QMessageBox::warning( this, "opie-camera", "This rotation is not supported.\n" "Supported are 180° and 270°" ); } odebug << "Capture Resolution now: " << captureX << ", " << captureY << oendl; updateCaption(); } void CameraMainWindow::qualityMenuItemClicked( QAction* a ) { quality = a->text().left(3).toInt(); odebug << "Quality now: " << quality << oendl; updateCaption(); } void CameraMainWindow::zoomMenuItemClicked( QAction* a ) { zoom = QString( a->text().at(2) ).toInt(); odebug << "Zoom now: " << zoom << oendl; ZCameraIO::instance()->setZoom( zoom ); updateCaption(); } void CameraMainWindow::flipMenuItemClicked( QAction* a ) { flip = QString( a->text().at(0) ); odebug << "Flip now: " << flip << oendl; if ( flip == "A" ) ZCameraIO::instance()->setFlip( ZCameraIO::AUTOMATICFLIP ); else if ( flip == "0" ) ZCameraIO::instance()->setFlip( ZCameraIO::XNOFLIP | ZCameraIO::YNOFLIP ); else if ( flip == "X" ) ZCameraIO::instance()->setFlip( ZCameraIO::XFLIP ); else if ( flip == "Y" ) ZCameraIO::instance()->setFlip( ZCameraIO::YFLIP ); else if ( flip == "*" ) ZCameraIO::instance()->setFlip( ZCameraIO::XFLIP | ZCameraIO::YFLIP ); updateCaption(); } void CameraMainWindow::outputToMenuItemClicked( QAction* a ) { if ( a->text() == "&Custom..." ) { QMap<QString, QStringList> map; map.insert( tr("All"), QStringList() ); QStringList text; text << "text/*"; map.insert(tr("Text"), text ); text << "*"; map.insert(tr("All"), text ); QString str; str = OFileDialog::getSaveFileName( 2, "/", QString::null, map ); if ( str.isEmpty() || !QFileInfo(str).isDir() ) { docfolder->setOn( true ); outputTo = "Documents Folder"; } else { outputTo = str; } } else { outputTo = a->text(); } odebug << "Output to now: " << outputTo << oendl; } void CameraMainWindow::outputMenuItemClicked( QAction* a ) { captureFormat = a->text(); odebug << "Output format now: " << captureFormat << oendl; updateCaption(); } void CameraMainWindow::prefixItemChoosen() { QDialog* d = new QDialog( this, "dialog", true ); d->setCaption( "Enter Prefix..." ); QVBoxLayout* v = new QVBoxLayout( d ); QLineEdit* le = new QLineEdit( prefix, d ); v->addWidget( le ); le->setFixedWidth( 150 ); //FIXME: 'tis a bit dirty if ( d->exec() == QDialog::Accepted ) prefix = le->text(); odebug << "Prefix now: " << prefix << oendl; } void CameraMainWindow::appendSettingsChoosen() { appendSettings = !appendSettings; odebug << "appendSettings now: " << appendSettings << oendl; } void CameraMainWindow::shutterClicked() { if ( captureFormat != "AVI" ) // capture one photo per shutterClick { Global::statusMessage( "CAPTURING..." ); qApp->processEvents(); odebug << "Shutter has been pressed" << oendl; ODevice::inst()->playTouchSound(); performCapture( captureFormat ); } else // capture video! start with one shutter click and stop with the next { !_capturing ? startVideoCapture() : stopVideoCapture(); } } void CameraMainWindow::performCapture( const QString& format ) { QString name; if ( outputTo == "Documents Folder" ) { name.sprintf( "%s/Documents/image/%s/", (const char*) QDir::homeDirPath(), (const char*) captureFormat.lower() ); if ( !QDir( name ).exists() ) { odebug << "creating directory " << name << oendl; QString msg = "mkdir -p " + name; system( msg.latin1() ); } } else name = outputTo; name.append( prefix ); if ( appendSettings ) { name.append( QString().sprintf( "_%d_%d_q%d", captureX, captureY, quality ) ); } name.append( QString().sprintf( "-%d.%s", _pics++, (const char*) captureFormat.lower() ) ); QImage i; ZCameraIO::instance()->captureFrame( captureX, captureY, zoom, &i ); QImage im = i.convertDepth( 32 ); bool result = im.save( name, format, quality ); if ( !result ) { oerr << "imageio-Problem while writing." << oendl; diff --git a/noncore/multimedia/opieplayer2/audiowidget.cpp b/noncore/multimedia/opieplayer2/audiowidget.cpp index 870b4f3..f3eafab 100644 --- a/noncore/multimedia/opieplayer2/audiowidget.cpp +++ b/noncore/multimedia/opieplayer2/audiowidget.cpp @@ -1,326 +1,326 @@ /* This file is part of the Opie Project Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> Copyright (c) 2002 L. Potter <ljp@llornkcor.com> Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program 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 program 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 "audiowidget.h" #include "mediaplayerstate.h" #include "playlistwidget.h" #include <qpe/qpeapplication.h> namespace { const int xo = -2; // movable x offset const int yo = 22; // movable y offset const MediaWidget::SkinButtonInfo skinInfo[] = { { MediaWidget::Play, "play", MediaWidget::ToggleButton }, { MediaWidget::Stop, "stop", MediaWidget::NormalButton }, { MediaWidget::Next, "next", MediaWidget::NormalButton }, { MediaWidget::Previous, "prev", MediaWidget::NormalButton }, { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton }, { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton }, { MediaWidget::Loop, "loop", MediaWidget::ToggleButton }, { MediaWidget::PlayList, "playlist", MediaWidget::NormalButton }, { MediaWidget::Forward, "forward", MediaWidget::NormalButton }, { MediaWidget::Back, "back", MediaWidget::NormalButton } }; const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] ); void changeTextColor( QWidget * w) { QPalette p = w->palette(); p.setBrush( QColorGroup::Background, QColor( 167, 212, 167 ) ); p.setBrush( QColorGroup::Base, QColor( 167, 212, 167 ) ); w->setPalette( p ); } } AudioWidget::AudioWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name) : MediaWidget( playList, mediaPlayerState, parent, name ), songInfo( this ), slider( Qt::Horizontal, this ), time( this ), audioSliderBeingMoved( false ) { setCaption( tr("OpiePlayer") ); loadSkin(); connect( &mediaPlayerState, SIGNAL( loopingToggled(bool) ), this, SLOT( setLooping(bool) ) ); - connect( &mediaPlayerState, SIGNAL( isSeekableToggled( bool ) ), this, SLOT( setSeekable( bool ) ) ); + connect( &mediaPlayerState, SIGNAL( isSeekableToggled(bool) ), this, SLOT( setSeekable(bool) ) ); connect( this, SIGNAL( forwardClicked() ), this, SLOT( skipFor() ) ); connect( this, SIGNAL( backClicked() ), this, SLOT( skipBack() ) ); connect( this, SIGNAL( forwardReleased() ), this, SLOT( stopSkip() ) ); connect( this, SIGNAL( backReleased() ), this, SLOT( stopSkip() ) ); // Intialise state setLength( mediaPlayerState.length() ); setPosition( mediaPlayerState.position() ); setLooping( mediaPlayerState.isFullscreen() ); // setPaused( mediaPlayerState->paused() ); setPlaying( mediaPlayerState.isPlaying() ); } AudioWidget::~AudioWidget() { // mediaPlayerState->setPlaying(false); } MediaWidget::GUIInfo AudioWidget::guiInfo() { return GUIInfo( QString::null /* infix */, ::skinInfo, ::buttonCount ); } void AudioWidget::resizeEvent( QResizeEvent *e ) { int h = height(); int w = width(); songInfo.setGeometry( QRect( 2, 2, w - 4, 20 ) ); slider.setFixedWidth( w - 110 ); slider.setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); slider.setBackgroundOrigin( QWidget::ParentOrigin ); time.setGeometry( QRect( w - 85, h - 30, 70, 20 ) ); upperLeftOfButtonMask.rx() = ( w - buttonUpImage.width() ) / 2; upperLeftOfButtonMask.ry() = (( h - buttonUpImage.height() ) / 2) - 10; MediaWidget::resizeEvent( e ); } void AudioWidget::sliderPressed() { audioSliderBeingMoved = TRUE; } void AudioWidget::sliderReleased() { audioSliderBeingMoved = FALSE; if ( slider.width() == 0 ) return; long val = long((double)slider.value() * mediaPlayerState.length() / slider.width()); mediaPlayerState.setPosition( val ); } void AudioWidget::setPosition( long i ) { // qDebug("<<<<<<<<<<<<<<<<<<<<<<<<set position %d",i); updateSlider( i, mediaPlayerState.length() ); } void AudioWidget::setLength( long max ) { updateSlider( mediaPlayerState.position(), max ); } void AudioWidget::setDisplayType( MediaPlayerState::DisplayType mediaType ) { if ( mediaType == MediaPlayerState::Audio ) { // startTimer( 150 ); QPEApplication::showWidget( this ); return; } killTimers(); hide(); } void AudioWidget::loadSkin() { loadDefaultSkin( guiInfo() ); songInfo.setFocusPolicy( QWidget::NoFocus ); // changeTextColor( &songInfo ); // songInfo.setBackgroundColor( QColor( 167, 212, 167 )); // songInfo.setFrameStyle( QFrame::NoFrame); songInfo.setFrameStyle( QFrame::WinPanel | QFrame::Sunken ); // songInfo.setForegroundColor(Qt::white); slider.setFixedHeight( 20 ); slider.setMinValue( 0 ); slider.setMaxValue( 1 ); slider.setFocusPolicy( QWidget::NoFocus ); slider.setBackgroundPixmap( backgroundPixmap ); // Config cofg("qpe"); // cofg.setGroup("Appearance"); // QColor backgroundcolor = QColor( cofg.readEntry( "Background", "#E5E1D5" ) ); time.setFocusPolicy( QWidget::NoFocus ); time.setAlignment( Qt::AlignCenter ); // time.setFrame(FALSE); // changeTextColor( &time ); resizeEvent( 0 ); } void AudioWidget::setSeekable( bool isSeekable ) { if ( !isSeekable ) { qDebug("<<<<<<<<<<<<<<file is STREAMING>>>>>>>>>>>>>>>>>>>"); if( !slider.isHidden()) { slider.hide(); } disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); disconnect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); disconnect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); } else { // this stops the slider from being moved, thus // does not stop stream when it reaches the end slider.show(); qDebug( " CONNECT SET POSTION " ); connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); connect( &slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); connect( &slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); } } static QString timeAsString( long length ) { int minutes = length / 60; int seconds = length % 60; return QString("%1:%2%3").arg( minutes ).arg( seconds / 10 ).arg( seconds % 10 ); } void AudioWidget::updateSlider( long i, long max ) { time.setText( timeAsString( i ) + " / " + timeAsString( max ) ); // qDebug( timeAsString( i ) + " / " + timeAsString( max ) ) ; if ( max == 0 ) { return; } // Will flicker too much if we don't do this // Scale to something reasonable int width = slider.width(); int val = int((double)i * width / max); if ( !audioSliderBeingMoved ) { if ( slider.value() != val ) { slider.setValue( val ); } if ( slider.maxValue() != width ) { slider.setMaxValue( width ); } } } void AudioWidget::skipFor() { skipDirection = +1; startTimer( 50 ); mediaPlayerState.setPosition( mediaPlayerState.position() + 2 ); } void AudioWidget::skipBack() { skipDirection = -1; startTimer( 50 ); mediaPlayerState.setPosition( mediaPlayerState.position() - 2 ); } void AudioWidget::stopSkip() { killTimers(); } void AudioWidget::timerEvent( QTimerEvent * ) { if ( skipDirection == +1 ) { mediaPlayerState.setPosition( mediaPlayerState.position() + 2 ); } else if ( skipDirection == -1 ) { mediaPlayerState.setPosition( mediaPlayerState.position() - 2 ); } } void AudioWidget::keyReleaseEvent( QKeyEvent *e) { switch ( e->key() ) { ////////////////////////////// Zaurus keys case Key_Home: break; case Key_F9: //activity hide(); // qDebug("Audio F9"); e->accept(); break; case Key_F10: //contacts break; case Key_F11: //menu mediaPlayerState.toggleBlank(); e->accept(); break; case Key_F12: //home break; case Key_F13: //mail mediaPlayerState.toggleBlank(); e->accept(); break; case Key_Space: { e->accept(); mediaPlayerState.togglePaused(); } break; case Key_Down: // toggleButton(6); emit lessClicked(); emit lessReleased(); // toggleButton(6); e->accept(); break; case Key_Up: // toggleButton(5); emit moreClicked(); emit moreReleased(); // toggleButton(5); e->accept(); break; case Key_Right: // toggleButton(3); mediaPlayerState.setNext(); // toggleButton(3); e->accept(); break; case Key_Left: // toggleButton(4); mediaPlayerState.setPrev(); // toggleButton(4); e->accept(); break; case Key_Escape: { } break; }; } diff --git a/noncore/multimedia/opieplayer2/mediaplayer.cpp b/noncore/multimedia/opieplayer2/mediaplayer.cpp index 9f51006..1e6bc4d 100644 --- a/noncore/multimedia/opieplayer2/mediaplayer.cpp +++ b/noncore/multimedia/opieplayer2/mediaplayer.cpp @@ -1,405 +1,405 @@ #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <qpe/qcopenvelope_qws.h> #include <qfileinfo.h> #include "mediaplayer.h" #include "playlistwidget.h" #include "audiowidget.h" #include "videowidget.h" #include "volumecontrol.h" #include "lib.h" #include "mediaplayerstate.h" // for setBacklight() #include <linux/fb.h> #include <sys/file.h> #include <sys/ioctl.h> #define FBIOBLANK 0x4611 MediaPlayer::MediaPlayer( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) : QObject( parent, name ), volumeDirection( 0 ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) { m_audioUI = 0; m_videoUI = 0; m_xineControl = 0; xine = new XINE::Lib( XINE::Lib::InitializeInThread ); fd=-1;fl=-1; playList.setCaption( tr( "OpiePlayer: Initializating" ) ); qApp->processEvents(); // QPEApplication::grabKeyboard(); // EVIL connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); - connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ), this, SLOT( setPlaying( bool ) ) ); + connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( setPlaying(bool) ) ); // What is pauseCheck good for? (Simon) -// connect( &mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( pauseCheck( bool ) ) ); +// connect( &mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pauseCheck(bool) ) ); connect( &mediaPlayerState, SIGNAL( next() ), this, SLOT( next() ) ); connect( &mediaPlayerState, SIGNAL( prev() ), this, SLOT( prev() ) ); - connect( &mediaPlayerState, SIGNAL( blankToggled( bool ) ), this, SLOT ( blank( bool ) ) ); + connect( &mediaPlayerState, SIGNAL( blankToggled(bool) ), this, SLOT ( blank(bool) ) ); volControl = new VolumeControl; Config cfg( "OpiePlayer" ); cfg.setGroup("PlayList"); QString currentPlaylist = cfg.readEntry( "CurrentPlaylist", "default"); playList.setCaption( tr( "OpiePlayer: " ) + QFileInfo(currentPlaylist).baseName() ); m_skinLoader = new SkinLoader; m_skinLoader->schedule( AudioWidget::guiInfo() ); m_skinLoader->schedule( VideoWidget::guiInfo() ); m_skinLoader->start(); } MediaPlayer::~MediaPlayer() { // this shold never happen, but one never knows... if ( xine ) { xine->ensureInitialized(); delete xine; } delete m_xineControl; delete m_audioUI; delete m_videoUI; delete volControl; } void MediaPlayer::pauseCheck( bool b ) { if ( b && !mediaPlayerState.isPlaying() ) { mediaPlayerState.setPaused( FALSE ); } } void MediaPlayer::play() { mediaPlayerState.setPlaying( FALSE ); mediaPlayerState.setPlaying( TRUE ); } void MediaPlayer::setPlaying( bool play ) { if ( !play ) { return; } if ( mediaPlayerState.isPaused() ) { mediaPlayerState.setPaused( FALSE ); return; } QString tickerText, time, fileName; if ( playList.currentTab() != PlayListWidget::CurrentPlayList ) { //if playing in file list.. play in a different way // random and looping settings enabled causes problems here, // since there is no selected file in the playlist, but a selected file in the file list, // so we remember and shutoff l = mediaPlayerState.isLooping(); if(l) { mediaPlayerState.setLooping( false ); } r = mediaPlayerState.isShuffled(); mediaPlayerState.setShuffled( false ); } PlayListWidget::Entry playListEntry = playList.currentEntry(); fileName = playListEntry.name; xineControl()->play( playListEntry.file ); long seconds = mediaPlayerState.length(); time.sprintf("%li:%02i", seconds/60, (int)seconds%60 ); if( fileName.left(4) == "http" ) { fileName = QFileInfo( fileName ).baseName(); if ( xineControl()->getMetaInfo().isEmpty() ) { tickerText = tr( " File: " ) + fileName; } else { tickerText = xineControl()->getMetaInfo(); } } else { if ( xineControl()->getMetaInfo().isEmpty() ) { tickerText = tr( " File: " ) + fileName + tr( ", Length: " ) + time + " "; } else { tickerText = xineControl()->getMetaInfo() + " Length: " + time + " "; } } audioUI()->setTickerText( tickerText ); } void MediaPlayer::prev() { if( playList.currentTab() == PlayListWidget::CurrentPlayList ) { //if using the playlist if ( playList.prev() ) { play(); } else if ( mediaPlayerState.isLooping() ) { if ( playList.last() ) { play(); } } else { mediaPlayerState.setList(); } } } void MediaPlayer::next() { if(playList.currentTab() == PlayListWidget::CurrentPlayList) { //if using the playlist if ( playList.next() ) { play(); } else if ( mediaPlayerState.isLooping() ) { if ( playList.first() ) { play(); } } else { mediaPlayerState.setList(); } } else { //if playing from file list, let's just stop qDebug("<<<<<<<<<<<<<<<<<stop for filelists"); mediaPlayerState.setPlaying(false); mediaPlayerState.setDisplayType( MediaPlayerState::MediaSelection ); if(l) mediaPlayerState.setLooping(l); if(r) mediaPlayerState.setShuffled(r); } qApp->processEvents(); } void MediaPlayer::startDecreasingVolume() { volumeDirection = -1; startTimer( 100 ); volControl->decVol(2); } void MediaPlayer::startIncreasingVolume() { volumeDirection = +1; startTimer( 100 ); volControl->incVol(2); } bool drawnOnScreenDisplay = FALSE; unsigned int onScreenDisplayVolume = 0; const int yoff = 110; void MediaPlayer::stopChangingVolume() { killTimers(); // Get rid of the on-screen display stuff drawnOnScreenDisplay = FALSE; onScreenDisplayVolume = 0; int w=0; int h=0; if( !xineControl()->hasVideo() ) { w = audioUI()->width(); h = audioUI()->height(); audioUI()->repaint( ( w - 200 ) / 2, h - yoff, 200 + 9, 70, FALSE ); } else { w = videoUI()->width(); h = videoUI()->height(); videoUI()->repaint( ( w - 200 ) / 2, h - yoff, 200 + 9, 70, FALSE ); } } void MediaPlayer::timerEvent( QTimerEvent * ) { if ( volumeDirection == +1 ) { volControl->incVol( 2 ); } else if ( volumeDirection == -1 ) { volControl->decVol( 2 ); } // TODO FIXME // huh?? unsigned int v= 0; v = volControl->volume(); v = v / 10; if ( drawnOnScreenDisplay && onScreenDisplayVolume == v ) { return; } int w=0; int h=0; if( !xineControl()->hasVideo() ) { w = audioUI()->width(); h = audioUI()->height(); if ( drawnOnScreenDisplay ) { if ( onScreenDisplayVolume > v ) { audioUI()->repaint( ( w - 200 ) / 2 + v * 20 + 0, h - yoff + 40, ( onScreenDisplayVolume - v ) * 20 + 9, 30, FALSE ); } } drawnOnScreenDisplay = TRUE; onScreenDisplayVolume = v; QPainter p( audioUI() ); p.setPen( QColor( 0x10, 0xD0, 0x10 ) ); p.setBrush( QColor( 0x10, 0xD0, 0x10 ) ); QFont f; f.setPixelSize( 20 ); f.setBold( TRUE ); p.setFont( f ); p.drawText( (w - 200) / 2, h - yoff + 20, tr("Volume") ); for ( unsigned int i = 0; i < 10; i++ ) { if ( v > i ) { p.drawRect( ( w - 200 ) / 2 + i * 20 + 0, h - yoff + 40, 9, 30 ); } else { p.drawRect( ( w - 200 ) / 2 + i * 20 + 3, h - yoff + 50, 3, 10 ); } } } else { w = videoUI()->width(); h = videoUI()->height(); if ( drawnOnScreenDisplay ) { if ( onScreenDisplayVolume > v ) { videoUI()->repaint( (w - 200) / 2 + v * 20 + 0, h - yoff + 40, ( onScreenDisplayVolume - v ) * 20 + 9, 30, FALSE ); } } drawnOnScreenDisplay = TRUE; onScreenDisplayVolume = v; QPainter p( videoUI() ); p.setPen( QColor( 0x10, 0xD0, 0x10 ) ); p.setBrush( QColor( 0x10, 0xD0, 0x10 ) ); QFont f; f.setPixelSize( 20 ); f.setBold( TRUE ); p.setFont( f ); p.drawText( (w - 200) / 2, h - yoff + 20, tr( "Volume" ) ); for ( unsigned int i = 0; i < 10; i++ ) { if ( v > i ) { p.drawRect( (w - 200) / 2 + i * 20 + 0, h - yoff + 40, 9, 30 ); } else { p.drawRect( (w - 200) / 2 + i * 20 + 3, h - yoff + 50, 3, 10 ); } } } } void MediaPlayer::blank( bool b ) { fd=open("/dev/fb0",O_RDWR); #ifdef QT_QWS_SL5XXX fl= open( "/dev/fl", O_RDWR ); #endif if (fd != -1) { if ( b ) { qDebug("do blanking"); #ifdef QT_QWS_SL5XXX ioctl( fd, FBIOBLANK, 1 ); if(fl !=-1) { ioctl( fl, 2 ); ::close(fl); } #else ioctl( fd, FBIOBLANK, 3 ); #endif isBlanked = TRUE; } else { qDebug("do unblanking"); ioctl( fd, FBIOBLANK, 0); #ifdef QT_QWS_SL5XXX if(fl != -1) { ioctl( fl, 1); ::close(fl); } #endif isBlanked = FALSE; } close( fd ); } else { qDebug("<< /dev/fb0 could not be opened >>"); } } void MediaPlayer::keyReleaseEvent( QKeyEvent *e) { switch ( e->key() ) { ////////////////////////////// Zaurus keys case Key_Home: break; case Key_F9: //activity break; case Key_F10: //contacts break; case Key_F11: //menu break; case Key_F12: //home qDebug("Blank here"); // mediaPlayerState->toggleBlank(); break; case Key_F13: //mail qDebug("Blank here"); // mediaPlayerState->toggleBlank(); break; } } void MediaPlayer::cleanUp() {// this happens on closing Config cfg( "OpiePlayer" ); mediaPlayerState.writeConfig( cfg ); playList.writeDefaultPlaylist( ); // QPEApplication::grabKeyboard(); // QPEApplication::ungrabKeyboard(); } void MediaPlayer::recreateAudioAndVideoWidgets() const { delete m_skinLoader; delete m_xineControl; delete m_audioUI; delete m_videoUI; m_audioUI = new AudioWidget( playList, mediaPlayerState, 0, "audioUI" ); m_videoUI = new VideoWidget( playList, mediaPlayerState, 0, "videoUI" ); connect( m_audioUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) ); connect( m_audioUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) ); connect( m_audioUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) ); connect( m_audioUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) ); connect( m_videoUI, SIGNAL( moreClicked() ), this, SLOT( startIncreasingVolume() ) ); connect( m_videoUI, SIGNAL( lessClicked() ), this, SLOT( startDecreasingVolume() ) ); connect( m_videoUI, SIGNAL( moreReleased() ), this, SLOT( stopChangingVolume() ) ); connect( m_videoUI, SIGNAL( lessReleased() ), this, SLOT( stopChangingVolume() ) ); if ( !xine ) xine = new XINE::Lib( XINE::Lib::InitializeImmediately ); m_xineControl = new XineControl( xine, m_videoUI->vidWidget(), mediaPlayerState ); xine = 0; } AudioWidget *MediaPlayer::audioUI() const { if ( !m_audioUI ) recreateAudioAndVideoWidgets(); return m_audioUI; } VideoWidget *MediaPlayer::videoUI() const { if ( !m_videoUI ) recreateAudioAndVideoWidgets(); return m_videoUI; } XineControl *MediaPlayer::xineControl() const { if ( !m_xineControl ) recreateAudioAndVideoWidgets(); return m_xineControl; } void MediaPlayer::reloadSkins() { audioUI()->loadSkin(); videoUI()->loadSkin(); } diff --git a/noncore/multimedia/opieplayer2/mediawidget.cpp b/noncore/multimedia/opieplayer2/mediawidget.cpp index f193001..08c62a2 100644 --- a/noncore/multimedia/opieplayer2/mediawidget.cpp +++ b/noncore/multimedia/opieplayer2/mediawidget.cpp @@ -1,263 +1,263 @@ /* Copyright (C) 2002 Simon Hausmann <simon@lst.de> (C) 2002 Max Reiss <harlekin@handhelds.org> (C) 2002 L. Potter <ljp@llornkcor.com> (C) 2002 Holger Freyther <zecke@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. This program 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 program; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <assert.h> #include "mediawidget.h" #include "playlistwidget.h" #include "skin.h" MediaWidget::MediaWidget( PlayListWidget &_playList, MediaPlayerState &_mediaPlayerState, QWidget *parent, const char *name ) : QWidget( parent, name ), mediaPlayerState( _mediaPlayerState ), playList( _playList ) { - connect( &mediaPlayerState, SIGNAL( displayTypeChanged( MediaPlayerState::DisplayType ) ), - this, SLOT( setDisplayType( MediaPlayerState::DisplayType ) ) ); - connect( &mediaPlayerState, SIGNAL( lengthChanged( long ) ), - this, SLOT( setLength( long ) ) ); - connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ), - this, SLOT( setPlaying( bool ) ) ); + connect( &mediaPlayerState, SIGNAL( displayTypeChanged(MediaPlayerState::DisplayType) ), + this, SLOT( setDisplayType(MediaPlayerState::DisplayType) ) ); + connect( &mediaPlayerState, SIGNAL( lengthChanged(long) ), + this, SLOT( setLength(long) ) ); + connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), + this, SLOT( setPlaying(bool) ) ); setBackgroundMode( NoBackground ); } MediaWidget::~MediaWidget() { } void MediaWidget::setupButtons( const SkinButtonInfo *skinInfo, uint buttonCount, const Skin &skin ) { buttonMask = skin.buttonMask( skinInfo, buttonCount ); buttons.clear(); buttons.reserve( buttonCount ); for ( uint i = 0; i < buttonCount; ++i ) { Button button = setupButton( skinInfo[ i ], skin ); buttons.push_back( button ); } } MediaWidget::Button MediaWidget::setupButton( const SkinButtonInfo &buttonInfo, const Skin &skin ) { Button button; button.command = buttonInfo.command; button.type = buttonInfo.type; button.mask = skin.buttonMaskImage( buttonInfo.fileName ); return button; } void MediaWidget::loadDefaultSkin( const GUIInfo &guiInfo ) { Skin skin( guiInfo.fileNameInfix ); skin.setCachable( false ); loadSkin( guiInfo.buttonInfo, guiInfo.buttonCount, skin ); } void MediaWidget::loadSkin( const SkinButtonInfo *skinInfo, uint buttonCount, const Skin &skin ) { backgroundPixmap = skin.backgroundPixmap(); buttonUpImage = skin.buttonUpImage(); buttonDownImage = skin.buttonDownImage(); setupButtons( skinInfo, buttonCount, skin ); } void MediaWidget::closeEvent( QCloseEvent * ) { mediaPlayerState.setList(); } void MediaWidget::paintEvent( QPaintEvent *pe ) { QPainter p( this ); if ( mediaPlayerState.isFullscreen() ) { // Clear the background p.setBrush( QBrush( Qt::black ) ); return; } QPixmap buffer( size() ); QPainter bufferedPainter( &buffer ); bufferedPainter.drawTiledPixmap( rect(), backgroundPixmap, QPoint( 0, 0 ) ); paintAllButtons( bufferedPainter ); p.drawPixmap( 0, 0, buffer ); } void MediaWidget::resizeEvent( QResizeEvent *e ) { QPixmap pixUp = combineImageWithBackground( buttonUpImage, backgroundPixmap, upperLeftOfButtonMask ); QPixmap pixDn = combineImageWithBackground( buttonDownImage, backgroundPixmap, upperLeftOfButtonMask ); for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it ) { Button &button = *it; if ( button.mask.isNull() ) continue; button.pixUp = addMaskToPixmap( pixUp, button.mask ); button.pixDown = addMaskToPixmap( pixDn, button.mask ); } QWidget::resizeEvent( e ); } MediaWidget::Button *MediaWidget::buttonAt( const QPoint &position ) { if ( position.x() <= 0 || position.y() <= 0 || position.x() >= buttonMask.width() || position.y() >= buttonMask.height() ) return 0; int pixelIdx = buttonMask.pixelIndex( position.x(), position.y() ); for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it ) if ( it->command + 1 == pixelIdx ) return &( *it ); return 0; } void MediaWidget::mousePressEvent( QMouseEvent *event ) { Button *button = buttonAt( event->pos() - upperLeftOfButtonMask ); if ( !button ) { QWidget::mousePressEvent( event ); return; } switch ( button->command ) { case VolumeUp: emit moreClicked(); return; case VolumeDown: emit lessClicked(); return; case Back: emit backClicked(); return; case Forward: emit forwardClicked(); return; default: break; } } void MediaWidget::mouseReleaseEvent( QMouseEvent *event ) { Button *button = buttonAt( event->pos() - upperLeftOfButtonMask ); if ( !button ) { QWidget::mouseReleaseEvent( event ); return; } if ( button->type == ToggleButton ) toggleButton( *button ); handleCommand( button->command, button->isDown ); } void MediaWidget::makeVisible() { } void MediaWidget::handleCommand( Command command, bool buttonDown ) { switch ( command ) { case Play: mediaPlayerState.togglePaused(); return; case Stop: mediaPlayerState.setPlaying(FALSE); return; case Next: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setNext(); return; case Previous: if( playList.currentTab() == PlayListWidget::CurrentPlayList ) mediaPlayerState.setPrev(); return; case Loop: mediaPlayerState.setLooping( buttonDown ); return; case VolumeUp: emit moreReleased(); return; case VolumeDown: emit lessReleased(); return; case PlayList: mediaPlayerState.setList(); return; case Forward: emit forwardReleased(); return; case Back: emit backReleased(); return; case FullScreen: mediaPlayerState.setFullscreen( true ); makeVisible(); return; default: assert( false ); } } bool MediaWidget::isOverButton( const QPoint &position, int buttonId ) const { return ( position.x() > 0 && position.y() > 0 && position.x() < buttonMask.width() && position.y() < buttonMask.height() && buttonMask.pixelIndex( position.x(), position.y() ) == buttonId + 1 ); } void MediaWidget::paintAllButtons( QPainter &p ) { for ( ButtonVector::const_iterator it = buttons.begin(); it != buttons.end(); ++it ) paintButton( p, *it ); } void MediaWidget::paintButton( const Button &button ) { QPainter p( this ); paintButton( p, button ); } void MediaWidget::paintButton( QPainter &p, const Button &button ) { if ( button.isDown ) p.drawPixmap( upperLeftOfButtonMask, button.pixDown ); else p.drawPixmap( upperLeftOfButtonMask, button.pixUp ); } void MediaWidget::setToggleButton( Command command, bool down ) { for ( ButtonVector::iterator it = buttons.begin(); it != buttons.end(); ++it ) if ( it->command == command ) { setToggleButton( *it, down ); return; } } void MediaWidget::setToggleButton( Button &button, bool down ) { if ( down != button.isDown ) toggleButton( button ); } void MediaWidget::toggleButton( Button &button ) { button.isDown = !button.isDown; paintButton( button ); } QPixmap MediaWidget::combineImageWithBackground( const QImage &image, const QPixmap &background, const QPoint &offset ) { QPixmap pix( image.size() ); QPainter p( &pix ); p.drawTiledPixmap( pix.rect(), background, offset ); p.drawImage( 0, 0, image ); return pix; } QPixmap MediaWidget::addMaskToPixmap( const QPixmap &pix, const QBitmap &mask ) { QPixmap result( pix ); result.setMask( mask ); return result; } /* vim: et sw=4 ts=4 */ diff --git a/noncore/multimedia/opieplayer2/playlistwidget.cpp b/noncore/multimedia/opieplayer2/playlistwidget.cpp index 9a9e1ec..0a84268 100644 --- a/noncore/multimedia/opieplayer2/playlistwidget.cpp +++ b/noncore/multimedia/opieplayer2/playlistwidget.cpp @@ -1,937 +1,937 @@ /* This file is part of the Opie Project Copyright (c) 2002,2003 Max Reiss <harlekin@handhelds.org> Copyright (c) 2002 L. Potter <ljp@llornkcor.com> Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program 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 program 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 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 <qtoolbar.h> #include <opie/ofiledialog.h> #include <qmessagebox.h> #include "playlistselection.h" #include "playlistwidget.h" #include "mediaplayer.h" #include "mediaplayerstate.h" #include "inputDialog.h" #include "om3u.h" #include "playlistfileview.h" //only needed for the random play #include <assert.h> PlayListWidget::PlayListWidget(QWidget* parent, const char* name, WFlags fl ) : PlayListWidgetGui( parent, "playList" ) , currentFileListView( 0 ) { mediaPlayerState = new MediaPlayerState(0, "mediaPlayerState" ); m_mp = new MediaPlayer(*this, *mediaPlayerState, 0, "mediaPlayer"); d->tbAddToList = new ToolButton( bar, tr( "Add to Playlist" ), "opieplayer2/add_to_playlist", this , SLOT(addSelected() ) ); d->tbRemoveFromList = new ToolButton( bar, tr( "Remove from Playlist" ), "opieplayer2/remove_from_playlist", this , SLOT(removeSelected() ) ); d->tbPlay = new ToolButton( bar, tr( "Play" ), "opieplayer2/play", - this , SLOT( btnPlay( bool) ), TRUE ); + this , SLOT( btnPlay(bool) ), TRUE ); d->tbShuffle = new ToolButton( bar, tr( "Randomize" ),"opieplayer2/shuffle", - mediaPlayerState, SLOT( setShuffled( bool ) ), TRUE ); + mediaPlayerState, SLOT( setShuffled(bool) ), TRUE ); d->tbLoop = new ToolButton( bar, tr( "Loop" ), "opieplayer2/loop", - mediaPlayerState, SLOT( setLooping( bool ) ), TRUE ); + mediaPlayerState, SLOT( setLooping(bool) ), TRUE ); (void)new MenuItem( pmPlayList, tr( "Clear List" ), this, SLOT( clearList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all audio files" ), this, SLOT( addAllMusicToList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all video files" ), this, SLOT( addAllVideoToList() ) ); (void)new MenuItem( pmPlayList, tr( "Add all files" ), this, SLOT( addAllToList() ) ); pmPlayList->insertSeparator(-1); (void)new MenuItem( pmPlayList, tr( "Add File" ), this,SLOT( openFile() ) ); (void)new MenuItem( pmPlayList, tr("Add URL"), this,SLOT( openURL() ) ); pmPlayList->insertSeparator(-1); (void)new MenuItem( pmPlayList, tr( "Save Playlist" ), this, SLOT(writem3u() ) ); pmPlayList->insertSeparator(-1); (void)new MenuItem( pmPlayList, tr( "Rescan for Audio Files" ), audioView, SLOT( scanFiles() ) ); (void)new MenuItem( pmPlayList, tr( "Rescan for Video Files" ), videoView, SLOT( scanFiles() ) ); pmView->insertItem( Resource::loadPixmap("fullscreen") , tr( "Full Screen"), mediaPlayerState, SLOT( toggleFullscreen() ) ); Config cfg( "OpiePlayer" ); bool b= cfg.readBoolEntry("FullScreen", 0); mediaPlayerState->setFullscreen( b ); pmView->setItemChecked( -16, b ); (void)new ToolButton( vbox1, tr( "Move Up" ), "opieplayer2/up", d->selectedFiles, SLOT(moveSelectedUp() ) ); (void)new ToolButton( vbox1, tr( "Remove" ), "opieplayer2/cut", d->selectedFiles, SLOT(removeSelected() ) ); (void)new ToolButton( vbox1, tr( "Move Down" ), "opieplayer2/down", d->selectedFiles, SLOT(moveSelectedDown() ) ); QVBox *stretch2 = new QVBox( vbox1 ); connect( tbDeletePlaylist, ( SIGNAL( released() ) ), SLOT( deletePlaylist() ) ); - connect( pmView, SIGNAL( activated( int ) ), - this, SLOT( pmViewActivated( int ) ) ); - connect( skinsMenu, SIGNAL( activated( int ) ) , - this, SLOT( skinsMenuActivated( int ) ) ); - connect( d->selectedFiles, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int) ), - this,SLOT( playlistViewPressed( int, QListViewItem *, const QPoint&, int ) ) ); - connect( audioView, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int ) ), - this,SLOT( viewPressed( int, QListViewItem *, const QPoint&, int ) ) ); - connect( audioView, SIGNAL( returnPressed( QListViewItem *) ), - this,SLOT( playIt( QListViewItem *) ) ); - connect( audioView, SIGNAL( doubleClicked( QListViewItem *) ), - this, SLOT( addToSelection( QListViewItem *) ) ); - connect( videoView, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int) ), - this,SLOT( viewPressed( int, QListViewItem *, const QPoint&, int) ) ); - connect( videoView, SIGNAL( returnPressed( QListViewItem *) ), - this,SLOT( playIt( QListViewItem *) ) ); - connect( videoView, SIGNAL( doubleClicked( QListViewItem *) ), - this, SLOT( addToSelection( QListViewItem *) ) ); - connect( playLists, SIGNAL( fileSelected( const DocLnk &) ), - this, SLOT( loadList( const DocLnk & ) ) ); + connect( pmView, SIGNAL( activated(int) ), + this, SLOT( pmViewActivated(int) ) ); + connect( skinsMenu, SIGNAL( activated(int) ) , + this, SLOT( skinsMenuActivated(int) ) ); + connect( d->selectedFiles, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ), + this,SLOT( playlistViewPressed(int,QListViewItem*,const QPoint&,int) ) ); + connect( audioView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ), + this,SLOT( viewPressed(int,QListViewItem*,const QPoint&,int) ) ); + connect( audioView, SIGNAL( returnPressed(QListViewItem*) ), + this,SLOT( playIt(QListViewItem*) ) ); + connect( audioView, SIGNAL( doubleClicked(QListViewItem*) ), + this, SLOT( addToSelection(QListViewItem*) ) ); + connect( videoView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ), + this,SLOT( viewPressed(int,QListViewItem*,const QPoint&,int) ) ); + connect( videoView, SIGNAL( returnPressed(QListViewItem*) ), + this,SLOT( playIt(QListViewItem*) ) ); + connect( videoView, SIGNAL( doubleClicked(QListViewItem*) ), + this, SLOT( addToSelection(QListViewItem*) ) ); + connect( playLists, SIGNAL( fileSelected(const DocLnk&) ), + this, SLOT( loadList(const DocLnk&) ) ); connect( tabWidget, SIGNAL ( currentChanged(QWidget*) ), - this, SLOT( tabChanged( QWidget* ) ) ); - connect( mediaPlayerState, SIGNAL( playingToggled( bool ) ), - d->tbPlay, SLOT( setOn( bool ) ) ); - connect( mediaPlayerState, SIGNAL( loopingToggled( bool ) ), - d->tbLoop, SLOT( setOn( bool ) ) ); - connect( mediaPlayerState, SIGNAL( shuffledToggled( bool ) ), - d->tbShuffle, SLOT( setOn( bool ) ) ); - connect( d->selectedFiles, SIGNAL( doubleClicked( QListViewItem *) ), - this, SLOT( playIt( QListViewItem *) ) ); - connect ( gammaSlider, SIGNAL( valueChanged( int ) ), - mediaPlayerState, SLOT( setVideoGamma( int ) ) ); + this, SLOT( tabChanged(QWidget*) ) ); + connect( mediaPlayerState, SIGNAL( playingToggled(bool) ), + d->tbPlay, SLOT( setOn(bool) ) ); + connect( mediaPlayerState, SIGNAL( loopingToggled(bool) ), + d->tbLoop, SLOT( setOn(bool) ) ); + connect( mediaPlayerState, SIGNAL( shuffledToggled(bool) ), + d->tbShuffle, SLOT( setOn(bool) ) ); + connect( d->selectedFiles, SIGNAL( doubleClicked(QListViewItem*) ), + this, SLOT( playIt(QListViewItem*) ) ); + connect ( gammaSlider, SIGNAL( valueChanged(int) ), + mediaPlayerState, SLOT( setVideoGamma(int) ) ); connect( this, SIGNAL(skinSelected() ), m_mp, SLOT( reloadSkins() ) ); // see which skins are installed populateSkinsMenu(); initializeStates(); channel = new QCopChannel( "QPE/Application/opieplayer2", this ); - connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), - this, SLOT( qcopReceive(const QCString&, const QByteArray&)) ); + connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT( qcopReceive(const QCString&,const QByteArray&)) ); cfg.setGroup("PlayList"); QString currentPlaylist = cfg.readEntry( "CurrentPlaylist", "default"); loadList(DocLnk( currentPlaylist ) ); tabWidget->showPage( playListTab ); } PlayListWidget::~PlayListWidget() { delete d; delete m_mp; } void PlayListWidget::initializeStates() { d->tbPlay->setOn( mediaPlayerState->isPlaying() ); d->tbLoop->setOn( mediaPlayerState->isLooping() ); d->tbShuffle->setOn( mediaPlayerState->isShuffled() ); d->playListFrame->show(); } void PlayListWidget::writeDefaultPlaylist() { Config config( "OpiePlayer" ); config.setGroup( "PlayList" ); QString filename=QPEApplication::documentDir() + "/default.m3u"; QString currentString = config.readEntry( "CurrentPlaylist", filename); if( currentString == filename) { Om3u *m3uList; // qDebug("<<<<<<<<<<<<<default>>>>>>>>>>>>>>>>>>>"); if( d->selectedFiles->first() ) { m3uList = new Om3u(filename, IO_ReadWrite | IO_Truncate); do { // qDebug(d->selectedFiles->current()->file()); m3uList->add( d->selectedFiles->current()->file() ); } while ( d->selectedFiles->next() ); m3uList->write(); m3uList->close(); delete m3uList; } } } void PlayListWidget::addToSelection( const DocLnk& lnk ) { d->setDocumentUsed = FALSE; if( QFileInfo( lnk.file() ).exists() || lnk.file().left(4) == "http" ) { d->selectedFiles->addToSelection( lnk ); } // writeCurrentM3u(); } void PlayListWidget::clearList() { while ( first() ) { d->selectedFiles->removeSelected(); } Config cfg( "OpiePlayer" ); cfg.setGroup("PlayList"); cfg.writeEntry("CurrentPlaylist","default"); setCaption("OpiePlayer"); } void PlayListWidget::viewPressed( int mouse, QListViewItem *, const QPoint& , int) { switch (mouse) { case LeftButton: break; case RightButton: { QPopupMenu m; m.insertItem( tr( "Play Selected" ), this, SLOT( playSelected() )); m.insertItem( tr( "Add to Playlist" ), this, SLOT( addSelected() )); m.exec( QCursor::pos() ); } break; } } void PlayListWidget::playlistViewPressed( int mouse, QListViewItem *, const QPoint& , int ) { switch (mouse) { case LeftButton: break; case RightButton: { QPopupMenu m; m.insertItem( tr( "Play" ), this, SLOT( playSelected() )); m.insertItem( tr( "Remove" ), this, SLOT( removeSelected() )); m.exec( QCursor::pos() ); } break; } } void PlayListWidget::addAllToList() { audioView->populateView(); QListViewItemIterator audioIt( audioView ); DocLnk lnk; QString filename; // iterate through all items of the listview for ( ; audioIt.current(); ++audioIt ) { filename = audioIt.current()->text(3); lnk.setName( QFileInfo(filename).baseName() ); //sets name lnk.setFile( filename ); //sets file name d->selectedFiles->addToSelection( lnk); } videoView->populateView(); QListViewItemIterator videoIt( videoView ); for ( ; videoIt.current(); ++videoIt ) { filename = videoIt.current()->text(3); lnk.setName( QFileInfo(filename).baseName() ); //sets name lnk.setFile( filename ); //sets file name d->selectedFiles->addToSelection( lnk); } tabWidget->setCurrentPage(0); writeCurrentM3u(); d->selectedFiles->first(); } void PlayListWidget::addAllMusicToList() { audioView->populateView(); QListViewItemIterator audioIt( audioView ); DocLnk lnk; QString filename; // iterate through all items of the listview for ( ; audioIt.current(); ++audioIt ) { filename = audioIt.current()->text(3); lnk.setName( QFileInfo(filename).baseName() ); //sets name lnk.setFile( filename ); //sets file name d->selectedFiles->addToSelection( lnk); } tabWidget->setCurrentPage(0); writeCurrentM3u(); d->selectedFiles->first(); } void PlayListWidget::addAllVideoToList() { videoView->populateView(); QListViewItemIterator videoIt( videoView ); DocLnk lnk; QString filename; for ( ; videoIt.current(); ++videoIt ) { filename = videoIt.current()->text(3); lnk.setName( QFileInfo(filename).baseName() ); //sets name lnk.setFile( filename ); //sets file name d->selectedFiles->addToSelection( lnk); } tabWidget->setCurrentPage(0); writeCurrentM3u(); d->selectedFiles->first(); } void PlayListWidget::setDocument( const QString& fileref ) { // qDebug( "<<<<<<<<set document>>>>>>>>>> "+fileref ); fromSetDocument = TRUE; QFileInfo fileInfo(fileref); if ( !fileInfo.exists() ) { QMessageBox::warning( this, tr( "Invalid File" ), tr( "There was a problem in getting the file." ) ); return; } clearList(); QString extension = fileInfo.extension(false); if( extension.find( "m3u", 0, false) != -1 || extension.find( "pls", 0, false) != -1 ) { readListFromFile( fileref ); } else { clearList(); DocLnk lnk; lnk.setName( fileInfo.baseName() ); //sets name lnk.setFile( fileref ); //sets file name addToSelection( lnk ); writeCurrentM3u(); d->setDocumentUsed = TRUE; mediaPlayerState->setPlaying( FALSE ); mediaPlayerState->setPlaying( TRUE ); } } void PlayListWidget::useSelectedDocument() { d->setDocumentUsed = FALSE; } const DocLnk *PlayListWidget::current() const { // this is fugly assert( currentTab() == CurrentPlayList ); const DocLnk *lnk = d->selectedFiles->current(); if ( !lnk ) { d->selectedFiles->first(); lnk = d->selectedFiles->current(); } assert( lnk ); return lnk; } bool PlayListWidget::prev() { if ( mediaPlayerState->isShuffled() ) { const DocLnk *cur = current(); int j = 1 + (int)(97.0 * rand() / (RAND_MAX + 1.0)); for ( int i = 0; i < j; i++ ) { if ( !d->selectedFiles->next() ) d->selectedFiles->first(); } if ( cur == current() ) if ( !d->selectedFiles->next() ) { d->selectedFiles->first(); } return TRUE; } else { if ( !d->selectedFiles->prev() ) { if ( mediaPlayerState->isLooping() ) { return d->selectedFiles->last(); } else { return FALSE; } } return TRUE; } } bool PlayListWidget::next() { //qDebug("<<<<<<<<<<<<next()"); if ( mediaPlayerState->isShuffled() ) { return prev(); } else { if ( !d->selectedFiles->next() ) { if ( mediaPlayerState->isLooping() ) { return d->selectedFiles->first(); } else { return FALSE; } } return TRUE; } } bool PlayListWidget::first() { return d->selectedFiles->first(); } bool PlayListWidget::last() { return d->selectedFiles->last(); } void PlayListWidget::saveList() { writem3u(); } void PlayListWidget::loadList( const DocLnk & lnk) { QString name = lnk.name(); if( name.length()>0) { setCaption("OpiePlayer: "+name); clearList(); readListFromFile(lnk.file()); tabWidget->setCurrentPage(0); } } void PlayListWidget::addSelected() { assert( inFileListMode() ); QListViewItemIterator it( currentFileListView ); for ( ; it.current(); ++it ) if ( it.current()->isSelected() ) { QString filename = it.current()->text(3); DocLnk lnk; lnk.setName( QFileInfo( filename ).baseName() ); //sets name lnk.setFile( filename ); //sets file name d->selectedFiles->addToSelection( lnk ); } currentFileListView->clearSelection(); writeCurrentM3u(); } void PlayListWidget::removeSelected() { d->selectedFiles->removeSelected( ); writeCurrentM3u(); } void PlayListWidget::playIt( QListViewItem *it) { if(!it) return; mediaPlayerState->setPlaying(FALSE); mediaPlayerState->setPlaying(TRUE); d->selectedFiles->unSelect(); } void PlayListWidget::addToSelection( QListViewItem *it) { d->setDocumentUsed = FALSE; if(it) { if ( currentTab() == CurrentPlayList ) return; DocLnk lnk; QString filename; filename=it->text(3); lnk.setName( QFileInfo(filename).baseName() ); //sets name lnk.setFile( filename ); //sets file name d->selectedFiles->addToSelection( lnk); writeCurrentM3u(); // tabWidget->setCurrentPage(0); } } void PlayListWidget::tabChanged(QWidget *) { d->tbPlay->setEnabled( true ); - disconnect( audioView, SIGNAL( itemsSelected( bool ) ), - d->tbPlay, SLOT( setEnabled( bool ) ) ); - disconnect( videoView, SIGNAL( itemsSelected( bool ) ), - d->tbPlay, SLOT( setEnabled( bool ) ) ); + disconnect( audioView, SIGNAL( itemsSelected(bool) ), + d->tbPlay, SLOT( setEnabled(bool) ) ); + disconnect( videoView, SIGNAL( itemsSelected(bool) ), + d->tbPlay, SLOT( setEnabled(bool) ) ); currentFileListView = 0; switch ( currentTab() ) { case CurrentPlayList: { if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); } d->tbRemoveFromList->setEnabled(TRUE); d->tbAddToList->setEnabled(FALSE); d->tbPlay->setEnabled( !d->selectedFiles->isEmpty() ); } break; case AudioFiles: { audioView->populateView(); if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); } d->tbRemoveFromList->setEnabled(FALSE); d->tbAddToList->setEnabled(TRUE); - connect( audioView, SIGNAL( itemsSelected( bool ) ), - d->tbPlay, SLOT( setEnabled( bool ) ) ); + connect( audioView, SIGNAL( itemsSelected(bool) ), + d->tbPlay, SLOT( setEnabled(bool) ) ); d->tbPlay->setEnabled( audioView->hasSelection() ); currentFileListView = audioView; } break; case VideoFiles: { videoView->populateView(); if( !tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->hide(); } d->tbRemoveFromList->setEnabled(FALSE); d->tbAddToList->setEnabled(TRUE); - connect( videoView, SIGNAL( itemsSelected( bool ) ), - d->tbPlay, SLOT( setEnabled( bool ) ) ); + connect( videoView, SIGNAL( itemsSelected(bool) ), + d->tbPlay, SLOT( setEnabled(bool) ) ); d->tbPlay->setEnabled( videoView->hasSelection() ); currentFileListView = videoView; } break; case PlayLists: { if( tbDeletePlaylist->isHidden() ) { tbDeletePlaylist->show(); } playLists->reread(); d->tbAddToList->setEnabled(FALSE); d->tbPlay->setEnabled( false ); } break; }; } void PlayListWidget::btnPlay(bool b) { // mediaPlayerState->setPlaying(false); mediaPlayerState->setPlaying(b); insanityBool=FALSE; } void PlayListWidget::deletePlaylist() { switch( QMessageBox::information( this, (tr("Remove Playlist?")), (tr("You really want to delete\nthis playlist?")), (tr("Yes")), (tr("No")), 0 )){ case 0: // Yes clicked, QFile().remove(playLists->selectedDocument().file()); QFile().remove(playLists->selectedDocument().linkFile()); playLists->reread(); break; case 1: // Cancel break; }; } void PlayListWidget::playSelected() { btnPlay( TRUE); } bool PlayListWidget::inFileListMode() const { TabType tab = currentTab(); return tab == AudioFiles || tab == VideoFiles; } void PlayListWidget::openURL() { // http://66.28.164.33:2080 // http://somafm.com/star0242.m3u QString filename, name; InputDialog *fileDlg; fileDlg = new InputDialog(this,tr("Add URL"),TRUE, 0); fileDlg->exec(); if( fileDlg->result() == 1 ) { filename = fileDlg->text(); qDebug( "Selected filename is " + filename ); // Om3u *m3uList; DocLnk lnk; Config cfg( "OpiePlayer" ); cfg.setGroup("PlayList"); if(filename.left(4) == "http") { QString m3uFile, m3uFilePath; if(filename.find(":",8,TRUE) != -1) { //found a port m3uFile = filename.left( filename.find( ":",8,TRUE)); m3uFile = m3uFile.right( 7); } else if(filename.left(4) == "http"){ m3uFile=filename; m3uFile = m3uFile.right( m3uFile.length() - 7); } else{ m3uFile=filename; } lnk.setName( filename ); //sets name lnk.setFile( filename ); //sets file name // lnk.setIcon("opieplayer2/musicfile"); d->selectedFiles->addToSelection( lnk ); writeCurrentM3u(); d->selectedFiles->setSelectedItem( lnk.name()); } else if( filename.right( 3) == "m3u" || filename.right(3) == "pls" ) { readListFromFile( filename ); } else { lnk.setName( QFileInfo(filename).baseName() ); //sets name lnk.setFile( filename ); //sets file name d->selectedFiles->addToSelection( lnk); writeCurrentM3u(); d->selectedFiles->setSelectedItem( lnk.name()); } } delete fileDlg; } void PlayListWidget::openFile() { QString filename, name; Config cfg( "OpiePlayer" ); cfg.setGroup("Dialog"); MimeTypes types; QStringList audio, video, all; audio << "audio/*"; audio << "playlist/plain"; audio << "application/ogg"; audio << "audio/x-mpegurl"; video << "video/*"; video << "playlist/plain"; all += audio; all += video; types.insert("All Media Files", all ); types.insert("Audio", audio ); types.insert("Video", video ); QString str = OFileDialog::getOpenFileName( 1, cfg.readEntry("LastDirectory",QPEApplication::documentDir()),"", types, 0 ); if(str.left(2) == "//") { str=str.right(str.length()-1); } cfg.writeEntry( "LastDirectory" ,QFileInfo( str ).dirPath() ); if( !str.isEmpty() ) { qDebug( "Selected filename is " + str ); filename = str; DocLnk lnk; if( filename.right( 3) == "m3u" || filename.right(3) == "pls" ) { readListFromFile( filename ); } else { lnk.setName( QFileInfo(filename).baseName() ); //sets name lnk.setFile( filename ); //sets file name d->selectedFiles->addToSelection( lnk ); writeCurrentM3u(); d->selectedFiles->setSelectedItem( lnk.name() ); } } } void PlayListWidget::readListFromFile( const QString &filename ) { qDebug( "read list filename " + filename ); QFileInfo fi(filename); Om3u *m3uList; QString s, name; m3uList = new Om3u( filename, IO_ReadOnly ); if(fi.extension(false).find("m3u",0,false) != -1 ) m3uList->readM3u(); else if(fi.extension(false).find("pls",0,false) != -1 ) m3uList->readPls(); DocLnk lnk; for ( QStringList::ConstIterator it = m3uList->begin(); it != m3uList->end(); ++it ) { s = *it; // qDebug(s); if(s.left(4)=="http") { lnk.setName( s ); //sets file name lnk.setIcon("opieplayer2/musicfile"); lnk.setFile( s ); //sets file name } else { //is file lnk.setName( QFileInfo(s).baseName()); if(s.left(1) != "/") { lnk.setFile( QFileInfo(filename).dirPath()+"/"+s); } else { lnk.setFile( s); } } d->selectedFiles->addToSelection( lnk ); } Config config( "OpiePlayer" ); config.setGroup( "PlayList" ); config.writeEntry("CurrentPlaylist",filename); config.write(); currentPlayList=filename; m3uList->close(); delete m3uList; d->selectedFiles->setSelectedItem( s); setCaption(tr("OpiePlayer: ")+ QFileInfo(filename).baseName()); } // writes current playlist to current m3u file */ void PlayListWidget::writeCurrentM3u() { qDebug("writing to current m3u"); Config cfg( "OpiePlayer" ); cfg.setGroup("PlayList"); QString currentPlaylist = cfg.readEntry("CurrentPlaylist","default"); Om3u *m3uList; m3uList = new Om3u( currentPlaylist, IO_ReadWrite | IO_Truncate ); if( d->selectedFiles->first()) { do { // qDebug( "add writeCurrentM3u " +d->selectedFiles->current()->file()); m3uList->add( d->selectedFiles->current()->file() ); } while ( d->selectedFiles->next() ); // qDebug( "<<<<<<<<<<<<>>>>>>>>>>>>>>>>>" ); m3uList->write(); m3uList->close(); } delete m3uList; } /* writes current playlist to m3u file */ void PlayListWidget::writem3u() { //InputDilog *fileDlg; //fileDlg = new InputDialog( this, tr( "Save m3u Playlist " ), TRUE, 0); //fileDlg->exec(); Config cfg( "OpiePlayer" ); cfg.setGroup("Dialog"); MimeTypes types; QStringList audio, video, all; audio << "audio/*"; audio << "playlist/plain"; audio << "audio/x-mpegurl"; video << "video/*"; video << "playlist/plain"; all += audio; all += video; types.insert("All Media Files", all ); types.insert("Audio", audio ); types.insert("Video", video ); QString str = OFileDialog::getOpenFileName( 1, cfg.readEntry("LastDirectory",QPEApplication::documentDir()),"", types, 0 ); if(str.left(2) == "//") str=str.right(str.length()-1); cfg.writeEntry("LastDirectory" ,QFileInfo(str).dirPath()); QString name, filename, list; Om3u *m3uList; if( !str.isEmpty() ) { name = str; // name = fileDlg->text(); // qDebug( filename ); if( name.find("/",0,true) != -1) {// assume they specify a file path filename = name; name = name.right(name.length()- name.findRev("/",-1,true) - 1 ); } else //otherwise dump it somewhere noticable filename = QPEApplication::documentDir() + "/" + name; if( filename.right( 3 ) != "m3u" ) //needs filename extension filename += ".m3u"; if( d->selectedFiles->first()) { //ramble through playlist view m3uList = new Om3u( filename, IO_ReadWrite | IO_Truncate); do { m3uList->add( d->selectedFiles->current()->file()); } while ( d->selectedFiles->next() ); // qDebug( list ); m3uList->write(); m3uList->close(); delete m3uList; //delete fileDlg; DocLnk lnk; lnk.setFile( filename); lnk.setIcon("opieplayer2/playlist2"); lnk.setName( name); //sets file name // qDebug(filename); Config config( "OpiePlayer" ); config.setGroup( "PlayList" ); config.writeEntry("CurrentPlaylist",filename); currentPlayList=filename; if(!lnk.writeLink()) { qDebug("Writing doclink did not work"); } setCaption(tr("OpiePlayer: ") + name); } } } void PlayListWidget::keyReleaseEvent( QKeyEvent *e ) { switch ( e->key() ) { ////////////////////////////// Zaurus keys case Key_F9: //activity // if(audioUI->isHidden()) // audioUI->showMaximized(); break; case Key_F10: //contacts // if( videoUI->isHidden()) // videoUI->showMaximized(); break; case Key_F11: //menu break; case Key_F12: //home // doBlank(); break; case Key_F13: //mail // doUnblank(); break; case Key_Q: //add to playlist addSelected(); break; case Key_R: //remove from playlist removeSelected(); break; // case Key_P: //play // qDebug("Play"); // playSelected(); // break; case Key_Space: // playSelected(); puh break; case Key_1: tabWidget->setCurrentPage( 0 ); break; case Key_2: tabWidget->setCurrentPage( 1 ); break; case Key_3: tabWidget->setCurrentPage( 2 ); break; case Key_4: tabWidget->setCurrentPage( 3 ); break; case Key_Down: if ( !d->selectedFiles->next() ) d->selectedFiles->first(); break; case Key_Up: if ( !d->selectedFiles->prev() ) // d->selectedFiles->last(); break; } } void PlayListWidget::pmViewActivated(int index) { // qDebug("%d", index); switch(index) { case -16: { mediaPlayerState->toggleFullscreen(); bool b=mediaPlayerState->isFullscreen(); pmView->setItemChecked( index, b); Config cfg( "OpiePlayer" ); cfg.writeEntry( "FullScreen", b ); } break; }; } void PlayListWidget::populateSkinsMenu() { int item = 0; defaultSkinIndex = 0; QString skinName; Config cfg( "OpiePlayer" ); cfg.setGroup("Options" ); QString skin = cfg.readEntry( "Skin", "default" ); diff --git a/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp b/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp index fec91ea..33fe188 100644 --- a/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp +++ b/noncore/multimedia/opieplayer2/playlistwidgetgui.cpp @@ -1,194 +1,194 @@ /* This file is part of the Opie Project Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> Copyright (c) 2002 L. Potter <ljp@llornkcor.com> Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program 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 program 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 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 <qtoolbar.h> #include <qpe/qpeapplication.h> #include <qlayout.h> #include <qmenubar.h> #include "playlistselection.h" #include "playlistwidget.h" #include "mediaplayerstate.h" #include "inputDialog.h" #include "playlistfileview.h" #include "mediaplayerstate.h" PlayListWidgetGui::PlayListWidgetGui(QWidget* parent, const char* name ) : QMainWindow( parent, name ) { d = new PlayListWidgetPrivate; d->setDocumentUsed = FALSE; setBackgroundMode( PaletteButton ); setToolBarsMovable( FALSE ); // Create Toolbar QToolBar *toolbar = new QToolBar( this ); toolbar->setHorizontalStretchable( TRUE ); // Create Menubar QMenuBar *menu = new QMenuBar( toolbar ); menu->setMargin( 0 ); bar = new QToolBar( this ); bar->setLabel( tr( "Play Operations" ) ); tbDeletePlaylist = new QPushButton( Resource::loadIconSet( "trash" ), "", bar, "close" ); tbDeletePlaylist->setFlat( TRUE ); tbDeletePlaylist->setFixedSize( 20, 20 ); tbDeletePlaylist->hide(); pmPlayList = new QPopupMenu( this ); menu->insertItem( tr( "File" ), pmPlayList ); pmView = new QPopupMenu( this ); menu->insertItem( tr( "View" ), pmView ); pmView->isCheckable(); skinsMenu = new QPopupMenu( this ); pmView->insertItem( tr( "Skins" ), skinsMenu ); skinsMenu->isCheckable(); gammaMenu = new QPopupMenu( this ); pmView->insertItem( tr( "Gamma (Video)" ), gammaMenu ); gammaSlider = new QSlider( QSlider::Vertical, gammaMenu ); gammaSlider->setRange( -40, 40 ); gammaSlider->setTickmarks( QSlider::Left ); gammaSlider->setTickInterval( 20 ); gammaSlider->setFocusPolicy( QWidget::StrongFocus ); gammaSlider->setValue( 0 ); gammaSlider->setMinimumHeight( 50 ); gammaLCD = new QLCDNumber( 3, gammaMenu ); gammaLCD-> setFrameShape ( QFrame::NoFrame ); gammaLCD-> setSegmentStyle ( QLCDNumber::Flat ); gammaMenu->insertItem( gammaSlider ); gammaMenu->insertItem( gammaLCD ); - connect( gammaSlider, SIGNAL( valueChanged( int ) ), gammaLCD, SLOT( display( int ) ) ); + connect( gammaSlider, SIGNAL( valueChanged(int) ), gammaLCD, SLOT( display(int) ) ); vbox5 = new QVBox( this ); QVBox *vbox4 = new QVBox( vbox5 ); QHBox *hbox6 = new QHBox( vbox4 ); tabWidget = new QTabWidget( hbox6, "tabWidget" ); playListTab = new QWidget( tabWidget, "PlayListTab" ); tabWidget->insertTab( playListTab, "Playlist"); QGridLayout *Playout = new QGridLayout( playListTab ); Playout->setSpacing( 2); Playout->setMargin( 2); // Add the playlist area QVBox *vbox3 = new QVBox( playListTab ); d->playListFrame = vbox3; QHBox *hbox2 = new QHBox( vbox3 ); d->selectedFiles = new PlayListSelection( hbox2 ); vbox1 = new QVBox( hbox2 ); QPEApplication::setStylusOperation( d->selectedFiles->viewport(), QPEApplication::RightOnHold ); QVBox *stretch1 = new QVBox( vbox1 ); // add stretch Playout->addMultiCellWidget( vbox3, 0, 0, 0, 1 ); QWidget *aTab; aTab = new QWidget( tabWidget, "aTab" ); QGridLayout *Alayout = new QGridLayout( aTab ); Alayout->setSpacing( 2 ); Alayout->setMargin( 2 ); // no m3u's here please audioView = new PlayListFileView( "audio/mpeg;audio/x-wav;application/ogg", "opieplayer2/musicfile", aTab, "Audioview" ); Alayout->addMultiCellWidget( audioView, 0, 0, 0, 1 ); tabWidget->insertTab( aTab, tr( "Audio" ) ); QPEApplication::setStylusOperation( audioView->viewport(), QPEApplication::RightOnHold ); QWidget *vTab; vTab = new QWidget( tabWidget, "vTab" ); QGridLayout *Vlayout = new QGridLayout( vTab ); Vlayout->setSpacing( 2 ); Vlayout->setMargin( 2 ); videoView = new PlayListFileView( "video/*", "opieplayer2/videofile", vTab, "Videoview" ); Vlayout->addMultiCellWidget( videoView, 0, 0, 0, 1 ); QPEApplication::setStylusOperation( videoView->viewport(), QPEApplication::RightOnHold ); tabWidget->insertTab( vTab, tr( "Video" ) ); //playlists list QWidget *LTab; LTab = new QWidget( tabWidget, "LTab" ); QGridLayout *Llayout = new QGridLayout( LTab ); Llayout->setSpacing( 2 ); Llayout->setMargin( 2 ); playLists = new FileSelector( "playlist/plain;audio/x-mpegurl", LTab, "fileselector" , FALSE, FALSE ); Llayout->addMultiCellWidget( playLists, 0, 0, 0, 1 ); tabWidget->insertTab( LTab, tr( "Lists" ) ); setCentralWidget( vbox5 ); } PlayListWidgetGui::~PlayListWidgetGui() { } void PlayListWidgetGui::setView( char view ) { if ( view == 'l' ) showMaximized(); else hide(); } void PlayListWidgetGui::setActiveWindow() { // qDebug("SETTING active window"); // When we get raised we need to ensure that it switches views MediaPlayerState::DisplayType origDisplayType = mediaPlayerState->displayType(); mediaPlayerState->setDisplayType( MediaPlayerState::MediaSelection ); // invalidate mediaPlayerState->setDisplayType( origDisplayType ); // now switch back } diff --git a/noncore/multimedia/opieplayer2/threadutil.cpp b/noncore/multimedia/opieplayer2/threadutil.cpp index ff38b1e..fb951b4 100644 --- a/noncore/multimedia/opieplayer2/threadutil.cpp +++ b/noncore/multimedia/opieplayer2/threadutil.cpp @@ -1,394 +1,394 @@ /* This file is part of the KDE project Copyright (C) 2002 Simon Hausmann <hausmann@kde.org> This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "threadutil.h" #include <qsocketnotifier.h> #include <pthread.h> #include <assert.h> #include <unistd.h> #include <errno.h> using namespace ThreadUtil; struct Mutex::Data { Data() { pthread_mutex_init( &mutex, 0 ); } ~Data() { pthread_mutex_destroy( &mutex ); } pthread_mutex_t mutex; }; Mutex::Mutex() : d( new Data ) { } Mutex::~Mutex() { delete d; } void Mutex::lock() { pthread_mutex_lock( &d->mutex ); } void Mutex::unlock() { pthread_mutex_unlock( &d->mutex ); } bool Mutex::tryLock() { return pthread_mutex_trylock( &d->mutex ) == 0; } bool Mutex::isLocked() { if ( !tryLock() ) return true; unlock(); return false; } struct WaitCondition::Data { Data() { int result = pthread_cond_init( &waitCondition, 0 ); assert( result == 0 ); } ~Data() { pthread_cond_destroy( &waitCondition ); } pthread_cond_t waitCondition; }; WaitCondition::WaitCondition() : d( new Data ) { } WaitCondition::~WaitCondition() { delete d; } bool WaitCondition::wait() { Mutex m; m.lock(); return wait( m ); } bool WaitCondition::wait( Mutex &mutex ) { return pthread_cond_wait( &d->waitCondition, &mutex.d->mutex ); } void WaitCondition::wakeOne() { pthread_cond_signal( &d->waitCondition ); } void WaitCondition::wakeAll() { pthread_cond_broadcast( &d->waitCondition ); } struct Thread::Data { Data() : isRunning( false ) {} pthread_t self; Mutex guard; bool isRunning; WaitCondition finishCondition; Thread *thr; void run() { thr->run(); } }; extern "C" { static void terminate_thread( void *arg ) { Thread::Data *data = ( Thread::Data* )arg; assert( data ); AutoLock locker( data->guard ); data->isRunning = false; data->finishCondition.wakeAll(); } static void *start_thread( void *arg ) { Thread::Data *data = ( Thread::Data* )arg; pthread_cleanup_push( terminate_thread, data ); data->isRunning = true; data->run(); pthread_cleanup_pop( true ); Thread::exit(); return 0; // never reached } } Thread::Thread() : d( new Data ) { d->thr = this; } Thread::~Thread() { assert( d->isRunning == false ); delete d; } void Thread::start() { AutoLock lock( d->guard ); if ( d->isRunning ) { qDebug( "ThreadUtil::Thread::start() called for running thread." ); return; } pthread_attr_t attributes; pthread_attr_init( &attributes ); pthread_attr_setscope( &attributes, PTHREAD_SCOPE_SYSTEM ); int err = pthread_create( &d->self, &attributes, start_thread, ( void* )d ); if ( err != 0 ) { qDebug( "ThreadUtil::Thread::start() : can't create thread: %s", strerror( err ) ); pthread_attr_destroy( &attributes ); return; } pthread_attr_destroy( &attributes ); } void Thread::terminate() { AutoLock lock( d->guard ); if ( !d->isRunning ) return; pthread_cancel( d->self ); } bool Thread::wait() { AutoLock lock( d->guard ); if ( !d->isRunning ) return true; return d->finishCondition.wait( d->guard ); } bool Thread::isRunning() const { AutoLock lock( d->guard ); return d->isRunning; } void Thread::exit() { pthread_exit( 0 ); } OnewayNotifier::OnewayNotifier() { int fds[ 2 ]; pipe( fds ); m_readFd = fds[ 0 ]; m_writeFd = fds[ 1 ]; m_notifier = new QSocketNotifier( m_readFd, QSocketNotifier::Read ); - connect( m_notifier, SIGNAL( activated( int ) ), + connect( m_notifier, SIGNAL( activated(int) ), this, SLOT( wakeUp() ) ); } OnewayNotifier::~OnewayNotifier() { delete m_notifier; ::close( m_readFd ); ::close( m_writeFd ); } void OnewayNotifier::notify() { const char c = 42; ::write( m_writeFd, &c, 1 ); } void OnewayNotifier::wakeUp() { char c = 0; if ( ::read( m_readFd, &c, 1 ) != 1 ) return; emit awake(); } ChannelMessage::ChannelMessage( int type ) : m_type( type ), m_isCall( false ), m_replied( false ), m_inEventHandler( false ) { } ChannelMessage::~ChannelMessage() { if ( m_guard.isLocked() ) m_guard.unlock(); } void ChannelMessage::reply() { if ( !m_isCall ) { qDebug( "ChannelMessage::reply() - can't reply oneway message!" ); return; } if ( m_inEventHandler ) { m_replied = true; return; } m_condition.wakeOne(); m_guard.unlock(); } struct Channel::Private { Private() { ownerThread = pthread_self(); } pthread_t ownerThread; }; Channel::Channel( QObject *parent, const char *name ) : QObject( parent, name ), d( new Private ) { connect( &m_notifier, SIGNAL( awake() ), this, SLOT( deliver() ) ); } Channel::~Channel() { delete d; } void Channel::send( ChannelMessage *message, SendType type ) { if ( type == WaitForReply ) { message->m_guard.lock(); message->m_isCall = true; } m_pendingMessagesGuard.lock(); m_pendingMessages << MsgEnvelope( type, message ); m_pendingMessagesGuard.unlock(); if ( d->ownerThread == pthread_self() ) { assert( type != WaitForReply ); deliver(); } else m_notifier.notify(); //QThread::postEvent( this, new QCustomEvent( QEvent::User, envelope ) ); if ( type == WaitForReply ) { message->m_condition.wait( message->m_guard ); message->m_guard.unlock(); } } void Channel::deliver() { AutoLock lock( m_pendingMessagesGuard ); while ( !m_pendingMessages.isEmpty() ) { MsgEnvelope envelope = m_pendingMessages.first(); m_pendingMessages.remove( m_pendingMessages.begin() ); m_pendingMessagesGuard.unlock(); deliverOne( envelope ); m_pendingMessagesGuard.lock(); } } void Channel::deliverOne( const MsgEnvelope &envelope ) { ChannelMessage *msg = envelope.msg; assert( msg ); if ( envelope.type == WaitForReply ) { msg->m_guard.lock(); msg->m_inEventHandler = true; } receiveMessage( msg, envelope.type ); if ( envelope.type == WaitForReply ) { msg->m_inEventHandler = false; if ( msg->m_replied ) { msg->m_condition.wakeOne(); // this is a bit tricky. we unlock only when we reply. // reply() does an unlock as well. msg->m_guard.unlock(); } } } /* vim: et sw=4 ts=4 */ diff --git a/noncore/multimedia/opieplayer2/videowidget.cpp b/noncore/multimedia/opieplayer2/videowidget.cpp index c829e03..a4d09f5 100644 --- a/noncore/multimedia/opieplayer2/videowidget.cpp +++ b/noncore/multimedia/opieplayer2/videowidget.cpp @@ -1,303 +1,303 @@ /* This file is part of the Opie Project Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> Copyright (c) 2002 L. Potter <ljp@llornkcor.com> Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program 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 program 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 "videowidget.h" #include "mediaplayerstate.h" #include "playlistwidget.h" #ifdef Q_WS_QWS # define USE_DIRECT_PAINTER # include <qdirectpainter_qws.h> # include <qgfxraster_qws.h> #endif namespace { const int xo = 2; // movable x offset const int yo = 0; // movable y offset const MediaWidget::SkinButtonInfo skinInfo[] = { { MediaWidget::Play, "play", MediaWidget::ToggleButton }, { MediaWidget::Stop, "stop", MediaWidget::NormalButton }, { MediaWidget::Next, "fwd", MediaWidget::NormalButton }, { MediaWidget::Previous, "back", MediaWidget::NormalButton }, { MediaWidget::VolumeUp, "up", MediaWidget::NormalButton }, { MediaWidget::VolumeDown, "down", MediaWidget::NormalButton }, { MediaWidget::FullScreen, "full", MediaWidget::ToggleButton } }; const uint buttonCount = sizeof( skinInfo ) / sizeof( skinInfo[ 0 ] ); } VideoWidget::VideoWidget( PlayListWidget &playList, MediaPlayerState &mediaPlayerState, QWidget* parent, const char* name ) : MediaWidget( playList, mediaPlayerState, parent, name ), scaledWidth( 0 ), scaledHeight( 0 ), videoSliderBeingMoved( false ) { setCaption( tr("OpiePlayer - Video") ); videoFrame = new XineVideoWidget ( this, "Video frame" ); - connect ( videoFrame, SIGNAL( videoResized ( const QSize & )), this, SIGNAL( videoResized ( const QSize & ))); - connect ( videoFrame, SIGNAL( clicked () ), this, SLOT ( backToNormal() ) ); + connect ( videoFrame, SIGNAL( videoResized(const QSize&)), this, SIGNAL( videoResized(const QSize&))); + connect ( videoFrame, SIGNAL( clicked() ), this, SLOT ( backToNormal() ) ); slider = 0; loadSkin(); setLength( mediaPlayerState.length() ); setPosition( mediaPlayerState.position() ); setFullscreen( mediaPlayerState.isFullscreen() ); setPlaying( mediaPlayerState.isPlaying() ); } VideoWidget::~VideoWidget() { } MediaWidget::GUIInfo VideoWidget::guiInfo() { return GUIInfo( "V" /* infix */, ::skinInfo, ::buttonCount ); } void VideoWidget::resizeEvent( QResizeEvent *e ) { int h = height(); int w = width(); //int Vh = 160; //int Vw = 220; slider->setFixedWidth( w - 20 ); slider->setGeometry( QRect( 15, h - 22, w - 90, 20 ) ); slider->setBackgroundOrigin( QWidget::ParentOrigin ); slider->setFocusPolicy( QWidget::NoFocus ); slider->setBackgroundPixmap( backgroundPixmap ); upperLeftOfButtonMask.rx() = 0;// ( imgUp->width() ) / 2; if(w>h) upperLeftOfButtonMask.ry() = 0; else upperLeftOfButtonMask.ry() = 185;//(( Vh - imgUp->height() ) / 2) - 10; MediaWidget::resizeEvent( e ); } void VideoWidget::sliderPressed() { videoSliderBeingMoved = TRUE; } void VideoWidget::sliderReleased() { videoSliderBeingMoved = FALSE; if ( slider->width() == 0 ) { return; } long val = long((double)slider->value() * mediaPlayerState.length() / slider->width()); mediaPlayerState.setPosition( val ); } void VideoWidget::setPosition( long i ) { updateSlider( i, mediaPlayerState.length() ); } void VideoWidget::setLength( long max ) { updateSlider( mediaPlayerState.position(), max ); } void VideoWidget::setDisplayType( MediaPlayerState::DisplayType displayType ) { if ( displayType == MediaPlayerState::Video ) { makeVisible(); return; } // Effectively blank the view next time we show it so it looks nicer scaledWidth = 0; scaledHeight = 0; hide(); } void VideoWidget::loadSkin() { loadDefaultSkin( guiInfo() ); delete slider; slider = new QSlider( Qt::Horizontal, this ); slider->setMinValue( 0 ); slider->setMaxValue( 1 ); slider->setBackgroundPixmap( backgroundPixmap ); //slider->setFocusPolicy( QWidget::NoFocus ); resizeEvent( 0 ); } void VideoWidget::updateSlider( long i, long max ) { // Will flicker too much if we don't do this if ( max == 0 ) { return; } int width = slider->width(); int val = int((double)i * width / max); if ( !mediaPlayerState.isFullscreen() && !videoSliderBeingMoved ) { if ( slider->value() != val ) { slider->setValue( val ); } if ( slider->maxValue() != width ) { slider->setMaxValue( width ); } } } void VideoWidget::mouseReleaseEvent( QMouseEvent *event ) { if ( mediaPlayerState.isFullscreen() ) { mediaPlayerState.setFullscreen( FALSE ); makeVisible(); } MediaWidget::mouseReleaseEvent( event ); } void VideoWidget::backToNormal() { mediaPlayerState.setFullscreen( FALSE ); makeVisible(); setToggleButton( FullScreen, false ); } void VideoWidget::makeVisible() { if ( mediaPlayerState.isFullscreen() ) { showFullScreen(); resize( qApp->desktop()->size() ); videoFrame-> setGeometry ( 0, 0, width ( ), height ( )); slider->hide(); disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); disconnect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); disconnect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); } else { showNormal(); showMaximized(); QWidget *d = QApplication::desktop(); int w = d->width(); int h = d->height(); if(w>h) { int newW=(w/2)-(246/2); //this will only work with 320x240 videoFrame->setGeometry( QRect( newW, 4, 240, 170 ) ); } else { videoFrame->setGeometry( QRect( 0, 30, 240, 170 ) ); } if ( !mediaPlayerState.isSeekable() ) { if( !slider->isHidden()) { slider->hide(); } disconnect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); disconnect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); disconnect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); disconnect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); } else { slider->show(); connect( &mediaPlayerState, SIGNAL( positionChanged(long) ),this, SLOT( setPosition(long) ) ); connect( &mediaPlayerState, SIGNAL( positionUpdated(long) ),this, SLOT( setPosition(long) ) ); connect( slider, SIGNAL( sliderPressed() ), this, SLOT( sliderPressed() ) ); connect( slider, SIGNAL( sliderReleased() ), this, SLOT( sliderReleased() ) ); } } } void VideoWidget::keyReleaseEvent( QKeyEvent *e) { switch ( e->key() ) { ////////////////////////////// Zaurus keys case Key_Home: break; case Key_F9: //activity break; case Key_F10: //contacts // hide(); break; case Key_F11: //menu break; case Key_F12: //home break; case Key_F13: //mail break; case Key_Space: { if(mediaPlayerState.isPlaying()) { mediaPlayerState.setPlaying(FALSE); } else { mediaPlayerState.setPlaying(TRUE); } } break; case Key_Down: // toggleButton(6); emit lessClicked(); emit lessReleased(); // toggleButton(6); break; case Key_Up: // toggleButton(5); emit moreClicked(); emit moreReleased(); // toggleButton(5); break; case Key_Right: mediaPlayerState.setNext(); break; case Key_Left: mediaPlayerState.setPrev(); break; case Key_Escape: break; }; } XineVideoWidget* VideoWidget::vidWidget() { return videoFrame; } void VideoWidget::setFullscreen ( bool b ) { setToggleButton( FullScreen, b ); } void VideoWidget::setPlaying( bool b) { setToggleButton( Play, b ); } diff --git a/noncore/multimedia/opieplayer2/xinecontrol.cpp b/noncore/multimedia/opieplayer2/xinecontrol.cpp index a392f4a..70f2ffd 100644 --- a/noncore/multimedia/opieplayer2/xinecontrol.cpp +++ b/noncore/multimedia/opieplayer2/xinecontrol.cpp @@ -1,272 +1,272 @@ /* This file is part of the Opie Project Copyright (c) 2002 Max Reiss <harlekin@handhelds.org> Copyright (c) 2002 L. Potter <ljp@llornkcor.com> Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program 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 program 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 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 <qtimer.h> #include <qmessagebox.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpeapplication.h> #include "xinecontrol.h" #include "mediaplayerstate.h" #include "xinevideowidget.h" XineControl::XineControl( XineVideoWidget *xineWidget, MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) : QObject( parent, name ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) { libXine = new XINE::Lib( XINE::Lib::InitializeImmediately, xineWidget ); init(); } XineControl::XineControl( XINE::Lib *xine, XineVideoWidget *xineWidget, MediaPlayerState &_mediaPlayerState, QObject *parent, const char *name ) : QObject( parent, name ), libXine( xine ), mediaPlayerState( _mediaPlayerState ), xineVideoWidget( xineWidget ) { xine->ensureInitialized(); xine->setWidget( xineWidget ); init(); } void XineControl::init() { - connect( &mediaPlayerState, SIGNAL( pausedToggled( bool ) ), this, SLOT( pause( bool ) ) ); - connect( this, SIGNAL( positionChanged( long ) ), &mediaPlayerState, SLOT( updatePosition( long ) ) ); - connect( &mediaPlayerState, SIGNAL( playingToggled( bool ) ), this, SLOT( stop( bool ) ) ); - connect( &mediaPlayerState, SIGNAL( fullscreenToggled( bool ) ), this, SLOT( setFullscreen( bool ) ) ); - connect( &mediaPlayerState, SIGNAL( positionChanged( long ) ), this, SLOT( seekTo( long ) ) ); - connect( &mediaPlayerState, SIGNAL( videoGammaChanged( int ) ), this, SLOT( setGamma( int ) ) ); + connect( &mediaPlayerState, SIGNAL( pausedToggled(bool) ), this, SLOT( pause(bool) ) ); + connect( this, SIGNAL( positionChanged(long) ), &mediaPlayerState, SLOT( updatePosition(long) ) ); + connect( &mediaPlayerState, SIGNAL( playingToggled(bool) ), this, SLOT( stop(bool) ) ); + connect( &mediaPlayerState, SIGNAL( fullscreenToggled(bool) ), this, SLOT( setFullscreen(bool) ) ); + connect( &mediaPlayerState, SIGNAL( positionChanged(long) ), this, SLOT( seekTo(long) ) ); + connect( &mediaPlayerState, SIGNAL( videoGammaChanged(int) ), this, SLOT( setGamma(int) ) ); connect( libXine, SIGNAL( stopped() ), this, SLOT( nextMedia() ) ); - connect( xineVideoWidget, SIGNAL( videoResized( const QSize & ) ), this, SLOT( videoResized ( const QSize & ) ) ); + connect( xineVideoWidget, SIGNAL( videoResized(const QSize&) ), this, SLOT( videoResized(const QSize&) ) ); disabledSuspendScreenSaver = FALSE; } XineControl::~XineControl() { #if defined(Q_WS_QWS) && !defined(QT_NO_COP) if ( disabledSuspendScreenSaver ) { disabledSuspendScreenSaver = FALSE; // Re-enable the suspend mode QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; } #endif delete libXine; } void XineControl::play( const QString& fileName ) { hasVideoChannel = FALSE; hasAudioChannel = FALSE; m_fileName = fileName; qDebug("<<FILENAME: " + fileName + ">>>>"); if ( !libXine->play( fileName, 0, 0 ) ) { QMessageBox::warning( 0l , tr( "Failure" ), getErrorCode() ); // toggle stop so the the play button is reset mediaPlayerState.setPlaying( false ); return; } mediaPlayerState.setPlaying( true ); MediaPlayerState::DisplayType displayType; if ( !libXine->hasVideo() ) { displayType = MediaPlayerState::Audio; qDebug("HAS AUDIO"); libXine->setShowVideo( false ); hasAudioChannel = TRUE; } else { displayType = MediaPlayerState::Video; qDebug("HAS VIDEO"); libXine->setShowVideo( true ); hasVideoChannel = TRUE; } // determine if slider is shown mediaPlayerState.setIsSeekable( libXine->isSeekable() ); // which gui (video / audio) mediaPlayerState.setDisplayType( displayType ); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) if ( !disabledSuspendScreenSaver ) { disabledSuspendScreenSaver = TRUE; // Stop the screen from blanking and power saving state QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << ( displayType == MediaPlayerState::Video ? QPEApplication::Disable : QPEApplication::DisableSuspend ); } #endif length(); position(); } void XineControl::nextMedia() { mediaPlayerState.setNext(); } void XineControl::setGamma( int value ) { libXine->setGamma( value ); } void XineControl::stop( bool isSet ) { if ( !isSet ) { libXine->stop(); #if defined(Q_WS_QWS) && !defined(QT_NO_COP) if ( disabledSuspendScreenSaver ) { disabledSuspendScreenSaver = FALSE; // Re-enable the suspend mode QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; } #endif } } /** * Pause playback * @isSet */ void XineControl::pause( bool isSet) { libXine->pause( isSet ); } /** * get current time in playback */ long XineControl::currentTime() { // todo: jede sekunde überprüfen m_currentTime = libXine->currentTime(); return m_currentTime; QTimer::singleShot( 1000, this, SLOT( currentTime() ) ); } /** * Set the length of the media file */ void XineControl::length() { m_length = libXine->length(); mediaPlayerState.setLength( m_length ); } /** * Reports the position the xine backend is at right now * @return long the postion in seconds */ long XineControl::position() { m_position = ( currentTime() ); mediaPlayerState.updatePosition( m_position ); long emitPos = (long)m_position; emit positionChanged( emitPos ); if( mediaPlayerState.isPlaying() ) { // needs to be stopped the media is stopped QTimer::singleShot( 1000, this, SLOT( position() ) ); } return m_position; } /** * Set videoplayback to fullscreen * @param isSet */ void XineControl::setFullscreen( bool isSet ) { libXine->showVideoFullScreen( isSet ); } QString XineControl::getMetaInfo() { QString returnString; if ( !libXine->metaInfo( 0 ).isEmpty() ) { returnString += tr( " Title: " + libXine->metaInfo( 0 ) ); } if ( !libXine->metaInfo( 1 ).isEmpty() ) { returnString += tr( " Comment: " + libXine->metaInfo( 1 ) ); } if ( !libXine->metaInfo( 2 ).isEmpty() ) { returnString += tr( " Artist: " + libXine->metaInfo( 2 ) ); } if ( !libXine->metaInfo( 3 ).isEmpty() ) { returnString += tr( " Genre: " + libXine->metaInfo( 3 ) ); } if ( !libXine->metaInfo( 4 ).isEmpty() ) { returnString += tr( " Album: " + libXine->metaInfo( 4 ) ); } if ( !libXine->metaInfo( 5 ).isEmpty() ) { returnString += tr( " Year: " + libXine->metaInfo( 5 ) ); } return returnString; } QString XineControl::getErrorCode() { int errorCode = libXine->error(); qDebug( QString("ERRORCODE: %1 ").arg(errorCode) ); if ( errorCode == 1 ) { return tr( "No input plugin found for this media type" ); } else if ( errorCode == 2 ) { return tr( "No demux plugin found for this media type" ); } else if ( errorCode == 3 ) { return tr( "Demuxing failed for this media type" ); } else if ( errorCode == 4 ) { return tr( "Malformed MRL" ); } else { return tr( "Some other error" ); } } /** * Seek to a position in the track * @param second the second to jump to */ void XineControl::seekTo( long second ) { libXine->seekTo( (int)second ); } void XineControl::videoResized ( const QSize &s ) { libXine->resize( s ); } diff --git a/noncore/multimedia/opierec/qtrec.cpp b/noncore/multimedia/opierec/qtrec.cpp index 0a6e5ae..f2035ef 100644 --- a/noncore/multimedia/opierec/qtrec.cpp +++ b/noncore/multimedia/opierec/qtrec.cpp @@ -380,802 +380,802 @@ void playIt() break; } } printf("\nplaying number %d, bytes %d, total %d\r",number, bytesWritten, total); fflush(stdout); } //end loop } else { /////////////////////////////// format = AFMT_U8; unsigned char unsigned_inbuffer[ BUFSIZE ]; //, unsigned_outbuffer[BUFSIZE]; memset( unsigned_inbuffer, 0, BUFSIZE); for(;;) { // main loop if (stopped) { break; // stop if playing was set to false return; } number = ::read( filePara.fd, unsigned_inbuffer, BUFSIZE); //data = (val >> 8) ^ 0x80; // unsigned_outbuffer = (unsigned_inbuffer >> 8) ^ 0x80; bytesWritten = write ( filePara.sd, unsigned_inbuffer, number); waveform->newSamples( (const short *)unsigned_inbuffer, bytesWritten ); total += bytesWritten; timeSlider->setValue( total); filePara.numberSamples = total; filePara.numberOfRecordedSeconds = (float)total / (float)filePara.sampleRate; // timeString.sprintf("%.2f",filePara.numberOfRecordedSeconds); // timeLabel->setText( timeString + tr(" seconds")); qApp->processEvents(); if( /*total >= filePara.numberSamples || */ bytesWritten == 0) { // if( total >= filePara.numberSamples ) { stopped = true; break; } // printf("Writing number %d, bytes %d, total %d, numberSamples %d\r",number, bytesWritten , total, filePara.numberSamples); // fflush(stdout); } } } QtRec::QtRec( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { if ( !name ) setName( "OpieRec" ); init(); initConfig(); initConnections(); renameBox = 0; // open sound device to get volumes Config hwcfg("OpieRec"); hwcfg.setGroup("Hardware"); soundDevice = new Device( this, hwcfg.readEntry( "Audio",DSPSTROUT), hwcfg.readEntry( "Mixer",DSPSTRMIXEROUT), false); // soundDevice = new Device( this, hwcfg.readEntry( "Audio","hw:0"), hwcfg.readEntry( "Mixer","hw:0"), false); // soundDevice->setDeviceFormat(AFMT_S16_LE); // soundDevice->setDeviceChannels(1); // soundDevice->setDeviceRate( 22050); getInVol(); getOutVol(); soundDevice->closeDevice( true); soundDevice->sd = -1; soundDevice = 0; wavFile = 0; if( soundDevice) delete soundDevice; initIconView(); if( autoMute) doMute( true); ListView1->setFocus(); playing = false; } QtRec::~QtRec() { } void QtRec::cleanUp() { if( !stopped) { stopped = true; endRecording(); } ListView1->clear(); if( autoMute) doMute(false); if( wavFile) delete wavFile; // if(soundDevice) delete soundDevice; } void QtRec::init() { needsStereoOut = false; QPixmap image3( ( const char** ) image3_data ); QPixmap image4( ( const char** ) image4_data ); QPixmap image6( ( const char** ) image6_data ); stopped = true; setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 2); layout->setMargin( 2); TabWidget = new QTabWidget( this, "TabWidget" ); layout->addMultiCellWidget(TabWidget, 0, 7, 0, 7); // TabWidget->setTabShape(QTabWidget::Triangular); ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** tab = new QWidget( TabWidget, "tab" ); QGridLayout *layout1 = new QGridLayout( tab); layout1->setSpacing( 2); layout1->setMargin( 2); timeSlider = new QSlider( 0,100,10,0, QSlider::Horizontal, tab, (const char *) "timeSlider" ); layout1->addMultiCellWidget( timeSlider, 1, 1, 0, 3); timeLabel = new QLabel( tab, "TimeLabel" ); layout1->addMultiCellWidget( timeLabel, 0, 0, 0, 3); playLabel2 = new QLabel(tab, "PlayLabel2" ); playLabel2->setText(tr("Play") ); playLabel2->setFixedHeight( 18); layout1->addMultiCellWidget( playLabel2, 0, 0, 4, 4); Stop_PushButton = new QPushButton( tab, "Stop_PushButton" ); layout1->addMultiCellWidget( Stop_PushButton, 1, 1, 4, 4); Stop_PushButton->setFixedSize( 22, 22); Stop_PushButton->setPixmap( image4 ); toBeginningButton = new QPushButton( tab, "Beginning_PushButton" ); layout1->addMultiCellWidget(toBeginningButton, 1, 1, 5, 5); toBeginningButton->setFixedSize( 22, 22); toBeginningButton->setPixmap( Resource::loadPixmap("fastback") ); toEndButton = new QPushButton( tab, "End_PushButton" ); layout1->addMultiCellWidget( toEndButton, 1, 1, 6, 6); toEndButton->setFixedSize( 22, 22); toEndButton->setPixmap( Resource::loadPixmap( "fastforward" ) ); QLabel *recLabel2; recLabel2 = new QLabel( tab, "recLabel2" ); recLabel2->setText(tr("Rec")); recLabel2->setFixedHeight( 18); layout1->addMultiCellWidget( recLabel2, 0, 0, 7, 7); Rec_PushButton = new QPushButton( tab, "Rec_PushButton" ); layout1->addMultiCellWidget( Rec_PushButton, 1, 1, 7, 7); Rec_PushButton->setFixedSize( 22, 22); Rec_PushButton->setPixmap( image6 ); t = new QTimer( this ); connect( t, SIGNAL( timeout() ), SLOT( timerBreak() ) ); rewindTimer = new QTimer( this ); connect( rewindTimer, SIGNAL( timeout() ), this, SLOT( rewindTimerTimeout() ) ); forwardTimer = new QTimer( this ); connect( forwardTimer, SIGNAL( timeout() ), this, SLOT( forwardTimerTimeout() ) ); deleteSoundButton = new QPushButton( tab, "deleteSoundButton" ); layout1->addMultiCellWidget( deleteSoundButton, 1, 1, 8, 8); deleteSoundButton->setText( tr( "Delete" ) ); ListView1 = new QListView( tab, "IconView1" ); layout1->addMultiCellWidget( ListView1, 2, 2, 0, 8); ListView1->addColumn( tr( "Name" ) ); ListView1->setColumnWidth( 0, 140); ListView1->setSorting( 1, false); ListView1->addColumn( tr( "Time" ) ); //in seconds ListView1->setColumnWidth( 1, 50); ListView1->addColumn( tr("Location") ); ListView1->setColumnWidth( 2, 50); ListView1->addColumn( tr("Date") ); ListView1->setColumnWidth( 3, 63); ListView1->setColumnWidthMode( 0, QListView::Manual); ListView1->setColumnAlignment( 1, QListView::AlignCenter); ListView1->setColumnAlignment( 2, QListView::AlignRight); ListView1->setColumnAlignment( 3, QListView::AlignLeft); ListView1->setAllColumnsShowFocus( true ); QPEApplication::setStylusOperation( ListView1->viewport(), QPEApplication::RightOnHold); TabWidget->insertTab( tab, tr( "Files" ) ); ///**********<<<<<<<<<<<<>>>>>>>>>>>>*************** tab_3 = new QWidget( TabWidget, "tab_3" ); QGridLayout *glayout3 = new QGridLayout( tab_3 ); glayout3->setSpacing( 2); glayout3->setMargin( 2); //////////////////////////////////// sampleGroup = new QGroupBox( tab_3, "samplegroup" ); sampleGroup->setTitle( tr( "Sample Rate" ) ); sampleGroup->setFixedSize( 95,50); sampleRateComboBox = new QComboBox( false, sampleGroup, "SampleRateComboBox" ); sampleRateComboBox->setGeometry( QRect( 10, 20, 80, 25 ) ); //#ifndef QT_QWS_EBX QString s; int z = 0; while( deviceSampleRates[z] != -1) { sampleRateComboBox->insertItem( s.setNum( deviceSampleRates[z], 10)); z++; } glayout3->addMultiCellWidget( sampleGroup, 0, 0, 0, 0); sizeGroup= new QGroupBox( tab_3, "sizeGroup" ); sizeGroup->setTitle( tr( "Limit Size" ) ); sizeGroup->setFixedSize( 80, 50); sizeLimitCombo = new QComboBox( false, sizeGroup, "sizeLimitCombo" ); sizeLimitCombo ->setGeometry( QRect( 5, 20, 70, 25 ) ); sizeLimitCombo->insertItem(tr("Unlimited")); for(int i=1;i<13; i++) { sizeLimitCombo->insertItem( QString::number( i * 5)); } glayout3->addMultiCellWidget( sizeGroup, 0, 0, 1, 1); dirGroup = new QGroupBox( tab_3, "dirGroup" ); dirGroup->setTitle( tr( "File Directory" ) ); dirGroup->setFixedSize( 130, 50); directoryComboBox = new QComboBox( false, dirGroup, "dirGroup" ); directoryComboBox->setGeometry( QRect( 10, 15, 115, 25 ) ); glayout3->addMultiCellWidget( dirGroup, 1, 1, 0, 0); bitGroup = new QGroupBox( tab_3, "bitGroup" ); bitGroup->setTitle( tr( "Bit Depth" ) ); bitGroup->setFixedSize( 65, 50); bitRateComboBox = new QComboBox( false, bitGroup, "BitRateComboBox" ); z = 0; while( deviceBitRates[z] != -1) { bitRateComboBox->insertItem( s.setNum( deviceBitRates[z], 10) ); z++; } bitRateComboBox->setGeometry( QRect( 5, 20, 50, 25 ) ); glayout3->addMultiCellWidget( bitGroup, 1, 1, 1, 1); compressionCheckBox = new QCheckBox ( tr("Wave Compression (smaller files)"), tab_3 ); autoMuteCheckBox = new QCheckBox ( tr("Auto Mute"), tab_3 ); stereoCheckBox = new QCheckBox ( tr("Stereo Channels"), tab_3 ); glayout3->addMultiCellWidget( compressionCheckBox, 2, 2, 0, 3); glayout3->addMultiCellWidget( autoMuteCheckBox, 3, 3, 0, 0); glayout3->addMultiCellWidget( stereoCheckBox, 3, 3, 1, 1); tab_5 = new QWidget( TabWidget, "tab_5" ); QHBoxLayout *Layout19a; Layout19a = new QHBoxLayout( tab_5); Layout19a->setSpacing( 2 ); Layout19a->setMargin( 0 ); Layout15 = new QVBoxLayout( this); Layout15->setSpacing( 2 ); Layout15->setMargin( 0 ); Layout15b = new QVBoxLayout( this); Layout15b->setSpacing( 2 ); Layout15b->setMargin( 0 ); TextLabel2 = new QLabel( tab_5, "InputLabel" ); TextLabel2->setText( tr( "In")); TextLabel2->setFixedWidth( 35); Layout15->addWidget( TextLabel2 ); TextLabel3 = new QLabel( tab_5, "OutputLabel" ); TextLabel3->setText( tr( "Out" ) ); Layout15b->addWidget( TextLabel3 ); InputSlider = new QSlider( -100, 0, 10, 0, QSlider::Vertical, tab_5, (const char *) "InputSlider" ); InputSlider->setTickmarks( QSlider::Both); Layout15->addWidget( InputSlider); OutputSlider = new QSlider( -100,0,10,0, QSlider::Vertical,tab_5,(const char *) "OutputSlider" ); OutputSlider->setTickmarks( QSlider::Both); Layout15b->addWidget( OutputSlider ); outMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); Layout15->addWidget( outMuteCheckBox ); inMuteCheckBox = new QCheckBox ( tr("mute"), tab_5 ); inMuteCheckBox-> setFocusPolicy ( QWidget::NoFocus ); Layout15b->addWidget( inMuteCheckBox ); Layout19a->addLayout( Layout15 ); Layout19a->addLayout( Layout15b ); fillDirectoryCombo(); TabWidget->insertTab( tab_3, tr( "Options" ) ); TabWidget->insertTab( tab_5, tr( "Volume" ) ); waveform = new Waveform( this, "waveform" ); // waveform->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)3, waveform->sizePolicy().hasHeightForWidth() ) ); waveform->setMinimumSize( QSize( 0, 50 ) ); layout->addMultiCellWidget( waveform, 8, 8, 0, 7 ); waveform->setBackgroundColor ( black ); } void QtRec::initIconView() { ListView1->clear(); Config cfg("OpieRec"); cfg.setGroup("Sounds"); QString temp; QPixmap image0( ( const char** ) image0_data ); int nFiles = cfg.readNumEntry("NumberofFiles",0); // qDebug("init number of files %d", nFiles); for(int i=1;i<= nFiles;i++) { QListViewItem * item; QString fileS, mediaLocation, fileDate, filePath; temp.sprintf( "%d",i); temp = cfg.readEntry( temp,""); //reads currentFile filePath = cfg.readEntry( temp,""); //currentFileName QFileInfo info(filePath); fileDate = info.lastModified().toString(); fileS = cfg.readEntry( filePath, "0" );// file length in seconds mediaLocation = getStorage( filePath); if( info.exists()) { item = new QListViewItem( ListView1, temp, fileS, mediaLocation, fileDate); item->setPixmap( 0, image0); if( currentFileName == filePath) ListView1->setSelected( item, true); } } } void QtRec::initConnections() { connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); connect( toBeginningButton, SIGNAL( pressed()), this, SLOT( rewindPressed() )); connect( toBeginningButton, SIGNAL( released()), this, SLOT( rewindReleased() )); connect( toEndButton, SIGNAL( pressed()), this, SLOT( FastforwardPressed() )); connect( toEndButton, SIGNAL( released()), this, SLOT( FastforwardReleased() )); connect( deleteSoundButton, SIGNAL(released()), this, SLOT( deleteSound() )); connect( Stop_PushButton, SIGNAL(released()), this, SLOT( doPlayBtn() )); connect( Rec_PushButton, SIGNAL(released()), this, SLOT( newSound() ) ); - connect( TabWidget, SIGNAL( currentChanged( QWidget*)), + connect( TabWidget, SIGNAL( currentChanged(QWidget*)), this, SLOT(thisTab(QWidget*) )); connect( OutputSlider, SIGNAL(sliderReleased()), this, SLOT( changedOutVolume()) ); connect( InputSlider, SIGNAL(sliderReleased()), this, SLOT( changedInVolume()) ); - connect( sampleRateComboBox, SIGNAL(activated( int)), + connect( sampleRateComboBox, SIGNAL(activated(int)), this, SLOT( changesamplerateCombo(int)) ); - connect( bitRateComboBox, SIGNAL(activated( int)), + connect( bitRateComboBox, SIGNAL(activated(int)), this, SLOT( changebitrateCombo(int)) ); - connect( directoryComboBox, SIGNAL(activated( int)), + connect( directoryComboBox, SIGNAL(activated(int)), this, SLOT( changeDirCombo(int)) ); - connect( sizeLimitCombo, SIGNAL(activated( int)), + connect( sizeLimitCombo, SIGNAL(activated(int)), this, SLOT( changeSizeLimitCombo(int)) ); - connect( stereoCheckBox, SIGNAL(toggled( bool)), + connect( stereoCheckBox, SIGNAL(toggled(bool)), this, SLOT( changeStereoCheck(bool)) ); - connect( outMuteCheckBox, SIGNAL(toggled( bool)), + connect( outMuteCheckBox, SIGNAL(toggled(bool)), this, SLOT( doVolMuting(bool)) ); - connect( inMuteCheckBox , SIGNAL(toggled( bool)), + connect( inMuteCheckBox , SIGNAL(toggled(bool)), this, SLOT( doMicMuting(bool)) ); - connect( ListView1,SIGNAL(doubleClicked( QListViewItem*)), + connect( ListView1,SIGNAL(doubleClicked(QListViewItem*)), this,SLOT( itClick(QListViewItem*))); - connect( ListView1, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), - this,SLOT( listPressed(int, QListViewItem *, const QPoint&, int)) ); - connect( timeSlider, SIGNAL( sliderMoved( int)), + connect( ListView1, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int)), + this,SLOT( listPressed(int,QListViewItem*,const QPoint&,int)) ); + connect( timeSlider, SIGNAL( sliderMoved(int)), this, SLOT( changeTimeSlider(int) )); - connect( timeSlider, SIGNAL( sliderPressed( )), + connect( timeSlider, SIGNAL( sliderPressed()), this, SLOT( timeSliderPressed() )); - connect( timeSlider, SIGNAL( sliderReleased( )), + connect( timeSlider, SIGNAL( sliderReleased()), this, SLOT( timeSliderReleased() )); connect( compressionCheckBox, SIGNAL( toggled(bool)), this, SLOT( compressionSelected(bool))); connect( autoMuteCheckBox, SIGNAL( toggled(bool)), this, SLOT( slotAutoMute(bool))); } void QtRec::initConfig() { int index, fred, i; Config cfg("OpieRec"); cfg.setGroup("Settings"); index = cfg.readNumEntry("samplerate",22050); bool ok; for(int ws=0;ws<sampleRateComboBox->count();ws++) { fred = sampleRateComboBox->text(ws).toInt(&ok, 10); if( index == fred) { filePara.sampleRate = fred; sampleRateComboBox->setCurrentItem(ws); } } i = cfg.readNumEntry("bitrate",16); if(i == 16) bitRateComboBox->setCurrentItem( 1); else if(i == 24) bitRateComboBox->setCurrentItem( 2); else if(i == 32) bitRateComboBox->setCurrentItem( 3); else bitRateComboBox->setCurrentItem( 0); filePara.resolution = i; i = cfg.readNumEntry("sizeLimit", 5 ); QString temp; sizeLimitCombo->setCurrentItem((i/5)); stereoCheckBox->setChecked( cfg.readBoolEntry("stereo", 1)); if( stereoCheckBox->isChecked()) { filePara.channels = 2; } else { filePara.channels = 1; } compressionCheckBox->setChecked( cfg.readBoolEntry("wavCompression",1)); if( compressionCheckBox->isChecked()) { bitRateComboBox->setEnabled(false); bitRateComboBox->setCurrentItem(0); filePara.resolution=16; } autoMuteCheckBox->setChecked( cfg.readBoolEntry("useAutoMute",0)); if( autoMuteCheckBox->isChecked()) slotAutoMute(true); else slotAutoMute(false); Config cofg( "qpe"); cofg.setGroup( "Volume"); outMuteCheckBox->setChecked( cofg.readBoolEntry( "Mute",0)); inMuteCheckBox->setChecked( cofg.readBoolEntry( "MicMute",0)); } void QtRec::stop() { qWarning("STOP"); setRecordButton(false); if( !recording) endPlaying(); else endRecording(); timeSlider->setValue(0); } void QtRec::doPlayBtn() { if(!stopped) { playLabel2->setText(tr("Play")); stop(); } else { if(ListView1->currentItem() == 0) return; playLabel2->setText(tr("Stop")); currentFile = ListView1->currentItem()->text(0); start(); } } void QtRec::start() { //play if( stopped) { QPixmap image3( ( const char** ) image3_data ); Stop_PushButton->setPixmap( image3 ); Stop_PushButton->setDown( true); stopped = false; paused = false; secCount = 1; if( openPlayFile()) if( setupAudio( false)) //recording is false doPlay(); } } bool QtRec::rec() { //record QString timeString; timeString.sprintf("%.0f", 0.0); timeLabel->setText( timeString+ " seconds"); if(!stopped) { monitoring = true; return false; } else { secCount = 1; playLabel2->setText(tr("Stop")); monitoring = false; setRecordButton( true); if( setupAudio( true)) if(setUpFile()) { int fileSize = 0; Config cfg("OpieRec"); cfg.setGroup("Settings"); // qDebug( "<<<<<<<Device bits %d, device rate %d, device channels %d", // soundDevice->getDeviceBits(), // soundDevice->getDeviceRate(), // soundDevice->getDeviceChannels()); //filePara.sampleRate = cfg.readNumEntry("samplerate", 22050); // qDebug("sample rate is %d", filePara.sampleRate); filePara.SecondsToRecord = getCurrentSizeLimit(); // qDebug("size limit %d sec", filePara.SecondsToRecord); int diskSize = checkDiskSpace( (const QString &) wavFile->trackName()); if( filePara.SecondsToRecord == 0) { fileSize = diskSize; } else if( filePara.format == WAVE_FORMAT_PCM) { // qDebug("WAVE_FORMAT_PCM"); fileSize = (filePara.SecondsToRecord ) * filePara.channels * filePara.sampleRate * ( filePara.resolution / 8) + 1000; } else { // qDebug("WAVE_FORMAT_DVI_ADPCM"); fileSize = ((filePara.SecondsToRecord) * filePara.channels * filePara.sampleRate * ( filePara.resolution / 8) ) / 4 + 250; } filePara.samplesToRecord = fileSize; qDebug("filesize should be %d, bits %d, rate %d", filePara.samplesToRecord, filePara.resolution, filePara.sampleRate); if( paused) { paused = false; } // else { qDebug("Setting timeslider %d", filePara.samplesToRecord); // if(fileSize != 0) timeSlider->setRange(0, filePara.samplesToRecord); // } if( diskSize < fileSize/1024) { QMessageBox::warning(this, tr("Low Disk Space"), tr("You are running low of\nrecording space\n" "or a card isn't being recognized")); stopped = true; //we need to be stopped stop(); } else { QString msg; msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); #ifdef DEV_VERSION setCaption( msg); #endif filePara.fileName=currentFile.latin1(); qDebug("Start recording thread"); stopped = false; #ifdef THREADED pthread_t thread1; pthread_create( &thread1, NULL, (void * (*)(void *))quickRec, NULL/* &*/); #endif toBeginningButton->setEnabled( false); toEndButton->setEnabled( false); startTimer(1000); #ifndef THREADED quickRec(); #endif } } //end setUpFile } //end setupAudio return true; } /* This happens when a tab is selected*/ void QtRec::thisTab(QWidget* widg) { if(widg != NULL) { int index = TabWidget->currentPageIndex(); if(index == 0) { //file page } if(index == 1) { //control page fillDirectoryCombo(); // soundDevice->getOutVol(); // soundDevice->getInVol(); } if( index==2) { //help page } qApp->processEvents(); update(); } } void QtRec::getOutVol( ) { filePara.outVol = soundDevice->getOutVolume(); // qDebug("out vol %d", filePara.outVol); OutputSlider->setValue( -filePara.outVol); } void QtRec::getInVol() { filePara.inVol = soundDevice->getInVolume(); // qDebug("in vol %d", filePara.inVol); InputSlider->setValue( -filePara.inVol); } void QtRec::changedOutVolume() { soundDevice->changedOutVolume( -OutputSlider->value()); } void QtRec::changedInVolume( ) { soundDevice->changedInVolume( -InputSlider->value()); } bool QtRec::setupAudio( bool b) { bool ok; int sampleformat, stereo, flags; QString dspString, mixerString; filePara.resolution = bitRateComboBox->currentText().toInt( &ok,10); //16 if( !b) { // we want to play #ifdef PDAUDIO //ALSA if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { sampleformat = SND_PCM_FORMAT_S16; filePara.resolution = 16; } else if( filePara.resolution == 24 || compressionCheckBox->isChecked() ) { sampleformat = SND_PCM_FORMAT_S24; filePara.resolution = 24; } else if( filePara.resolution == 32 || compressionCheckBox->isChecked() ) { sampleformat = SND_PCM_FORMAT_S32; filePara.resolution = 32; } else { sampleformat = SND_PCM_FORMAT_U8; filePara.resolution = 8; } #else // we want to play if( filePara.resolution == 16 || compressionCheckBox->isChecked() ) { sampleformat = AFMT_S16_LE; filePara.resolution = 16; } else { sampleformat = AFMT_U8; filePara.resolution = 8; } #endif stereo = filePara.channels; flags = O_WRONLY; Config hwcfg("OpieRec"); hwcfg.setGroup("Hardware"); dspString = hwcfg.readEntry( "Audio", DSPSTROUT); mixerString = hwcfg.readEntry( "Mixer", DSPSTRMIXEROUT); recording = false; } else { // we want to record #ifdef PDAUDIO //ALSA if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") sampleformat = SND_PCM_FORMAT_S16; else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "24") sampleformat = SND_PCM_FORMAT_S24; else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "32") sampleformat = SND_PCM_FORMAT_S32; else sampleformat = SND_PCM_FORMAT_U8; #else if( !bitRateComboBox->isEnabled() || bitRateComboBox->currentText() == "16") sampleformat = AFMT_S16_LE; else sampleformat = AFMT_U8; if( !compressionCheckBox->isChecked()) { filePara.format = WAVE_FORMAT_PCM; // qDebug("WAVE_FORMAT_PCM"); } else { filePara.format = WAVE_FORMAT_DVI_ADPCM; sampleformat = AFMT_S16_LE; // qDebug("WAVE_FORMAT_DVI_ADPCM"); } #endif stereo = filePara.channels; // filePara.sampleRate = sampleRateComboBox->currentText().toInt( &ok,10);//44100; flags= O_RDWR; // flags= O_RDONLY; Config hwcfg("OpieRec"); hwcfg.setGroup("Hardware"); dspString = hwcfg.readEntry( "Audio", DSPSTRIN); mixerString = hwcfg.readEntry( "Mixer", DSPSTRMIXERIN); recording = true; } // if(soundDevice) delete soundDevice; qDebug("<<<<<<<<<<<<<<<<<<<open dsp %d %d %d", filePara.sampleRate, filePara.channels, sampleformat); qWarning("change waveform settings"); waveform->changeSettings( filePara.sampleRate, filePara.channels ); soundDevice = new Device( this, dspString, mixerString, b); // soundDevice->openDsp(); soundDevice->reset(); qDebug("device has been made %d", soundDevice->sd); ////////////////// <<<<<<<<<<<<>>>>>>>>>>>> soundDevice->setDeviceFormat( sampleformat); soundDevice->setDeviceChannels( filePara.channels); soundDevice->setDeviceRate( filePara.sampleRate); soundDevice->getDeviceFragSize(); #ifdef QT_QWS_EBX int frag = FRAGSIZE; soundDevice->setFragSize( frag); soundDevice->getDeviceFragSize(); #endif ///////////////// filePara.sd = soundDevice->sd; if ( filePara.sd == -1) { monitoring = false; stopped = true; update(); setCaption( tr( "OpieRecord " )+ QString::number(VERSION) ); return false; } if(autoMute) doMute(false); return true; } bool QtRec::setUpFile() { //setup file for recording // qDebug("Setting up wavfile"); // if(wavFile) delete wavFile; wavFile = new WavFile( this, (const QString &)"", true, filePara.sampleRate, filePara.channels, filePara.resolution, filePara.format); filePara.fd = wavFile->wavHandle(); if(filePara.fd == -1) { return false; } else { // filePara.channels=1; } return true; } /// <<<<<<<<<<<<<<<< PLAY >>>>>>>>>>>>>>>>>>> bool QtRec::doPlay() { if( !paused) { total = 0; filePara.numberOfRecordedSeconds = 0; } else { paused = false; secCount = (int)filePara.numberOfRecordedSeconds; } playing = true; @@ -1275,769 +1275,769 @@ void QtRec::newSound() { deleteSound(); } } void QtRec::itClick(QListViewItem *item) { currentFile = item->text(0); setCaption("OpieRecord "+currentFile); } void QtRec::deleteSound() { Config cfg("OpieRec"); cfg.setGroup("Sounds"); if( ListView1->currentItem() == NULL) return; #ifndef DEV_VERSION switch ( QMessageBox::warning(this,tr("Delete"), tr("Do you really want to <font size=+2><B>DELETE</B></font>\nthe selected file?"), tr("Yes"),tr("No"),0,1,1) ) { case 0: #endif { QString file = ListView1->currentItem()->text(0); QString fileName; fileName = cfg.readEntry( file, ""); QFile f( fileName); if( f.exists()) if( !f.remove()) QMessageBox::message( tr("Error"), tr("Could not remove file.")); int nFiles = cfg.readNumEntry( "NumberofFiles",0); bool found = false; for(int i=0;i<nFiles+1;i++) { if( cfg.readEntry( QString::number(i),"").find( file,0,true) != -1) { found = true; cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),"")); } if(found) cfg.writeEntry( QString::number(i), cfg.readEntry( QString::number(i+1),"")); } cfg.removeEntry( cfg.readEntry( file)); cfg.removeEntry( file); cfg.writeEntry( "NumberofFiles", nFiles-1); cfg.write(); ListView1->takeItem( ListView1->currentItem() ); delete ListView1->currentItem(); ListView1->clear(); ListView1->setSelected( ListView1->firstChild(), true); initIconView(); update(); } #ifndef DEV_VERSION }; #endif setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); } void QtRec::keyPressEvent( QKeyEvent *e) { switch ( e->key() ) { // case Key_F1: // if(stopped && !recording) // newSound(); // else // stop(); // break; // case Key_F2: { // if( !e->isAutoRepeat()) // rewindPressed(); // } // break; // case Key_F3: { // if( !e->isAutoRepeat()) // FastforwardPressed(); // } // break; ////////////////////////////// Zaurus keys case Key_F9: //activity break; case Key_F10: //contacts break; case Key_F11: //menu break; case Key_F12: //home break; case Key_F13: //mail break; case Key_Space: break; case Key_Delete: break; case Key_Up: // stop(); break; case Key_Down: // newSound(); break; case Key_Left: { qDebug("rewinding"); if( !e->isAutoRepeat()) rewindPressed(); } break; case Key_Right: { if( !e->isAutoRepeat()) FastforwardPressed(); } break; } } void QtRec::keyReleaseEvent( QKeyEvent *e) { switch ( e->key() ) { // case Key_F1: // if(stopped && !recording) // newSound(); // else // stop(); // break; // case Key_F2: // rewindReleased(); // break; // case Key_F3: // FastforwardReleased(); // break; ////////////////////////////// Zaurus keys case Key_F9: //activity break; case Key_F10: //contacts break; case Key_F11: //menu break; case Key_F12: //home if(stopped) doPlayBtn(); else stop(); break; case Key_F13: //mail break; case Key_Space: if(stopped && !recording) newSound(); else stop(); break; case Key_Delete: deleteSound(); break; case Key_Up: // stop(); qDebug("Up"); break; case Key_Down: // start(); // qDebug("Down"); // newSound(); break; case Key_Left: qDebug("Left"); rewindReleased(); break; case Key_Right: qDebug("Right"); FastforwardReleased(); break; } } void QtRec::endRecording() { monitoring = false; recording = false; stopped = true; waveform->reset(); setRecordButton( false); toBeginningButton->setEnabled( true); toEndButton->setEnabled( true); killTimers(); if(autoMute) doMute( true); soundDevice->closeDevice( true); if( wavFile->track.isOpen()) { wavFile->adjustHeaders( filePara.fd, filePara.numberSamples); // soundDevice->sd=-1; filePara.numberSamples = 0; // filePara.sd=-1; wavFile->closeFile(); filePara.fd=0; if( wavFile->isTempFile()) { // move tmp file to regular file QString cmd; cmd.sprintf("mv "+ wavFile->trackName() + " " + wavFile->currentFileName); // qDebug("moving tmp file to "+currentFileName); system( cmd.latin1()); } qDebug("Just moved " + wavFile->currentFileName); Config cfg("OpieRec"); cfg.setGroup("Sounds"); int nFiles = cfg.readNumEntry( "NumberofFiles",0); currentFile = QFileInfo( wavFile->currentFileName).fileName(); currentFile = currentFile.left( currentFile.length() - 4); cfg.writeEntry( "NumberofFiles", nFiles + 1); cfg.writeEntry( QString::number( nFiles + 1), currentFile); cfg.writeEntry( currentFile, wavFile->currentFileName); QString time; time.sprintf("%.2f", filePara.numberOfRecordedSeconds); cfg.writeEntry( wavFile->currentFileName, time ); // qDebug("writing config numberOfRecordedSeconds "+time); cfg.write(); qDebug("finished recording"); timeLabel->setText(""); } if(soundDevice) delete soundDevice; timeSlider->setValue(0); initIconView(); selectItemByName( currentFile); } void QtRec::endPlaying() { monitoring = false; recording = false; playing = false; stopped = true; waveform->reset(); // errorStop(); // qDebug("end playing"); setRecordButton( false); toBeginningButton->setEnabled( true); toEndButton->setEnabled( true); if(autoMute) doMute( true); soundDevice->closeDevice( false); soundDevice->sd = -1; // if(soundDevice) delete soundDevice; // qDebug("file and sound device closed"); timeLabel->setText(""); total = 0; filePara.numberSamples = 0; filePara.sd = -1; // wavFile->closeFile(); filePara.fd = 0; // if(wavFile) delete wavFile; //this crashes // qDebug("track closed"); killTimers(); qWarning("reset slider"); timeSlider->setValue(0); if(soundDevice) delete soundDevice; } bool QtRec::openPlayFile() { qApp->processEvents(); if( currentFile.isEmpty()) { QMessageBox::message(tr("Opierec"),tr("Please select file to play")); endPlaying(); return false; } QString currentFileName; Config cfg("OpieRec"); cfg.setGroup("Sounds"); int nFiles = cfg.readNumEntry( "NumberofFiles", 0); for(int i=0;i<nFiles+1;i++) { //look for file if( cfg.readEntry( QString::number(i),"").find( currentFile,0,true) != -1) { currentFileName = cfg.readEntry( currentFile, "" ); qDebug("opening for play: " + currentFileName); } } wavFile = new WavFile(this, currentFileName, false); filePara.fd = wavFile->wavHandle(); if(filePara.fd == -1) { // if(!track.open(IO_ReadOnly)) { QString errorMsg = (QString)strerror(errno); monitoring = false; setCaption( tr( "OpieRecord " ) + QString::number(VERSION) ); QMessageBox::message(tr("Note"), tr("Could not open audio file.\n") + errorMsg + "\n" + currentFile); return false; } else { filePara.numberSamples = wavFile->getNumberSamples(); filePara.format = wavFile->getFormat(); filePara.sampleRate = wavFile->getSampleRate(); filePara.resolution = wavFile->getResolution(); filePara.channels = wavFile->getChannels(); timeSlider->setPageStep(1); monitoring = true; qDebug("file %d, samples %d %d", filePara.fd, filePara.numberSamples, filePara.sampleRate); int sec = (int) (( filePara.numberSamples / filePara.sampleRate) / filePara.channels) / ( filePara.channels*( filePara.resolution/8)); qWarning("seconds %d", sec); timeSlider->setRange(0, filePara.numberSamples ); } return true; } void QtRec::listPressed( int mouse, QListViewItem *item, const QPoint &, int ) { if(item == NULL ) return; switch (mouse) { case 1: { if( renameBox != 0 ) //tricky cancelRename(); currentFile = item->text(0); setCaption( "OpieRecord " + currentFile); } break; case 2: showListMenu(item); ListView1->clearSelection(); break; }; } void QtRec::showListMenu(QListViewItem * item) { if(item == NULL) return; QPopupMenu *m = new QPopupMenu(this); m->insertItem( tr("Play"), this, SLOT( doMenuPlay() )); if(Ir::supported()) m->insertItem( tr( "Send with Ir" ), this, SLOT( doBeam() )); m->insertItem( tr( "Rename" ), this, SLOT( doRename() )); // #if defined (QTOPIA_INTERNAL_FSLP) // m->insertItem( tr( "Properties" ), this, SLOT( doProperties() )); // #endif m->insertSeparator(); m->insertItem( tr("Delete"), this, SLOT( deleteSound() ) ); m->exec( QCursor::pos() ); qApp->processEvents(); } void QtRec::fileBeamFinished( Ir *ir) { if(ir) QMessageBox::message( tr("Ir Beam out"), tr("Ir sent.") ,tr("Ok") ); } void QtRec::doBeam() { qApp->processEvents(); if( ListView1->currentItem() == NULL) return; Ir ir; if( ir.supported()) { QString file = ListView1->currentItem()->text(0); Config cfg("OpieRec"); cfg.setGroup("Sounds"); int nFiles = cfg.readNumEntry("NumberofFiles",0); for(int i=0;i<nFiles+1;i++) { if( cfg.readEntry( QString::number( i),"").find( file, 0, true) != -1) { QString filePath = cfg.readEntry(file,""); Ir *file = new Ir(this, "IR"); connect( file, SIGNAL( done(Ir*)), - this, SLOT( fileBeamFinished( Ir * ))); + this, SLOT( fileBeamFinished(Ir*))); file->send( filePath, "OPieRec audio file\n" + filePath ); } } } } void QtRec::doMenuPlay() { qApp->processEvents(); currentFile = ListView1->currentItem()->text(0); } void QtRec::doRename() { QRect r = ListView1->itemRect( ListView1->currentItem( )); r = QRect( ListView1->viewportToContents( r.topLeft() ), r.size() ); r.setX( ListView1->contentsX() ); if ( r.width() > ListView1->visibleWidth() ) r.setWidth( ListView1->visibleWidth() ); renameBox = new QLineEdit( ListView1->viewport(), "qt_renamebox" ); renameBox->setFrame(true); renameBox->setText( ListView1->currentItem()->text(0) ); renameBox->selectAll(); renameBox->installEventFilter( this ); ListView1->addChild( renameBox, r.x(), r.y() ); renameBox->resize( r.size() ); ListView1->viewport()->setFocusProxy( renameBox ); renameBox->setFocus(); renameBox->show(); } void QtRec::okRename() { qDebug(renameBox->text()); QString filename = renameBox->text(); cancelRename(); if( ListView1->currentItem() == NULL) return; Config cfg("OpieRec"); cfg.setGroup("Sounds"); QString file = ListView1->currentItem()->text(0); qDebug("filename is " + filename); int nFiles = cfg.readNumEntry("NumberofFiles",0); for(int i=0;i<nFiles+1;i++) { //look for file if( cfg.readEntry( QString::number(i),"").find(file,0,true) != -1) { QString filePath = cfg.readEntry(file,""); cfg.writeEntry( QString::number(i), filename ); cfg.writeEntry( filename, filePath ); cfg.removeEntry( file); cfg.write(); } } ListView1->takeItem( ListView1->currentItem() ); delete ListView1->currentItem(); ListView1->clear(); initIconView(); update(); } void QtRec::cancelRename() { bool resetFocus = ListView1->viewport()->focusProxy() == renameBox; delete renameBox; renameBox = 0; if ( resetFocus ) { ListView1->viewport()->setFocusProxy( ListView1 ); ListView1->setFocus(); } } bool QtRec::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; } } return QWidget::eventFilter( o, e ); } int QtRec::getCurrentSizeLimit() { return sizeLimitCombo->currentItem() * 5; } void QtRec::timerBreak() { endPlaying(); } void QtRec::doVolMuting(bool b) { Config cfg( "qpe" ); cfg. setGroup( "Volume" ); cfg.writeEntry( "Mute",b); cfg.write(); QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << b; } void QtRec::doMicMuting(bool b) { // qDebug("mic mute"); Config cfg( "qpe" ); cfg. setGroup( "Volume" ); cfg.writeEntry( "MicMute",b); cfg.write(); QCopEnvelope( "QPE/System", "micChange(bool)" ) << b; } void QtRec::compressionSelected(bool b) { Config cfg("OpieRec"); cfg.setGroup("Settings"); cfg.writeEntry("wavCompression", b); cfg.writeEntry("bitrate", 16); filePara.resolution = 16; cfg.write(); if(b) { bitRateComboBox->setEnabled( false); bitRateComboBox->setCurrentItem( 0); filePara.resolution = 16; } else{ bitRateComboBox->setEnabled( true); } } long QtRec::checkDiskSpace(const QString &path) { struct statfs fs; if ( !statfs( path.latin1(), &fs ) ) { int blkSize = fs.f_bsize; int availBlks = fs.f_bavail; long mult = blkSize / 1024; long div = 1024 / blkSize; if ( !mult ) mult = 1; if ( !div ) div = 1; return availBlks * mult / div; } return -1; } // short f_fstyp; /* File system type */ // long f_bsize; /* Block size */ // long f_frsize; /* Fragment size */ // long f_blocks; /* Total number of blocks*/ // long f_bfree; /* Count of free blocks */ // long f_files; /* Total number of file nodes */ // long f_ffree; /* Count of free file nodes */ // char f_fname[6]; /* Volumename */ // char f_fpack[6]; /* Pack name */ void QtRec::receive( const QCString &msg, const QByteArray & ) { qDebug("Voicerecord received message "+msg); } ///////////////////////////// timerEvent void QtRec::timerEvent( QTimerEvent * ) { // if(!recording) // timeSlider->setValue( secCount); // else // timeSlider->setValue( filePara.numberOfRecordedSeconds); if( stopped && playing) { stop(); } if( stopped && recording ){ stop(); } if( recording && filePara.SecondsToRecord < secCount && filePara.SecondsToRecord != 0) { stop(); } qDebug( "%d", secCount ); QString timeString; #ifdef DEV_VERSION QString msg; msg.sprintf("%d, %d, %d", filePara.sampleRate, filePara.channels, filePara.resolution); setCaption( msg +" :: "+QString::number(secCount)); #endif timeString.sprintf("%d", secCount); timeLabel->setText( timeString + " seconds"); secCount++; } void QtRec::changeTimeSlider(int index) { if( ListView1->currentItem() == 0 || !wavFile->track.isOpen()) return; // qDebug("Slider moved to %d",index); paused = true; stopped = true; sliderPos=index; QString timeString; filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); secCount = (int)filePara.numberOfRecordedSeconds; timeLabel->setText( timeString + tr(" seconds")); } void QtRec::timeSliderPressed() { if( ListView1->currentItem() == 0) return; // qDebug("slider pressed"); paused = true; stopped = true; } void QtRec::timeSliderReleased() { if( ListView1->currentItem() == 0) return; sliderPos = timeSlider->value(); // qDebug("slider released %d", sliderPos); stopped = false; int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); total = newPos*4; filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; doPlay(); } void QtRec::rewindPressed() { if( ListView1->currentItem() == 0) return; if( !wavFile->track.isOpen()) { if( !openPlayFile() ) return; else if( !setupAudio( false)) return; } else { killTimers(); paused = true; stopped = true; rewindTimer->start( 50, false); } } void QtRec::rewindTimerTimeout() { int sliderValue = timeSlider->value(); sliderValue = sliderValue - ( filePara.numberSamples / 100); // if(toBeginningButton->isDown()) timeSlider->setValue( sliderValue ) ; // qDebug("%d", sliderValue); QString timeString; filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); timeLabel->setText( timeString+ tr(" seconds")); } void QtRec::rewindReleased() { rewindTimer->stop(); if( wavFile->track.isOpen()) { sliderPos=timeSlider->value(); stopped = false; int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); total = newPos * 4; // qDebug("rewind released %d", total); startTimer( 1000); doPlay(); } } void QtRec::FastforwardPressed() { if( ListView1->currentItem() == 0) return; if( !wavFile->track.isOpen()) if( !openPlayFile() ) return; else if( !setupAudio( false)) return; killTimers(); paused = true; stopped = true; forwardTimer->start(50, false); } void QtRec::forwardTimerTimeout() { int sliderValue = timeSlider->value(); sliderValue = sliderValue + ( filePara.numberSamples / 100); // if(toEndButton->isDown()) timeSlider->setValue( sliderValue); QString timeString; filePara.numberOfRecordedSeconds = (float)sliderValue / (float)filePara.sampleRate * (float)2; timeString.sprintf( "%.2f", filePara.numberOfRecordedSeconds); timeLabel->setText( timeString+ tr(" seconds")); } void QtRec::FastforwardReleased() { forwardTimer->stop(); if( wavFile->track.isOpen()) { sliderPos=timeSlider->value(); stopped = false; int newPos = lseek( filePara.fd, sliderPos, SEEK_SET); total = newPos * 4; filePara.numberOfRecordedSeconds = (float)sliderPos / (float)filePara.sampleRate * (float)2; startTimer( 1000); doPlay(); } } QString QtRec::getStorage(const QString &fileName) { StorageInfo storageInfo; const QList<FileSystem> &fs = storageInfo.fileSystems(); QListIterator<FileSystem> it ( fs ); QString storage; for( ; it.current(); ++it ){ const QString name = ( *it)->name(); const QString path = ( *it)->path(); const QString disk = ( *it)->disk(); if( fileName.find( path,0,true) != -1) storage = name; // const QString options = (*it)->options(); // if( name.find( tr("Internal"),0,true) == -1) { // storageComboBox->insertItem( name +" -> "+disk); // qDebug(name); } return storage; // struct mntent *me; // // if(fileName == "/etc/mtab") { // FILE *mntfp = setmntent( fileName.latin1(), "r" ); // if ( mntfp ) { // while ( (me = getmntent( mntfp )) != 0 ) { // QString filesystemType = me->mnt_type; // } // } // endmntent( mntfp ); } void QtRec::setRecordButton(bool b) { if(b) { //about to record or play Rec_PushButton->setDown( true); QPixmap image3( ( const char** ) image3_data ); Stop_PushButton->setPixmap( image3 ); if(Stop_PushButton->isDown()) Stop_PushButton->setDown( true); playLabel2->setText( tr("Stop") ); } else { //about to stop QPixmap image4( ( const char** ) image4_data ); Stop_PushButton->setPixmap( image4); if(Stop_PushButton->isDown()) Stop_PushButton->setDown( false); playLabel2->setText( tr("Play") ); if(Rec_PushButton->isDown()) Rec_PushButton->setDown( false); } } diff --git a/noncore/multimedia/powerchord/powerchordbase.cpp b/noncore/multimedia/powerchord/powerchordbase.cpp index 0b97984..7978426 100644 --- a/noncore/multimedia/powerchord/powerchordbase.cpp +++ b/noncore/multimedia/powerchord/powerchordbase.cpp @@ -3,590 +3,590 @@ ** ** Created: Sun Jan 13 23:05:11 2002 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #include "powerchordbase.h" #include "fretboard.h" #include "vumeter.h" #include "gs.h" #include <qcombobox.h> #include <qframe.h> #include <qlabel.h> #include <qlistbox.h> #include <qpushbutton.h> #include <qspinbox.h> #include <qtabwidget.h> #include <qlayout.h> #include <qvariant.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qimage.h> #include <qpixmap.h> #include <qbitmap.h> #include <qpe/resource.h> /* * Constructs a PowerchordBase which is a child of 'parent', with the * name 'name' and widget flags set to 'f' */ PowerchordBase::PowerchordBase( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { simulation_timer = 0; audio_timer = 0; // setPalette( QPalette( QColor( 232, 227, 215) ) ); // QPixmap image0(QString("/opt/Qtopia/pics/powerchord/image0")); QPixmap image1 = Resource::loadPixmap( "powerchord/image1"); QPixmap image2 = Resource::loadPixmap( "powerchord/image2"); QPixmap image3 = Resource::loadPixmap( "powerchord/image3"); QPixmap image4 = Resource::loadPixmap( "powerchord/image4"); QPixmap image5 = Resource::loadPixmap( "powerchord/image5"); image6 = Resource::loadPixmap( "powerchord/image6"); image_open = Resource::loadPixmap( "powerchord/image_open"); // image0.setMask(image0.createHeuristicMask()); image1.setMask(image1.createHeuristicMask()); // image2.setMask(image2.createHeuristicMask()); // image3.setMask(image3.createHeuristicMask()); // image4.setMask(image4.createHeuristicMask()); // image5.setMask(image5.createHeuristicMask()); // image6->setMask(image6->createHeuristicMask()); // image_open->setMask(image_open->createHeuristicMask()); if ( !name ) setName( "PowerchordBase" ); resize( 240, 284 ); setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)5, (QSizePolicy::SizeType)5, sizePolicy().hasHeightForWidth() ) ); setMinimumSize( QSize( 240, 284 ) ); setMaximumSize( QSize( 240, 284 ) ); setCaption( tr( "Powerchord" ) ); tabs = new QTabWidget( this, "tabs" ); tabs->setEnabled( TRUE ); tabs->setGeometry( QRect( 0, 0, 240, 286 ) ); tabs->setTabPosition( QTabWidget::Bottom ); tab = new QWidget( tabs, "tab" ); chordkey = new QComboBox( FALSE, tab, "chordkey" ); chordkey->insertItem( tr( "maj" ) ); chordkey->insertItem( tr( "min" ) ); chordkey->insertItem( tr( "7th" ) ); chordkey->insertItem( tr( "m7" ) ); chordkey->insertItem( tr( "maj7" ) ); chordkey->insertItem( tr( "6th" ) ); chordkey->insertItem( tr( "m6th" ) ); chordkey->insertItem( tr( "aug" ) ); chordkey->insertItem( tr( "dim" ) ); chordkey->insertItem( tr( "sus4" ) ); chordkey->insertItem( tr( "7sus4" ) ); chordkey->insertItem( tr( "9th" ) ); chordkey->insertItem( tr( "add9" ) ); chordkey->insertItem( tr( "m9th" ) ); chordkey->insertItem( tr( "maj9" ) ); chordkey->insertItem( tr( "sus2" ) ); chordkey->insertItem( tr( "7sus2" ) ); chordkey->insertItem( tr( "11th" ) ); chordkey->insertItem( tr( "m11th" ) ); chordkey->insertItem( tr( "13th" ) ); chordkey->insertItem( tr( "m13th" ) ); chordkey->insertItem( tr( "maj13" ) ); chordkey->insertItem( tr( "6/9" ) ); chordkey->insertItem( tr( "flat5" ) ); chordkey->insertItem( tr( "7#9" ) ); chordkey->insertItem( tr( QString::fromUtf8( "ø7" ) ) ); chordkey->insertItem( tr( "5" ) ); chordkey->setGeometry( QRect( 40, 0, 51, 21 ) ); chordfret = new QComboBox( FALSE, tab, "chordfret" ); chordfret->insertItem( tr( "open" ) ); chordfret->insertItem( tr( "1st" ) ); chordfret->insertItem( tr( "2nd" ) ); chordfret->insertItem( tr( "3rd" ) ); chordfret->insertItem( tr( "4th" ) ); chordfret->insertItem( tr( "5th" ) ); chordfret->insertItem( tr( "6th" ) ); chordfret->insertItem( tr( "7th" ) ); chordfret->insertItem( tr( "8th" ) ); chordfret->insertItem( tr( "9th" ) ); chordfret->insertItem( tr( "10th" ) ); chordfret->insertItem( tr( "11th" ) ); chordfret->insertItem( tr( "12th" ) ); chordfret->insertItem( tr( "13th" ) ); chordfret->insertItem( tr( "14th" ) ); chordfret->insertItem( tr( "15th" ) ); chordfret->insertItem( tr( "16th" ) ); chordfret->setGeometry( QRect( 90, 0, 55, 21 ) ); //cxm less 5 width chordnote = new QComboBox( FALSE, tab, "chordnote" ); chordnote->insertItem( tr( "C" ) ); chordnote->insertItem( tr( "C#" ) ); chordnote->insertItem( tr( "D" ) ); chordnote->insertItem( tr( "Eb" ) ); chordnote->insertItem( tr( "E" ) ); chordnote->insertItem( tr( "F" ) ); chordnote->insertItem( tr( "F#" ) ); chordnote->insertItem( tr( "G" ) ); chordnote->insertItem( tr( "G#" ) ); chordnote->insertItem( tr( "A" ) ); chordnote->insertItem( tr( "Bb" ) ); chordnote->insertItem( tr( "B" ) ); chordnote->setGeometry( QRect( 0, 0, 40, 21 ) ); chordnote->setCurrentItem( 9 ); QWidget* privateLayoutWidget = new QWidget( tab, "Layout1" ); privateLayoutWidget->setGeometry( QRect( 5, 232, 160, 20 ) ); Layout1 = new QHBoxLayout( privateLayoutWidget ); Layout1->setSpacing( 6 ); Layout1->setMargin( 0 ); s1_1 = new QLabel( privateLayoutWidget, "s1_1" ); s1_1->setText( tr( "E" ) ); s1_1->setAlignment( int( QLabel::AlignCenter ) ); Layout1->addWidget( s1_1 ); s1_2 = new QLabel( privateLayoutWidget, "s1_2" ); s1_2->setText( tr( "A" ) ); s1_2->setAlignment( int( QLabel::AlignCenter ) ); Layout1->addWidget( s1_2 ); s1_3 = new QLabel( privateLayoutWidget, "s1_3" ); s1_3->setText( tr( "E" ) ); s1_3->setAlignment( int( QLabel::AlignCenter ) ); Layout1->addWidget( s1_3 ); s1_4 = new QLabel( privateLayoutWidget, "s1_4" ); s1_4->setText( tr( "A" ) ); s1_4->setAlignment( int( QLabel::AlignCenter ) ); Layout1->addWidget( s1_4 ); s1_5 = new QLabel( privateLayoutWidget, "s1_5" ); s1_5->setText( tr( "C#" ) ); s1_5->setAlignment( int( QLabel::AlignCenter ) ); Layout1->addWidget( s1_5 ); s1_6 = new QLabel( privateLayoutWidget, "s1_6" ); s1_6->setText( tr( "E" ) ); s1_6->setAlignment( int( QLabel::AlignCenter ) ); Layout1->addWidget( s1_6 ); // sound_label = new QLabel( tab, "sound_label" ); // sound_label->setGeometry( QRect( 185, 160, 32, 17 ) ); // sound_label->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, sound_label->sizePolicy().hasHeightForWidth() ) ); // sound_label->setPixmap( image0 ); // sound_label->pixmap()->setMask(*image0.mask()); // sound_label->setScaledContents( TRUE ); // sound_label->setBackgroundMode( QWidget::PaletteButton ); // sound_label->setBackgroundColor(this->backgroundColor()); // sound_label->setPalette( QPalette( QColor( 232, 227, 215) ) ); Frame6 = new QFrame( tab, "Frame6" ); Frame6->setGeometry( QRect( 170, 145, 66, 10 ) ); Frame6->setFrameShape( QFrame::HLine ); Frame6->setFrameShadow( QFrame::Raised ); chordshow_label = new QLabel( tab, "chordshow_label" ); chordshow_label->setGeometry( QRect( 185, 60, 32, 17 ) ); // chordshow_label->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, chordshow_label->sizePolicy().hasHeightForWidth() ) ); chordshow_label->setFrameShape( QLabel::NoFrame ); chordshow_label->setPixmap( image1 ); chordshow_label->setScaledContents( TRUE ); // chordshow_label->setBackgroundMode( QWidget::PaletteButton ); transport_rec = new QPushButton( tab, "transport_rec" ); transport_rec->setGeometry( QRect( 170, 80, 30, 30 ) ); transport_rec->setText( tr( "" ) ); transport_rec->setPixmap( image2 ); play_sound = new QPushButton( tab, "play_sound" ); play_sound->setGeometry( QRect( 170, 180, 60, 55 ) ); play_sound->setText( tr( "" ) ); play_sound->setPixmap( image3 ); Frame6_2 = new QFrame( tab, "Frame6_2" ); Frame6_2->setGeometry( QRect( 170, 45, 66, 10 ) ); Frame6_2->setFrameShape( QFrame::HLine ); Frame6_2->setFrameShadow( QFrame::Raised ); transport_play = new QPushButton( tab, "transport_play" ); transport_play->setEnabled( FALSE ); transport_play->setGeometry( QRect( 200, 80, 30, 30 ) ); transport_play->setText( tr( "" ) ); transport_play->setPixmap( image3 ); transport_rew = new QPushButton( tab, "transport_rew" ); transport_rew->setEnabled( FALSE ); transport_rew->setGeometry( QRect( 170, 110, 30, 30 ) ); transport_rew->setText( tr( "" ) ); transport_rew->setPixmap( image4 ); transport_fwd = new QPushButton( tab, "transport_fwd" ); transport_fwd->setEnabled( FALSE ); transport_fwd->setGeometry( QRect( 200, 110, 30, 30 ) ); transport_fwd->setText( tr( "" ) ); transport_fwd->setPixmap( image5 ); chordname = new QLabel( tab, "chordname" ); chordname->setGeometry( QRect( 146, 0, 90, 20 ) ); //cxm moved l 5 chordname->setText( tr( "A" ) ); chordname->setAlignment( int( QLabel::AlignCenter ) ); QToolTip::add( chordname, tr( "" ) ); synth = new gs(); tuner = new gt(); frets = new FretBoard( tab, "frets" ); frets->setGeometry( QRect( 0, 20, 168, 210 ) ); tabs->insertTab( tab, tr( "Guitar" ) ); tab_2 = new QWidget( tabs, "tab_2" ); optlab2 = new QLabel( tab_2, "optlab2" ); optlab2->setGeometry( QRect( 9, 58, 120, 41 ) ); optlab2->setText( tr( "Alternative tunings are possible" ) ); optlab2->setAlignment( int( QLabel::WordBreak | QLabel::AlignVCenter | QLabel::AlignLeft ) ); span = new QComboBox( FALSE, tab_2, "span" ); span->insertItem( tr( "2" ) ); span->insertItem( tr( "3" ) ); span->insertItem( tr( "4" ) ); span->insertItem( tr( "5" ) ); span->insertItem( tr( "6" ) ); span->setGeometry( QRect( 180, 20, 50, 21 ) ); span->setCurrentItem( 1 ); TextLabel1 = new QLabel( tab_2, "TextLabel1" ); TextLabel1->setGeometry( QRect( 3, 109, 226, 140 ) ); TextLabel1->setText( tr( QString::fromUtf8( "©2002 Camilo Mesias\n" "camilo@mesias.co.uk\n" "Version 0.0.7 beta" ) ) ); TextLabel1->setAlignment( int( QLabel::AlignBottom | QLabel::AlignLeft ) ); tuning = new QComboBox( FALSE, tab_2, "tuning" ); tuning->insertItem( tr( "EADGBE" ) ); tuning->insertItem( tr( "EBEG#BE" ) ); tuning->insertItem( tr( "EAEAC#E" ) ); tuning->insertItem( tr( "EADF#BE" ) ); tuning->insertItem( tr( "EADGCF" ) ); tuning->insertItem( tr( "DADGAD" ) ); tuning->insertItem( tr( "DGCGCD" ) ); tuning->insertItem( tr( "DADF#AD" ) ); tuning->insertItem( tr( "DADGBE" ) ); tuning->insertItem( tr( "DGDGBD" ) ); tuning->insertItem( tr( "DADACD" ) ); tuning->insertItem( tr( "CGCGAE" ) ); tuning->insertItem( tr( "FADGBE" ) ); tuning->insertItem( tr( "G minor" ) ); tuning->setGeometry( QRect( 140, 70, 91, 21 ) ); optlab1 = new QLabel( tab_2, "optlab1" ); optlab1->setGeometry( QRect( 8, 8, 160, 40 ) ); optlab1->setText( tr( "Span: the greatest number of frets over which you want chords to be generated" ) ); optlab1->setAlignment( int( QLabel::WordBreak | QLabel::AlignVCenter | QLabel::AlignLeft ) ); tabs->insertTab( tab_2, tr( "Options" ) ); Tuner = new QWidget( tabs, "Tuner" ); Frame4 = new QFrame( Tuner, "Frame4" ); Frame4->setGeometry( QRect( 0, 0, 230, 126 ) ); Frame4->setFrameShape( QFrame::Box ); Frame4->setFrameShadow( QFrame::Raised ); vu = new VUMeter( Frame4, "vu" ); vu->setGeometry( QRect( 5, 5, 220, 115 ) ); tuner_note = new QComboBox( FALSE, Tuner, "tuner_note" ); tuner_note->insertItem( tr( "auto" ) ); tuner_note->insertItem( tr( "E" ) ); tuner_note->insertItem( tr( "D" ) ); tuner_note->insertItem( tr( "G" ) ); tuner_note->insertItem( tr( "A" ) ); tuner_note->insertItem( tr( "B" ) ); tuner_note->insertItem( tr( "C" ) ); tuner_note->insertItem( tr( "F" ) ); tuner_note->setGeometry( QRect( 5, 160, 90, 20 ) ); Frame8 = new QFrame( Tuner, "Frame8" ); Frame8->setGeometry( QRect( -2, 188, 231, 10 ) ); Frame8->setFrameShape( QFrame::HLine ); Frame8->setFrameShadow( QFrame::Raised ); tuner_start = new QPushButton( Tuner, "tuner_start" ); tuner_start->setGeometry( QRect( 100, 155, 91, 30 ) ); tuner_start->setText( tr( "Start" ) ); tuner_lab1 = new QLabel( Tuner, "tuner_lab1" ); tuner_lab1->setGeometry( QRect( 10, 130, 100, 21 ) ); tuner_lab1->setText( tr( "Tuner operation" ) ); tuner_lab2 = new QLabel( Tuner, "tuner_lab2" ); tuner_lab2->setGeometry( QRect( 10, 200, 100, 16 ) ); tuner_lab2->setText( tr( "Pitch calibration" ) ); tuner_calib_note = new QComboBox( FALSE, Tuner, "tuner_calib_note" ); tuner_calib_note->insertItem( tr( "A" ) ); tuner_calib_note->insertItem( tr( "C" ) ); tuner_calib_note->setGeometry( QRect( 5, 225, 90, 21 ) ); tuner_calib_freq = new QSpinBox( Tuner, "tuner_calib_freq" ); tuner_calib_freq->setGeometry( QRect( 105, 225, 71, 21 ) ); tuner_calib_freq->setSuffix( tr( "Hz" ) ); tuner_calib_freq->setWrapping( TRUE ); tuner_calib_freq->setMaxValue( 500 ); tuner_calib_freq->setMinValue( 300 ); tuner_calib_freq->setValue( 440 ); tuner_lab3 = new QLabel( Tuner, "tuner_lab3" ); tuner_lab3->setGeometry( QRect( 185, 225, 40, 21 ) ); tuner_lab3->setText( tr( "Pitch" ) ); tuner_pic1 = new QLabel( Tuner, "tuner_pic1" ); tuner_pic1->setGeometry( QRect( 195, 155, 31, 31 ) ); tuner_pic1->setFrameShape( QLabel::NoFrame ); tuner_pic1->setPixmap( image6 ); tuner_pic1->setScaledContents( TRUE ); tabs->insertTab( Tuner, tr( "Tuner" ) ); tab_3 = new QWidget( tabs, "tab_3" ); chordlistlab1 = new QLabel( tab_3, "chordlistlab1" ); chordlistlab1->setGeometry( QRect( 5, 5, 216, 16 ) ); chordlistlab1->setText( tr( "Chord list" ) ); chordlist = new QListBox( tab_3, "chordlist" ); chordlist->setGeometry( QRect( 5, 25, 220, 200 ) ); list_remove_btn = new QPushButton( tab_3, "list_remove_btn" ); list_remove_btn->setGeometry( QRect( 150, 230, 71, 25 ) ); list_remove_btn->setText( tr( "Remove" ) ); tabs->insertTab( tab_3, tr( "Chords" ) ); // hope this does what it's supposed to!! // setPalette( QPalette( QColor( 232, 227, 215) ) ); // signals and slots connections //cxm connect( tuning, SIGNAL( activated(int) ), frets, SLOT( Tune(int) ) ); connect( span, SIGNAL( activated(int) ), frets, SLOT( Span(int) ) ); connect( transport_rec, SIGNAL( clicked() ), this, SLOT( transport_rec_cb() )); connect( play_sound, SIGNAL( clicked() ), this, SLOT( play_chord_cb() )); connect( tuner_start, SIGNAL( clicked() ), this, SLOT( tuner_start_cb() )); connect( tuner_note, SIGNAL( textChanged(const QString&) ), vu, SLOT( AnnotL(const QString&) )); connect( this, SIGNAL( frequency_change(int) ), vu, SLOT( Value(int) )); connect( chordnote, SIGNAL( activated(int) ), frets, SLOT( Base(int) ) ); connect( chordkey, SIGNAL( activated(int) ), frets, SLOT( Chord(int) ) ); connect( chordfret, SIGNAL( activated(int) ), frets, SLOT( Fret(int) ) ); connect( list_remove_btn, SIGNAL( clicked() ), this, SLOT( list_remove_cb() ) ); - connect( frets, SIGNAL( s1nameChanged(const QString &) ), s1_1, SLOT( setText(const QString&) ) ); - connect( frets, SIGNAL( s2nameChanged(const QString &) ), s1_2, SLOT( setText(const QString&) ) ); - connect( frets, SIGNAL( s3nameChanged(const QString &) ), s1_3, SLOT( setText(const QString&) ) ); - connect( frets, SIGNAL( s4nameChanged(const QString &) ), s1_4, SLOT( setText(const QString&) ) ); - connect( frets, SIGNAL( s5nameChanged(const QString &) ), s1_5, SLOT( setText(const QString&) ) ); - connect( frets, SIGNAL( s6nameChanged(const QString &) ), s1_6, SLOT( setText(const QString&) ) ); - connect( frets, SIGNAL( nameChanged(const QString &) ), chordname, SLOT( setText(const QString&) ) ); + connect( frets, SIGNAL( s1nameChanged(const QString&) ), s1_1, SLOT( setText(const QString&) ) ); + connect( frets, SIGNAL( s2nameChanged(const QString&) ), s1_2, SLOT( setText(const QString&) ) ); + connect( frets, SIGNAL( s3nameChanged(const QString&) ), s1_3, SLOT( setText(const QString&) ) ); + connect( frets, SIGNAL( s4nameChanged(const QString&) ), s1_4, SLOT( setText(const QString&) ) ); + connect( frets, SIGNAL( s5nameChanged(const QString&) ), s1_5, SLOT( setText(const QString&) ) ); + connect( frets, SIGNAL( s6nameChanged(const QString&) ), s1_6, SLOT( setText(const QString&) ) ); + connect( frets, SIGNAL( nameChanged(const QString&) ), chordname, SLOT( setText(const QString&) ) ); } static int known=0; #include <qmessagebox.h> void PowerchordBase::transport_rec_cb(){ chordlist->insertItem(chordname->text(),-1); if (!known){ QMessageBox::information(this, "Powerchord", "This chord has been saved\ninto the list of chords,\nfor later playback."); known = 1; } } void PowerchordBase::list_remove_cb(){ if (chordlist->count() > 0){ chordlist->removeItem(0); } } void PowerchordBase::play_chord_cb(){ // QMessageBox::information(this, "Coming soon!", "This button plays\nthe chord by synthesizing\nthe sound of the notes."); if (audio_timer){ audio_timer->stop(); // set pixmap? synth->Stop(); delete(audio_timer); audio_timer = 0; }else{ // get notes from chord engine int note; int base; int octave; note = frets->ce.noteindex(0); if (note >= 0){ // fprintf(stderr, "Note was %d\n", note); base = note % 12; octave = note / 12; synth->note_start(0, base, octave); }else{ // subtle bug here - replay second note if 1st one muted note = frets->ce.noteindex(1); base = note % 12; octave = note / 12; synth->note_start(1, base, octave); } // init synth if (synth->Play()){ // error QMessageBox::information(this, "Powerchord", "Unable to open device for sound playback - check that no other application is using it."); return; } synth->fill_buffer(); // start timer audio_timer = new QTimer(); connect(audio_timer, SIGNAL( timeout() ), this, SLOT( audio_cb() )); // set pixmap on player? audio_timer->start(19); // 19 msec (fudge factor!!) } } void PowerchordBase::audio_cb(){ // play the next bit of audio until quiet // strum timing #define INTERVAL 2 if ((synth->Frames() % INTERVAL) == 0){ int string = synth->Frames() / INTERVAL; if (string <= 5){ int note; int base; int octave; note = frets->ce.noteindex(string); // check not muted... if (note > 0){ base = note % 12; octave = note / 12; synth->note_start(string, base, octave); } } } if (synth->Playing()){ synth->write_buffer(); synth->fill_buffer(); }else{ audio_timer->stop(); // set pixmap? synth->Stop(); delete(audio_timer); audio_timer = 0; } } // the real tuner // void PowerchordBase::tuner_start_cb(){ // if (tuner->Listening()){ // simulation_timer->stop(); // tuner->Stop(); // tuner_pic1->setPixmap( *image6 ); // }else{ // tuner_pic1->setPixmap( *image_open ); // if (!simulation_timer){ // simulation_timer = new QTimer(); // connect(simulation_timer, SIGNAL( timeout() ), this, SLOT( tuner_cb() )); // } // simulation_timer->start(50); // tuner->Listen(); // } // } void PowerchordBase::tuner_cb(){ if (tuner->Listening()){ tuner->read_buffer(); tuner->process_buffer(); // update gui // do something with the note: tuner->Note() emit frequency_change(tuner->Tuning()); }else{ simulation_timer->stop(); tuner->Stop(); tuner_pic1->setPixmap( image6 ); } } void PowerchordBase::tuner_start_cb(){ if (0 == QMessageBox::information(this, "Powerchord", "Using the microphone,\nthe note's frequency\nis analysed. This\nis a simulation.", "OK", "Cancel", 0, 1)){ if (simulation_timer){ simulation_timer->stop(); }else{ simulation_timer = new QTimer(); connect(simulation_timer, SIGNAL( timeout() ), this, SLOT( tuner_simulation_cb() )); } simulation_x = -45; simulation_v = 0; simulation_iter = 0; tuner_pic1->setPixmap( image_open ); simulation_timer->start(100); } } #include <stdio.h> void PowerchordBase::tuner_simulation_cb(){ if (simulation_x < -10 || simulation_x > 10){ simulation_v = (simulation_v/2)-(simulation_x/5); } simulation_x += simulation_v; simulation_iter++; if (simulation_x > 50){ simulation_x = 50; } if (simulation_x < -50){ simulation_x = -50; } if (simulation_iter > 50){ simulation_timer->stop(); emit frequency_change(0); tuner_pic1->setPixmap( image6 ); }else{ emit frequency_change(simulation_x); } } /* * Destroys the object and frees any allocated resources */ PowerchordBase::~PowerchordBase() { // no need to delete child widgets, Qt does it all for us } void PowerchordBase::change_handler() { qWarning( "PowerchordBase::change_handler(): Not implemented yet!" ); } diff --git a/noncore/multimedia/showimg/ImageFileSelector.cpp b/noncore/multimedia/showimg/ImageFileSelector.cpp index 7872c09..d2b65a9 100644 --- a/noncore/multimedia/showimg/ImageFileSelector.cpp +++ b/noncore/multimedia/showimg/ImageFileSelector.cpp @@ -1,271 +1,271 @@ #include "qpe/global.h" #include "qpe/applnk.h" #include "qpe/lnkproperties.h" #include "qpe/applnk.h" #include "qpe/qpeapplication.h" #include <stdlib.h> #include <qdir.h> #include <qwidget.h> #include <qheader.h> #include <qimage.h> #include <qpixmap.h> #include <qlabel.h> #include <qfileinfo.h> #include <qpainter.h> #include <qscrollview.h> #include "ImageFileSelector.h" ThumbWidget::ThumbWidget(QPixmap p,QString text,const DocLnk& f,QWidget *parent,int w) : QWidget( parent ),fl(f) { setBackgroundMode(NoBackground); if ( w!=-1 ) setMinimumSize(w,p.height()+24); else setMinimumSize(p.width(),p.height()+24); description=new QLabel(text,this); description->setBackgroundColor(colorGroup().base()); description->setAlignment(AlignCenter); description->setGeometry(0,height()-24,width(),24); pixmap=p; } void ThumbWidget::resizeEvent(QResizeEvent *) { description->setGeometry(0,height()-24,width(),24); } void ThumbWidget::paintEvent( QPaintEvent *e ) { QPainter painter(this); painter.setClipRect(e->rect()); painter.fillRect(0,0,width(),height(),QColor(255,255,255)); painter.drawPixmap((width() - pixmap.width()) / 2,0, pixmap); } void ThumbWidget::mouseReleaseEvent(QMouseEvent* ) { emit clicked(fl); } ImageFileSelectorItem::ImageFileSelectorItem( QListView *parent, const DocLnk &f) : QListViewItem( parent ), fl( f ) { setText( 0, f.name() ); QFileInfo fi(f.file()); setText( 1, (fi.extension()).upper() ); setPixmap( 0, f.pixmap() ); } ImageFileSelectorItem::~ImageFileSelectorItem() { } ImageFileSelector::ImageFileSelector( CURRENT_VIEW scv,QWidget *parent,const char * ) : QWidgetStack(parent) { detailed=new QListView(this); detailed->addColumn (tr("Title")); detailed->addColumn (tr("Type")); detailed->setAllColumnsShowFocus( true ); tList.setAutoDelete(true); thumb =new QScrollView(this); thumb->setVScrollBarMode (QScrollView::Auto ); thumb->viewport()->setBackgroundColor(colorGroup().base()); background=new QWidget(0); background->setBackgroundColor(colorGroup().base()); thumb->addChild(background); gl = new QGridLayout(background,1,2,4,4); - connect( detailed, SIGNAL( mouseButtonClicked( int, QListViewItem *, const QPoint &, int ) ), - this, SLOT( fileClicked( int, QListViewItem *, const QPoint &, int ) ) ); - connect( detailed, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint &, int ) ), - this, SLOT( filePressed( int, QListViewItem *, const QPoint &, int ) ) ); - connect( detailed, SIGNAL( returnPressed( QListViewItem * ) ), - this, SLOT( fileClicked( QListViewItem * ) ) ); + connect( detailed, SIGNAL( mouseButtonClicked(int,QListViewItem*,const QPoint&,int) ), + this, SLOT( fileClicked(int,QListViewItem*,const QPoint&,int) ) ); + connect( detailed, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ), + this, SLOT( filePressed(int,QListViewItem*,const QPoint&,int) ) ); + connect( detailed, SIGNAL( returnPressed(QListViewItem*) ), + this, SLOT( fileClicked(QListViewItem*) ) ); cView=UNKNOWN; setView(scv); reread(); } ImageFileSelector::~ImageFileSelector() { } void ImageFileSelector::switchView() { CURRENT_VIEW v=cView; if ( v==DETAILED ) v=THUMBNAIL; else v=DETAILED; setView(v); } void ImageFileSelector::setView(CURRENT_VIEW v) { if ( v==cView ) return; cView=v; if ( cView!=DETAILED ) { raiseWidget(thumb); updateSizes(); } else { raiseWidget(detailed); updateSizes(); } } void ImageFileSelector::resizeEvent(QResizeEvent *) { updateSizes(); } void ImageFileSelector::updateSizes() { int ww=(detailed->width()-detailed->frameWidth()*2); double w=(double)ww*0.70; detailed->setColumnWidth(0,(int)w); detailed->setColumnWidth(1,ww-(int)w); background->setMinimumWidth(thumb->visibleWidth()); thumb->updateScrollBars(); } void ImageFileSelector::reread(bool) { // qDebug("reread"); ImageFileSelectorItem *item = (ImageFileSelectorItem *)detailed->selectedItem(); QString oldFile; if ( item ) oldFile = item->file().file(); detailed->clear(); tList.clear(); DocLnkSet files; Global::findDocuments(&files, "image/*"); count = files.children().count(); QListIterator<DocLnk> dit( files.children() ); // int y=0; // int x=4; // int totalHeight=4; ThumbWidget *l=0; int width=80; gl->expand(dit.count()/2,2); int i,j; i=j=0; detailed->setUpdatesEnabled(false); thumb->setUpdatesEnabled(false); for ( ; dit.current(); ++dit ) { item = new ImageFileSelectorItem( detailed, **dit ); if ( item->file().file() == oldFile ) detailed->setCurrentItem( item ); } QListViewItemIterator it( detailed ); ImageFileSelectorItem *ii; // iterate through all items of the listview for ( ; it.current(); ++it ) { ii=(ImageFileSelectorItem *)it.current(); QImage img( ii->file().file() ); if( !img.isNull()) { img=img.smoothScale(64,64); QPixmap pix; pix.convertFromImage(img); l=new ThumbWidget(pix,ii->file().name(),ii->file(),background,width); l->setBackgroundColor(colorGroup().base()); gl->addWidget(l,j,i); i++; if ( i==2 ) { i=0; j++; } tList.append(l); - connect(l,SIGNAL(clicked(const DocLnk &)),this,SLOT(thumbClicked(const DocLnk &))); + connect(l,SIGNAL(clicked(const DocLnk&)),this,SLOT(thumbClicked(const DocLnk&))); } } if ( !detailed->selectedItem() ) detailed->setCurrentItem( detailed->firstChild() ); detailed->setUpdatesEnabled(true); thumb->setUpdatesEnabled(true); detailed->update(); thumb->update(); } int ImageFileSelector::fileCount() { return count; } const DocLnk * ImageFileSelector::selected() { qDebug("image selected"); ImageFileSelectorItem *item = (ImageFileSelectorItem *) detailed->selectedItem(); if ( item ) return new DocLnk( item->file() ); return 0; } void ImageFileSelector::fileClicked( int button, QListViewItem *i, const QPoint &, int ) { if ( !i ) return; if ( button == Qt::LeftButton ) { fileClicked( i ); } } // pressed to get 'right down' void ImageFileSelector::filePressed( int, QListViewItem *, const QPoint &, int ) { } void ImageFileSelector::fileClicked( QListViewItem *i) { if ( !i ) return; emit fileSelected( ( (ImageFileSelectorItem*)i )->file() ); emit closeMe(); } void ImageFileSelector::thumbClicked(const DocLnk &f) { emit fileSelected( f ); emit closeMe(); } diff --git a/noncore/multimedia/showimg/showimg.cpp b/noncore/multimedia/showimg/showimg.cpp index ba76e57..02a1d91 100644 --- a/noncore/multimedia/showimg/showimg.cpp +++ b/noncore/multimedia/showimg/showimg.cpp @@ -1,696 +1,696 @@ /********************************************************************** ** 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. ** **********************************************************************/ // // Full-screen and rotation options contributed by Robert Wittams <robert@wittams.com> // #include "showimg.h" #include "ImageFileSelector.h" #include "settingsdialog.h" #include <opie/ofiledialog.h> #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <qpe/resource.h> #include <qpe/fileselector.h> #include <qpe/applnk.h> #include <qfileinfo.h> #include <math.h> #include <qmenubar.h> #include <qwidgetstack.h> #include <qpe/qpetoolbar.h> #include <qaction.h> #include <qfiledialog.h> #include <qmessagebox.h> #include <qpopupmenu.h> #include <qscrollview.h> #include <qlabel.h> #include <qpainter.h> #include <qkeycode.h> #include <qapplication.h> #include <qclipboard.h> #include <qtimer.h> #include <qspinbox.h> ControlsDialog::ControlsDialog(const QString &caption,QImage image,int *brightness,QWidget *parent) : QDialog(parent,0,true) { setCaption(caption); if ( parent ) { setPalette(parent->palette()); } b=brightness; img=image; setMinimumSize(140,80); QGridLayout *gl= new QGridLayout(this,2,2,4,4); pixmap =new ImageWidget(this);; QPixmap pm; pm.convertFromImage(img); pixmap->setPixmap(pm); pixmap->setMinimumSize(pm.width(),pm.height()); gl->addMultiCellWidget(pixmap,0,0,0,2,AlignCenter); QLabel *l=new QLabel(tr("Brightness")+":",this); gl->addWidget(l,1,0,AlignLeft); spb=new QSpinBox(-100,100,2,this); gl->addWidget(spb,1,1,AlignRight); spb->setValue(0); connect(spb,SIGNAL(valueChanged(int)),this, SLOT(bValueChanged(int))); } void ControlsDialog::bValueChanged(int value) { QImage nImage=img; nImage.detach(); ImageViewer::intensity(nImage, (float)value/100); QPixmap pm; pm.convertFromImage(nImage); pixmap->setPixmap(pm); pixmap->repaint(false); } void ControlsDialog::accept() { *b=spb->value(); done(1); } //=========================================================================== InfoDialog::InfoDialog(const QString &caption, const QStringList text,QWidget *parent) : QDialog(parent,0,true) { setCaption(caption); if ( parent ) { setPalette(parent->palette()); } QString labels[]={ tr("File Name"),tr("Format"),tr("File Size"),tr("Size"),tr("Colors"),tr("Alpha") }; setMinimumSize(180,80); int num=ImageViewer::LAST+1; if ( text[ImageViewer::ALPHA].isEmpty() ) num--; QGridLayout *gl= new QGridLayout(this,num,2,4,2); QLabel *l; int count=0; for ( int i=0;i<num;i++ ) { if ( i==1 ) { QFrame *frm=new QFrame(this); frm->setFrameStyle(QFrame::HLine|QFrame::Sunken); gl->addMultiCellWidget(frm,i,i,0,1); } else { l=new QLabel( tr( labels[count] )+":",this); gl->addWidget(l,i,0,AlignLeft); l=new QLabel(text[count],this); gl->addWidget(l,i,1,AlignRight); count++; } } } void InfoDialog::displayInfo(const QString &caption, const QStringList text, QWidget *parent) { InfoDialog *dlg=new InfoDialog(caption,text,parent); dlg->exec(); delete dlg; } //=========================================================================== ImagePane::ImagePane( QWidget *parent ) : QWidget( parent ) { vb = new QVBoxLayout( this ); image = new QScrollView(this,0,WResizeNoErase|WNorthWestGravity); pic=new ImageWidget(image); image->addChild(pic); connect(pic, SIGNAL( clicked() ), this, SLOT( imageClicked() )); vb->addWidget( image ); } void ImagePane::setPixmap( const QPixmap &pm ) { pic->setPixmap( pm ); pic->resize(pm.width(),pm.height()); image->updateScrollBars (); pic->repaint(false); } void ImagePane::imageClicked() { emit clicked(); } //=========================================================================== /* Draws the portion of the scaled pixmap that needs to be updated */ void ImageWidget::paintEvent( QPaintEvent *e ) { QPainter painter(this); painter.setClipRect(e->rect()); painter.fillRect(0,0,width(),height(),QColor(0,0,0)); if ( pixmap.size() != QSize( 0, 0 ) ) { // is an image loaded? painter.drawPixmap((width() - pixmap.width()) / 2, (height() - pixmap.height()) / 2, pixmap); } } void ImageWidget::mouseReleaseEvent(QMouseEvent *) { emit clicked(); } //=========================================================================== ImageViewer::ImageViewer( QWidget *parent, const char *name, int wFlags ) : QMainWindow( parent, name, WResizeNoErase ), filename( 0 ), bFromDocView( FALSE ) { setCaption( tr("Image Viewer") ); setIcon( Resource::loadPixmap( "ImageViewer" ) ); Config cfg("Image Viewer"); cfg.setGroup("Image Viewer"); showThumbView=cfg.readBoolEntry("ShowThumbnails",false); isSized=cfg.readBoolEntry("SizeToScreen",true); isFullScreen = FALSE; setToolBarsMovable( FALSE ); toolBar = new QToolBar( this ); toolBar->setHorizontalStretchable( TRUE ); menuBar = new QMenuBar( toolBar ); current=menuBar; fileMenuFile = new QPopupMenu(this); //menuBarmenubarFile->insertItem( tr("File"), fileMenu ); fileMenuFile->insertItem(tr("Open"), this, SLOT(openFile()), 0); viewMenuFile = new QPopupMenu( this ); //menubarFile->insertItem( tr("View"), viewMenu ); viewMenuFile->insertItem( tr("Thumbnail View"), this, SLOT(switchThumbView()), 0, SHOW_THUMBNAILS ); viewMenuFile->setItemChecked ( SHOW_THUMBNAILS, showThumbView ); optionsMenuFile = new QPopupMenu( this); //menubarFile->insertItem( tr("Options"),optionsMenu ); slideAction = new QAction( tr( "Slide show" ), Resource::loadIconSet( "slideshow" ), QString::null, 0, this, 0 ); slideAction->setToggleAction( TRUE ); connect( slideAction, SIGNAL( toggled(bool) ), this, SLOT( slideShow(bool) ) ); slideAction->addTo( optionsMenuFile); // slideAction->addTo( toolBar ); // optionsMenuFile->insertItem( tr("Slideshow") ); optionsMenuFile->insertSeparator(); optionsMenuFile->insertItem( tr("Preferences.."), this, SLOT(settings()), 0); // optionsMenuFile->insertItem( tr("Help"), this, SLOT(help()), 0); QStrList fmt = QImage::outputFormats(); fileMenuView = new QPopupMenu( this ); //menubarView->insertItem( tr("File"),fileMenu ); fileMenuView->insertItem( tr("Image Info ..."),this, SLOT(displayInfoDialog()),0 ); fileMenuView->insertSeparator(); viewMenuView = new QPopupMenu(this ); viewMenuView->setCheckable ( true ); //menubarView->insertItem( tr("View"),viewMenu ); viewMenuView->insertItem(tr("Horizontal flip"), this, SLOT(hFlip()), 0); viewMenuView->insertItem(tr("Vertical flip"), this, SLOT(vFlip()), 0); stack = new QWidgetStack( this ); stack->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) ); setCentralWidget( stack ); imagePanel = new ImagePane( stack ); connect(imagePanel, SIGNAL(clicked()), this, SLOT(normalView())); ImageFileSelector::CURRENT_VIEW cv; if(showThumbView) cv=ImageFileSelector::THUMBNAIL; else cv=ImageFileSelector::DETAILED; qDebug("cv = %d",cv); fileSelector = new ImageFileSelector( cv,stack, "fs"); //switchThumbView(); //fileSelector = new ImageFileSelector("image/*", stack, "fs"); //fileSelector->setNewVisible(FALSE); //fileSelector->setCloseVisible(FALSE); connect( fileSelector, SIGNAL( closeMe() ), this, SLOT( closeFileSelector() ) ); - connect( fileSelector, SIGNAL( fileSelected( const DocLnk &) ), - this, SLOT( openFile( const DocLnk & ) ) ); + connect( fileSelector, SIGNAL( fileSelected(const DocLnk&) ), + this, SLOT( openFile(const DocLnk&) ) ); imageList = fileSelector->fileList(); slideAction->setEnabled( imageList.count() != 0); iconToolBar = new QToolBar(this); QAction *a; a = new QAction( tr( "Open ..." ), Resource::loadPixmap( "fileopen" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( open() ) ); a->addTo( fileMenuView); a->addTo( iconToolBar ); a = new QAction( tr( "Rotate 90"), Resource::loadPixmap( "rotate90" ), QString::null, 0, this, 0); connect( a, SIGNAL( activated() ), this, SLOT( rot90() ) ); a->addTo( iconToolBar ); a->addTo( viewMenuView ); a = new QAction( tr( "Rotate 180" ), Resource::loadPixmap( "repeat" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( rot180() ) ); a->addTo( iconToolBar ); a->addTo( viewMenuView ); a = new QAction( tr( "Rotate 270"), Resource::loadPixmap( "rotate270" ), QString::null, 0, this, 0); connect( a, SIGNAL( activated() ), this, SLOT( rot270() ) ); //a->addTo( iconToolBar ); a->addTo( viewMenuView ); viewMenuView->insertSeparator(); viewMenuView->insertItem(tr("Brightness ..."), this, SLOT(displayControlsDialog()), 0); viewMenuView->insertItem(tr("Black And White"), this, SLOT(blackAndWhite()), 0,BLACKANDWHITE); viewMenuView->insertSeparator(); sss = new QAction( tr( "Scale to Screen"), Resource::loadPixmap( "scale" ), QString::null, 0, this, 0,true); connect( sss, SIGNAL( activated() ), this, SLOT( switchSizeToScreen() ) ); sss->addTo( iconToolBar ); sss->addTo( viewMenuView ); sss->setOn(isSized); viewMenuView->insertSeparator(); a = new QAction( tr( "Fullscreen" ), Resource::loadPixmap( "fullscreen" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( fullScreen() ) ); a->addTo( iconToolBar ); a->addTo( viewMenuView); a = new QAction( tr( "Stop Slideshow" ), Resource::loadPixmap( "quit_icon" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( stopSlideShow() ) ); a->addTo( iconToolBar ); a->addTo( viewMenuView); Config config( "ImageViewer" ); config.setGroup( "SlideShow" ); slideDelay = config.readNumEntry( "Delay", 2); slideRepeat = config.readBoolEntry( "Repeat", FALSE ); slideReverse = config.readBoolEntry("Reverse", FALSE); config.setGroup("Default"); rotateOnLoad = config.readBoolEntry("Rotate", FALSE); fastLoad = config.readBoolEntry("FastLoad", TRUE); slideTimer = new QTimer( this ); connect( slideTimer, SIGNAL(timeout()), this, SLOT(slideUpdate()) ); switchToFileSelector(); setMouseTracking( TRUE ); } ImageViewer::~ImageViewer() { Config cfg("Image Viewer"); cfg.setGroup("Image Viewer"); cfg.writeEntry("ShowThumbnails",(int)showThumbView); cfg.writeEntry("SizeToScreen",(int)isSized); cfg.setGroup( "SlideShow" ); cfg.writeEntry( "Delay", slideDelay); cfg.writeEntry( "Repeat", slideRepeat ); cfg.writeEntry("Reverse", slideReverse); cfg.setGroup("Default"); cfg.writeEntry("Rotate", rotateOnLoad); cfg.writeEntry("FastLoad", fastLoad); delete imagePanel; // in case it is fullscreen } void ImageViewer::help() { } void ImageViewer::settings() { SettingsDialog dlg( this, 0, TRUE ); dlg.setDelay( slideDelay ); dlg.setRepeat( slideRepeat ); dlg.setReverse( slideReverse ); dlg.setRotate(rotateOnLoad); dlg.setFastLoad(fastLoad); if ( QPEApplication::execDialog(&dlg) == QDialog::Accepted ) { qDebug("<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>"); slideDelay = dlg.delay(); slideRepeat = dlg.repeat(); slideReverse = dlg.reverse(); rotateOnLoad = dlg.rotate(); fastLoad = dlg.fastLoad(); Config config( "ImageViewer" ); config.setGroup( "SlideShow" ); config.writeEntry( "Delay", slideDelay ); config.writeEntry( "Repeat", slideRepeat ); config.writeEntry("Reverse", slideReverse); config.setGroup("Default"); config.writeEntry("Rotate", rotateOnLoad); config.writeEntry("FastLoad", fastLoad); } } void ImageViewer::switchSizeToScreen() { isSized=!isSized; sss->setOn(isSized); updateImage(); } void ImageViewer::updateImage() { if ( isSized ) { imagePanel->setPixmap(pmScaled); } else { imagePanel->setPixmap(pm); } } void ImageViewer::switchThumbView() { showThumbView=!showThumbView; viewMenuFile->setItemChecked ( SHOW_THUMBNAILS, showThumbView ); fileSelector->switchView(); } void ImageViewer::switchToFileSelector() { stack->raiseWidget(fileSelector); menuBar->clear(); menuBar->insertItem( tr("File"), fileMenuFile ); menuBar->insertItem( tr("View"), viewMenuFile ); menuBar->insertItem( tr("Options"), optionsMenuFile ); iconToolBar->hide(); imagePanel->disable(); slideShow(false); } void ImageViewer::switchToImageView() { stack->raiseWidget(imagePanel); menuBar->clear(); menuBar->insertItem( tr("File"), fileMenuView ); menuBar->insertItem( tr("View"), viewMenuView ); viewMenuView->setItemEnabled(BLACKANDWHITE,true); iconToolBar->show(); imagePanel->setPosition(0,0); } void ImageViewer::setDocument(const QString& fileref) { delayLoad = fileref; switchToImageView(); QTimer::singleShot( 0, this, SLOT(doDelayedLoad()) ); } void ImageViewer::doDelayedLoad() { show(delayLoad); } void ImageViewer::show() { normalView(); QMainWindow::show(); } void ImageViewer::show(const QString& fileref) { // qDebug("Show "+fileref); bFromDocView = TRUE; closeFileSelector(); DocLnk link(fileref); if ( link.isValid() ) { openFile(link); } else { filename = fileref; updateCaption( fileref ); loadImage( fileref ); } } void ImageViewer::openFile() { MimeTypes types; QStringList image; image << "image/*"; types.insert("Images", image); QString str = OFileDialog::getOpenFileName( 1,QPEApplication::documentDir(),"", types, 0 ); DocLnk link(str); // if ( link.isValid() ) openFile(link); } void ImageViewer::openFile( const DocLnk &link ) { closeFileSelector(); // DocLnk link(file); qDebug("open "+link.name()); updateCaption( link.name() ); loadImage( link.file() ); if (slideTimer->isActive()) { slideTimer->start(slideDelay * 1000, FALSE); } } void ImageViewer::open() { switchToFileSelector(); } void ImageViewer::closeFileSelector() { switchToImageView(); } void ImageViewer::updateCaption( QString name ) { int sep = name.findRev( '/' ); if ( sep >= 0 ) name = name.mid( sep+1 ); setCaption( name + tr(" - Image Viewer") ); } /* This function loads an image from a file. */ void ImageViewer::loadImage( const char *fileName ) { filename = fileName; if ( filename ) { QApplication::setOverrideCursor( waitCursor ); // this might take time //imagePanel->statusLabel()->setText( tr("Loading image...") ); qApp->processEvents(); bool ok = image.load(filename, 0); if ( ok ) { ok = reconvertImage(); updateImageInfo(filename); } if ( !ok ) { pm.resize(0,0); // couldn't load image update(); } QApplication::restoreOverrideCursor(); // restore original cursor } // fastLoad ? ", Fast" : "", // fastLoad ? QMAX(imagewidth/maxsize, imageheight/maxsize) : 1); // matrix.reset(); rotated90 = FALSE; if (rotateOnLoad) { rotated90 = TRUE; rot90(); // matrix.rotate( -90.0 ); } switchToImageView(); updateImage(); } bool ImageViewer::loadSelected() { bool ok = false; if ( stack->visibleWidget() == fileSelector ) { const DocLnk *link = fileSelector->selected(); if ( link ) { if ( link->file() != filename ) { updateCaption( link->name() ); filename = link->file(); qApp->processEvents(); ok = image.load(filename, 0); if ( ok ) { updateImageInfo(filename); ok = reconvertImage(); } if ( !ok ) pm.resize(0,0); } } } if ( !image.isNull() ) { ok = true; closeFileSelector(); } return ok; } bool ImageViewer::reconvertImage() { bool success = FALSE; if ( image.isNull() ) return FALSE; QApplication::setOverrideCursor( waitCursor ); // this might take time if ( pm.convertFromImage(image /*, conversion_flags */ ) ) { pmScaled = QPixmap(); scale(); success = TRUE; // load successful } else { pm.resize(0,0); // couldn't load image } QApplication::restoreOverrideCursor(); // restore original cursor return success; // TRUE if loaded OK } int ImageViewer::calcHeight() { if ( !isFullScreen ) return imagePanel->paneHeight(); else return qApp->desktop()->height(); } /* This functions scales the pixmap in the member variable "pm" to fit the widget size and puts the resulting pixmap in the member variable "pmScaled". */ void ImageViewer::scale() { int h = calcHeight(); if ( image.isNull() ) return; QApplication::setOverrideCursor( waitCursor ); // this might take time if ( imagePanel->paneWidth() == pm.width() && h == pm.height() ) { // no need to scale if widget pmScaled = pm; // size equals pixmap size } else { double hs = (double)h / (double)image.height(); diff --git a/noncore/net/linphone/qlinphone.cpp b/noncore/net/linphone/qlinphone.cpp index 3cc2ebc..ba4ee5f 100644 --- a/noncore/net/linphone/qlinphone.cpp +++ b/noncore/net/linphone/qlinphone.cpp @@ -1,210 +1,210 @@ /*************************************************************************** qlinphone.cpp - description ------------------- begin : sam mai 24 2003 copyright : (C) 2003 by Simon Morlat, 2004 Maximilian Reiss email : simon.morlat@linphone.org, harlekin@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 "qlinphone.h" #include <qlineedit.h> #include <qlabel.h> #include <qwidget.h> #include <qslider.h> #include <qtabwidget.h> #include <qcheckbox.h> #include <qmessagebox.h> #include <qpe/config.h> #include <qpe/qpeapplication.h> #include <linphonecore.h> extern "C" { static void stub(LinphoneCore*lc, char*msg) {} static void qt_show(LinphoneCore *lc) { QLinphoneMainWidget *w=(QLinphoneMainWidget*)lc->data; w->pushGuiTask(new ShowTask(w)); } static void qt_inv_recv(LinphoneCore *lc, char *from) { QLinphoneMainWidget *w=(QLinphoneMainWidget*)lc->data; QString tmp(from); w->pushGuiTask(new InviteReceivedTask(w,tmp)); } static void qt_display_status(LinphoneCore *lc, char *status) { QLinphoneMainWidget *w=(QLinphoneMainWidget*)lc->data; QString tmp(status); w->pushGuiTask(new UpdateStatusBarTask(w,tmp)); } static void qt_display_message(LinphoneCore *lc, char *message) { QString qmsg(message); QLinphoneMainWidget *w=(QLinphoneMainWidget*)lc->data; w->pushGuiTask(new DisplayMessageTask(w,qmsg,DisplayMessageTask::Info)); } static void qt_display_warning(LinphoneCore *lc, char *message) { QLinphoneMainWidget *w=(QLinphoneMainWidget*)lc->data; QString qmsg(message); w->pushGuiTask(new DisplayMessageTask(w,qmsg,DisplayMessageTask::Warn)); } static void qt_display_url(LinphoneCore *lc, char *message, char *url) { QLinphoneMainWidget *w=(QLinphoneMainWidget*)lc->data; QString qmsg=QString(message)+QString(url); w->pushGuiTask(new DisplayMessageTask(w,qmsg,DisplayMessageTask::Info)); } static void qt_notify_recv(LinphoneCore *lc, const char *url, const char *status) { } LinphoneCoreVTable lcvtable={ show: qt_show, inv_recv: qt_inv_recv, bye_recv : stub, notify_recv : qt_notify_recv, display_status : qt_display_status, display_message : qt_display_message, display_warning : qt_display_warning, display_url : qt_display_url, display_question : stub }; } //extern "C" void UpdateStatusBarTask::execute() { static_cast<QLinphoneMainWidget*>(_w)->displayStatus(_msg); } void InviteReceivedTask::execute() { static_cast<QLinphoneMainWidget*>(_w)->inviteReceived(_msg); } void DisplayMessageTask::execute() { switch(_msgtype) { case Info: QMessageBox::information(0,QObject::tr("Information"),_msg); break; case Warn: QMessageBox::warning(0,QObject::tr("Warning"),_msg); break; } } QLinphoneMainWidget::QLinphoneMainWidget(QWidget* parent , const char* name , WFlags fl ) : _QLinphoneMainWidget( parent, name, fl ) { readConfig(); createLinphoneCore(); - connect( CheckBox1, SIGNAL( toggled( bool ) ), this, SLOT( slotHide( bool ) ) ); + connect( CheckBox1, SIGNAL( toggled(bool) ), this, SLOT( slotHide(bool) ) ); CheckBox1->setChecked( true ); } QLinphoneMainWidget::~QLinphoneMainWidget() { linphone_core_destroy(_core); writeConfig(); } void QLinphoneMainWidget::slotHide( bool show ) { if ( show ) { TabWidget2->show(); } else { TabWidget2->hide(); } } void QLinphoneMainWidget::callOrAccept() { if (linphone_core_inc_invite_pending(_core)) { linphone_core_accept_dialog(_core,NULL); return; } QString url=sip_url->text(); linphone_core_invite(_core,(char*)url.ascii()); } void QLinphoneMainWidget::terminateCall() { linphone_core_terminate_dialog(_core,NULL); } void QLinphoneMainWidget::inviteReceived(QString &tmp) { sip_url->setText(tmp); } void QLinphoneMainWidget::displayStatus(QString &msg) { status_bar->setText(msg); } void QLinphoneMainWidget::pushGuiTask(GuiTask* g) { _mutex.lock(); _actionq.enqueue(g); _mutex.unlock(); printf("New action added to task list.\n"); } void QLinphoneMainWidget::processGuiTasks() { GuiTask *g; _mutex.lock(); while(!_actionq.isEmpty()) { g=_actionq.dequeue(); printf("Executing action...\n"); g->execute(); delete g; } _mutex.unlock(); } void QLinphoneMainWidget::timerEvent(QTimerEvent *t) { processGuiTasks(); } void QLinphoneMainWidget::readConfig() { Config cfg( "opie-phone" ); cfg.setGroup( "audio" ); SliderInput->setValue( cfg.readNumEntry( "rec_lev", 50 ) ); SliderOutput->setValue( cfg.readNumEntry( "play_lev", 50 ) ); } void QLinphoneMainWidget::writeConfig() { Config cfg( "opie-phone" ); cfg.setGroup( "audio" ); cfg.writeEntry( "rec_lev", SliderInput->value() ); cfg.writeEntry( "playlev", SliderOutput->value() ); } void QLinphoneMainWidget::helpAbout() { QMessageBox::about(this,tr("About Linphone"),tr("QT version of linphone\nJuly 2003 - Made in old Europe.")); } void QLinphoneMainWidget::createLinphoneCore() { if ( _core ) { linphone_core_destroy(_core); } gchar *home=getenv("HOME"); gchar *suffix="/Settings/opie-phone.conf"; if (home==0) home=strdup("/root"); gchar *config=new char[strlen(home)+strlen(suffix)+2]; sprintf(config,"%s/%s",home,suffix); /* tracing for osip */ TRACE_INITIALIZE((trace_level_t)5,stdout); _core=linphone_core_new(&lcvtable,config,(gpointer)this); delete [] config; startTimer(10); } diff --git a/noncore/net/mail/accountview.cpp b/noncore/net/mail/accountview.cpp index c2185f2..64557ee 100644 --- a/noncore/net/mail/accountview.cpp +++ b/noncore/net/mail/accountview.cpp @@ -1,170 +1,170 @@ #include "accountview.h" #include "accountitem.h" #include "selectstore.h" /* OPIE */ #include <libmailwrapper/settings.h> #include <libmailwrapper/mailwrapper.h> #include <libmailwrapper/mailtypes.h> #include <libmailwrapper/abstractmail.h> #include <qpe/qpeapplication.h> /* QT */ #include <qmessagebox.h> #include <qpopupmenu.h> AccountView::AccountView( QWidget *parent, const char *name, WFlags flags ) : QListView( parent, name, flags ) { - connect( this, SIGNAL( selectionChanged( QListViewItem * ) ), - SLOT( refresh( QListViewItem * ) ) ); - connect( this, SIGNAL( mouseButtonPressed(int, QListViewItem *,const QPoint&,int ) ),this, - SLOT( slotHold( int, QListViewItem *,const QPoint&,int ) ) ); + connect( this, SIGNAL( selectionChanged(QListViewItem*) ), + SLOT( refresh(QListViewItem*) ) ); + connect( this, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),this, + SLOT( slotHold(int,QListViewItem*,const QPoint&,int) ) ); setSorting(0); } AccountView::~AccountView() { imapAccounts.clear(); mhAccounts.clear(); } void AccountView::slotContextMenu(int id) { AccountViewItem *view = static_cast<AccountViewItem *>(currentItem()); if (!view) return; view->contextMenuSelected(id); } void AccountView::slotHold(int button, QListViewItem * item,const QPoint&,int) { if (button==1) {return;} if (!item) return; AccountViewItem *view = static_cast<AccountViewItem *>(item); QPopupMenu*m = view->getContextMenu(); if (!m) return; connect(m,SIGNAL(activated(int)),this,SLOT(slotContextMenu(int))); m->setFocus(); m->exec( QPoint( QCursor::pos().x(), QCursor::pos().y()) ); delete m; } void AccountView::populate( QList<Account> list ) { clear(); imapAccounts.clear(); mhAccounts.clear(); mhAccounts.append(new MHviewItem(AbstractMail::defaultLocalfolder(),this)); Account *it; for ( it = list.first(); it; it = list.next() ) { if ( it->getType().compare( "IMAP" ) == 0 ) { IMAPaccount *imap = static_cast<IMAPaccount *>(it); qDebug( "added IMAP " + imap->getAccountName() ); imapAccounts.append(new IMAPviewItem( imap, this )); } else if ( it->getType().compare( "POP3" ) == 0 ) { POP3account *pop3 = static_cast<POP3account *>(it); qDebug( "added POP3 " + pop3->getAccountName() ); /* must not be hold 'cause it isn't required */ (void) new POP3viewItem( pop3, this ); } else if ( it->getType().compare( "NNTP" ) == 0 ) { NNTPaccount *nntp = static_cast<NNTPaccount *>(it); qDebug( "added NNTP " + nntp->getAccountName() ); /* must not be hold 'cause it isn't required */ (void) new NNTPviewItem( nntp, this ); } } } void AccountView::refresh(QListViewItem *item) { qDebug("AccountView refresh..."); if ( item ) { m_currentItem = item; QList<RecMail> headerlist; headerlist.setAutoDelete(true); AccountViewItem *view = static_cast<AccountViewItem *>(item); view->refresh(headerlist); emit refreshMailview(&headerlist); } } void AccountView::refreshCurrent() { m_currentItem = currentItem(); if ( !m_currentItem ) return; QList<RecMail> headerlist; headerlist.setAutoDelete(true); AccountViewItem *view = static_cast<AccountViewItem *>(m_currentItem); view->refresh(headerlist); emit refreshMailview(&headerlist); } void AccountView::refreshAll() { } RecBody AccountView::fetchBody(const RecMail&aMail) { QListViewItem*item = selectedItem (); if (!item) return RecBody(); AccountViewItem *view = static_cast<AccountViewItem *>(item); return view->fetchBody(aMail); } void AccountView::setupFolderselect(Selectstore*sels) { QPEApplication::showDialog( sels ); QStringList sFolders; unsigned int i = 0; for (i=0; i < mhAccounts.count();++i) { mhAccounts[i]->refresh(false); sFolders = mhAccounts[i]->subFolders(); sels->addAccounts(mhAccounts[i]->getWrapper(),sFolders); } for (i=0; i < imapAccounts.count();++i) { if (imapAccounts[i]->offline()) continue; imapAccounts[i]->refreshFolders(false); sels->addAccounts(imapAccounts[i]->getWrapper(),imapAccounts[i]->subFolders()); } } void AccountView::downloadMails(Folder*fromFolder,AbstractMail*fromWrapper) { AbstractMail*targetMail = 0; QString targetFolder = ""; Selectstore sels; setupFolderselect(&sels); if (!sels.exec()) return; targetMail = sels.currentMail(); targetFolder = sels.currentFolder(); if ( (fromWrapper==targetMail && fromFolder->getName()==targetFolder) || targetFolder.isEmpty()) { return; } if (sels.newFolder() && !targetMail->createMbox(targetFolder)) { QMessageBox::critical(0,tr("Error creating new Folder"), tr("<center>Error while creating<br>new folder - breaking.</center>")); return; } qDebug("Targetfolder: %s",targetFolder.latin1()); qDebug("Fromfolder: %s",fromFolder->getName().latin1()); fromWrapper->mvcpAllMails(fromFolder,targetFolder,targetMail,sels.moveMails()); refreshCurrent(); } diff --git a/noncore/net/mail/composemail.cpp b/noncore/net/mail/composemail.cpp index 6708779..f51a8fe 100644 --- a/noncore/net/mail/composemail.cpp +++ b/noncore/net/mail/composemail.cpp @@ -1,240 +1,240 @@ #include <qt.h> #include <opie2/ofiledialog.h> #include <qpe/resource.h> #include <qpe/config.h> #include <qpe/global.h> #include <qpe/contact.h> #include "composemail.h" #include <libmailwrapper/smtpwrapper.h> ComposeMail::ComposeMail( Settings *s, QWidget *parent, const char *name, bool modal, WFlags flags ) : ComposeMailUI( parent, name, modal, flags ) { settings = s; QString vfilename = Global::applicationFileName("addressbook", "businesscard.vcf"); Contact c; if (QFile::exists(vfilename)) { c = Contact::readVCard( vfilename )[0]; } QStringList mails = c.emailList(); QString defmail = c.defaultEmail(); if (defmail.length()!=0) { fromBox->insertItem(defmail); } QStringList::ConstIterator sit = mails.begin(); for (;sit!=mails.end();++sit) { if ( (*sit)==defmail) continue; fromBox->insertItem((*sit)); } senderNameEdit->setText(c.firstName()+" "+c.lastName()); Config cfg( "mail" ); cfg.setGroup( "Compose" ); checkBoxLater->setChecked( cfg.readBoolEntry( "sendLater", false ) ); attList->addColumn( tr( "Name" ) ); attList->addColumn( tr( "Size" ) ); QList<Account> accounts = settings->getAccounts(); Account *it; for ( it = accounts.first(); it; it = accounts.next() ) { if ( it->getType().compare( "SMTP" ) == 0 ) { SMTPaccount *smtp = static_cast<SMTPaccount *>(it); smtpAccountBox->insertItem( smtp->getAccountName() ); smtpAccounts.append( smtp ); } } if ( smtpAccounts.count() > 0 ) { fillValues( smtpAccountBox->currentItem() ); } else { QMessageBox::information( this, tr( "Problem" ), tr( "<p>Please create an SMTP account first.</p>" ), tr( "Ok" ) ); return; } - connect( smtpAccountBox, SIGNAL( activated( int ) ), SLOT( fillValues( int ) ) ); + connect( smtpAccountBox, SIGNAL( activated(int) ), SLOT( fillValues(int) ) ); connect( toButton, SIGNAL( clicked() ), SLOT( pickAddressTo() ) ); connect( ccButton, SIGNAL( clicked() ), SLOT( pickAddressCC() ) ); connect( bccButton, SIGNAL( clicked() ), SLOT( pickAddressBCC() ) ); connect( replyButton, SIGNAL( clicked() ), SLOT( pickAddressReply() ) ); connect( addButton, SIGNAL( clicked() ), SLOT( addAttachment() ) ); connect( deleteButton, SIGNAL( clicked() ), SLOT( removeAttachment() ) ); } void ComposeMail::pickAddress( QLineEdit *line ) { QString names = AddressPicker::getNames(); if ( line->text().isEmpty() ) { line->setText( names ); } else if ( !names.isEmpty() ) { line->setText( line->text() + ", " + names ); } } void ComposeMail::setTo( const QString & to ) { /* QString toline; QStringList toEntry = to; for ( QStringList::Iterator it = toEntry.begin(); it != toEntry.end(); ++it ) { toline += (*it); } toLine->setText( toline ); */ toLine->setText( to ); } void ComposeMail::setSubject( const QString & subject ) { subjectLine->setText( subject ); } void ComposeMail::setInReplyTo( const QString & messageId ) { } void ComposeMail::setMessage( const QString & text ) { message->setText( text ); } void ComposeMail::pickAddressTo() { pickAddress( toLine ); } void ComposeMail::pickAddressCC() { pickAddress( ccLine ); } void ComposeMail::pickAddressBCC() { pickAddress( bccLine ); } void ComposeMail::pickAddressReply() { pickAddress( replyLine ); } void ComposeMail::fillValues( int current ) { #if 0 SMTPaccount *smtp = smtpAccounts.at( current ); ccLine->clear(); if ( smtp->getUseCC() ) { ccLine->setText( smtp->getCC() ); } bccLine->clear(); if ( smtp->getUseBCC() ) { bccLine->setText( smtp->getBCC() ); } replyLine->clear(); if ( smtp->getUseReply() ) { replyLine->setText( smtp->getReply() ); } sigMultiLine->setText( smtp->getSignature() ); #endif } void ComposeMail::slotAdjustColumns() { int currPage = tabWidget->currentPageIndex(); tabWidget->showPage( attachTab ); attList->setColumnWidth( 0, attList->visibleWidth() - 80 ); attList->setColumnWidth( 1, 80 ); tabWidget->setCurrentPage( currPage ); } void ComposeMail::addAttachment() { DocLnk lnk = Opie::OFileDialog::getOpenFileName( 1, "/" ); if ( !lnk.name().isEmpty() ) { Attachment *att = new Attachment( lnk ); (void) new AttachViewItem( attList, att ); } } void ComposeMail::removeAttachment() { if ( !attList->currentItem() ) { QMessageBox::information( this, tr( "Error" ), tr( "<p>Please select a File.</p>" ), tr( "Ok" ) ); } else { attList->takeItem( attList->currentItem() ); } } void ComposeMail::accept() { if ( checkBoxLater->isChecked() ) { qDebug( "Send later" ); } #if 0 qDebug( "Sending Mail with " + smtpAccounts.at( smtpAccountBox->currentItem() )->getAccountName() ); #endif Mail *mail = new Mail(); SMTPaccount *smtp = smtpAccounts.at( smtpAccountBox->currentItem() ); mail->setMail(fromBox->currentText()); if ( !toLine->text().isEmpty() ) { mail->setTo( toLine->text() ); } else { qDebug( "No Reciever spezified -> returning" ); return; } mail->setName(senderNameEdit->text()); mail->setCC( ccLine->text() ); mail->setBCC( bccLine->text() ); mail->setReply( replyLine->text() ); mail->setSubject( subjectLine->text() ); QString txt = message->text(); if ( !sigMultiLine->text().isEmpty() ) { txt.append( "\n--\n" ); txt.append( sigMultiLine->text() ); } qDebug(txt); mail->setMessage( txt ); AttachViewItem *it = (AttachViewItem *) attList->firstChild(); while ( it != NULL ) { mail->addAttachment( it->getAttachment() ); it = (AttachViewItem *) it->nextSibling(); } SMTPwrapper wrapper( smtp ); wrapper.sendMail( *mail,checkBoxLater->isChecked() ); QDialog::accept(); } AttachViewItem::AttachViewItem( QListView *parent, Attachment *att ) : QListViewItem( parent ) { attachment = att; qDebug( att->getMimeType() ); setPixmap( 0, attachment->getDocLnk().pixmap().isNull() ? Resource::loadPixmap( "UnknownDocument-14" ) : attachment->getDocLnk().pixmap() ); setText( 0, att->getName().isEmpty() ? att->getFileName() : att->getName() ); setText( 1, QString::number( att->getSize() ) ); } diff --git a/noncore/net/mail/editaccounts.cpp b/noncore/net/mail/editaccounts.cpp index 60bffa5..edeb1de 100644 --- a/noncore/net/mail/editaccounts.cpp +++ b/noncore/net/mail/editaccounts.cpp @@ -1,532 +1,532 @@ #include "defines.h" #include "editaccounts.h" /* OPIE */ #include <qpe/qpeapplication.h> /* QT */ #include <qt.h> AccountListItem::AccountListItem( QListView *parent, Account *a) : QListViewItem( parent ) { account = a; setText( 0, account->getAccountName() ); setText( 1, account->getType() ); } EditAccounts::EditAccounts( Settings *s, QWidget *parent, const char *name, bool modal, WFlags flags ) : EditAccountsUI( parent, name, modal, flags ) { qDebug( "New Account Configuration Widget" ); settings = s; mailList->addColumn( tr( "Account" ) ); mailList->addColumn( tr( "Type" ) ); newsList->addColumn( tr( "Account" ) ); connect( newMail, SIGNAL( clicked() ), SLOT( slotNewMail() ) ); connect( editMail, SIGNAL( clicked() ), SLOT( slotEditMail() ) ); connect( deleteMail, SIGNAL( clicked() ), SLOT( slotDeleteMail() ) ); connect( newNews, SIGNAL( clicked() ), SLOT( slotNewNews() ) ); connect( editNews, SIGNAL( clicked() ), SLOT( slotEditNews() ) ); connect( deleteNews, SIGNAL( clicked() ), SLOT( slotDeleteNews() ) ); slotFillLists(); } void EditAccounts::slotFillLists() { mailList->clear(); newsList->clear(); QList<Account> accounts = settings->getAccounts(); Account *it; for ( it = accounts.first(); it; it = accounts.next() ) { if ( it->getType().compare( "NNTP" ) == 0 ) { (void) new AccountListItem( newsList, it ); } else { (void) new AccountListItem( mailList, it ); } } } void EditAccounts::slotNewMail() { qDebug( "New Mail Account" ); QString *selection = new QString(); SelectMailType selType( selection, this, 0, true ); selType.show(); if ( QDialog::Accepted == selType.exec() ) { slotNewAccount( *selection ); } } void EditAccounts::slotNewAccount( const QString &type ) { if ( type.compare( "IMAP" ) == 0 ) { qDebug( "-> config IMAP" ); IMAPaccount *account = new IMAPaccount(); IMAPconfig imap( account, this, 0, true ); if ( QDialog::Accepted == QPEApplication::execDialog( &imap ) ) { settings->addAccount( account ); account->save(); slotFillLists(); } else { account->remove(); } } else if ( type.compare( "POP3" ) == 0 ) { qDebug( "-> config POP3" ); POP3account *account = new POP3account(); POP3config pop3( account, this, 0, true, WStyle_ContextHelp ); if ( QDialog::Accepted == QPEApplication::execDialog( &pop3 ) ) { settings->addAccount( account ); account->save(); slotFillLists(); } else { account->remove(); } } else if ( type.compare( "SMTP" ) == 0 ) { qDebug( "-> config SMTP" ); SMTPaccount *account = new SMTPaccount(); SMTPconfig smtp( account, this, 0, true, WStyle_ContextHelp ); if ( QDialog::Accepted == QPEApplication::execDialog( &smtp ) ) { settings->addAccount( account ); account->save(); slotFillLists(); } else { account->remove(); } } else if ( type.compare( "NNTP" ) == 0 ) { qDebug( "-> config NNTP" ); NNTPaccount *account = new NNTPaccount(); NNTPconfig nntp( account, this, 0, true, WStyle_ContextHelp ); if ( QDialog::Accepted == QPEApplication::execDialog( &nntp ) ) { settings->addAccount( account ); account->save(); slotFillLists(); } else { account->remove(); } } } void EditAccounts::slotEditAccount( Account *account ) { if ( account->getType().compare( "IMAP" ) == 0 ) { IMAPaccount *imapAcc = static_cast<IMAPaccount *>(account); IMAPconfig imap( imapAcc, this, 0, true, WStyle_ContextHelp ); if ( QDialog::Accepted == QPEApplication::execDialog( &imap ) ) { slotFillLists(); } } else if ( account->getType().compare( "POP3" ) == 0 ) { POP3account *pop3Acc = static_cast<POP3account *>(account); POP3config pop3( pop3Acc, this, 0, true, WStyle_ContextHelp ); if ( QDialog::Accepted == QPEApplication::execDialog( &pop3 ) ) { slotFillLists(); } } else if ( account->getType().compare( "SMTP" ) == 0 ) { SMTPaccount *smtpAcc = static_cast<SMTPaccount *>(account); SMTPconfig smtp( smtpAcc, this, 0, true, WStyle_ContextHelp ); if ( QDialog::Accepted == QPEApplication::execDialog( &smtp ) ) { slotFillLists(); } } else if ( account->getType().compare( "NNTP" ) == 0 ) { NNTPaccount *nntpAcc = static_cast<NNTPaccount *>(account); NNTPconfig nntp( nntpAcc, this, 0, true, WStyle_ContextHelp ); if ( QDialog::Accepted == QPEApplication::execDialog( &nntp ) ) { slotFillLists(); } } } void EditAccounts::slotDeleteAccount( Account *account ) { if ( QMessageBox::information( this, tr( "Question" ), tr( "<p>Do you really want to delete the selected Account?</p>" ), tr( "Yes" ), tr( "No" ) ) == 0 ) { settings->delAccount( account ); slotFillLists(); } } void EditAccounts::slotEditMail() { qDebug( "Edit Mail Account" ); if ( !mailList->currentItem() ) { QMessageBox::information( this, tr( "Error" ), tr( "<p>Please select an account.</p>" ), tr( "Ok" ) ); return; } Account *a = ((AccountListItem *) mailList->currentItem())->getAccount(); slotEditAccount( a ); } void EditAccounts::slotDeleteMail() { if ( !mailList->currentItem() ) { QMessageBox::information( this, tr( "Error" ), tr( "<p>Please select an account.</p>" ), tr( "Ok" ) ); return; } Account *a = ((AccountListItem *) mailList->currentItem())->getAccount(); slotDeleteAccount( a ); } void EditAccounts::slotNewNews() { qDebug( "New News Account" ); slotNewAccount( "NNTP" ); } void EditAccounts::slotEditNews() { qDebug( "Edit News Account" ); if ( !newsList->currentItem() ) { QMessageBox::information( this, tr( "Error" ), tr( "<p>Please select an account.</p>" ), tr( "Ok" ) ); return; } Account *a = ((AccountListItem *) newsList->currentItem())->getAccount(); slotEditAccount( a ); } void EditAccounts::slotDeleteNews() { qDebug( "Delete News Account" ); if ( !newsList->currentItem() ) { QMessageBox::information( this, tr( "Error" ), tr( "<p>Please select an account.</p>" ), tr( "Ok" ) ); return; } Account *a = ((AccountListItem *) newsList->currentItem())->getAccount(); slotDeleteAccount( a ); } void EditAccounts::slotAdjustColumns() { int currPage = configTab->currentPageIndex(); configTab->showPage( mailTab ); mailList->setColumnWidth( 0, mailList->visibleWidth() - 50 ); mailList->setColumnWidth( 1, 50 ); configTab->showPage( newsTab ); newsList->setColumnWidth( 0, newsList->visibleWidth() ); configTab->setCurrentPage( currPage ); } void EditAccounts::accept() { settings->saveAccounts(); QDialog::accept(); } /** * SelectMailType */ SelectMailType::SelectMailType( QString *selection, QWidget *parent, const char *name, bool modal, WFlags flags ) : SelectMailTypeUI( parent, name, modal, flags ) { selected = selection; selected->replace( 0, selected->length(), typeBox->currentText() ); - connect( typeBox, SIGNAL( activated( const QString & ) ), SLOT( slotSelection( const QString & ) ) ); + connect( typeBox, SIGNAL( activated(const QString&) ), SLOT( slotSelection(const QString&) ) ); } void SelectMailType::slotSelection( const QString &sel ) { selected->replace( 0, selected->length(), sel ); } /** * IMAPconfig */ IMAPconfig::IMAPconfig( IMAPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags ) : IMAPconfigUI( parent, name, modal, flags ) { data = account; fillValues(); - connect( ComboBox1, SIGNAL( activated( int ) ), SLOT( slotConnectionToggle( int ) ) ); + connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) ); ComboBox1->insertItem( "Only if available", 0 ); ComboBox1->insertItem( "Always, Negotiated", 1 ); ComboBox1->insertItem( "Connect on secure port", 2 ); ComboBox1->insertItem( "Run command instead", 3 ); CommandEdit->hide(); ComboBox1->setCurrentItem( data->ConnectionType() ); } void IMAPconfig::slotConnectionToggle( int index ) { if ( index == 2 ) { portLine->setText( IMAP_SSL_PORT ); } else if ( index == 3 ) { portLine->setText( IMAP_PORT ); CommandEdit->show(); } else { portLine->setText( IMAP_PORT ); } } void IMAPconfig::fillValues() { accountLine->setText( data->getAccountName() ); serverLine->setText( data->getServer() ); portLine->setText( data->getPort() ); ComboBox1->setCurrentItem( data->ConnectionType() ); userLine->setText( data->getUser() ); passLine->setText( data->getPassword() ); prefixLine->setText(data->getPrefix()); } void IMAPconfig::accept() { data->setAccountName( accountLine->text() ); data->setServer( serverLine->text() ); data->setPort( portLine->text() ); data->setConnectionType( ComboBox1->currentItem() ); data->setUser( userLine->text() ); data->setPassword( passLine->text() ); data->setPrefix(prefixLine->text()); QDialog::accept(); } /** * POP3config */ POP3config::POP3config( POP3account *account, QWidget *parent, const char *name, bool modal, WFlags flags ) : POP3configUI( parent, name, modal, flags ) { data = account; fillValues(); - connect( ComboBox1, SIGNAL( activated( int ) ), SLOT( slotConnectionToggle( int ) ) ); + connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) ); ComboBox1->insertItem( "Only if available", 0 ); ComboBox1->insertItem( "Always, Negotiated", 1 ); ComboBox1->insertItem( "Connect on secure port", 2 ); ComboBox1->insertItem( "Run command instead", 3 ); CommandEdit->hide(); ComboBox1->setCurrentItem( data->ConnectionType() ); } void POP3config::slotConnectionToggle( int index ) { // 2 is ssl connection if ( index == 2 ) { portLine->setText( POP3_SSL_PORT ); } else if ( index == 3 ) { portLine->setText( POP3_PORT ); CommandEdit->show(); } else { portLine->setText( POP3_PORT ); } } void POP3config::fillValues() { accountLine->setText( data->getAccountName() ); serverLine->setText( data->getServer() ); portLine->setText( data->getPort() ); ComboBox1->setCurrentItem( data->ConnectionType() ); userLine->setText( data->getUser() ); passLine->setText( data->getPassword() ); } void POP3config::accept() { data->setAccountName( accountLine->text() ); data->setServer( serverLine->text() ); data->setPort( portLine->text() ); data->setConnectionType( ComboBox1->currentItem() ); data->setUser( userLine->text() ); data->setPassword( passLine->text() ); QDialog::accept(); } /** * SMTPconfig */ SMTPconfig::SMTPconfig( SMTPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags ) : SMTPconfigUI( parent, name, modal, flags ) { data = account; - connect( loginBox, SIGNAL( toggled( bool ) ), userLine, SLOT( setEnabled( bool ) ) ); - connect( loginBox, SIGNAL( toggled( bool ) ), passLine, SLOT( setEnabled( bool ) ) ); + connect( loginBox, SIGNAL( toggled(bool) ), userLine, SLOT( setEnabled(bool) ) ); + connect( loginBox, SIGNAL( toggled(bool) ), passLine, SLOT( setEnabled(bool) ) ); fillValues(); - connect( ComboBox1, SIGNAL( activated( int ) ), SLOT( slotConnectionToggle( int ) ) ); + connect( ComboBox1, SIGNAL( activated(int) ), SLOT( slotConnectionToggle(int) ) ); ComboBox1->insertItem( "Only if available", 0 ); ComboBox1->insertItem( "Always, Negotiated", 1 ); ComboBox1->insertItem( "Connect on secure port", 2 ); ComboBox1->insertItem( "Run command instead", 3 ); CommandEdit->hide(); ComboBox1->setCurrentItem( data->ConnectionType() ); } void SMTPconfig::slotConnectionToggle( int index ) { // 2 is ssl connection if ( index == 2 ) { portLine->setText( SMTP_SSL_PORT ); } else if ( index == 3 ) { portLine->setText( SMTP_PORT ); CommandEdit->show(); } else { portLine->setText( SMTP_PORT ); } } void SMTPconfig::fillValues() { accountLine->setText( data->getAccountName() ); serverLine->setText( data->getServer() ); portLine->setText( data->getPort() ); ComboBox1->setCurrentItem( data->ConnectionType() ); loginBox->setChecked( data->getLogin() ); userLine->setText( data->getUser() ); passLine->setText( data->getPassword() ); } void SMTPconfig::accept() { data->setAccountName( accountLine->text() ); data->setServer( serverLine->text() ); data->setPort( portLine->text() ); data->setConnectionType( ComboBox1->currentItem() ); data->setLogin( loginBox->isChecked() ); data->setUser( userLine->text() ); data->setPassword( passLine->text() ); QDialog::accept(); } /** * NNTPconfig */ NNTPconfig::NNTPconfig( NNTPaccount *account, QWidget *parent, const char *name, bool modal, WFlags flags ) : NNTPconfigUI( parent, name, modal, flags ) { data = account; - connect( loginBox, SIGNAL( toggled( bool ) ), userLine, SLOT( setEnabled( bool ) ) ); - connect( loginBox, SIGNAL( toggled( bool ) ), passLine, SLOT( setEnabled( bool ) ) ); + connect( loginBox, SIGNAL( toggled(bool) ), userLine, SLOT( setEnabled(bool) ) ); + connect( loginBox, SIGNAL( toggled(bool) ), passLine, SLOT( setEnabled(bool) ) ); fillValues(); - connect( sslBox, SIGNAL( toggled( bool ) ), SLOT( slotSSL( bool ) ) ); + connect( sslBox, SIGNAL( toggled(bool) ), SLOT( slotSSL(bool) ) ); } void NNTPconfig::slotSSL( bool enabled ) { if ( enabled ) { portLine->setText( NNTP_SSL_PORT ); } else { portLine->setText( NNTP_PORT ); } } void NNTPconfig::fillValues() { accountLine->setText( data->getAccountName() ); serverLine->setText( data->getServer() ); portLine->setText( data->getPort() ); sslBox->setChecked( data->getSSL() ); loginBox->setChecked( data->getLogin() ); userLine->setText( data->getUser() ); passLine->setText( data->getPassword() ); } void NNTPconfig::accept() { data->setAccountName( accountLine->text() ); data->setServer( serverLine->text() ); data->setPort( portLine->text() ); data->setSSL( sslBox->isChecked() ); data->setLogin( loginBox->isChecked() ); data->setUser( userLine->text() ); data->setPassword( passLine->text() ); QDialog::accept(); } diff --git a/noncore/net/mail/libmailwrapper/mhwrapper.cpp b/noncore/net/mail/libmailwrapper/mhwrapper.cpp index dfc00d8..df7f773 100644 --- a/noncore/net/mail/libmailwrapper/mhwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/mhwrapper.cpp @@ -1,445 +1,445 @@ #include "mhwrapper.h" #include "mailtypes.h" #include "mailwrapper.h" #include <libetpan/libetpan.h> #include <qdir.h> #include <qmessagebox.h> #include <stdlib.h> #include <qpe/global.h> #include <opie2/oprocess.h> const QString MHwrapper::wrapperType="MH"; MHwrapper::MHwrapper(const QString & mbox_dir,const QString&mbox_name) : Genericwrapper(),MHPath(mbox_dir),MHName(mbox_name) { if (MHPath.length()>0) { if (MHPath[MHPath.length()-1]=='/') { MHPath=MHPath.left(MHPath.length()-1); } qDebug(MHPath); QDir dir(MHPath); if (!dir.exists()) { dir.mkdir(MHPath); } init_storage(); } } void MHwrapper::init_storage() { int r; QString pre = MHPath; if (!m_storage) { m_storage = mailstorage_new(NULL); r = mh_mailstorage_init(m_storage,(char*)pre.latin1(),0,0,0); if (r != MAIL_NO_ERROR) { qDebug("error initializing storage"); mailstorage_free(m_storage); m_storage = 0; return; } } r = mailstorage_connect(m_storage); if (r!=MAIL_NO_ERROR) { qDebug("error connecting storage"); mailstorage_free(m_storage); m_storage = 0; } } void MHwrapper::clean_storage() { if (m_storage) { mailstorage_disconnect(m_storage); mailstorage_free(m_storage); m_storage = 0; } } MHwrapper::~MHwrapper() { clean_storage(); } void MHwrapper::listMessages(const QString & mailbox, QList<RecMail> &target ) { init_storage(); if (!m_storage) { return; } QString f = buildPath(mailbox); int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); if (r!=MAIL_NO_ERROR) { qDebug("listMessages: error selecting folder!"); return; } parseList(target,m_storage->sto_session,f); Global::statusMessage(tr("Mailbox has %1 mail(s)").arg(target.count())); } QList<Folder>* MHwrapper::listFolders() { QList<Folder> * folders = new QList<Folder>(); folders->setAutoDelete( false ); /* this is needed! */ if (m_storage) mailstorage_disconnect(m_storage); init_storage(); if (!m_storage) { return folders; } mail_list*flist = 0; clistcell*current=0; int r = mailsession_list_folders(m_storage->sto_session,NULL,&flist); if (r != MAIL_NO_ERROR || !flist) { qDebug("error getting folder list"); return folders; } for (current=clist_begin(flist->mb_list);current!=0;current=clist_next(current)) { QString t = (char*)current->data; t.replace(0,MHPath.length(),""); folders->append(new MHFolder(t,MHPath)); } mail_list_free(flist); return folders; } void MHwrapper::deleteMail(const RecMail&mail) { init_storage(); if (!m_storage) { return; } int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1()); if (r!=MAIL_NO_ERROR) { qDebug("error selecting folder!"); return; } r = mailsession_remove_message(m_storage->sto_session,mail.getNumber()); if (r != MAIL_NO_ERROR) { qDebug("error deleting mail"); } } void MHwrapper::answeredMail(const RecMail&) { } RecBody MHwrapper::fetchBody( const RecMail &mail ) { RecBody body; init_storage(); if (!m_storage) { return body; } mailmessage * msg; char*data=0; size_t size; /* mail should hold the complete path! */ int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1()); if (r != MAIL_NO_ERROR) { return body; } r = mailsession_get_message(m_storage->sto_session, mail.getNumber(), &msg); if (r != MAIL_NO_ERROR) { qDebug("Error fetching mail %i",mail.getNumber()); return body; } body = parseMail(msg); mailmessage_fetch_result_free(msg,data); return body; } void MHwrapper::mbox_progress( size_t current, size_t maximum ) { qDebug("MH %i von %i",current,maximum); } QString MHwrapper::buildPath(const QString&p) { QString f=""; if (p.length()==0||p=="/") return MHPath; if (!p.startsWith(MHPath)) { f+=MHPath; } if (!p.startsWith("/")) { f+="/"; } f+=p; return f; } int MHwrapper::createMbox(const QString&folder,const Folder*pfolder,const QString&,bool ) { init_storage(); if (!m_storage) { return 0; } QString f; if (!pfolder) { // toplevel folder f = buildPath(folder); } else { f = pfolder->getName(); f+="/"; f+=folder; } qDebug(f); int r = mailsession_create_folder(m_storage->sto_session,(char*)f.latin1()); if (r != MAIL_NO_ERROR) { qDebug("error creating folder %i",r); return 0; } qDebug("Folder created"); return 1; } void MHwrapper::storeMessage(const char*msg,size_t length, const QString&Folder) { init_storage(); if (!m_storage) { return; } QString f = buildPath(Folder); int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); if (r!=MAIL_NO_ERROR) { qDebug("error selecting folder!"); return; } r = mailsession_append_message(m_storage->sto_session,(char*)msg,length); if (r!=MAIL_NO_ERROR) { qDebug("error storing mail"); } return; } encodedString* MHwrapper::fetchRawBody(const RecMail&mail) { encodedString*result = 0; init_storage(); if (!m_storage) { return result; } mailmessage * msg = 0; char*data=0; size_t size; int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1()); if (r!=MAIL_NO_ERROR) { qDebug("error selecting folder!"); return result; } r = mailsession_get_message(m_storage->sto_session, mail.getNumber(), &msg); if (r != MAIL_NO_ERROR) { Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber())); return 0; } r = mailmessage_fetch(msg,&data,&size); if (r != MAIL_NO_ERROR) { Global::statusMessage(tr("Error fetching mail %i").arg(mail.getNumber())); if (msg) mailmessage_free(msg); return 0; } result = new encodedString(data,size); if (msg) mailmessage_free(msg); return result; } void MHwrapper::deleteMails(const QString & mailbox,QList<RecMail> &target) { QString f = buildPath(mailbox); int r = mailsession_select_folder(m_storage->sto_session,(char*)f.latin1()); if (r!=MAIL_NO_ERROR) { qDebug("deleteMails: error selecting folder!"); return; } RecMail*c = 0; for (unsigned int i=0; i < target.count();++i) { c = target.at(i); r = mailsession_remove_message(m_storage->sto_session,c->getNumber()); if (r != MAIL_NO_ERROR) { qDebug("error deleting mail"); break; } } } int MHwrapper::deleteAllMail(const Folder*tfolder) { init_storage(); if (!m_storage) { return 0; } int res = 1; if (!tfolder) return 0; int r = mailsession_select_folder(m_storage->sto_session,(char*)tfolder->getName().latin1()); if (r!=MAIL_NO_ERROR) { qDebug("error selecting folder!"); return 0; } mailmessage_list*l=0; r = mailsession_get_messages_list(m_storage->sto_session,&l); if (r != MAIL_NO_ERROR) { qDebug("Error message list"); res = 0; } unsigned j = 0; for(unsigned int i = 0 ; l!= 0 && res==1 && i < carray_count(l->msg_tab) ; ++i) { mailmessage * msg; msg = (mailmessage*)carray_get(l->msg_tab, i); j = msg->msg_index; r = mailsession_remove_message(m_storage->sto_session,j); if (r != MAIL_NO_ERROR) { Global::statusMessage(tr("Error deleting mail %1").arg(i+1)); res = 0; break; } } if (l) mailmessage_list_free(l); return res; } int MHwrapper::deleteMbox(const Folder*tfolder) { init_storage(); if (!m_storage) { return 0; } if (!tfolder) return 0; if (tfolder->getName()=="/" || tfolder->getName().isEmpty()) return 0; int r = mailsession_delete_folder(m_storage->sto_session,(char*)tfolder->getName().latin1()); if (r != MAIL_NO_ERROR) { qDebug("error deleting mail box"); return 0; } QString cmd = "rm -rf "+tfolder->getName(); QStringList command; command << "/bin/sh"; command << "-c"; command << cmd.latin1(); OProcess *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))); + connect(process, SIGNAL(processExited(OProcess*)), + this, SLOT( processEnded(OProcess*))); + connect(process, SIGNAL( receivedStderr(OProcess*,char*,int)), + this, SLOT( oprocessStderr(OProcess*,char*,int))); *process << command; removeMboxfailed = false; if(!process->start(OProcess::Block, OProcess::All) ) { qDebug("could not start process"); return 0; } qDebug("mail box deleted"); return 1; } void MHwrapper::processEnded(OProcess *p) { if (p) delete p; } void MHwrapper::oprocessStderr(OProcess*, char *buffer, int ) { QString lineStr = buffer; QMessageBox::warning( 0, tr("Error"), lineStr ,tr("Ok") ); removeMboxfailed = true; } void MHwrapper::statusFolder(folderStat&target_stat,const QString & mailbox) { init_storage(); if (!m_storage) { return; } target_stat.message_count = 0; target_stat.message_unseen = 0; target_stat.message_recent = 0; QString f = buildPath(mailbox); int r = mailsession_status_folder(m_storage->sto_session,(char*)f.latin1(),&target_stat.message_count, &target_stat.message_recent,&target_stat.message_unseen); if (r != MAIL_NO_ERROR) { Global::statusMessage(tr("Error retrieving status")); } } const QString&MHwrapper::getType()const { return wrapperType; } const QString&MHwrapper::getName()const { return MHName; } void MHwrapper::mvcpMail(const RecMail&mail,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) { init_storage(); if (!m_storage) { return; } if (targetWrapper != this) { qDebug("Using generic"); Genericwrapper::mvcpMail(mail,targetFolder,targetWrapper,moveit); return; } qDebug("Using internal routines for move/copy"); QString tf = buildPath(targetFolder); int r = mailsession_select_folder(m_storage->sto_session,(char*)mail.getMbox().latin1()); if (r != MAIL_NO_ERROR) { qDebug("Error selecting source mailbox"); return; } if (moveit) { r = mailsession_move_message(m_storage->sto_session,mail.getNumber(),(char*)tf.latin1()); } else { r = mailsession_copy_message(m_storage->sto_session,mail.getNumber(),(char*)tf.latin1()); } if (r != MAIL_NO_ERROR) { qDebug("Error copy/moving mail internal (%i)",r); } } void MHwrapper::mvcpAllMails(Folder*fromFolder,const QString&targetFolder,AbstractMail*targetWrapper,bool moveit) { init_storage(); if (!m_storage) { return; } if (targetWrapper != this) { qDebug("Using generic"); Genericwrapper::mvcpAllMails(fromFolder,targetFolder,targetWrapper,moveit); return; } if (!fromFolder) return; int r = mailsession_select_folder(m_storage->sto_session,(char*)fromFolder->getName().latin1()); if (r!=MAIL_NO_ERROR) { qDebug("error selecting source folder!"); return; } QString tf = buildPath(targetFolder); mailmessage_list*l=0; r = mailsession_get_messages_list(m_storage->sto_session,&l); if (r != MAIL_NO_ERROR) { qDebug("Error message list"); } unsigned j = 0; for(unsigned int i = 0 ; l!= 0 && i < carray_count(l->msg_tab) ; ++i) { mailmessage * msg; msg = (mailmessage*)carray_get(l->msg_tab, i); j = msg->msg_index; if (moveit) { r = mailsession_move_message(m_storage->sto_session,j,(char*)tf.latin1()); } else { r = mailsession_copy_message(m_storage->sto_session,j,(char*)tf.latin1()); } if (r != MAIL_NO_ERROR) { qDebug("Error copy/moving mail internal (%i)",r); break; } } if (l) mailmessage_list_free(l); } diff --git a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp index a3c68ae..d75d52a 100644 --- a/noncore/net/mail/libmailwrapper/smtpwrapper.cpp +++ b/noncore/net/mail/libmailwrapper/smtpwrapper.cpp @@ -1,419 +1,419 @@ #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <string.h> #include <qdir.h> #include <qt.h> #include <qmessagebox.h> #include <qpe/config.h> #include <qpe/qcopenvelope_qws.h> #include <libetpan/libetpan.h> #include "smtpwrapper.h" #include "mailwrapper.h" #include "abstractmail.h" #include "logindialog.h" #include "mailtypes.h" #include "sendmailprogress.h" const char* SMTPwrapper::USER_AGENT="OpieMail v0.4"; progressMailSend*SMTPwrapper::sendProgress = 0; SMTPwrapper::SMTPwrapper(SMTPaccount * aSmtp ) : QObject() { m_SmtpAccount = aSmtp; Config cfg( "mail" ); cfg.setGroup( "Status" ); m_queuedMail = cfg.readNumEntry( "outgoing", 0 ); emit queuedMails( m_queuedMail ); - connect( this, SIGNAL( queuedMails( int ) ), this, SLOT( emitQCop( int ) ) ); + connect( this, SIGNAL( queuedMails(int) ), this, SLOT( emitQCop(int) ) ); m_smtp = 0; } SMTPwrapper::~SMTPwrapper() { disc_server(); } void SMTPwrapper::emitQCop( int queued ) { QCopEnvelope env( "QPE/Pim", "outgoingMails(int)" ); env << queued; } QString SMTPwrapper::mailsmtpError( int errnum ) { switch ( errnum ) { case MAILSMTP_NO_ERROR: return tr( "No error" ); case MAILSMTP_ERROR_UNEXPECTED_CODE: return tr( "Unexpected error code" ); case MAILSMTP_ERROR_SERVICE_NOT_AVAILABLE: return tr( "Service not available" ); case MAILSMTP_ERROR_STREAM: return tr( "Stream error" ); case MAILSMTP_ERROR_HOSTNAME: return tr( "gethostname() failed" ); case MAILSMTP_ERROR_NOT_IMPLEMENTED: return tr( "Not implemented" ); case MAILSMTP_ERROR_ACTION_NOT_TAKEN: return tr( "Error, action not taken" ); case MAILSMTP_ERROR_EXCEED_STORAGE_ALLOCATION: return tr( "Data exceeds storage allocation" ); case MAILSMTP_ERROR_IN_PROCESSING: return tr( "Error in processing" ); case MAILSMTP_ERROR_STARTTLS_NOT_SUPPORTED: return tr( "Starttls not supported" ); // case MAILSMTP_ERROR_INSUFFISANT_SYSTEM_STORAGE: // return tr( "Insufficient system storage" ); case MAILSMTP_ERROR_MAILBOX_UNAVAILABLE: return tr( "Mailbox unavailable" ); case MAILSMTP_ERROR_MAILBOX_NAME_NOT_ALLOWED: return tr( "Mailbox name not allowed" ); case MAILSMTP_ERROR_BAD_SEQUENCE_OF_COMMAND: return tr( "Bad command sequence" ); case MAILSMTP_ERROR_USER_NOT_LOCAL: return tr( "User not local" ); case MAILSMTP_ERROR_TRANSACTION_FAILED: return tr( "Transaction failed" ); case MAILSMTP_ERROR_MEMORY: return tr( "Memory error" ); case MAILSMTP_ERROR_CONNECTION_REFUSED: return tr( "Connection refused" ); default: return tr( "Unknown error code" ); } } mailimf_mailbox *SMTPwrapper::newMailbox(const QString&name, const QString&mail ) { return mailimf_mailbox_new( strdup( name.latin1() ), strdup( mail.latin1() ) ); } mailimf_address_list *SMTPwrapper::parseAddresses(const QString&addr ) { mailimf_address_list *addresses; if ( addr.isEmpty() ) return NULL; addresses = mailimf_address_list_new_empty(); bool literal_open = false; unsigned int startpos = 0; QStringList list; QString s; unsigned int i = 0; for (; i < addr.length();++i) { switch (addr[i]) { case '\"': literal_open = !literal_open; break; case ',': if (!literal_open) { s = addr.mid(startpos,i-startpos); if (!s.isEmpty()) { list.append(s); qDebug("Appended %s",s.latin1()); } // !!!! this is a MUST BE! startpos = ++i; } break; default: break; } } s = addr.mid(startpos,i-startpos); if (!s.isEmpty()) { list.append(s); qDebug("Appended %s",s.latin1()); } QStringList::Iterator it; for ( it = list.begin(); it != list.end(); it++ ) { int err = mailimf_address_list_add_parse( addresses, (char*)(*it).latin1() ); if ( err != MAILIMF_NO_ERROR ) { qDebug( "Error parsing" ); qDebug( *it ); } else { qDebug( "Parse success! %s",(*it).latin1()); } } return addresses; } mailimf_fields *SMTPwrapper::createImfFields(const Mail&mail ) { mailimf_fields *fields; mailimf_field *xmailer; mailimf_mailbox *sender=0,*fromBox=0; mailimf_mailbox_list *from=0; mailimf_address_list *to=0, *cc=0, *bcc=0, *reply=0; char *subject = strdup( mail.getSubject().latin1() ); int err; sender = newMailbox( mail.getName(), mail.getMail() ); if ( sender == NULL ) goto err_free; fromBox = newMailbox( mail.getName(), mail.getMail() ); if ( fromBox == NULL ) goto err_free_sender; from = mailimf_mailbox_list_new_empty(); if ( from == NULL ) goto err_free_fromBox; err = mailimf_mailbox_list_add( from, fromBox ); if ( err != MAILIMF_NO_ERROR ) goto err_free_from; to = parseAddresses( mail.getTo() ); if ( to == NULL ) goto err_free_from; cc = parseAddresses( mail.getCC() ); bcc = parseAddresses( mail.getBCC() ); reply = parseAddresses( mail.getReply() ); fields = mailimf_fields_new_with_data( from, sender, reply, to, cc, bcc, NULL, NULL, subject ); if ( fields == NULL ) goto err_free_reply; xmailer = mailimf_field_new_custom( strdup( "User-Agent" ), strdup( USER_AGENT ) ); if ( xmailer == NULL ) goto err_free_fields; err = mailimf_fields_add( fields, xmailer ); if ( err != MAILIMF_NO_ERROR ) goto err_free_xmailer; return fields; // Success :) err_free_xmailer: if (xmailer) mailimf_field_free( xmailer ); err_free_fields: if (fields) mailimf_fields_free( fields ); err_free_reply: if (reply) mailimf_address_list_free( reply ); if (bcc) mailimf_address_list_free( bcc ); if (cc) mailimf_address_list_free( cc ); if (to) mailimf_address_list_free( to ); err_free_from: if (from) mailimf_mailbox_list_free( from ); err_free_fromBox: mailimf_mailbox_free( fromBox ); err_free_sender: if (sender) mailimf_mailbox_free( sender ); err_free: if (subject) free( subject ); qDebug( "createImfFields - error" ); return NULL; // Error :( } mailmime *SMTPwrapper::buildTxtPart(const QString&str ) { mailmime *txtPart; mailmime_fields *fields; mailmime_content *content; mailmime_parameter *param; int err; param = mailmime_parameter_new( strdup( "charset" ), strdup( "iso-8859-1" ) ); if ( param == NULL ) goto err_free; content = mailmime_content_new_with_str( "text/plain" ); if ( content == NULL ) goto err_free_param; err = clist_append( content->ct_parameters, param ); if ( err != MAILIMF_NO_ERROR ) goto err_free_content; fields = mailmime_fields_new_encoding(MAILMIME_MECHANISM_8BIT); if ( fields == NULL ) goto err_free_content; txtPart = mailmime_new_empty( content, fields ); if ( txtPart == NULL ) goto err_free_fields; err = mailmime_set_body_text( txtPart, (char*)str.data(), str.length() ); if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; return txtPart; // Success :) err_free_txtPart: mailmime_free( txtPart ); err_free_fields: mailmime_fields_free( fields ); err_free_content: mailmime_content_free( content ); err_free_param: mailmime_parameter_free( param ); err_free: qDebug( "buildTxtPart - error" ); return NULL; // Error :( } mailmime *SMTPwrapper::buildFilePart(const QString&filename,const QString&mimetype,const QString&TextContent ) { mailmime * filePart = 0; mailmime_fields * fields = 0; mailmime_content * content = 0; mailmime_parameter * param = 0; char*name = 0; char*file = 0; int err; int pos = filename.findRev( '/' ); if (filename.length()>0) { QString tmp = filename.right( filename.length() - ( pos + 1 ) ); name = strdup( tmp.latin1() ); // just filename file = strdup( filename.latin1() ); // full name with path } int disptype = MAILMIME_DISPOSITION_TYPE_ATTACHMENT; int mechanism = MAILMIME_MECHANISM_BASE64; if ( mimetype.startsWith( "text/" ) ) { param = mailmime_parameter_new( strdup( "charset" ), strdup( "iso-8859-1" ) ); mechanism = MAILMIME_MECHANISM_QUOTED_PRINTABLE; } fields = mailmime_fields_new_filename( disptype, name, mechanism ); content = mailmime_content_new_with_str( (char*)mimetype.latin1() ); if (content!=0 && fields != 0) { if (param) { clist_append(content->ct_parameters,param); param = 0; } if (filename.length()>0) { QFileInfo f(filename); param = mailmime_parameter_new(strdup("name"),strdup(f.fileName().latin1())); clist_append(content->ct_parameters,param); param = 0; } filePart = mailmime_new_empty( content, fields ); } if (filePart) { if (filename.length()>0) { err = mailmime_set_body_file( filePart, file ); } else { err = mailmime_set_body_text(filePart,strdup(TextContent.data()),TextContent.length()); } if (err != MAILIMF_NO_ERROR) { qDebug("Error setting body with file %s",file); mailmime_free( filePart ); filePart = 0; } } if (!filePart) { if ( param != NULL ) { mailmime_parameter_free( param ); } if (content) { mailmime_content_free( content ); } if (fields) { mailmime_fields_free( fields ); } else { if (name) { free( name ); } if (file) { free( file ); } } } return filePart; // Success :) } void SMTPwrapper::addFileParts( mailmime *message,const QList<Attachment>&files ) { const Attachment *it; unsigned int count = files.count(); qDebug("List contains %i values",count); for ( unsigned int i = 0; i < count; ++i ) { qDebug( "Adding file" ); mailmime *filePart; int err; it = ((QList<Attachment>)files).at(i); filePart = buildFilePart( it->getFileName(), it->getMimeType(),"" ); if ( filePart == NULL ) { qDebug( "addFileParts: error adding file:" ); qDebug( it->getFileName() ); continue; } err = mailmime_smart_add_part( message, filePart ); if ( err != MAILIMF_NO_ERROR ) { mailmime_free( filePart ); qDebug("error smart add"); } } } mailmime *SMTPwrapper::createMimeMail(const Mail &mail ) { mailmime *message, *txtPart; mailimf_fields *fields; int err; fields = createImfFields( mail ); if ( fields == NULL ) goto err_free; message = mailmime_new_message_data( NULL ); if ( message == NULL ) goto err_free_fields; mailmime_set_imf_fields( message, fields ); txtPart = buildTxtPart( mail.getMessage() ); if ( txtPart == NULL ) goto err_free_message; err = mailmime_smart_add_part( message, txtPart ); if ( err != MAILIMF_NO_ERROR ) goto err_free_txtPart; addFileParts( message, mail.getAttachments() ); return message; // Success :) err_free_txtPart: mailmime_free( txtPart ); err_free_message: mailmime_free( message ); err_free_fields: mailimf_fields_free( fields ); err_free: qDebug( "createMimeMail: error" ); return NULL; // Error :( } mailimf_field *SMTPwrapper::getField( mailimf_fields *fields, int type ) { mailimf_field *field; diff --git a/noncore/net/mail/mainwindow.cpp b/noncore/net/mail/mainwindow.cpp index 2a1f90d..3f34fe7 100644 --- a/noncore/net/mail/mainwindow.cpp +++ b/noncore/net/mail/mainwindow.cpp @@ -1,217 +1,217 @@ #include <qlabel.h> #include <qvbox.h> #include <qheader.h> #include <qtimer.h> #include <qlayout.h> #include <qmessagebox.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include "defines.h" #include "mainwindow.h" MainWindow::MainWindow( QWidget *parent, const char *name, WFlags flags ) : QMainWindow( parent, name, flags ) { setCaption( tr( "Mail" ) ); setToolBarsMovable( false ); toolBar = new QToolBar( this ); menuBar = new QMenuBar( toolBar ); mailMenu = new QPopupMenu( menuBar ); menuBar->insertItem( tr( "Mail" ), mailMenu ); settingsMenu = new QPopupMenu( menuBar ); menuBar->insertItem( tr( "Settings" ), settingsMenu ); addToolBar( toolBar ); toolBar->setHorizontalStretchable( true ); QLabel *spacer = new QLabel( toolBar ); spacer->setBackgroundMode( QWidget::PaletteButton ); toolBar->setStretchableWidget( spacer ); composeMail = new QAction( tr( "Compose new mail" ), ICON_COMPOSEMAIL, 0, 0, this ); composeMail->addTo( toolBar ); composeMail->addTo( mailMenu ); sendQueued = new QAction( tr( "Send queued mails" ), ICON_SENDQUEUED, 0, 0, this ); sendQueued->addTo( toolBar ); sendQueued->addTo( mailMenu ); /* syncFolders = new QAction( tr( "Sync mailfolders" ), ICON_SYNC, 0, 0, this ); syncFolders->addTo( toolBar ); syncFolders->addTo( mailMenu ); */ showFolders = new QAction( tr( "Show/Hide folders" ), ICON_SHOWFOLDERS, 0, 0, this, 0, true ); showFolders->addTo( toolBar ); showFolders->addTo( mailMenu ); showFolders->setOn( true ); - connect(showFolders, SIGNAL( toggled( bool ) ), - SLOT( slotShowFolders( bool ) ) ); + connect(showFolders, SIGNAL( toggled(bool) ), + SLOT( slotShowFolders(bool) ) ); /* searchMails = new QAction( tr( "Search mails" ), QIconSet( Resource::loadPixmap("find") ), 0, 0, this ); searchMails->addTo( toolBar ); searchMails->addTo( mailMenu ); */ deleteMails = new QAction(tr("Delete Mail"), QIconSet( Resource::loadPixmap("trash")), 0, 0, this); deleteMails->addTo( toolBar ); deleteMails->addTo( mailMenu ); connect( deleteMails, SIGNAL( activated() ), SLOT( slotDeleteMail() ) ); editSettings = new QAction( tr( "Edit settings" ), QIconSet( Resource::loadPixmap("SettingsIcon") ) , 0, 0, this ); editSettings->addTo( settingsMenu ); connect( editSettings, SIGNAL( activated() ), SLOT( slotEditSettings() ) ); editAccounts = new QAction( tr( "Configure accounts" ), QIconSet( Resource::loadPixmap("mail/editaccounts") ) , 0, 0, this ); editAccounts->addTo( settingsMenu ); //setCentralWidget( view ); QVBox* wrapperBox = new QVBox( this ); setCentralWidget( wrapperBox ); QWidget *view = new QWidget( wrapperBox ); layout = new QBoxLayout ( view, QBoxLayout::LeftToRight ); folderView = new AccountView( view ); folderView->header()->hide(); folderView->setRootIsDecorated( true ); folderView->addColumn( tr( "Mailbox" ) ); layout->addWidget( folderView ); mailView = new QListView( view ); mailView->addColumn( tr( "" ) ); mailView->addColumn( tr( "Subject" ),QListView::Manual ); mailView->addColumn( tr( "Sender" ),QListView::Manual ); mailView->addColumn( tr( "Size" ),QListView::Manual); mailView->addColumn( tr( "Date" )); mailView->setAllColumnsShowFocus(true); mailView->setSorting(-1); statusWidget = new StatusWidget( wrapperBox ); statusWidget->hide(); layout->addWidget( mailView ); layout->setStretchFactor( folderView, 1 ); layout->setStretchFactor( mailView, 2 ); slotAdjustLayout(); QPEApplication::setStylusOperation( mailView->viewport(),QPEApplication::RightOnHold); QPEApplication::setStylusOperation( folderView->viewport(),QPEApplication::RightOnHold); - connect( mailView, SIGNAL( mouseButtonClicked(int, QListViewItem *,const QPoint&,int ) ),this, - SLOT( mailLeftClicked( int, QListViewItem *,const QPoint&,int ) ) ); - connect( mailView, SIGNAL( mouseButtonPressed(int, QListViewItem *,const QPoint&,int ) ),this, - SLOT( mailHold( int, QListViewItem *,const QPoint&,int ) ) ); + connect( mailView, SIGNAL( mouseButtonClicked(int,QListViewItem*,const QPoint&,int) ),this, + SLOT( mailLeftClicked(int,QListViewItem*,const QPoint&,int) ) ); + connect( mailView, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int) ),this, + SLOT( mailHold(int,QListViewItem*,const QPoint&,int) ) ); connect(folderView, SIGNAL(refreshMailview(QList<RecMail>*)),this,SLOT(refreshMailView(QList<RecMail>*))); connect( composeMail, SIGNAL( activated() ), SLOT( slotComposeMail() ) ); connect( sendQueued, SIGNAL( activated() ), SLOT( slotSendQueued() ) ); // connect( searchMails, SIGNAL( activated() ), SLOT( slotSearchMails() ) ); connect( editAccounts, SIGNAL( activated() ), SLOT( slotEditAccounts() ) ); // Added by Stefan Eilers to allow starting by addressbook.. // copied from old mail2 #if !defined(QT_NO_COP) - connect( qApp, SIGNAL( appMessage( const QCString&, const QByteArray& ) ), - this, SLOT( appMessage( const QCString&, const QByteArray& ) ) ); + connect( qApp, SIGNAL( appMessage(const QCString&,const QByteArray&) ), + this, SLOT( appMessage(const QCString&,const QByteArray&) ) ); #endif QTimer::singleShot( 1000, this, SLOT( slotAdjustColumns() ) ); } MainWindow::~MainWindow() { } void MainWindow::appMessage(const QCString &, const QByteArray &) { qDebug("appMessage not reached"); } void MainWindow::slotAdjustLayout() { QWidget *d = QApplication::desktop(); if ( d->width() < d->height() ) { layout->setDirection( QBoxLayout::TopToBottom ); } else { layout->setDirection( QBoxLayout::LeftToRight ); } } void MainWindow::slotAdjustColumns() { bool hidden = folderView->isHidden(); if ( hidden ) folderView->show(); folderView->setColumnWidth( 0, folderView->visibleWidth() ); if ( hidden ) folderView->hide(); mailView->setColumnWidth( 0, 10 ); mailView->setColumnWidth( 1, mailView->visibleWidth() - 130 ); mailView->setColumnWidth( 2, 80 ); mailView->setColumnWidth( 3, 50 ); mailView->setColumnWidth( 4, 50 ); } void MainWindow::slotEditSettings() { } void MainWindow::slotShowFolders( bool ) { qDebug( "slotShowFolders not reached" ); } void MainWindow::refreshMailView(QList<RecMail>*) { qDebug( "refreshMailView not reached" ); } void MainWindow::mailLeftClicked(int, QListViewItem *,const QPoint&,int ) { qDebug( "mailLeftClicked not reached" ); } void MainWindow::displayMail() { qDebug("displayMail not reached"); } void MainWindow::slotDeleteMail() { qDebug("deleteMail not reached"); } void MainWindow::mailHold(int, QListViewItem *,const QPoint&,int ) { qDebug("mailHold not reached"); } void MainWindow::slotSendQueued() { } void MainWindow::slotEditAccounts() { } void MainWindow::slotComposeMail() { } diff --git a/noncore/net/mail/viewmail.cpp b/noncore/net/mail/viewmail.cpp index f015228..8636957 100644 --- a/noncore/net/mail/viewmail.cpp +++ b/noncore/net/mail/viewmail.cpp @@ -1,472 +1,472 @@ #include "composemail.h" #include "viewmail.h" #include "accountview.h" /* OPIE */ #include <libmailwrapper/settings.h> #include <libmailwrapper/abstractmail.h> #include <libmailwrapper/mailtypes.h> #include <opie2/ofiledialog.h> #include <qpe/config.h> #include <qpe/qpeapplication.h> /* QT */ #include <qtextbrowser.h> #include <qmessagebox.h> #include <qtextstream.h> #include <qaction.h> #include <qpopupmenu.h> #include <qfile.h> #include <qapplication.h> #include <qvaluelist.h> AttachItem::AttachItem(QListView * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, const QString&fsize,int num,const QValueList<int>&path) : QListViewItem(parent,after),_partNum(num) { _path=path; setText(0, mime); setText(1, desc); setText(2, file); setText(3, fsize); } AttachItem::AttachItem(QListViewItem * parent,QListViewItem *after, const QString&mime,const QString&desc,const QString&file, const QString&fsize,int num,const QValueList<int>&path) : QListViewItem(parent,after),_partNum(num) { _path=path; setText(0, mime); setText(1, desc); setText(2, file); setText(3, fsize); } bool AttachItem::isParentof(const QValueList<int>&path) { /* if not set, then no parent */ if (path.count()==0||_path.count()==0) return false; /* the parent must have one digit less then a child */ if (path.count()!=_path.count()+1) return false; for (unsigned int i=0; i < _path.count();++i) { if (_path[i]!=path[i]) return false; } return true; } AttachItem* ViewMail::searchParent(const QValueList<int>&path) { QListViewItemIterator it( attachments ); for ( ; it.current(); ++it ) { AttachItem*ati = (AttachItem*)it.current(); if (ati->isParentof(path)) return ati; } return 0; } AttachItem* ViewMail::lastChild(AttachItem*parent) { if (!parent) return 0; AttachItem* item = (AttachItem*)parent->firstChild(); if (!item) return item; AttachItem*temp=0; while( (temp=(AttachItem*)item->nextSibling())) { item = temp; } return item; } void ViewMail::setBody( RecBody body ) { m_body = body; m_mail[2] = body.Bodytext(); attachbutton->setEnabled(body.Parts().count()>0); attachments->setEnabled(body.Parts().count()>0); if (body.Parts().count()==0) { return; } AttachItem * curItem=0; AttachItem * parentItem = 0; QString type=body.Description().Type()+"/"+body.Description().Subtype(); QString desc,fsize; double s = body.Description().Size(); int w; w=0; while (s>1024) { s/=1024; ++w; if (w>=2) break; } QString q=""; switch(w) { case 1: q="k"; break; case 2: q="M"; break; default: break; } { /* I did not found a method to make a CONTENT reset on a QTextStream so I use this construct that the stream will re-constructed in each loop. To let it work, the textstream is packed into a own area of code is it will be destructed after finishing its small job. */ QTextOStream o(&fsize); if (w>0) o.precision(2); else o.precision(0); o.setf(QTextStream::fixed); o << s << " " << q << "Byte"; } curItem=new AttachItem(attachments,curItem,type,"Mailbody","",fsize,-1,body.Description().Positionlist()); QString filename = ""; for (unsigned int i = 0; i < body.Parts().count();++i) { type = body.Parts()[i].Type()+"/"+body.Parts()[i].Subtype(); part_plist_t::ConstIterator it = body.Parts()[i].Parameters().begin(); for (;it!=body.Parts()[i].Parameters().end();++it) { qDebug(it.key()); if (it.key().lower()=="name") { filename=it.data(); } } s = body.Parts()[i].Size(); w = 0; while (s>1024) { s/=1024; ++w; if (w>=2) break; } switch(w) { case 1: q="k"; break; case 2: q="M"; break; default: q=""; break; } QTextOStream o(&fsize); if (w>0) o.precision(2); else o.precision(0); o.setf(QTextStream::fixed); o << s << " " << q << "Byte"; desc = body.Parts()[i].Description(); parentItem = searchParent(body.Parts()[i].Positionlist()); if (parentItem) { AttachItem*temp = lastChild(parentItem); if (temp) curItem = temp; curItem=new AttachItem(parentItem,curItem,type,desc,filename,fsize,i,body.Parts()[i].Positionlist()); attachments->setRootIsDecorated(true); curItem = parentItem; } else { curItem=new AttachItem(attachments,curItem,type,desc,filename,fsize,i,body.Parts()[i].Positionlist()); } } } void ViewMail::slotShowHtml( bool state ) { m_showHtml = state; setText(); } void ViewMail::slotItemClicked( QListViewItem * item , const QPoint & point, int ) { if (!item ) return; if ( ( ( AttachItem* )item )->Partnumber() == -1 ) { setText(); return; } QPopupMenu *menu = new QPopupMenu(); int ret=0; if ( item->text( 0 ).left( 5 ) == "text/" || item->text(0)=="message/rfc822" ) { menu->insertItem( tr( "Show Text" ), 1 ); } menu->insertItem( tr( "Save Attachment" ), 0 ); menu->insertSeparator(1); ret = menu->exec( point, 0 ); switch(ret) { case 0: { MimeTypes types; types.insert( "all", "*" ); QString str = Opie::OFileDialog::getSaveFileName( 1, "/", item->text( 2 ) , types, 0 ); if( !str.isEmpty() ) { encodedString*content = m_recMail.Wrapper()->fetchDecodedPart( m_recMail, m_body.Parts()[ ( ( AttachItem* )item )->Partnumber() ] ); if (content) { QFile output(str); output.open(IO_WriteOnly); output.writeBlock(content->Content(),content->Length()); output.close(); delete content; } } } break ; case 1: if ( ( ( AttachItem* )item )->Partnumber() == -1 ) { setText(); } else { if ( m_recMail.Wrapper() != 0l ) { // make sure that there is a wrapper , even after delete or simular actions browser->setText( m_recMail.Wrapper()->fetchTextPart( m_recMail, m_body.Parts()[ ( ( AttachItem* )item )->Partnumber() ] ) ); } } break; } delete menu; } void ViewMail::setMail( RecMail mail ) { m_recMail = mail; m_mail[0] = mail.getFrom(); m_mail[1] = mail.getSubject(); m_mail[3] = mail.getDate(); m_mail[4] = mail.Msgid(); m_mail2[0] = mail.To(); m_mail2[1] = mail.CC(); m_mail2[2] = mail.Bcc(); setText(); } ViewMail::ViewMail( QWidget *parent, const char *name, WFlags fl) : ViewMailBase(parent, name, fl), _inLoop(false) { m_gotBody = false; deleted = false; connect( reply, SIGNAL(activated()), SLOT(slotReply())); connect( forward, SIGNAL(activated()), SLOT(slotForward())); - connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail( ) ) ); - connect( showHtml, SIGNAL( toggled( bool ) ), SLOT( slotShowHtml( bool ) ) ); + connect( deleteMail, SIGNAL( activated() ), SLOT( slotDeleteMail() ) ); + connect( showHtml, SIGNAL( toggled(bool) ), SLOT( slotShowHtml(bool) ) ); attachments->setEnabled(m_gotBody); - connect( attachments, SIGNAL( clicked ( QListViewItem *, const QPoint & , int ) ), SLOT( slotItemClicked( QListViewItem *, const QPoint & , int ) ) ); + connect( attachments, SIGNAL( clicked(QListViewItem*,const QPoint&, int) ), SLOT( slotItemClicked(QListViewItem*,const QPoint&, int) ) ); readConfig(); attachments->setSorting(-1); } void ViewMail::readConfig() { Config cfg( "mail" ); cfg.setGroup( "Settings" ); m_showHtml = cfg.readBoolEntry( "showHtml", false ); showHtml->setOn( m_showHtml ); } void ViewMail::setText() { QString toString; QString ccString; QString bccString; for ( QStringList::Iterator it = ( m_mail2[0] ).begin(); it != ( m_mail2[0] ).end(); ++it ) { toString += (*it); } for ( QStringList::Iterator it = ( m_mail2[1] ).begin(); it != ( m_mail2[1] ).end(); ++it ) { ccString += (*it); } for ( QStringList::Iterator it = ( m_mail2[2] ).begin(); it != ( m_mail2[2] ).end(); ++it ) { bccString += (*it); } setCaption( caption().arg( m_mail[0] ) ); m_mailHtml = "<html><body>" "<table width=\"100%\" border=\"0\"><tr bgcolor=\"#FFDD76\"><td>" "<div align=left><b>" + deHtml( m_mail[1] ) + "</b></div>" "</td></tr><tr bgcolor=\"#EEEEE6\"><td>" "<b>" + tr( "From" ) + ": </b><font color=#6C86C0>" + deHtml( m_mail[0] ) + "</font><br>" "<b>" + tr( "To" ) + ": </b><font color=#6C86C0>" + deHtml( toString ) + "</font><br><b>" + tr( "Cc" ) + ": </b>" + deHtml( ccString ) + "<br>" "<b>" + tr( "Date" ) + ": </b> " + m_mail[3] + "</td></tr></table><font face=fixed>"; if ( !m_showHtml ) { browser->setText( QString( m_mailHtml) + deHtml( m_mail[2] ) + "</font></html>" ); } else { browser->setText( QString( m_mailHtml) + m_mail[2] + "</font></html>" ); } // remove later in favor of a real handling m_gotBody = true; } ViewMail::~ViewMail() { m_recMail.Wrapper()->cleanMimeCache(); hide(); } void ViewMail::hide() { QWidget::hide(); if (_inLoop) { _inLoop = false; qApp->exit_loop(); } } void ViewMail::exec() { show(); if (!_inLoop) { _inLoop = true; qApp->enter_loop(); } } QString ViewMail::deHtml(const QString &string) { QString string_ = string; string_.replace(QRegExp("&"), "&"); string_.replace(QRegExp("<"), "<"); string_.replace(QRegExp(">"), ">"); string_.replace(QRegExp("\\n"), "<br>"); return string_; } void ViewMail::slotReply() { if (!m_gotBody) { QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok")); return; } QString rtext; rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose .arg( m_mail[0] ) .arg( m_mail[3] ); QString text = m_mail[2]; QStringList lines = QStringList::split(QRegExp("\\n"), text); QStringList::Iterator it; for (it = lines.begin(); it != lines.end(); it++) { rtext += "> " + *it + "\n"; } rtext += "\n"; QString prefix; if ( m_mail[1].find(QRegExp("^Re: *$")) != -1) prefix = ""; else prefix = "Re: "; // no i18n on purpose Settings *settings = new Settings(); ComposeMail composer( settings ,this, 0, true); composer.setTo( m_mail[0] ); composer.setSubject( "Re: " + m_mail[1] ); composer.setMessage( rtext ); if ( QDialog::Accepted == QPEApplication::execDialog( &composer ) ) { m_recMail.Wrapper()->answeredMail(m_recMail); } } void ViewMail::slotForward() { if (!m_gotBody) { QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok")); return; } QString ftext; ftext += QString("\n----- Forwarded message from %1 -----\n\n") .arg( m_mail[0] ); if (!m_mail[3].isNull()) ftext += QString("Date: %1\n") .arg( m_mail[3] ); if (!m_mail[0].isNull()) ftext += QString("From: %1\n") .arg( m_mail[0] ); if (!m_mail[1].isNull()) ftext += QString("Subject: %1\n") .arg( m_mail[1] ); ftext += QString("\n%1\n") .arg( m_mail[2]); ftext += QString("----- End forwarded message -----\n"); Settings *settings = new Settings(); ComposeMail composer( settings ,this, 0, true); composer.setSubject( "Fwd: " + m_mail[1] ); composer.setMessage( ftext ); if ( QDialog::Accepted == QPEApplication::execDialog( &composer )) { } } void ViewMail::slotDeleteMail( ) { if ( QMessageBox::warning(this, tr("Delete Mail"), QString( tr("<p>Do you really want to delete this mail? <br><br>" ) + m_mail[0] + " - " + m_mail[1] ) , QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) { m_recMail.Wrapper()->deleteMail( m_recMail ); hide(); deleted = true; } } diff --git a/noncore/net/opieftp/opieftp.cpp b/noncore/net/opieftp/opieftp.cpp index 4064549..4c39569 100644 --- a/noncore/net/opieftp/opieftp.cpp +++ b/noncore/net/opieftp/opieftp.cpp @@ -1,703 +1,703 @@ /*************************************************************************** opieftp.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. * ***************************************************************************/ //#define DEVELOPERS_VERSION #include "opieftp.h" extern "C" { #include "../ftplib/ftplib.h" } #include "inputDialog.h" #include <qmenubar.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/config.h> #include <qpe/mimetype.h> #include <qtextstream.h> #include <qpushbutton.h> #include <qtoolbutton.h> #include <qcombobox.h> #include <qlistview.h> #include <qlabel.h> #include <qprogressbar.h> #include <qspinbox.h> #include <qtabwidget.h> #include <qlayout.h> #include <qmessagebox.h> #include <qlineedit.h> #include <qlistbox.h> #include <qvbox.h> #include <unistd.h> #include <stdlib.h> QProgressBar *ProgressBar; static netbuf *conn=NULL; static int log_progress(netbuf *, int xfered, void *) { // int fsz = *(int *)arg; // int pct = (xfered * 100) / fsz; // printf("%3d%%\r", pct); // fflush(stdout); ProgressBar->setProgress(xfered); qApp->processEvents(); return 1; } OpieFtp::OpieFtp( QWidget* parent, const char* name, WFlags fl) : QMainWindow( parent, name, fl ) { qDebug("OpieFtp constructor"); setCaption( tr( "OpieFtp" ) ); fuckeduphack=FALSE; QVBox* wrapperBox = new QVBox( this ); setCentralWidget( wrapperBox ); QWidget *view = new QWidget( wrapperBox ); QGridLayout *layout = new QGridLayout( view ); layout->setSpacing( 2); layout->setMargin( 2); connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); QMenuBar *menuBar = new QMenuBar(this); // QToolBar *menuBar = new QToolBar(this); // menuBar->setHorizontalStretchable( TRUE ); QWMatrix matrix; QPixmap pix(Resource::loadPixmap( "UnknownDocument" )); matrix.scale( .4, .4); unknownXpm = pix.xForm(matrix); connectionMenu = new QPopupMenu( this ); localMenu = new QPopupMenu( this ); remoteMenu = new QPopupMenu( this ); tabMenu = new QPopupMenu( this ); //#if 0 layout->addMultiCellWidget( menuBar, 0, 0, 0, 2 ); //#endif menuBar->insertItem( tr( "Connection" ), connectionMenu); // menuBar->insertItem( tr( "Local" ), localMenu); // menuBar->insertItem( tr( "Remote" ), remoteMenu); menuBar->insertItem( tr( "View" ), tabMenu); tabMenu->insertItem( tr( "Local" ), localMenu); tabMenu->insertItem( tr( "Remote" ), remoteMenu); connectionMenu->insertItem( tr( "New" ), this, SLOT( newConnection() )); connectionMenu->insertItem( tr( "Connect" ), this, SLOT( connector() )); connectionMenu->insertItem( tr( "Disconnect" ), this, SLOT( disConnector() )); localMenu->insertItem( tr( "Show Hidden Files" ), this, SLOT( showHidden() )); localMenu->insertSeparator(); localMenu->insertItem( tr( "Upload" ), this, SLOT( localUpload() )); localMenu->insertItem( tr( "Make Directory" ), this, SLOT( localMakDir() )); localMenu->insertItem( tr( "Rename" ), this, SLOT( localRename() )); localMenu->insertSeparator(); localMenu->insertItem( tr( "Delete" ), this, SLOT( localDelete() )); localMenu->setCheckable(TRUE); remoteMenu->insertItem( tr( "Download" ), this, SLOT( remoteDownload() )); remoteMenu->insertItem( tr( "Make Directory" ), this, SLOT( remoteMakDir() )); remoteMenu->insertItem( tr( "Rename" ), this, SLOT( remoteRename() )); remoteMenu->insertSeparator(); remoteMenu->insertItem( tr( "Delete" ), this, SLOT( remoteDelete() )); tabMenu->insertSeparator(); tabMenu->insertItem( tr( "Switch to Local" ), this, SLOT( switchToLocalTab() )); tabMenu->insertItem( tr( "Switch to Remote" ), this, SLOT( switchToRemoteTab() )); tabMenu->insertItem( tr( "Switch to Config" ), this, SLOT( switchToConfigTab() )); tabMenu->insertSeparator(); // tabMenu->insertItem( tr( "About" ), this, SLOT( doAbout() )); tabMenu->setCheckable(TRUE); cdUpButton = new QToolButton( view,"cdUpButton"); cdUpButton->setPixmap(Resource::loadPixmap("up")); cdUpButton ->setFixedSize( QSize( 20, 20 ) ); connect( cdUpButton ,SIGNAL(released()),this,SLOT( upDir()) ); layout->addMultiCellWidget( cdUpButton, 0, 0, 3, 3 ); cdUpButton->hide(); // docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"",view,"docsButton"); // docButton->setFixedSize( QSize( 20, 20 ) ); // connect( docButton,SIGNAL(released()),this,SLOT( docButtonPushed()) ); // docButton->setFlat(TRUE); // layout->addMultiCellWidget( docButton, 0, 0, 6, 6 ); homeButton = new QToolButton(view,"homeButton"); homeButton->setPixmap( Resource::loadPixmap("home")); homeButton->setFixedSize( QSize( 20, 20 ) ); connect(homeButton,SIGNAL(released()),this,SLOT(homeButtonPushed()) ); layout->addMultiCellWidget( homeButton, 0, 0, 4, 4); homeButton->hide(); TabWidget = new QTabWidget( view, "TabWidget" ); layout->addMultiCellWidget( TabWidget, 1, 1, 0, 4 ); // TabWidget->setTabShape(QTabWidget::Triangular); tab = new QWidget( TabWidget, "tab" ); tabLayout = new QGridLayout( tab ); tabLayout->setSpacing( 2); tabLayout->setMargin( 2); Local_View = new QListView( tab, "Local_View" ); // Local_View->setResizePolicy( QListView::AutoOneFit ); Local_View->addColumn( tr("File"),150); Local_View->addColumn( tr("Date"),-1); Local_View->setColumnAlignment(1,QListView::AlignRight); Local_View->addColumn( tr("Size"),-1); Local_View->setColumnAlignment(2,QListView::AlignRight); Local_View->setAllColumnsShowFocus(TRUE); Local_View->setMultiSelection( TRUE); Local_View->setSelectionMode(QListView::Extended); Local_View->setFocusPolicy(QWidget::ClickFocus); QPEApplication::setStylusOperation( Local_View->viewport(),QPEApplication::RightOnHold); tabLayout->addWidget( Local_View, 0, 0 ); - connect( Local_View, SIGNAL( clicked( QListViewItem*)), - this,SLOT( localListClicked(QListViewItem *)) ); -// connect( Local_View, SIGNAL( doubleClicked( QListViewItem*)), -// this,SLOT( localListClicked(QListViewItem *)) ); - connect( Local_View, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), - this,SLOT( ListPressed(int, QListViewItem *, const QPoint&, int)) ); + connect( Local_View, SIGNAL( clicked(QListViewItem*)), + this,SLOT( localListClicked(QListViewItem*)) ); +// connect( Local_View, SIGNAL( doubleClicked(QListViewItem*)), +// this,SLOT( localListClicked(QListViewItem*)) ); + connect( Local_View, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int)), + this,SLOT( ListPressed(int,QListViewItem*,const QPoint&,int)) ); TabWidget->insertTab( tab, tr( "Local" ) ); tab_2 = new QWidget( TabWidget, "tab_2" ); tabLayout_2 = new QGridLayout( tab_2 ); tabLayout_2->setSpacing( 2); tabLayout_2->setMargin( 2); Remote_View = new QListView( tab_2, "Remote_View" ); Remote_View->addColumn( tr("File"),150); Remote_View->addColumn( tr("Date"),-1); // Remote_View->setColumnAlignment(1,QListView::AlignRight); Remote_View->addColumn( tr("Size"),-1); Remote_View->setColumnAlignment(2,QListView::AlignRight); Remote_View->setColumnAlignment(3,QListView::AlignCenter); Remote_View->addColumn( tr("Dir"),-1); Remote_View->setColumnAlignment(4,QListView::AlignRight); Remote_View->setAllColumnsShowFocus(TRUE); Remote_View->setMultiSelection( FALSE); Remote_View->setSelectionMode(QListView::Extended); Remote_View->setFocusPolicy(QWidget::ClickFocus); QPEApplication::setStylusOperation( Remote_View->viewport(),QPEApplication::RightOnHold); - connect( Remote_View, SIGNAL( clicked( QListViewItem*)), - this,SLOT( remoteListClicked(QListViewItem *)) ); - connect( Remote_View, SIGNAL( mouseButtonPressed( int, QListViewItem *, const QPoint&, int)), - this,SLOT( RemoteListPressed(int, QListViewItem *, const QPoint&, int)) ); + connect( Remote_View, SIGNAL( clicked(QListViewItem*)), + this,SLOT( remoteListClicked(QListViewItem*)) ); + connect( Remote_View, SIGNAL( mouseButtonPressed(int,QListViewItem*,const QPoint&,int)), + this,SLOT( RemoteListPressed(int,QListViewItem*,const QPoint&,int)) ); tabLayout_2->addWidget( Remote_View, 0, 0 ); TabWidget->insertTab( tab_2, tr( "Remote" ) ); tab_3 = new QWidget( TabWidget, "tab_3" ); tabLayout_3 = new QGridLayout( tab_3 ); tabLayout_3->setSpacing( 2); tabLayout_3->setMargin( 2); TextLabel1 = new QLabel( tab_3, "TextLabel1" ); TextLabel1->setText( tr( "Username" ) ); tabLayout_3->addMultiCellWidget( TextLabel1, 0, 0, 0, 1 ); UsernameComboBox = new QComboBox( FALSE, tab_3, "UsernameComboBox" ); UsernameComboBox->setEditable(TRUE); tabLayout_3->addMultiCellWidget( UsernameComboBox, 1, 1, 0, 1 ); - connect( UsernameComboBox,SIGNAL(textChanged(const QString &)),this, - SLOT( UsernameComboBoxEdited(const QString & ) )); + connect( UsernameComboBox,SIGNAL(textChanged(const QString&)),this, + SLOT( UsernameComboBoxEdited(const QString&) )); TextLabel2 = new QLabel( tab_3, "TextLabel2" ); TextLabel2->setText( tr( "Password" ) ); tabLayout_3->addMultiCellWidget( TextLabel2, 0, 0, 2, 3 ); PasswordEdit = new QLineEdit( "", tab_3, "PasswordComboBox" ); PasswordEdit->setEchoMode(QLineEdit::Password); tabLayout_3->addMultiCellWidget( PasswordEdit, 1, 1, 2, 3 ); - connect( PasswordEdit,SIGNAL(textChanged(const QString &)),this, - SLOT( PasswordEditEdited(const QString & ) )); + connect( PasswordEdit,SIGNAL(textChanged(const QString&)),this, + SLOT( PasswordEditEdited(const QString&) )); //PasswordEdit->setFixedWidth(85); TextLabel3 = new QLabel( tab_3, "TextLabel3" ); TextLabel3->setText( tr( "Remote server" ) ); tabLayout_3->addMultiCellWidget( TextLabel3, 2, 2, 0, 1 ); ServerComboBox = new QComboBox( FALSE, tab_3, "ServerComboBox" ); ServerComboBox->setEditable(TRUE); tabLayout_3->addMultiCellWidget( ServerComboBox, 3, 3, 0, 1 ); - connect(ServerComboBox,SIGNAL(activated(int)),this,SLOT(serverComboSelected(int ) )); - connect(ServerComboBox,SIGNAL(textChanged(const QString &)),this, - SLOT(serverComboEdited(const QString & ) )); + connect(ServerComboBox,SIGNAL(activated(int)),this,SLOT(serverComboSelected(int) )); + connect(ServerComboBox,SIGNAL(textChanged(const QString&)),this, + SLOT(serverComboEdited(const QString&) )); QLabel *TextLabel5 = new QLabel( tab_3, "TextLabel5" ); TextLabel5->setText( tr( "Remote path" ) ); tabLayout_3->addMultiCellWidget( TextLabel5, 2, 2, 2, 3 ); remotePath = new QLineEdit( "/", tab_3, "remotePath" ); tabLayout_3->addMultiCellWidget( remotePath, 3, 3, 2, 3 ); TextLabel4 = new QLabel( tab_3, "TextLabel4" ); TextLabel4->setText( tr( "Port" ) ); tabLayout_3->addMultiCellWidget( TextLabel4, 4, 4, 0, 1 ); PortSpinBox = new QSpinBox( tab_3, "PortSpinBox" ); PortSpinBox->setButtonSymbols( QSpinBox::UpDownArrows ); PortSpinBox->setMaxValue(32786); tabLayout_3->addMultiCellWidget( PortSpinBox, 4, 4, 1, 1); serverListView = new QListBox( tab_3, "ServerListView" ); tabLayout_3->addMultiCellWidget( serverListView , 5, 5, 0, 5); - connect( serverListView, SIGNAL( highlighted( const QString &)), - this,SLOT( serverListClicked( const QString &) ) ); + connect( serverListView, SIGNAL( highlighted(const QString&)), + this,SLOT( serverListClicked(const QString&) ) ); connectServerBtn = new QPushButton( tr("Connect"), tab_3 , "ConnectButton" ); tabLayout_3->addMultiCellWidget( connectServerBtn, 6, 6, 0, 1); connectServerBtn->setToggleButton(TRUE); - connect(connectServerBtn,SIGNAL( toggled( bool)),SLOT( connectorBtnToggled(bool) )); + connect(connectServerBtn,SIGNAL( toggled(bool)),SLOT( connectorBtnToggled(bool) )); newServerButton= new QPushButton( tr("Add"), tab_3 , "NewServerButton" ); tabLayout_3->addMultiCellWidget( newServerButton, 6, 6, 2, 2); connect( newServerButton,SIGNAL( clicked()),SLOT( NewServer() )); QPushButton *deleteServerBtn; deleteServerBtn = new QPushButton( tr("Delete"), tab_3 , "OpenButton" ); tabLayout_3->addMultiCellWidget( deleteServerBtn, 6, 6, 3, 3); connect(deleteServerBtn,SIGNAL(clicked()),SLOT(deleteServer())); QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); tabLayout_3->addItem( spacer, 5, 0 ); TabWidget->insertTab( tab_3, tr( "Config" ) ); #if 0 - connect(TabWidget,SIGNAL(currentChanged(QWidget *)), + connect(TabWidget,SIGNAL(currentChanged(QWidget*)), this,SLOT(tabChanged(QWidget*))); #endif currentDir.setFilter( QDir::Files | QDir::Dirs/* | QDir::Hidden*/ | QDir::All); currentDir.setPath( QDir::currentDirPath()); // currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); currentPathCombo = new QComboBox( FALSE, view, "currentPathCombo" ); layout->addMultiCellWidget( currentPathCombo, 3, 3, 0, 4); currentPathCombo ->setFixedWidth(220); currentPathCombo->setEditable(TRUE); currentPathCombo->lineEdit()->setText( currentDir.canonicalPath()); #if 0 - connect( currentPathCombo, SIGNAL( activated( const QString & ) ), - this, SLOT( currentPathComboActivated( const QString & ) ) ); + connect( currentPathCombo, SIGNAL( activated(const QString&) ), + this, SLOT( currentPathComboActivated(const QString&) ) ); connect( currentPathCombo->lineEdit(),SIGNAL(returnPressed()), this,SLOT(currentPathComboChanged())); #endif ProgressBar = new QProgressBar( view, "ProgressBar" ); layout->addMultiCellWidget( ProgressBar, 4, 4, 0, 4); ProgressBar->setMaximumHeight(10); filterStr="*"; b=FALSE; #if 0 populateLocalView(); #endif readConfig(); // ServerComboBox->setCurrentItem(currentServerConfig); TabWidget->setCurrentPage(2); qDebug("Constructor done"); } OpieFtp::~OpieFtp() { } void OpieFtp::cleanUp() { if(conn) FtpQuit(conn); QString sfile=QDir::homeDirPath(); if(sfile.right(1) != "/") sfile+="/._temp"; else sfile+="._temp"; QFile file( sfile); if(file.exists()) file.remove(); Config cfg("opieftp"); cfg.setGroup("Server"); cfg.writeEntry("currentServer", currentServerConfig); exit(0); } void OpieFtp::tabChanged(QWidget *) { if (TabWidget->currentPageIndex() == 0) { currentPathCombo->lineEdit()->setText( currentDir.canonicalPath()); tabMenu->setItemChecked(tabMenu->idAt(0),TRUE); tabMenu->setItemChecked(tabMenu->idAt(1),FALSE); tabMenu->setItemChecked(tabMenu->idAt(2),FALSE); if(cdUpButton->isHidden()) cdUpButton->show(); if(homeButton->isHidden()) homeButton->show(); } if (TabWidget->currentPageIndex() == 1) { currentPathCombo->lineEdit()->setText( currentRemoteDir ); tabMenu->setItemChecked(tabMenu->idAt(1),TRUE); tabMenu->setItemChecked(tabMenu->idAt(0),FALSE); tabMenu->setItemChecked(tabMenu->idAt(2),FALSE); if(cdUpButton->isHidden()) cdUpButton->show(); homeButton->hide(); } if (TabWidget->currentPageIndex() == 2) { tabMenu->setItemChecked(tabMenu->idAt(2),TRUE); tabMenu->setItemChecked(tabMenu->idAt(0),FALSE); tabMenu->setItemChecked(tabMenu->idAt(1),FALSE); cdUpButton->hide(); homeButton->hide(); } } void OpieFtp::newConnection() { UsernameComboBox->lineEdit()->setText(""); PasswordEdit->setText( "" ); ServerComboBox->lineEdit()->setText( ""); remotePath->setText( currentRemoteDir = "/"); PortSpinBox->setValue( 21); TabWidget->setCurrentPage(2); } void OpieFtp::serverComboEdited(const QString & ) { // if( ServerComboBox->text(currentServerConfig) != edit /*edit.isEmpty() */) { // qDebug("ServerComboEdited"); // // currentServerConfig = -1; // } } void OpieFtp::UsernameComboBoxEdited(const QString &) { // currentServerConfig = -1; } void OpieFtp::PasswordEditEdited(const QString & ) { // currentServerConfig = -1; } void OpieFtp::connectorBtnToggled(bool On) { if(On) { connector(); } else { disConnector(); } } void OpieFtp::connector() { // QCopEnvelope ( "QPE/System", "busy()" ); // qApp->processEvents(); currentRemoteDir=remotePath->text(); if( ServerComboBox->currentText().isEmpty()) { QMessageBox::warning(this,tr("Ftp"),tr("Please set the server info"),tr("Ok"),0,0); TabWidget->setCurrentPage(2); ServerComboBox->setFocus(); connectServerBtn->setOn(FALSE); connectServerBtn->setText( tr("Connect")); return; } FtpInit(); TabWidget->setCurrentPage(1); QString ftp_host = ServerComboBox->currentText(); QString ftp_user = UsernameComboBox->currentText(); QString ftp_pass = PasswordEdit->text(); QString port=PortSpinBox->cleanText(); port.stripWhiteSpace(); Config cfg("opieftp"); cfg.setGroup("Server"); // int current=cfg.readNumEntry("currentServer", 1); // if(ftp_host!= cfg.readEntry(QString::number( current))) // currentServerConfig=-1; // cfg.setGroup(QString::number(current)); // if( ftp_user != cfg.readEntry("Username")) // currentServerConfig=-1; // if(ftp_pass != cfg.readEntry(cfg.readEntry("Username"))) // currentServerConfig=-1; if(ftp_host.find("ftp://",0, TRUE) != -1 ) ftp_host=ftp_host.right(ftp_host.length()-6); ftp_host+=":"+port; if (!FtpConnect( ftp_host.latin1(), &conn)) { QMessageBox::message(tr("Note"),tr("Unable to connect to\n")+ftp_host); connectServerBtn->setOn(FALSE); connectServerBtn->setText( tr("Connect")); return ; } if (!FtpLogin( ftp_user.latin1(), ftp_pass.latin1(),conn )) { QString msg; msg.sprintf(tr("Unable to log in\n")+"%s",FtpLastResponse(conn)); msg.replace(QRegExp(":"),"\n"); QMessageBox::message(tr("Note"),msg); if(conn) FtpQuit(conn); connectServerBtn->setOn(FALSE); connectServerBtn->setText( tr("Connect")); return ; } remoteDirList("/") ; setCaption(ftp_host); if( currentServerConfig == -1) writeConfig(); connectServerBtn->setText( tr("Disconnect")); // QCopEnvelope ( "QPE/System", "notBusy()" ); } void OpieFtp::disConnector() { if(conn) FtpQuit(conn); setCaption("OpieFtp"); currentRemoteDir="/"; Remote_View->clear(); connectServerBtn->setText( tr("Connect")); connectServerBtn->setOn(FALSE); setCaption("OpieFtp"); } void OpieFtp::localUpload() { int fsz; // QCopEnvelope ( "QPE/System", "busy()" ); // qApp->processEvents(); QList<QListViewItem> * getSelectedItems( QListView * Local_View ); QListViewItemIterator it( Local_View ); for ( ; it.current(); ++it ) { if ( it.current()->isSelected() ) { QString strItem = it.current()->text(0); QString localFile = currentDir.canonicalPath()+"/"+strItem; QString remoteFile= currentRemoteDir+strItem; QFileInfo fi(localFile); if( !fi.isDir()) { fsz=fi.size(); ProgressBar->setTotalSteps(fsz); FtpOptions(FTPLIB_CALLBACK, (long) log_progress, conn); FtpOptions(FTPLIB_IDLETIME, (long) 1000, conn); FtpOptions(FTPLIB_CALLBACKARG, (long) &fsz, conn); FtpOptions(FTPLIB_CALLBACKBYTES, (long) fsz/10, conn); qDebug("Put: %s, %s",localFile.latin1(),remoteFile.latin1()); if( !FtpPut( localFile.latin1(), remoteFile.latin1(),FTPLIB_IMAGE, conn ) ) { QString msg; msg.sprintf(tr("Unable to upload\n")+"%s",FtpLastResponse(conn)); msg.replace(QRegExp(":"),"\n"); QMessageBox::message(tr("Note"),msg); } } else { QMessageBox::message(tr("Note"),tr("Cannot upload directories")); } ProgressBar->reset(); nullifyCallBack(); it.current()->setSelected(FALSE); } //end currentSelected } for ( ; it.current(); ++it ) { Local_View->clearSelection(); } Local_View->clearFocus(); TabWidget->setCurrentPage(1); remoteDirList( (const QString &)currentRemoteDir); //this also calls populate // QCopEnvelope ( "QPE/System", "notBusy()" ); } void OpieFtp::nullifyCallBack() { FtpOptions(FTPLIB_CALLBACK, 0, conn); FtpOptions(FTPLIB_IDLETIME, 0, conn); FtpOptions(FTPLIB_CALLBACKARG, 0, conn); FtpOptions(FTPLIB_CALLBACKBYTES, 0, conn); } void OpieFtp::remoteDownload() { // qApp->processEvents(); int fsz; // QCopEnvelope ( "QPE/System", "busy()" ); QList<QListViewItem> * getSelectedItems( QListView * Remote_View ); QListViewItemIterator it( Remote_View ); for ( ; it.current(); ++it ) { if ( it.current()->isSelected() ) { QString strItem = it.current()->text(0); // strItem=strItem.right(strItem.length()-1); QString localFile = currentDir.canonicalPath(); if(localFile.right(1).find("/",0,TRUE) == -1) localFile += "/"; localFile += strItem; // QString localFile = currentDir.canonicalPath()+"/"+strItem; QString remoteFile= currentRemoteDir+strItem; if (!FtpSize( remoteFile.latin1(), &fsz, FTPLIB_ASCII, conn)) fsz = 0; QString temp; temp.sprintf( remoteFile+" "+" %dkb", fsz); ProgressBar->setTotalSteps(fsz); FtpOptions(FTPLIB_CALLBACK, (long) log_progress, conn); FtpOptions(FTPLIB_IDLETIME, (long) 1000, conn); FtpOptions(FTPLIB_CALLBACKARG, (long) &fsz, conn); FtpOptions(FTPLIB_CALLBACKBYTES, (long) fsz/10, conn); qDebug("Get: %s, %s",localFile.latin1(),remoteFile.latin1()); if(!FtpGet( localFile.latin1(), remoteFile.latin1(),FTPLIB_IMAGE, conn ) ) { QString msg; msg.sprintf(tr("Unable to download \n")+"%s",FtpLastResponse(conn)); msg.replace(QRegExp(":"),"\n"); QMessageBox::message(tr("Note"),msg); } ProgressBar->reset(); nullifyCallBack(); it.current()->setSelected(FALSE); } } for ( ; it.current(); ++it ) { Remote_View->clearSelection(); } Remote_View->setFocus(); TabWidget->setCurrentPage(0); populateLocalView(); // QCopEnvelope ( "QPE/System", "notBusy()" ); } bool OpieFtp::remoteDirList(const QString &dir) { QString tmp = QDir::homeDirPath(); if(tmp.right(1) != "/") tmp+="/._temp"; else tmp+="._temp"; // qDebug("Listing remote dir "+tmp); // QCopEnvelope ( "QPE/System", "busy()" ); if (!FtpDir( tmp.latin1(), dir.latin1(), conn) ) { QString msg; msg.sprintf(tr("Unable to list the directory\n")+dir+"\n%s",FtpLastResponse(conn) ); msg.replace(QRegExp(":"),"\n"); QMessageBox::message(tr("Note"),msg); return false; } populateRemoteView() ; // QCopEnvelope ( "QPE/System", "notBusy()" ); return true; } bool OpieFtp::remoteChDir(const QString &dir) { // QCopEnvelope ( "QPE/System", "busy()" ); if (!FtpChdir( dir.latin1(), conn )) { QString msg; msg.sprintf(tr("Unable to change directories\n")+dir+"\n%s",FtpLastResponse(conn)); msg.replace(QRegExp(":"),"\n"); QMessageBox::message(tr("Note"),msg); // qDebug(msg); // QCopEnvelope ( "QPE/System", "notBusy()" ); return FALSE; } // QCopEnvelope ( "QPE/System", "notBusy()" ); return TRUE; } void OpieFtp::populateLocalView() { Local_View->clear(); currentDir.setSorting(/* QDir::Size*/ /*| QDir::Reversed | */QDir::DirsFirst); currentDir.setMatchAllDirs(TRUE); currentDir.setNameFilter(filterStr); QString fileL, fileS, fileDate; bool isDir=FALSE; const QFileInfoList *list = currentDir.entryInfoList( /*QDir::All*/ /*, QDir::SortByMask*/); QFileInfoListIterator it(*list); QFileInfo *fi; while ( (fi=it.current()) ) { if (fi->isSymLink() ){ QString symLink=fi->readLink(); qDebug("Symlink detected "+symLink); QFileInfo sym( symLink); fileS.sprintf( "%10i", sym.size() ); fileL.sprintf( "%s -> %s", fi->fileName().data(),sym.absFilePath().data() ); fileDate = sym.lastModified().toString(); } else { qDebug("Not a dir: "+currentDir.canonicalPath()+fileL); fileS.sprintf( "%10i", fi->size() ); fileL.sprintf( "%s",fi->fileName().data() ); fileDate= fi->lastModified().toString(); if( QDir(QDir::cleanDirPath(currentDir.canonicalPath()+"/"+fileL)).exists() ) { fileL+="/"; isDir=TRUE; qDebug( fileL); } } if(fileL !="./" && fi->exists()) { item = new QListViewItem( Local_View,fileL, fileDate, fileS ); QPixmap pm; if(isDir || fileL.find("/",0,TRUE) != -1) { if( !QDir( fi->filePath() ).isReadable()) pm = Resource::loadPixmap( "lockedfolder" ); else pm= Resource::loadPixmap( "folder" ); item->setPixmap( 0,pm ); } else { if( !fi->isReadable() ) pm = Resource::loadPixmap( "locked" ); else { MimeType mt(fi->filePath()); pm=mt.pixmap(); //sets the correct pixmap for mimetype if(pm.isNull()) pm = unknownXpm; } } if( fileL.find("->",0,TRUE) != -1) { diff --git a/noncore/net/opieirc/ircchanneltab.cpp b/noncore/net/opieirc/ircchanneltab.cpp index b0771f6..667e977 100644 --- a/noncore/net/opieirc/ircchanneltab.cpp +++ b/noncore/net/opieirc/ircchanneltab.cpp @@ -1,165 +1,165 @@ #include <qpe/resource.h> #include <qwhatsthis.h> #include <qhbox.h> #include "ircchanneltab.h" #include "ircservertab.h" IRCChannelTab::IRCChannelTab(IRCChannel *channel, IRCServerTab *parentTab, MainWindow *mainWindow, QWidget *parent, const char *name, WFlags f) : IRCTab(parent, name, f) { m_mainWindow = mainWindow; m_parentTab = parentTab; m_channel = channel; m_description->setText(tr("Talking on channel") + " <b>" + channel->channelname() + "</b>"); QHBox *hbox = new QHBox(this); m_textview = new QTextView(hbox); m_textview->setHScrollBarMode(QScrollView::AlwaysOff); m_textview->setVScrollBarMode(QScrollView::AlwaysOn); m_listVisible = TRUE; m_listButton = new QPushButton(">", m_textview); m_textview->setCornerWidget(m_listButton); m_textview->setTextFormat(RichText); QWhatsThis::add(m_textview, tr("Channel discussion")); connect(m_listButton, SIGNAL(clicked()), this, SLOT(toggleList())); m_list = new IRCChannelList(m_channel, hbox); m_list->update(); m_list->setMaximumWidth(LISTWIDTH); m_field = new IRCHistoryLineEdit(this); QWhatsThis::add(m_field, tr("Type your message here to participate in the channel discussion")); m_popup = new QPopupMenu(m_list); m_lines = 0; /* Required so that embedded-style "right" clicks work */ QPEApplication::setStylusOperation(m_list->viewport(), QPEApplication::RightOnHold); - connect(m_list, SIGNAL(mouseButtonPressed(int, QListBoxItem *, const QPoint&)), this, SLOT(mouseButtonPressed(int, QListBoxItem *, const QPoint &))); + connect(m_list, SIGNAL(mouseButtonPressed(int,QListBoxItem*,const QPoint&)), this, SLOT(mouseButtonPressed(int,QListBoxItem*,const QPoint&))); /* Construct the popup menu */ QPopupMenu *ctcpMenu = new QPopupMenu(m_list); m_popup->insertItem(Resource::loadPixmap("opieirc/ctcp"), tr("CTCP"), ctcpMenu); m_popup->insertItem(Resource::loadPixmap("opieirc/query"), tr("Query"), this, SLOT(popupQuery())); ctcpMenu->insertItem(Resource::loadPixmap("opieirc/ping"), tr("Ping"), this, SLOT(popupPing())); ctcpMenu->insertItem(Resource::loadPixmap("opieirc/version"), tr("Version"), this, SLOT(popupVersion())); ctcpMenu->insertItem(Resource::loadPixmap("opieirc/whois"), tr("Whois"), this, SLOT(popupWhois())); connect(m_mainWindow, SIGNAL(updateScroll()), this, SLOT(scrolling())); m_layout->add(hbox); hbox->show(); m_layout->add(m_field); m_field->setFocus(); connect(m_field, SIGNAL(returnPressed()), this, SLOT(processCommand())); settingsChanged(); } void IRCChannelTab::scrolling(){ m_textview->ensureVisible(0, m_textview->contentsHeight()); } void IRCChannelTab::appendText(QString text) { /* not using append because it creates layout problems */ QString txt = m_textview->text() + text + "\n"; if (m_maxLines > 0 && m_lines >= m_maxLines) { int firstBreak = txt.find('\n'); if (firstBreak != -1) { txt = "<qt bgcolor=\"" + m_backgroundColor + "\"/>" + txt.right(txt.length() - (firstBreak + 1)); } } else { m_lines++; } m_textview->ensureVisible(0, m_textview->contentsHeight()); m_textview->setText(txt); m_textview->ensureVisible(0, m_textview->contentsHeight()); emit changed(this); } IRCChannelTab::~IRCChannelTab() { m_parentTab->removeChannelTab(this); } void IRCChannelTab::processCommand() { QString text = m_field->text(); if (text.length()>0) { if (session()->isSessionActive()) { if (text.startsWith("/") && !text.startsWith("//")) { /* Command mode */ m_parentTab->executeCommand(this, text);; } else { if (text.startsWith("//")) text = text.right(text.length()-1); session()->sendMessage(m_channel, m_field->text()); appendText("<font color=\"" + m_textColor + "\"><</font><font color=\"" + m_selfColor + "\">"+m_parentTab->server()->nick()+"</font><font color=\"" + m_textColor + "\">> "+IRCOutput::toHTML(m_field->text())+"</font><br>"); } } else { appendText("<font color=\"" + m_errorColor + "\">"+tr("Disconnected")+"</font><br>"); } } m_field->clear(); } void IRCChannelTab::settingsChanged() { m_textview->setText("<qt bgcolor=\"" + m_backgroundColor + "\"/>"); m_lines = 0; } void IRCChannelTab::toggleList() { if (m_listVisible) { m_list->setMaximumWidth(0); m_listButton->setText("<"); } else { m_list->setMaximumWidth(LISTWIDTH); m_listButton->setText(">"); } m_listVisible = !m_listVisible; } void IRCChannelTab::mouseButtonPressed(int mouse, QListBoxItem *, const QPoint &point) { switch (mouse) { case 1: break; case 2: m_popup->popup(point); break; }; } void IRCChannelTab::popupQuery() { if (m_list->currentItem() != -1) { IRCPerson *person = session()->getPerson(m_list->item(m_list->currentItem())->text()); if (person) { IRCQueryTab *tab = m_parentTab->getTabForQuery(person); if (!tab) { tab = new IRCQueryTab(person, m_parentTab, m_mainWindow, (QWidget *)parent()); m_parentTab->addQueryTab(tab); m_mainWindow->addTab(tab); } } } } void IRCChannelTab::popupPing() { //HAHA, no wonder these don't work } void IRCChannelTab::popupVersion() { } void IRCChannelTab::popupWhois() { } QString IRCChannelTab::title() { return m_channel->channelname(); } IRCSession *IRCChannelTab::session() { return m_parentTab->session(); } void IRCChannelTab::remove() { if (session()->isSessionActive()) { session()->part(m_channel); } else { m_mainWindow->killTab(this); } } IRCChannel *IRCChannelTab::channel() { return m_channel; } IRCChannelList *IRCChannelTab::list() { return m_list; } diff --git a/noncore/net/opieirc/ircsession.cpp b/noncore/net/opieirc/ircsession.cpp index 6404d71..3b176d0 100644 --- a/noncore/net/opieirc/ircsession.cpp +++ b/noncore/net/opieirc/ircsession.cpp @@ -1,150 +1,150 @@ #include "ircsession.h" #include "ircmessageparser.h" #include "ircversion.h" IRCSession::IRCSession(IRCServer *server) { m_server = server; m_connection = new IRCConnection(m_server); m_parser = new IRCMessageParser(this); - connect(m_connection, SIGNAL(messageArrived(IRCMessage *)), this, SLOT(handleMessage(IRCMessage *))); + connect(m_connection, SIGNAL(messageArrived(IRCMessage*)), this, SLOT(handleMessage(IRCMessage*))); connect(m_parser, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); connect(m_connection, SIGNAL(outputReady(IRCOutput)), this, SIGNAL(outputReady(IRCOutput))); } IRCSession::~IRCSession() { /* We want this to get deleted automatically */ m_channels.setAutoDelete(TRUE); m_people.setAutoDelete(TRUE); delete m_parser; delete m_connection; } void IRCSession::beginSession() { m_connection->doConnect(); } void IRCSession::join(QString channelname) { m_connection->sendLine("JOIN "+channelname); } void IRCSession::quit(){ m_connection->sendLine("QUIT :[OI] I'm too good to need a reason"); } void IRCSession::quit(QString message){ m_connection->sendLine("QUIT :" + message); } void IRCSession::topic(IRCChannel *channel, QString message){ m_connection->sendLine("TOPIC :" + channel->channelname() + " " + message); } void IRCSession::mode(IRCChannel *channel, QString message){ m_connection->sendLine("MODE " + channel->channelname() + " " + message); } void IRCSession::mode(IRCPerson *person, QString message){ m_connection->sendLine("MODE " + person->nick() + " " + message); } void IRCSession::mode(QString message){ m_connection->sendLine("MODE " + message); } void IRCSession::raw(QString message){ m_connection->sendLine(message); } void IRCSession::kick(IRCChannel *channel, IRCPerson *person) { m_connection->sendLine("KICK "+ channel->channelname() + " " + person->nick() +" :0wn3d - no reason"); } void IRCSession::op(IRCChannel *channel, IRCPerson *person) { m_connection->sendLine("MODE "+ channel->channelname() + " +ooo " + person->nick()); } void IRCSession::kick(IRCChannel *channel, IRCPerson *person, QString message) { m_connection->sendLine("KICK "+ channel->channelname() + " " + person->nick() +" :" + message); } void IRCSession::sendMessage(IRCPerson *person, QString message) { m_connection->sendLine("PRIVMSG " + person->nick() + " :" + message); } void IRCSession::sendMessage(IRCChannel *channel, QString message) { m_connection->sendLine("PRIVMSG " + channel->channelname() + " :" + message); } void IRCSession::sendAction(IRCChannel *channel, QString message) { m_connection->sendLine("PRIVMSG " + channel->channelname() + " :\001ACTION " + message + "\001"); } void IRCSession::sendAction(IRCPerson *person, QString message) { m_connection->sendLine("PRIVMSG " + person->nick() + " :\001ACTION " + message + "\001"); } bool IRCSession::isSessionActive() { return m_connection->isConnected(); } void IRCSession::endSession() { if (m_connection->isLoggedIn()) m_connection->sendLine("QUIT :" APP_VERSION); else m_connection->close(); } void IRCSession::part(IRCChannel *channel) { m_connection->sendLine("PART " + channel->channelname() + " :" + APP_VERSION); } IRCChannel *IRCSession::getChannel(QString channelname) { QListIterator<IRCChannel> it(m_channels); for (; it.current(); ++it) { if (it.current()->channelname() == channelname) { return it.current(); } } return 0; } IRCPerson *IRCSession::getPerson(QString nickname) { QListIterator<IRCPerson> it(m_people); for (; it.current(); ++it) { if (it.current()->nick() == nickname) { return it.current(); } } return 0; } void IRCSession::getChannelsByPerson(IRCPerson *person, QList<IRCChannel> &channels) { QListIterator<IRCChannel> it(m_channels); for (; it.current(); ++it) { if (it.current()->getPerson(person->nick()) != 0) { channels.append(it.current()); } } } void IRCSession::addPerson(IRCPerson *person) { m_people.append(person); } void IRCSession::addChannel(IRCChannel *channel) { m_channels.append(channel); } void IRCSession::removeChannel(IRCChannel *channel) { m_channels.remove(channel); } void IRCSession::removePerson(IRCPerson *person) { m_people.remove(person); } void IRCSession::handleMessage(IRCMessage *message) { m_parser->parse(message); } diff --git a/noncore/net/opieirc/mainwindow.cpp b/noncore/net/opieirc/mainwindow.cpp index 7414154..0923a11 100644 --- a/noncore/net/opieirc/mainwindow.cpp +++ b/noncore/net/opieirc/mainwindow.cpp @@ -1,91 +1,91 @@ #include <qmenubar.h> #include <qpe/resource.h> #include <qwhatsthis.h> #include "mainwindow.h" #include "ircservertab.h" #include "ircserverlist.h" #include "ircsettings.h" MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) { setCaption(tr("IRC Client")); m_tabWidget = new IRCTabWidget(this); QWhatsThis::add(m_tabWidget, tr("Server connections, channels, queries and other things will be placed here")); - connect(m_tabWidget, SIGNAL(currentChanged(QWidget *)), this, SLOT(selected(QWidget *))); + connect(m_tabWidget, SIGNAL(currentChanged(QWidget*)), this, SLOT(selected(QWidget*))); setCentralWidget(m_tabWidget); setToolBarsMovable(FALSE); QMenuBar *menuBar = new QMenuBar(this); QPopupMenu *irc = new QPopupMenu(this); menuBar->insertItem(tr("IRC"), irc); QAction *a = new QAction(tr("New connection"), Resource::loadPixmap("pass"), QString::null, 0, this, 0); connect(a, SIGNAL(activated()), this, SLOT(newConnection())); a->setWhatsThis(tr("Create a new connection to an IRC server")); a->addTo(irc); a = new QAction(tr("Settings"), Resource::loadPixmap("SettingsIcon"), QString::null, 0, this, 0); a->setWhatsThis(tr("Configure OpieIRC's behavior and appearance")); connect(a, SIGNAL(activated()), this, SLOT(settings())); a->addTo(irc); loadSettings(); } /*IRCTabWidget MainWindow::getTabWidget(){ return m_tabWidget; } */ void MainWindow::loadSettings() { Config config("OpieIRC"); config.setGroup("OpieIRC"); IRCTab::m_backgroundColor = config.readEntry("BackgroundColor", "#FFFFFF"); IRCTab::m_textColor = config.readEntry("TextColor", "#000000"); IRCTab::m_errorColor = config.readEntry("ErrorColor", "#FF0000"); IRCTab::m_selfColor = config.readEntry("SelfColor", "#CC0000"); IRCTab::m_otherColor = config.readEntry("OtherColor", "#0000BB"); IRCTab::m_serverColor = config.readEntry("ServerColor", "#0000FF"); IRCTab::m_notificationColor = config.readEntry("NotificationColor", "#AA3300"); IRCTab::m_maxLines = config.readNumEntry("Lines", 100); } void MainWindow::selected(QWidget *) { m_tabWidget->setTabColor(m_tabWidget->currentPageIndex(), black); emit updateScroll(); } void MainWindow::addTab(IRCTab *tab) { - connect(tab, SIGNAL(changed(IRCTab *)), this, SLOT(changeEvent(IRCTab *))); + connect(tab, SIGNAL(changed(IRCTab*)), this, SLOT(changeEvent(IRCTab*))); m_tabWidget->addTab(tab, tab->title()); m_tabWidget->showPage(tab); tab->setID(m_tabWidget->currentPageIndex()); m_tabs.append(tab); } void MainWindow::changeEvent(IRCTab *tab) { if (tab->id() != m_tabWidget->currentPageIndex()) m_tabWidget->setTabColor(tab->id(), blue); } void MainWindow::killTab(IRCTab *tab) { m_tabWidget->removePage(tab); m_tabs.remove(tab); /* there might be nicer ways to do this .. */ delete tab; } void MainWindow::newConnection() { IRCServerList list(this, "ServerList", TRUE); if (list.exec() == QDialog::Accepted && list.hasServer()) { IRCServerTab *serverTab = new IRCServerTab(list.server(), this, m_tabWidget); addTab(serverTab); serverTab->doConnect(); } } void MainWindow::settings() { IRCSettings settings(this, "Settings", TRUE); if (settings.exec() == QDialog::Accepted) { QListIterator<IRCTab> it(m_tabs); for (; it.current(); ++it) { /* Inform all tabs about the new settings */ it.current()->settingsChanged(); } } } diff --git a/noncore/net/opietooth/lib/startdunconnection.cpp b/noncore/net/opietooth/lib/startdunconnection.cpp index 6b6d247..c3850eb 100644 --- a/noncore/net/opietooth/lib/startdunconnection.cpp +++ b/noncore/net/opietooth/lib/startdunconnection.cpp @@ -1,67 +1,67 @@ #include "startdunconnection.h" using namespace OpieTooth; StartDunConnection::StartDunConnection() { m_dunConnect = 0l; setConnectionType(); } StartDunConnection::~StartDunConnection() { delete m_dunConnect; } StartDunConnection::StartDunConnection( QString mac ) { m_dunConnect = 0l; m_mac = mac; setConnectionType(); } void StartDunConnection::setName( QString name ) { m_name = name; } QString StartDunConnection::name() { return m_name; } void StartDunConnection::setConnectionType() { m_connectionType = Pan; } StartConnection::ConnectionType StartDunConnection::type() { return m_connectionType; } void StartDunConnection::start() { m_dunConnect = new OProcess(); *m_dunConnect << "dund" << "--listen" << "--connect" << m_mac; - connect( m_dunConnect, SIGNAL( processExited( OProcess* ) ) , - this, SLOT( slotExited( OProcess* ) ) ); - connect( m_dunConnect, SIGNAL( receivedStdout( OProcess*, char*, int ) ), - this, SLOT( slotStdOut( OProcess*, char*, int ) ) ); + connect( m_dunConnect, SIGNAL( processExited(OProcess*) ) , + this, SLOT( slotExited(OProcess*) ) ); + connect( m_dunConnect, SIGNAL( receivedStdout(OProcess*,char*,int) ), + this, SLOT( slotStdOut(OProcess*,char*,int) ) ); if (!m_dunConnect->start( OProcess::NotifyOnExit, OProcess::AllOutput) ) { qWarning( "could not start" ); delete m_dunConnect; } } void StartDunConnection::slotExited( OProcess* proc ) { delete m_dunConnect; } void StartDunConnection::slotStdOut(OProcess* proc, char* chars, int len) {} void StartDunConnection::stop() { if ( m_dunConnect ) { delete m_dunConnect; m_dunConnect = 0l; } } diff --git a/noncore/net/opietooth/lib/startpanconnection.cpp b/noncore/net/opietooth/lib/startpanconnection.cpp index 6e0ab7e..a42b407 100644 --- a/noncore/net/opietooth/lib/startpanconnection.cpp +++ b/noncore/net/opietooth/lib/startpanconnection.cpp @@ -1,82 +1,82 @@ #include "startpanconnection.h" using namespace OpieTooth; StartPanConnection::StartPanConnection() { m_panConnect = 0l; setConnectionType(); } StartPanConnection::~StartPanConnection() { delete m_panConnect; } StartPanConnection::StartPanConnection( QString mac ) { m_panConnect = 0l; m_mac = mac; setConnectionType(); } void StartPanConnection::setName( QString name ) { m_name = name; } QString StartPanConnection::name() { return m_name; } void StartPanConnection::setConnectionType() { m_connectionType = Pan; } StartConnection::ConnectionType StartPanConnection::type() { return m_connectionType; } void StartPanConnection::start() { m_panConnect = new OProcess(); qDebug( "IM START " + m_mac ); *m_panConnect << "pand" << "--connect" << m_mac; - connect( m_panConnect, SIGNAL( processExited( OProcess* ) ) , - this, SLOT( slotExited( OProcess* ) ) ); - connect( m_panConnect, SIGNAL( receivedStdout( OProcess*, char*, int ) ), - this, SLOT( slotStdOut( OProcess*, char*, int ) ) ); + connect( m_panConnect, SIGNAL( processExited(OProcess*) ) , + this, SLOT( slotExited(OProcess*) ) ); + connect( m_panConnect, SIGNAL( receivedStdout(OProcess*,char*,int) ), + this, SLOT( slotStdOut(OProcess*,char*,int) ) ); if (!m_panConnect->start( OProcess::NotifyOnExit, OProcess::AllOutput) ) { qWarning( "could not start" ); delete m_panConnect; } } void StartPanConnection::slotExited( OProcess* proc ) { delete m_panConnect; m_panConnect = 0l; } void StartPanConnection::slotStdOut(OProcess* proc, char* chars, int len) {} void StartPanConnection::stop() { if ( m_panConnect ) { delete m_panConnect; m_panConnect = 0l; } m_panConnect = new OProcess(); qDebug("IM STOP " + m_mac); *m_panConnect << "pand" << "--kill" << m_mac; - connect( m_panConnect, SIGNAL( processExited( OProcess* ) ) , - this, SLOT( slotExited( OProcess* ) ) ); - connect( m_panConnect, SIGNAL( receivedStdout( OProcess*, char*, int ) ), - this, SLOT( slotStdOut( OProcess*, char*, int ) ) ); + connect( m_panConnect, SIGNAL( processExited(OProcess*) ) , + this, SLOT( slotExited(OProcess*) ) ); + connect( m_panConnect, SIGNAL( receivedStdout(OProcess*,char*,int) ), + this, SLOT( slotStdOut(OProcess*,char*,int) ) ); if (!m_panConnect->start( OProcess::NotifyOnExit, OProcess::AllOutput) ) { qWarning( "could not stop" ); delete m_panConnect; } } diff --git a/noncore/net/opietooth/manager/bluebase.cpp b/noncore/net/opietooth/manager/bluebase.cpp index 0ea45d2..29030ab 100644 --- a/noncore/net/opietooth/manager/bluebase.cpp +++ b/noncore/net/opietooth/manager/bluebase.cpp @@ -1,688 +1,688 @@ /* * bluebase.cpp * * --------------------- * * copyright : (c) 2002 by Maximilian Reiß * email : max.reiss@gmx.de * */ /*************************************************************************** * * * 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 "bluebase.h" #include "scandialog.h" #include "hciconfwrapper.h" #include "devicehandler.h" #include "btconnectionitem.h" #include "rfcommassigndialogimpl.h" /* OPIE */ #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/config.h> /* QT */ #include <qframe.h> #include <qlabel.h> #include <qpushbutton.h> #include <qlayout.h> #include <qvariant.h> #include <qimage.h> #include <qpixmap.h> #include <qtabwidget.h> #include <qscrollview.h> #include <qvbox.h> #include <qmessagebox.h> #include <qcheckbox.h> #include <qlineedit.h> #include <qlistview.h> #include <qdir.h> #include <qpopupmenu.h> #include <qtimer.h> #include <qlist.h> /* STD */ #include <remotedevice.h> #include <services.h> #include <stdlib.h> using namespace OpieTooth; BlueBase::BlueBase( QWidget* parent, const char* name, WFlags fl ) : BluetoothBase( parent, name, fl ) { m_localDevice = new Manager( "hci0" ); connect( PushButton2, SIGNAL( clicked() ), this, SLOT(startScan() ) ); connect( configApplyButton, SIGNAL(clicked() ), this, SLOT(applyConfigChanges() ) ); connect( rfcommBindButton, SIGNAL( clicked() ), this, SLOT( rfcommDialog() ) ); // not good since lib is async - // connect( ListView2, SIGNAL( expanded ( QListViewItem* ) ), - // this, SLOT( addServicesToDevice( QListViewItem * ) ) ); - connect( ListView2, SIGNAL( clicked( QListViewItem* )), - this, SLOT( startServiceActionClicked( QListViewItem* ) ) ); - connect( ListView2, SIGNAL( rightButtonClicked( QListViewItem *, const QPoint &, int ) ), - this, SLOT(startServiceActionHold( QListViewItem *, const QPoint &, int) ) ); - connect( m_localDevice , SIGNAL( foundServices( const QString& , Services::ValueList ) ), - this, SLOT( addServicesToDevice( const QString& , Services::ValueList ) ) ); - connect( m_localDevice, SIGNAL( available( const QString&, bool ) ), - this, SLOT( deviceActive( const QString& , bool ) ) ); - connect( m_localDevice, SIGNAL( connections( ConnectionState::ValueList ) ), - this, SLOT( addConnectedDevices( ConnectionState::ValueList ) ) ); - connect( m_localDevice, SIGNAL( signalStrength( const QString&, const QString& ) ), - this, SLOT( addSignalStrength( const QString&, const QString& ) ) ); + // connect( ListView2, SIGNAL( expanded(QListViewItem*) ), + // this, SLOT( addServicesToDevice(QListViewItem*) ) ); + connect( ListView2, SIGNAL( clicked(QListViewItem*)), + this, SLOT( startServiceActionClicked(QListViewItem*) ) ); + connect( ListView2, SIGNAL( rightButtonClicked(QListViewItem*,const QPoint&,int) ), + this, SLOT(startServiceActionHold(QListViewItem*,const QPoint&,int) ) ); + connect( m_localDevice , SIGNAL( foundServices(const QString&,Services::ValueList) ), + this, SLOT( addServicesToDevice(const QString&,Services::ValueList) ) ); + connect( m_localDevice, SIGNAL( available(const QString&,bool) ), + this, SLOT( deviceActive(const QString&,bool) ) ); + connect( m_localDevice, SIGNAL( connections(ConnectionState::ValueList) ), + this, SLOT( addConnectedDevices(ConnectionState::ValueList) ) ); + connect( m_localDevice, SIGNAL( signalStrength(const QString&,const QString&) ), + this, SLOT( addSignalStrength(const QString&,const QString&) ) ); // let hold be rightButtonClicked() QPEApplication::setStylusOperation( ListView2->viewport(), QPEApplication::RightOnHold); QPEApplication::setStylusOperation( ListView4->viewport(), QPEApplication::RightOnHold); //Load all icons needed m_offPix = Resource::loadPixmap( "opietooth/notconnected" ); m_onPix = Resource::loadPixmap( "opietooth/connected" ); m_findPix = Resource::loadPixmap( "opietooth/find" ); QPalette pal = this->palette(); QColor col = pal.color( QPalette::Active, QColorGroup::Background ); pal.setColor( QPalette::Active, QColorGroup::Button, col ); pal.setColor( QPalette::Inactive, QColorGroup::Button, col ); pal.setColor( QPalette::Normal, QColorGroup::Button, col ); pal.setColor( QPalette::Disabled, QColorGroup::Button, col ); this->setPalette( pal ); setCaption( tr( "Bluetooth Manager" ) ); readConfig(); initGui(); ListView2->setRootIsDecorated(true); writeToHciConfig(); // search conncetions addConnectedDevices(); addSignalStrength(); m_iconLoader = new BTIconLoader(); readSavedDevices(); } /** * Reads all options from the config file */ void BlueBase::readConfig() { Config cfg( "bluetoothmanager" ); cfg.setGroup( "bluezsettings" ); m_deviceName = cfg.readEntry( "name" , "No name" ); // name the device should identify with m_defaultPasskey = cfg.readEntryCrypt( "passkey" , "" ); // <- hmm, look up how good the trolls did that, maybe too weak m_useEncryption = cfg.readBoolEntry( "useEncryption" , TRUE ); m_enableAuthentification = cfg.readBoolEntry( "enableAuthentification" , TRUE ); m_enablePagescan = cfg.readBoolEntry( "enablePagescan" , TRUE ); m_enableInquiryscan = cfg.readBoolEntry( "enableInquiryscan" , TRUE ); } /** * Writes all options to the config file */ void BlueBase::writeConfig() { Config cfg( "bluetoothmanager" ); cfg.setGroup( "bluezsettings" ); cfg.writeEntry( "name" , m_deviceName ); cfg.writeEntryCrypt( "passkey" , m_defaultPasskey ); cfg.writeEntry( "useEncryption" , m_useEncryption ); cfg.writeEntry( "enableAuthentification" , m_enableAuthentification ); cfg.writeEntry( "enablePagescan" , m_enablePagescan ); cfg.writeEntry( "enableInquiryscan" , m_enableInquiryscan ); writeToHciConfig(); } /** * Modify the hcid.conf file to our needs */ void BlueBase::writeToHciConfig() { qWarning("writeToHciConfig"); HciConfWrapper hciconf ( "/etc/bluetooth/hcid.conf" ); hciconf.load(); hciconf.setPinHelper( "/opt/QtPalmtop/bin/bluepin" ); hciconf.setName( m_deviceName ); hciconf.setEncrypt( m_useEncryption ); hciconf.setAuth( m_enableAuthentification ); hciconf.setPscan( m_enablePagescan ); hciconf.setIscan( m_enableInquiryscan ); hciconf.save(); } /** * Read the list of allready known devices */ void BlueBase::readSavedDevices() { QValueList<RemoteDevice> loadedDevices; DeviceHandler handler; loadedDevices = handler.load(); addSearchedDevices( loadedDevices ); } /** * Write the list of allready known devices */ void BlueBase::writeSavedDevices() { QListViewItemIterator it( ListView2 ); BTListItem* item; BTDeviceItem* device; RemoteDevice::ValueList list; for ( ; it.current(); ++it ) { item = (BTListItem*)it.current(); if(item->typeId() != BTListItem::Device ) continue; device = (BTDeviceItem*)item; list.append( device->remoteDevice() ); } /* * if not empty save the List through DeviceHandler */ if ( list.isEmpty() ) return; DeviceHandler handler; handler.save( list ); } /** * Set up the gui */ void BlueBase::initGui() { StatusLabel->setText( status() ); // maybe move it to getStatus() cryptCheckBox->setChecked( m_useEncryption ); authCheckBox->setChecked( m_enableAuthentification ); pagescanCheckBox->setChecked( m_enablePagescan ); inquiryscanCheckBox->setChecked( m_enableInquiryscan ); deviceNameLine->setText( m_deviceName ); passkeyLine->setText( m_defaultPasskey ); // set info tab setInfo(); } /** * Get the status informations and returns it * @return QString the status informations gathered */ QString BlueBase::status()const { QString infoString = tr( "<b>Device name : </b> Ipaq" ); infoString += QString( "<br><b>" + tr( "MAC adress: " ) +"</b> No idea" ); infoString += QString( "<br><b>" + tr( "Class" ) + "</b> PDA" ); return (infoString); } /** * Read the current values from the gui and invoke writeConfig() */ void BlueBase::applyConfigChanges() { m_deviceName = deviceNameLine->text(); m_defaultPasskey = passkeyLine->text(); m_useEncryption = cryptCheckBox->isChecked(); m_enableAuthentification = authCheckBox->isChecked(); m_enablePagescan = pagescanCheckBox->isChecked(); m_enableInquiryscan = inquiryscanCheckBox->isChecked(); writeConfig(); QMessageBox::information( this, tr("Test") , tr("Changes were applied.") ); } /** * Launch Rfcomm Bind dialog * */ void BlueBase::rfcommDialog() { RfcommAssignDialog rfcommAssign ( this, "RfcommAssignDialog", true, WStyle_ContextHelp ); if ( QPEApplication::execDialog( &rfcommAssign ) == QDialog::Accepted ) { rfcommAssign.saveConfig(); } } /** * Add fresh found devices from scan dialog to the listing * */ void BlueBase::addSearchedDevices( const QValueList<RemoteDevice> &newDevices ) { BTDeviceItem * deviceItem; QValueList<RemoteDevice>::ConstIterator it; for( it = newDevices.begin(); it != newDevices.end() ; ++it ) { if (find( (*it) )) // is already inserted continue; deviceItem = new BTDeviceItem( ListView2 , (*it) ); deviceItem->setPixmap( 1, m_findPix ); deviceItem->setExpandable ( true ); // look if device is avail. atm, async deviceActive( (*it) ); // ggf auch hier? addServicesToDevice( deviceItem ); } } /** * Action that is toggled on entrys on click */ void BlueBase::startServiceActionClicked( QListViewItem */*item*/ ) {} /** * Action that are toggled on hold (mostly QPopups i guess) */ void BlueBase::startServiceActionHold( QListViewItem * item, const QPoint & point, int /*column*/ ) { if (!item ) return; QPopupMenu *menu = new QPopupMenu(); int ret=0; if ( ((BTListItem*)item)->type() == "device") { QPopupMenu *groups = new QPopupMenu(); menu->insertItem( ((BTDeviceItem*)item)->name(),0 ); menu->insertSeparator(1); menu->insertItem( tr("rescan sevices"), 2); menu->insertItem( tr("to group"), groups , 3); menu->insertItem( tr("delete"), 4); ret = menu->exec( point , 0); switch(ret) { case -1: break; case 2: addServicesToDevice( (BTDeviceItem*)item ); break; case 4: // deletes childs too delete item; break; } delete groups; } /* * We got service sensitive PopupMenus in our factory * We will create one through the factory and will insert * our Separator + ShowInfo into the menu or create a new * one if the factory returns 0 * PopupMenu deletion is kind of weird. * If escaped( -1 ) or any of our items were chosen we'll * delete the PopupMenu otherwise it's the responsibility of * the PopupMenu to delete itself * */ else if ( ((BTListItem*)item)->type() == "service") { BTServiceItem* service = (BTServiceItem*)item; QMap<int, QString> list = service->services().classIdList(); QMap<int, QString>::Iterator it = list.begin(); QPopupMenu *popup =0l; if ( it != list.end() ) { qWarning("Searching id %d %s", it.key(), it.data().latin1() ); popup = m_popHelper.find( it.key(), service->services(), (BTDeviceItem*)service->parent() ); } else { qWarning("Empty"); } if ( popup == 0l ) { qWarning("factory returned 0l"); popup = new QPopupMenu(); } int test1 = popup->insertItem( tr("Test1:"), 2); ret = popup->exec( point ); qWarning("returned from exec() "); if ( ret == -1 ) { ; } else if ( ret == test1 ) { ; } delete popup; } delete menu; } /** * Search and display avail. services for a device (on expand from device listing) * @param item the service item returned */ void BlueBase::addServicesToDevice( BTDeviceItem * item ) { qDebug("addServicesToDevice"); // row of mac adress text(3) RemoteDevice device = item->remoteDevice(); m_deviceList.insert( item->mac() , item ); // and some time later I get a signal foundServices( const QString& device, Services::ValueList ); back m_localDevice->searchServices( device ); } /** * Overloaded. This one it the one that is ted to the foundServices signal * @param device the mac address of the remote device * @param servicesList the list with the service the device has. */ void BlueBase::addServicesToDevice( const QString& device, Services::ValueList servicesList ) { qDebug("fill services list"); QMap<QString,BTDeviceItem*>::Iterator it; BTDeviceItem* deviceItem = 0; // get the right devices which requested the search it = m_deviceList.find( device ); if( it == m_deviceList.end() ) return; deviceItem = it.data(); // remove previous entries QList<QListViewItem> tempList; tempList.setAutoDelete( true ); QListViewItem * child = deviceItem->firstChild(); while( child ) { tempList.append( child ); child = child->nextSibling(); } tempList.clear(); QValueList<OpieTooth::Services>::Iterator it2; BTServiceItem* serviceItem; if (!servicesList.isEmpty() ) { // add services QMap<int, QString> list; QMap<int, QString>::Iterator classIt; for( it2 = servicesList.begin(); it2 != servicesList.end(); ++it2 ) { serviceItem = new BTServiceItem( deviceItem, (*it2) ); list = (*it2).classIdList(); classIt = list.begin(); int classId=0; if ( classIt != list.end() ) { classId = classIt.key(); } serviceItem->setPixmap( 0, m_iconLoader->serviceIcon( classId ) ); } } else { Services s1; s1.setServiceName( tr("no services found") ); serviceItem = new BTServiceItem( deviceItem, s1 ); } // now remove them from the list m_deviceList.remove( it ); } void BlueBase::addSignalStrength() { QListViewItemIterator it( ListView4 ); for ( ; it.current(); ++it ) { m_localDevice->signalStrength( ((BTConnectionItem*)it.current() )->connection().mac() ); } QTimer::singleShot( 5000, this, SLOT( addSignalStrength() ) ); } void BlueBase::addSignalStrength( const QString& mac, const QString& strength ) { QListViewItemIterator it( ListView4 ); for ( ; it.current(); ++it ) { if( ((BTConnectionItem*)it.current())->connection().mac() == mac ) { ((BTConnectionItem*)it.current() )->setSignalStrength( strength ); } } } /** * Add the existing connections (pairs) to the connections tab. * This one triggers the search */ void BlueBase::addConnectedDevices() { m_localDevice->searchConnections(); } /** * This adds the found connections to the connection tab. * @param connectionList the ValueList with all current connections */ void BlueBase::addConnectedDevices( ConnectionState::ValueList connectionList ) { QValueList<OpieTooth::ConnectionState>::Iterator it; BTConnectionItem * connectionItem; if ( !connectionList.isEmpty() ) { for (it = connectionList.begin(); it != connectionList.end(); ++it) { QListViewItemIterator it2( ListView4 ); bool found = false; for ( ; it2.current(); ++it2 ) { if( ( (BTConnectionItem*)it2.current())->connection().mac() == (*it).mac() ) { found = true; } } if ( found == false ) { connectionItem = new BTConnectionItem( ListView4, (*it) ); if( m_deviceList.find((*it).mac()).data() ) { connectionItem->setName( m_deviceList.find( (*it).mac()).data()->name() ); } } } QListViewItemIterator it2( ListView4 ); for ( ; it2.current(); ++it2 ) { bool found = false; for (it = connectionList.begin(); it != connectionList.end(); ++it) { if( ( ((BTConnectionItem*)it2.current())->connection().mac() ) == (*it).mac() ) { found = true; } } if ( !found ) { delete it2.current(); } } } else { ListView4->clear(); ConnectionState con; con.setMac( tr("No connections found") ); connectionItem = new BTConnectionItem( ListView4 , con ); } // recall connection search after some time QTimer::singleShot( 15000, this, SLOT( addConnectedDevices() ) ); } /** * Find out if a device can currently be reached * @param device */ void BlueBase::deviceActive( const RemoteDevice &device ) { // search by mac, async, gets a signal back // We should have a BTDeviceItem there or where does it get added to the map -zecke m_localDevice->isAvailable( device.mac() ); } /** * The signal catcher. Set the avail. status on device. * @param device - the mac address * @param connected - if it is avail. or not */ void BlueBase::deviceActive( const QString& device, bool connected ) { qDebug("deviceActive slot"); QMap<QString,BTDeviceItem*>::Iterator it; it = m_deviceList.find( device ); if( it == m_deviceList.end() ) return; BTDeviceItem* deviceItem = it.data(); if ( connected ) { deviceItem->setPixmap( 1, m_onPix ); } else { deviceItem->setPixmap( 1, m_offPix ); } m_deviceList.remove( it ); } /** * Open the "scan for devices" dialog */ void BlueBase::startScan() { ScanDialog *scan = new ScanDialog( this, "ScanDialog", true, WDestructiveClose ); - QObject::connect( scan, SIGNAL( selectedDevices( const QValueList<RemoteDevice>& ) ), - this, SLOT( addSearchedDevices( const QValueList<RemoteDevice>& ) ) ); + QObject::connect( scan, SIGNAL( selectedDevices(const QValueList<RemoteDevice>&) ), + this, SLOT( addSearchedDevices(const QValueList<RemoteDevice>&) ) ); QPEApplication::showDialog( scan ); } /** * Set the informations about the local device in information Tab */ void BlueBase::setInfo() { StatusLabel->setText( status() ); } /** * Decontructor */ BlueBase::~BlueBase() { writeSavedDevices(); delete m_iconLoader; } /** * find searches the ListView for a BTDeviceItem containig * the same Device if found return true else false * @param dev RemoteDevice to find * @return returns true if found */ bool BlueBase::find( const RemoteDevice& rem ) { QListViewItemIterator it( ListView2 ); BTListItem* item; BTDeviceItem* device; for (; it.current(); ++it ) { item = (BTListItem*) it.current(); if ( item->typeId() != BTListItem::Device ) continue; device = (BTDeviceItem*)item; if ( rem.equals( device->remoteDevice() ) ) return true; } return false; // not found } diff --git a/noncore/net/opietooth/manager/obexdialog.cpp b/noncore/net/opietooth/manager/obexdialog.cpp index 15973d4..46a0e3d 100644 --- a/noncore/net/opietooth/manager/obexdialog.cpp +++ b/noncore/net/opietooth/manager/obexdialog.cpp @@ -1,86 +1,86 @@ #include "obexdialog.h" #include <qpushbutton.h> #include <qmultilineedit.h> #include <qlineedit.h> #include <qlayout.h> #include <qlabel.h> #include <qfileinfo.h> #include <qpe/resource.h> #include <opie/oprocess.h> #include <opie/ofiledialog.h> using namespace OpieTooth; ObexDialog::ObexDialog( QWidget* parent, const char* name, bool modal, WFlags fl, const QString& device ) : QDialog( parent, name, modal, fl ) { if ( !name ) setName( "ObexDialog" ); setCaption( tr( "beam files " ) ) ; m_device = device; layout = new QVBoxLayout( this ); QLabel* info = new QLabel( this ); info->setText( tr("Which file should be beamed?") ); cmdLine = new QLineEdit( this ); QPushButton *browserButton; browserButton = new QPushButton( Resource::loadIconSet("fileopen"),"",this,"BrowseButton"); connect( browserButton, SIGNAL(released() ), this , SLOT(browse() ) ); chNameLine = new QLineEdit( this ); sendButton = new QPushButton( this ); sendButton->setText( tr( "Send" ) ); layout->addWidget(info); layout->addWidget(cmdLine); layout->addWidget(browserButton); layout->addWidget(chNameLine); layout->addWidget(sendButton); - connect( sendButton, SIGNAL( clicked() ), this, SLOT( sendData() ) ); + connect( sendButton, SIGNAL( clicked() ), this, SLOT( sendData() ) ); } ObexDialog::~ObexDialog() { } void ObexDialog::browse() { MimeTypes types; QStringList all; all << "*/*"; types.insert("All Files", all ); QString str = OFileDialog::getOpenFileName( 1,"/","", types, 0 ); cmdLine->setText( str ); } void ObexDialog::sendData() { QString fileURL = cmdLine->text(); QString file = QFileInfo( fileURL ).fileName(); QString modifiedName = chNameLine->text(); // vom popupmenu beziehen OProcess* obexSend = new OProcess(); if ( !modifiedName.isEmpty() ) { *obexSend << "ussp-push" << m_device << fileURL << modifiedName; } else { *obexSend << "ussp-push" << m_device << fileURL << file; } if (!obexSend->start(OProcess::DontCare, OProcess::AllOutput) ) { qWarning("could not start"); delete obexSend; } } diff --git a/noncore/net/opietooth/manager/pppdialog.cpp b/noncore/net/opietooth/manager/pppdialog.cpp index 1f347ce..4e58552 100644 --- a/noncore/net/opietooth/manager/pppdialog.cpp +++ b/noncore/net/opietooth/manager/pppdialog.cpp @@ -1,68 +1,68 @@ #include "pppdialog.h" #include <qpushbutton.h> #include <qmultilineedit.h> #include <qlineedit.h> #include <qlayout.h> #include <qlabel.h> #include <opie/oprocess.h> using namespace OpieTooth; PPPDialog::PPPDialog( QWidget* parent, const char* name, bool modal, WFlags fl, const QString& device ) : QDialog( parent, name, modal, fl ) { if ( !name ) setName( "PPPDialog" ); setCaption( tr( "ppp connection " ) ) ; m_device = device; layout = new QVBoxLayout( this ); QLabel* info = new QLabel( this ); info->setText( tr("Enter an ppp script name:") ); cmdLine = new QLineEdit( this ); outPut = new QMultiLineEdit( this ); QFont outPut_font( outPut->font() ); outPut_font.setPointSize( 8 ); outPut->setFont( outPut_font ); outPut->setWordWrap( QMultiLineEdit::WidgetWidth ); connectButton = new QPushButton( this ); connectButton->setText( tr( "Connect" ) ); layout->addWidget(info); layout->addWidget(cmdLine); layout->addWidget(outPut); layout->addWidget(connectButton); - connect( connectButton, SIGNAL( clicked() ), this, SLOT( connectToDevice() ) ); + connect( connectButton, SIGNAL( clicked() ), this, SLOT( connectToDevice() ) ); } PPPDialog::~PPPDialog() { } void PPPDialog::connectToDevice() { outPut->clear(); // vom popupmenu beziehen QString connectScript = "/etc/ppp/peers/" + cmdLine->text(); OProcess* pppDial = new OProcess(); *pppDial << "pppd" << m_device << "call" << connectScript; - connect( pppDial, SIGNAL(receivedStdout(OProcess*, char*, int ) ), - this, SLOT(fillOutPut(OProcess*, char*, int ) ) ); + connect( pppDial, SIGNAL(receivedStdout(OProcess*,char*,int) ), + this, SLOT(fillOutPut(OProcess*,char*,int) ) ); if (!pppDial->start(OProcess::DontCare, OProcess::AllOutput) ) { qWarning("could not start"); delete pppDial; } } void PPPDialog::fillOutPut( OProcess* pppDial, char* cha, int len ) { QCString str(cha, len ); outPut->insertLine( str ); delete pppDial; } diff --git a/noncore/net/opietooth/manager/scandialog.cpp b/noncore/net/opietooth/manager/scandialog.cpp index de4f742..c8ea3e3 100644 --- a/noncore/net/opietooth/manager/scandialog.cpp +++ b/noncore/net/opietooth/manager/scandialog.cpp @@ -1,161 +1,161 @@ /* main.cpp * * --------------------- * * copyright : (c) 2002 by Maximilian Reiß * email : max.reiss@gmx.de * */ /*************************************************************************** * * * 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 "scandialog.h" #include <qheader.h> #include <qlistview.h> #include <qpushbutton.h> #include <qlayout.h> #include <qvariant.h> #include <qtooltip.h> #include <qwhatsthis.h> #include <qprogressbar.h> #include <qlist.h> #include <manager.h> #include <device.h> namespace OpieTooth { #include <remotedevice.h> /** */ ScanDialog::ScanDialog( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { setCaption( tr( "Scan for devices" ) ); Layout11 = new QVBoxLayout( this ); Layout11->setSpacing( 6 ); Layout11->setMargin( 0 ); progress = new QProgressBar( this, "progbar"); progress->setTotalSteps(20); StartStopButton = new QPushButton( this, "StartButton" ); StartStopButton->setText( tr( "Start scan" ) ); ListView1 = new QListView( this, "ListView1" ); //ListView1->addColumn( tr( "Add" ) ); ListView1->addColumn( tr( "Add Device" ) ); //ListView1->addColumn( tr( "Type" ) ); Layout11->addWidget( ListView1 ); Layout11->addWidget( progress ); Layout11->addWidget( StartStopButton ); localDevice = new Manager( "hci0" ); connect( StartStopButton, SIGNAL( clicked() ), this, SLOT( startSearch() ) ); - connect( localDevice, SIGNAL( foundDevices( const QString& , RemoteDevice::ValueList ) ), - this, SLOT( fillList( const QString& , RemoteDevice::ValueList ) ) ) ; + connect( localDevice, SIGNAL( foundDevices(const QString&,RemoteDevice::ValueList) ), + this, SLOT( fillList(const QString&,RemoteDevice::ValueList) ) ) ; progressStat = 0; m_search = false; } // hack, make cleaner later void ScanDialog::progressTimer() { progressStat++; if ( progressStat++ < 20 && m_search ) { QTimer::singleShot( 2000, this, SLOT( progressTimer() ) ); progress->setProgress( progressStat++ ); } } void ScanDialog::accept() { emitToManager(); QDialog::accept(); } void ScanDialog::startSearch() { if ( m_search ) { stopSearch(); return; } m_search = true; progress->setProgress(0); progressStat = 0; // empty list before a new scan ListView1->clear(); progressTimer(); // when finished, it emmite foundDevices() // checken ob initialisiert , qcop ans applet. StartStopButton->setText( tr( "Stop scan" ) ); localDevice->searchDevices(); } void ScanDialog::stopSearch() { m_search = true; } void ScanDialog::fillList(const QString&, RemoteDevice::ValueList deviceList) { progress->setProgress(0); progressStat = 0; QCheckListItem * deviceItem; RemoteDevice::ValueList::Iterator it; for( it = deviceList.begin(); it != deviceList.end(); ++it ) { deviceItem = new QCheckListItem( ListView1, (*it).name(), QCheckListItem::CheckBox ); deviceItem->setText( 1, (*it).mac() ); } m_search = false; StartStopButton->setText( tr( "Start scan" ) ); } /** * Iterates trough the items, and collects the checked items. * Then it emits it, so the manager can connect to the signal to fill the listing. */ void ScanDialog::emitToManager() { if (!ListView1) { return; } QValueList<RemoteDevice> deviceList; QListViewItemIterator it( ListView1 ); for ( ; it.current(); ++it ) { if ( ( (QCheckListItem*)it.current() )->isOn() ) { RemoteDevice device( it.current()->text(1), it.current()->text(0) ); deviceList.append( device ); } } emit selectedDevices( deviceList ); } /** * Cleanup */ ScanDialog::~ScanDialog() { qWarning("delete scan dialog"); delete localDevice; } } diff --git a/noncore/settings/appearance2/appearance.cpp b/noncore/settings/appearance2/appearance.cpp index b39203b..8ae87fe 100644 --- a/noncore/settings/appearance2/appearance.cpp +++ b/noncore/settings/appearance2/appearance.cpp @@ -1,874 +1,874 @@ /* This file is part of the OPIE Project Copyright (c) 2002 Trolltech AS <info@trolltech.com> =. Copyright (c) 2002 Dan Williams <williamsdr@acm.org> .=l. Copyright (c) 2002 Robert Griebl <sandman@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 "appearance.h" #include "editScheme.h" #include "stylelistitem.h" #include "decolistitem.h" #include "colorlistitem.h" #include "exceptlistitem.h" #include "sample.h" /* OPIE */ #include <opie2/odevice.h> #include <opie2/ofiledialog.h> #include <opie2/otabwidget.h> #include <qpe/config.h> #include <qpe/global.h> #include <qpe/qpeapplication.h> #include <qpe/qpemessagebox.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpestyle.h> #include <qpe/lightstyle.h> #include <qpe/styleinterface.h> /* QT */ #include <qbuttongroup.h> #include <qcheckbox.h> #include <qcombobox.h> #include <qdialog.h> #include <qdir.h> #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include <qlistbox.h> #include <qmessagebox.h> #include <qpushbutton.h> #include <qradiobutton.h> #if QT_VERSION >= 300 #include <qstylefactory.h> #endif #include <qtoolbutton.h> #include <qwindowsstyle.h> #include <qlistview.h> #include <qheader.h> #include <qvbox.h> #include <qwhatsthis.h> using namespace Opie; class DefaultWindowDecoration : public WindowDecorationInterface { public: DefaultWindowDecoration() : ref(0) {} QString name() const { return "Default"; } QPixmap icon() const { return QPixmap(); } QRESULT queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { *iface = 0; if ( uuid == IID_QUnknown ) *iface = this; else if ( uuid == IID_WindowDecoration ) *iface = this; if ( *iface ) (*iface)->addRef(); return QS_OK; } Q_REFCOUNT private: ulong ref; }; QWidget *Appearance::createStyleTab ( QWidget *parent, Config &cfg ) { QWidget* tab = new QWidget( parent, "StyleTab" ); QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 ); m_style_list = new QListBox( tab, "m_style_list" ); vertLayout->addWidget( m_style_list ); QWhatsThis::add( m_style_list, tr( "Styles control the way items such as buttons and scroll bars appear in all applications.\n\nClick here to select an available style." ) ); m_style_settings = new QPushButton ( tr( "Settings..." ), tab ); - connect ( m_style_settings, SIGNAL( clicked ( )), this, SLOT( styleSettingsClicked ( ))); + connect ( m_style_settings, SIGNAL( clicked()), this, SLOT( styleSettingsClicked())); vertLayout-> addWidget ( m_style_settings ); QWhatsThis::add( m_style_settings, tr( "Click here to configure the currently selected style.\n\nNote: This option is not available for all styles." ) ); QString s = cfg. readEntry ( "Style", "Light" ); #if QT_VERSION >= 300 m_style_list->insertStringList(QStyleFactory::styles()); #else m_style_list-> insertItem ( new StyleListItem ( "Windows", new QWindowsStyle ( ))); m_style_list-> insertItem ( new StyleListItem ( "Light", new LightStyle ( ))); m_style_list-> insertItem ( new StyleListItem ( "QPE", new QPEStyle ( ))); #endif { QString path = QPEApplication::qpeDir ( ); path.append( "/plugins/styles/" ); QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { QString libstr = path; libstr.append( "/" ); libstr.append( *it ); QLibrary *lib = new QLibrary ( libstr ); StyleInterface *iface; if (( lib-> queryInterface ( IID_Style, (QUnknownInterface **) &iface ) == QS_OK ) && iface ) { StyleListItem *slit = new StyleListItem ( lib, iface ); m_style_list-> insertItem ( slit ); if ( slit-> key ( ) == s ) m_style_list-> setCurrentItem ( slit ); } else delete lib; } } m_original_style = m_style_list-> currentItem ( ); styleClicked ( m_original_style ); - connect( m_style_list, SIGNAL( highlighted( int ) ), this, SLOT( styleClicked( int ) ) ); + connect( m_style_list, SIGNAL( highlighted(int) ), this, SLOT( styleClicked(int) ) ); return tab; } QWidget *Appearance::createDecoTab ( QWidget *parent, Config &cfg ) { QWidget* tab = new QWidget( parent, "DecoTab" ); QVBoxLayout* vertLayout = new QVBoxLayout( tab, 3, 3 ); m_deco_list = new QListBox( tab, "m_deco_list" ); vertLayout->addWidget( m_deco_list ); QWhatsThis::add( m_deco_list, tr( "Window decorations control the way the application title bar and its buttons appear.\n\nClick here to select an available decoration." ) ); QString s = cfg. readEntry ( "Decoration", "libflat.so" ); m_deco_list-> insertItem ( new DecoListItem ( "QPE" )); { QString path = QPEApplication::qpeDir(); path.append( "/plugins/decorations/" ); QStringList sl = QDir ( path, "lib*.so" ). entryList ( ); for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { QString libstr = path; libstr.append( "/" ); libstr.append( *it ); QLibrary *lib = new QLibrary ( libstr ); WindowDecorationInterface *iface; if ( lib-> queryInterface ( IID_WindowDecoration, (QUnknownInterface **) &iface ) == QS_OK ) { DecoListItem *dlit = new DecoListItem ( lib, iface ); m_deco_list-> insertItem ( dlit ); if ( dlit-> key ( ) == s ) m_deco_list-> setCurrentItem ( dlit ); } else delete lib; } } m_original_deco = m_deco_list-> currentItem ( ); if ( m_deco_list-> currentItem ( ) < 0 ) m_deco_list-> setCurrentItem ( 0 ); decoClicked ( m_original_deco ); - connect( m_deco_list, SIGNAL( highlighted( int ) ), this, SLOT( decoClicked( int ) ) ); + connect( m_deco_list, SIGNAL( highlighted(int) ), this, SLOT( decoClicked(int) ) ); return tab; } QWidget *Appearance::createFontTab ( QWidget *parent, Config &cfg ) { QString familyStr = cfg. readEntry ( "FontFamily", "Helvetica" ); QString styleStr = cfg. readEntry ( "FontStyle", "Regular" ); int size = cfg. readNumEntry ( "FontSize", 10 ); m_fontselect = new OFontSelector ( false, parent, "FontTab" ); m_fontselect-> setSelectedFont ( familyStr, styleStr, size ); QWhatsThis::add( m_fontselect, tr( "Select the desired name, style and size of the default font applications will use." ) ); - connect( m_fontselect, SIGNAL( fontSelected ( const QFont & )), - this, SLOT( fontClicked ( const QFont & ))); + connect( m_fontselect, SIGNAL( fontSelected(const QFont&)), + this, SLOT( fontClicked(const QFont&))); return m_fontselect; } QWidget *Appearance::createColorTab ( QWidget *parent, Config &cfg ) { QWidget *tab = new QWidget( parent, "ColorTab" ); QGridLayout *gridLayout = new QGridLayout( tab, 0, 0, 3, 3 ); gridLayout->setRowStretch ( 3, 10 ); m_color_list = new QListBox ( tab ); gridLayout->addMultiCellWidget ( m_color_list, 0, 3, 0, 0 ); - connect( m_color_list, SIGNAL( highlighted( int ) ), this, SLOT( colorClicked( int ) ) ); + connect( m_color_list, SIGNAL( highlighted(int) ), this, SLOT( colorClicked(int) ) ); QWhatsThis::add( m_color_list, tr( "Color schemes are a collection of colors which are used for various parts of the display.\n\nClick here to select an available scheme." ) ); m_color_list-> insertItem ( new ColorListItem ( tr( "Current scheme" ), cfg )); QString path = QPEApplication::qpeDir ( ); path.append( "/etc/colors/" ); QStringList sl = QDir ( path ). entryList ( "*.scheme" ); for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { QString name = (*it). left ((*it). find ( ".scheme" )); QString pathstr = path; pathstr.append( *it ); Config config ( pathstr, Config::File ); config. setGroup ( "Colors" ); m_color_list-> insertItem ( new ColorListItem ( name, config )); } m_color_list-> setCurrentItem ( 0 ); QPushButton* tempButton = new QPushButton( tab, "editSchemeButton" ); tempButton->setText( tr( "Edit..." ) ); connect( tempButton, SIGNAL( clicked() ), this, SLOT( editSchemeClicked() ) ); gridLayout->addWidget( tempButton, 0, 1 ); QWhatsThis::add( tempButton, tr( "Click here to change the colors in the current color scheme." ) ); tempButton = new QPushButton( tab, "deleteSchemeButton" ); tempButton->setText( tr( "Delete" ) ); connect( tempButton, SIGNAL( clicked() ), this, SLOT( deleteSchemeClicked() ) ); gridLayout->addWidget( tempButton, 1, 1 ); QWhatsThis::add( tempButton, tr( "Click here to delete the color scheme selected in the list to the left." ) ); tempButton = new QPushButton( tab, "saveSchemeButton" ); tempButton->setText( tr( "Save" ) ); connect( tempButton, SIGNAL( clicked() ), this, SLOT( saveSchemeClicked() ) ); gridLayout->addWidget( tempButton, 2, 1 ); QWhatsThis::add( tempButton, tr( "Click here to name and save the current color scheme." ) ); return tab; } QWidget *Appearance::createAdvancedTab ( QWidget *parent, Config &cfg ) { QWidget *tab = new QWidget ( parent ); QVBoxLayout *vertLayout = new QVBoxLayout( tab, 3, 3 ); QGridLayout *lay = new QGridLayout ( vertLayout, 0, 0, 3, 0 ); m_force = new QCheckBox ( tr( "Force styling for all applications." ), tab ); m_force-> setChecked ( cfg. readBoolEntry ( "ForceStyle" )); lay-> addMultiCellWidget ( m_force, 0, 0, 0, 1 ); QWhatsThis::add( m_force, tr( "Click here to allow all applications to use global appearance settings." ) ); QLabel *l = new QLabel ( tab ); l-> setText ( QString ( "<p>%1</p>" ). arg ( tr( "Disable styling for these applications ( <b>*</b> can be used as a wildcard):" ))); lay-> addMultiCellWidget ( l, 1, 1, 0, 1 ); QWhatsThis::add( l, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) ); m_except = new QListView ( tab ); m_except-> addColumn ( Resource::loadIconSet ( "appearance" ), "", 24 ); m_except-> addColumn ( Resource::loadIconSet ( "font" ), "", 24 ); m_except-> addColumn ( Resource::loadIconSet ( "appearance/deco" ), "", 24 ); m_except-> addColumn ( tr( "Binary file(s)" )); m_except-> setColumnAlignment ( 0, AlignCenter ); m_except-> setColumnAlignment ( 1, AlignCenter ); m_except-> setColumnAlignment ( 2, AlignCenter ); m_except-> setAllColumnsShowFocus ( true ); m_except-> setMinimumHeight ( 30 ); m_except-> header ( )-> setClickEnabled ( false ); m_except-> header ( )-> setResizeEnabled ( false ); m_except-> header ( )-> setMovingEnabled ( false ); m_except-> setSorting ( -1 ); lay-> addMultiCellWidget ( m_except, 2, 6, 0, 0 ); QWhatsThis::add( m_except, tr( "If some applications do not display correctly with the global appearance settings, certain features can be turned off for that application.\n\nThis area allows you to select an application and which settings you wish to disable." ) ); - connect ( m_except, SIGNAL( clicked ( QListViewItem *, const QPoint &, int )), this, SLOT( clickedExcept ( QListViewItem *, const QPoint &, int ))); + connect ( m_except, SIGNAL( clicked(QListViewItem*,const QPoint&,int)), this, SLOT( clickedExcept(QListViewItem*,const QPoint&,int))); QToolButton *tb = new QToolButton ( tab ); tb-> setIconSet ( Resource::loadIconSet ( "appearance/add" )); tb-> setFocusPolicy ( QWidget::StrongFocus ); lay-> addWidget ( tb, 2, 1 ); - connect ( tb, SIGNAL( clicked ( )), this, SLOT( addExcept ( ))); + connect ( tb, SIGNAL( clicked()), this, SLOT( addExcept())); QWhatsThis::add( tb, tr( "Click here to add an application to the list above." ) ); tb = new QToolButton ( tab ); tb-> setIconSet ( Resource::loadIconSet ( "editdelete" )); tb-> setFocusPolicy ( QWidget::StrongFocus ); lay-> addWidget ( tb, 3, 1 ); - connect ( tb, SIGNAL( clicked ( )), this, SLOT( delExcept ( ))); + connect ( tb, SIGNAL( clicked()), this, SLOT( delExcept())); QWhatsThis::add( tb, tr( "Click here to delete the currently selected application." ) ); tb = new QToolButton ( tab ); tb-> setIconSet ( Resource::loadIconSet ( "up" )); tb-> setFocusPolicy ( QWidget::StrongFocus ); lay-> addWidget ( tb, 4, 1 ); - connect ( tb, SIGNAL( clicked ( )), this, SLOT( upExcept ( ))); + connect ( tb, SIGNAL( clicked()), this, SLOT( upExcept())); QWhatsThis::add( tb, tr( "Click here to move the currently selected application up in the list." ) ); tb = new QToolButton ( tab ); tb-> setIconSet ( Resource::loadIconSet ( "down" )); tb-> setFocusPolicy ( QWidget::StrongFocus ); lay-> addWidget ( tb, 5, 1 ); - connect ( tb, SIGNAL( clicked ( )), this, SLOT( downExcept ( ))); + connect ( tb, SIGNAL( clicked()), this, SLOT( downExcept())); QWhatsThis::add( tb, tr( "Click here to move the currently selected application down in the list." ) ); lay-> setRowStretch ( 6, 10 ); lay-> setColStretch ( 0, 10 ); QStringList sl = cfg. readListEntry ( "NoStyle", ';' ); QListViewItem *lvit = 0; for ( QStringList::Iterator it = sl. begin ( ); it != sl. end ( ); ++it ) { int fl = ( *it ). left ( 1 ). toInt ( 0, 32 ); lvit = new ExceptListItem ( m_except, lvit, ( *it ). mid ( 1 ), fl & 0x01, fl & 0x02, fl & 0x04 ); } vertLayout-> addSpacing ( 3 ); QFrame *f = new QFrame ( tab ); f-> setFrameStyle ( QFrame::HLine | QFrame::Sunken ); vertLayout-> addWidget ( f ); vertLayout-> addSpacing ( 3 ); QGridLayout* gridLayout = new QGridLayout ( vertLayout, 0, 0, 3, 0 ); int style = cfg. readNumEntry ( "TabStyle", 2 ) - 1; bool tabtop = ( cfg. readEntry ( "TabPosition", "Top" ) == "Top" ); QLabel* label = new QLabel( tr( "Tab style:" ), tab ); gridLayout-> addWidget ( label, 0, 0 ); QWhatsThis::add( label, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) ); QButtonGroup* btngrp = new QButtonGroup( tab, "buttongroup" ); btngrp-> hide ( ); btngrp-> setExclusive ( true ); m_tabstyle_list = new QComboBox ( false, tab, "tabstyle" ); m_tabstyle_list-> insertItem ( tr( "Tabs" )); m_tabstyle_list-> insertItem ( tr( "Tabs w/icons" )); m_tabstyle_list-> insertItem ( tr( "Drop down list" )); m_tabstyle_list-> insertItem ( tr( "Drop down list w/icons" )); m_tabstyle_list-> setCurrentItem ( style ); gridLayout-> addMultiCellWidget ( m_tabstyle_list, 0, 0, 1, 2 ); QWhatsThis::add( m_tabstyle_list, tr( "Click here to select a desired style for tabbed dialogs (such as this application). The styles available are:\n\n1. Tabs - normal tabs with text labels only\n2. Tabs w/icons - tabs with icons for each tab, text label only appears on current tab\n3. Drop down list - a vertical listing of tabs\n4. Drop down list w/icons - a vertical listing of tabs with icons" ) ); m_tabstyle_top = new QRadioButton( tr( "Top" ), tab, "tabpostop" ); btngrp-> insert ( m_tabstyle_top ); gridLayout-> addWidget( m_tabstyle_top, 1, 1 ); QWhatsThis::add( m_tabstyle_top, tr( "Click here so that tabs appear at the top of the window." ) ); m_tabstyle_bottom = new QRadioButton( tr( "Bottom" ), tab, "tabposbottom" ); btngrp-> insert ( m_tabstyle_bottom ); gridLayout-> addWidget( m_tabstyle_bottom, 1, 2 ); QWhatsThis::add( m_tabstyle_bottom, tr( "Click here so that tabs appear at the bottom of the window." ) ); m_tabstyle_top-> setChecked ( tabtop ); m_tabstyle_bottom-> setChecked ( !tabtop ); m_original_tabstyle = style; m_original_tabpos = tabtop; vertLayout-> addSpacing ( 3 ); QHBoxLayout *rotLay = new QHBoxLayout ( vertLayout, 3 ); QLabel* rotlabel = new QLabel( tr( "Rotation direction:" ), tab ); m_rotdir_cw = new QRadioButton( tab, "rotdir_cw" ); QPixmap cw1 = Resource::loadIconSet("redo"). pixmap( ); m_rotdir_ccw = new QRadioButton( tab, "rotdir_ccw" ); QImage ccwImage = cw1. convertToImage( ). mirror( 1, 0 ); QPixmap ccw1; m_rotdir_flip = new QRadioButton( tab, "rotdir_flip" ); QPixmap flip1 = Resource::loadIconSet("pass"). pixmap( ); QButtonGroup* rotbtngrp = new QButtonGroup( tab, "rotbuttongroup" ); rotbtngrp-> hide ( ); rotbtngrp-> setExclusive ( true ); rotbtngrp-> insert ( m_rotdir_cw ); rotbtngrp-> insert ( m_rotdir_ccw ); rotbtngrp-> insert ( m_rotdir_flip ); ccw1. convertFromImage( ccwImage ); m_rotdir_cw-> setPixmap( cw1 ); m_rotdir_ccw-> setPixmap( ccw1 ); m_rotdir_flip-> setPixmap( flip1 ); rotLay-> addWidget ( rotlabel, 0 ); rotLay-> addWidget ( m_rotdir_cw, 0 ); rotLay-> addWidget ( m_rotdir_ccw, 0 ); rotLay-> addWidget ( m_rotdir_flip, 0 ); int rotDirection = cfg.readNumEntry( "rotatedir" ); ODirection rot = CW; if (rotDirection == -1) { rot = ODevice::inst ( )-> direction ( ); } else { rot = (ODirection)rotDirection; } m_rotdir_cw-> setChecked ( rot == CW ); m_rotdir_ccw-> setChecked ( rot == CCW ); m_rotdir_flip-> setChecked ( rot == Flip ); return tab; } Appearance::Appearance( QWidget* parent, const char* name, WFlags ) : QDialog ( parent, name, true, WStyle_ContextHelp ) { setCaption( tr( "Appearance Settings" ) ); Config config( "qpe" ); config.setGroup( "Appearance" ); QVBoxLayout *top = new QVBoxLayout ( this, 3, 3 ); m_sample = new SampleWindow ( this ); m_sample-> setDecoration ( new DefaultWindowDecoration ( ) ); QWhatsThis::add( m_sample, tr( "This is a preview window. Look here to see your new appearance as options are changed." ) ); OTabWidget* tw = new OTabWidget ( this, "tabwidget", OTabWidget::Global, OTabWidget::Bottom ); QWidget *styletab; m_color_list = 0; tw-> addTab ( styletab = createStyleTab ( tw, config ), "appearance", tr( "Style" )); tw-> addTab ( createFontTab ( tw, config ), "font", tr( "Font" )); tw-> addTab ( createColorTab ( tw, config ), "appearance/color", tr( "Colors" ) ); tw-> addTab ( createDecoTab ( tw, config ), "appearance/deco", tr( "Windows" ) ); tw-> addTab ( m_advtab = createAdvancedTab ( tw, config ), "SettingsIcon", tr( "Advanced" ) ); top-> addWidget ( tw, 10 ); top-> addWidget ( m_sample, 1 ); tw-> setCurrentTab ( styletab ); - connect ( tw, SIGNAL( currentChanged ( QWidget * )), this, SLOT( tabChanged ( QWidget * ))); + connect ( tw, SIGNAL( currentChanged(QWidget*)), this, SLOT( tabChanged(QWidget*))); m_style_changed = m_font_changed = m_color_changed = m_deco_changed = false; } Appearance::~Appearance() {} void Appearance::tabChanged ( QWidget *w ) { if ( w == m_advtab ) { m_sample-> hide ( ); updateGeometry ( ); // shouldn't be necessary ... } else m_sample-> show ( ); } void Appearance::accept ( ) { bool newtabpos = m_tabstyle_top-> isChecked ( ); int newtabstyle = m_tabstyle_list-> currentItem ( ); Config config ( "qpe" ); config. setGroup ( "Appearance" ); if ( m_style_changed ) { StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( )); if ( item ) config.writeEntry( "Style", item-> key ( )); } if ( m_deco_changed ) { DecoListItem *item = (DecoListItem *) m_deco_list-> item ( m_deco_list-> currentItem ( )); if ( item ) config.writeEntry( "Decoration", item-> key ( )); } if (( newtabstyle != m_original_tabstyle ) || ( newtabpos != m_original_tabpos )) { config. writeEntry ( "TabStyle", newtabstyle + 1 ); config. writeEntry ( "TabPosition", newtabpos ? "Top" : "Bottom" ); } if ( m_font_changed ) { config. writeEntry ( "FontFamily", m_fontselect-> fontFamily ( )); config. writeEntry ( "FontStyle", m_fontselect-> fontStyle ( )); config. writeEntry ( "FontSize", m_fontselect-> fontSize ( )); } if ( m_color_changed ) { ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); if ( item ) item-> save ( config ); } ODirection rot; if (m_rotdir_ccw-> isChecked ( )) { rot = CCW; } else if (m_rotdir_cw-> isChecked ( )) { rot = CW; } else { rot = Flip; } config. writeEntry ( "rotatedir", (int)rot ); m_except-> setFocus ( ); // if the focus was on the embedded line-edit, we have to move it away first, so the contents are updated QStringList sl; QString exceptstr; for ( ExceptListItem *it = (ExceptListItem *) m_except-> firstChild ( ); it; it = (ExceptListItem *) it-> nextSibling ( )) { int fl = 0; fl |= ( it-> noStyle ( ) ? 0x01 : 0 ); fl |= ( it-> noFont ( ) ? 0x02 : 0 ); fl |= ( it-> noDeco ( ) ? 0x04 : 0 ); exceptstr = QString::number ( fl, 32 ); exceptstr.append( it-> pattern ( )); sl << exceptstr; } config. writeEntry ( "NoStyle", sl, ';' ); config. writeEntry ( "ForceStyle", m_force-> isChecked ( )); config. write ( ); // need to flush the config info first Global::applyStyle ( ); QDialog::accept ( ); } void Appearance::done ( int r ) { QDialog::done ( r ); close ( ); } void Appearance::styleClicked ( int index ) { StyleListItem *sli = (StyleListItem *) m_style_list-> item ( index ); m_style_settings-> setEnabled ( sli ? sli-> hasSettings ( ) : false ); if ( m_sample && sli && sli-> style ( )) { int ci = m_color_list ? m_color_list-> currentItem ( ) : -1; m_sample-> setStyle2 ( sli-> style ( ), ci < 0 ? palette ( ) : ((ColorListItem *) m_color_list-> item ( ci ))-> palette ( )); } m_style_changed |= ( index != m_original_style ); } void Appearance::styleSettingsClicked ( ) { StyleListItem *item = (StyleListItem *) m_style_list-> item ( m_style_list-> currentItem ( )); if ( item && item-> hasSettings ( )) { QDialog *d = new QDialog ( this, "SETTINGS-DLG", true ); QVBoxLayout *vbox = new QVBoxLayout ( d, 3, 0 ); QWidget *w = item-> settings ( d ); if ( w ) { vbox-> addWidget ( w ); d-> setCaption ( w-> caption ( )); bool accepted = ( QPEApplication::execDialog ( d ) == QDialog::Accepted ); if ( item-> setSettings ( accepted )) m_style_changed = true; } delete d; } } void Appearance::decoClicked ( int index ) { DecoListItem *dli = (DecoListItem *) m_deco_list-> item ( index ); if ( m_sample ) { if ( dli && dli-> interface ( )) m_sample-> setDecoration ( dli-> interface ( )); else m_sample-> setDecoration ( new DefaultWindowDecoration ( )); m_sample-> repaint ( ); } m_deco_changed |= ( index != m_original_deco ); } void Appearance::fontClicked ( const QFont &f ) { m_font_changed |= ( f != m_sample-> font ( )); m_sample-> setFont ( f ); } void Appearance::colorClicked ( int index ) { ColorListItem *item = (ColorListItem *) m_color_list-> item ( index ); if ( item ) m_sample-> setPalette ( item-> palette ( )); m_color_changed |= ( item-> palette ( ) != qApp-> palette ( )); } void Appearance::editSchemeClicked ( ) { ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); int cnt = 0; QString labels [QColorGroup::NColorRoles]; QColor colors [QColorGroup::NColorRoles]; for ( QColorGroup::ColorRole role = (QColorGroup::ColorRole) 0; role != QColorGroup::NColorRoles; ((int) role )++ ) { QColor col = item-> color ( role ); if ( col. isValid ( )) { labels [cnt] = item-> label ( role ); colors [cnt] = col; cnt++; } } EditScheme* editdlg = new EditScheme( cnt, labels, colors, this, "editScheme", true ); if ( QPEApplication::execDialog( editdlg ) == QDialog::Accepted ) { ColorListItem *citem = (ColorListItem *) m_color_list-> item ( 0 ); cnt = 0; for ( QColorGroup::ColorRole role = (QColorGroup::ColorRole) 0; role != QColorGroup::NColorRoles; ((int) role )++ ) { if ( item-> color ( role ). isValid ( )) { citem-> setColor ( role, colors [cnt] ); cnt++; } } m_color_list-> setCurrentItem ( 0 ); colorClicked ( 0 ); m_color_changed = true; } delete editdlg; } void Appearance::saveSchemeClicked() { ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); if ( !item ) return; QDialog *d = new QDialog ( this, 0, true ); d-> setCaption ( tr( "Save Scheme" )); QLineEdit *ed = new QLineEdit ( d ); ( new QVBoxLayout ( d, 3, 3 ))-> addWidget ( ed ); ed-> setFocus ( ); if ( d-> exec ( ) == QDialog::Accepted ) { QString schemename = ed-> text ( ); QString filestr = QPEApplication::qpeDir(); filestr.append( "/etc/colors/" ); filestr.append( schemename ); filestr.append( ".scheme" ); QFile file ( filestr ); if ( !file. exists ( )) { QPalette p = item-> palette ( ); Config config ( file.name(), Config::File ); config. setGroup( "Colors" ); item-> save ( config ); config. write ( ); // need to flush the config info first m_color_list-> insertItem ( new ColorListItem ( schemename, config )); } else { QMessageBox::information ( this, tr( "Save scheme" ), tr( "Scheme does already exist." )); } } delete d; } void Appearance::deleteSchemeClicked() { ColorListItem *item = (ColorListItem *) m_color_list-> item ( m_color_list-> currentItem ( )); if ( !item ) return; if ( m_color_list-> currentItem ( ) > 0 ) { if ( QPEMessageBox::confirmDelete ( this, tr( "Delete scheme" ), item-> text ( ) ) ) { QString filestr = QPEApplication::qpeDir ( ); filestr.append( "/etc/colors/" ); filestr.append( item-> text ( ) ); filestr.append( ".scheme" ); QFile::remove ( filestr ); delete item; } } else { QMessageBox::information( this, tr( "Delete scheme" ), tr( "Unable to delete current scheme." )); } } void Appearance::addExcept ( ) { ExceptListItem *it = new ExceptListItem ( m_except, 0, tr( "<new>" ), true, true, true ); m_except-> ensureItemVisible ( it ); m_except-> setSelected ( it, true ); } void Appearance::delExcept ( ) { if ( m_except-> selectedItem ( )) { m_except-> setFocus ( ); delete m_except-> selectedItem ( ); } } void Appearance::upExcept ( ) { ExceptListItem *it = (ExceptListItem *) m_except-> selectedItem ( ); if ( it && it-> itemAbove ( )) it-> itemAbove ( )-> moveItem ( it ); } void Appearance::downExcept ( ) { ExceptListItem *it = (ExceptListItem *) m_except-> selectedItem ( ); if ( it && it-> itemBelow ( )) it-> moveItem ( it-> itemBelow ( )); } class ExEdit : public QLineEdit { public: ExEdit ( ExceptListItem *item ) : QLineEdit ( item-> listView ( )-> viewport ( ), "exedit" ), it ( item ) { setFrame ( false ); QRect r = it-> listView ( )-> itemRect ( it ); int x = it-> listView ( )-> header ( )-> cellPos ( 3 ) - 1; int y = r. y ( ); int w = it-> listView ( )-> viewport ( )-> width ( ) - x; int h = r. height ( ); // + 2; setText ( it-> pattern ( )); setGeometry ( x, y, w, h ); qDebug ( "ExEdit: [%s] at %d,%d %d,%d", it->text(2).latin1(),x,y,w,h); m_out = true; show ( ); setFocus ( ); selectAll ( ); end ( true ); } virtual void focusOutEvent ( QFocusEvent * ) { hide ( ); if ( m_out ) it-> setPattern ( text ( )); delete this; } virtual void keyPressEvent ( QKeyEvent *e ) { if ( e-> key ( ) == Key_Return ) it-> listView ( )-> setFocus ( ); else if ( e-> key ( ) == Key_Escape ) { m_out = false; it-> listView ( )-> setFocus ( ); } else QLineEdit::keyPressEvent ( e ); } private: ExceptListItem *it; bool m_out; }; void Appearance::clickedExcept ( QListViewItem *item, const QPoint &, int c ) { if ( !item || c < 0 || c > 3 ) return; diff --git a/noncore/settings/appearance2/sample.cpp b/noncore/settings/appearance2/sample.cpp index b3a9d48..f6c4dca 100644 --- a/noncore/settings/appearance2/sample.cpp +++ b/noncore/settings/appearance2/sample.cpp @@ -1,271 +1,271 @@ /* This file is part of the OPIE Project =. Copyright (c) 2002 Trolltech AS <info@trolltech.com> .=l. Copyright (c) 2002 Robert Griebl <sandman@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 <qvbox.h> #include <qpopupmenu.h> #include <qpainter.h> #include <qmenubar.h> #include <qcheckbox.h> #include <qpushbutton.h> #include <qscrollbar.h> #include <qlayout.h> #include <qwhatsthis.h> #include <qpixmapcache.h> #include <qtimer.h> #include <qobjectlist.h> #include <qcommonstyle.h> #include "sample.h" class SampleText : public QWidget { public: SampleText( const QString &t, bool h, QWidget *parent ) : QWidget( parent ), hl(h), text(t) { if ( hl ) setBackgroundMode( PaletteHighlight ); else setBackgroundMode( PaletteBase ); } QSize sizeHint() const { QFontMetrics fm(font()); return QSize( fm.width(text)+10, fm.height()+4 ); } void paintEvent( QPaintEvent * ) { QPainter p(this); if ( hl ) p.setPen( colorGroup().highlightedText() ); else p.setPen( colorGroup().text() ); p.drawText( rect(), AlignCenter, text ); } private: bool hl; QString text; }; SampleWindow::SampleWindow( QWidget *parent ) : QWidget(parent), iface(0) { init(); } QSize SampleWindow::sizeHint() const { return container->sizeHint() + QSize( 10, 35 ); } void SampleWindow::setFont( const QFont &f ) { QWidget::setFont( f ); popup->setFont( f ); - QTimer::singleShot ( 0, this, SLOT( fixGeometry ( ))); + QTimer::singleShot ( 0, this, SLOT( fixGeometry())); } static void setStyleRecursive ( QWidget *w, QStyle *s ) { w->setStyle( s ); QObjectList *childObjects=(QObjectList*)w->children(); if ( childObjects ) { QObject * o; for(o=childObjects->first();o!=0;o=childObjects->next()) { if( o->isWidgetType() ) { setStyleRecursive((QWidget *)o,s); } } } } void SampleWindow::setStyle2 ( QStyle *sty, const QPalette &pal ) { typedef void (QStyle::*QDrawMenuBarItemImpl) (QPainter *, int, int, int, int, QMenuItem *, QColorGroup &, bool, bool); extern QDrawMenuBarItemImpl qt_set_draw_menu_bar_impl(QDrawMenuBarItemImpl); QPixmapCache::clear ( ); QPalette p = pal; // ette ( ); sty-> polish ( p ); qt_set_draw_menu_bar_impl ( 0 ); setStyleRecursive ( this, sty ); setPalette ( p ); - QTimer::singleShot ( 0, this, SLOT( fixGeometry ( ))); + QTimer::singleShot ( 0, this, SLOT( fixGeometry())); } void SampleWindow::setDecoration( WindowDecorationInterface *i ) { iface = i; wd.rect = QRect( 0, 0, 150, 75 ); wd.caption = tr("Sample"); wd.palette = palette(); wd.flags = WindowDecorationInterface::WindowData::Dialog | WindowDecorationInterface::WindowData::Active; wd.reserved = 1; th = iface->metric(WindowDecorationInterface::TitleHeight, &wd); tb = iface->metric(WindowDecorationInterface::TopBorder, &wd); lb = iface->metric(WindowDecorationInterface::LeftBorder, &wd); rb = iface->metric(WindowDecorationInterface::RightBorder, &wd); bb = iface->metric(WindowDecorationInterface::BottomBorder, &wd); int yoff = th + tb; int xoff = lb; wd.rect.setX( 0 ); wd.rect.setWidth( width() - lb - rb ); wd.rect.setY( 0 ); wd.rect.setHeight( height() - yoff - bb ); container->setGeometry( xoff, yoff, wd.rect.width(), wd.rect.height() ); setMinimumSize( container->sizeHint().width()+lb+rb, container->sizeHint().height()+tb+th+bb ); } void SampleWindow::paintEvent( QPaintEvent * ) { if ( !iface ) return; QPainter p( this ); p.translate( lb, th+tb ); iface->drawArea(WindowDecorationInterface::Border, &p, &wd); iface->drawArea(WindowDecorationInterface::Title, &p, &wd); p.setPen(palette().active().color(QColorGroup::HighlightedText)); QFont f( font() ); f.setWeight( QFont::Bold ); p.setFont(f); iface->drawArea(WindowDecorationInterface::TitleText, &p, &wd); QRect brect( 0, -th, iface->metric(WindowDecorationInterface::HelpWidth,&wd), th ); iface->drawButton( WindowDecorationInterface::Help, &p, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)0 ); brect.moveBy( wd.rect.width() - iface->metric(WindowDecorationInterface::OKWidth,&wd) - iface->metric(WindowDecorationInterface::CloseWidth,&wd), 0 ); iface->drawButton( WindowDecorationInterface::Close, &p, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)0 ); brect.moveBy( iface->metric(WindowDecorationInterface::CloseWidth,&wd), 0 ); iface->drawButton( WindowDecorationInterface::OK, &p, &wd, brect.x(), brect.y(), brect.width(), brect.height(), (QWSButton::State)0 ); } void SampleWindow::init() { container = new QVBox( this ); popup = new QPopupMenu( this ); popup->insertItem( tr("Normal Item"), 1 ); popup->insertItem( tr("Disabled Item"), 2 ); popup->setItemEnabled(2, FALSE); QMenuBar *mb = new QMenuBar( container ); mb->insertItem( tr("Menu"), popup ); QHBox *hb = new QHBox( container ); QWidget *w = new QWidget( hb ); (void)new QScrollBar( 0, 0, 0, 0, 0, Vertical, hb ); QGridLayout *gl = new QGridLayout( w, 2, 2, 4 ); SampleText *l = new SampleText( tr("Normal Text"), FALSE, w ); gl->addWidget( l, 0, 0 ); l = new SampleText( tr("Highlighted Text"), TRUE, w ); gl->addWidget( l, 1, 0 ); QPushButton *pb = new QPushButton( tr("Button"), w ); gl->addWidget( pb, 0, 1 ); pb->setFocusPolicy( NoFocus ); QCheckBox *cb = new QCheckBox( tr("Check Box"), w ); gl->addWidget( cb, 1, 1 ); cb->setFocusPolicy( NoFocus ); cb->setChecked( TRUE ); QWhatsThis::add( this, tr("Sample window using the selected settings.") ); } bool SampleWindow::eventFilter( QObject *, QEvent *e ) { switch ( e->type() ) { case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseButtonDblClick: case QEvent::MouseMove: case QEvent::KeyPress: case QEvent::KeyRelease: return TRUE; default: break; } return FALSE; } void SampleWindow::paletteChange( const QPalette &old ) { QWidget::paletteChange ( old ); wd. palette = palette ( ); popup-> setPalette ( palette ( )); } void SampleWindow::setPalette ( const QPalette &pal ) { QPixmapCache::clear ( ); QPalette p = pal; style ( ). polish ( p ); QWidget::setPalette ( p ); } void SampleWindow::resizeEvent( QResizeEvent *re ) { wd.rect = QRect( 0, 0, 150, 75 ); wd.rect.setX( 0 ); wd.rect.setWidth( width() - lb - rb ); wd.rect.setY( 0 ); wd.rect.setHeight( height() - th - tb - bb ); container->setGeometry( lb, th+tb, wd.rect.width(), wd.rect.height() ); QWidget::resizeEvent( re ); } void SampleWindow::fixGeometry() { setMinimumSize( container->sizeHint().width()+lb+rb, container->sizeHint().height()+tb+th+bb ); } diff --git a/noncore/settings/aqpkg/inputdlg.cpp b/noncore/settings/aqpkg/inputdlg.cpp index 06e934c..30f0527 100644 --- a/noncore/settings/aqpkg/inputdlg.cpp +++ b/noncore/settings/aqpkg/inputdlg.cpp @@ -1,134 +1,134 @@ /* This file is part of the OPIE Project =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk> .=l. 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 <qlayout.h> #include <qlabel.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qspinbox.h> #include <qcombobox.h> #include <qwidgetstack.h> #include <qvalidator.h> #include <qapplication.h> #include "inputdlg.h" #include "global.h" InputDialog :: InputDialog( const QString &label, QWidget* parent, const char* name, bool modal ) : QDialog( parent, name, modal ) { lineEdit = 0; QVBoxLayout *vbox = new QVBoxLayout( this, 6, 6 ); QLabel* l = new QLabel( label, this ); vbox->addWidget( l ); lineEdit = new QLineEdit( this ); vbox->addWidget( lineEdit ); QHBoxLayout *hbox = new QHBoxLayout( 6 ); vbox->addLayout( hbox, AlignRight ); ok = new QPushButton( tr( "&OK" ), this ); ok->setDefault( TRUE ); QPushButton *cancel = new QPushButton( tr( "&Cancel" ), this ); QSize bs( ok->sizeHint() ); if ( cancel->sizeHint().width() > bs.width() ) bs.setWidth( cancel->sizeHint().width() ); ok->setFixedSize( bs ); cancel->setFixedSize( bs ); hbox->addWidget( new QWidget( this ) ); hbox->addWidget( ok ); hbox->addWidget( cancel ); connect( lineEdit, SIGNAL( returnPressed() ), this, SLOT( tryAccept() ) ); - connect( lineEdit, SIGNAL( textChanged( const QString & ) ), - this, SLOT( textChanged( const QString & ) ) ); + connect( lineEdit, SIGNAL( textChanged(const QString&) ), + this, SLOT( textChanged(const QString&) ) ); connect( ok, SIGNAL( clicked() ), this, SLOT( accept() ) ); connect( cancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); resize( QMAX( sizeHint().width(), 240 ), sizeHint().height() ); } /*! Destructor. */ InputDialog::~InputDialog() { } void InputDialog :: setText( const QString &text ) { lineEdit->setText( text ); lineEdit->selectAll(); } QString InputDialog :: getText() { return lineEdit->text(); } QString InputDialog::getText( const QString &caption, const QString &label, const QString &text, bool *ok, QWidget *parent, const char *name ) { InputDialog *dlg = new InputDialog( label, parent, name, true ); dlg->setCaption( caption ); dlg->setText( text ); QString result; *ok = dlg->exec() == QDialog::Accepted; if ( *ok ) result = dlg->getText(); delete dlg; return result; } void InputDialog :: textChanged( const QString &s ) { ok->setEnabled( !s.isEmpty() ); } void InputDialog :: tryAccept() { if ( !lineEdit->text().isEmpty() ) accept(); } diff --git a/noncore/settings/aqpkg/installdlgimpl.cpp b/noncore/settings/aqpkg/installdlgimpl.cpp index d927a36..d2babb4 100644 --- a/noncore/settings/aqpkg/installdlgimpl.cpp +++ b/noncore/settings/aqpkg/installdlgimpl.cpp @@ -1,476 +1,476 @@ /* This file is part of the OPIE Project =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk> .=l. 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 <stdio.h> #include <opie2/ofiledialog.h> #ifdef QWS #include <qpe/config.h> #include <qpe/fileselector.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/storage.h> #endif #include <qcheckbox.h> #include <qcombobox.h> #include <qdialog.h> #include <qfileinfo.h> #include <qgroupbox.h> #include <qmultilineedit.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> #include "datamgr.h" #include "destination.h" #include "instoptionsimpl.h" #include "installdlgimpl.h" #include "ipkg.h" #include "utils.h" #include "global.h" enum { MAXLINES = 100, }; InstallDlgImpl::InstallDlgImpl( const QList<InstallData> &packageList, DataManager *dataManager, const char *title ) : QWidget( 0, 0, 0 ) { setCaption( title ); init( TRUE ); pIpkg = 0; upgradePackages = false; dataMgr = dataManager; QString defaultDest = "root"; #ifdef QWS Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); defaultDest = cfg.readEntry( "dest", "root" ); // Grab flags - Turn MAKE_LINKS on by default (if no flags found) flags = cfg.readNumEntry( "installFlags", 0 ); infoLevel = cfg.readNumEntry( "infoLevel", 1 ); #else flags = 0; #endif // Output text is read only output->setReadOnly( true ); // QFont f( "helvetica" ); // f.setPointSize( 10 ); // output->setFont( f ); // setup destination data int defIndex = 0; int i; QListIterator<Destination> dit( dataMgr->getDestinationList() ); for ( i = 0; dit.current(); ++dit, ++i ) { destination->insertItem( dit.current()->getDestinationName() ); if ( dit.current()->getDestinationName() == defaultDest ) defIndex = i; } destination->setCurrentItem( defIndex ); QListIterator<InstallData> it( packageList ); // setup package data QString remove = tr( "Remove\n" ); QString install = tr( "Install\n" ); QString upgrade = tr( "Upgrade\n" ); for ( ; it.current(); ++it ) { InstallData *item = it.current(); InstallData *newitem = new InstallData(); newitem->option = item->option; newitem->packageName = item->packageName; newitem->destination = item->destination; newitem->recreateLinks = item->recreateLinks; packages.append( newitem ); if ( item->option == "I" ) { install.append( QString( " %1\n" ).arg( item->packageName ) ); } else if ( item->option == "D" ) { remove.append( QString( " %1\n" ).arg( item->packageName ) ); } else if ( item->option == "U" || item->option == "R" ) { QString type; if ( item->option == "R" ) type = tr( "(ReInstall)" ); else type = tr( "(Upgrade)" ); upgrade.append( QString( " %1 %2\n" ).arg( item->packageName ).arg( type ) ); } } output->setText( QString( "%1\n%2\n%3\n" ).arg( remove ).arg( install ).arg( upgrade ) ); displayAvailableSpace( destination->currentText() ); } InstallDlgImpl::InstallDlgImpl( Ipkg *ipkg, QString initialText, const char *title ) : QWidget( 0, 0, 0 ) { setCaption( title ); init( FALSE ); pIpkg = ipkg; output->setText( initialText ); } InstallDlgImpl::~InstallDlgImpl() { if ( pIpkg ) delete pIpkg; } void InstallDlgImpl :: init( bool displayextrainfo ) { QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 4 ); layout->setMargin( 4 ); if ( displayextrainfo ) { QLabel *label = new QLabel( tr( "Destination" ), this ); layout->addWidget( label, 0, 0 ); destination = new QComboBox( FALSE, this ); layout->addWidget( destination, 0, 1 ); - connect( destination, SIGNAL( highlighted( const QString & ) ), - this, SLOT( displayAvailableSpace( const QString & ) ) ); + connect( destination, SIGNAL( highlighted(const QString&) ), + this, SLOT( displayAvailableSpace(const QString&) ) ); QLabel *label2 = new QLabel( tr( "Space Avail" ), this ); layout->addWidget( label2, 1, 0 ); txtAvailableSpace = new QLabel( "", this ); layout->addWidget( txtAvailableSpace, 1, 1 ); } else { destination = 0x0; txtAvailableSpace = 0x0; } QGroupBox *GroupBox2 = new QGroupBox( 0, Qt::Vertical, tr( "Output" ), this ); GroupBox2->layout()->setSpacing( 0 ); GroupBox2->layout()->setMargin( 4 ); QVBoxLayout *GroupBox2Layout = new QVBoxLayout( GroupBox2->layout() ); output = new QMultiLineEdit( GroupBox2 ); GroupBox2Layout->addWidget( output ); layout->addMultiCellWidget( GroupBox2, 2, 2, 0, 1 ); btnInstall = new QPushButton( Resource::loadPixmap( "aqpkg/apply" ), tr( "Start" ), this ); layout->addWidget( btnInstall, 3, 0 ); connect( btnInstall, SIGNAL( clicked() ), this, SLOT( installSelected() ) ); btnOptions = new QPushButton( Resource::loadPixmap( "SettingsIcon" ), tr( "Options" ), this ); layout->addWidget( btnOptions, 3, 1 ); connect( btnOptions, SIGNAL( clicked() ), this, SLOT( optionsSelected() ) ); } void InstallDlgImpl :: optionsSelected() { if ( btnOptions->text() == tr( "Options" ) ) { InstallOptionsDlgImpl opt( flags, infoLevel, this, "Option", true ); if ( opt.exec() == QDialog::Accepted ) { // set options selected from dialog flags = opt.getFlags(); infoLevel = opt.getInfoLevel(); #ifdef QWS Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); cfg.writeEntry( "installFlags", flags ); cfg.writeEntry( "infoLevel", infoLevel ); #endif } } else // Save output { QMap<QString, QStringList> map; map.insert( tr( "All" ), QStringList() ); QStringList text; text << "text/*"; map.insert(tr( "Text" ), text ); text << "*"; map.insert( tr( "All" ), text ); QString filename = Opie::OFileDialog::getSaveFileName( 2, "/", "ipkg-output", map ); if( !filename.isEmpty() ) { QString currentFileName = QFileInfo( filename ).fileName(); DocLnk doc; doc.setType( "text/plain" ); doc.setFile( filename ); doc.setName( currentFileName ); FileManager fm; fm.saveFile( doc, output->text() ); } } } void InstallDlgImpl :: installSelected() { if ( btnInstall->text() == tr( "Abort" ) ) { if ( pIpkg ) { displayText( tr( "\n**** User Clicked ABORT ***" ) ); pIpkg->abort(); displayText( tr( "**** Process Aborted ****" ) ); } btnInstall->setText( tr( "Close" ) ); btnInstall->setIconSet( Resource::loadPixmap( "enter" ) ); return; } else if ( btnInstall->text() == tr( "Close" ) ) { emit reloadData( this ); return; } // Disable buttons btnOptions->setEnabled( false ); // btnInstall->setEnabled( false ); btnInstall->setText( tr( "Abort" ) ); btnInstall->setIconSet( Resource::loadPixmap( "close" ) ); if ( pIpkg ) { output->setText( "" ); - connect( pIpkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); + connect( pIpkg, SIGNAL(outputText(const QString&)), this, SLOT(displayText(const QString&))); connect( pIpkg, SIGNAL(ipkgFinished()), this, SLOT(ipkgFinished())); pIpkg->runIpkg(); } else { output->setText( "" ); Destination *d = dataMgr->getDestination( destination->currentText() ); QString dest = d->getDestinationName(); QString destDir = d->getDestinationPath(); int instFlags = flags; if ( d->linkToRoot() ) instFlags |= MAKE_LINKS; #ifdef QWS // Save settings Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); cfg.writeEntry( "dest", dest ); #endif pIpkg = new Ipkg; - connect( pIpkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); + connect( pIpkg, SIGNAL(outputText(const QString&)), this, SLOT(displayText(const QString&))); connect( pIpkg, SIGNAL(ipkgFinished()), this, SLOT(ipkgFinished())); firstPackage = TRUE; ipkgFinished(); // First run through the remove list, then the install list then the upgrade list /* pIpkg->setOption( "remove" ); QListIterator<InstallData> it( removeList ); InstallData *idata; for ( ; it.current(); ++it ) { idata = it.current(); pIpkg->setDestination( idata->destination->getDestinationName() ); pIpkg->setDestinationDir( idata->destination->getDestinationPath() ); pIpkg->setPackage( idata->packageName ); int tmpFlags = flags; if ( idata->destination->linkToRoot() ) tmpFlags |= MAKE_LINKS; pIpkg->setFlags( tmpFlags, infoLevel ); pIpkg->runIpkg(); } pIpkg->setOption( "install" ); pIpkg->setDestination( dest ); pIpkg->setDestinationDir( destDir ); pIpkg->setFlags( instFlags, infoLevel ); QListIterator<InstallData> it2( installList ); for ( ; it2.current(); ++it2 ) { pIpkg->setPackage( it2.current()->packageName ); pIpkg->runIpkg(); } flags |= FORCE_REINSTALL; QListIterator<InstallData> it3( updateList ); for ( ; it3.current() ; ++it3 ) { idata = it3.current(); if ( idata->option == "R" ) pIpkg->setOption( "reinstall" ); else pIpkg->setOption( "upgrade" ); pIpkg->setDestination( idata->destination->getDestinationName() ); pIpkg->setDestinationDir( idata->destination->getDestinationPath() ); pIpkg->setPackage( idata->packageName ); int tmpFlags = flags; if ( idata->destination->linkToRoot() && idata->recreateLinks ) tmpFlags |= MAKE_LINKS; pIpkg->setFlags( tmpFlags, infoLevel ); pIpkg->runIpkg(); } delete pIpkg; pIpkg = 0; */ } } void InstallDlgImpl :: displayText(const QString &text ) { QString newtext = QString( "%1\n%2" ).arg( output->text() ).arg( text ); /* Set a max line count for the QMultiLineEdit, as users have reported * performance issues when line count gets extreme. */ if(output->numLines() >= MAXLINES) output->removeLine(0); output->setText( newtext ); output->setCursorPosition( output->numLines(), 0 ); } void InstallDlgImpl :: displayAvailableSpace( const QString &text ) { Destination *d = dataMgr->getDestination( text ); QString destDir = d->getDestinationPath(); long blockSize = 0; long totalBlocks = 0; long availBlocks = 0; QString space; if ( Utils::getStorageSpace( (const char *)destDir, &blockSize, &totalBlocks, &availBlocks ) ) { long mult = blockSize / 1024; long div = 1024 / blockSize; if ( !mult ) mult = 1; if ( !div ) div = 1; long avail = availBlocks * mult / div; space = tr( "%1 Kb" ).arg( avail ); } else space = tr( "Unknown" ); if ( txtAvailableSpace ) txtAvailableSpace->setText( space ); } void InstallDlgImpl :: ipkgFinished() { InstallData *item; if ( firstPackage ) item = packages.first(); else { // Create symlinks if necessary before moving on to next package pIpkg->createSymLinks(); item = packages.next(); } firstPackage = FALSE; if ( item ) { pIpkg->setPackage( item->packageName ); int tmpFlags = flags; if ( item->option == "I" ) { pIpkg->setOption( "install" ); Destination *d = dataMgr->getDestination( destination->currentText() ); pIpkg->setDestination( d->getDestinationName() ); pIpkg->setDestinationDir( d->getDestinationPath() ); if ( d->linkToRoot() ) tmpFlags |= MAKE_LINKS; } else if ( item->option == "D" ) { pIpkg->setOption( "remove" ); pIpkg->setDestination( item->destination->getDestinationName() ); pIpkg->setDestinationDir( item->destination->getDestinationPath() ); if ( item->destination->linkToRoot() ) tmpFlags |= MAKE_LINKS; } else { if ( item->option == "R" ) pIpkg->setOption( "reinstall" ); else pIpkg->setOption( "upgrade" ); pIpkg->setDestination( item->destination->getDestinationName() ); pIpkg->setDestinationDir( item->destination->getDestinationPath() ); pIpkg->setPackage( item->packageName ); tmpFlags |= FORCE_REINSTALL; if ( item->destination->linkToRoot() && item->recreateLinks ) tmpFlags |= MAKE_LINKS; } pIpkg->setFlags( tmpFlags, infoLevel ); pIpkg->runIpkg(); } else { btnOptions->setEnabled( true ); btnInstall->setText( tr( "Close" ) ); btnInstall->setIconSet( Resource::loadPixmap( "enter" ) ); btnOptions->setText( tr( "Save output" ) ); btnOptions->setIconSet( Resource::loadPixmap( "save" ) ); if ( destination && destination->currentText() != 0 && destination->currentText() != "" ) displayAvailableSpace( destination->currentText() ); } } diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp index 3761b67..866afed 100644 --- a/noncore/settings/aqpkg/ipkg.cpp +++ b/noncore/settings/aqpkg/ipkg.cpp @@ -1,520 +1,520 @@ /* This file is part of the OPIE Project =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk> .=l. 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 <opie2/oprocess.h> #ifdef QWS #include <qpe/qpeapplication.h> #else #include <qapplication.h> #endif #include <qdir.h> #include <qfile.h> #include <qtextstream.h> #include "utils.h" #include "ipkg.h" #include "global.h" Ipkg :: Ipkg() { proc = 0; } Ipkg :: ~Ipkg() { } // Option is what we are going to do - install, upgrade, download, reinstall // package is the package name to install - either a fully qualified path and ipk // file (if stored locally) or just the name of the package (for a network package) // packageName is the package name - (for a network package this will be the same as // package parameter) // dest is the destination alias (from ipk.conf) // destDir is the dir that the destination alias points to (used to link to root) // flags is the ipkg options flags // dir is the directory to run ipkg in (defaults to "") void Ipkg :: runIpkg() { error = false; QStringList commands; QDir::setCurrent( "/tmp" ); if ( runtimeDir != "" ) { commands << "cd "; commands << runtimeDir; commands << ";"; } commands << "ipkg" << "-V" << QString::number( infoLevel ) << "-force-defaults"; // only set the destination for an install operation if ( option == "install" ) commands << "-dest" << destination; if ( option != "update" && option != "download" ) { if ( flags & FORCE_DEPENDS ) commands << "-force-depends"; if ( flags & FORCE_REINSTALL ) commands << "-force-reinstall"; if ( flags & FORCE_REMOVE ) commands << "-force-removal-of-essential-packages"; if ( flags & FORCE_OVERWRITE ) commands << "-force-overwrite"; if ( infoLevel == 3 ) commands << "-verbose_wget"; // Handle make links // Rules - If make links is switched on, create links to root // if destDir is NOT / if ( flags & MAKE_LINKS ) { // If destDir == / turn off make links as package is being insalled // to root already. if ( destDir == "/" ) flags ^= MAKE_LINKS; } } #ifdef X86 commands << "-f"; commands << IPKG_CONF; #endif if ( option == "reinstall" ) commands << "install"; else commands << option; if ( package != "" ) commands << package; if ( package != "" ) emit outputText( tr( "Dealing with package %1" ).arg( package) ); qApp->processEvents(); // If we are removing, reinstalling or upgrading packages and make links option is selected // create the links if ( option == "remove" || option == "reinstall" || option == "upgrade" ) { createLinks = false; if ( flags & MAKE_LINKS ) { emit outputText( tr( "Removing symbolic links...\n" ) ); linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); emit outputText( QString( " " ) ); } } // Execute command dependantPackages = new QList<QString>; dependantPackages->setAutoDelete( true ); executeIpkgCommand( commands, option ); } void Ipkg :: createSymLinks() { if ( option == "install" || option == "reinstall" || option == "upgrade" ) { // If we are not removing packages and make links option is selected // create the links createLinks = true; if ( flags & MAKE_LINKS ) { emit outputText( " " ); emit outputText( tr( "Creating symbolic links for %1." ).arg( package) ); linkPackage( Utils::getPackageNameFromIpkFilename( package ), destination, destDir ); // link dependant packages that were installed with this release QString *pkg; for ( pkg = dependantPackages->first(); pkg != 0; pkg = dependantPackages->next() ) { if ( *pkg == package ) continue; emit outputText( " " ); emit outputText( tr( "Creating symbolic links for %1" ).arg( *pkg ) ); linkPackage( Utils::getPackageNameFromIpkFilename( *pkg ), destination, destDir ); } } } delete dependantPackages; emit outputText( tr("Finished") ); emit outputText( "" ); } void Ipkg :: removeStatusEntry() { QString statusFile = destDir; if ( statusFile.right( 1 ) != "/" ) statusFile.append( "/" ); statusFile.append( "usr/lib/ipkg/status" ); QString outStatusFile = statusFile; outStatusFile.append( ".tmp" ); emit outputText( "" ); emit outputText( tr("Removing status entry...") ); QString tempstr = tr("status file - "); tempstr.append( statusFile ); emit outputText( tempstr ); tempstr = tr("package - "); tempstr.append( package ); emit outputText( tempstr ); QFile readFile( statusFile ); QFile writeFile( outStatusFile ); if ( !readFile.open( IO_ReadOnly ) ) { tempstr = tr("Couldn't open status file - "); tempstr.append( statusFile ); emit outputText( tempstr ); return; } if ( !writeFile.open( IO_WriteOnly ) ) { tempstr = tr("Couldn't create tempory status file - "); tempstr.append( outStatusFile ); emit outputText( tempstr ); return; } int i = 0; QTextStream readStream( &readFile ); QTextStream writeStream( &writeFile ); QString line; char k[21]; char v[1001]; QString key; QString value; while ( !readStream.atEnd() ) { //read new line line = readStream.readLine(); if ( line.contains( ":", TRUE ) ) { //grep key and value from line k[0] = '\0'; v[0] = '\0'; sscanf( line, "%[^:]: %[^\n]", k, v ); key = k; value = v; key = key.stripWhiteSpace(); value = value.stripWhiteSpace(); } else { key = ""; value = ""; } if ( key == "Package" && value == package ) { //skip lines from the deleted package while ( ( !readStream.atEnd() ) && ( line.stripWhiteSpace() != "" ) ) { line = readStream.readLine(); } } else { //write other lines into the tempfile writeStream << line << "\n"; // Improve UI responsiveness i++; if ( ( i % 50 ) == 0 ) qApp->processEvents(); } } readFile.close(); writeFile.close(); // Remove old status file and put tmp stats file in its place remove( statusFile ); rename( outStatusFile, statusFile ); } int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ ) { // If one is already running - should never be but just to be safe if ( proc ) { delete proc; proc = 0; } // OK we're gonna use OProcess to run this thing proc = new OProcess(); aborted = false; // Connect up our slots - connect(proc, SIGNAL(processExited(OProcess *)), + connect(proc, SIGNAL(processExited(OProcess*)), this, SLOT( processFinished())); - connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), - this, SLOT(commandStdout(OProcess *, char *, int))); + connect(proc, SIGNAL(receivedStdout(OProcess*,char*,int)), + this, SLOT(commandStdout(OProcess*,char*,int))); - connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)), - this, SLOT(commandStderr(OProcess *, char *, int))); + connect(proc, SIGNAL(receivedStderr(OProcess*,char*,int)), + this, SLOT(commandStderr(OProcess*,char*,int))); for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it ) { *proc << (*it).latin1(); } // Start the process going finished = false; if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) { emit outputText( tr("Couldn't start ipkg process" ) ); } } void Ipkg::commandStdout(OProcess*, char *buffer, int buflen) { QString lineStr = buffer; if ( lineStr[buflen-1] == '\n' ) buflen --; lineStr = lineStr.left( buflen ); emit outputText( lineStr ); // check if we are installing dependant packages if ( option == "install" || option == "reinstall" ) { // Need to keep track of any dependant packages that get installed // so that we can create links to them as necessary if ( lineStr.startsWith( "Installing " ) ) { int start = lineStr.find( " " ) + 1; int end = lineStr.find( " ", start ); QString *package = new QString( lineStr.mid( start, end-start ) ); dependantPackages->append( package ); } } else if ( option == "remove" && !( flags & FORCE_DEPENDS ) && lineStr.find( "is depended upon by packages:" ) != -1 ) { // Ipkg should send this to STDERR, but doesn't - so trap here error = true; } buffer[0] = '\0'; } void Ipkg::commandStderr(OProcess*, char *buffer, int buflen) { QString lineStr = buffer; if ( lineStr[buflen-1] == '\n' ) buflen --; lineStr=lineStr.left( buflen ); emit outputText( lineStr ); buffer[0] = '\0'; error = true; } void Ipkg::processFinished() { // Finally, if we are removing a package, remove its entry from the <destdir>/usr/lib/ipkg/status file // to workaround an ipkg bug which stops reinstall to a different location if ( !error && option == "remove" ) removeStatusEntry(); delete proc; proc = 0; finished = true; emit ipkgFinished(); } void Ipkg :: abort() { if ( proc ) { proc->kill(); aborted = true; } } void Ipkg :: linkPackage( const QString &packFileName, const QString &dest, const QString &destDir ) { if ( dest == "root" || dest == "/" ) return; qApp->processEvents(); QStringList *fileList = getList( packFileName, destDir ); qApp->processEvents(); processFileList( fileList, destDir ); delete fileList; } QStringList* Ipkg :: getList( const QString &packageFilename, const QString &destDir ) { QString packageFileDir = destDir; packageFileDir.append( "/usr/lib/ipkg/info/" ); packageFileDir.append( packageFilename ); packageFileDir.append( ".list" ); QFile f( packageFileDir ); if ( !f.open(IO_ReadOnly) ) { // Couldn't open from dest, try from / f.close(); packageFileDir = "/usr/lib/ipkg/info/"; packageFileDir.append( packageFilename ); packageFileDir.append( ".list" ); f.setName( packageFileDir ); if ( ! f.open(IO_ReadOnly) ) { QString tempstr = tr("Could not open :"); tempstr.append( packageFileDir ); emit outputText( tempstr ); return (QStringList*)0; } } QStringList *fileList = new QStringList(); QTextStream t( &f ); while ( !t.eof() ) *fileList += t.readLine(); f.close(); return fileList; } void Ipkg :: processFileList( const QStringList *fileList, const QString &destDir ) { if ( !fileList || fileList->isEmpty() ) return; QString baseDir = ROOT; if ( createLinks == true ) { for ( uint i=0; i < fileList->count(); i++ ) { processLinkDir( (*fileList)[i], baseDir, destDir ); qApp->processEvents(); } } else { for ( int i = fileList->count()-1; i >= 0 ; i-- ) { processLinkDir( (*fileList)[i], baseDir, destDir ); qApp->processEvents(); } } } void Ipkg :: processLinkDir( const QString &file, const QString &destDir, const QString &baseDir ) { QString sourceFile = baseDir; sourceFile.append( file ); QString linkFile = destDir; if ( file.startsWith( "/" ) && destDir.right( 1 ) == "/" ) { linkFile.append( file.mid( 1 ) ); } else { linkFile.append( file ); } QString text; if ( createLinks ) { // If this file is a directory (ends with a /) and it doesn't exist, // we need to create it if ( file.right(1) == "/" ) { QFileInfo f( linkFile ); if ( !f.exists() ) { QString tempstr = tr("Creating directory "); tempstr.append( linkFile ); emit outputText( tempstr ); QDir d; d.mkdir( linkFile, true ); } // else // emit outputText( QString( "Directory " ) + linkFile + " already exists" ); } else { int rc = symlink( sourceFile, linkFile ); text = ( rc == 0 ? tr( "Linked %1 to %2" ) : tr( "Failed to link %1 to %2" ) ). arg( sourceFile ). arg( linkFile ); emit outputText( text ); } } else { QFileInfo f( linkFile ); if ( f.exists() ) { if ( f.isFile() ) { QFile f( linkFile ); bool rc = f.remove(); text = ( rc ? tr( "Removed %1" ) : tr( "Failed to remove %1" ) ).arg( linkFile ); emit outputText( text ); } else if ( f.isDir() ) { QDir d; bool rc = d.rmdir( linkFile, true ); if ( rc ) { text = ( rc ? tr( "Removed " ) : tr( "Failed to remove " ) ).arg( linkFile ); emit outputText( text ); } } } } } diff --git a/noncore/settings/aqpkg/mainwin.cpp b/noncore/settings/aqpkg/mainwin.cpp index 6f5c712..6b31cd1 100644 --- a/noncore/settings/aqpkg/mainwin.cpp +++ b/noncore/settings/aqpkg/mainwin.cpp @@ -1,1244 +1,1244 @@ /* This file is part of the OPIE Project =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk> .=l. 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 "categoryfilterimpl.h" #include "datamgr.h" #include "global.h" #include "inputdlg.h" #include "ipkg.h" #include "installdlgimpl.h" #include "letterpushbutton.h" #include "mainwin.h" #include "packagewin.h" #include "settingsimpl.h" #include "utils.h" /* OPIE */ #include <qpe/qcopenvelope_qws.h> #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <qpe/resource.h> /* QT */ #include <qmenubar.h> #include <qtoolbar.h> #include <qaction.h> #include <qcombobox.h> #include <qfile.h> #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include <qlistview.h> #include <qmenubar.h> #include <qmessagebox.h> #include <qpopupmenu.h> #include <qprogressbar.h> #include <qtimer.h> #include <qwhatsthis.h> #include <qwidgetstack.h> /* STD */ #include <linux/limits.h> #include <unistd.h> extern int compareVersions( const char *v1, const char *v2 ); MainWindow :: MainWindow( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl || WStyle_ContextHelp ) { // Disable suspend mode QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::DisableSuspend; LOCAL_SERVER = QObject::tr( "Installed packages" ); LOCAL_IPKGS = QObject::tr( "Local packages" ); setCaption( tr( "AQPkg - Package Manager" ) ); // Create UI widgets initMainWidget(); initProgressWidget(); // Build menu and tool bars setToolBarsMovable( FALSE ); QToolBar *bar = new QToolBar( this ); bar->setHorizontalStretchable( TRUE ); QMenuBar *mb = new QMenuBar( bar ); mb->setMargin( 0 ); bar = new QToolBar( this ); // Find toolbar findBar = new QToolBar( this ); addToolBar( findBar, QMainWindow::Top, true ); findBar->setHorizontalStretchable( true ); findEdit = new QLineEdit( findBar ); QWhatsThis::add( findEdit, tr( "Type the text to search for here." ) ); findBar->setStretchableWidget( findEdit ); - connect( findEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( findPackage( const QString & ) ) ); + connect( findEdit, SIGNAL( textChanged(const QString&) ), this, SLOT( findPackage(const QString&) ) ); // Quick jump toolbar jumpBar = new QToolBar( this ); addToolBar( jumpBar, QMainWindow::Top, true ); jumpBar->setHorizontalStretchable( true ); QWidget *w = new QWidget( jumpBar ); jumpBar->setStretchableWidget( w ); QGridLayout *layout = new QGridLayout( w ); char text[2]; text[1] = '\0'; for ( int i = 0 ; i < 26 ; ++i ) { text[0] = 'A' + i; LetterPushButton *b = new LetterPushButton( text, w ); - connect( b, SIGNAL( released( QString ) ), this, SLOT( letterPushed( QString ) ) ); + connect( b, SIGNAL( released(QString) ), this, SLOT( letterPushed(QString) ) ); layout->addWidget( b, i / 13, i % 13); } QAction *a = new QAction( QString::null, Resource::loadPixmap( "close" ), QString::null, 0, w, 0 ); a->setWhatsThis( tr( "Click here to hide the Quick Jump toolbar." ) ); connect( a, SIGNAL( activated() ), this, SLOT( hideJumpBar() ) ); a->addTo( jumpBar ); jumpBar->hide(); // Packages menu QPopupMenu *popup = new QPopupMenu( this ); a = new QAction( tr( "Update lists" ), Resource::loadPixmap( "aqpkg/update" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to update package lists from servers." ) ); connect( a, SIGNAL( activated() ), this, SLOT( updateServer() ) ); a->addTo( popup ); a->addTo( bar ); actionUpgrade = new QAction( tr( "Upgrade" ), Resource::loadPixmap( "aqpkg/upgrade" ), QString::null, 0, this, 0 ); actionUpgrade->setWhatsThis( tr( "Click here to upgrade all installed packages if a newer version is available." ) ); connect( actionUpgrade, SIGNAL( activated() ), this, SLOT( upgradePackages() ) ); actionUpgrade->addTo( popup ); actionUpgrade->addTo( bar ); iconDownload = Resource::loadPixmap( "aqpkg/download" ); iconRemove = Resource::loadPixmap( "aqpkg/remove" ); actionDownload = new QAction( tr( "Download" ), iconDownload, QString::null, 0, this, 0 ); actionDownload->setWhatsThis( tr( "Click here to download the currently selected package(s)." ) ); connect( actionDownload, SIGNAL( activated() ), this, SLOT( downloadPackage() ) ); actionDownload->addTo( popup ); actionDownload->addTo( bar ); a = new QAction( tr( "Apply changes" ), Resource::loadPixmap( "aqpkg/apply" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to install, remove or upgrade currently selected package(s)." ) ); connect( a, SIGNAL( activated() ), this, SLOT( applyChanges() ) ); a->addTo( popup ); a->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 application." ) ); connect( a, SIGNAL( activated() ), this, SLOT( displaySettings() ) ); a->addTo( popup ); mb->insertItem( tr( "Actions" ), popup ); // View menu popup = new QPopupMenu( this ); actionUninstalled = new QAction( tr( "Show packages not installed" ), QString::null, 0, this, 0 ); actionUninstalled->setToggleAction( TRUE ); actionUninstalled->setWhatsThis( tr( "Click here to show packages available which have not been installed." ) ); connect( actionUninstalled, SIGNAL( activated() ), this, SLOT( filterUninstalledPackages() ) ); actionUninstalled->addTo( popup ); actionInstalled = new QAction( tr( "Show installed packages" ), QString::null, 0, this, 0 ); actionInstalled->setToggleAction( TRUE ); actionInstalled->setWhatsThis( tr( "Click here to show packages currently installed on this device." ) ); connect( actionInstalled, SIGNAL( activated() ), this, SLOT( filterInstalledPackages() ) ); actionInstalled->addTo( popup ); actionUpdated = new QAction( tr( "Show updated packages" ), QString::null, 0, this, 0 ); actionUpdated->setToggleAction( TRUE ); actionUpdated->setWhatsThis( tr( "Click here to show packages currently installed on this device which have a newer version available." ) ); connect( actionUpdated, SIGNAL( activated() ), this, SLOT( filterUpgradedPackages() ) ); actionUpdated->addTo( popup ); popup->insertSeparator(); actionFilter = new QAction( tr( "Filter by category" ), Resource::loadPixmap( "aqpkg/filter" ), QString::null, 0, this, 0 ); actionFilter->setToggleAction( TRUE ); actionFilter->setWhatsThis( tr( "Click here to list packages belonging to one category." ) ); connect( actionFilter, SIGNAL( activated() ), this, SLOT( filterCategory() ) ); actionFilter->addTo( popup ); a = new QAction( tr( "Set filter category" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to change package category to used filter." ) ); connect( a, SIGNAL( activated() ), this, SLOT( setFilterCategory() ) ); a->addTo( popup ); popup->insertSeparator(); a = new QAction( tr( "Find" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to search for text in package names." ) ); connect( a, SIGNAL( activated() ), this, SLOT( displayFindBar() ) ); a->addTo( popup ); actionFindNext = new QAction( tr( "Find next" ), Resource::loadIconSet( "next" ), QString::null, 0, this, 0 ); actionFindNext->setEnabled( FALSE ); actionFindNext->setWhatsThis( tr( "Click here to find the next package name containing the text you are searching for." ) ); connect( actionFindNext, SIGNAL( activated() ), this, SLOT( repeatFind() ) ); actionFindNext->addTo( popup ); actionFindNext->addTo( findBar ); popup->insertSeparator(); a = new QAction( tr( "Quick Jump keypad" ), Resource::loadPixmap( "aqpkg/keyboard" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to display/hide keypad to allow quick movement through the package list." ) ); connect( a, SIGNAL( activated() ), this, SLOT( displayJumpBar() ) ); a->addTo( popup ); mb->insertItem( tr( "View" ), popup ); // Finish find toolbar creation a = new QAction( QString::null, Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to hide the find toolbar." ) ); connect( a, SIGNAL( activated() ), this, SLOT( hideFindBar() ) ); a->addTo( findBar ); findBar->hide(); // Create widget stack and add UI widgets stack = new QWidgetStack( this ); stack->addWidget( progressWindow, 2 ); stack->addWidget( networkPkgWindow, 1 ); setCentralWidget( stack ); stack->raiseWidget( progressWindow ); // Delayed call to finish initialization QTimer::singleShot( 100, this, SLOT( init() ) ); } MainWindow :: ~MainWindow() { delete mgr; // Reenable suspend mode QCopEnvelope( "QPE/System", "setScreenSaverMode(int)" ) << QPEApplication::Enable; } void MainWindow :: initMainWidget() { networkPkgWindow = new QWidget( this ); QLabel *l = new QLabel( tr( "Servers:" ), networkPkgWindow ); serversList = new QComboBox( networkPkgWindow ); connect( serversList, SIGNAL(activated(int)), this, SLOT(serverSelected(int)) ); QWhatsThis::add( serversList, tr( "Click here to select a package feed." ) ); installedIcon = Resource::loadPixmap( "installed" ); updatedIcon = Resource::loadPixmap( "aqpkg/updated" ); packagesList = new QListView( networkPkgWindow ); packagesList->addColumn( tr( "Packages" ), 225 ); QWhatsThis::add( packagesList, tr( "This is a listing of all packages for the server feed selected above.\n\nA blue dot next to the package name indicates that the package is currently installed.\n\nA blue dot with a star indicates that a newer version of the package is available from the server feed.\n\nClick inside the box at the left to select a package." ) ); QPEApplication::setStylusOperation( packagesList->viewport(), QPEApplication::RightOnHold ); - connect( packagesList, SIGNAL(rightButtonPressed(QListViewItem *,const QPoint &,int)), - this, SLOT(slotDisplayPackage(QListViewItem *)) ); + connect( packagesList, SIGNAL(rightButtonPressed(QListViewItem*,const QPoint&,int)), + this, SLOT(slotDisplayPackage(QListViewItem*)) ); QVBoxLayout *vbox = new QVBoxLayout( networkPkgWindow, 0, -1 ); QHBoxLayout *hbox1 = new QHBoxLayout( vbox, -1 ); hbox1->addWidget( l ); hbox1->addWidget( serversList ); vbox->addWidget( packagesList ); downloadEnabled = TRUE; } void MainWindow :: initProgressWidget() { progressWindow = new QWidget( this ); QVBoxLayout *layout = new QVBoxLayout( progressWindow, 4, 4 ); m_status = new QLabel( progressWindow ); m_status->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); layout->addWidget( m_status ); m_progress = new QProgressBar( progressWindow ); layout->addWidget( m_progress ); } void MainWindow :: init() { #ifdef QWS // read download directory from config file Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); currentlySelectedServer = cfg.readEntry( "selectedServer", "local" ); // showJumpTo = cfg.readBoolEntry( "showJumpTo", "true" ); #endif stack->raiseWidget( progressWindow ); mgr = new DataManager(); - connect( mgr, SIGNAL( progressSetSteps( int ) ), this, SLOT( setProgressSteps( int ) ) ); - connect( mgr, SIGNAL( progressSetMessage( const QString & ) ), - this, SLOT( setProgressMessage( const QString & ) ) ); - connect( mgr, SIGNAL( progressUpdate( int ) ), this, SLOT( updateProgress( int ) ) ); + connect( mgr, SIGNAL( progressSetSteps(int) ), this, SLOT( setProgressSteps(int) ) ); + connect( mgr, SIGNAL( progressSetMessage(const QString&) ), + this, SLOT( setProgressMessage(const QString&) ) ); + connect( mgr, SIGNAL( progressUpdate(int) ), this, SLOT( updateProgress(int) ) ); mgr->loadServers(); showUninstalledPkgs = false; showInstalledPkgs = false; showUpgradedPkgs = false; categoryFilterEnabled = false; updateData(); stack->raiseWidget( networkPkgWindow ); } void MainWindow :: setDocument( const QString &doc ) { // Remove path from package QString package = Utils::getPackageNameFromIpkFilename( doc ); // First select local server for ( int i = 0 ; i < serversList->count() ; ++i ) { if ( serversList->text( i ) == LOCAL_IPKGS ) { serversList->setCurrentItem( i ); break; } } serverSelected( 0 ); // Now set the check box of the selected package for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->text().startsWith( package ) ) { item->setOn( true ); break; } } } void MainWindow :: displaySettings() { SettingsImpl *dlg = new SettingsImpl( mgr, this, "Settings", true ); if ( dlg->showDlg() ) { stack->raiseWidget( progressWindow ); updateData(); stack->raiseWidget( networkPkgWindow ); } delete dlg; } void MainWindow :: closeEvent( QCloseEvent *e ) { // If install dialog is visible, return to main view, otherwise close app QWidget *widget = stack->visibleWidget(); if ( widget != networkPkgWindow && widget != progressWindow ) { if ( widget ) delete widget; stack->raiseWidget( networkPkgWindow ); e->ignore(); } else { e->accept(); } } void MainWindow :: displayFindBar() { findBar->show(); findEdit->setFocus(); } void MainWindow :: displayJumpBar() { jumpBar->show(); } void MainWindow :: repeatFind() { searchForPackage( findEdit->text() ); } void MainWindow :: findPackage( const QString &text ) { actionFindNext->setEnabled( !text.isEmpty() ); searchForPackage( text ); } void MainWindow :: hideFindBar() { findBar->hide(); } void MainWindow :: hideJumpBar() { jumpBar->hide(); } void MainWindow :: filterUninstalledPackages() { showUninstalledPkgs = actionUninstalled->isOn(); if ( showUninstalledPkgs ) { showInstalledPkgs = FALSE; showUpgradedPkgs = FALSE; } serverSelected( -1 ); actionInstalled->setOn( FALSE ); actionUpdated->setOn( FALSE ); } void MainWindow :: filterInstalledPackages() { showInstalledPkgs = actionInstalled->isOn(); if ( showInstalledPkgs ) { showUninstalledPkgs = FALSE; showUpgradedPkgs = FALSE; } serverSelected( -1 ); actionUninstalled->setOn( FALSE ); actionUpdated->setOn( FALSE ); } void MainWindow :: filterUpgradedPackages() { showUpgradedPkgs = actionUpdated->isOn(); if ( showUpgradedPkgs ) { showUninstalledPkgs = FALSE; showInstalledPkgs = FALSE; } serverSelected( -1 ); actionUninstalled->setOn( FALSE ); actionInstalled->setOn( FALSE ); } bool MainWindow :: setFilterCategory() { // Get categories; CategoryFilterImpl dlg( DataManager::getAvailableCategories(), categoryFilter, this ); if ( dlg.exec() == QDialog::Accepted ) { categoryFilter = dlg.getSelectedFilter(); if ( categoryFilter == "" ) return false; categoryFilterEnabled = true; serverSelected( -1 ); actionFilter->setOn( TRUE ); return true; } return false; } void MainWindow :: filterCategory() { if ( !actionFilter->isOn() ) { filterByCategory( FALSE ); } else { actionFilter->setOn( filterByCategory( TRUE ) ); } } bool MainWindow :: filterByCategory( bool val ) { if ( val ) { if ( categoryFilter == "" ) { if ( !setFilterCategory() ) return false; } categoryFilterEnabled = true; serverSelected( -1 ); return true; } else { // Turn off filter categoryFilterEnabled = false; serverSelected( -1 ); return false; } } void MainWindow :: raiseMainWidget() { stack->raiseWidget( networkPkgWindow ); } void MainWindow :: raiseProgressWidget() { stack->raiseWidget( progressWindow ); } void MainWindow :: enableUpgrade( bool enabled ) { actionUpgrade->setEnabled( enabled ); } void MainWindow :: enableDownload( bool enabled ) { if ( enabled ) { actionDownload->setIconSet( iconDownload ); actionDownload->setText( tr( "Download" ) ); actionDownload->setWhatsThis( tr( "Click here to download the currently selected package(s)." ) ); } else { actionDownload->setIconSet( iconRemove ); actionDownload->setText( tr( "Remove" ) ); actionDownload->setWhatsThis( tr( "Click here to uninstall the currently selected package(s)." ) ); } } void MainWindow :: setProgressSteps( int numsteps ) { m_progress->setTotalSteps( numsteps ); } void MainWindow :: setProgressMessage( const QString &msg ) { m_status->setText( msg ); } void MainWindow :: updateProgress( int progress ) { m_progress->setProgress( progress ); } void MainWindow :: updateData() { m_progress->setTotalSteps( mgr->getServerList().count() ); serversList->clear(); packagesList->clear(); int activeItem = -1; int i = 0; QString serverName; QListIterator<Server> it( mgr->getServerList() ); Server *server; for ( ; it.current(); ++it, ++i ) { server = it.current(); serverName = server->getServerName(); m_status->setText( tr( "Building server list:\n\t%1" ).arg( serverName ) ); m_progress->setProgress( i ); qApp->processEvents(); if ( !server->isServerActive() ) { i--; continue; } serversList->insertItem( serverName ); if ( serverName == currentlySelectedServer ) activeItem = i; } // set selected server to be active server if ( activeItem != -1 ) serversList->setCurrentItem( activeItem ); serverSelected( 0, FALSE ); } void MainWindow :: serverSelected( int index ) { serverSelected( index, TRUE ); } void MainWindow :: serverSelected( int, bool raiseProgress ) { QPixmap nullIcon( installedIcon.size() ); nullIcon.fill( colorGroup().base() ); // display packages QString serverName = serversList->currentText(); currentlySelectedServer = serverName; Server *s = mgr->getServer( serverName ); QList<Package> &list = s->getPackageList(); QListIterator<Package> it( list ); // Display progress widget while loading list bool doProgress = ( list.count() > 200 ); if ( doProgress ) { if ( raiseProgress ) { stack->raiseWidget( progressWindow ); } m_progress->setTotalSteps( list.count() ); m_status->setText( tr( "Building package list for:\n\t%1" ).arg( serverName ) ); } packagesList->clear(); #ifdef QWS // read download directory from config file Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); cfg.writeEntry( "selectedServer", currentlySelectedServer ); #endif int i = 0; Package *package; for ( ; it.current(); ++it ) { // Update progress after every 100th package (arbitrary value, seems to give good balance) i++; if ( ( i % 100 ) == 0 ) { if ( doProgress ) { m_progress->setProgress( i ); } qApp->processEvents(); } QString text = ""; package = it.current(); // Apply show only uninstalled packages filter if ( showUninstalledPkgs && package->isInstalled() ) continue; // Apply show only installed packages filter if ( showInstalledPkgs && !package->isInstalled() ) continue; // Apply show only new installed packages filter if ( showUpgradedPkgs ) { if ( !package->isInstalled() || !package->getNewVersionAvailable() ) continue; } // Apply the section filter if ( categoryFilterEnabled && categoryFilter != "" ) { if ( package->getSection() == "" || categoryFilter.find( package->getSection().lower() ) == -1 ) continue; } // If the local server, only display installed packages if ( serverName == LOCAL_SERVER && !package->isInstalled() ) continue; QCheckListItem *item = new QCheckListItem( packagesList, package->getPackageName(), QCheckListItem::CheckBox ); if ( package->isInstalled() ) { // If a different version of package is available, show update available icon // Otherwise, show installed icon if ( package->getNewVersionAvailable()) { item->setPixmap( 0, updatedIcon ); } else { item->setPixmap( 0, installedIcon ); } } else { item->setPixmap( 0, nullIcon ); } packagesList->insertItem( item ); } // If the local server or the local ipkgs server disable the download button if ( serverName == LOCAL_SERVER ) { downloadEnabled = TRUE; actionUpgrade->setEnabled( FALSE ); } else if ( serverName == LOCAL_IPKGS ) { downloadEnabled = FALSE; actionUpgrade->setEnabled( FALSE ); } else { downloadEnabled = TRUE; actionUpgrade->setEnabled( TRUE ); } enableDownload( downloadEnabled ); // Display this widget once everything is done if ( doProgress && raiseProgress ) { stack->raiseWidget( networkPkgWindow ); } } void MainWindow :: searchForPackage( const QString &text ) { if ( !text.isEmpty() ) { // look through package list for text startng at current position QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); if ( start == 0 ) start = (QCheckListItem *)packagesList->firstChild(); for ( QCheckListItem *item = start; item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->text().lower().find( text ) != -1 ) { packagesList->ensureItemVisible( item ); packagesList->setCurrentItem( item ); break; } } } } void MainWindow :: updateServer() { QString serverName = serversList->currentText(); // Update the current server // Display dialog // Disable buttons to stop silly people clicking lots on them :) // First, write out ipkg_conf file so that ipkg can use it mgr->writeOutIpkgConf(); Ipkg *ipkg = new Ipkg; ipkg->setOption( "update" ); InstallDlgImpl *dlg = new InstallDlgImpl( ipkg, tr( "Refreshing server package lists" ), tr( "Update lists" ) ); - connect( dlg, SIGNAL( reloadData( InstallDlgImpl * ) ), this, SLOT( reloadData( InstallDlgImpl * ) ) ); + connect( dlg, SIGNAL( reloadData(InstallDlgImpl*) ), this, SLOT( reloadData(InstallDlgImpl*) ) ); reloadDocuments = FALSE; stack->addWidget( dlg, 3 ); stack->raiseWidget( dlg ); // delete progDlg; } void MainWindow :: upgradePackages() { // We're gonna do an upgrade of all packages // First warn user that this isn't recommended // TODO - ODevice???? QString text = tr( "WARNING: Upgrading while\nOpie/Qtopia is running\nis NOT recommended!\n\nAre you sure?\n" ); QMessageBox warn( tr( "Warning" ), text, QMessageBox::Warning, QMessageBox::Yes, QMessageBox::No | QMessageBox::Escape | QMessageBox::Default , 0, this ); warn.adjustSize(); if ( warn.exec() == QMessageBox::Yes ) { // First, write out ipkg_conf file so that ipkg can use it mgr->writeOutIpkgConf(); // Now run upgrade Ipkg *ipkg = new Ipkg; ipkg->setOption( "upgrade" ); InstallDlgImpl *dlg = new InstallDlgImpl( ipkg, tr( "Upgrading installed packages" ), tr ( "Upgrade" ) ); - connect( dlg, SIGNAL( reloadData( InstallDlgImpl * ) ), this, SLOT( reloadData( InstallDlgImpl * ) ) ); + connect( dlg, SIGNAL( reloadData(InstallDlgImpl*) ), this, SLOT( reloadData(InstallDlgImpl*) ) ); reloadDocuments = TRUE; stack->addWidget( dlg, 3 ); stack->raiseWidget( dlg ); } } void MainWindow :: downloadPackage() { bool doUpdate = true; if ( downloadEnabled ) { // See if any packages are selected bool found = false; if ( serversList->currentText() != LOCAL_SERVER ) { for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 && !found; item = (QCheckListItem *)item->nextSibling() ) { if ( item->isOn() ) found = true; } } // If user selected some packages then download the and store the locally // otherwise, display dialog asking user what package to download from an http server // and whether to install it if ( found ) downloadSelectedPackages(); else downloadRemotePackage(); } else { doUpdate = false; for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->isOn() ) { QString name = item->text(); int pos = name.find( "*" ); name.truncate( pos ); // if (there is a (installed), remove it pos = name.find( "(installed)" ); if ( pos > 0 ) name.truncate( pos - 1 ); Package *p = mgr->getServer( serversList->currentText() )->getPackage( name ); QString msgtext; msgtext = tr( "Are you sure you wish to delete\n%1?" ).arg( (const char *)p->getPackageName() ); if ( QMessageBox::information( this, tr( "Are you sure?" ), msgtext, tr( "No" ), tr( "Yes" ) ) == 1 ) { doUpdate = true; QFile f( p->getFilename() ); f.remove(); } } } } if ( doUpdate ) { reloadData( 0x0 ); } } void MainWindow :: downloadSelectedPackages() { // First, write out ipkg_conf file so that ipkg can use it mgr->writeOutIpkgConf(); // Display dialog to user asking where to download the files to bool ok = FALSE; QString dir = ""; #ifdef QWS // read download directory from config file Config cfg( "aqpkg" ); cfg.setGroup( "settings" ); dir = cfg.readEntry( "downloadDir", "/home/root/Documents/application/ipkg" ); #endif QString text = InputDialog::getText( tr( "Download to where" ), tr( "Enter path to download to" ), dir, &ok, this ); if ( ok && !text.isEmpty() ) dir = text; // user entered something and pressed ok else return; // user entered nothing or pressed cancel #ifdef QWS // Store download directory in config file cfg.writeEntry( "downloadDir", dir ); #endif // Get starting directory char initDir[PATH_MAX]; getcwd( initDir, PATH_MAX ); // Download each package Ipkg ipkg; - connect( &ipkg, SIGNAL(outputText(const QString &)), this, SLOT(displayText(const QString &))); + connect( &ipkg, SIGNAL(outputText(const QString&)), this, SLOT(displayText(const QString&))); ipkg.setOption( "download" ); ipkg.setRuntimeDirectory( dir ); for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->isOn() ) { ipkg.setPackage( item->text() ); ipkg.runIpkg( ); } } } void MainWindow :: downloadRemotePackage() { // Display dialog bool ok; QString package = InputDialog::getText( tr( "Install Remote Package" ), tr( "Enter package location" ), "http://", &ok, this ); if ( !ok || package.isEmpty() ) return; // DownloadRemoteDlgImpl dlg( this, "Install", true ); // if ( dlg.exec() == QDialog::Rejected ) // return; // grab details from dialog // QString package = dlg.getPackageLocation(); InstallData *item = new InstallData(); item->option = "I"; item->packageName = package; QList<InstallData> workingPackages; workingPackages.setAutoDelete( TRUE ); workingPackages.append( item ); InstallDlgImpl *dlg = new InstallDlgImpl( workingPackages, mgr, tr( "Download" ) ); - connect( dlg, SIGNAL( reloadData( InstallDlgImpl * ) ), this, SLOT( reloadData( InstallDlgImpl * ) ) ); + connect( dlg, SIGNAL( reloadData(InstallDlgImpl*) ), this, SLOT( reloadData(InstallDlgImpl*) ) ); reloadDocuments = TRUE; stack->addWidget( dlg, 3 ); stack->raiseWidget( dlg ); } void MainWindow :: applyChanges() { stickyOption = ""; // First, write out ipkg_conf file so that ipkg can use it mgr->writeOutIpkgConf(); // Now for each selected item // deal with it QList<InstallData> workingPackages; workingPackages.setAutoDelete( TRUE ); for ( QCheckListItem *item = (QCheckListItem *)packagesList->firstChild(); item != 0 ; item = (QCheckListItem *)item->nextSibling() ) { if ( item->isOn() ) { InstallData *instdata = dealWithItem( item ); if ( instdata ) workingPackages.append( instdata ); else return; } } if ( workingPackages.count() == 0 ) { // Nothing to do QMessageBox::information( this, tr( "Nothing to do" ), tr( "No packages selected" ), tr( "OK" ) ); return; } // do the stuff InstallDlgImpl *dlg = new InstallDlgImpl( workingPackages, mgr, tr( "Apply changes" ) ); - connect( dlg, SIGNAL( reloadData( InstallDlgImpl * ) ), this, SLOT( reloadData( InstallDlgImpl * ) ) ); + connect( dlg, SIGNAL( reloadData(InstallDlgImpl*) ), this, SLOT( reloadData(InstallDlgImpl*) ) ); reloadDocuments = TRUE; stack->addWidget( dlg, 3 ); stack->raiseWidget( dlg ); } // decide what to do - either remove, upgrade or install // Current rules: // If not installed - install // If installed and different version available - upgrade // If installed and version up to date - remove InstallData *MainWindow :: dealWithItem( QCheckListItem *item ) { QString name = item->text(); // Get package Server *s = mgr->getServer( serversList->currentText() ); Package *p = s->getPackage( name ); // If the package has a filename then it is a local file if ( p->isPackageStoredLocally() ) name = p->getFilename(); QString option; QString dest = "root"; if ( !p->isInstalled() ) { InstallData *newitem = new InstallData(); newitem->option = "I"; newitem->packageName = name; return newitem; } else { InstallData *newitem = new InstallData(); newitem->option = "D"; // If local file, remove using package name, not filename if ( p->isPackageStoredLocally() ) name = item->text(); if ( !p->isPackageStoredLocally() ) newitem->packageName = p->getInstalledPackageName(); else newitem->packageName = name; if ( p->getInstalledTo() ) { newitem->destination = p->getInstalledTo(); } else { newitem->destination = p->getLocalPackage()->getInstalledTo(); } // Now see if version is newer or not int val = compareVersions( p->getInstalledVersion(), p->getVersion() ); // If the version requested is older and user selected a local ipk file, then reinstall the file if ( p->isPackageStoredLocally() && val == -1 ) val = 0; if ( val == -2 ) { // Error - should handle } else if ( val == -1 ) { // Version available is older - remove only newitem->option = "D"; // If local file, remove using package name, not filename if ( p->isPackageStoredLocally() ) name = item->text(); } else { QString caption; QString text; QString secondButton; QString secondOption; if ( val == 0 ) { // Version available is the same - option to remove or reinstall caption = tr( "Do you wish to remove or reinstall\n%1?" ); text = tr( "Remove or ReInstall" ); secondButton = tr( "ReInstall" ); secondOption = "R"; // Internal action code, do not translate } else if ( val == 1 ) { // Version available is newer - option to remove or upgrade caption = tr( "Do you wish to remove or upgrade\n%1?" ); text = tr( "Remove or Upgrade" ); secondButton = tr( "Upgrade" ); secondOption = "U"; // Internal action code, do not translate } // Sticky option not implemented yet, but will eventually allow // the user to say something like 'remove all' if ( stickyOption == "" ) { QString msgtext; msgtext = caption.arg( ( const char * )name ); QuestionDlg dlg( text, msgtext, secondButton ); switch( dlg.exec() ) { case 0: // Cancel delete newitem; return 0x0; break; case 1: // Remove newitem->option = "D"; // If local file, remove using package name, not filename if ( p->isPackageStoredLocally() ) name = item->text(); break; case 2: // Reinstall or Upgrade newitem->option = secondOption; break; } } else { // newitem->option = stickyOption; } } // Check if we are reinstalling the same version if ( newitem->option != "R" ) newitem->recreateLinks = true; else newitem->recreateLinks = false; // User hit cancel (on dlg - assume remove) return newitem; } } void MainWindow :: reloadData( InstallDlgImpl *dlg ) { stack->raiseWidget( progressWindow ); if ( dlg ) { dlg->close(); delete dlg; } mgr->reloadServerData(); serverSelected( -1, FALSE ); #ifdef QWS if ( reloadDocuments ) { m_status->setText( tr( "Updating Launcher..." ) ); // Finally let the main system update itself QCopEnvelope e("QPE/System", "linkChanged(QString)"); QString lf = QString::null; e << lf; } #endif stack->raiseWidget( networkPkgWindow ); } void MainWindow :: letterPushed( QString t ) { QCheckListItem *top = (QCheckListItem *)packagesList->firstChild(); QCheckListItem *start = (QCheckListItem *)packagesList->currentItem(); if ( packagesList->firstChild() == 0 ) return; QCheckListItem *item; if ( start == 0 ) { item = (QCheckListItem *)packagesList->firstChild(); start = top; } else item = (QCheckListItem *)start->nextSibling(); if ( item == 0 ) item = (QCheckListItem *)packagesList->firstChild(); do { if ( item->text().lower().startsWith( t.lower() ) ) { packagesList->setSelected( item, true ); packagesList->ensureItemVisible( item ); break; } item = (QCheckListItem *)item->nextSibling(); if ( !item ) item = (QCheckListItem *)packagesList->firstChild(); } while ( item != start); } void MainWindow :: slotDisplayPackage( QListViewItem *item ) { QString itemstr( ((QCheckListItem*)item)->text() ); PackageWindow *p = new PackageWindow( mgr->getServer( serversList->currentText() )->getPackage( itemstr ) ); QPEApplication::showWidget( p ); } QuestionDlg::QuestionDlg( const QString &caption, const QString &text, const QString &secondbtn ) : QWidget( 0x0, 0x0, WType_Modal | WType_TopLevel | WStyle_Dialog ) { setCaption( caption ); resize( 175, 100 ); QGridLayout *layout = new QGridLayout( this ); QLabel *l = new QLabel( text, this ); l->setAlignment( AlignCenter | WordBreak ); layout->addMultiCellWidget( l, 0, 0, 0, 1 ); btn1 = new QPushButton( tr( "Remove" ), this ); connect( btn1, SIGNAL(clicked()), this, SLOT(slotButtonPressed()) ); layout->addWidget( btn1, 1, 0 ); btn2 = new QPushButton( secondbtn, this ); connect( btn2, SIGNAL(clicked()), this, SLOT(slotButtonPressed()) ); layout->addWidget( btn2, 1, 1 ); executing = FALSE; } int QuestionDlg::exec() { show(); if ( !executing ) { executing = TRUE; qApp->enter_loop(); } return buttonpressed; } void QuestionDlg::slotButtonPressed() { if ( sender() == btn1 ) buttonpressed = 1; else if ( sender() == btn2 ) buttonpressed = 2; else buttonpressed = 0; qApp->exit_loop(); } diff --git a/noncore/settings/aqpkg/settingsimpl.cpp b/noncore/settings/aqpkg/settingsimpl.cpp index 6e9dd99..b9dbb6e 100644 --- a/noncore/settings/aqpkg/settingsimpl.cpp +++ b/noncore/settings/aqpkg/settingsimpl.cpp @@ -1,494 +1,494 @@ /* This file is part of the OPIE Project =. Copyright (c) 2002 Andy Qua <andy.qua@blueyonder.co.uk> .=l. 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 "settingsimpl.h" #include "global.h" /* OPIE */ #include <opie2/otabwidget.h> #ifdef QWS #include <qpe/config.h> #include <qpe/resource.h> #endif #include <qpe/qpeapplication.h> /* QT */ #include <qcheckbox.h> #include <qgroupbox.h> #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include <qlistbox.h> #include <qpushbutton.h> /* STD */ #include <fstream> #include <algorithm> using namespace std; SettingsImpl :: SettingsImpl( DataManager *dataManager, QWidget * parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ) { setCaption( tr( "Configuration" ) ); // Setup layout to make everything pretty QVBoxLayout *layout = new QVBoxLayout( this ); layout->setMargin( 2 ); layout->setSpacing( 4 ); // Setup tabs for all info Opie::OTabWidget *tabwidget = new Opie::OTabWidget( this ); layout->addWidget( tabwidget ); tabwidget->addTab( initServerTab(), "aqpkg/servertab", tr( "Servers" ) ); tabwidget->addTab( initDestinationTab(), "aqpkg/desttab", tr( "Destinations" ) ); tabwidget->addTab( initProxyTab(), "aqpkg/proxytab", tr( "Proxies" ) ); tabwidget->setCurrentTab( tr( "Servers" ) ); dataMgr = dataManager; setupData(); changed = false; newserver = false; newdestination = false; } SettingsImpl :: ~SettingsImpl() { } bool SettingsImpl :: showDlg() { QPEApplication::execDialog( this ); if ( changed ) dataMgr->writeOutIpkgConf(); return changed; } QWidget *SettingsImpl :: initServerTab() { QWidget *control = new QWidget( this ); 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 ); servers = new QListBox( container ); servers->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ) ); - connect( servers, SIGNAL( highlighted( int ) ), this, SLOT( editServer( int ) ) ); + connect( servers, SIGNAL( highlighted(int) ), this, SLOT( editServer(int) ) ); layout->addMultiCellWidget( servers, 0, 0, 0, 1 ); QPushButton *btn = new QPushButton( Resource::loadPixmap( "new" ), tr( "New" ), container ); connect( btn, SIGNAL( clicked() ), this, SLOT( newServer() ) ); layout->addWidget( btn, 1, 0 ); btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), container ); connect( btn, SIGNAL( clicked() ), this, SLOT( removeServer() ) ); layout->addWidget( btn, 1, 1 ); QGroupBox *grpbox = new QGroupBox( 0, Qt::Vertical, tr( "Server" ), container ); grpbox->layout()->setSpacing( 2 ); grpbox->layout()->setMargin( 4 ); layout->addMultiCellWidget( grpbox, 2, 2, 0, 1 ); QGridLayout *grplayout = new QGridLayout( grpbox->layout() ); QLabel *label = new QLabel( tr( "Name:" ), grpbox ); grplayout->addWidget( label, 0, 0 ); servername = new QLineEdit( grpbox ); grplayout->addWidget( servername, 0, 1 ); label = new QLabel( tr( "Address:" ), grpbox ); grplayout->addWidget( label, 1, 0 ); serverurl = new QLineEdit( grpbox ); grplayout->addWidget( serverurl, 1, 1 ); active = new QCheckBox( tr( "Active Server" ), grpbox ); grplayout->addMultiCellWidget( active, 2, 2, 0, 1 ); btn = new QPushButton( Resource::loadPixmap( "edit" ), tr( "Update" ), grpbox ); connect( btn, SIGNAL( clicked() ), this, SLOT( changeServerDetails() ) ); grplayout->addMultiCellWidget( btn, 3, 3, 0, 1 ); return control; } QWidget *SettingsImpl :: initDestinationTab() { QWidget *control = new QWidget( this ); 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 ); destinations = new QListBox( container ); destinations->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ) ); - connect( destinations, SIGNAL( highlighted( int ) ), this, SLOT( editDestination( int ) ) ); + connect( destinations, SIGNAL( highlighted(int) ), this, SLOT( editDestination(int) ) ); layout->addMultiCellWidget( destinations, 0, 0, 0, 1 ); QPushButton *btn = new QPushButton( Resource::loadPixmap( "new" ), tr( "New" ), container ); connect( btn, SIGNAL( clicked() ), this, SLOT( newDestination() ) ); layout->addWidget( btn, 1, 0 ); btn = new QPushButton( Resource::loadPixmap( "trash" ), tr( "Delete" ), container ); connect( btn, SIGNAL( clicked() ), this, SLOT( removeDestination() ) ); layout->addWidget( btn, 1, 1 ); QGroupBox *grpbox = new QGroupBox( 0, Qt::Vertical, tr( "Destination" ), container ); grpbox->layout()->setSpacing( 2 ); grpbox->layout()->setMargin( 4 ); layout->addMultiCellWidget( grpbox, 2, 2, 0, 1 ); QGridLayout *grplayout = new QGridLayout( grpbox->layout() ); QLabel *label = new QLabel( tr( "Name:" ), grpbox ); grplayout->addWidget( label, 0, 0 ); destinationname = new QLineEdit( grpbox ); grplayout->addWidget( destinationname, 0, 1 ); label = new QLabel( tr( "Location:" ), grpbox ); grplayout->addWidget( label, 1, 0 ); destinationurl = new QLineEdit( grpbox ); grplayout->addWidget( destinationurl, 1, 1 ); linkToRoot = new QCheckBox( tr( "Link to root" ), grpbox ); grplayout->addMultiCellWidget( linkToRoot, 2, 2, 0, 1 ); btn = new QPushButton( Resource::loadPixmap( "edit" ), tr( "Update" ), grpbox ); connect( btn, SIGNAL( clicked() ), this, SLOT( changeDestinationDetails() ) ); grplayout->addMultiCellWidget( btn, 3, 3, 0, 1 ); return control; } QWidget *SettingsImpl :: initProxyTab() { QWidget *control = new QWidget( this ); 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 ); QGroupBox *grpbox = new QGroupBox( 0, Qt::Vertical, tr( "HTTP Proxy" ), container ); grpbox->layout()->setSpacing( 2 ); grpbox->layout()->setMargin( 4 ); layout->addMultiCellWidget( grpbox, 0, 0, 0, 1 ); QVBoxLayout *grplayout = new QVBoxLayout( grpbox->layout() ); txtHttpProxy = new QLineEdit( grpbox ); grplayout->addWidget( txtHttpProxy ); chkHttpProxyEnabled = new QCheckBox( tr( "Enabled" ), grpbox ); grplayout->addWidget( chkHttpProxyEnabled ); grpbox = new QGroupBox( 0, Qt::Vertical, tr( "FTP Proxy" ), container ); grpbox->layout()->setSpacing( 2 ); grpbox->layout()->setMargin( 4 ); layout->addMultiCellWidget( grpbox, 1, 1, 0, 1 ); grplayout = new QVBoxLayout( grpbox->layout() ); txtFtpProxy = new QLineEdit( grpbox ); grplayout->addWidget( txtFtpProxy ); chkFtpProxyEnabled = new QCheckBox( tr( "Enabled" ), grpbox ); grplayout->addWidget( chkFtpProxyEnabled ); QLabel *label = new QLabel( tr( "Username:" ), container ); layout->addWidget( label, 2, 0 ); txtUsername = new QLineEdit( container ); layout->addWidget( txtUsername, 2, 1 ); label = new QLabel( tr( "Password:" ), container ); layout->addWidget( label, 3, 0 ); txtPassword = new QLineEdit( container ); layout->addWidget( txtPassword, 3, 1 ); QPushButton *btn = new QPushButton( Resource::loadPixmap( "edit" ), tr( "Update" ), container ); connect( btn, SIGNAL( clicked() ), this, SLOT( proxyApplyChanges() ) ); layout->addMultiCellWidget( btn, 4, 4, 0, 1 ); return control; } void SettingsImpl :: setupData() { // add servers QString serverName; QListIterator<Server> it( dataMgr->getServerList() ); for ( ; it.current(); ++it ) { serverName = it.current()->getServerName(); if ( serverName == LOCAL_SERVER || serverName == LOCAL_IPKGS ) continue; servers->insertItem( serverName ); } // add destinations QListIterator<Destination> it2( dataMgr->getDestinationList() ); for ( ; it2.current(); ++it2 ) destinations->insertItem( it2.current()->getDestinationName() ); // setup proxy tab txtHttpProxy->setText( dataMgr->getHttpProxy() ); txtFtpProxy->setText( dataMgr->getFtpProxy() ); txtUsername->setText( dataMgr->getProxyUsername() ); txtPassword->setText( dataMgr->getProxyPassword() ); chkHttpProxyEnabled->setChecked( dataMgr->getHttpProxyEnabled() ); chkFtpProxyEnabled->setChecked( dataMgr->getFtpProxyEnabled() ); } //------------------ Servers tab ---------------------- void SettingsImpl :: editServer( int sel ) { currentSelectedServer = sel; Server *s = dataMgr->getServer( servers->currentText() ); if ( s ) { serverName = s->getServerName(); servername->setText( s->getServerName() ); serverurl->setText( s->getServerUrl() ); active->setChecked( s->isServerActive() ); } else { serverName = ""; servername->setText( "" ); serverurl->setText( "" ); active->setChecked( false ); } } void SettingsImpl :: newServer() { newserver = true; servername->setText( "" ); serverurl->setText( "" ); servername->setFocus(); active->setChecked( true ); } void SettingsImpl :: removeServer() { changed = true; Server *s = dataMgr->getServer( servers->currentText() ); if ( s ) { dataMgr->getServerList().removeRef( s ); servers->removeItem( currentSelectedServer ); } } void SettingsImpl :: changeServerDetails() { changed = true; QString newName = servername->text(); // Convert any spaces to underscores char *tmpStr = new char[newName.length() + 1]; for ( unsigned int i = 0 ; i < newName.length() ; ++i ) { if ( newName[i] == ' ' ) tmpStr[i] = '_'; else tmpStr[i] = newName[i].latin1(); } tmpStr[newName.length()] = '\0'; newName = tmpStr; delete tmpStr; if ( !newserver ) { Server *s = dataMgr->getServer( servers->currentText() ); if ( s ) { // Update url s->setServerUrl( serverurl->text() ); s->setActive( active->isChecked() ); // Check if server name has changed, if it has then we need to replace the key in the map if ( serverName != newName ) { // Update server name s->setServerName( newName ); } // Update list box servers->changeItem( newName, currentSelectedServer ); } } else { Server s( newName, serverurl->text() ); dataMgr->getServerList().append( new Server( newName, serverurl->text() ) ); dataMgr->getServerList().last()->setActive( active->isChecked() ); servers->insertItem( newName ); servers->setCurrentItem( servers->count() ); newserver = false; } } //------------------ Destinations tab ---------------------- void SettingsImpl :: editDestination( int sel ) { currentSelectedDestination = sel; Destination *d = dataMgr->getDestination( destinations->currentText() ); if ( d ) { destinationName = d->getDestinationName(); destinationname->setText( d->getDestinationName() ); destinationurl->setText( d->getDestinationPath() ); linkToRoot->setChecked( d->linkToRoot() ); } else { destinationName = ""; destinationname->setText( "" ); destinationurl->setText( "" ); linkToRoot->setChecked( false ); } } void SettingsImpl :: newDestination() { newdestination = true; destinationname->setText( "" ); destinationurl->setText( "" ); destinationname->setFocus(); linkToRoot->setChecked( true ); } void SettingsImpl :: removeDestination() { changed = true; Destination *d = dataMgr->getDestination( destinations->currentText() ); if ( d ) { dataMgr->getDestinationList().removeRef( d ); destinations->removeItem( currentSelectedDestination ); } } void SettingsImpl :: changeDestinationDetails() { changed = true; #ifdef QWS Config cfg( "aqpkg" ); cfg.setGroup( "destinations" ); #endif QString newName = destinationname->text(); if ( !newdestination ) { Destination *d = dataMgr->getDestination( destinations->currentText() ); if ( d ) { // Update url d->setDestinationPath( destinationurl->text() ); d->linkToRoot( linkToRoot->isChecked() ); // Check if server name has changed, if it has then we need to replace the key in the map if ( destinationName != newName ) { // Update server name d->setDestinationName( newName ); // Update list box destinations->changeItem( newName, currentSelectedDestination ); } #ifdef QWS QString key = newName; key += "_linkToRoot"; int val = d->linkToRoot(); cfg.writeEntry( key, val ); #endif } } else { dataMgr->getDestinationList().append( new Destination( newName, destinationurl->text() ) ); destinations->insertItem( newName ); destinations->setCurrentItem( destinations->count() ); newdestination = false; #ifdef QWS QString key = newName; key += "_linkToRoot"; cfg.writeEntry( key, true ); #endif } } //------------------ Proxy tab ---------------------- void SettingsImpl :: proxyApplyChanges() { changed = true; dataMgr->setHttpProxy( txtHttpProxy->text() ); dataMgr->setFtpProxy( txtFtpProxy->text() ); dataMgr->setProxyUsername( txtUsername->text() ); dataMgr->setProxyPassword( txtPassword->text() ); dataMgr->setHttpProxyEnabled( chkHttpProxyEnabled->isChecked() ); dataMgr->setFtpProxyEnabled( chkFtpProxyEnabled->isChecked() ); } diff --git a/noncore/settings/backup/backuprestore.cpp b/noncore/settings/backup/backuprestore.cpp index 977c283..6b83bc9 100644 --- a/noncore/settings/backup/backuprestore.cpp +++ b/noncore/settings/backup/backuprestore.cpp @@ -1,439 +1,439 @@ #include "backuprestore.h" #include "errordialog.h" /* OPIE */ #include <opie2/ostorageinfo.h> #include <qpe/qpeapplication.h> /* QT */ #include <qapplication.h> #include <qmultilineedit.h> #include <qdir.h> #include <qfile.h> #include <qfileinfo.h> #include <qlistview.h> #include <qpushbutton.h> #include <qheader.h> #include <qpe/resource.h> #include <qpe/config.h> #include <qmessagebox.h> #include <qcombobox.h> #include <qlist.h> #include <stdlib.h> #include <qregexp.h> #include <qtextstream.h> #include <qtextview.h> /* STD */ #include <errno.h> #include <stdlib.h> #include <unistd.h> #include <sys/stat.h> #include <dirent.h> #define HEADER_NAME 0 #define HEADER_BACKUP 1 #define BACKUP_LOCATION 2 #define EXTENSION ".bck" const QString tempFileName = "/tmp/backup.err"; BackupAndRestore::BackupAndRestore( QWidget* parent, const char* name, WFlags fl) : BackupAndRestoreBase(parent, name, fl) { backupList->header()->hide(); restoreList->header()->hide(); connect(backupButton, SIGNAL(clicked()), this, SLOT(backup())); connect(restoreButton, SIGNAL(clicked()), this, SLOT(restore())); - connect(backupList, SIGNAL(clicked( QListViewItem * )), + connect(backupList, SIGNAL(clicked(QListViewItem*)), this, SLOT(selectItem(QListViewItem*))); - connect(restoreSource, SIGNAL(activated( int )), + connect(restoreSource, SIGNAL(activated(int)), this, SLOT(sourceDirChanged(int))); connect(updateList, SIGNAL(clicked()), this, SLOT( fileListUpdate())); //add directorys for backing up applicationSettings = new QListViewItem(backupList, "Application Settings", "", "Settings/"); selectItem(applicationSettings); applicationSettings = new QListViewItem(backupList, "Application Data", "", "Applications/"); selectItem(applicationSettings); documents= new QListViewItem(backupList, "Documents", "", "Documents/"); selectItem(documents); scanForApplicationSettings(); OStorageInfo storage; backupLocations.insert( "Documents", QDir::homeDirPath() + "/Documents" ); if ( storage.hasCf() ) { backupLocations.insert( "CF", storage.cfPath() ); qDebug( "Cf Path: " + storage.cfPath() ); } if ( storage.hasSd() ) { backupLocations.insert( "SD", storage.sdPath() ); qDebug( " Sd Path: " + storage.sdPath() ); } if ( storage.hasMmc() ) { backupLocations.insert( "MMC", storage.mmcPath() ); qDebug( "Mmc Path: " + storage.mmcPath() ); } Config config("BackupAndRestore"); //read last locations config.setGroup("LastLocation"); QString lastStoreLocation = config.readEntry( "LastStoreLocation", "" ); QString lastRestoreLocation = config.readEntry( "LastRestoreLocation", "" ); int locationIndex = 0; QMap<QString, QString>::Iterator it; for( it = backupLocations.begin(); it != backupLocations.end(); ++it ) { storeToLocation->insertItem(it.key()); restoreSource->insertItem(it.key()); //check for last locations if ( it.key() == lastStoreLocation ) storeToLocation->setCurrentItem( locationIndex ); if ( it.key() == lastRestoreLocation ) restoreSource->setCurrentItem( locationIndex ); locationIndex++; } // Read the list of items to ignore. QList<QString> dontBackupList; dontBackupList.setAutoDelete(true); config.setGroup("DontBackup"); int total = config.readNumEntry("Total", 0); for(int i = 0; i < total; i++) { dontBackupList.append(new QString(config.readEntry(QString("%1").arg(i), ""))); } QList<QListViewItem> list; getAllItems(backupList->firstChild(), list); for(uint i = 0; i < list.count(); i++) { QString text = list.at(i)->text(HEADER_NAME); for(uint i2 = 0; i2 < dontBackupList.count(); i2++) { if(*dontBackupList.at(i2) == text) { selectItem(list.at(i)); break; } } } QPEApplication::showWidget( this ); } BackupAndRestore::~BackupAndRestore() { QList<QListViewItem> list; getAllItems(backupList->firstChild(), list); Config config("BackupAndRestore"); config.setGroup("DontBackup"); config.clearGroup(); int count = 0; for(uint i = 0; i < list.count(); i++) { if(list.at(i)->text(HEADER_BACKUP) == "") { config.writeEntry(QString("%1").arg(count), list.at(i)->text(HEADER_NAME)); count++; } } config.writeEntry("Total", count); // Remove Temp File if ( QFile::exists( tempFileName ) ) QFile::remove( tempFileName ); } QList<QListViewItem> BackupAndRestore::getAllItems(QListViewItem *item, QList<QListViewItem> &list) { while(item) { if(item->childCount() > 0) getAllItems(item->firstChild(), list); list.append(item); item = item->nextSibling(); } return list; } /** * Selects and unselects the item by setting the HEADER_BACKUP to B or !. * and changing the icon to match * @param currentItem the item to swich the selection choice. */ void BackupAndRestore::selectItem(QListViewItem *currentItem) { if(!currentItem) return; if(currentItem->text(HEADER_BACKUP) == "B") { currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/null")); currentItem->setText(HEADER_BACKUP, ""); } else { currentItem->setPixmap(HEADER_NAME, Resource::loadPixmap("backup/check")); currentItem->setText(HEADER_BACKUP, "B"); } } void BackupAndRestore::scanForApplicationSettings() { QDir d( QDir::homeDirPath() + "/" + QString( applicationSettings->text(BACKUP_LOCATION) ) ); d.setFilter( QDir::Dirs | QDir::Files | QDir::NoSymLinks ); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; while ( (fi=it.current()) ) { //qDebug((d.path()+"/"+fi->fileName()).latin1()); if ( ( fi->fileName() != "." ) && ( fi->fileName() != ".." ) ) { QListViewItem *newItem = new QListViewItem(applicationSettings, fi->fileName()); selectItem(newItem); } ++it; } } /** * The "Backup" button has been pressed. Get a list of all of the files that * should be backed up. If there are no files, emit and error and exit. * Determine the file name to store the backup in. Backup the file(s) using * tar and gzip --best. Report failure or success */ void BackupAndRestore::backup() { QString backupFiles; if(getBackupFiles(backupFiles, NULL) == 0) { QMessageBox::critical(this, "Message", "No items selected.",QString("Ok") ); return; } setCaption(tr("Backup and Restore... working...")); QString outputFile = backupLocations[storeToLocation->currentText()]; QDateTime datetime = QDateTime::currentDateTime(); QString dateString = QString::number( datetime.date().year() ) + QString::number( datetime.date().month() ).rightJustify(2, '0') + QString::number( datetime.date().day() ).rightJustify(2, '0'); outputFile += "/" + dateString; QString t = outputFile; int c = 1; while(QFile::exists(outputFile + EXTENSION)) { outputFile = t + QString("%1").arg(c); c++; } // We execute tar and compressing its output with gzip.. // The error output will be written into a temp-file which could be provided // for debugging.. qDebug( "Storing file: %s", outputFile.latin1() ); outputFile += EXTENSION; QString commandLine = QString( "(tar -C %1 -z --exclude=*.bck -c %2 > %3 ) 2> %4" ).arg( QDir::homeDirPath() ) .arg( backupFiles ) .arg( outputFile.latin1() ) .arg( tempFileName.latin1() ); qDebug( commandLine ); int r = system( commandLine ); if(r != 0) { perror("Error: "); QString errorMsg= tr( "Error from System:\n" ) + (QString)strerror( errno ); switch( QMessageBox::critical(this, tr( "Message" ), tr( "Backup Failed!" ) + "\n" + errorMsg, QString( tr( "Ok" ) ), QString( tr( "Details" ) ) ) ) { case 1: qWarning("Details pressed !"); ErrorDialog* pErrDialog = new ErrorDialog( this, NULL, true ); QFile errorFile( tempFileName ); if ( errorFile.open(IO_ReadOnly) ) { QTextStream t( &errorFile ); QString s; while ( !t.eof() ) { // until end of file... s += t.readLine(); // line of text excluding '\n' } errorFile.close(); pErrDialog->m_textarea->setText( s ); } else { pErrDialog->m_textarea->setText( "Unable to open File: /tmp/backup.er" ); } QPEApplication::execDialog( pErrDialog ); delete pErrDialog; break; } setCaption(tr("Backup and Restore.. Failed !!")); return; } else { QMessageBox::information(this, tr( "Message" ), tr( "Backup Successful." ), QString(tr( "Ok" ) ) ); } //write store-location Config config( "BackupAndRestore" ); config.setGroup( "LastLocation" ); config.writeEntry( "LastStoreLocation", storeToLocation->currentText() ); setCaption(tr("Backup and Restore")); } /*** * Get a list of all of the files to backup. */ int BackupAndRestore::getBackupFiles(QString &backupFiles, QListViewItem *parent) { QListViewItem * currentItem; QString currentHome; if(!parent) currentItem = backupList->firstChild(); else { currentItem = parent->firstChild(); currentHome = parent->text(BACKUP_LOCATION); } uint count = 0; while( currentItem != 0 ) { if(currentItem->text(HEADER_BACKUP) == "B" ) { if(currentItem->childCount() == 0 ) { if(parent == NULL) backupFiles += currentItem->text(BACKUP_LOCATION); else backupFiles += currentHome + currentItem->text(HEADER_NAME); backupFiles += " "; count++; } else { count += getBackupFiles(backupFiles, currentItem); } } currentItem = currentItem->nextSibling(); } return count; } void BackupAndRestore::sourceDirChanged(int selection) { restoreList->clear(); rescanFolder(backupLocations[restoreSource->text(selection)]); } void BackupAndRestore::fileListUpdate() { qWarning("void BackupAndRestore::fileListUpdate()"); restoreList->clear(); rescanFolder( backupLocations[restoreSource->currentText()] ); } /** * Scans directory for any backup files. Will recursivly go down, * but will not follow symlinks. * @param directory - the directory to look in. */ void BackupAndRestore::rescanFolder(QString directory) { //qDebug(QString("rescanFolder: ") + directory.latin1()); QDir d(directory); if(!d.exists()) return; d.setFilter( QDir::Files | QDir::Hidden | QDir::Dirs); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *file; while ( (file=it.current()) ) { // for each file... // If it is a dir and not .. or . then add it as a tab and go down. if(file->isDir()) { if(file->fileName() != ".." && file->fileName() != ".") { rescanFolder(directory + "/" + file->fileName()); } } else { // If it is a backup file add to list. if(file->fileName().contains(EXTENSION)) (void)new QListViewItem(restoreList, file->fileName()); } ++it; } } /** * Restore a backup file. * Report errors or success */ void BackupAndRestore::restore() { QListViewItem *restoreItem = restoreList->currentItem(); if(!restoreItem) { QMessageBox::critical(this, tr( "Message" ), tr( "Please select something to restore." ),QString( tr( "Ok") ) ); return; } setCaption(tr("Backup and Restore... working...")); QString restoreFile = backupLocations[restoreSource->currentText()]; restoreFile += "/" + restoreItem->text(0); qDebug( restoreFile ); QString commandLine = QString( "tar -C %1 -zxf %2 2> %3" ).arg( QDir::homeDirPath() ) .arg( restoreFile.latin1() ) .arg( tempFileName.latin1() ); qDebug( commandLine ); int r = system( commandLine ); if(r != 0) { QString errorMsg= tr( "Error from System:\n" ) + (QString)strerror( errno ); switch( QMessageBox::critical(this, tr( "Message" ), tr( "Restore Failed." ) + "\n" + errorMsg, QString( tr( "Ok") ), QString( tr( "Details" ) ) ) ) { case 1: qWarning("Details pressed !"); ErrorDialog* pErrDialog = new ErrorDialog( this, NULL, true ); diff --git a/noncore/settings/netsystemtime/mainwindow.cpp b/noncore/settings/netsystemtime/mainwindow.cpp index 7df41d4..c995d6e 100644 --- a/noncore/settings/netsystemtime/mainwindow.cpp +++ b/noncore/settings/netsystemtime/mainwindow.cpp @@ -1,396 +1,396 @@ /* This file is part of the OPIE Project =. .=l. Copyright (c) 2002 OPIE team <opie@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 "timetabwidget.h" #include "formattabwidget.h" #include "settingstabwidget.h" #include "ntptabwidget.h" #include "predicttabwidget.h" #include <qpe/config.h> #include <qpe/datebookdb.h> #include <qpe/qpeapplication.h> #include <qpe/qpedialog.h> #if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) #include <qpe/qcopenvelope_qws.h> #endif #include <qlayout.h> #include <qmessagebox.h> #include <qsocket.h> #include <qstring.h> #include <qtimer.h> MainWindow::MainWindow( QWidget *parent , const char *name, bool modal, WFlags f ) : QDialog( 0x0, 0x0, TRUE, 0 ) { setCaption( tr( "SystemTime" ) ); QVBoxLayout *layout = new QVBoxLayout( this ); layout->setMargin( 2 ); layout->setSpacing( 4 ); // Create main tabbed control mainWidget = new OTabWidget( this ); // Default object pointers to null ntpProcess = 0x0; ntpTab = 0x0; // Add tab widgets mainWidget->addTab( timeTab = new TimeTabWidget( mainWidget ), "netsystemtime/DateTime", tr( "Time" ) ); mainWidget->addTab( formatTab = new FormatTabWidget( mainWidget ), "netsystemtime/formattab", tr( "Format" ) ); mainWidget->addTab( settingsTab = new SettingsTabWidget( mainWidget ), "SettingsIcon", tr( "Settings" ) ); mainWidget->addTab( predictTab = new PredictTabWidget( mainWidget ), "netsystemtime/predicttab", tr( "Predict" ) ); Config config( "ntp" ); config.setGroup( "settings" ); slotDisplayNTPTab( config.readBoolEntry( "displayNtpTab", FALSE ) ); slotDisplayPredictTab( config.readBoolEntry( "displayPredictTab", FALSE ) ); mainWidget->setCurrentTab( tr( "Time" ) ); layout->addWidget( mainWidget ); - connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)), - this, SLOT(slotQCopReceive(const QCString&, const QByteArray&)) ); + connect( qApp, SIGNAL(appMessage(const QCString&,const QByteArray&)), + this, SLOT(slotQCopReceive(const QCString&,const QByteArray&)) ); // Create NTP socket ntpSock = new QSocket( this ); connect( ntpSock, SIGNAL(error(int)),SLOT(slotCheckNtp(int)) ); slotProbeNTPServer(); // Create timer for automatic time lookups ntpTimer = new QTimer( this ); // Connect everything together connect( timeTab, SIGNAL(getNTPTime()), this, SLOT(slotGetNTPTime()) ); - connect( timeTab, SIGNAL(tzChanged(const QString &)), predictTab, SLOT(slotTZChanged(const QString &)) ); + connect( timeTab, SIGNAL(tzChanged(const QString&)), predictTab, SLOT(slotTZChanged(const QString&)) ); connect( timeTab, SIGNAL(getPredictedTime()), predictTab, SLOT(slotSetPredictedTime()) ); - connect( formatTab, SIGNAL(show12HourTime(int)), timeTab, SLOT(slotUse12HourTime( int )) ); - connect( formatTab, SIGNAL(dateFormatChanged(const DateFormat &)), - timeTab, SLOT(slotDateFormatChanged(const DateFormat &)) ); + connect( formatTab, SIGNAL(show12HourTime(int)), timeTab, SLOT(slotUse12HourTime(int)) ); + connect( formatTab, SIGNAL(dateFormatChanged(const DateFormat&)), + timeTab, SLOT(slotDateFormatChanged(const DateFormat&)) ); connect( formatTab, SIGNAL(weekStartChanged(int)), timeTab, SLOT(slotWeekStartChanged(int)) ); connect( settingsTab, SIGNAL(ntpDelayChanged(int)), this, SLOT(slotNTPDelayChanged(int)) ); connect( settingsTab, SIGNAL(displayNTPTab(bool)), this, SLOT(slotDisplayNTPTab(bool)) ); connect( settingsTab, SIGNAL(displayPredictTab(bool)), this, SLOT(slotDisplayPredictTab(bool)) ); - connect( predictTab, SIGNAL(setTime(const QDateTime &)), this, SLOT(slotSetTime(const QDateTime &)) ); + connect( predictTab, SIGNAL(setTime(const QDateTime&)), this, SLOT(slotSetTime(const QDateTime&)) ); // Do initial time server check slotNTPDelayChanged( config.readNumEntry( "ntpRefreshFreq", 1440 ) ); slotCheckNtp( -1 ); // Display app //showMaximized(); (void)new QPEDialogListener(this); } MainWindow::~MainWindow() { if ( ntpProcess ) delete ntpProcess; } void MainWindow::accept() { // Turn off the screensaver (Note: needs to be encased in { } so that it deconstructs and sends) { QCopEnvelope disableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); disableScreenSaver << 0 << 0 << 0; } // Update the systemtime timeTab->saveSettings( TRUE ); // Save format options formatTab->saveSettings( TRUE ); // Save settings options settingsTab->saveSettings(); // Since time has changed quickly load in the DateBookDB to allow the alarm server to get a better // grip on itself (example re-trigger alarms for when we travel back in time). DateBookDB db; // Turn back on the screensaver QCopEnvelope enableScreenSaver( "QPE/System", "setScreenSaverIntervals(int,int,int)" ); enableScreenSaver << -1 << -1 << -1; // Exit app qApp->quit(); } void MainWindow::reject() { // Reset time settings timeTab->saveSettings( FALSE ); // Send notifications but do not save settings formatTab->saveSettings( FALSE ); // Exit app qApp->quit(); } void MainWindow::runNTP() { if ( !ntpDelayElapsed() && ntpInteractive ) { QString msg = tr( "You asked for a delay of %1 minutes, but only %2 minutes elapsed since last lookup.<br>Continue?" ).arg( QString::number( ntpDelay ) ).arg( QString::number( _lookupDiff / 60 ) ); switch ( QMessageBox::warning( this, tr( "Continue?" ), msg, QMessageBox::Yes, QMessageBox::No ) ) { case QMessageBox::Yes: break; case QMessageBox::No: return; default: return; } } QString srv = settingsTab->ntpServer(); // Send information to time server tab if enabled if ( ntpTabEnabled ) { ntpTab->setStartTime( QDateTime::currentDateTime().toString() ); QString output = tr( "Running:\nntpdate " ); output.append( srv ); ntpTab->addNtpOutput( output ); } if ( !ntpProcess ) { ntpProcess = new OProcess(); connect( ntpProcess, SIGNAL(receivedStdout(OProcess*,char*,int)), this, SLOT(slotNtpOutput(OProcess*,char*,int)) ); connect( ntpProcess, SIGNAL(processExited(OProcess*)), this, SLOT(slotNtpFinished(OProcess*)) ); } else ntpProcess->clearArguments(); *ntpProcess << "ntpdate" << srv; bool ret = ntpProcess->start( OProcess::NotifyOnExit, OProcess::AllOutput ); if ( !ret ) { QMessageBox::critical( this, tr( "Error" ), tr( "Error while getting time from network." ) ); if ( ntpTabEnabled ) ntpTab->addNtpOutput( tr( "Error while executing ntpdate" ) ); } } bool MainWindow::ntpDelayElapsed() { // Determine if time elapsed is greater than time delay Config config( "ntp" ); config.setGroup( "lookups" ); _lookupDiff = TimeConversion::toUTC( QDateTime::currentDateTime() ) - config.readNumEntry( "time", 0 ); if ( _lookupDiff < 0 ) return true; return ( _lookupDiff - ( ntpDelay * 60) ) > 0; } void MainWindow::slotSetTime( const QDateTime &dt ) { timeTab->setDateTime( dt ); } void MainWindow::slotQCopReceive( const QCString &msg, const QByteArray & ) { if ( msg == "ntpLookup(QString)" ) { ntpInteractive = false; runNTP(); } if ( msg == "setPredictedTime(QString)" ) { //setPredictTime(); } } void MainWindow::slotDisplayNTPTab( bool display ) { ntpTabEnabled = display; // Create widget if it hasn't needed if ( display && !ntpTab ) { ntpTab = new NTPTabWidget( mainWidget ); connect( ntpTab, SIGNAL(getNTPTime()), this, SLOT(slotGetNTPTime()) ); } // Display/hide tab display ? mainWidget->addTab( ntpTab, "netsystemtime/ntptab", tr( "Time Server" ) ) : mainWidget->removePage( ntpTab ); } void MainWindow::slotDisplayPredictTab( bool display ) { predictTabEnabled = display; // Create widget if it hasn't needed if ( display && !predictTab ) { } // Display/hide tab display ? mainWidget->addTab( predictTab, "netsystemtime/predicttab", tr( "Predict" ) ) : mainWidget->removePage( predictTab ); } void MainWindow::slotGetNTPTime() { ntpInteractive = TRUE; runNTP(); } void MainWindow::slotTimerGetNTPTime() { ntpInteractive = FALSE; runNTP(); } void MainWindow::slotProbeNTPServer() { ntpSock->connectToHost( settingsTab->ntpServer(), 123 ); } void MainWindow::slotNtpOutput( OProcess *, char *buffer, int buflen ) { QString output = QString( buffer ).left( buflen ); ntpOutput.append( output ); if ( ntpTabEnabled ) ntpTab->addNtpOutput( output ); } void MainWindow::slotNtpFinished( OProcess *p ) { QString output; QDateTime dt = QDateTime::currentDateTime(); // Verify run was successful if ( p->exitStatus() != 0 || !p->normalExit() ) { if ( isVisible() && ntpInteractive ) { output = tr( "Error while getting time from\n server: " ); output.append( settingsTab->ntpServer() ); QMessageBox::critical(this, tr( "Error" ), output ); } // slotCheckNtp(-1); return; } // Set controls on time tab to new time value timeTab->setDateTime( dt ); // Write out lookup information Config config( "ntp" ); config.setGroup( "lookups" ); int lastLookup = config.readNumEntry( "time", 0 ); int lookupCount = config.readNumEntry( "count", 0 ); bool lastNtp = config.readBoolEntry( "lastNtp", FALSE ); int time = TimeConversion::toUTC( QDateTime::currentDateTime() ); config.writeEntry( "time", time ); // Calculate new time/time shift QString _offset = "offset"; QString _sec = "sec"; QRegExp _reOffset = QRegExp( _offset ); QRegExp _reEndOffset = QRegExp( _sec ); int posOffset = _reOffset.match( ntpOutput ); int posEndOffset = _reEndOffset.match( ntpOutput, posOffset ); posOffset += _offset.length() + 1; QString diff = ntpOutput.mid( posOffset, posEndOffset - posOffset - 1 ); float timeShift = diff.toFloat(); if ( timeShift == 0.0 ) return; int secsSinceLast = time - lastLookup; output = tr( "%1 seconds").arg(QString::number( timeShift )); // Display information on time server tab if ( ntpTabEnabled ) { ntpTab->setTimeShift( output ); ntpTab->setNewTime( dt.toString() ); } if ( lastNtp && lastLookup > 0 && secsSinceLast > 60 * ntpDelay ) { QString grpname = QString( "lookup_" ).append( QString::number( lookupCount ) ); config.setGroup( grpname ); lookupCount++; predictTab->setShiftPerSec( timeShift / secsSinceLast ); config.writeEntry( "secsSinceLast", secsSinceLast ); config.writeEntry( "timeShift", QString::number( timeShift ) ); config.setGroup( "lookups" ); config.writeEntry( "count", lookupCount ); config.writeEntry( "lastNtp", TRUE ); } } void MainWindow::slotNTPDelayChanged( int delay ) { ntpTimer->changeInterval( delay * 1000 * 60 ); ntpDelay = delay; } void MainWindow::slotCheckNtp( int i ) { if ( i == 0 ) { if ( ntpDelayElapsed() ) { runNTP(); disconnect( ntpTimer, SIGNAL(timeout()), this, SLOT(slotProbeNTPServer()) ); connect( ntpTimer, SIGNAL(timeout()), SLOT(slotTimerGetNTPTime()) ); } else { disconnect(ntpTimer, SIGNAL(timeout()), this, SLOT(slotTimerGetNTPTime()) ); connect(ntpTimer, SIGNAL(timeout()), SLOT(slotProbeNTPServer()) ); } } else { predictTab->slotPredictTime(); if ( i > 0 ) { QString output = tr( "Could not connect to server " ); output.append( settingsTab->ntpServer() ); ntpOutput.append( output ); if ( ntpTabEnabled ) ntpTab->addNtpOutput( output ); } connect( ntpTimer, SIGNAL(timeout()), SLOT(slotProbeNTPServer()) ); } } diff --git a/noncore/settings/netsystemtime/settingstabwidget.cpp b/noncore/settings/netsystemtime/settingstabwidget.cpp index 2a7e28d..ad80e05 100644 --- a/noncore/settings/netsystemtime/settingstabwidget.cpp +++ b/noncore/settings/netsystemtime/settingstabwidget.cpp @@ -1,159 +1,159 @@ /* This file is part of the OPIE Project =. .=l. Copyright (c) 2002 OPIE team <opie@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 "settingstabwidget.h" #include <qpe/config.h> #include <qpe/qpeapplication.h> #include <qcheckbox.h> #include <qcombobox.h> #include <qlabel.h> #include <qlayout.h> #include <qscrollview.h> #include <qspinbox.h> SettingsTabWidget::SettingsTabWidget( QWidget *parent ) : QWidget( parent, 0x0, 0 ) { QVBoxLayout *tmpvb = new QVBoxLayout( this ); QScrollView *sv = new QScrollView( this ); tmpvb->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->setMargin( 2 ); layout->setSpacing( 4 ); // Time server selector layout->addWidget( new QLabel( tr( "Time server" ), container ), 0, 0 ); cbTimeServer = new QComboBox( TRUE, container ); layout->addMultiCellWidget( cbTimeServer, 1, 1, 0, 1 ); // Lookup delay selector layout->addWidget( new QLabel( tr( "minutes between time updates" ), container ), 2, 1 ); sbNtpDelay = new QSpinBox( 1, 9999999, 1, container ); sbNtpDelay->setWrapping( TRUE ); sbNtpDelay->setMaximumWidth( 50 ); connect( sbNtpDelay, SIGNAL(valueChanged(int)), this, SIGNAL(ntpDelayChanged(int)) ); layout->addWidget( sbNtpDelay, 2, 0 ); // Prediction delay selector layout->addWidget( new QLabel( tr( "minutes between prediction updates" ), container ), 3, 1 ); sbPredictDelay = new QSpinBox( 42, 9999999, 1, container ); sbPredictDelay->setWrapping( TRUE ); sbPredictDelay->setMaximumWidth( 50 ); layout->addWidget( sbPredictDelay, 3, 0 ); // Space filler layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ), 4, 0 ); // Display time server information selector chNtpTab = new QCheckBox( tr( "Display time server information" ), container ); - connect( chNtpTab, SIGNAL( toggled( bool ) ), this, SIGNAL( displayNTPTab( bool ) ) ); + connect( chNtpTab, SIGNAL( toggled(bool) ), this, SIGNAL( displayNTPTab(bool) ) ); layout->addMultiCellWidget( chNtpTab, 5, 5, 0, 1 ); // Display time prediction information selector chPredictTab = new QCheckBox( tr( "Display time prediction information" ), container ); - connect( chPredictTab, SIGNAL( toggled( bool ) ), this, SIGNAL( displayPredictTab( bool ) ) ); + connect( chPredictTab, SIGNAL( toggled(bool) ), this, SIGNAL( displayPredictTab(bool) ) ); layout->addMultiCellWidget( chPredictTab, 6, 6, 0, 1 ); // Space filler layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ), 7, 0 ); // Initialize values QString ntpSrvsFile = QPEApplication::qpeDir(); ntpSrvsFile.append( "etc/ntpservers" ); Config ntpSrvs( ntpSrvsFile, Config::File ); ntpSrvs.setGroup( "servers" ); int srvCount = ntpSrvs.readNumEntry( "count", 0 ); for ( int i = 0; i < srvCount; i++ ) { ntpSrvs.setGroup( QString::number( i ) ); cbTimeServer->insertItem( ntpSrvs.readEntry( "name" ) ); } if ( srvCount==0 ) cbTimeServer->insertItem( "time.fu-berlin.de" ); Config config( "ntp" ); config.setGroup( "settings" ); sbPredictDelay->setValue( config.readNumEntry( "minLookupDiff", 720 ) ); sbNtpDelay->setValue( config.readNumEntry( "ntpRefreshFreq", 1440 ) ); cbTimeServer->setCurrentItem( config.readNumEntry( "ntpServer", 0 ) ); chNtpTab->setChecked( config.readBoolEntry( "displayNtpTab", FALSE ) ); chPredictTab->setChecked( config.readBoolEntry( "displayPredictTab", FALSE ) ); } SettingsTabWidget::~SettingsTabWidget() { } void SettingsTabWidget::saveSettings() { int srvCount = cbTimeServer->count(); bool serversChanged = TRUE; int curSrv = cbTimeServer->currentItem(); QString edit = cbTimeServer->currentText(); for ( int i = 0; i < srvCount; i++ ) { if ( edit == cbTimeServer->text( i ) ) serversChanged = FALSE; } if ( serversChanged ) { QString ntpSrvsFile = QPEApplication::qpeDir(); ntpSrvsFile.append( "etc/ntpservers" ); Config ntpSrvs( ntpSrvsFile, Config::File ); ntpSrvs.setGroup( "servers" ); ntpSrvs.writeEntry( "count", ++srvCount ); ntpSrvs.setGroup( "0" ); ntpSrvs.writeEntry( "name", edit ); curSrv = 0; for ( int i = 1; i < srvCount; i++ ) { // qDebug( "ntpSrvs[%i/%i]=%s", i, srvCount, cbTimeServer->text( i ).latin1() ); ntpSrvs.setGroup( QString::number( i ) ); ntpSrvs.writeEntry( "name", cbTimeServer->text( i-1 ) ); } } Config config( "ntp", Config::User ); config.setGroup( "settings" ); config.writeEntry( "ntpServer", curSrv ); config.writeEntry( "minLookupDiff", sbPredictDelay->value() ); config.writeEntry( "ntpRefreshFreq", sbNtpDelay->value() ); config.writeEntry( "displayNtpTab", chNtpTab->isChecked() ); config.writeEntry( "displayPredictTab", chPredictTab->isChecked() ); } QString SettingsTabWidget::ntpServer() { return cbTimeServer->currentText(); } diff --git a/noncore/settings/netsystemtime/timetabwidget.cpp b/noncore/settings/netsystemtime/timetabwidget.cpp index 6f24462..1ea460e 100644 --- a/noncore/settings/netsystemtime/timetabwidget.cpp +++ b/noncore/settings/netsystemtime/timetabwidget.cpp @@ -1,292 +1,292 @@ /* This file is part of the OPIE Project =. .=l. Copyright (c) 2002 OPIE team <opie@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 "timetabwidget.h" #include <qpe/config.h> #include <qpe/datebookmonth.h> #include <qpe/global.h> #include <qpe/resource.h> #include <qpe/tzselect.h> #if ( defined Q_WS_QWS || defined(_WS_QWS_) ) && !defined(QT_NO_COP) #include <qpe/qcopenvelope_qws.h> #endif #include <qcombobox.h> #include <qdatetime.h> #include <qframe.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> #include <qscrollview.h> #include <qspinbox.h> #include <stdlib.h> #include <sys/time.h> static const int ValueAM = 0; static const int ValuePM = 1; TimeTabWidget::TimeTabWidget( QWidget *parent ) : QWidget( parent, 0x0, 0 ) { // Synchronize HW clock to systemtime // This app will update systemtime // - if Cancel is clicked, will reset systemtime to HW clock's time // - if Ok is clicked, will leave systemtime as is system("/sbin/hwclock --systohc --utc"); QVBoxLayout *tmpvb = new QVBoxLayout( this ); QScrollView *sv = new QScrollView( this ); tmpvb->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->setMargin( 2 ); layout->setSpacing( 4 ); // Hours layout->addMultiCellWidget( new QLabel( tr( "Hour" ), container ), 1, 1, 0, 1 ); sbHour = new QSpinBox( container ); sbHour->setWrapping( TRUE ); layout->addMultiCellWidget( sbHour, 2, 2, 0, 1 ); // Minutes layout->addMultiCellWidget( new QLabel( tr( "Minute" ), container ), 1, 1, 2, 3 ); sbMin = new QSpinBox( container ); sbMin->setWrapping( TRUE ); sbMin->setMinValue( 0 ); sbMin->setMaxValue( 59 ); layout->addMultiCellWidget( sbMin, 2, 2, 2, 3 ); // AM/PM cbAmpm = new QComboBox( container ); cbAmpm->insertItem( tr( "AM" ), ValueAM ); cbAmpm->insertItem( tr( "PM" ), ValuePM ); layout->addMultiCellWidget( cbAmpm, 2, 2, 4, 5 ); // Date layout->addWidget( new QLabel( tr( "Date" ), container ), 4, 0 ); btnDate = new DateButton( TRUE, container ); layout->addMultiCellWidget( btnDate, 4, 4, 1, 5 ); // Timezone layout->addMultiCellWidget( new QLabel( tr( "Time zone" ), container ), 6, 6, 0, 1 ); selTimeZone = new TimeZoneSelector( container ); - connect( selTimeZone, SIGNAL(signalNewTz(const QString &)), this, SLOT(slotTZChanged(const QString &)) ); + connect( selTimeZone, SIGNAL(signalNewTz(const QString&)), this, SLOT(slotTZChanged(const QString&)) ); layout->addMultiCellWidget( selTimeZone, 6, 6, 2, 5 ); // Space filler layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ), 7, 0 ); // Set NTP time button QPushButton *pb = new QPushButton( Resource::loadPixmap( "netsystemtime/ntptab" ), tr( "Get time from the network" ), container ); connect( pb, SIGNAL(clicked()), this, SIGNAL(getNTPTime()) ); layout->addMultiCellWidget( pb, 8, 8, 0, 5 ); // Set predicted time button pb = new QPushButton( Resource::loadPixmap( "netsystemtime/predicttab" ), tr( "Set predicted time" ), container ); connect( pb, SIGNAL(clicked()), this, SIGNAL(getPredictedTime()) ); layout->addMultiCellWidget( pb, 9, 9, 0, 5 ); // Space filler at bottom of widget layout->addItem( new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ), 10, 0 ); // Initialize values Config config( "locale" ); config.setGroup( "Location" ); selTimeZone->setCurrentZone( config.readEntry( "Timezone", "America/New_York" ) ); use12HourTime = FALSE; setDateTime( QDateTime::currentDateTime() ); } TimeTabWidget::~TimeTabWidget() { } void TimeTabWidget::saveSettings( bool commit ) { if ( commit ) { // Set timezone and announce to world QString tz = selTimeZone->currentZone(); Config config("locale"); config.setGroup( "Location" ); config.writeEntry( "Timezone", tz ); setenv( "TZ", tz, 1 ); QCopEnvelope setTimeZone( "QPE/System", "timeChange(QString)" ); setTimeZone << tz; // If controls have a valid date & time, update systemtime int hour = sbHour->value(); if ( use12HourTime && cbAmpm->currentItem() == ValuePM ) hour += 12; QDateTime dt( btnDate->date(), QTime ( hour, sbMin->value(), QTime::currentTime().second() ) ); setSystemTime( dt ); } else { // Reset systemtime to hardware clock (i.e. undo any changes made by this app) system("/sbin/hwclock --hctosys --utc"); } } void TimeTabWidget::setDateTime( const QDateTime &dt ) { // Set time QTime t = dt.time(); if( use12HourTime ) { int show_hour = t.hour(); if ( t.hour() >= 12 ) { show_hour -= 12; cbAmpm->setCurrentItem( ValuePM ); } else { cbAmpm->setCurrentItem( ValueAM ); } if ( show_hour == 0 ) show_hour = 12; sbHour->setValue( show_hour ); } else { sbHour->setValue( t.hour() ); } sbMin->setValue( t.minute() ); // Set date btnDate->setDate( dt.date() ); } void TimeTabWidget::setSystemTime( const QDateTime &dt ) { // Set system clock if ( dt.isValid() ) { struct timeval myTv; int t = TimeConversion::toUTC( dt ); myTv.tv_sec = t; myTv.tv_usec = 0; if ( myTv.tv_sec != -1 ) ::settimeofday( &myTv, 0 ); } } void TimeTabWidget::slotUse12HourTime( int i ) { use12HourTime = (i == 1); cbAmpm->setEnabled( use12HourTime ); int show_hour = sbHour->value(); if ( use12HourTime ) { sbHour->setMinValue( 1 ); sbHour->setMaxValue( 12 ); if ( show_hour >= 12 ) { show_hour -= 12; cbAmpm->setCurrentItem( ValuePM ); } else { cbAmpm->setCurrentItem( ValueAM ); } if ( show_hour == 0 ) show_hour = 12; } else { sbHour->setMinValue( 0 ); sbHour->setMaxValue( 23 ); if ( cbAmpm->currentItem() == ValuePM ) { show_hour += 12; if ( show_hour == 24 ) show_hour = 0; } } sbHour->setValue( show_hour ); } void TimeTabWidget::slotDateFormatChanged( const DateFormat &df ) { btnDate->setDateFormat( df ); } void TimeTabWidget::slotWeekStartChanged( int monday ) { btnDate->setWeekStartsMonday( monday ); } void TimeTabWidget::slotTZChanged( const QString &newtz ) { // If controls have a valid date & time, update systemtime int hour = sbHour->value(); if ( use12HourTime && cbAmpm->currentItem() == ValuePM ) hour += 12; QDateTime dt( btnDate->date(), QTime ( hour, sbMin->value(), QTime::currentTime().second() ) ); setSystemTime( dt ); QCopEnvelope setTimeZone( "QPE/System", "timeChange(QString)" ); setTimeZone << newtz; // Set system timezone QString currtz = getenv( "TZ" ); setenv( "TZ", newtz, 1 ); // Get new date/time hour = sbHour->value(); if ( use12HourTime && cbAmpm->currentItem() == ValuePM ) hour += 12; dt = QDateTime::currentDateTime(); // Reset system timezone if ( !currtz.isNull() ) { setenv( "TZ", currtz, 1 ); } // Set controls to new time setDateTime( dt ); emit tzChanged( newtz ); } diff --git a/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp b/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp index 698dfd3..ff65424 100644 --- a/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp +++ b/noncore/settings/networksettings/interfaces/interfaceinformationimp.cpp @@ -1,104 +1,104 @@ #include "interfaceinformationimp.h" #include "interfaceadvanced.h" /* OPIE */ #include <qpe/config.h> #include <qpe/qpeapplication.h> /* QT */ #include <qcheckbox.h> #include <qpushbutton.h> #include <qlabel.h> #include <qgroupbox.h> #include <qmessagebox.h> #ifdef QWS #else #define showMaximized show #endif /** * Constructor for the InterfaceInformationImp class. This class pretty much * just display's information about the interface that is passed to it. */ InterfaceInformationImp::InterfaceInformationImp(QWidget *parent, const char *name, Interface *i, WFlags f):InterfaceInformation(parent, name, f), interface(i) { - connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *))); - connect(i, SIGNAL(updateMessage(const QString &)), this, SLOT(showMessage(const QString &))); + connect(i, SIGNAL(updateInterface(Interface*)), this, SLOT(updateInterface(Interface*))); + connect(i, SIGNAL(updateMessage(const QString&)), this, SLOT(showMessage(const QString&))); updateInterface(interface); connect(startButton, SIGNAL(clicked()), interface, SLOT(start())); connect(stopButton, SIGNAL(clicked()), interface, SLOT(stop())); connect(restartButton, SIGNAL(clicked()), interface, SLOT(restart())); connect(refreshButton, SIGNAL(clicked()), interface, SLOT(refresh())); connect(advancedButton, SIGNAL(clicked()), this, SLOT(advanced())); Config cfg("networksettings", Config::User); cfg.setGroup("interface"); CheckBoxSilent->setChecked( cfg.readBoolEntry("silent", false) ); } InterfaceInformationImp::~InterfaceInformationImp() { Config cfg("networksettings", Config::User); cfg.setGroup("interface"); cfg.writeEntry("silent", CheckBoxSilent->isChecked() ); } /** * Update the interface information and buttons. * @param Intarface *i the interface to update (should be the one we already * know about). */ void InterfaceInformationImp::updateInterface(Interface *) { if(interface->getStatus()) { startButton->setEnabled(false); stopButton->setEnabled(true); restartButton->setEnabled(true); } else { startButton->setEnabled(true); stopButton->setEnabled(false); restartButton->setEnabled(false); } macAddressLabel->setText(interface->getMacAddress()); ipAddressLabel->setText(interface->getIp()); subnetMaskLabel->setText(interface->getSubnetMask()); broadcastLabel->setText(interface->getBroadcast()); } /** * Create the advanced widget. Fill it with the current interface's information. * Display it. */ void InterfaceInformationImp::advanced() { InterfaceAdvanced *a = new InterfaceAdvanced(this, "InterfaceAdvanced", Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog); a->interfaceName->setText(interface->getInterfaceName()); a->macAddressLabel->setText(interface->getMacAddress()); a->ipAddressLabel->setText(interface->getIp()); a->subnetMaskLabel->setText(interface->getSubnetMask()); a->broadcastLabel->setText(interface->getBroadcast()); a->dhcpServerLabel->setText(interface->getDhcpServerIp()); a->leaseObtainedLabel->setText(interface->getLeaseObtained()); a->leaseExpiresLabel->setText(interface->getLeaseExpires()); a->dhcpInformation->setEnabled(interface->isDhcp()); QPEApplication::showWidget( a ); } /** * Messages from the interface if start/stop went as planned. * Purly for user feedback. * @param message the message to display. */ void InterfaceInformationImp::showMessage(const QString &message) { if (CheckBoxSilent->isChecked()) return; QMessageBox::information(this, "Message", message, QMessageBox::Ok); } // infoimp.cpp diff --git a/noncore/settings/networksettings/mainwindowimp.cpp b/noncore/settings/networksettings/mainwindowimp.cpp index b0a1dd9..1e16b97 100644 --- a/noncore/settings/networksettings/mainwindowimp.cpp +++ b/noncore/settings/networksettings/mainwindowimp.cpp @@ -1,748 +1,748 @@ #include "mainwindowimp.h" #include "addconnectionimp.h" #include "interfaceinformationimp.h" #include "interfacesetupimp.h" #include "interfaces.h" #include "module.h" /* OPIE */ #include <qpe/qcopenvelope_qws.h> #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <qpe/qlibrary.h> #include <qpe/resource.h> /* QT */ #include <qpushbutton.h> #include <qlistbox.h> #include <qlineedit.h> #include <qlistview.h> #include <qheader.h> #include <qlabel.h> #include <qtabwidget.h> // in order to disable the profiles tab #include <qmessagebox.h> #if QT_VERSION < 300 #include <qlist.h> #else #include <qptrlist.h> #endif #include <qdir.h> #include <qfile.h> #include <qtextstream.h> #include <qregexp.h> /* STD */ #include <net/if.h> #include <sys/ioctl.h> #include <sys/socket.h> #define DEFAULT_SCHEME "/var/lib/pcmcia/scheme" #define _PROCNETDEV "/proc/net/dev" MainWindowImp::MainWindowImp(QWidget *parent, const char *name, WFlags) : MainWindow(parent, name, Qt::WStyle_ContextHelp), advancedUserMode(true), scheme(DEFAULT_SCHEME) { connect(addConnectionButton, SIGNAL(clicked()), this, SLOT(addClicked())); connect(removeConnectionButton, SIGNAL(clicked()), this, SLOT(removeClicked())); connect(informationConnectionButton, SIGNAL(clicked()), this, SLOT(informationClicked())); connect(configureConnectionButton, SIGNAL(clicked()), this, SLOT(configureClicked())); connect(newProfileButton, SIGNAL(clicked()), this, SLOT(addProfile())); connect(removeProfileButton, SIGNAL(clicked()), this, SLOT(removeProfile())); connect(setCurrentProfileButton, SIGNAL(clicked()), this, SLOT(changeProfile())); connect(newProfile, SIGNAL(textChanged(const QString&)), this, SLOT(newProfileChanged(const QString&))); //FIXME: disable profiles for the moment: tabWidget->setTabEnabled( tab, false ); // Load connections. // /usr/local/kde/lib/libinterfaces.la #ifdef QWS loadModules(QPEApplication::qpeDir() + "plugins/networksettings"); #else loader = KLibLoader::self(); loadModules(QString("/usr/")+KStandardDirs::kde_default("lib")); #endif getAllInterfaces(); Interfaces i; QStringList list = i.getInterfaceList(); QMap<QString, Interface*>::Iterator it; for ( QStringList::Iterator ni = list.begin(); ni != list.end(); ++ni ) { /* * we skipped it in getAllInterfaces now * we need to ignore it as well */ if (m_handledIfaces.contains( *ni) ) { qDebug("Not up iface handled by module"); continue; } bool found = false; for( it = interfaceNames.begin(); it != interfaceNames.end(); ++it ) { if(it.key() == (*ni)) found = true; } if(!found) { if(!(*ni).contains("_")) { Interface *i = new Interface(this, *ni, false); i->setAttached(false); i->setHardwareName(tr("Disconnected")); interfaceNames.insert(i->getInterfaceName(), i); updateInterface(i); - connect(i, SIGNAL(updateInterface(Interface *)), this, SLOT(updateInterface(Interface *))); + connect(i, SIGNAL(updateInterface(Interface*)), this, SLOT(updateInterface(Interface*))); } } } //getInterfaceList(); connectionList->header()->hide(); Config cfg("NetworkSetup"); profiles = QStringList::split(" ", cfg.readEntry("Profiles", "All")); for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) profilesList->insertItem((*it)); currentProfileLabel->setText(cfg.readEntry("CurrentProfile", "All")); advancedUserMode = cfg.readBoolEntry("AdvancedUserMode", false); scheme = cfg.readEntry("SchemeFile", DEFAULT_SCHEME); QFile file(scheme); if ( file.open(IO_ReadOnly) ) { // file opened successfully QTextStream stream( &file ); // use a text stream while ( !stream.eof() ) { // until end of file... QString line = stream.readLine(); // line of text excluding '\n' if(line.contains("SCHEME")) { line = line.mid(7, line.length()); currentProfileLabel->setText(line); break; } } file.close(); } makeChannel(); } /** * Deconstructor. Save profiles. Delete loaded libraries. */ MainWindowImp::~MainWindowImp() { // Save profiles. Config cfg("NetworkSetup"); cfg.setGroup("General"); cfg.writeEntry("Profiles", profiles.join(" ")); // Delete all interfaces that don't have owners. QMap<Interface*, QListViewItem*>::Iterator iIt; for( iIt = items.begin(); iIt != items.end(); ++iIt ) { if(iIt.key()->getModuleOwner() == NULL) delete iIt.key(); } #ifdef QWS // Delete Modules and Libraries QMap<Module*, QLibrary*>::Iterator it; for( it = libraries.begin(); it != libraries.end(); ++it ) { delete it.key(); // I wonder why I can't delete the libraries // What fucking shit this is. //delete it.data(); } #else // klibloader automaticly deletes the libraries for us... #endif } /** * Query the kernel for all of the interfaces. */ void MainWindowImp::getAllInterfaces() { int sockfd = socket(PF_INET, SOCK_DGRAM, 0); if(sockfd == -1) return; struct ifreq ifr; QStringList ifaces; QFile procFile(QString(_PROCNETDEV)); int result; Interface *i; if (! procFile.exists()) { struct ifreq ifrs[100]; struct ifconf ifc; ifc.ifc_len = sizeof(ifrs); ifc.ifc_req = ifrs; result = ioctl(sockfd, SIOCGIFCONF, &ifc); for (unsigned int i = 0; i < ifc.ifc_len / sizeof(struct ifreq); i++) { struct ifreq *pifr = &ifrs[i]; ifaces += pifr->ifr_name; } } else { procFile.open(IO_ReadOnly); QString line; QTextStream procTs(&procFile); int loc = -1; procTs.readLine(); // eat a line procTs.readLine(); // eat a line while((line = procTs.readLine().simplifyWhiteSpace()) != QString::null) { if((loc = line.find(":")) != -1) { ifaces += line.left(loc); } } } for (QStringList::Iterator it = ifaces.begin(); it != ifaces.end(); ++it) { int flags = 0; if ( m_handledIfaces.contains( (*it) ) ) { qDebug(" %s is handled by a module", (*it).latin1() ); continue; } // int family; i = NULL; strcpy(ifr.ifr_name, (*it).latin1()); struct ifreq ifcopy; ifcopy = ifr; result = ioctl(sockfd, SIOCGIFFLAGS, &ifcopy); flags = ifcopy.ifr_flags; i = new Interface(this, ifr.ifr_name, false); i->setAttached(true); if ((flags & IFF_UP) == IFF_UP) i->setStatus(true); else i->setStatus(false); if ((flags & IFF_BROADCAST) == IFF_BROADCAST) i->setHardwareName("Ethernet"); else if ((flags & IFF_POINTOPOINT) == IFF_POINTOPOINT) i->setHardwareName("Point to Point"); else if ((flags & IFF_MULTICAST) == IFF_MULTICAST) i->setHardwareName("Multicast"); else if ((flags & IFF_LOOPBACK) == IFF_LOOPBACK) i->setHardwareName("Loopback"); else i->setHardwareName("Unknown"); qWarning("Adding interface %s to interfaceNames\n", ifr.ifr_name); interfaceNames.insert(i->getInterfaceName(), i); updateInterface(i); - connect(i, SIGNAL(updateInterface(Interface *)), - this, SLOT(updateInterface(Interface *))); + connect(i, SIGNAL(updateInterface(Interface*)), + this, SLOT(updateInterface(Interface*))); } // now lets ask the plugins too ;) QMap<Module*, QLibrary*>::Iterator it; QList<Interface> ilist; for( it = libraries.begin(); it != libraries.end(); ++it ) { if(it.key()) { ilist = it.key()->getInterfaces(); for( i = ilist.first(); i != 0; i = ilist.next() ) { qWarning("Adding interface %s to interfaceNames\n", i->getInterfaceName().latin1() ); interfaceNames.insert(i->getInterfaceName(), i); updateInterface(i); - connect(i, SIGNAL(updateInterface(Interface *)), - this, SLOT(updateInterface(Interface *))); + connect(i, SIGNAL(updateInterface(Interface*)), + this, SLOT(updateInterface(Interface*))); } } } } /** * Load all modules that are found in the path * @param path a directory that is scaned for any plugins that can be loaded * and attempts to load them */ void MainWindowImp::loadModules(const QString &path) { #ifdef DEBUG qDebug("MainWindowImp::loadModules: %s", path.latin1()); #endif QDir d(path); if(!d.exists()) return; // Don't want sym links d.setFilter( QDir::Files | QDir::NoSymLinks ); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; while ( (fi=it.current()) ) { #ifdef QWS if(fi->fileName().contains(".so")) { #else if(fi->fileName().contains(".so") && fi->fileName().contains("networksettings_")) { #endif loadPlugin(path + "/" + fi->fileName()); qDebug("loaded plugin: >%s< ",QString(path + "/" + fi->fileName()).latin1()); } ++it; } } /** * Attempt to load a function and resolve a function. * @param pluginFileName - the name of the file in which to attempt to load * @param resolveString - function pointer to resolve * @return pointer to the function with name resolveString or NULL */ Module* MainWindowImp::loadPlugin(const QString &pluginFileName, const QString &resolveString) { #ifdef DEBUG qDebug("MainWindowImp::loadPlugin: %s: resolving %s", pluginFileName.latin1(), resolveString.latin1()); #endif #ifdef QWS QLibrary *lib = new QLibrary(pluginFileName); void *functionPointer = lib->resolve(resolveString); if( !functionPointer ) { #ifdef DEBUG qDebug("MainWindowImp::loadPlugin: Warning: %s is not a plugin", pluginFileName.latin1()); #endif delete lib; return NULL; } // Try to get an object. Module *object = ((Module* (*)()) functionPointer)(); if(object == NULL) { #ifdef DEBUG qDebug("MainWindowImp: Couldn't create object, but did load library!"); #endif delete lib; return NULL; } m_handledIfaces += object->handledInterfaceNames(); // Store for deletion later libraries.insert(object, lib); return object; #else QLibrary *lib = loader->library(pluginFileName); if( !lib || !lib->hasSymbol(resolveString) ) { qDebug(QString("MainWindowImp::loadPlugin: File: %1 is not a plugin, but though was.").arg(pluginFileName).latin1()); return NULL; } // Try to get an object. Module *object = ((Module* (*)()) lib->symbol(resolveString))(); if(object == NULL) { #ifdef DEBUG qDebug("MainWindowImp: Couldn't create object, but did load library!"); #endif return NULL; } #ifdef DEBUG qDebug("MainWindowImp::loadPlugin:: Found object, storing."); #endif // Store for deletion later libraries.insert(object, lib); return object; #endif } /** * The Add button was clicked. Bring up the add dialog and if OK is hit * load the plugin and append it to the list */ void MainWindowImp::addClicked() { QMap<Module*, QLibrary*>::Iterator it; QMap<QString, QString> list; QMap<QString, Module*> newInterfaceOwners; for( it = libraries.begin(); it != libraries.end(); ++it ) { if(it.key()) { (it.key())->possibleNewInterfaces(list); } } // See if the list has anything that we can add. if(list.count() == 0) { QMessageBox::information(this, "Sorry", "Nothing to add.", QMessageBox::Ok); return; } AddConnectionImp addNewConnection(this, "AddConnectionImp", true); addNewConnection.addConnections(list); if( QDialog::Accepted == QPEApplication::execDialog( &addNewConnection ) ) { QListViewItem *item = addNewConnection.registeredServicesList->currentItem(); if(!item) return; for( it = libraries.begin(); it != libraries.end(); ++it ) { if(it.key()) { Interface *i = (it.key())->addNewInterface(item->text(0)); if(i) { qDebug("iface name %s",i->getInterfaceName().latin1()); interfaceNames.insert(i->getInterfaceName(), i); updateInterface(i); } } } } } /** * Prompt the user to see if they really want to do this. * If they do then remove from the list and unload. */ void MainWindowImp::removeClicked() { QListViewItem *item = connectionList->currentItem(); if(!item) { QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); return; } Interface *i = interfaceItems[item]; if(i->getModuleOwner() == NULL) { QMessageBox::information(this, "Can't remove interface.", "Interface is built in.", QMessageBox::Ok); } else { if(!i->getModuleOwner()->remove(i)) QMessageBox::information(this, tr("Error"), tr("Unable to remove."), QMessageBox::Ok); else { delete item; // QMessageBox::information(this, "Success", "Interface was removed.", QMessageBox::Ok); } } } /** * Pull up the configure about the currently selected interface. * Report an error if no interface is selected. * If the interface has a module owner then request its configure. */ void MainWindowImp::configureClicked() { QListViewItem *item = connectionList->currentItem(); if(!item) { QMessageBox::information(this, tr("Sorry"),tr("Please select an interface first."), QMessageBox::Ok); return; } QString currentProfileText = currentProfileLabel->text(); if(currentProfileText.upper() == "ALL"); currentProfileText = ""; Interface *i = interfaceItems[item]; if(i->getModuleOwner()) { QWidget *moduleConfigure = i->getModuleOwner()->configure(i); if(moduleConfigure != NULL) { i->getModuleOwner()->setProfile(currentProfileText); QPEApplication::showWidget( moduleConfigure ); return; } } InterfaceSetupImpDialog *configure = new InterfaceSetupImpDialog(this, "InterfaceSetupImp", i, true, Qt::WDestructiveClose | Qt::WStyle_ContextHelp ); configure->setProfile(currentProfileText); QPEApplication::showDialog( configure ); } /** * Pull up the information about the currently selected interface. * Report an error if no interface is selected. * If the interface has a module owner then request its configure. */ void MainWindowImp::informationClicked() { QListViewItem *item = connectionList->currentItem(); if(!item) { QMessageBox::information(this, "Sorry","Please select an interface First.", QMessageBox::Ok); return; } Interface *i = interfaceItems[item]; // if(!i->isAttached()){ // QMessageBox::information(this, "Sorry","No information about\na disconnected interface.", QMessageBox::Ok); // return; // } if(i->getModuleOwner()) { QWidget *moduleInformation = i->getModuleOwner()->information(i); if(moduleInformation != NULL) { QPEApplication::showWidget( moduleInformation ); #ifdef DEBUG qDebug("MainWindowImp::informationClicked:: Module owner has created, we showed."); #endif return; } } InterfaceInformationImp *information = new InterfaceInformationImp(this, "InterfaceSetupImp", i, Qt::WType_Modal | Qt::WDestructiveClose | Qt::WStyle_Dialog | Qt::WStyle_ContextHelp); QPEApplication::showWidget( information ); } /** * Update this interface. If no QListViewItem exists create one. * @param Interface* pointer to the interface that needs to be updated. */ void MainWindowImp::updateInterface(Interface *i) { if(!advancedUserMode) { if(i->getInterfaceName() == "lo") return; } QListViewItem *item = NULL; // Find the interface, making it if needed. if(items.find(i) == items.end()) { item = new QListViewItem(connectionList, "", "", ""); // See if you can't find a module owner for this interface QMap<Module*, QLibrary*>::Iterator it; for( it = libraries.begin(); it != libraries.end(); ++it ) { if(it.key()->isOwner(i)) i->setModuleOwner(it.key()); } items.insert(i, item); interfaceItems.insert(item, i); } else item = items[i]; // Update the icons and information #ifdef QWS item->setPixmap(0, (Resource::loadPixmap(i->getStatus() ? "up": "down"))); #else item->setPixmap(0, (SmallIcon(i->getStatus() ? "up": "down"))); #endif QString typeName = "lan"; if(i->getInterfaceName() == "lo") typeName = "lo"; if(i->getInterfaceName().contains("irda")) typeName = "irda"; if(i->getInterfaceName().contains("wlan")) typeName = "wlan"; if(i->getInterfaceName().contains("usb")) typeName = "usb"; if(!i->isAttached()) typeName = "connect_no"; // Actually try to use the Module if(i->getModuleOwner() != NULL) typeName = i->getModuleOwner()->getPixmapName(i); #ifdef QWS item->setPixmap(1, (Resource::loadPixmap(QString("networksettings/") + typeName))); #else item->setPixmap(1, (SmallIcon(typeName))); #endif item->setText(2, i->getHardwareName()); item->setText(3, QString("(%1)").arg(i->getInterfaceName())); item->setText(4, (i->getStatus()) ? i->getIp() : QString("")); } void MainWindowImp::newProfileChanged(const QString& newText) { if(newText.length() > 0) newProfileButton->setEnabled(true); else newProfileButton->setEnabled(false); } /** * Adds a new profile to the list of profiles. * Don't add profiles that already exists. * Appends to the list and QStringList */ void MainWindowImp::addProfile() { QString newProfileName = newProfile->text(); if(profiles.grep(newProfileName).count() > 0) { QMessageBox::information(this, "Can't Add","Profile already exists.", QMessageBox::Ok); return; } profiles.append(newProfileName); profilesList->insertItem(newProfileName); } /** * Removes the currently selected profile in the combo. * Doesn't delete if there are less then 2 profiles. */ void MainWindowImp::removeProfile() { if(profilesList->count() <= 1) { QMessageBox::information(this, "Can't remove.","At least one profile\nis needed.", QMessageBox::Ok); return; } QString profileToRemove = profilesList->currentText(); if(profileToRemove == "All") { QMessageBox::information(this, "Can't remove.","Can't remove default.", QMessageBox::Ok); return; } // Can't remove the curent profile if(profileToRemove == currentProfileLabel->text()) { QMessageBox::information(this, "Can't remove.",QString("%1 is the current profile.").arg(profileToRemove), QMessageBox::Ok); return; } if(QMessageBox::information(this, "Question",QString("Remove profile: %1").arg(profileToRemove), QMessageBox::Ok, QMessageBox::Cancel) == QMessageBox::Ok) { profiles = QStringList::split(" ", profiles.join(" ").replace(QRegExp(profileToRemove), "")); profilesList->clear(); for ( QStringList::Iterator it = profiles.begin(); it != profiles.end(); ++it) profilesList->insertItem((*it)); // Remove any interface settings and mappings. Interfaces interfaces; // Go through them one by one QMap<Interface*, QListViewItem*>::Iterator it; for( it = items.begin(); it != items.end(); ++it ) { QString interfaceName = it.key()->getInterfaceName(); qDebug(interfaceName.latin1()); if(interfaces.setInterface(interfaceName + "_" + profileToRemove)) { interfaces.removeInterface(); if(interfaces.setMapping(interfaceName)) { if(profilesList->count() == 1) interfaces.removeMapping(); else { interfaces.removeMap("map", interfaceName + "_" + profileToRemove); } } interfaces.write(); break; } } } } /** * A new profile has been selected, change. * @param newProfile the new profile. */ void MainWindowImp::changeProfile() { if(profilesList->currentItem() == -1) { QMessageBox::information(this, "Can't Change.","Please select a profile.", QMessageBox::Ok); return; } QString newProfile = profilesList->text(profilesList->currentItem()); if(newProfile != currentProfileLabel->text()) { currentProfileLabel->setText(newProfile); QFile::remove(scheme); QFile file(scheme); if ( file.open(IO_ReadWrite) ) { QTextStream stream( &file ); stream << QString("SCHEME=%1").arg(newProfile); file.close(); } // restart all up devices? if(QMessageBox::information(this, "Question","Restart all running interfaces?", QMessageBox::Ok, QMessageBox::No) == QMessageBox::Ok) { // Go through them one by one QMap<Interface*, QListViewItem*>::Iterator it; for( it = items.begin(); it != items.end(); ++it ) { if(it.key()->getStatus() == true) it.key()->restart(); } } } // TODO change the profile in the modules } void MainWindowImp::makeChannel() { channel = new QCopChannel( "QPE/Application/networksettings", this ); - connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), - this, SLOT(receive(const QCString&, const QByteArray&)) ); + connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT(receive(const QCString&,const QByteArray&)) ); } void MainWindowImp::receive(const QCString &msg, const QByteArray &arg) { bool found = false; qDebug("MainWindowImp::receive QCop msg >"+msg+"<"); if (msg == "raise") { raise(); return; } QString dest = msg.left(msg.find("(")); QCString param = msg.right(msg.length() - msg.find("(") - 1); param = param.left( param.length() - 1 ); qDebug("dest >%s< param >"+param+"<",dest.latin1()); QMap<Module*, QLibrary*>::Iterator it; for( it = libraries.begin(); it != libraries.end(); ++it ) { qDebug("plugin >%s<", it.key()->type().latin1() ); if(it.key()->type() == dest) { it.key()->receive( param, arg ); found = true; } } if (found) QPEApplication::setKeepRunning(); else qDebug("Huh what do ya want"); } diff --git a/noncore/settings/networksettings/ppp/edit.cpp b/noncore/settings/networksettings/ppp/edit.cpp index 7d21605..3b2393c 100644 --- a/noncore/settings/networksettings/ppp/edit.cpp +++ b/noncore/settings/networksettings/ppp/edit.cpp @@ -191,1021 +191,1021 @@ void DialWidget::selectionChanged(int) void DialWidget::addNumber() { PhoneNumberDialog dlg(this); if(dlg.exec()) { numbers->insertItem(dlg.phoneNumber()); numbersChanged(); } } void DialWidget::delNumber() { if(numbers->currentItem() != -1) { numbers->removeItem(numbers->currentItem()); numbersChanged(); } } void DialWidget::upNumber() { int idx = numbers->currentItem(); if(idx != -1) { QString item = numbers->text(idx); numbers->removeItem(idx); numbers->insertItem(item, idx-1); numbers->setCurrentItem(idx-1); numbersChanged(); } } void DialWidget::downNumber() { int idx = numbers->currentItem(); if(idx != -1) { QString item = numbers->text(idx); numbers->removeItem(idx); numbers->insertItem(item, idx+1); numbers->setCurrentItem(idx+1); numbersChanged(); } } void DialWidget::pppdargsbutton() { PPPdArguments pa(_pppdata, this); QPEApplication::execDialog( &pa ); } ///////////////////////////////////////////////////////////////////////////// // ExecWidget ///////////////////////////////////////////////////////////////////////////// ExecWidget::ExecWidget(PPPData *pd, QWidget *parent, bool isnewaccount, const char *name) : QWidget(parent, name), _pppdata(pd) { QVBoxLayout *tl = new QVBoxLayout(this, 0 );//, KDialog::spacingHint()); QLabel *l = new QLabel( tr("Here you can select commands to run at certain stages of the connection. The commands are run with your real user id, so you cannot run any commands here requiring root permissions (unless, of course, you are root).<br><br>Be sure to supply the whole path to the program otherwise we might be unable to find it."), this); tl->addWidget(l); tl->addStretch(1); QGridLayout *l1 = new QGridLayout(4, 2, 10); tl->addLayout(l1); l1->setColStretch(0, 0); l1->setColStretch(1, 1); before_connect_l = new QLabel(tr("Before connect:"), this); before_connect_l->setAlignment(AlignVCenter); l1->addWidget(before_connect_l, 0, 0); before_connect = new QLineEdit(this); // before_connect->setMaxLength(COMMAND_SIZE); l1->addWidget(before_connect, 0, 1); QString tmp = tr("Allows you to run a program <b>before</b> a connection\n" "is established. It is called immediately before\n" "dialing has begun.\n\n" "This might be useful, e.g. to stop HylaFAX blocking the\n" "modem."); QWhatsThis::add(before_connect_l,tmp); QWhatsThis::add(before_connect,tmp); command_label = new QLabel(tr("Upon connect:"), this); command_label->setAlignment(AlignVCenter); l1->addWidget(command_label, 1, 0); command = new QLineEdit(this); // command->setMaxLength(COMMAND_SIZE); l1->addWidget(command, 1, 1); tmp = tr("Allows you to run a program <b>after</b> a connection\n" "is established. When your program is called, all\n" "preparations for an Internet connection are finished.\n" "\n" "Very useful for fetching mail and news"); QWhatsThis::add(command_label,tmp); QWhatsThis::add(command,tmp); predisconnect_label = new QLabel(tr("Before disconnect:"), this); predisconnect_label->setAlignment(AlignVCenter); l1->addWidget(predisconnect_label, 2, 0); predisconnect = new QLineEdit(this); // predisconnect->setMaxLength(COMMAND_SIZE); l1->addWidget(predisconnect, 2, 1); tmp = tr("Allows you to run a program <b>before</b> a connection\n" "is closed. The connection will stay open until\n" "the program exits."); QWhatsThis::add(predisconnect_label,tmp); QWhatsThis::add(predisconnect,tmp); discommand_label = new QLabel(tr("Upon disconnect:"), this); discommand_label->setAlignment(AlignVCenter); l1->addWidget(discommand_label, 3, 0); discommand = new QLineEdit(this); // discommand->setMaxLength(COMMAND_SIZE); l1->addWidget(discommand, 3, 1); tmp = tr("Allows you to run a program <b>after</b> a connection\n" "has been closed."); QWhatsThis::add(discommand_label,tmp); QWhatsThis::add(discommand,tmp); // extra space between entries l1->addRowSpacing(1, 5); l1->addRowSpacing(3, 5); tl->addStretch(1); tl->activate(); // Set defaults if editing an existing connection if(!isnewaccount) { before_connect->setText(_pppdata->command_before_connect()); command->setText(_pppdata->command_on_connect()); discommand->setText(_pppdata->command_on_disconnect()); predisconnect->setText(_pppdata->command_before_disconnect()); } } bool ExecWidget::save() { _pppdata->setCommand_before_connect(before_connect->text()); _pppdata->setCommand_on_connect(command->text()); _pppdata->setCommand_before_disconnect(predisconnect->text()); _pppdata->setCommand_on_disconnect(discommand->text()); return true; } ///////////////////////////////////////////////////////////////////////////// // // IPWidget // ///////////////////////////////////////////////////////////////////////////// IPWidget::IPWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name ) : QWidget(parent, name), _pppdata(pd) { QVBoxLayout *topLayout = new QVBoxLayout(this); topLayout->setSpacing( 3 );//KDialog::spacingHint()); box = new QVGroupBox(tr("Configuration"), this); // box->setInsideSpacing( 1 );//KDialog::spacingHint()); rb = new QButtonGroup(this); rb->hide(); connect(rb, SIGNAL(clicked(int)), SLOT(hitIPSelect(int))); dynamicadd_rb = new QRadioButton(box); dynamicadd_rb->setText(tr("Dynamic IP address")); QWhatsThis::add(dynamicadd_rb, tr("Select this option when your computer gets an\n" "internet address (IP) every time a\n" "connection is made.\n" "\n" "Almost every Internet Service Provider uses\n" "this method, so this should be turned on.")); staticadd_rb = new QRadioButton(box); staticadd_rb->setText(tr("Static IP address")); rb->insert(dynamicadd_rb, 0); rb->insert(staticadd_rb, 1); QWhatsThis::add(staticadd_rb, tr("Select this option when your computer has a\n" "fixed internet address (IP). Most computers\n" "don't have this, so you should probably select\n" "dynamic IP addressing unless you know what you\n" "are doing.")); QWidget *ipWidget = new QWidget(box); QGridLayout *ipLayout = new QGridLayout(ipWidget, 2, 2); ipLayout->setSpacing( 2 );//KDialog::spacingHint()); ipaddress_label = new QLabel(tr("IP address:"), ipWidget); QString tmp = tr("If your computer has a permanent internet\n" "address, you must supply your IP address here."); ipLayout->addWidget(ipaddress_label, 0, 0); ipaddress_l = new IPLineEdit(ipWidget); ipLayout->addWidget(ipaddress_l, 0, 1); QWhatsThis::add(ipaddress_label,tmp); QWhatsThis::add(ipaddress_l,tmp); sub_label = new QLabel(tr("Subnet mask:"), ipWidget); tmp = tr("<p>If your computer has a static Internet address,\n" "you must supply a network mask here. In almost\n" "all cases this netmask will be <b>255.255.255.0</b>,\n" "but your mileage may vary.\n" "\n" "If unsure, contact your Internet Service Provider"); ipLayout->addWidget(sub_label, 1, 0); subnetmask_l = new IPLineEdit(ipWidget); ipLayout->addWidget(subnetmask_l, 1, 1); QWhatsThis::add(sub_label,tmp); QWhatsThis::add(subnetmask_l,tmp); autoname = new QCheckBox(tr("Auto-configure hostname from this IP"), this); autoname->setChecked(_pppdata->autoname()); connect(autoname,SIGNAL(toggled(bool)), this,SLOT(autoname_t(bool))); QWhatsThis::add(autoname, tr("<p>Whenever you connect, this reconfigures\n" "your hostname to match the IP address you\n" "got from the PPP server. This may be useful\n" "if you need to use a protocol which depends\n" "on this information, but it can also cause several\n" "<a href=\"kppp-7.html#autohostname\">problems</a>.\n" "\n" "Don't enable this unless you really need it.")); topLayout->addWidget(box); topLayout->addWidget(autoname); topLayout->addStretch(); //load info from gpppdata if(!isnewaccount) { if(_pppdata->ipaddr() == "0.0.0.0" && _pppdata->subnetmask() == "0.0.0.0") { dynamicadd_rb->setChecked(true); hitIPSelect(0); autoname->setChecked(_pppdata->autoname()); } else { ipaddress_l->setText(_pppdata->ipaddr()); subnetmask_l->setText(_pppdata->subnetmask()); staticadd_rb->setChecked(true); autoname->setChecked(false); } } else { dynamicadd_rb->setChecked(true); hitIPSelect(0); } } void IPWidget::autoname_t(bool on) { static bool was_warned = false; // big-fat warning when selecting the auto configure hostname option if(on && !was_warned) { QMessageBox::information(this, tr("Selecting this option might cause some weird " "problems with the X-server and applications " "while kppp is connected. Don't use it until " "you know what you are doing!\n" "For more information take a look at the " "handbook (or help) in the section \"Frequently " "asked questions\"."), tr("Warning")); was_warned = true; } } void IPWidget::save() { if(dynamicadd_rb->isChecked()) { _pppdata->setIpaddr("0.0.0.0"); _pppdata->setSubnetmask("0.0.0.0"); } else { _pppdata->setIpaddr(ipaddress_l->text()); _pppdata->setSubnetmask(subnetmask_l->text()); } _pppdata->setAutoname(autoname->isChecked()); } void IPWidget::hitIPSelect( int i ) { if(i == 0) { ipaddress_label->setEnabled(false); sub_label->setEnabled(false); ipaddress_l->setEnabled(false); subnetmask_l->setEnabled(false); } else { ipaddress_label->setEnabled(true); sub_label->setEnabled(true); ipaddress_l->setEnabled(true); subnetmask_l->setEnabled(true); } } DNSWidget::DNSWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name ) : QWidget(parent, name), _pppdata(pd) { QGridLayout *tl = new QGridLayout(this, 7, 2, 0 ); dnsdomain_label = new QLabel(tr("Domain name:"), this); tl->addWidget(dnsdomain_label, 0, 0); dnsdomain = new QLineEdit(this); tl->addWidget(dnsdomain, 0, 1); QString tmp = tr("If you enter a domain name here, this domain\n" "name is used for your computer while you are\n" "connected. When the connection is closed, the\n" "original domain name of your computer is\n" "restored.\n" "\n" "If you leave this field blank, no changes are\n" "made to the domain name."); QWhatsThis::add(dnsdomain_label,tmp); QWhatsThis::add(dnsdomain,tmp); conf_label = new QLabel(tr("Configuration:"), this); tl->addWidget(conf_label, 1, 0); bg = new QButtonGroup("Group", this); connect(bg, SIGNAL(clicked(int)), SLOT(DNS_Mode_Selected(int))); bg->hide(); autodns = new QRadioButton(tr("Automatic"), this); bg->insert(autodns, 0); tl->addWidget(autodns, 1, 1); if(!_pppdata->pppdVersionMin(2, 3, 7)) autodns->setEnabled(false); mandns = new QRadioButton(tr("Manual"), this); bg->insert(mandns, 1); tl->addWidget(mandns, 2, 1); dns_label = new QLabel(tr("DNS IP address:"), this); tl->addWidget(dns_label, 3, 0); QHBoxLayout *l2 = new QHBoxLayout; tl->addLayout(l2, 3, 1); dnsipaddr = new IPLineEdit(this); connect(dnsipaddr, SIGNAL(returnPressed()), SLOT(adddns())); - connect(dnsipaddr, SIGNAL(textChanged(const QString &)), - SLOT(DNS_Edit_Changed(const QString &))); + connect(dnsipaddr, SIGNAL(textChanged(const QString&)), + SLOT(DNS_Edit_Changed(const QString&))); l2->addWidget(dnsipaddr, 1); l2->addStretch(1); tmp = tr("<p>Allows you to specify a new DNS server to be\n" "used while you are connected. When the\n" "connection is closed, this DNS entry will be\n" "removed again.\n" "\n" "To add a DNS server, type in the IP address of\n" "the DNS server here and click on <b>Add</b>"); QWhatsThis::add(dns_label, tmp); QWhatsThis::add(dnsipaddr, tmp); QHBoxLayout *l1 = new QHBoxLayout; tl->addLayout(l1, 4, 1); add = new QPushButton(tr("Add"), this); connect(add, SIGNAL(clicked()), SLOT(adddns())); l1->addWidget(add); // l1->addStretch(1); QWhatsThis::add(add, tr("Click this button to add the DNS server\n" "specified in the field above. The entry\n" "will then be added to the list below")); remove = new QPushButton(tr("Remove"), this); connect(remove, SIGNAL(clicked()), SLOT(removedns())); l1->addWidget(remove); QWhatsThis::add(remove, tr("Click this button to remove the selected DNS\n" "server entry from the list below")); servers_label = new QLabel(tr("DNS address list:"), this); servers_label->setAlignment(AlignTop|AlignLeft); tl->addWidget(servers_label, 5, 0); dnsservers = new QListBox(this); dnsservers->setMinimumSize(150, 80); connect(dnsservers, SIGNAL(highlighted(int)), SLOT(DNS_Entry_Selected(int))); tl->addWidget(dnsservers, 5, 1); tmp = tr("<p>This shows all defined DNS servers to use\n" "while you are connected. Use the <b>Add</b> and\n" "<b>Remove</b> buttons to modify the list"); QWhatsThis::add(servers_label,tmp); QWhatsThis::add(dnsservers,tmp); exdnsdisabled_toggle = new QCheckBox(tr("Disable DNS servers during connection"), this); // exdnsdisabled_toggle = new QCheckBox(tr("Disable existing DNS servers during connection"), this); exdnsdisabled_toggle->setChecked(_pppdata->exDNSDisabled()); tl->addMultiCellWidget(exdnsdisabled_toggle, 6, 6, 0, 1, AlignCenter); QWhatsThis::add(exdnsdisabled_toggle, tr("<p>When this option is selected, all DNS\n" "servers specified in <tt>/etc/resolv.conf</tt> are\n" "temporary disabled while the dialup connection\n" "is established. After the connection is\n" "closed, the servers will be re-enabled\n" "\n" "Typically, there is no reason to use this\n" "option, but it may become useful under \n" "some circumstances.")); // restore data if editing if(!isnewaccount) { dnsservers->insertStringList(_pppdata->dns()); dnsdomain->setText(_pppdata->domain()); } int mode = _pppdata->autoDNS() ? 0 : 1; bg->setButton(mode); DNS_Mode_Selected(mode); tl->activate(); } void DNSWidget::DNS_Edit_Changed(const QString &text) { QRegExp r("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+"); add->setEnabled(text.find(r) != -1); } void DNSWidget::DNS_Entry_Selected(int) { remove->setEnabled(true); } void DNSWidget::DNS_Mode_Selected(int mode) { bool on = (mode == 1); dns_label->setEnabled(on); servers_label->setEnabled(on); dnsipaddr->setText(""); dnsipaddr->setEnabled(on); add->setEnabled(false); remove->setEnabled(dnsservers->count()>0 && on); dnsservers->clearSelection(); dnsservers->setEnabled(on); dnsservers->triggerUpdate(false); } void DNSWidget::save() { _pppdata->setAutoDNS(bg->id(bg->selected()) == 0); QStringList serverlist; for(uint i=0; i < dnsservers->count(); i++) serverlist.append(dnsservers->text(i)); _pppdata->setDns(serverlist); // strip leading dot QString s(dnsdomain->text()); if(s.left(1) == ".") _pppdata->setDomain(s.mid(1)); else _pppdata->setDomain(dnsdomain->text()); _pppdata->setExDNSDisabled(exdnsdisabled_toggle->isChecked()); } void DNSWidget::adddns() { if(dnsservers->count() < MAX_DNS_ENTRIES) { dnsservers->insertItem(dnsipaddr->text()); dnsipaddr->setText(""); } } void DNSWidget::removedns() { int i; i = dnsservers->currentItem(); if(i != -1) dnsservers->removeItem(i); remove->setEnabled(dnsservers->count()>0); } // // GatewayWidget // GatewayWidget::GatewayWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name ) : QWidget(parent, name), _pppdata(pd) { QVBoxLayout *topLayout = new QVBoxLayout(this); topLayout->setSpacing( 2 ); topLayout->setMargin( 0 ); box = new QVGroupBox(tr("Configuration"), this); rb = new QButtonGroup(this); rb->hide(); connect(rb, SIGNAL(clicked(int)), SLOT(hitGatewaySelect(int))); defaultgateway = new QRadioButton(box); defaultgateway->setText(tr("Default gateway")); rb->insert(defaultgateway, 0); QWhatsThis::add(defaultgateway, tr("This makes the PPP peer computer (the computer\n" "you are connected to with your modem) to act as\n" "a gateway. Your computer will send all packets not\n" "going to a computer inside your local net to this\n" "computer, which will route these packets.\n" "\n" "This is the default for most ISPs, so you should\n" "probably leave this option on.")); staticgateway = new QRadioButton(box); staticgateway->setText(tr("Static gateway")); rb->insert(staticgateway, 1); QWhatsThis::add(staticgateway, tr("<p>Allows you to specify which computer you want\n" "to use as gateway (see <i>Default Gateway</i> above)")); QHBox *gateBox = new QHBox(box); gate_label = new QLabel(tr("Gateway IP address:"), gateBox); gatewayaddr = new IPLineEdit(gateBox); defaultroute = new QCheckBox(tr("Assign the default route to this gateway"), this); QWhatsThis::add(defaultroute, tr("If this option is enabled, all packets not\n" "going to the local net are routed through\n" "the PPP connection.\n" "\n" "Normally, you should turn this on")); topLayout->addWidget(box); topLayout->addWidget(defaultroute); topLayout->addStretch(); //load info from gpppdata if(!isnewaccount) { if(_pppdata->gateway() == "0.0.0.0") { defaultgateway->setChecked(true); hitGatewaySelect(0); } else { gatewayaddr->setText(_pppdata->gateway()); staticgateway->setChecked(true); } defaultroute->setChecked(_pppdata->defaultroute()); } else { defaultgateway->setChecked(true); hitGatewaySelect(0); defaultroute->setChecked(true); } } void GatewayWidget::save() { _pppdata->setGateway(gatewayaddr->text()); _pppdata->setDefaultroute(defaultroute->isChecked()); } void GatewayWidget::hitGatewaySelect( int i ) { if(i == 0) { gatewayaddr->setText("0.0.0.0"); gatewayaddr->setEnabled(false); gate_label->setEnabled(false); } else { gatewayaddr->setEnabled(true); gatewayaddr->setText(""); gate_label->setEnabled(true); } } ScriptWidget::ScriptWidget( PPPData *pd, QWidget *parent, bool isnewaccount, const char *name ) : QWidget(parent, name),_pppdata(pd) { QVBoxLayout *tl = new QVBoxLayout(this, 0 ); se = new ScriptEdit(this); connect(se, SIGNAL(returnPressed()), SLOT(addButton())); tl->addWidget(se); // insert equal-sized buttons QHBoxLayout *hl = new QHBoxLayout( this ); tl->addLayout( hl ); add = new QPushButton( tr("Add"), this ); hl->addWidget( add ); connect(add, SIGNAL(clicked()), SLOT(addButton())); insert = new QPushButton( tr("Insert"), this ); hl->addWidget( insert ); connect(insert, SIGNAL(clicked()), SLOT(insertButton())); remove = new QPushButton( tr("Remove"), this ); hl->addWidget( remove ); connect(remove, SIGNAL(clicked()), SLOT(removeButton())); QHBoxLayout *l12 = new QHBoxLayout(0); tl->addLayout(l12); stl = new QListBox(this); // stl->setVScrollBarMode( QScrollView::AlwaysOff ); connect(stl, SIGNAL(highlighted(int)), SLOT(stlhighlighted(int))); // stl->setMinimumSize(QSize(70, 140)); sl = new QListBox(this); // sl->setVScrollBarMode( QScrollView::AlwaysOff ); connect(sl, SIGNAL(highlighted(int)), SLOT(slhighlighted(int))); // sl->setMinimumSize(QSize(150, 140)); slb = new QScrollBar(this); // slb->setFixedWidth(slb->sizeHint().width()); connect(slb, SIGNAL(valueChanged(int)), SLOT(scrolling(int))); l12->addWidget(stl, 1); l12->addWidget(sl, 3); l12->addWidget(slb, 0); //load data from gpppdata if(!isnewaccount) { QStringList &comlist = _pppdata->scriptType(); QStringList &arglist = _pppdata->script(); QStringList::Iterator itcom = comlist.begin(); QStringList::Iterator itarg = arglist.begin(); for ( ; itcom != comlist.end() && itarg != arglist.end(); ++itcom, ++itarg ) { stl->insertItem(*itcom); sl->insertItem(*itarg); } } insert->setEnabled(false); remove->setEnabled(false); adjustScrollBar(); tl->activate(); } bool ScriptWidget::check() { uint lstart = 0; uint lend = 0; uint errcnt = 0; if(sl->count() > 0) { for( uint i=0; i <= sl->count()-1; i++) { if(stl->text(i) == "LoopStart") { lstart++; } if (stl->text(i) == "LoopEnd") { lend++; } if ( lend > lstart ) errcnt++; } return ( (errcnt == 0 ) && (lstart == lend) ); } return true; } void ScriptWidget::save() { QStringList typelist, arglist; for(uint i=0; i < sl->count(); i++) { typelist.append(stl->text(i)); arglist.append(sl->text(i)); } _pppdata->setScriptType(typelist); _pppdata->setScript(arglist); } void ScriptWidget::adjustScrollBar() { if((int)sl->count() <= sl->numItemsVisible()) slb->setRange(0, 0); else slb->setRange(0, (sl->count() - sl->numItemsVisible())+1); } void ScriptWidget::scrolling(int i) { sl->setTopItem(i); stl->setTopItem(i); } void ScriptWidget::slhighlighted(int i) { insert->setEnabled(true); remove->setEnabled(true); stl->setCurrentItem(i); } void ScriptWidget::stlhighlighted(int i) { insert->setEnabled(true); remove->setEnabled(true); sl->setCurrentItem(i); } void ScriptWidget::addButton() { //don't allow more than the maximum script entries if(sl->count() == MAX_SCRIPT_ENTRIES-1) return; switch(se->type()) { case ScriptEdit::Expect: stl->insertItem("Expect"); sl->insertItem(se->text()); break; case ScriptEdit::Send: stl->insertItem("Send"); sl->insertItem(se->text()); break; case ScriptEdit::SendNoEcho: stl->insertItem("SendNoEcho"); sl->insertItem(se->text()); break; case ScriptEdit::Pause: stl->insertItem("Pause"); sl->insertItem(se->text()); break; case ScriptEdit::Hangup: stl->insertItem("Hangup"); sl->insertItem(""); break; case ScriptEdit::Answer: stl->insertItem("Answer"); sl->insertItem(""); break; case ScriptEdit::Timeout: stl->insertItem("Timeout"); sl->insertItem(se->text()); break; case ScriptEdit::Password: stl->insertItem("Password"); sl->insertItem(se->text()); break; case ScriptEdit::ID: stl->insertItem("ID"); sl->insertItem(se->text()); break; case ScriptEdit::Prompt: stl->insertItem("Prompt"); sl->insertItem(se->text()); break; case ScriptEdit::PWPrompt: stl->insertItem("PWPrompt"); sl->insertItem(se->text()); break; case ScriptEdit::LoopStart: stl->insertItem("LoopStart"); sl->insertItem(se->text()); break; case ScriptEdit::LoopEnd: stl->insertItem("LoopEnd"); sl->insertItem(se->text()); break; case ScriptEdit::Scan: stl->insertItem("Scan"); sl->insertItem(se->text()); break; case ScriptEdit::Save: stl->insertItem("Save"); sl->insertItem(se->text()); break; default: break; } //get the scrollbar adjusted, and scroll the list so we can see what //we're adding to adjustScrollBar(); slb->setValue(slb->maxValue()); //clear the text in the entry box se->setText(""); } void ScriptWidget::insertButton() { //exit if there is no highlighted item, or we've reached the //maximum entries in the script list if(sl->currentItem() < 0 || (sl->count() == MAX_SCRIPT_ENTRIES-1)) return; switch(se->type()) { case ScriptEdit::Expect: stl->insertItem("Expect", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::Send: stl->insertItem("Send", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::SendNoEcho: stl->insertItem("SendNoEcho", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::Pause: stl->insertItem("Pause", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::Hangup: stl->insertItem("Hangup", stl->currentItem()); sl->insertItem("", sl->currentItem()); break; case ScriptEdit::Answer: stl->insertItem("Answer", stl->currentItem()); sl->insertItem("", sl->currentItem()); break; case ScriptEdit::Timeout: stl->insertItem("Timeout", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::Password: stl->insertItem("Password", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::ID: stl->insertItem("ID", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::Prompt: stl->insertItem("Prompt", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::PWPrompt: stl->insertItem("PWPrompt", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::LoopStart: stl->insertItem("LoopStart", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::LoopEnd: stl->insertItem("LoopEnd", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::Scan: stl->insertItem("Scan", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; case ScriptEdit::Save: stl->insertItem("Save", stl->currentItem()); sl->insertItem(se->text(), sl->currentItem()); break; default: break; } adjustScrollBar(); se->setText(""); } void ScriptWidget::removeButton() { if(sl->currentItem() >= 0) { int stlc = stl->currentItem(); sl->removeItem(sl->currentItem()); stl->removeItem(stlc); adjustScrollBar(); insert->setEnabled(sl->currentItem() != -1); remove->setEnabled(sl->currentItem() != -1); } } ///////////////////////////////////////////////////////////////////////////// // // Used to specify a new phone number // ///////////////////////////////////////////////////////////////////////////// PhoneNumberDialog::PhoneNumberDialog(QWidget *parent) : QDialog(parent,"PhoneNumberDialog",true) { setCaption( tr("Add Phone Number") ); QVBoxLayout *layout = new QVBoxLayout( this ); layout->setSpacing( 3 ); layout->setMargin( 3 ); // QHBox *hbox = new QHBox(this); // setMainWidget(hbox); // hbox->setSpacing( 2 );//KDialog::spacingHint()); QLabel *label = new QLabel(this, tr("Enter a phone number:")); layout->addWidget( label ); le = new QLineEdit(this, "lineEdit"); layout->addWidget( le ); - connect(le, SIGNAL(textChanged(const QString &)), - this, SLOT(textChanged(const QString &))); + connect(le, SIGNAL(textChanged(const QString&)), + this, SLOT(textChanged(const QString&))); le->setFocus(); textChanged(""); } QString PhoneNumberDialog::phoneNumber() { QString s = le->text(); return s; } void PhoneNumberDialog::textChanged(const QString &s) { // enableButtonOK(s.length() > 0); } //#include "edit.moc" diff --git a/noncore/settings/networksettings/ppp/general.cpp b/noncore/settings/networksettings/ppp/general.cpp index ff1b11b..81dab38 100644 --- a/noncore/settings/networksettings/ppp/general.cpp +++ b/noncore/settings/networksettings/ppp/general.cpp @@ -1,472 +1,472 @@ /* * kPPP: A pppd front end for the KDE project * * $Id$ * * Copyright (C) 1997 Bernd Johannes Wuebben * wuebben@math.cornell.edu * * based on EzPPP: * Copyright (C) 1997 Jay Painter * * This program 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 program 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 program; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "general.h" #include "interfaceppp.h" #include "modeminfo.h" #include "modemcmds.h" #include "pppdata.h" /* OPIE */ #include <qpe/config.h> #include <qpe/qpeapplication.h> /* QT */ #include <qcheckbox.h> #include <qcombobox.h> #include <qlabel.h> #include <qlayout.h> #include <qpushbutton.h> #include <qslider.h> #include <qspinbox.h> #include <qwhatsthis.h> /* STD */ #include <termios.h> #include <string.h> ModemWidget::ModemWidget( PPPData *pd, QWidget *parent, const char *name ) : QWidget(parent, name), _pppdata(pd) { int k; QGridLayout *tl = new QGridLayout(this, 8, 2, 0 );//, KDialog::spacingHint()); QLabel *label1; label1 = new QLabel(tr("Modem &name:"), this); tl->addWidget(label1, 0, 0); modemname = new QLineEdit(this, "modemName"); modemname->setText( _pppdata->devname() ); label1->setBuddy(modemname); tl->addWidget(modemname, 0, 1); label1 = new QLabel(tr("Modem de&vice:"), this); tl->addWidget(label1, 1, 0); modemdevice = new QComboBox(false, this); modemdevice->setEditable( true ); modemdevice->setDuplicatesEnabled ( false ); modemdevice->setInsertionPolicy( QComboBox::AtTop ); label1->setBuddy(modemdevice); Config cfg("NetworkSetupPPP"); cfg.setGroup("Devices_General"); QStringList devs = cfg.readListEntry("devices",','); if (devs.isEmpty()) devs << "/dev/modem" << "/dev/ircomm0" << "/dev/ttyS0"; modemdevice->insertStringList( devs ); tl->addWidget(modemdevice, 1, 1); // connect(modemdevice, SIGNAL(activated(int)), // SLOT(setmodemdc(int))); - // connect(modemdevice, SIGNAL(textChanged( const QString & ) ), - // SLOT( setmodemdc( const QString &) ) ); + // connect(modemdevice, SIGNAL(textChanged(const QString&) ), + // SLOT( setmodemdc(const QString&) ) ); QString tmp = tr("This specifies the serial port your modem is attached \n" "to. On Linux/x86, typically this is either /dev/ttyS0 \n" "(COM1 under DOS) or /dev/ttyS1 (COM2 under DOS).\n" "\n" "If you have an internal ISDN card with AT command\n" "emulation (most cards under Linux support this), you\n" "should select one of the /dev/ttyIx devices."); QWhatsThis::add(label1,tmp); QWhatsThis::add(modemdevice,tmp); label1 = new QLabel(tr("&Flow control:"), this); tl->addWidget(label1, 2, 0); flowcontrol = new QComboBox(false, this); label1->setBuddy(flowcontrol); flowcontrol->insertItem(tr("Hardware [CRTSCTS]")); flowcontrol->insertItem(tr("Software [XON/XOFF]")); flowcontrol->insertItem(tr("None")); tl->addWidget(flowcontrol, 2, 1); // connect(flowcontrol, SIGNAL(activated(int)), // SLOT(setflowcontrol(int))); tmp = tr("<p>Specifies how the serial port and modem\n" "communicate. You should not change this unless\n" "you know what you are doing.\n" "\n" "<b>Default</b>: CRTSCTS"); QWhatsThis::add(label1,tmp); QWhatsThis::add(flowcontrol,tmp); QLabel *labelenter = new QLabel(tr("&Line termination:"), this); tl->addWidget(labelenter, 3, 0); enter = new QComboBox(false, this); labelenter->setBuddy(enter); enter->insertItem("CR"); enter->insertItem("LF"); enter->insertItem("CR/LF"); tl->addWidget(enter, 3, 1); // connect(enter, SIGNAL(activated(int)), SLOT(setenter(int))); tmp = tr("<p>Specifies how AT commands are sent to your\n" "modem. Most modems will work fine with the\n" "default <i>CR/LF</i>. If your modem does not react\n" "to the init string, you should try different\n" "settings here\n" "\n" "<b>Default</b>: CR/LF"); QWhatsThis::add(labelenter,tmp); QWhatsThis::add(enter, tmp); QLabel *baud_label = new QLabel(tr("Co&nnection speed:"), this); tl->addWidget(baud_label, 4, 0); baud_c = new QComboBox(this); baud_label->setBuddy(baud_c); static const char *baudrates[] = { #ifdef B460800 "460800", #endif #ifdef B230400 "230400", #endif #ifdef B115200 "115200", #endif #ifdef B57600 "57600", #endif "38400", "19200", "9600", "2400", 0 }; for(k = 0; baudrates[k]; k++) baud_c->insertItem(baudrates[k]); baud_c->setCurrentItem(3); // connect(baud_c, SIGNAL(activated(int)), // this, SLOT(speed_selection(int))); tl->addWidget(baud_c, 4, 1); tmp = tr("Specifies the speed your modem and the serial\n" "port talk to each other. You should begin with\n" "the default of 38400 bits/sec. If everything\n" "works you can try to increase this value, but to\n" "no more than 115200 bits/sec (unless you know\n" "that your serial port supports higher speeds)."); QWhatsThis::add(baud_label,tmp); QWhatsThis::add(baud_c,tmp); for(int i=0; i <= enter->count()-1; i++) { if(_pppdata->enter() == enter->text(i)) enter->setCurrentItem(i); } tl->addRowSpacing(5, 10); //Modem Lock File modemlockfile = new QCheckBox(tr("&Use lock file"), this); modemlockfile->setChecked(_pppdata->modemLockFile()); // connect(modemlockfile, SIGNAL(toggled(bool)), // SLOT(modemlockfilechanged(bool))); tl->addMultiCellWidget(modemlockfile, 6, 6, 0, 1); // l12->addStretch(1); QWhatsThis::add(modemlockfile, tr("<p>To prevent other programs from accessing the\n" "modem while a connection is established, a\n" "file can be created to indicate that the modem\n" "is in use. On Linux an example file would be\n" "<tt>/var/lock/LCK..ttyS1</tt>\n" "Here you can select whether this locking will\n" "be done.\n" "\n" "<b>Default</b>: On")); // Modem Timeout Line Edit Box QHBoxLayout *timeoutLayout = new QHBoxLayout( this ); QLabel *timeoutlabel = new QLabel( tr("Modem timeout:") ,this, "timeout" ); modemtimeout = new QSpinBox( 1, 120, 1, this, "modemTimeout" ); // modemtimeout = new KIntNumInput(_pppdata->modemTimeout(), this); // modemtimeout->setLabel(tr("Modem &timeout:")); // modemtimeout->setRange(1, 120, 1); modemtimeout->setSuffix(tr(" sec")); modemtimeout->setValue( _pppdata->modemTimeout() ); // connect(modemtimeout, SIGNAL(valueChanged(int)), // SLOT(modemtimeoutchanged(int))); timeoutLayout->addWidget(timeoutlabel); timeoutLayout->addWidget(modemtimeout); tl->addMultiCellLayout(timeoutLayout, 7, 7, 0, 1); QWhatsThis::add(modemtimeout, tr("This specifies how long <i>kppp</i> waits for a\n" "<i>CONNECT</i> response from your modem. The\n" "recommended value is 30 seconds.")); //set stuff from gpppdata for(int i=0; i <= enter->count()-1; i++) { if(_pppdata->enter() == enter->text(i)) enter->setCurrentItem(i); } for(int i=0; i <= modemdevice->count()-1; i++) { if(_pppdata->modemDevice() == modemdevice->text(i)) modemdevice->setCurrentItem(i); } for(int i=0; i <= flowcontrol->count()-1; i++) { if(_pppdata->flowcontrol() == flowcontrol->text(i)) flowcontrol->setCurrentItem(i); } //set the modem speed for(int i=0; i < baud_c->count(); i++) if(baud_c->text(i) == _pppdata->speed()) baud_c->setCurrentItem(i); tl->setRowStretch(1, 1); } ModemWidget::~ModemWidget() { QStringList devs; for (int i=0;i<modemdevice->count();i++) { QString s = modemdevice->text(i); s.simplifyWhiteSpace(); if (! s.isEmpty() ) devs << s; } QString edited = modemdevice->currentText(); if ( !( edited ).isEmpty() ) { edited.simplifyWhiteSpace(); if ( devs.contains( edited ) == 0 ) { devs << edited; } _pppdata->setModemDevice( edited ); } Config cfg("NetworkSetupPPP"); cfg.setGroup("Devices_General"); cfg.writeEntry("devices",devs,','); } // void ModemWidget::speed_selection(int) { // _pppdata->setSpeed(baud_c->text(baud_c->currentItem())); // } // void ModemWidget::setenter(int ) { // _pppdata->setEnter(enter->text(enter->currentItem())); // } // void ModemWidget::setmodemdc(int i) { // _pppdata->setModemDevice(modemdevice->text(i)); // } // void ModemWidget::setmodemdc( const QString &string ) { // _pppdata->setModemDevice( string ); // } // void ModemWidget::setflowcontrol(int i) { // _pppdata->setFlowcontrol(flowcontrol->text(i)); // } // void ModemWidget::modemlockfilechanged(bool set) { // _pppdata->setModemLockFile(set); // } // void ModemWidget::modemtimeoutchanged(int n) { // _pppdata->setModemTimeout(n); // } bool ModemWidget::save() { //first check to make sure that the device name is unique! if(modemname->text().isEmpty() || !_pppdata->isUniqueDevname(modemname->text())) return false; qDebug("ModemWidget::save saving modem1 data"); _pppdata->setDevname( modemname->text() ); _pppdata->setModemDevice( modemdevice->currentText() ); _pppdata->setFlowcontrol(flowcontrol->currentText()); _pppdata->setFlowcontrol(flowcontrol->currentText()); _pppdata->setSpeed(baud_c->currentText()); _pppdata->setModemLockFile( modemlockfile->isChecked()); _pppdata->setModemTimeout( modemtimeout->value() ); return true; } ModemWidget2::ModemWidget2( PPPData *pd, InterfacePPP *ip, QWidget *parent, const char *name) : QWidget(parent, name), _pppdata(pd), _ifaceppp(ip) { QVBoxLayout *l1 = new QVBoxLayout(this, 0 );//, KDialog::spacingHint()); waitfordt = new QCheckBox(tr("&Wait for dial tone before dialing"), this); waitfordt->setChecked(_pppdata->waitForDialTone()); // connect(waitfordt, SIGNAL(toggled(bool)), SLOT(waitfordtchanged(bool))); l1->addWidget(waitfordt); QWhatsThis::add(waitfordt, tr("<p>Normally the modem waits for a dial tone\n" "from your phone line, indicating that it can\n" "start to dial a number. If your modem does not\n" "recognize this sound, or your local phone system\n" "does not emit such a tone, uncheck this option\n" "\n" "<b>Default:</b>: On")); QHBoxLayout *waitLayout = new QHBoxLayout( this ); QLabel *waitLabel = new QLabel( tr("Busy wait:"), this, "busyWait" ); busywait = new QSpinBox( 0, 300, 5, this, "busyWait" ); // busywait = new KIntNumInput(_pppdata->busyWait(), this); // busywait->setLabel(tr("B&usy wait:")); // busywait->setRange(0, 300, 5, true); busywait->setSuffix(tr(" sec")); // connect(busywait, SIGNAL(valueChanged(int)), SLOT(busywaitchanged(int))); waitLayout->addWidget(waitLabel); waitLayout->addWidget(busywait); l1->addLayout( waitLayout ); QWhatsThis::add(busywait, tr("Specifies the number of seconds to wait before\n" "redial if all dialed numbers are busy. This is\n" "necessary because some modems get stuck if the\n" "same number is busy too often.\n" "\n" "The default is 0 seconds, you should not change\n" "this unless you need to.")); l1->addSpacing(10); QHBoxLayout *hbl = new QHBoxLayout; hbl->setSpacing(2);//KDialog::spacingHint()); QLabel *volumeLabel = new QLabel(tr("Modem &volume:"), this); hbl->addWidget(volumeLabel); volume = new QSlider(0, 2, 1, _pppdata->volume(), QSlider::Horizontal, this); volumeLabel->setBuddy(volume); volume->setTickmarks(QSlider::Below); hbl->addWidget(volume); l1->addLayout(hbl); // connect(volume, SIGNAL(valueChanged(int)), // this, SLOT(volumeChanged(int))); QString tmp = tr("Most modems have a speaker which makes\n" "a lot of noise when dialing. Here you can\n" "either turn this completely off or select a\n" "lower volume.\n" "\n" "If this does not work for your modem,\n" "you must modify the modem volume command."); QWhatsThis::add(volumeLabel,tmp); QWhatsThis::add(volume, tmp); l1->addSpacing(20); #if 0 chkbox1 = new QCheckBox(tr("Modem asserts CD line"), this); chkbox1->setChecked(_pppdata->UseCDLine()); connect(chkbox1,SIGNAL(toggled(bool)), this,SLOT(use_cdline_toggled(bool))); l12->addWidget(chkbox1); l12->addStretch(1); l1->addStretch(1); QWhatsThis::add(chkbox1, tr("This controls how <i>kppp</i> detects that the modem\n" "is not responding. Unless you are having\n" "problems with this, do not modify this setting.\n" "\n" "<b>Default</b>: Off")); #endif modemcmds = new QPushButton(tr("Mod&em Commands..."), this); QWhatsThis::add(modemcmds, tr("Allows you to change the AT command for\n" "your modem.")); modeminfo_button = new QPushButton(tr("&Query Modem..."), this); QWhatsThis::add(modeminfo_button, tr("Most modems support the ATI command set to\n" "find out vendor and revision of your modem.\n" "\n" "Press this button to query your modem for\n" "this information. It can be useful to help\n" "you setup the modem")); // terminal_button = new QPushButton(tr("&Terminal..."), this); // QWhatsThis::add(terminal_button, // tr("Opens the built-in terminal program. You\n" // "can use this if you want to play around\n" // "with your modem's AT command set")); QHBoxLayout *hbox = new QHBoxLayout(); l1->addLayout(hbox); hbox->addStretch(1); QVBoxLayout *vbox = new QVBoxLayout(); hbox->addLayout(vbox); vbox->addWidget(modemcmds); vbox->addWidget(modeminfo_button); // vbox->addWidget(terminal_button); hbox->addStretch(1); l1->addStretch(1); connect(modemcmds, SIGNAL(clicked()), SLOT(modemcmdsbutton())); connect(modeminfo_button, SIGNAL(clicked()), diff --git a/noncore/settings/networksettings/ppp/kpppwidget.cpp b/noncore/settings/networksettings/ppp/kpppwidget.cpp index e466358..e21bbc7 100644 --- a/noncore/settings/networksettings/ppp/kpppwidget.cpp +++ b/noncore/settings/networksettings/ppp/kpppwidget.cpp @@ -15,863 +15,863 @@ * version 2 of the License, or (at your option) any later version. * * This program 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 program; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "kpppwidget.h" #include <qapplication.h> #include <qcombobox.h> #include <qdir.h> #include <qevent.h> #include <qdialog.h> #include <qlabel.h> #include <qpushbutton.h> #include <qregexp.h> #include <qtabwidget.h> #include <qdialog.h> #include <qwhatsthis.h> #include <qcheckbox.h> // #include <kaboutdata.h> // #include <kapplication.h> #include <qbuttongroup.h> #include <qmessagebox.h> #include <qpushbutton.h> #include <stdlib.h> #include <errno.h> #include <signal.h> #include "runtests.h" //#include "main.h" #include "auth.h" #include "modem.h" //#include "ppplog.h" //#include "opener.h" //#include "requester.h" //#include "pppstats.h" #include "pppdata.h" #include "general.h" #include "interface.h" #define execute_command system KPPPWidget *p_kppp = 0; KPPPWidget::KPPPWidget(PPPData*pd, Interface *i, QWidget *parent, const char *name, bool modal, WFlags fl ) : QDialog(parent, name, modal, Qt::WStyle_ContextHelp ), _pppdata(pd) { // tabWindow = 0; p_kppp = this; // before doing anything else, run a few tests if (!_pppdata->setModemDevice( i->getInterfaceName() )) _pppdata->setModemDevice("/dev/modem"); qDebug("PPPConfigWidget::PPPConfigWidget"); qDebug(" interface->getHardwareName >%s<", i->getHardwareName().latin1()); if (!_pppdata->setAccount( i->getHardwareName() )) _pppdata->setAccount( 0 ); qDebug(" _pppdata->accname >%s<",_pppdata->accname().latin1()); qDebug(" _pppdata->currentAccountID() >%i<",_pppdata->currentAccountID()); int result = runTests(); if(result == TEST_CRITICAL) exit(4); // installEventFilter(this); QVBoxLayout *tl = new QVBoxLayout(this, 10, 10); QGridLayout *l1 = new QGridLayout(3, 4); tl->addLayout(l1); l1->addColSpacing(0, 10); l1->addColSpacing(3, 10); l1->setColStretch(1, 3); l1->setColStretch(2, 4); label1 = new QLabel(QObject::tr("C&onnect to: "), this); l1->addWidget(label1, 0, 1); connectto_c = new QComboBox(false, this); label1->setBuddy(connectto_c); connect(connectto_c, SIGNAL(activated(int)), SLOT(newdefaultaccount(int))); l1->addWidget(connectto_c, 0, 2); ID_Label = new QLabel(QObject::tr("&Login ID:"), this); l1->addWidget(ID_Label, 1, 1); // the entry line for usernames ID_Edit = new QLineEdit(this); ID_Label->setBuddy(ID_Edit); l1->addWidget(ID_Edit, 1, 2); connect(ID_Edit, SIGNAL(returnPressed()), this, SLOT(enterPressedInID())); QString tmp = QObject::tr("<p>Type in the username that you got from your\n" "ISP. This is especially important for PAP\n" "and CHAP. You may omit this when you use\n" "terminal-based or script-based authentication.\n" "\n" "<b>Important</b>: case is important here:\n" "<i>myusername</i> is not the same as <i>MyUserName</i>!"); QWhatsThis::add(ID_Label,tmp); QWhatsThis::add(ID_Edit,tmp); PW_Label = new QLabel(QObject::tr("&Password:"), this); l1->addWidget(PW_Label, 2, 1); PW_Edit= new QLineEdit(this); PW_Label->setBuddy(PW_Edit); PW_Edit->setEchoMode(QLineEdit::Password); l1->addWidget(PW_Edit, 2, 2); connect(PW_Edit, SIGNAL(returnPressed()), this, SLOT(enterPressedInPW())); tmp = QObject::tr("<p>Type in the password that you got from your\n" "ISP. This is especially important for PAP\n" "and CHAP. You may omit this when you use\n" "terminal-based or script-based authentication.\n" "\n" "<b>Important</b>: case is important here:\n" "<i>mypassword</i> is not the same as <i>MyPassword</i>!"); QWhatsThis::add(PW_Label,tmp); QWhatsThis::add(PW_Edit,tmp); QHBoxLayout *l3 = new QHBoxLayout; tl->addSpacing(5); tl->addLayout(l3); tl->addSpacing(5); l3->addSpacing(10); log = new QCheckBox(QObject::tr("Show lo&g window"), this); connect(log, SIGNAL(toggled(bool)), this, SLOT(log_window_toggled(bool))); log->setChecked(_pppdata->get_show_log_window()); l3->addWidget(log); QWhatsThis::add(log, QObject::tr("<p>This controls whether a log window is shown.\n" "A log window shows the communication between\n" "<i>kppp</i> and your modem. This will help you\n" "in tracking down problems.\n" "\n" "Turn it off if <i>kppp</i> routinely connects without\n" "problems")); // fline = new QSeparator( KSeparator::HLine, this); // tl->addWidget(fline); QHBoxLayout *l2 = new QHBoxLayout(this); tl->addLayout(l2); int minw = 0; quit_b = new QPushButton(QObject::tr("&Quit"), this); // quit_b-> setGuiItem (KGuiItem(QObject::tr("&Quit"), "exit" ) ); connect( quit_b, SIGNAL(clicked()), SLOT(quitbutton())); if(quit_b->sizeHint().width() > minw) minw = quit_b->sizeHint().width(); setup_b = new QPushButton(QObject::tr("&Setup..."), this); // setup_b->setGuiItem (KGuiItem(QObject::tr("&Setup...")) ); connect( setup_b, SIGNAL(clicked()), SLOT(expandbutton())); if(setup_b->sizeHint().width() > minw) minw = setup_b->sizeHint().width(); // if(_pppdata->access() != KConfig::ReadWrite) // setup_b->setEnabled(false); // help_b = new QPushButton(QObject::tr("&Help"), this); // connect( help_b, SIGNAL(clicked()), SLOT(helpbutton())); // KHelpMenu *helpMenu = new KHelpMenu(this, KGlobal::instance()->aboutData(), true); // help_b->setPopup((QPopupMenu*)helpMenu->menu()); // help_b->setGuiItem (KGuiItem(QObject::tr("&Help"), "help" ) ); // if(help_b->sizeHint().width() > minw) // minw = help_b->sizeHint().width(); connect_b = new QPushButton(QObject::tr("&Connect"), this); connect_b->setDefault(true); connect_b->setFocus(); connect(connect_b, SIGNAL(clicked()), SLOT(beginConnect())); if(connect_b->sizeHint().width() > minw) minw = connect_b->sizeHint().width(); quit_b->setFixedWidth(minw); setup_b->setFixedWidth(minw); // help_b->setFixedWidth(help_b->sizeHint().width()); connect_b->setFixedWidth(minw); l2->addWidget(quit_b); l2->addWidget(setup_b); // l2->addWidget(help_b); l2->addSpacing(20); l2->addWidget(connect_b); setFixedSize(sizeHint()); (void)new Modem(_pppdata); // we also connect cmld_start to the beginConnect so that I can run // the dialer through a command line argument connect(this,SIGNAL(cmdl_start()),this,SLOT(beginConnect())); // stats = new PPPStats; // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); // constructor of con_win reads position from config file con_win = new ConWindow(_pppdata, 0, "conw", this); // KWin::setIcons(con_win->winId(), kapp->icon(), kapp->miniIcon()); // statdlg = new PPPStatsDlg(0, "stats", this, stats); // statdlg->hide(); // load up the accounts combo box // resetaccounts(); con = new ConnectWidget(_pppdata, 0, "con"); //KWin::setIcons(con->winId(), kapp->icon(), kapp->miniIcon() ); connect(this, SIGNAL(begin_connect()),con, SLOT(preinit())); // Is this the best we can do here? it's not right. // QRect desk = QApplication::desktop()->screenGeometry( // QApplication::desktop()->screenNumber(topLevelWidget())); // con->setGeometry(desk.center().x()-175, desk.center().y()-55, 350,110); // connect the ConnectWidgets various signals connect(con, SIGNAL(startAccounting()), this, SLOT(startAccounting())); connect(con, SIGNAL(stopAccounting()), this, SLOT(stopAccounting())); connect(qApp, SIGNAL(saveYourself()), this, SLOT(saveMyself())); connect(qApp, SIGNAL(shutDown()), this, SLOT(shutDown())); // KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); // m_strCmdlAccount = args->getOption("c"); // m_bQuitOnDisconnect = args->isSet("q"); // if(!m_strCmdlAccount.isEmpty()) { // m_bCmdlAccount = true; // kdDebug(5002) << "cmdl_account: " << m_bCmdlAccount << endl; // } // if(m_bCmdlAccount){ // bool result = _pppdata->setAccount(m_strCmdlAccount); // if (!result){ // QString string; // string = QObject::tr("No such Account:\n%1").arg(m_strCmdlAccount); // KMessageBox::error(this, string); // m_bCmdlAccount = false; // this->show(); // } else { // beginConnect(); // } // } else // expandbutton(); // show(); //#define KPPP_SHOW_NEWS #ifdef KPPP_SHOW_NEWS // keep user informed about recent changes if(!m_bCmdlAccount) showNews(); #endif } KPPPWidget::~KPPPWidget() { p_kppp = 0; // delete stats; } // bool KPPPWidget::eventFilter(QObject *o, QEvent *e) { // if(e->type() == QEvent::User) { // switch(((SignalEvent*)e)->sigType()) { // case SIGINT: // qDebug( "Received a SIGINT" ); // interruptConnection(); // break; // case SIGCHLD: // sigChld(); // break; // case SIGUSR1: // sigPPPDDied(); // break; // } // return true; // } // if(o == connect_b) { // if(e->type() == QEvent::KeyPress) { // if(connect_b->hasFocus() && ((QKeyEvent *)e)->key() == Qt::Key_Return) { // beginConnect(); // return true; // } // } // } // return false; // } void KPPPWidget::enterPressedInID() { PW_Edit->setFocus(); } void KPPPWidget::enterPressedInPW() { connect_b->setFocus(); } // triggered by the session manager void KPPPWidget::saveMyself() { _pppdata->save(); } void KPPPWidget::shutDown() { interruptConnection(); saveMyself(); } void KPPPWidget::log_window_toggled(bool on) { _pppdata->set_show_log_window(on); } // void KPPPWidget::resetaccounts() { // connectto_c->clear(); // int count = _pppdata->count(); // // enable/disable controls // connectto_c->setEnabled(count > 0); // connect_b->setEnabled(count > 0); // log->setEnabled(count > 0); // ID_Edit->setEnabled(count > 0); // PW_Edit->setEnabled(count > 0); // //load the accounts // for(int i=0; i < count; i++) { // _pppdata->setAccountbyIndex(i); // connectto_c->insertItem(_pppdata->accname()); // } // //set the default account // if(!_pppdata->defaultAccount().isEmpty()) { // for(int i=0; i < count; i++) // if(_pppdata->defaultAccount() == connectto_c->text(i)) { // connectto_c->setCurrentItem(i); // _pppdata->setAccountbyIndex(i); // ID_Edit->setText(_pppdata->storedUsername()); // PW_Edit->setText(_pppdata->storedPassword()); // } // } // else // if(count > 0) { // _pppdata->setDefaultAccount(connectto_c->text(0)); // _pppdata->save(); // ID_Edit->setText(_pppdata->storedUsername()); // PW_Edit->setText(_pppdata->storedPassword()); // } -// connect(ID_Edit, SIGNAL(textChanged(const QString &)), -// this, SLOT(usernameChanged(const QString &))); +// connect(ID_Edit, SIGNAL(textChanged(const QString&)), +// this, SLOT(usernameChanged(const QString&))); -// connect(PW_Edit, SIGNAL(textChanged(const QString &)), -// this, SLOT(passwordChanged(const QString &))); +// connect(PW_Edit, SIGNAL(textChanged(const QString&)), +// this, SLOT(passwordChanged(const QString&))); // if (ID_Edit->text().isEmpty()) // ID_Edit->setFocus(); // else if (PW_Edit->text().isEmpty()) // PW_Edit->setFocus(); // } void KPPPWidget::interruptConnection() { // interrupt dial up // if (con->isVisible()) emit con->cancelbutton(); // disconnect if online if (_pppdata->pppdRunning()) emit disconnect(); } void KPPPWidget::sigPPPDDied() { qDebug( "Received a SIGUSR1" ); // if we are not connected pppdpid is -1 so have have to check for that // in the followin line to make sure that we don't raise a false alarm // such as would be the case when the log file viewer exits. if(_pppdata->pppdRunning() || _pppdata->pppdError()) { qDebug( "It was pppd that died" ); // when we killpppd() on Cancel in ConnectWidget // we set pppid to -1 so we won't // enter this block // just to be sure Modem::modem->removeSecret(AUTH_PAP); Modem::modem->removeSecret(AUTH_CHAP); _pppdata->setpppdRunning(false); qDebug( "Executing command on disconnect since pppd has died." ); QApplication::flushX(); execute_command(_pppdata->command_on_disconnect()); // stopAccounting(); con_win->stopClock(); // DockWidget::dock_widget->stop_stats(); // DockWidget::dock_widget->hide(); if(!_pppdata->pppdError()) _pppdata->setpppdError(E_PPPD_DIED); removedns(); Modem::modem->unlockdevice(); // con->pppdDied(); if(!_pppdata->automatic_redial()) { quit_b->setFocus(); show(); con_win->stopClock(); // stopAccounting(); con_win->hide(); con->hide(); _pppdata->setpppdRunning(false); // // not in a signal handler !!! KNotifyClient::beep(); QString msg; if (_pppdata->pppdError() == E_IF_TIMEOUT) msg = QObject::tr("Timeout expired while waiting for the PPP interface " "to come up!"); else { msg = QObject::tr("<p>The pppd daemon died unexpectedly!</p>"); Modem::modem->pppdExitStatus(); if (Modem::modem->lastStatus != 99) { // more recent pppds only msg += QObject::tr("<p>Exit status: %1").arg(Modem::modem->lastStatus); msg += QObject::tr("</p><p>See 'man pppd' for an explanation of the error " "codes or take a look at the kppp FAQ on " " <a href=http://devel-home.kde.org/~kppp/index.html>" "http://devel-home.kde.org/~kppp/index.html</a></p>"); } } // if(QMessageBox::warning(0, msg, QObject::tr("Error"), QObject::tr("&OK"), QObject::tr("&Details...")) == QMessageBox::No) // // PPPL_ShowLog(); // } else { /* reconnect on disconnect */ if (false){ qDebug( "Trying to reconnect... " ); if(_pppdata->authMethod() == AUTH_PAP || _pppdata->authMethod() == AUTH_CHAP || _pppdata->authMethod() == AUTH_PAPCHAP) Modem::modem->setSecret(_pppdata->authMethod(), encodeWord(_pppdata->storedUsername()), encodeWord(_pppdata->password())); con_win->hide(); con_win->stopClock(); // stopAccounting(); _pppdata->setpppdRunning(false); // not in a signal handler !!! KNotifyClient::beep(); emit cmdl_start(); } } _pppdata->setpppdError(0); } } // void KPPPWidget::sigChld() { // qDebug( "sigchld()" ); // // pid_t id = wait(0L); // // if(id == helperPid && helperPid != -1) { // // kdDebug(5002) << "It was the setuid child that died" << endl; // // helperPid = -1; // QString msg = QObject::tr("kppp's helper process just died.\n" // "Since a further execution would be pointless, " // "kppp will shut down now."); // QMessageBox::warning(0L,"error", msg); // //remove_pidfile(); // exit(1); // // } // } void KPPPWidget::newdefaultaccount(int i) { _pppdata->setDefaultAccount(connectto_c->text(i)); _pppdata->save(); ID_Edit->setText(_pppdata->storedUsername()); PW_Edit->setText(_pppdata->storedPassword()); } void KPPPWidget::beginConnect() { // make sure to connect to the account that is selected in the combo box // (exeption: an account given by a command line argument) // if(!m_bCmdlAccount) { // _pppdata->setAccount(connectto_c->currentText()); // _pppdata->setPassword(PW_Edit->text()); // } else { _pppdata->setPassword(_pppdata->storedPassword()); // } QFileInfo info(pppdPath()); if(!info.exists()){ QMessageBox::warning(this, "error", QObject::tr("Cannot find the PPP daemon!\n" "Make sure that pppd is installed and " "that you have entered the correct path.")); return; } #if 0 if(!info.isExecutable()){ QString string; string = QObject::tr("kppp cannot execute:\n %1\n" "Please make sure that you have given kppp " "setuid permission and that " "pppd is executable.").arg(_pppdata->pppdPath()); KMessageBox::error(this, string); return; } #endif QFileInfo info2(_pppdata->modemDevice()); if(!info2.exists()){ QString string; string = QObject::tr("kppp can not find:\n %1\nPlease make sure you have setup " "your modem device properly " "and/or adjust the location of the modem device on " "the modem tab of " "the setup dialog.").arg(_pppdata->modemDevice()); QMessageBox::warning(this, "error", string); return; } // if this is a PAP or CHAP account, ensure that username is // supplied if(_pppdata->authMethod() == AUTH_PAP || _pppdata->authMethod() == AUTH_CHAP || _pppdata->authMethod() == AUTH_PAPCHAP ) { if(ID_Edit->text().isEmpty()) { QMessageBox::warning(this,"error", QObject::tr("You have selected the authentication method PAP or CHAP. This requires that you supply a username and a password!")); return; } else { if(!Modem::modem->setSecret(_pppdata->authMethod(), encodeWord(_pppdata->storedUsername()), encodeWord(_pppdata->password()))) { QString s; s = QObject::tr("Cannot create PAP/CHAP authentication\n" "file \"%1\"").arg(PAP_AUTH_FILE); QMessageBox::warning(this, "error", s); return; } } } if (_pppdata->phonenumber().isEmpty()) { QString s = QObject::tr("You must specify a telephone number!"); QMessageBox::warning(this, "error", s); return; } this->hide(); QString tit = QObject::tr("Connecting to: %1").arg(_pppdata->accname()); // con->setCaption(tit); // con->show(); emit begin_connect(); } void KPPPWidget::disconnect() { if (!_pppdata->command_before_disconnect().isEmpty()) { con_win->hide(); con->show(); con->setCaption(QObject::tr("Disconnecting...")); con->setMsg(QObject::tr("Executing command before disconnection.")); qApp->processEvents(); QApplication::flushX(); // pid_t id = execute_command(_pppdata->command_before_disconnect()); // int i, status; // do { // kapp->processEvents(); // i = waitpid(id, &status, WNOHANG); // usleep(500000); // } while (i == 0 && errno == 0); con->hide(); } qApp->processEvents(); // statdlg->stop_stats(); Modem::modem->killPPPDaemon(); QApplication::flushX(); execute_command(_pppdata->command_on_disconnect()); Modem::modem->removeSecret(AUTH_PAP); Modem::modem->removeSecret(AUTH_CHAP); removedns(); Modem::modem->unlockdevice(); con_win->stopClock(); // p_kppp->stopAccounting(); con_win->hide(); // DockWidget::dock_widget->stop_stats(); // DockWidget::dock_widget->hide(); // if(m_bQuitOnDisconnect) // kapp->exit(0); // else { this->quit_b->setFocus(); this->show(); // } } // void KPPPWidget::helpbutton() { // kapp->invokeHelp(); // } void KPPPWidget::quitbutton() { if(_pppdata->pppdRunning()) { int ok = QMessageBox::warning(this, QObject::tr("Exiting kPPP will close your PPP Session."), QObject::tr("Quit kPPP?")); if(ok == QMessageBox::Yes) { Modem::modem->killPPPDaemon(); QApplication::flushX(); execute_command(_pppdata->command_on_disconnect()); removedns(); Modem::modem->unlockdevice(); } } else { if (!_pppdata->accname().isEmpty() && !_pppdata->storePassword()) _pppdata->setStoredPassword(""); } _pppdata->save(); qApp->quit(); } // void KPPPWidget::rulesetLoadError() { // QMessageBox::warning(this,"error", ruleset_load_errmsg); // } // void KPPPWidget::startAccounting() { // // volume accounting // stats->totalbytes = 0; // kdDebug() << "AcctEnabled: " << _pppdata->AcctEnabled() << endl; // // load the ruleset // if(!_pppdata->AcctEnabled()) // return; // QString d = AccountingBase::getAccountingFile(_pppdata->accountingFile()); // // if(::access(d.data(), X_OK) != 0) // acct = new Accounting(this, stats); // // else // // acct = new ExecutableAccounting(this); // // connect to the accounting object -// connect(acct, SIGNAL(changed(QString, QString)), -// con_win, SLOT(slotAccounting(QString, QString))); +// connect(acct, SIGNAL(changed(QString,QString)), +// con_win, SLOT(slotAccounting(QString,QString))); // // if(!acct->loadRuleSet(_pppdata->accountingFile())) { // // QString s= QObject::tr("Can not load the accounting " // // "ruleset \"%1\"!").arg(_pppdata->accountingFile()); // // starting the messagebox with a timer will prevent us // // from blocking the calling function ConnectWidget::timerEvent // ruleset_load_errmsg = s; // QTimer::singleShot(0, this, SLOT(rulesetLoadError())); // return; // } // //else // // acct->slotStart(); // } // void KPPPWidget::stopAccounting() { // // store volume accounting // // if(stats->totalbytes != 0) // // _pppdata->setTotalBytes(stats->totalbytes); // if(!_pppdata->AcctEnabled()) // return; // // if(acct != 0) { // // acct->slotStop(); // // delete acct; // // acct = 0; // // } // } // void KPPPWidget::showStats() { // if(statdlg) { // statdlg->show(); // statdlg->raise(); // } // } void KPPPWidget::usernameChanged(const QString &) { // store username for later use _pppdata->setStoredUsername(ID_Edit->text()); } void KPPPWidget::passwordChanged(const QString &) { // store the password if so requested if(_pppdata->storePassword()) _pppdata->setStoredPassword(PW_Edit->text()); else _pppdata->setStoredPassword(""); } void KPPPWidget::setPW_Edit(const QString &pw) { PW_Edit->setText(pw); } // void KPPPWidget::resetCosts(const QString &s) { // AccountingBase::resetCosts(s); // } // void KPPPWidget::resetVolume(const QString &s) { // AccountingBase::resetVolume(s); // } /** * pppd's getword() function knows about escape characters. * If we write the username and password to the secrets file * we'll therefore have to escape back slashes. */ QString KPPPWidget::encodeWord(const QString &s) { QString r = s; r.replace(QRegExp("\\"), "\\\\"); return r; } // void KPPPWidget::setQuitOnDisconnect (bool b) // { // m_bQuitOnDisconnect = b; // } void KPPPWidget::showNews() { #ifdef KPPP_SHOW_NEWS /* * Introduce the QuickHelp feature to new users of this version */ #define QUICKHELP_HINT "Hint_QuickHelp" if(_pppdata->readNumConfig(GENERAL_GRP, QUICKHELP_HINT, 0) == 0) { QDialog dlg(0, 0, true); dlg.setCaption(QObject::tr("Recent Changes in KPPP")); QVBoxLayout *tl = new QVBoxLayout(&dlg, 10, 10); QHBoxLayout *l1 = new QHBoxLayout(10); QVBoxLayout *l2 = new QVBoxLayout(10); tl->addLayout(l1); QLabel *icon = new QLabel(&dlg); icon->setPixmap(BarIcon("exclamation")); icon->setFixedSize(icon->sizeHint()); l1->addWidget(icon); l1->addLayout(l2); QLabel *l = new QLabel(QObject::tr("From version 1.4.8 on, kppp has a new feature\n" "called \"Quickhelp\". It's similar to a tooltip,\n" "but you can activate it whenever you want.\n" "\n" "To activate it, simply click on a control like\n" "a button or a label with the right mouse button.\n" "If the item supports Quickhelp, a popup menu\n" "will appear leading to Quickhelp.\n" "\n" "To test it, right-click somewhere in this text."), &dlg); QCheckBox *cb = new QCheckBox(QObject::tr("Don't show this hint again"), &dlg); cb->setFixedSize(cb->sizeHint()); KButtonBox *bbox = new KButtonBox(&dlg); bbox->addStretch(1); QPushButton *ok = bbox->addButton(QObject::tr("OK")); ok->setDefault(true); dlg.connect(ok, SIGNAL(clicked()), &dlg, SLOT(accept())); bbox->addStretch(1); bbox->layout(); l2->addWidget(l); l2->addWidget(cb); tl->addWidget(bbox); QString tmp = QObject::tr("This is an example of <b>QuickHelp</b>.\n" "This window will stay open until you\n" "click a mouse button or a press a key.\n"); QWhatsThis::add(cb,tmp); QWhatsThis::add(l, tmp); dlg.exec(); if(cb->isChecked()) { _pppdata->writeConfig(GENERAL_GRP, QUICKHELP_HINT, 1); _pppdata->save(); } } #endif } //#include "kpppwidget.moc" diff --git a/noncore/settings/networksettings/ppp/pppdargs.cpp b/noncore/settings/networksettings/ppp/pppdargs.cpp index 66a4d82..d6d8d88 100644 --- a/noncore/settings/networksettings/ppp/pppdargs.cpp +++ b/noncore/settings/networksettings/ppp/pppdargs.cpp @@ -1,151 +1,151 @@ /* * kPPP: A pppd front end for the KDE project * * $Id$ * * Copyright (C) 1997 Bernd Johannes Wuebben * wuebben@math.cornell.edu * * based on EzPPP: * Copyright (C) 1997 Jay Painter * * * 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 program; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include <qlayout.h> #include <qbuttongroup.h> #include <qapplication.h> #include "pppdargs.h" #include "pppdata.h" PPPdArguments::PPPdArguments( PPPData *pd, QWidget *parent, const char *name) : QDialog(parent, name, TRUE), _pppdata(pd) { setCaption(tr("Customize pppd Arguments")); // KWin::setIcons(winId(), kapp->icon(), kapp->miniIcon()); QVBoxLayout *l = new QVBoxLayout(this, 10, 10); QHBoxLayout *tl = new QHBoxLayout(10); l->addLayout(tl); QVBoxLayout *l1 = new QVBoxLayout(); QVBoxLayout *l2 = new QVBoxLayout(); tl->addLayout(l1, 1); tl->addLayout(l2, 0); QHBoxLayout *l11 = new QHBoxLayout(10); l1->addLayout(l11); argument_label = new QLabel(tr("Argument:"), this); l11->addWidget(argument_label); argument = new QLineEdit(this); connect(argument, SIGNAL(returnPressed()), SLOT(addbutton())); l11->addWidget(argument); - connect(argument, SIGNAL(textChanged(const QString &)), - this, SLOT(textChanged(const QString &))); + connect(argument, SIGNAL(textChanged(const QString&)), + this, SLOT(textChanged(const QString&))); arguments = new QListBox(this); arguments->setMinimumSize(1, fontMetrics().lineSpacing()*10); connect(arguments, SIGNAL(highlighted(int)), this, SLOT(itemSelected(int))); l1->addWidget(arguments, 1); add = new QPushButton(tr("Add"), this); connect(add, SIGNAL(clicked()), SLOT(addbutton())); l2->addWidget(add); l2->addStretch(1); remove = new QPushButton(tr("Remove"), this); connect(remove, SIGNAL(clicked()), SLOT(removebutton())); l2->addWidget(remove); defaults = new QPushButton(tr("Defaults"), this); connect(defaults, SIGNAL(clicked()), SLOT(defaultsbutton())); l2->addWidget(defaults); l->addSpacing(5); //load info from gpppdata init(); add->setEnabled(false); remove->setEnabled(false); argument->setFocus(); } void PPPdArguments::addbutton() { if(!argument->text().isEmpty() && arguments->count() < MAX_PPPD_ARGUMENTS) { arguments->insertItem(argument->text()); argument->setText(""); } } void PPPdArguments::removebutton() { if(arguments->currentItem() >= 0) arguments->removeItem(arguments->currentItem()); } void PPPdArguments::defaultsbutton() { // all of this is a hack // save current list QStringList arglist(_pppdata->pppdArgument()); // get defaults _pppdata->setpppdArgumentDefaults(); init(); // restore old list _pppdata->setpppdArgument(arglist); } void PPPdArguments::accept() { QStringList arglist; for(uint i=0; i < arguments->count(); i++) arglist.append(arguments->text(i)); _pppdata->setpppdArgument(arglist); QDialog::accept(); } void PPPdArguments::init() { while(arguments->count()) arguments->removeItem(0); QStringList &arglist = _pppdata->pppdArgument(); for ( QStringList::Iterator it = arglist.begin(); it != arglist.end(); ++it ) arguments->insertItem(*it); } void PPPdArguments::textChanged(const QString &s) { add->setEnabled(s.length() > 0); } void PPPdArguments::itemSelected(int idx) { remove->setEnabled(idx != -1); } diff --git a/noncore/settings/networksettings/wlan/wlanimp2.cpp b/noncore/settings/networksettings/wlan/wlanimp2.cpp index 92339d6..dd1db28 100644 --- a/noncore/settings/networksettings/wlan/wlanimp2.cpp +++ b/noncore/settings/networksettings/wlan/wlanimp2.cpp @@ -1,441 +1,441 @@ #include "wlanimp2.h" #include "keyedit.h" #include "interfacesetupimp.h" #include "../interfaces/interface.h" #include <assert.h> #include <errno.h> #include <string.h> #include <qapplication.h> #include <qfile.h> #include <qdir.h> #include <qdialog.h> #include <qtextstream.h> #include <qmessagebox.h> #include <qlineedit.h> #include <qlabel.h> #include <qspinbox.h> #include <qradiobutton.h> #include <qpushbutton.h> #include <qcheckbox.h> #include <qtabwidget.h> #include <qcombobox.h> #include <qlistview.h> #include <qvbox.h> #include <qprogressbar.h> #ifdef QWS #include <qpe/resource.h> #include <opie2/oprocess.h> #include <opie2/onetwork.h> #include <opie2/opcap.h> #else #define OProcess KProcess #include <kprocess.h> #endif #define WIRELESS_OPTS "/etc/pcmcia/wireless.opts" #define PREUP "/etc/network/if-pre-up.d/wireless-tools" /** * Constructor, read in the wireless.opts file for parsing later. */ WLANImp::WLANImp( QWidget* parent, const char* name, Interface *i, bool modal, WFlags fl) : WLAN(parent, name, modal, fl), interface(i), currentProfile("*") { interfaces = new Interfaces(); interfaceSetup = new InterfaceSetupImp(tabWidget, "InterfaceSetupImp", i, interfaces); tabWidget->insertTab(interfaceSetup, "TCP/IP"); // Check sanity - the existance of the wireless-tools if-pre-up script QFile file(QString(PREUP)); if (file.exists()) { qWarning(QString("WLANImp: Unable to open /etc/network/if-pre-up.d/wireless-tools")); } connect( rescanButton, SIGNAL( clicked() ), this, SLOT( rescanNeighbourhood() ) ); - connect( netView, SIGNAL( clicked( QListViewItem* ) ), this, SLOT( selectNetwork( QListViewItem* ) ) ); + connect( netView, SIGNAL( clicked(QListViewItem*) ), this, SLOT( selectNetwork(QListViewItem*) ) ); netView->setColumnAlignment( col_chn, AlignCenter ); netView->setItemMargin( 3 ); netView->setAllColumnsShowFocus( true ); } WLANImp::~WLANImp() { //FIXME: delete interfaces; } /** * Change the profile for both wireless settings and network settings. */ void WLANImp::setProfile(const QString &profile){ interfaceSetup->setProfile(profile); parseOpts(); } void WLANImp::parseOpts() { bool error; QString opt; if (! interfaces->isInterfaceSet()) return; opt = interfaces->getInterfaceOption("wireless_essid", error); if(opt == "any" || opt == "off" || opt.isNull()){ essid->setEditText("any"); } else { essid->setEditText(opt); } opt = interfaces->getInterfaceOption("wireless_mode", error).simplifyWhiteSpace(); for ( int i = 0; i < mode->count(); i++) if ( mode->text( i ) == opt ) mode->setCurrentItem( i ); opt = interfaces->getInterfaceOption("wireless_ap", error).simplifyWhiteSpace(); if (! opt.isNull()) { specifyAp->setChecked(true); macEdit->setText(opt); } opt = interfaces->getInterfaceOption("wireless_channel", error).simplifyWhiteSpace(); if (! opt.isNull()) { specifyChan->setChecked(true); networkChannel->setValue(opt.toInt()); } opt = interfaces->getInterfaceOption("wireless_key", error).simplifyWhiteSpace(); if (opt.isNull()) opt = interfaces->getInterfaceOption("wireless_enc", error).simplifyWhiteSpace(); parseKeyStr(opt); } void WLANImp::parseKeyStr(QString keystr) { int loc = 0; int index = 1; QString key; QStringList keys = QStringList::split(QRegExp("\\s+"), keystr); int enc = -1; // encryption state for (QStringList::Iterator it = keys.begin(); it != keys.end(); ++it) { if ((*it).left(3) == "off") { // encryption disabled enc = 0; } else if ((*it).left(2) == "on") { // encryption enabled enc = 1; } else if ((*it).left(4) == "open") { // open mode, accept non encrypted packets acceptNonEnc->setChecked(true); } else if ((*it).left(10) == "restricted") { // restricted mode, only accept encrypted packets rejectNonEnc->setChecked(true); } else if ((*it).left(3) == "key") { // new set of options } else if ((*it).left(1) == "[") { index = (*it).mid(1, 1).toInt(); // switch current key to index switch (index) { case 1: keyRadio0->setChecked(true); break; case 2: keyRadio1->setChecked(true); break; case 3: keyRadio2->setChecked(true); break; case 4: keyRadio3->setChecked(true); break; } } else { // key key = (*it); } if (! key.isNull()) { if (enc == -1) enc = 1; QStringList::Iterator next = ++it; if (it == keys.end()) { break; } if ((*(next)).left(1) == "[") { // set key at index index = (*(next)).mid(1, 1).toInt(); } else { index = 1; } switch (index) { case 1: keyLineEdit0->setText(key); break; case 2: keyLineEdit1->setText(key); break; case 3: keyLineEdit2->setText(key); break; case 4: keyLineEdit3->setText(key); break; } key = QString::null; } } if (enc == 1) { wepEnabled->setChecked(true); } else { wepEnabled->setChecked(false); } } /** * Check to see if the current config is valid * Save interfaces */ void WLANImp::accept() { if (wepEnabled->isChecked()) { if ((keyRadio0->isChecked() && keyLineEdit0->text().isEmpty()) || (keyRadio1->isChecked() && keyLineEdit1->text().isEmpty()) || (keyRadio2->isChecked() && keyLineEdit2->text().isEmpty()) || (keyRadio3->isChecked() && keyLineEdit3->text().isEmpty())) { QMessageBox::information(this, "Error", "Please enter a WEP key.", QMessageBox::Ok); return; } } if (essid->currentText().isEmpty()) { QMessageBox::information(this, "Error", "Please select/enter an ESSID.", QMessageBox::Ok); return; } if (specifyAp->isChecked() && macEdit->text().isEmpty()) { QMessageBox::information(this, "Error", "Please enter the MAC address of the Access Point.", QMessageBox::Ok); return; } // Try to save the interfaces settings. writeOpts(); // Close out the dialog // FIXME: QDialog::accept(); } void WLANImp::writeOpts() { // eh can't really do anything about it other then return. :-D if(!interfaces->isInterfaceSet()){ QMessageBox::warning(0,"Inface not set","should not happen!!!"); return; } bool error = false; qDebug("setting wlan interface %s", interfaces->getInterfaceName( error ).latin1() ); if (error) QMessageBox::warning(0,"Inface not set","should not happen!!!"); interfaces->setInterfaceOption(QString("wireless_mode"), mode->currentText()); interfaces->setInterfaceOption(QString("wireless_essid"), essid->currentText()); if (specifyAp->isChecked()) { interfaces->setInterfaceOption(QString("wireless_ap"), macEdit->text()); } else { interfaces->removeInterfaceOption(QString("wireless_ap")); } if (specifyChan->isChecked()) { interfaces->setInterfaceOption(QString("wireless_channel"), networkChannel->text()); } else { interfaces->removeInterfaceOption(QString("wireless_channel")); } if (wepEnabled->isChecked()) { QStringList keyList; if (! keyLineEdit0->text().isNull()) { keyList += keyLineEdit0->text(); keyList += "[1]"; } //else if (! keyLineEdit1->text().isNull()) { keyList += keyLineEdit1->text(); keyList += "[2]"; } //else if (! keyLineEdit2->text().isNull()) { keyList += keyLineEdit2->text(); keyList += "[3]"; } //else if (! keyLineEdit3->text().isNull()) { keyList += keyLineEdit3->text(); keyList += "[4]"; } if (acceptNonEnc->isChecked()) { keyList += "open"; } else { keyList += "restricted"; } keyList += "key"; if (keyRadio0->isChecked()) { keyList += "[1]"; } else if (keyRadio1->isChecked()) { keyList += "[2]"; } else if (keyRadio2->isChecked()) { keyList += "[3]"; } else if (keyRadio3->isChecked()) { keyList += "[4]"; } interfaces->setInterfaceOption(QString("wireless_key"), keyList.join(QString(" "))); } else { interfaces->removeInterfaceOption(QString("wireless_key")); } interfaces->removeInterfaceOption(QString("wireless_enc")); if(!interfaceSetup->saveChanges()) return; QDialog::accept(); } /* * Scan for possible wireless networks around... * ... powered by Wellenreiter II technology (C) Michael 'Mickey' Lauer <mickeyl@handhelds.org> */ void WLANImp::rescanNeighbourhood() { QString name = interface->getInterfaceName(); qDebug( "rescanNeighbourhood via '%s'", (const char*) name ); OWirelessNetworkInterface* wiface = static_cast<OWirelessNetworkInterface*>( ONetwork::instance()->interface( name ) ); assert( wiface ); // try to guess device type QString devicetype; QFile m( "/proc/modules" ); if ( m.open( IO_ReadOnly ) ) { QString line; QTextStream modules( &m ); while( !modules.atEnd() && !devicetype ) { modules >> line; if ( line.contains( "cisco" ) ) devicetype = "cisco"; else if ( line.contains( "hostap" ) ) devicetype = "hostap"; else if ( line.contains( "prism" ) ) devicetype = "wlan-ng"; /* puke */ else if ( line.contains( "orinoco" ) ) devicetype = "orinoco"; } } if ( devicetype.isEmpty() ) { qWarning( "rescanNeighbourhood(): couldn't guess device type :(" ); return; } else { qDebug( "rescanNeighbourhood(): device type seems to be '%s'", (const char*) devicetype ); } // configure interface to receive 802.11 management frames wiface->setUp( true ); wiface->setPromiscuousMode( true ); if ( devicetype == "cisco" ) wiface->setMonitoring( new OCiscoMonitoringInterface( wiface, false ) ); else if ( devicetype == "hostap" ) wiface->setMonitoring( new OHostAPMonitoringInterface( wiface, false ) ); else if ( devicetype == "wlan-ng" ) wiface->setMonitoring( new OWlanNGMonitoringInterface( wiface, false ) ); else if ( devicetype == "orinoco" ) wiface->setMonitoring( new OOrinocoMonitoringInterface( wiface, false ) ); else { qDebug( "rescanNeighbourhood(): unsupported device type for monitoring :(" ); return; } wiface->setMode( "monitor" ); if ( wiface->mode() != "monitor" ) { qWarning( "rescanNeighbourhood(): Unable to bring device into monitor mode (%s).", strerror( errno ) ); return; } // open a packet capturer OPacketCapturer* cap = new OPacketCapturer(); cap->open( name ); if ( !cap->isOpen() ) { qWarning( "rescanNeighbourhood(): Unable to open libpcap (%s).", strerror( errno ) ); return; } // display splash screen QFrame* splash = new QFrame( this, "splash", false, WStyle_StaysOnTop | WStyle_DialogBorder | WStyle_Customize ); splash->setLineWidth( 2 ); splash->setFrameStyle( QFrame::Panel | QFrame::Raised ); QVBoxLayout* vbox = new QVBoxLayout( splash, 4, 4 ); QLabel* lab = new QLabel( "<center><b>Scanning...</b><br>Please Wait...</center>", splash ); QProgressBar* pb = new QProgressBar( wiface->channels(), splash ); vbox->addWidget( lab ); vbox->addWidget( pb ); pb->setCenterIndicator( true ); pb->setFixedHeight( pb->sizeHint().height() ); QWidget* widgetDesktop = qApp->desktop(); int dw = widgetDesktop->width(); int dh = widgetDesktop->height(); int pw = vbox->sizeHint().width(); int ph = vbox->sizeHint().height(); splash->setGeometry((dw-pw)/2,(dh-ph)/2,pw,ph); splash->show(); splash->raise(); qApp->processEvents(); // set capturer to non-blocking mode cap->setBlocking( false ); for ( int i = 1; i <= wiface->channels(); ++i ) { wiface->setChannel( i ); pb->setProgress( i ); qApp->processEvents(); qDebug( "rescanNeighbourhood(): listening on channel %d...", i ); OPacket* p = cap->next( 1000 ); if ( !p ) { qDebug( "rescanNeighbourhood(): nothing received on channel %d", i ); } else { qDebug( "rescanNeighbourhood(): TADAA - something came in on channel %d", i ); handlePacket( p ); } } cap->close(); wiface->setMode( "managed" ); // TODO: use previous mode wiface->setPromiscuousMode( false ); splash->hide(); delete splash; } void WLANImp::handlePacket( OPacket* p ) { // check if we received a beacon frame OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( p->child( "802.11 Management" ) ); if ( beacon && beacon->managementType() == "Beacon" ) { QString type; if ( beacon->canIBSS() ) { type = "adhoc"; } else if ( beacon->canESS() ) { type = "managed"; } else { qWarning( "handlePacket(): invalid frame [possibly noise] detected!" ); return; diff --git a/noncore/settings/packagemanager/filterdlg.cpp b/noncore/settings/packagemanager/filterdlg.cpp index 0da9d19..eeed398 100644 --- a/noncore/settings/packagemanager/filterdlg.cpp +++ b/noncore/settings/packagemanager/filterdlg.cpp @@ -1,179 +1,179 @@ /* This file is part of the OPIE Project =. Copyright (c) 2003 Dan Williams <drw@handhelds.org> .=l. .>+-= _;:, .> :=|. 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 "filterdlg.h" FilterDlg::FilterDlg( QWidget *parent, OPackageManager *pm, const QString &name, const QString &server, const QString &destination, OPackageManager::Status status, const QString &category ) : QDialog( parent, QString::null, true ) { setCaption( tr( "Filter packages" ) ); QVBoxLayout *layout = new QVBoxLayout( this ); QScrollView *sv = new QScrollView( this ); layout->addWidget( sv, 0, 0 ); sv->setResizePolicy( QScrollView::AutoOneFit ); sv->setFrameStyle( QFrame::NoFrame ); QWidget *container = new QWidget( sv->viewport() ); sv->addChild( container ); layout = new QVBoxLayout( container, 4, 4 ); // Category m_categoryCB = new QCheckBox( tr( "Category:" ), container ); connect( m_categoryCB, SIGNAL(toggled(bool)), this, SLOT(slotCategorySelected(bool)) ); m_category = new QComboBox( container ); m_category->insertStringList( pm->categories() ); initItem( m_category, m_categoryCB, category ); layout->addWidget( m_categoryCB ); layout->addWidget( m_category ); // Package name m_nameCB = new QCheckBox( tr( "Names containing:" ), container ); connect( m_nameCB, SIGNAL(toggled(bool)), this, SLOT(slotNameSelected(bool)) ); m_name = new QLineEdit( name, container ); if ( !name.isNull() ) m_nameCB->setChecked( true ); m_name->setEnabled( !name.isNull() ); layout->addWidget( m_nameCB ); layout->addWidget( m_name ); // Status m_statusCB = new QCheckBox( tr( "With the status:" ), container ); connect( m_statusCB, SIGNAL(toggled(bool)), this, SLOT(slotStatusSelected(bool)) ); m_status = new QComboBox( container ); - connect( m_status, SIGNAL(activated(const QString &)), this, SLOT(slotStatusChanged(const QString &)) ); + connect( m_status, SIGNAL(activated(const QString&)), this, SLOT(slotStatusChanged(const QString&)) ); QString currStatus; switch ( status ) { case OPackageManager::All : currStatus = tr( "All" ); break; case OPackageManager::Installed : currStatus = tr( "Installed" ); break; case OPackageManager::NotInstalled : currStatus = tr( "Not installed" ); break; case OPackageManager::Updated : currStatus = tr( "Updated" ); break; default : currStatus = QString::null; }; m_status->insertItem( tr( "All" ) ); m_status->insertItem( tr( "Installed" ) ); m_status->insertItem( tr( "Not installed" ) ); m_status->insertItem( tr( "Updated" ) ); initItem( m_status, m_statusCB, currStatus ); layout->addWidget( m_statusCB ); layout->addWidget( m_status ); // Server m_serverCB = new QCheckBox( tr( "Available from the following server:" ), container ); connect( m_serverCB, SIGNAL(toggled(bool)), this, SLOT(slotServerSelected(bool)) ); m_server = new QComboBox( container ); m_server->insertStringList( *(pm->servers()) ); initItem( m_server, m_serverCB, server ); layout->addWidget( m_serverCB ); layout->addWidget( m_server ); // Destination m_destCB = new QCheckBox( tr( "Installed on device at:" ), container ); connect( m_destCB, SIGNAL(toggled(bool)), this, SLOT(slotDestSelected(bool)) ); m_destination = new QComboBox( container ); m_destination->insertStringList( *(pm->destinations()) ); initItem( m_destination, m_destCB, destination ); layout->addWidget( m_destCB ); layout->addWidget( m_destination ); //showMaximized(); } void FilterDlg::initItem( QComboBox *comboBox, QCheckBox *checkBox, const QString &selection ) { if ( !selection.isNull() ) { checkBox->setChecked( true ); for ( int i = 0; i < comboBox->count(); i++ ) { if ( comboBox->text( i ) == selection ) { comboBox->setCurrentItem( i ); return; } } } comboBox->setEnabled( !selection.isNull() ); } void FilterDlg::slotNameSelected( bool selected ) { m_name->setEnabled( selected ); } void FilterDlg::slotServerSelected( bool selected ) { m_server->setEnabled( selected ); } void FilterDlg::slotDestSelected( bool selected ) { m_destination->setEnabled( selected ); } void FilterDlg::slotStatusSelected( bool selected ) { m_status->setEnabled( selected ); if ( !selected && !m_destCB->isEnabled() ) { // If status check box has been deselected and destination option was previously deselected // (because status == "Not installed"), re-enable destination option m_destCB->setEnabled( true ); m_destination->setEnabled( true ); } else if ( selected && m_destCB->isEnabled() && m_status->currentText() == tr( "Not installed" ) ) { // If status check box has been selected and status == "Not installed", disable destination option m_destCB->setEnabled( false ); m_destCB->setChecked( false ); m_destination->setEnabled( false ); } } void FilterDlg::slotStatusChanged( const QString &category ) { bool notInstalled = ( category == tr( "Not installed" ) ); m_destCB->setEnabled( !notInstalled ); m_destination->setEnabled( !notInstalled ); if ( notInstalled ) m_destCB->setChecked( false ); } void FilterDlg::slotCategorySelected( bool selected ) { m_category->setEnabled( selected ); } diff --git a/noncore/settings/packagemanager/mainwindow.cpp b/noncore/settings/packagemanager/mainwindow.cpp index 8fd960f..b334bca 100644 --- a/noncore/settings/packagemanager/mainwindow.cpp +++ b/noncore/settings/packagemanager/mainwindow.cpp @@ -1,538 +1,538 @@ /* This file is part of the OPIE Project =. Copyright (c) 2003 Dan Williams <drw@handhelds.org> .=l. .>+-= _;:, .> :=|. 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 <qaction.h> #include <qdir.h> #include <qlayout.h> #include <qlineedit.h> #include <qmenubar.h> #include <qmessagebox.h> #include <qpopupmenu.h> #include <qtimer.h> #include <qtoolbar.h> #include <qwhatsthis.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include "mainwindow.h" #include "installdlg.h" #include "filterdlg.h" #include "promptdlg.h" #include "entrydlg.h" #include "packageinfodlg.h" MainWindow::MainWindow( QWidget *parent, const char *name, WFlags /*fl*/ ) : QMainWindow( parent, name, WStyle_ContextHelp ) , m_config( "packman" ) , m_packman( &m_config, this ) , m_menuBar( this ) , m_toolBar( this ) , m_findBar( this ) , m_widgetStack( this ) , m_packageList( this ) , m_statusWidget( this ) , m_statusText( &m_statusWidget ) , m_statusBar( &m_statusWidget ) , m_iconUpdated( Resource::loadPixmap( "packagemanager/updated" ) ) , m_iconInstalled( Resource::loadPixmap( "installed" ) ) , m_iconNull( m_iconUpdated.size() ) , m_filterName( QString::null ) , m_filterServer( QString::null ) , m_filterDest( QString::null ) , m_filterStatus( OPackageManager::NotDefined ) , m_filterCategory( QString::null ) { // setCaption( tr( "Package Manager" ) ); m_iconNull.fill( colorGroup().base() ); connect( &m_widgetStack, SIGNAL(aboutToShow(QWidget*)), this, SLOT(slotWidgetStackShow(QWidget*)) ); // Initialize widget stack, package list and status widget initStatusWidget(); initPackageList(); m_widgetStack.addWidget( &m_statusWidget, 2 ); m_widgetStack.addWidget( &m_packageList, 1 ); setCentralWidget( &m_widgetStack ); // Initialize remaining user interface items initUI(); // Initialize package information QTimer::singleShot( 100, this, SLOT( initPackageInfo() ) ); } void MainWindow::closeEvent( QCloseEvent *event ) { // Close app only if either the package or status widgets are currently active bool close = m_widgetStack.visibleWidget() == &m_packageList || m_widgetStack.visibleWidget() == &m_statusWidget; if ( close ) { // TODO - write out application configuration settings // Write out package manager configuration settings m_packman.saveSettings(); event->accept(); } else { delete m_widgetStack.visibleWidget(); m_widgetStack.raiseWidget( &m_packageList ); event->ignore(); } } void MainWindow::initPackageList() { m_packageList.addColumn( tr( "Packages" ) ); QWhatsThis::add( &m_packageList, tr( "This is a listing of all packages.\n\nA blue dot next to the package name indicates that the package is currently installed.\n\nA blue dot with a star indicates that a newer version of the package is available from the server feed.\n\nClick inside the box at the left to select a package." ) ); QPEApplication::setStylusOperation( m_packageList.viewport(), QPEApplication::RightOnHold ); - connect( &m_packageList, SIGNAL(rightButtonPressed(QListViewItem *,const QPoint &,int)), - this, SLOT(slotDisplayPackageInfo(QListViewItem *)) ); + connect( &m_packageList, SIGNAL(rightButtonPressed(QListViewItem*,const QPoint&,int)), + this, SLOT(slotDisplayPackageInfo(QListViewItem*)) ); } void MainWindow::initStatusWidget() { QVBoxLayout *layout = new QVBoxLayout( &m_statusWidget, 4, 4 ); m_statusText.setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); layout->addWidget( &m_statusText ); connect( &m_packman, SIGNAL(initStatus(int)), this, SLOT(slotInitStatusBar(int)) ); - connect( &m_packman, SIGNAL(statusText(const QString &)), this, SLOT(slotStatusText(const QString &)) ); + connect( &m_packman, SIGNAL(statusText(const QString&)), this, SLOT(slotStatusText(const QString&)) ); connect( &m_packman, SIGNAL(statusBar(int)), this, SLOT(slotStatusBar(int)) ); layout->addWidget( &m_statusBar ); } void MainWindow::initUI() { // Build menu and tool bars setToolBarsMovable( false ); m_menuBar.setHorizontalStretchable( true ); QMenuBar *mb = new QMenuBar( &m_menuBar ); mb->setMargin( 0 ); // Find toolbar addToolBar( &m_findBar, QMainWindow::Top, true ); m_findBar.setHorizontalStretchable( true ); m_findEdit = new QLineEdit( &m_findBar ); QWhatsThis::add( m_findEdit, tr( "Type the text to search for here." ) ); m_findBar.setStretchableWidget( m_findEdit ); - connect( m_findEdit, SIGNAL(textChanged(const QString &)), this, SLOT(slotFindChanged(const QString &)) ); + connect( m_findEdit, SIGNAL(textChanged(const QString&)), this, SLOT(slotFindChanged(const QString&)) ); // Packages menu QPopupMenu *popup = new QPopupMenu( this ); QAction *a = new QAction( tr( "Update lists" ), Resource::loadPixmap( "packagemanager/update" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to update package lists from servers." ) ); connect( a, SIGNAL(activated()), this, SLOT(slotUpdate()) ); a->addTo( popup ); a->addTo( &m_toolBar ); QAction *actionUpgrade = new QAction( tr( "Upgrade" ), Resource::loadPixmap( "packagemanager/upgrade" ), QString::null, 0, this, 0 ); actionUpgrade->setWhatsThis( tr( "Click here to upgrade all installed packages if a newer version is available." ) ); connect( actionUpgrade, SIGNAL(activated()), this, SLOT(slotUpgrade()) ); actionUpgrade->addTo( popup ); actionUpgrade->addTo( &m_toolBar ); QPixmap iconDownload = Resource::loadPixmap( "packagemanager/download" ); QPixmap iconRemove = Resource::loadPixmap( "packagemanager/remove" ); QAction *actionDownload = new QAction( tr( "Download" ), iconDownload, QString::null, 0, this, 0 ); actionDownload->setWhatsThis( tr( "Click here to download the currently selected package(s)." ) ); connect( actionDownload, SIGNAL(activated()), this, SLOT(slotDownload()) ); actionDownload->addTo( popup ); actionDownload->addTo( &m_toolBar ); a = new QAction( tr( "Apply changes" ), Resource::loadPixmap( "packagemanager/apply" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to install, remove or upgrade currently selected package(s)." ) ); connect( a, SIGNAL(activated()), this, SLOT(slotApply()) ); a->addTo( popup ); a->addTo( &m_toolBar ); popup->insertSeparator(); a = new QAction( tr( "Configure" ), Resource::loadPixmap( "SettingsIcon" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to configure this application." ) ); connect( a, SIGNAL(activated()), this, SLOT(slotConfigure()) ); a->addTo( popup ); mb->insertItem( tr( "Actions" ), popup ); // View menu popup = new QPopupMenu( this ); m_actionShowNotInstalled = new QAction( tr( "Show packages not installed" ), QString::null, 0, this, 0 ); m_actionShowNotInstalled->setToggleAction( true ); m_actionShowNotInstalled->setWhatsThis( tr( "Click here to show packages available which have not been installed." ) ); connect( m_actionShowNotInstalled, SIGNAL(activated()), this, SLOT(slotShowNotInstalled()) ); m_actionShowNotInstalled->addTo( popup ); m_actionShowInstalled = new QAction( tr( "Show installed packages" ), QString::null, 0, this, 0 ); m_actionShowInstalled->setToggleAction( true ); m_actionShowInstalled->setWhatsThis( tr( "Click here to show packages currently installed on this device." ) ); connect( m_actionShowInstalled, SIGNAL(activated()), this, SLOT(slotShowInstalled()) ); m_actionShowInstalled->addTo( popup ); m_actionShowUpdated = new QAction( tr( "Show updated packages" ), QString::null, 0, this, 0 ); m_actionShowUpdated->setToggleAction( true ); m_actionShowUpdated->setWhatsThis( tr( "Click here to show packages currently installed on this device which have a newer version available." ) ); connect( m_actionShowUpdated, SIGNAL(activated()), this, SLOT(slotShowUpdated()) ); m_actionShowUpdated->addTo( popup ); popup->insertSeparator(); m_actionFilter = new QAction( tr( "Filter" ), Resource::loadPixmap( "packagemanager/filter" ), QString::null, 0, this, 0 ); m_actionFilter->setToggleAction( true ); m_actionFilter->setWhatsThis( tr( "Click here to apply current filter." ) ); connect( m_actionFilter, SIGNAL(toggled(bool)), this, SLOT(slotFilter(bool)) ); m_actionFilter->addTo( popup ); a = new QAction( tr( "Filter settings" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to change the package filter criteria." ) ); connect( a, SIGNAL(activated()), this, SLOT(slotFilterChange()) ); a->addTo( popup ); popup->insertSeparator(); a = new QAction( tr( "Find" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to search for text in package names." ) ); connect( a, SIGNAL(activated()), this, SLOT(slotFindShowToolbar()) ); a->addTo( popup ); m_actionFindNext = new QAction( tr( "Find next" ), Resource::loadIconSet( "next" ), QString::null, 0, this, 0 ); m_actionFindNext->setEnabled( false ); m_actionFindNext->setWhatsThis( tr( "Click here to find the next package name containing the text you are searching for." ) ); connect( m_actionFindNext, SIGNAL(activated()), this, SLOT(slotFindNext()) ); m_actionFindNext->addTo( popup ); m_actionFindNext->addTo( &m_findBar ); mb->insertItem( tr( "View" ), popup ); // Finish find toolbar creation a = new QAction( QString::null, Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); a->setWhatsThis( tr( "Click here to hide the find toolbar." ) ); connect( a, SIGNAL(activated()), this, SLOT(slotFindHideToolbar()) ); a->addTo( &m_findBar ); m_findBar.hide(); } void MainWindow::loadPackageList( OPackageList *packages, bool clearList ) { if ( clearList ) m_packageList.clear(); if ( packages ) { for ( OPackageListIterator packageIt( *packages ); packageIt.current(); ++packageIt ) { OPackage *package = packageIt.current(); QCheckListItem *item = new QCheckListItem( &m_packageList, package->name(), QCheckListItem::CheckBox ); m_packageList.insertItem( item ); // If a different version of package is available, show update available icon // Otherwise, show installed icon if ( !package->versionInstalled().isNull() ) { if ( m_packman.compareVersions( package->version(), package->versionInstalled() ) == 1 ) item->setPixmap( 0, m_iconUpdated ); else item->setPixmap( 0, m_iconInstalled ); } else item->setPixmap( 0, m_iconNull ); } } } void MainWindow::searchForPackage( const QString &text ) { if ( !text.isEmpty() ) { // look through package list for text startng at current position QCheckListItem *start = static_cast<QCheckListItem *>(m_packageList.currentItem()); if ( start == 0 ) start = static_cast<QCheckListItem *>(m_packageList.firstChild()); // for ( QCheckListItem *item = static_cast<QCheckListItem *>(start->nextSibling()); item != 0 ; for ( QCheckListItem *item = static_cast<QCheckListItem *>(start); item != 0 ; item = static_cast<QCheckListItem *>(item->nextSibling()) ) { if ( item->text().lower().find( text ) != -1 ) { m_packageList.ensureItemVisible( item ); m_packageList.setCurrentItem( item ); break; } } } } void MainWindow::initPackageInfo() { m_widgetStack.raiseWidget( &m_statusWidget ); // Load package list m_packman.loadAvailablePackages(); m_packman.loadInstalledPackages(); OPackageList *packageList = m_packman.packages(); if ( packageList ) { loadPackageList( packageList, true ); delete packageList; } m_widgetStack.raiseWidget( &m_packageList ); } void MainWindow::slotWidgetStackShow( QWidget *widget ) { if ( widget == &m_packageList ) { setCaption( tr( "Package Manager" ) ); m_menuBar.show(); m_toolBar.show(); } else { m_menuBar.hide(); m_toolBar.hide(); } } void MainWindow::slotInitStatusBar( int numSteps ) { m_statusBar.setTotalSteps( numSteps ); } void MainWindow::slotStatusText( const QString &status ) { m_statusText.setText( status ); } void MainWindow::slotStatusBar( int currStep ) { m_statusBar.setProgress( currStep ); } void MainWindow::slotUpdate() { // Create package manager output widget InstallDlg *dlg = new InstallDlg( this, &m_packman, tr( "Update package information" ), false, OPackage::Update ); connect( dlg, SIGNAL(closeInstallDlg()), this, SLOT(slotCloseDlg()) ); // Display widget m_widgetStack.addWidget( dlg, 3 ); m_widgetStack.raiseWidget( dlg ); } void MainWindow::slotUpgrade() { // Create package manager output widget InstallDlg *dlg = new InstallDlg( this, &m_packman, tr( "Upgrade installed packages" ), false, OPackage::Upgrade ); connect( dlg, SIGNAL(closeInstallDlg()), this, SLOT(slotCloseDlg()) ); // Display widget m_widgetStack.addWidget( dlg, 3 ); m_widgetStack.raiseWidget( dlg ); } void MainWindow::slotDownload() { // Retrieve list of packages selected for download (if any) QStringList *workingPackages = new QStringList(); for ( QCheckListItem *item = static_cast<QCheckListItem *>(m_packageList.firstChild()); item != 0 ; item = static_cast<QCheckListItem *>(item->nextSibling()) ) { if ( item->isOn() ) workingPackages->append( item->text() ); } if ( workingPackages->isEmpty() ) { QMessageBox::information( this, tr( "Nothing to do" ), tr( "No packages selected" ), tr( "OK" ) ); return; } else { // Download selected packages m_config.setGroup( "settings" ); QString workingDir = m_config.readEntry( "DownloadDir", "/tmp" ); bool ok = false; QString text = EntryDlg::getText( tr( "Download" ), tr( "Enter path to download package to:" ), workingDir, &ok, this ); if ( ok && !text.isEmpty() ) workingDir = text; // user entered something and pressed ok else return; // user entered nothing or pressed cancel // Store download directory in config file m_config.writeEntry( "DownloadDir", workingDir ); // Get starting directory QDir::setCurrent( workingDir ); // Create package manager output widget InstallDlg *dlg = new InstallDlg( this, &m_packman, tr( "Download packages" ), false, OPackage::Download, workingPackages ); connect( dlg, SIGNAL(closeInstallDlg()), this, SLOT(slotCloseDlg()) ); // Display widget m_widgetStack.addWidget( dlg, 3 ); m_widgetStack.raiseWidget( dlg ); } } void MainWindow::slotApply() { QStringList *removeList = 0x0; QStringList *installList = 0x0; QStringList *upgradeList = 0x0; for ( QCheckListItem *item = static_cast<QCheckListItem *>(m_packageList.firstChild()); item != 0 ; item = static_cast<QCheckListItem *>(item->nextSibling()) ) { if ( item->isOn() ) { OPackage *package = m_packman.findPackage( item->text() ); if ( package ) { if ( !package->versionInstalled().isNull() ) { if ( m_packman.compareVersions( package->version(), package->versionInstalled() ) == 1 ) { // Remove/upgrade package int answer = PromptDlg::ask( tr( "Remove or upgrade" ), tr( QString( "Do you wish to remove or upgrade\n%1?" ).arg( item->text() ) ), tr( "Remove" ), tr( "Upgrade" ), this ); if ( answer == 1 ) // Remove { if ( !removeList ) removeList = new QStringList(); removeList->append( item->text() ); } else if ( answer == 2 ) // Upgrade { if ( !upgradeList ) upgradeList = new QStringList(); upgradeList->append( item->text() ); } } else { // Remove/reinstall package int answer = PromptDlg::ask( tr( "Remove or reinstall" ), tr( QString( "Do you wish to remove or reinstall\n%1?" ).arg( item->text() ) ), tr( "Remove" ), tr( "Reinstall" ), this ); if ( answer == 1 ) // Remove { if ( !removeList ) removeList = new QStringList(); removeList->append( item->text() ); } else if ( answer == 2 ) // Reinstall { if ( !installList ) installList = new QStringList(); installList->append( item->text() ); } } } else { // Install package if ( !installList ) installList = new QStringList(); installList->append( item->text() ); } } } } // If nothing is selected, display message and exit if ( !removeList && !installList && !upgradeList ) { QMessageBox::information( this, tr( "Nothing to do" ), tr( "No packages selected" ), tr( "OK" ) ); return; } // Send command only if there are packages to process OPackage::Command removeCmd = OPackage::NotDefined; if ( removeList && !removeList->isEmpty() ) removeCmd = OPackage::Remove; OPackage::Command installCmd = OPackage::NotDefined; if ( installList && !installList->isEmpty() ) installCmd = OPackage::Install; OPackage::Command upgradeCmd = OPackage::NotDefined; if ( upgradeList && !upgradeList->isEmpty() ) upgradeCmd = OPackage::Upgrade; // Create package manager output widget InstallDlg *dlg = new InstallDlg( this, &m_packman, tr( "Apply changes" ), true, removeCmd, removeList, installCmd, installList, upgradeCmd, upgradeList ); connect( dlg, SIGNAL(closeInstallDlg()), this, SLOT(slotCloseDlg()) ); // Display widget m_widgetStack.addWidget( dlg, 3 ); m_widgetStack.raiseWidget( dlg ); } void MainWindow::slotCloseDlg() { // Close install dialog delete m_widgetStack.visibleWidget(); // Reload package list initPackageInfo(); // Update Opie launcher links QCopEnvelope e("QPE/System", "linkChanged(QString)"); QString lf = QString::null; e << lf; } void MainWindow::slotConfigure() { if ( m_packman.configureDlg( false ) ) diff --git a/noncore/settings/packagemanager/oipkg.cpp b/noncore/settings/packagemanager/oipkg.cpp index 086e91b..1dc23a4 100644 --- a/noncore/settings/packagemanager/oipkg.cpp +++ b/noncore/settings/packagemanager/oipkg.cpp @@ -1,509 +1,509 @@ /* This file is part of the Opie Project Copyright (c) 2003 Dan Williams <drw@handhelds.org> =. .=l. .>+-= _;:, .> :=|. This program is free software; you can .> <`_, > . <= redistribute it and/or modify it under :`=1 )Y*s>-.-- : the terms of the GNU Library 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 program 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 "oipkg.h" #include <stdlib.h> #include <string.h> #include <qdir.h> #include <qfile.h> #include <qmessagebox.h> #include <qtextstream.h> const QString IPKG_CONF = "/etc/ipkg.conf"; // Fully-qualified name of Ipkg primary configuration file const QString IPKG_CONF_DIR = "/etc/ipkg"; // Directory of secondary Ipkg configuration files const QString IPKG_PKG_PATH = "/usr/lib/ipkg/lists"; // Directory containing server package lists const QString IPKG_STATUS_PATH = "usr/lib/ipkg/status"; // Destination status file location OIpkg *oipkg; // Ipkg callback functions int fsignalIpkgMessage( ipkg_conf_t */*conf*/, message_level_t /*level*/, char *msg ) { oipkg->ipkgMessage( msg ); return 0; } char *fIpkgResponse( char */*question*/ ) { return 0x0; } int fIpkgStatus( char */*name*/, int /*status*/, char *desc, void */*userdata*/ ) { oipkg->ipkgStatus( desc ); return 0; } int fIpkgFiles( char */*name*/, char *desc, char */*version*/, pkg_state_status_t /*status*/, void */*userdata*/ ) { oipkg->ipkgList( desc ); return 0; } OIpkg::OIpkg( Config *config, QObject *parent, const char *name ) : QObject( parent, name ) , m_config( config ) , m_confInfo( NULL ) , m_ipkgExecOptions( 0 ) , m_ipkgExecVerbosity( 1 ) { oipkg = this; // Initialize libipkg if ( ipkg_init( &fsignalIpkgMessage, &fIpkgResponse, &m_ipkgArgs ) ) QMessageBox::critical( 0, tr( "OIpkg" ), tr( "Error initialing libipkg" ) ); // Default ipkg run-time arguments m_ipkgArgs.noaction = false; m_ipkgArgs.force_defaults = true; } OIpkg::~OIpkg() { // Upon destruction, ensure that items in config list are deleted with list if ( m_confInfo ) m_confInfo->setAutoDelete( true ); // Free up libipkg resources if ( ipkg_deinit( &m_ipkgArgs ) ) QMessageBox::critical( 0, tr( "OIpkg" ), tr( "Error freeing libipkg" ) ); } OConfItemList *OIpkg::configItems() { // Retrieve all configuration items return filterConfItems(); } OConfItemList *OIpkg::servers() { // Retrieve only servers return filterConfItems( OConfItem::Source ); } OConfItemList *OIpkg::destinations() { // Retrieve only destinations return filterConfItems( OConfItem::Destination ); } OConfItemList *OIpkg::options() { // Retrieve only destinations return filterConfItems( OConfItem::Option ); } void OIpkg::setConfigItems( OConfItemList *configList ) { if ( m_confInfo ) delete m_confInfo; m_confInfo = configList; } void OIpkg::saveSettings() { // Save Ipkg execution options to application configuration file if ( m_config ) { m_config->setGroup( "Ipkg" ); m_config->writeEntry( "ExecOptions", m_ipkgExecOptions ); m_config->writeEntry( "Verbosity", m_ipkgExecVerbosity ); } } OPackageList *OIpkg::availablePackages( const QString &server ) { // Load Ipkg configuration info if not already cached if ( !m_confInfo ) loadConfiguration(); // Build new server list (caller is responsible for deleting) OPackageList *pl = new OPackageList; // Open package list file QFile f( IPKG_PKG_PATH + "/" + server ); if ( !f.open( IO_ReadOnly ) ) return NULL; QTextStream t( &f ); // Process all information in package list file OPackage *package = NULL; QString line = t.readLine(); while ( !t.eof() ) { // Determine key/value pair int pos = line.find( ':', 0 ); QString key; if ( pos > -1 ) key = line.mid( 0, pos ); else key = QString::null; QString value = line.mid( pos+2, line.length()-pos ); // Allocate new package and insert into list if ( package == NULL && !key.isEmpty() ) { package = new OPackage( value ); package->setSource( server ); pl->append( package ); } // Update package data if ( key == "Package" ) package->setName( value ); else if ( key == "Version" ) package->setVersion( value ); else if ( key == "Section" ) package->setCategory( value ); //DataManager::setAvailableCategories( value ); else if ( key.isEmpty() && value.isEmpty() ) package = NULL; // Skip past all description lines if ( key == "Description" ) { line = t.readLine(); while ( !line.isEmpty() && line.find( ':', 0 ) == -1 && !t.eof() ) line = t.readLine(); } else line = t.readLine(); } f.close(); return pl; } OPackageList *OIpkg::installedPackages( const QString &destName, const QString &destPath ) { // Load Ipkg configuration info if not already cached if ( !m_confInfo ) loadConfiguration(); // Build new server list (caller is responsible for deleting) OPackageList *pl = new OPackageList; // Open status file QString path = destPath; if ( path.right( 1 ) != "/" ) path.append( "/" ); path.append( IPKG_STATUS_PATH ); QFile f( path ); if ( !f.open( IO_ReadOnly ) ) return NULL; QTextStream t( &f ); // Process all information in status file bool newPackage = false; QString line = t.readLine(); QString name; QString version; QString status; while ( !t.eof() ) { // Determine key/value pair int pos = line.find( ':', 0 ); QString key; if ( pos > -1 ) key = line.mid( 0, pos ); else key = QString::null; QString value = line.mid( pos+2, line.length()-pos ); // Allocate new package and insert into list if ( newPackage && !key.isEmpty() ) { // Add to list only if it has a valid name and is installed if ( !name.isNull() && status.contains( " installed" ) ) { pl->append( new OPackage( name, QString::null, version, QString::null, destName ) ); name = QString::null; version = QString::null; status = QString::null; newPackage = false; } } // Update package data if ( key == "Package" ) name = value; else if ( key == "Version" ) version = value; else if ( key == "Status" ) status = value; else if ( key.isEmpty() && value.isEmpty() ) newPackage = true; // Skip past all description lines if ( key == "Description" ) { line = t.readLine(); while ( !line.isEmpty() && line.find( ':', 0 ) == -1 && !t.eof() ) line = t.readLine(); } else line = t.readLine(); } f.close(); return pl; } bool OIpkg::executeCommand( OPackage::Command command, QStringList *parameters, const QString &destination, const QObject *receiver, const char *slotOutput, bool rawOutput ) { if ( command == OPackage::NotDefined ) return false; // Set ipkg run-time options/arguments m_ipkgArgs.force_depends = ( m_ipkgExecOptions & FORCE_DEPENDS ); m_ipkgArgs.force_reinstall = ( m_ipkgExecOptions & FORCE_REINSTALL ); // TODO m_ipkgArgs.force_remove = ( m_ipkgExecOptions & FORCE_REMOVE ); m_ipkgArgs.force_overwrite = ( m_ipkgExecOptions & FORCE_OVERWRITE ); m_ipkgArgs.verbosity = m_ipkgExecVerbosity; if ( m_ipkgArgs.dest ) free( m_ipkgArgs.dest ); if ( !destination.isNull() ) { int len = destination.length() + 1; m_ipkgArgs.dest = (char *)malloc( len ); strncpy( m_ipkgArgs.dest, destination, destination.length() ); m_ipkgArgs.dest[ len - 1 ] = '\0'; } else m_ipkgArgs.dest = 0x0; // Connect output signal to widget if ( rawOutput ) { // if ( slotOutput ) -// connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput ); +// connect( this, SIGNAL(signalIpkgMessage(char*)), receiver, slotOutput ); } else { // TODO - connect to local slot and parse output before emitting signalIpkgMessage } switch( command ) { case OPackage::Update : { - connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput ); + connect( this, SIGNAL(signalIpkgMessage(char*)), receiver, slotOutput ); ipkg_lists_update( &m_ipkgArgs ); }; break; case OPackage::Upgrade : { - connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput ); + connect( this, SIGNAL(signalIpkgMessage(char*)), receiver, slotOutput ); ipkg_packages_upgrade( &m_ipkgArgs ); }; break; case OPackage::Install : { - connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput ); + connect( this, SIGNAL(signalIpkgMessage(char*)), receiver, slotOutput ); for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it ) { ipkg_packages_install( &m_ipkgArgs, (*it) ); } }; break; case OPackage::Remove : { - connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput ); + connect( this, SIGNAL(signalIpkgMessage(char*)), receiver, slotOutput ); for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it ) { ipkg_packages_remove( &m_ipkgArgs, (*it), true ); } }; break; case OPackage::Download : { - connect( this, SIGNAL(signalIpkgMessage(char *)), receiver, slotOutput ); + connect( this, SIGNAL(signalIpkgMessage(char*)), receiver, slotOutput ); for ( QStringList::Iterator it = parameters->begin(); it != parameters->end(); ++it ) { ipkg_packages_download( &m_ipkgArgs, (*it) ); } }; break; case OPackage::Info : { - connect( this, SIGNAL(signalIpkgStatus(char *)), receiver, slotOutput ); + connect( this, SIGNAL(signalIpkgStatus(char*)), receiver, slotOutput ); ipkg_packages_info( &m_ipkgArgs, (*parameters->begin()), &fIpkgStatus, 0x0 ); }; break; case OPackage::Files : { - connect( this, SIGNAL(signalIpkgList(char *)), receiver, slotOutput ); + connect( this, SIGNAL(signalIpkgList(char*)), receiver, slotOutput ); ipkg_package_files( &m_ipkgArgs, (*parameters->begin()), &fIpkgFiles, 0x0 ); }; break; default : break; }; return true; } void OIpkg::ipkgMessage( char *msg ) { emit signalIpkgMessage( msg ); } void OIpkg::ipkgStatus( char *status ) { emit signalIpkgStatus( status ); } void OIpkg::ipkgList( char *filelist ) { emit signalIpkgList( filelist ); } void OIpkg::loadConfiguration() { if ( m_confInfo ) delete m_confInfo; // Load configuration item list m_confInfo = new OConfItemList(); QStringList confFiles; QDir confDir( IPKG_CONF_DIR ); if ( confDir.exists() ) { confDir.setNameFilter( "*.conf" ); confDir.setFilter( QDir::Files ); confFiles = confDir.entryList( "*.conf", QDir::Files ); confFiles << IPKG_CONF; for ( QStringList::Iterator it = confFiles.begin(); it != confFiles.end(); ++it ) { // Create absolute file path if necessary QString absFile = (*it); if ( !absFile.startsWith( "/" ) ) absFile.prepend( QString( IPKG_CONF_DIR ) + "/" ); // Read in file QFile f( absFile ); if ( f.open( IO_ReadOnly ) ) { QTextStream s( &f ); while ( !s.eof() ) { QString line = s.readLine().simplifyWhiteSpace(); // Parse line and save info to the conf options list if ( !line.isEmpty() ) { if ( !line.startsWith( "#" ) || line.startsWith( "#src" ) || line.startsWith( "#dest" ) || line.startsWith( "#arch" ) || line.startsWith( "#option" ) ) { int pos = line.find( ' ', 1 ); // Type QString typeStr = line.left( pos ); OConfItem::Type type; if ( typeStr == "src" || typeStr == "#src" ) type = OConfItem::Source; else if ( typeStr == "dest" || typeStr == "#dest" ) type = OConfItem::Destination; else if ( typeStr == "option" || typeStr == "#option" ) type = OConfItem::Option; else if ( typeStr == "arch" || typeStr == "#arch" ) type = OConfItem::Arch; else type = OConfItem::NotDefined; ++pos; int endpos = line.find( ' ', pos ); // Name QString name = line.mid( pos, endpos - pos ); // Value QString value = ""; if ( endpos > -1 ) value = line.right( line.length() - endpos - 1 ); // Active bool active = !line.startsWith( "#" ); // Add to list m_confInfo->append( new OConfItem( absFile, type, name, value, active ) ); } } } f.close(); } } } // Load Ipkg execution options from application configuration file if ( m_config ) { m_config->setGroup( "Ipkg" ); m_ipkgExecOptions = m_config->readNumEntry( "ExecOptions", m_ipkgExecOptions ); m_ipkgExecVerbosity = m_config->readNumEntry( "Verbosity", m_ipkgExecVerbosity ); } } OConfItemList *OIpkg::filterConfItems( OConfItem::Type typefilter ) { // Load Ipkg configuration info if not already cached if ( !m_confInfo ) loadConfiguration(); // Build new server list (caller is responsible for deleting) OConfItemList *sl = new OConfItemList; // If typefilter is empty, retrieve all items bool retrieveAll = ( typefilter == OConfItem::NotDefined ); // Parse configuration info for servers OConfItemListIterator it( *m_confInfo ); for ( ; it.current(); ++it ) { OConfItem *item = it.current(); if ( retrieveAll || item->type() == typefilter ) { sl->append( item ); } } return sl; } diff --git a/noncore/settings/sound/soundsettings.cpp b/noncore/settings/sound/soundsettings.cpp index 4bc86fa..8ad0a3f 100644 --- a/noncore/settings/sound/soundsettings.cpp +++ b/noncore/settings/sound/soundsettings.cpp @@ -1,220 +1,220 @@ /********************************************************************** ** 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. ** **********************************************************************/ // parts copyright 2002 L.J. Potter #include "soundsettings.h" #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/storage.h> #include <qcheckbox.h> #include <qcombobox.h> #include <qlabel.h> #include <sys/utsname.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include <sys/stat.h> SoundSettings::SoundSettings( QWidget* parent, const char* objname, WFlags fl ) : SoundSettingsBase( parent, objname, TRUE, fl ) { keyReset=FALSE; noWarning=false; Config config( "qpe"); config.setGroup( "Volume" ); Config cfg("Vmemo"); connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); AlertCheckBox->setChecked(cfg.readBoolEntry("Alert")); cfg.setGroup("Record"); int rate=config.readNumEntry("SampleRate", 22050); if(rate == 8000) sampleRate->setCurrentItem(0); else if(rate == 11025) sampleRate->setCurrentItem(1); else if(rate == 22050) sampleRate->setCurrentItem(2); else if(rate == 33075) sampleRate->setCurrentItem(3); else if(rate==44100) sampleRate->setCurrentItem(4); stereoCheckBox->setChecked(cfg.readNumEntry("Stereo", 0)); //TODO hide if zaurus- mono only #if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) //since ipaq and zaurus have particular //devices bool systemZaurus=FALSE; struct utsname name; /* check for embedix kernel running on the zaurus*/ if (uname(&name) != -1) {// TODO change this here,... QString release=name.release; if( release.find("embedix",0,TRUE) != -1) { qDebug("IS System Zaurus"); systemZaurus=TRUE; } } if(!systemZaurus) { stereoCheckBox->setChecked(TRUE); } stereoCheckBox->setEnabled(FALSE); sixteenBitCheckBox->setEnabled(FALSE); #else #endif int sRate=cfg.readNumEntry("SizeLimit", 30); qDebug("%d",sRate); if(sRate ==30) timeLimitComboBox->setCurrentItem(0); else if(sRate==20) timeLimitComboBox->setCurrentItem(1); else if(sRate == 15) timeLimitComboBox->setCurrentItem(2); else if(sRate == 10) timeLimitComboBox->setCurrentItem(3); else if(sRate == 5) timeLimitComboBox->setCurrentItem(4); else timeLimitComboBox->setCurrentItem(5); sixteenBitCheckBox->setChecked(cfg.readNumEntry("SixteenBit", 1)); cfg.setGroup("Defaults"); keyComboBox->setCurrentItem(cfg.readNumEntry("toggleKey") ); updateStorageCombo(); Config vmCfg("Vmemo"); vmCfg.setGroup("Defaults"); adpcmCheckBox->setChecked( vmCfg.readBoolEntry("use_ADPCM", 0)); - connect( LocationComboBox,SIGNAL(activated(const QString &)), this, - SLOT( setLocation(const QString &))); - connect( keyComboBox,SIGNAL(activated( int)), this, - SLOT( setKeyButton( int))); - connect( timeLimitComboBox,SIGNAL(activated( const QString &)), this, - SLOT( setSizeLimitButton(const QString &))); - connect( restartCheckBox,SIGNAL( toggled( bool)), this, - SLOT( restartOpie( bool))); - connect( adpcmCheckBox,SIGNAL( toggled( bool)), this, - SLOT( slotAdpcm( bool))); + connect( LocationComboBox,SIGNAL(activated(const QString&)), this, + SLOT( setLocation(const QString&))); + connect( keyComboBox,SIGNAL(activated(int)), this, + SLOT( setKeyButton(int))); + connect( timeLimitComboBox,SIGNAL(activated(const QString&)), this, + SLOT( setSizeLimitButton(const QString&))); + connect( restartCheckBox,SIGNAL( toggled(bool)), this, + SLOT( restartOpie(bool))); + connect( adpcmCheckBox,SIGNAL( toggled(bool)), this, + SLOT( slotAdpcm(bool))); // connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); } void SoundSettings::updateStorageCombo() { Config config( "Vmemo" ); config.setGroup( "System" ); QString loc = config.readEntry("RecLocation","/"); int i=0; int set=0; StorageInfo storageInfo; QString sName, sPath; QStringList list; list << "Documents : "+QPEApplication::documentDir(); list << "tmp : /tmp"; const QList<FileSystem> &fs = storageInfo.fileSystems(); QListIterator<FileSystem> it ( fs ); for( ; it.current(); ++it ){ const QString name = (*it)->name(); const QString path = (*it)->path(); qDebug("storage name "+name +" storage path is "+path); list << name + ": " +path; if( loc.find( path,0,TRUE) != -1) set = i; // if(dit.current()->file().find(path) != -1 ) storage=name; i++; } LocationComboBox->insertStringList(list); qDebug("set item %d", set); LocationComboBox->setCurrentItem(set); } void SoundSettings::setLocation(const QString & string) { Config config( "Vmemo" ); config.setGroup( "System" ); config.writeEntry("RecLocation",string); qDebug("set location "+string); config.write(); } void SoundSettings::cleanUp() { Config cfg("Vmemo"); cfg.writeEntry("Alert",AlertCheckBox->isChecked()); cfg.setGroup("Record"); cfg.writeEntry("SampleRate",sampleRate->currentText()); cfg.writeEntry("Stereo",stereoCheckBox->isChecked()); cfg.writeEntry("SixteenBit",sixteenBitCheckBox->isChecked()); if(keyReset && noWarning) { QCopEnvelope ("QPE/System", "restart()"); } } void SoundSettings::setKeyButton( int index) { Config cfg("Vmemo"); cfg.setGroup("Defaults"); cfg.writeEntry( "toggleKey", index ); keyReset = TRUE; if( index == 1) { cfg.writeEntry( "hideIcon", 0 ); keyLabel->setText(tr("Shows icon")); } else { cfg.writeEntry( "hideIcon", 1); keyLabel->setText(tr("Hides icon")); } cfg.write(); } void SoundSettings::updateLocationCombo() { } void SoundSettings::setSizeLimitButton(const QString &index) { Config cfg("Vmemo"); cfg.setGroup("Record"); if(index.find("Unlimited",0,TRUE) != -1) cfg.writeEntry("SizeLimit", -1); else cfg.writeEntry("SizeLimit", index); cfg.write(); } void SoundSettings::restartOpie(bool b) { noWarning=b; } void SoundSettings::slotAdpcm(bool b) { Config vmCfg("Vmemo"); vmCfg.setGroup("Defaults"); vmCfg.writeEntry("use_ADPCM", b); vmCfg.write(); } diff --git a/noncore/settings/sysinfo/benchmarkinfo.cpp b/noncore/settings/sysinfo/benchmarkinfo.cpp index 0aeb251..d6ecec5 100644 --- a/noncore/settings/sysinfo/benchmarkinfo.cpp +++ b/noncore/settings/sysinfo/benchmarkinfo.cpp @@ -1,468 +1,468 @@ /********************************************************************** ** BenchmarkInfo ** ** A benchmark for Qt/Embedded ** ** Copyright (C) 2004 Michael Lauer <mickey@vanille.de> ** Inspired by ZBench (C) 2002 Satoshi <af230533@im07.alpha-net.ne.jp> ** ** 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. ** **********************************************************************/ /* OPIE */ #include <opie2/ostorageinfo.h> #include <qpe/qpeapplication.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpedecoration_qws.h> #include <qpe/resource.h> #include <qpe/config.h> /* QT */ #include <qclipboard.h> #include <qcolor.h> #include <qcombobox.h> #include <qdirectpainter_qws.h> #include <qfile.h> #include <qtextstream.h> #include <qfiledialog.h> #include <qlabel.h> #include <qlayout.h> #include <qpainter.h> #include <qpushbutton.h> #include <qtimer.h> /* STD */ #include <time.h> #include <stdio.h> #include <stdlib.h> #include <math.h> #include "benchmarkinfo.h" extern "C" { void BenchFFT( void ); double dhry_main( int ); } #define DHRYSTONE_RUNS 20000000 #define TEST_DURATION 3 #define BUFF_SIZE 8192 #define FILE_SIZE 1024 * 1024 // 1Mb //=========================================================================== class BenchmarkPaintWidget : public QWidget { public: BenchmarkPaintWidget() : QWidget( 0, "Benchmark Paint Widget", WStyle_Customize|WStyle_StaysOnTop|WPaintUnclipped|WPaintClever ) { resize( QApplication::desktop()->size() ); show(); p.begin( this ); }; ~BenchmarkPaintWidget() { p.end(); hide(); }; QPainter p; }; //=========================================================================== BenchmarkInfo::BenchmarkInfo( QWidget *parent, const char *name, int wFlags ) : QWidget( parent, name, wFlags ) { setMinimumSize( 200, 150 ); QVBoxLayout* vb = new QVBoxLayout( this ); vb->setSpacing( 4 ); vb->setMargin( 4 ); tests = new QListView( this ); tests->setMargin( 0 ); tests->addColumn( tr( "Tests" ) ); tests->addColumn( tr( "Results" ) ); tests->addColumn( tr( "Comparison" ) ); tests->setShowSortIndicator( true ); test_alu = new QCheckListItem( tests, tr( "1. Integer Arithmetic " ), QCheckListItem::CheckBox ); test_fpu = new QCheckListItem( tests, tr( "2. Floating Point Unit " ), QCheckListItem::CheckBox ); test_txt = new QCheckListItem( tests, tr( "3. Text Rendering " ), QCheckListItem::CheckBox ); test_gfx = new QCheckListItem( tests, tr( "4. Gfx Rendering " ), QCheckListItem::CheckBox ); test_ram = new QCheckListItem( tests, tr( "5. RAM Performance " ), QCheckListItem::CheckBox ); test_sd = new QCheckListItem( tests, tr( "6. SD Card Performance " ), QCheckListItem::CheckBox ); test_cf = new QCheckListItem( tests, tr( "7. CF Card Performance " ), QCheckListItem::CheckBox ); test_alu->setText( 1, "n/a" ); test_fpu->setText( 1, "n/a" ); test_txt->setText( 1, "n/a" ); test_gfx->setText( 1, "n/a" ); test_ram->setText( 1, "n/a" ); test_sd->setText( 1, "n/a" ); test_cf->setText( 1, "n/a" ); test_alu->setText( 2, "n/a" ); test_fpu->setText( 2, "n/a" ); test_txt->setText( 2, "n/a" ); test_gfx->setText( 2, "n/a" ); test_ram->setText( 2, "n/a" ); test_sd->setText( 2, "n/a" ); test_cf->setText( 2, "n/a" ); startButton = new QPushButton( tr( "&Start Tests!" ), this ); connect( startButton, SIGNAL( clicked() ), this, SLOT( run() ) ); vb->addWidget( tests, 2 ); QFile f( QPEApplication::qpeDir() + "/share/sysinfo/results" ); if ( f.open( IO_ReadOnly ) ) { machineCombo = new QComboBox( this ); QTextStream ts( &f ); while( !ts.eof() ) { QString machline = ts.readLine(); qDebug( "sysinfo: parsing benchmark results for '%s'", (const char*) machline ); QString resline = ts.readLine(); machines.insert( machline, new QStringList( QStringList::split( ",", resline ) ) ); machineCombo->insertItem( machline ); } QHBoxLayout* hb = new QHBoxLayout( vb ); hb->addWidget( new QLabel( tr( "Compare To:" ), this ) ); hb->addWidget( machineCombo, 2 ); - connect( machineCombo, SIGNAL( activated( int ) ), this, SLOT( machineActivated( int ) ) ); + connect( machineCombo, SIGNAL( activated(int) ), this, SLOT( machineActivated(int) ) ); } vb->addWidget( startButton, 2 ); } BenchmarkInfo::~BenchmarkInfo() {} void BenchmarkInfo::machineActivated( int index ) { QStringList* results = machines[ machineCombo->text( index ) ]; if ( !results ) { qDebug( "sysinfo: no results available." ); return; } QStringList::Iterator it = results->begin(); test_alu->setText( 2, *(it++) ); test_fpu->setText( 2, *(it++) ); test_txt->setText( 2, *(it++) ); test_gfx->setText( 2, *(it++) ); test_ram->setText( 2, *(it++) ); test_sd->setText( 2, *(it++) ); test_cf->setText( 2, *(it++) ); } void BenchmarkInfo::run() { startButton->setText( "> Don't touch! Running Tests! Don't touch! <" ); qApp->processEvents(); QTime t; if ( test_alu->isOn() ) { int d = round( dhry_main( DHRYSTONE_RUNS ) ); test_alu->setText( 1, QString( "%1 dhrys" ).arg( QString::number( d ) ) ); test_alu->setOn( false ); } if ( test_fpu->isOn() ) { t.start(); BenchFFT(); test_fpu->setText( 1, QString( "%1 secs" ).arg( QString::number( t.elapsed() / 1000.0 ) ) ); test_fpu->setOn( false ); } if ( test_txt->isOn() ) { int value = textRendering( TEST_DURATION ); test_txt->setText( 1, QString( "%1 chars/sec" ).arg( QString::number( value / TEST_DURATION ) ) ); test_txt->setOn( false ); } if ( test_gfx->isOn() ) { int value = gfxRendering( TEST_DURATION ); test_gfx->setText( 1, QString( "%1 gops/sec" ).arg( QString::number( value / 4 / TEST_DURATION ) ) ); // 4 tests test_gfx->setOn( false ); } if ( test_ram->isOn() ) // /tmp is supposed to be in RAM on a PDA { performFileTest( "/tmp/benchmarkFile.dat", test_ram ); } if ( test_cf->isOn() ) { OStorageInfo storage; performFileTest( storage.cfPath() + "/benchmarkFile.dat", test_cf ); } if ( test_sd->isOn() ) { OStorageInfo storage; performFileTest( storage.sdPath() + "/benchmarkFile.dat", test_sd ); } startButton->setText( tr( "&Start Tests!" ) ); } int BenchmarkInfo::textRendering( int seconds ) { QTime t; t.start(); int stop = t.elapsed() + seconds * 1000; int rr[] = { 255, 255, 255, 0, 0, 0, 0, 128, 128 }; int gg[] = { 0, 255, 0, 0, 255, 255, 0, 128, 128 }; int bb[] = { 0, 0, 255, 0, 0, 255, 255, 128, 0 }; const QString text( "Opie Benchmark Test" ); int w = QApplication::desktop()->width(); int h = QApplication::desktop()->height(); srand( time( NULL ) ); BenchmarkPaintWidget bpw; int loops = 0; while ( t.elapsed() < stop ) { int k = rand() % 9; int s = rand() % 100; bpw.p.setPen( QColor( rr[ k ], gg[ k ], bb[ k ] ) ); bpw.p.setFont( QFont( "Vera", s ) ); bpw.p.drawText( rand() % w, rand() % h, text, text.length() ); ++loops; } return loops * text.length(); } int BenchmarkInfo::gfxRendering( int seconds ) { int rr[] = { 255, 255, 255, 0, 0, 0, 0, 128, 128 }; int gg[] = { 0, 255, 0, 0, 255, 255, 0, 128, 128 }; int bb[] = { 0, 0, 255, 0, 0, 255, 255, 128, 0 }; int w = QApplication::desktop()->width(); int h = QApplication::desktop()->height(); srand( time( NULL ) ); BenchmarkPaintWidget bpw; QTime t; t.start(); int stop = t.elapsed() + seconds*1000; int loops = 0; while ( t.elapsed() < stop ) { int k = rand() % 9; bpw.p.setPen( QColor( rr[ k ], gg[ k ], bb[ k ] ) ); bpw.p.drawLine( rand()%w, rand()%h, rand()%w, rand()%h ); ++loops; } t.restart(); stop = t.elapsed() + seconds*1000; while ( t.elapsed() < stop ) { int k = rand() % 9; bpw.p.setPen( QColor( rr[ k ], gg[ k ], bb[ k ] ) ); bpw.p.drawArc( rand()%w, rand()%h, rand()%w, rand()%h, 360 * 16, 360 * 16 ); ++loops; } QBrush br1; br1.setStyle( SolidPattern ); t.restart(); stop = t.elapsed() + seconds*1000; while ( t.elapsed() < stop ) { int k = rand() % 9; br1.setColor( QColor( rr[ k ], gg[ k ], bb[ k ] ) ); bpw.p.fillRect( rand()%w, rand()%h, rand()%w, rand()%h, br1 ); ++loops; } QPixmap p = Resource::loadPixmap( "sysinfo/pattern" ); t.restart(); stop = t.elapsed() + seconds*1000; while ( t.elapsed() < stop ) { bpw.p.drawPixmap( rand()%w, rand()%h, p ); ++loops; } return loops; } void BenchmarkInfo::performFileTest( const QString& fname, QCheckListItem* item ) { QTime time; time.start(); if ( writeFile( fname ) && readFile( fname ) ) { QFile::remove( fname ); item->setText( 1, QString( "%1 kb/sec" ).arg( QString::number( 1024.0 / ( time.elapsed() / 1000.0 ) ) ) ); item->setOn( false ); } else { item->setText( 1, tr( "error" ) ); } } char FileBuf[ BUFF_SIZE + 1 ]; bool BenchmarkInfo::writeFile( const QString& w_path ) { int i; int k; int n; int pos; int len; char *data = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 62 // /*------------------------------------ int w_len; QFile writeFile( w_path ); srand( time( NULL ) ); for ( n = 0 ; n < 20 ; n++ ) { if ( ! writeFile.open( IO_WriteOnly ) ) { writeFile.close(); writeFile.remove(); return ( false ); } // ------------------------------------------ sequential write for ( k = 0 ; k < 256 ; k++ ) { n = rand() % 30; memcpy( &FileBuf[ k * 32 ], &data[ n ], 32 ); } for ( i = 0 ; i < FILE_SIZE / BUFF_SIZE ; i++ ) { w_len = writeFile.writeBlock( FileBuf, BUFF_SIZE ); if ( w_len != BUFF_SIZE ) { writeFile.close(); writeFile.remove(); return ( false ); } writeFile.flush(); } // ------------------------------------------ random write for ( i = 0 ; i < 400 ; i++ ) { len = rand() % 90 + 4000; for ( k = 0 ; k < 128 ; k++ ) { n = rand() % 30; memcpy( &FileBuf[ k * 8 ], &data[ n ], 32 ); } pos = rand() % ( FILE_SIZE - BUFF_SIZE ); writeFile.at( pos ); w_len = writeFile.writeBlock( FileBuf, len ); if ( w_len != len ) { writeFile.close(); writeFile.remove(); return ( false ); } writeFile.flush(); } writeFile.close(); } return ( true ); } bool BenchmarkInfo::readFile( const QString& r_path ) { int i; int k; int len; int pos; int r_len; QFile readFile( r_path ); srand( time( NULL ) ); for ( k = 0 ; k < 200 ; k++ ) { if ( ! readFile.open( IO_ReadOnly ) ) { readFile.remove(); return ( false ); } // ------------------------------------------ sequential read readFile.at( 0 ); for ( i = 0 ; i < FILE_SIZE / BUFF_SIZE ; i++ ) { readFile.at( i * BUFF_SIZE ); r_len = readFile.readBlock( FileBuf, BUFF_SIZE ); if ( r_len != BUFF_SIZE ) { readFile.close(); readFile.remove(); return ( false ); } } // ------------------------------------------ random read for ( i = 0 ; i < 1000 ; i++ ) { len = rand() % 120 + 8; pos = rand() % ( FILE_SIZE / BUFF_SIZE - BUFF_SIZE ); readFile.at( pos ); r_len = readFile.readBlock( FileBuf, len ); if ( r_len != len ) { readFile.close(); readFile.remove(); return ( false ); } } readFile.close(); } return ( true ); } diff --git a/noncore/settings/sysinfo/modulesinfo.cpp b/noncore/settings/sysinfo/modulesinfo.cpp index 9cb8ad2..e688a29 100644 --- a/noncore/settings/sysinfo/modulesinfo.cpp +++ b/noncore/settings/sysinfo/modulesinfo.cpp @@ -1,190 +1,190 @@ /********************************************************************** ** ModulesInfo ** ** Display Modules information ** ** Copyright (C) 2002, Michael Lauer ** mickey@tm.informatik.uni-frankfurt.de ** http://www.Vanille.de ** ** Based on ProcessInfo by Dan Williams <williamsdr@acm.org> ** ** 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. ** **********************************************************************/ #include "modulesinfo.h" #include "detail.h" /* OPIE */ #include <qpe/qpeapplication.h> /* QT */ #include <qfile.h> #include <qlayout.h> #include <qmessagebox.h> #include <qtimer.h> #include <qwhatsthis.h> ModulesInfo::ModulesInfo( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 4 ); layout->setMargin( 4 ); ModulesView = new QListView( this ); int colnum = ModulesView->addColumn( tr( "Module" ) ); colnum = ModulesView->addColumn( tr( "Size" ) ); ModulesView->setColumnAlignment( colnum, Qt::AlignRight ); colnum = ModulesView->addColumn( tr( "Use#" ) ); ModulesView->setColumnAlignment( colnum, Qt::AlignRight ); colnum = ModulesView->addColumn( tr( "Used by" ) ); ModulesView->setAllColumnsShowFocus( TRUE ); layout->addMultiCellWidget( ModulesView, 0, 0, 0, 1 ); QWhatsThis::add( ModulesView, tr( "This is a list of all the kernel modules currently loaded on this handheld device.\n\nClick and hold on a module to see additional information about the module, or to unload it." ) ); // Test if we have /sbin/modinfo, and if so, allow module detail window if ( QFile::exists( "/sbin/modinfo" ) ) { QPEApplication::setStylusOperation( ModulesView->viewport(), QPEApplication::RightOnHold ); - connect( ModulesView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), - this, SLOT( viewModules( QListViewItem * ) ) ); + connect( ModulesView, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), + this, SLOT( viewModules(QListViewItem*) ) ); } CommandCB = new QComboBox( FALSE, this ); CommandCB->insertItem( "modprobe -r" ); CommandCB->insertItem( "rmmod" ); // I can't think of other useful commands yet. Anyone? layout->addWidget( CommandCB, 1, 0 ); QWhatsThis::add( CommandCB, tr( "Select a command here and then click the Send button to the right to send the command to module selected above." ) ); QPushButton *btn = new QPushButton( this ); btn->setMinimumSize( QSize( 50, 24 ) ); btn->setMaximumSize( QSize( 50, 24 ) ); btn->setText( tr( "Send" ) ); connect( btn, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); layout->addWidget( btn, 1, 1 ); QWhatsThis::add( btn, tr( "Click here to send the selected command to the module selected above." ) ); QTimer *t = new QTimer( this ); connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); t->start( 5000 ); updateData(); ModulesDtl = new Detail(); QWhatsThis::add( ModulesDtl->detailView, tr( "This area shows detailed information about this module." ) ); } ModulesInfo::~ModulesInfo() {} void ModulesInfo::updateData() { char modname[64]; char usage[200]; int modsize, usecount; QString selectedmod; QListViewItem *curritem = ModulesView->currentItem(); if ( curritem ) { selectedmod = curritem->text( 0 ); } ModulesView->clear(); FILE *procfile = fopen( ( QString ) ( "/proc/modules"), "r"); if ( procfile ) { QListViewItem *newitem; QListViewItem *selecteditem = 0x0; while ( true ) { modname[0] = '\0'; usage[0] = '\0'; int success = fscanf( procfile, "%s%d%d%[^\n]", modname, &modsize, &usecount, usage ); if ( success == EOF ) break; QString qmodname = QString( modname ); QString qmodsize = QString::number( modsize ).rightJustify( 6, ' ' ); QString qusecount = QString::number( usecount ).rightJustify( 2, ' ' ); QString qusage = QString( usage ); newitem = new QListViewItem( ModulesView, qmodname, qmodsize, qusecount, qusage ); if ( qmodname == selectedmod ) { selecteditem = newitem; } } ModulesView->setCurrentItem( selecteditem ); fclose( procfile ); } } void ModulesInfo::slotSendClicked() { if ( !ModulesView->currentItem() ) { return; } QString capstr = tr( "You really want to execute %1 for this module?" ).arg( CommandCB->currentText() ); QString modname = ModulesView->currentItem()->text( 0 ); if ( QMessageBox::warning( this, modname, capstr, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) { QString command = "/sbin/"; command.append( CommandCB->currentText() ); command.append( " " ); command.append( modname ); FILE* stream = popen( command, "r" ); if ( stream ) pclose( stream ); } } void ModulesInfo::viewModules( QListViewItem *modules ) { QString modname = modules->text( 0 ); QString capstr = "Module: "; capstr.append( modname ); ModulesDtl->setCaption( capstr ); QString command = "/sbin/modinfo "; command.append( modname ); FILE* modinfo = popen( command, "r" ); if ( modinfo ) { char line[200]; ModulesDtl->detailView->setText( " Details:\n------------\n" ); while( true ) { int success = fscanf( modinfo, "%[^\n]\n", line ); if ( success == EOF ) break; ModulesDtl->detailView->append( line ); } pclose( modinfo ); } QPEApplication::showWidget( ModulesDtl ); } diff --git a/noncore/settings/sysinfo/processinfo.cpp b/noncore/settings/sysinfo/processinfo.cpp index 2a90b0f..69b4ab5 100644 --- a/noncore/settings/sysinfo/processinfo.cpp +++ b/noncore/settings/sysinfo/processinfo.cpp @@ -1,202 +1,202 @@ /********************************************************************** ** ProcessInfo ** ** Display process information ** ** Copyright (C) 2002, Dan Williams ** williamsdr@acm.org ** http://draknor.net ** ** 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. ** **********************************************************************/ #include "processinfo.h" #include "detail.h" /* OPIE */ #include <qpe/qpeapplication.h> /* QT */ #include <qdir.h> #include <qlayout.h> #include <qmessagebox.h> #include <qtimer.h> #include <qwhatsthis.h> /* STD */ #include <sys/types.h> #include <signal.h> ProcessInfo::ProcessInfo( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { QGridLayout *layout = new QGridLayout( this ); layout->setSpacing( 4 ); layout->setMargin( 4 ); ProcessView = new QListView( this, "ProcessView" ); int colnum = ProcessView->addColumn( tr( "PID" ) ); ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); colnum = ProcessView->addColumn( tr( "Command" ),96 ); colnum = ProcessView->addColumn( tr( "Status" ) ); colnum = ProcessView->addColumn( tr( "Time" ) ); ProcessView->setColumnAlignment( colnum, Qt::AlignRight ); ProcessView->setAllColumnsShowFocus( TRUE ); QPEApplication::setStylusOperation( ProcessView->viewport(), QPEApplication::RightOnHold ); - connect( ProcessView, SIGNAL( rightButtonPressed( QListViewItem *, const QPoint &, int ) ), - this, SLOT( viewProcess( QListViewItem * ) ) ); + connect( ProcessView, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), + this, SLOT( viewProcess(QListViewItem*) ) ); layout->addMultiCellWidget( ProcessView, 0, 0, 0, 1 ); QWhatsThis::add( ProcessView, tr( "This is a list of all the processes on this handheld device.\n\nClick and hold on a process to see additional information about the process, or to send a signal to it." ) ); SignalCB = new QComboBox( FALSE, this, "SignalCB" ); SignalCB->insertItem( " 1: SIGHUP" ); SignalCB->insertItem( " 2: SIGINT" ); SignalCB->insertItem( " 3: SIGQUIT" ); SignalCB->insertItem( " 5: SIGTRAP" ); SignalCB->insertItem( " 6: SIGABRT" ); SignalCB->insertItem( " 9: SIGKILL" ); SignalCB->insertItem( "14: SIGALRM" ); SignalCB->insertItem( "15: SIGTERM" ); SignalCB->insertItem( "18: SIGCONT" ); SignalCB->insertItem( "19: SIGSTOP" ); layout->addWidget( SignalCB, 1, 0 ); QWhatsThis::add( SignalCB, tr( "Select a signal here and then click the Send button to the right to send to this process." ) ); SendButton = new QPushButton( this, "SendButton" ); SendButton->setMinimumSize( QSize( 50, 24 ) ); SendButton->setMaximumSize( QSize( 50, 24 ) ); SendButton->setText( tr( "Send" ) ); connect( SendButton, SIGNAL( clicked() ), this, SLOT( slotSendClicked() ) ); layout->addWidget( SendButton, 1, 1 ); QWhatsThis::add( SendButton, tr( "Click here to send the selected signal to this process." ) ); QTimer *t = new QTimer( this ); connect( t, SIGNAL( timeout() ), this, SLOT( updateData() ) ); t->start( 5000 ); updateData(); ProcessDtl = new Detail(); QWhatsThis::add( ProcessDtl->detailView, tr( "This area shows detailed information about this process." ) ); } ProcessInfo::~ProcessInfo() {} void ProcessInfo::updateData() { int pid, ppid, pgrp, session, tty, tpgid, utime, stime, cutime, cstime, counter, priority, starttime, signal, blocked, sigignore, sigcatch; uint flags, minflt, cminflt, majflt, cmajflt, timeout, itrealvalue, vsize, rss, rlim, startcode, endcode, startstack, kstkesp, kstkeip, wchan; char state; char comm[64]; QString selectedpid; QListViewItem *curritem = ProcessView->currentItem(); if ( curritem ) { selectedpid = curritem->text( 0 ); } ProcessView->clear(); QListViewItem *newitem; QListViewItem *selecteditem = 0x0; QDir *procdir = new QDir("/proc", 0, QDir::Name, QDir::Dirs); QFileInfoList *proclist = new QFileInfoList(*(procdir->entryInfoList())); if ( proclist ) { QFileInfoListIterator it(*proclist); QFileInfo *f; while ( ( f = it.current() ) != 0 ) { ++it; QString processnum = f->fileName(); if ( processnum >= "1" && processnum <= "99999" ) { FILE *procfile = fopen( ( QString ) ( "/proc/" + processnum + "/stat"), "r"); if ( procfile ) { fscanf( procfile, "%d %s %c %d %d %d %d %d %u %u %u %u %u %d %d %d %d %d %d %u %u %d %u %u %u %u %u %u %u %u %d %d %d %d %u", &pid, comm, &state, &ppid, &pgrp, &session,&tty, &tpgid, &flags, &minflt, &cminflt, &majflt, &cmajflt, &utime, &stime, &cutime, &cstime, &counter, &priority, &timeout, &itrealvalue, &starttime, &vsize, &rss, &rlim, &startcode, &endcode, &startstack, &kstkesp, &kstkeip, &signal, &blocked, &sigignore, &sigcatch, &wchan ); processnum = processnum.rightJustify( 5, ' ' ); QString processcmd = QString( comm ).replace( QRegExp( "[()]" ), "" ); QString processstatus = QChar(state); QString processtime = QString::number( ( utime + stime ) / 100 ); processtime = processtime.rightJustify( 9, ' ' ); fclose( procfile ); newitem = new QListViewItem( ProcessView, processnum, processcmd, processstatus, processtime ); if ( processnum == selectedpid ) { selecteditem = newitem; } } } } ProcessView->setCurrentItem( selecteditem ); } delete proclist; delete procdir; } void ProcessInfo::slotSendClicked() { QListViewItem *currprocess = ProcessView->currentItem(); if ( !currprocess ) { return; } QString capstr = tr( "Really want to send %1\nto this process?" ).arg( SignalCB->currentText() ); if ( QMessageBox::warning( this, currprocess->text( 1 ), capstr, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape ) == QMessageBox::Yes ) { currprocess = ProcessView->currentItem(); if ( currprocess ) { QString sigstr = SignalCB->currentText(); sigstr.truncate(2); int sigid = sigstr.toUInt(); kill( currprocess->text( 0 ).stripWhiteSpace().toUInt(), sigid ); } } } void ProcessInfo::viewProcess( QListViewItem *process ) { QString pid= process->text( 0 ).stripWhiteSpace(); QString command = process->text( 1 ); ProcessDtl->setCaption( pid + " - " + command ); FILE *statfile = fopen( ( QString ) ( "/proc/" + pid + "/status"), "r"); if ( statfile ) { char line[81]; fgets( line, 81, statfile ); ProcessDtl->detailView->setText( line ); while ( fgets( line, 81, statfile ) ) { ProcessDtl->detailView->append( line ); } fclose( statfile ); } QPEApplication::showWidget( ProcessDtl ); } diff --git a/noncore/settings/tabmanager/tabmanager.cpp b/noncore/settings/tabmanager/tabmanager.cpp index ff5957c..15aeaf5 100644 --- a/noncore/settings/tabmanager/tabmanager.cpp +++ b/noncore/settings/tabmanager/tabmanager.cpp @@ -1,423 +1,423 @@ #include "tabmanager.h" #include "app.h" #include "wait.h" #include "tabapplnk.h" #include <qpe/applnk.h> #include <qdir.h> #include <qfile.h> #include <qtextstream.h> #include <qlistview.h> #include <qheader.h> #include <qcombobox.h> #include <qlineedit.h> #include <qlabel.h> #include <qmessagebox.h> #include <stdlib.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #define HOME_APP_DIR QPEApplication::qpeDir()+"/apps" #define HOME_APP_INSTALL_DIR "/usr/lib/ipkg/info" #define NEW_FOLDER "EmptyTab" #define NEW_APPLICATION "NewApp" #define APPLICATION_EXTENSION ".desktop" #define APPLICATION_EXTENSION_LENGTH 8 /** * Constructor. Sets up signals. Performs initial scan of applications * and tabs */ TabManager::TabManager( QWidget* parent, const char* name):TabManagerBase(parent, name), changed(false), application(NULL){ rescanFolder(HOME_APP_DIR); // Connect the signals and slots - connect(tabList, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(editItem(QListViewItem*))); + connect(tabList, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(editItem(QListViewItem*))); (tabList->header())->hide(); - connect(tabList, SIGNAL(moveItem(QListViewItem *, QListViewItem *)), this, SLOT(moveApplication(QListViewItem *, QListViewItem *))); + connect(tabList, SIGNAL(moveItem(QListViewItem*,QListViewItem*)), this, SLOT(moveApplication(QListViewItem*,QListViewItem*))); } /** * If anything in the tab's have been changed then update the system or alert * the user. */ TabManager::~TabManager(){ if(changed){ // Prompt. //int answer = QMessageBox::warning(this, "Message", "Should your desktop be","Yes", "Cancel", 0, 1 ); //if (answer) // return; QCopEnvelope e("QPE/System", "linkChanged(QString)"); QString link; //we'll just send an empty string e << link; } } /** * Scans root directory for any tabs or applications. Will recursivly go down, * but will not follow symlinks. * @param directory - the directory to look in. * @param parent - the parent to place any new tabs or apps into. If parent is * NULL then the item is a tab and should be placed as a child of the window. */ void TabManager::rescanFolder(QString directory, QListViewItem* parent){ //qDebug(QString("rescanFolder: ") + directory.latin1()); QDir d; d.setPath(directory); // Show hidden files for .directories d.setFilter( QDir::Files | QDir::Hidden | QDir::Dirs); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); // create list iterator QFileInfo *fi; // pointer for traversing while ( (fi=it.current()) ) { // for each file... // If it is a dir and not .. or . then add it as a tab and go down. if(fi->isDir()){ if(fi->fileName() != ".." && fi->fileName() != ".") { QListViewItem* newItem; if(!parent) newItem = new QListViewItem(tabList, fi->fileName()); else newItem = new QListViewItem(parent, fi->fileName()); itemList.insert(newItem, directory + "/" + fi->fileName() + "/.directory" ); rescanFolder(directory + "/" + fi->fileName(), newItem); } } else{ // it is a file, if not a .directory add to parent. // Change parents name and icon to reflect icon. if(fi->fileName() == ".directory"){ AppLnk app(directory + "/" + fi->fileName()); if(parent){ parent->setPixmap(0,app.pixmap()); parent->setText(0, app.name()); } } else{ // Add any desktop files found. QListViewItem* newItem; if(directory != HOME_APP_DIR){ if(!parent) newItem = new QListViewItem(tabList, fi->fileName()); else newItem = new QListViewItem(parent, fi->fileName()); if(fi->fileName().right(APPLICATION_EXTENSION_LENGTH) == APPLICATION_EXTENSION){ AppLnk app(directory + "/" + fi->fileName()); newItem->setPixmap(0,app.pixmap()); newItem->setText(0, app.name()); itemList.insert(newItem, directory + "/" + fi->fileName()); } } } } ++it; // goto next list element } } /** * Create a new blank Tab. * Create a physical folder with .directory file * Create a item on the list */ void TabManager::newFolder(){ QDir r; r.mkdir(QString(HOME_APP_DIR) + "/" + NEW_FOLDER); system((QString("echo [Desktop Entry] | cat >> ") + HOME_APP_DIR + "/" + NEW_FOLDER "/.directory").latin1()); system((QString("echo Name=" NEW_FOLDER " | cat >> ") + HOME_APP_DIR + "/" + NEW_FOLDER "/.directory").latin1()); QString homeLocation = QString(HOME_APP_DIR) + "/" + NEW_FOLDER + "/.directory"; QListViewItem *newItem = new QListViewItem(tabList, NEW_FOLDER); itemList.insert(newItem, homeLocation ); // We have changed something. changed = true; } /** * Create a new blank application * Make sure a tab is selected * create physical file * fill file with default information (entry, name, type). */ void TabManager::newApplication(){ QListViewItem *item = tabList->currentItem(); if(!item || item->parent()) return; QString parentDir = itemList[item].mid(0,itemList[item].length()-11); QString homeLocation = parentDir + "/" NEW_APPLICATION APPLICATION_EXTENSION; system((QString("echo [Desktop Entry] | cat >> ") + homeLocation).latin1()); system((QString("echo Name=" NEW_APPLICATION " | cat >> ") + homeLocation).latin1()); int slash = parentDir.findRev('/', -1); QString folderName = parentDir.mid(slash+1, parentDir.length()); system((QString("echo Type=") + folderName + " | cat >> " + homeLocation).latin1()); // Insert into the tree QListViewItem *newItem = new QListViewItem(item, NEW_APPLICATION); itemList.insert(newItem, homeLocation ); // We have changed something. changed = true; } /** * Remove the item. * Check if we can * Prompt user * Delete physical file (Dir, remove .dir, then dir. File, remove file) * Remove from installer if need too. */ void TabManager::removeItem(){ // Make sure we can delete QListViewItem *item = tabList->currentItem(); if(!item) return; if(item->childCount() > 0){ QMessageBox::critical(this, tr("Message"), tr("Can't remove with applications\nstill in the group."), tr("Ok") ); return; } // Prompt. int answer = QMessageBox::warning(this, tr("Message"), tr("Are you sure you want to delete?"), tr("Yes"), tr("Cancel"), 0, 1 ); if (answer) return; bool removeSuccessful = true; QString location = itemList[item]; // Remove file (.directory in a Directory case) if(!QFile::remove(location)) removeSuccessful = false; // Remove directory if(item->parent() == NULL){ // Remove .directory file string location = location.mid(0,location.length()-10); QDir dir; if(!dir.rmdir(location)) removeSuccessful = false; else removeSuccessful = true; } // If removing failed. if(!removeSuccessful){ qDebug((QString("removeItem: ") + location).latin1()); QMessageBox::critical(this, tr("Message"), tr("Can't remove."), tr("Ok") ); return; } // Remove from the installer so it wont fail. // Don't need to do this sense the current install uses rm -f so no error // Remove from the gui list. itemList.remove(item); if(item->parent()) item->parent()->takeItem(item); delete item; // We have changed something. changed = true; } /** * Helper function. Edits the current item. * calls editItem with the currently selected item. */ void TabManager::editCurrentItem(){ editItem(tabList->currentItem()); } /** * Edit the item that is passed in. * Show application dialog and if anything changed * @param item the item to edit. */ void TabManager::editItem( QListViewItem * item){ if(!item) return; TabAppLnk app(itemList[item]); if(!app.isValid()){ qDebug(QString("editItem: Not a valid applnk file: ") + itemList[item].latin1()); return; } // Fill with all of the icons if(!application){ Wait waitDialog(this, "Wait dialog"); waitDialog.waitLabel->setText(tr("Gathering icons...")); waitDialog.show(); qApp->processEvents(); application = new AppEdit(this, "Application edit", true); QDir d(QPEApplication::qpeDir() + "/pics/"); d.setFilter( QDir::Files); const QFileInfoList *list = d.entryInfoList(); QFileInfoListIterator it( *list ); // create list iterator QFileInfo *fi; // pointer for traversing while ( (fi=it.current()) ) { // for each file... QString fileName = fi->fileName(); if(fileName.right(4) == ".png"){ fileName = fileName.mid(0,fileName.length()-4); QPixmap imageOfFile(Resource::loadPixmap(fileName)); QImage foo = imageOfFile.convertToImage(); foo = foo.smoothScale(16,16); imageOfFile.convertFromImage(foo); application->iconLineEdit->insertItem(imageOfFile,fileName); } //qDebug(fi->fileName().latin1()); ++it; } waitDialog.hide(); } int pixmap = -1; QString pixmapText = app.pixmapString(); QComboBox *f = application->iconLineEdit; for(int i = 0; i < application->iconLineEdit->count(); i++){ if(f->text(i) == pixmapText){ pixmap = i; break; } } if(pixmap != -1) application->iconLineEdit->setCurrentItem(pixmap); else if(pixmapText.isEmpty()){ application->iconLineEdit->setCurrentItem(0); } else{ QPixmap imageOfFile(Resource::loadPixmap(pixmapText)); QImage foo = imageOfFile.convertToImage(); foo = foo.smoothScale(16,16); imageOfFile.convertFromImage(foo); application->iconLineEdit->insertItem(imageOfFile,pixmapText,0); application->iconLineEdit->setCurrentItem(0); } application->nameLineEdit->setText(app.name()); application->execLineEdit->setText(app.exec()); application->commentLineEdit->setText(app.comment()); if(item->parent() == NULL){ application->execLineEdit->setEnabled(false); application->TextLabel3->setEnabled(false); application->setCaption(tr("Tab")); } else{ application->execLineEdit->setEnabled(true); application->TextLabel3->setEnabled(true); application->setCaption(tr("Application")); } // Only do somthing if they hit OK application->showMaximized(); if(application->exec() == 0) return; // If nothing has changed exit (hmmm why did they hit ok?) if(app.name() == application->nameLineEdit->text() && app.pixmapString() == application->iconLineEdit->currentText() && app.comment() == application->commentLineEdit->text() && app.exec() == application->execLineEdit->text()) return; // Change the applnk file QString oldName = app.name(); app.setName(application->nameLineEdit->text()); app.setIcon(application->iconLineEdit->currentText()); app.setComment(application->commentLineEdit->text()); app.setExec(application->execLineEdit->text()); if(!app.writeLink()){ QMessageBox::critical(this, tr("Message"), "Can't save.", tr("Ok") ); return; } // Update the gui icon and name item->setText(0,app.name()); item->setPixmap(0,app.pixmap()); // We have changed something. changed = true; // If we were dealing with a new folder or new application change // the file names. Also change the item location in itemList if(oldName == NEW_FOLDER){ QDir r; QString oldName = itemList[item]; oldName = oldName.mid(0,oldName.length()-11); QString newName = oldName.mid(0,oldName.length()-9); newName = newName + "/" + app.name(); r.rename(oldName, newName); itemList.remove(item); itemList.insert(item, newName + "/.directory" ); } else if(oldName == NEW_APPLICATION){ if(!item->parent()) return; QString parentDir = itemList[item->parent()]; QDir r; QString oldName = itemList[item]; QString newName = oldName.mid(0, parentDir.length()-10); newName = newName + app.name() + APPLICATION_EXTENSION; r.rename(oldName, newName); itemList.remove(item); itemList.insert(item, newName); } } /** * Move an application from one directory to another. * Move in the gui, move in the applnk file, move in the installer. * @param item the application to move * @pearam newGroup the new parent of this application */ void TabManager::moveApplication(QListViewItem *item, QListViewItem *newGroup){ // Can we even move it? if(!item || !item->parent() || newGroup->parent()) return; if(item->parent() == newGroup) return; // Get the new folder, new file name, QString newFolder = itemList[newGroup]; newFolder = newFolder.mid(0,newFolder.length()-11); int slash = newFolder.findRev('/', -1); QString folderName = newFolder.mid(slash+1, newFolder.length()); QString desktopFile = itemList[item]; slash = desktopFile.findRev('/', -1); desktopFile = desktopFile.mid(slash, desktopFile.length()); newFolder = newFolder + desktopFile; // Move file QDir r; if(!r.rename(itemList[item], newFolder)){ QMessageBox::critical(this, tr("Message"), "Can't move application.", tr("Ok") ); return; } //qDebug((QString("moveApplication: ") + itemList[item]).latin1()); //qDebug((QString("moveApplication: ") + newFolder).latin1()); // Move in the gui item->parent()->takeItem(item); newGroup->insertItem(item); newGroup->setOpen(true); // Move file in the installer QString installedAppFile; if(findInstalledApplication(desktopFile, installedAppFile)) swapInstalledLocation(installedAppFile, desktopFile, newFolder); else qDebug("moveApplication: No installed app found for dekstop file"); // Move application type AppLnk app(newFolder); app.setType(folderName); app.writeLink(); diff --git a/noncore/settings/usermanager/usermanager.cpp b/noncore/settings/usermanager/usermanager.cpp index 5411995..a1130d4 100644 --- a/noncore/settings/usermanager/usermanager.cpp +++ b/noncore/settings/usermanager/usermanager.cpp @@ -1,257 +1,257 @@ /*************************************************************************** * * * 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 "usermanager.h" #include <qlayout.h> #include <qmessagebox.h> #include <qfile.h> #include <qpe/resource.h> #include <qregexp.h> /** * The mainwindow constructor. * * @param QWidget *parent * @param const char *name * @ param WFlags fl * */ UserConfig::UserConfig(QWidget* parent, const char* name, WFlags fl) : QMainWindow(parent, name, fl) { setCaption(tr("Opie User Manager")); // Create an instance of the global object 'accounts'. This holds all user/group info, and functions to modify them. accounts=new Passwd(); accounts->open(); // This actually loads the files /etc/passwd & /etc/group into memory. // Create the toolbar. QToolBar *toolbar = new QToolBar(this,"Toolbar"); toolbar->setHorizontalStretchable(1); // Is there any other way to get the toolbar to stretch of the full screen!? adduserToolButton = new QToolButton(Resource::loadPixmap("usermanager/adduser"),"Add User",0,this,SLOT(addUser()),toolbar,"Add User"); edituserToolButton = new QToolButton(Resource::loadPixmap("usermanager/edituser"),"Edit User",0,this,SLOT(editUser()),toolbar,"Edit User"); deleteuserToolButton = new QToolButton(Resource::loadPixmap("usermanager/deleteuser"),"Delete User",0,this,SLOT(delUser()),toolbar,"Delete User"); QToolButton *userstext = new QToolButton(0,"User",0,0,0,toolbar,"User"); userstext->setUsesTextLabel(true); toolbar->addSeparator(); addgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/addgroup"),"Add Group",0,this,SLOT(addGroup()),toolbar,"Add Group"); editgroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/editgroup"),"Edit Group",0,this,SLOT(editGroup()),toolbar,"Edit Group"); deletegroupToolButton = new QToolButton(Resource::loadPixmap("usermanager/deletegroup"),"Delete Group",0,this,SLOT(delGroup()),toolbar,"Delete Group"); QToolButton *groupstext = new QToolButton(0,"Group",0,0,0,toolbar,"Group"); groupstext->setUsesTextLabel(true); addToolBar(toolbar,"myToolBar"); // Add a tabwidget and all the tabs. myTabWidget = new QTabWidget(this,"My Tab Widget"); setupTabAccounts(); setupTabAllUsers(); setupTabAllGroups(); userPopupMenu.insertItem("Copy",0); getUsers(); // Fill out the iconview & listview with all users. getGroups(); // Fill out the group listview with all groups. setCentralWidget(myTabWidget); } UserConfig::~UserConfig() { accounts->close(); delete accounts; } void UserConfig::setupTabAccounts() { QWidget *tabpage = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(tabpage); layout->setMargin(5); usersIconView=new QListView(tabpage,"users"); usersIconView->addColumn("Icon"); usersIconView->addColumn("Username"); usersIconView->setAllColumnsShowFocus(true); layout->addWidget(usersIconView); - connect(usersIconView,SIGNAL(returnPressed(QListViewItem *)),this,SLOT(showUserMenu(QListViewItem *))); + connect(usersIconView,SIGNAL(returnPressed(QListViewItem*)),this,SLOT(showUserMenu(QListViewItem*))); myTabWidget->addTab(tabpage,"Users"); } void UserConfig::setupTabAllUsers() { QWidget *tabpage = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(tabpage); layout->setMargin(5); usersListView=new QListView(tabpage,"allusers"); usersListView->addColumn("UID"); usersListView->addColumn("Login"); usersListView->addColumn("Username"); layout->addWidget(usersListView); usersListView->setSorting(1,1); usersListView->setAllColumnsShowFocus(true); myTabWidget->addTab(tabpage,"All Users"); } void UserConfig::setupTabAllGroups() { QWidget *tabpage = new QWidget(this); QVBoxLayout *layout = new QVBoxLayout(tabpage); layout->setMargin(5); groupsListView=new QListView(tabpage,"groups"); groupsListView->addColumn("GID"); groupsListView->addColumn("Groupname"); layout->addWidget(groupsListView); groupsListView->setSorting(1,1); groupsListView->setAllColumnsShowFocus(true); myTabWidget->addTab(tabpage,"All Groups"); } void UserConfig::getUsers() { QString mytext; QPixmap mypixmap; QListViewItem *listviewitem; // Empty the iconview & the listview. usersIconView->clear(); usersListView->clear(); // availableUID is used as a deposite for the next available UID on the system, this should start at an ID over 500. availableUID=500; for(QStringList::Iterator it=accounts->passwdStringList.begin(); it!=accounts->passwdStringList.end(); ++it) { accounts->splitPasswdEntry(*it); // Split the string into it's components and store in variables in the accounts object. ("pr_name" and so on.) if(accounts->pw_name.find(QRegExp("^#"),0)) { // Skip commented lines. new QListViewItem(usersListView,QString::number(accounts->pw_uid),accounts->pw_name,accounts->pw_gecos); if((accounts->pw_uid>=500) && (accounts->pw_uid<65000)) { // Is this user a "normal" user ? mytext=QString(accounts->pw_name)+" - ("+QString(accounts->pw_gecos)+")"; // The string displayed next to the icon. if(!(mypixmap.load("/opt/QtPalmtop/pics/users/"+accounts->pw_name+".png"))) { // Is there an icon for this user? Resource::loadPixmap is caching, doesn't work. mypixmap=Resource::loadPixmap(QString("usermanager/usericon")); // If this user has no icon, load the default icon. } listviewitem=new QListViewItem(usersIconView,"",mytext); // Add the icon+text to the qiconview. listviewitem->setPixmap(0,mypixmap); } if((accounts->pw_uid>=availableUID) && (accounts->pw_uid<65000)) availableUID=accounts->pw_uid+1; // Increase 1 to the latest know UID to get a free uid. } } usersIconView->sort(); } void UserConfig::addUser() { if(UserDialog::addUser(availableUID,availableGID)) { // Add the user to the system, also send next available UID and GID. getUsers(); // Update users views. getGroups(); // Update groups view. } } void UserConfig::editUser() { QString username; if(myTabWidget->currentPageIndex()==0) { // Users if(usersIconView->currentItem()) { // Any icon selected? username=usersIconView->currentItem()->text(1); // Get the text associated with the icon. username=username.left(username.find(" - (",0,true)); // Strip out the username. if(UserDialog::editUser(username)) { // Bring up the userinfo dialog. // If there were any changed also update the views. getUsers(); getGroups(); } } else { QMessageBox::information(this,"No selection.","No user has been selected."); } } if(myTabWidget->currentPageIndex()==1) { // All users if(usersListView->currentItem()) { // Anything changed!? username=usersListView->currentItem()->text(1); // Get the username. if(UserDialog::editUser(username)) { // Bring up the userinfo dialog. // And again update the views if there were any changes. getUsers(); getGroups(); } } else { QMessageBox::information(this,"No selection.","No user has been selected."); } } } void UserConfig::delUser() { QString username; if(myTabWidget->currentPageIndex()==0) { // Users, Iconview. if(usersIconView->currentItem()) { // Anything selected? username=usersIconView->currentItem()->text(1); // Get string associated with icon. username=username.left(username.find(" - (",0,true)); // Strip out the username. if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) { if(UserDialog::delUser(username)) { // Delete the user if possible. // Update views. getUsers(); getGroups(); } } } else { QMessageBox::information(this,"No selection","No user has been selected."); } } if(myTabWidget->currentPageIndex()==1) { // All users if(usersListView->currentItem()) { // Anything changed!? username=usersListView->currentItem()->text(1); // Get the username. if(QMessageBox::warning(this,"Delete user","Are you sure you want to\ndelete this user? \""+QString(username)+"\" ?","&No","&Yes",0,0,1)) { if(UserDialog::delUser(username)) { // Try to delete the user. // Update views. getUsers(); getGroups(); } } } else { QMessageBox::information(this,"No selection","No user has been selected."); } } } void UserConfig::getGroups() { groupsListView->clear(); // Empty the listview. availableGID=500; // We need to find the next free GID, and are only interested in values between 500 & 65000. for(QStringList::Iterator it=accounts->groupStringList.begin(); it!=accounts->groupStringList.end(); ++it) { // Split the list into lines. accounts->splitGroupEntry(*it); // Split the line into its components and fill the variables of 'accounts'. (gr_name, gr_uid & gr_mem). if(accounts->gr_name.find(QRegExp("^#"),0)) { // Skip commented lines. new QListViewItem(groupsListView,QString::number(accounts->gr_gid),accounts->gr_name); if((accounts->gr_gid>=availableGID) && (accounts->gr_gid<65000)) availableGID=accounts->gr_gid+1; // Maybe a new free GID. } } } void UserConfig::addGroup() { if(GroupDialog::addGroup(availableGID)) getGroups(); // Bring up the add group dialog. } void UserConfig::editGroup() { int gid; if(groupsListView->currentItem()) { // Any group selected? gid=groupsListView->currentItem()->text(0).toInt(); // Get the GID from the listview. if(GroupDialog::editGroup(gid)) getGroups(); // Bring up the edit group dialog. } else { QMessageBox::information(this,"No selection","No group has been selected."); } } void UserConfig::delGroup() { const char *groupname; if(groupsListView->currentItem()) { // Any group selected? groupname=groupsListView->currentItem()->text(1); // Get the groupname from the listview. if(QMessageBox::warning(this,"Delete group","Are you sure you want to\ndelete the group \""+QString(groupname)+"\" ?","&No","&Yes",0,0,1)) { // If confirmed, try to delete the group. if(GroupDialog::delGroup(groupname)) getGroups(); // And also update the view afterwards if the user was deleted. } } else { QMessageBox::information(this,"No selection","No group has been selected."); } } void UserConfig::showUserMenu(QListViewItem *item) { // userPopupMenu.exec(item->mapToGlobal(QPoint(0,0))); qWarning("Pressed!"); } diff --git a/noncore/styles/liquid/liquidset.cpp b/noncore/styles/liquid/liquidset.cpp index 7747da7..a7cfccc 100644 --- a/noncore/styles/liquid/liquidset.cpp +++ b/noncore/styles/liquid/liquidset.cpp @@ -1,169 +1,169 @@ /********************************************************************** ** 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 "liquidset.h" #include "liquid.h" #include <qpe/qpeapplication.h> #include <qpe/global.h> #include <qslider.h> #include <qcombobox.h> #include <qradiobutton.h> #include <qcheckbox.h> #include <qlabel.h> #include <qlayout.h> #include <qpe/config.h> #include <opie/ocolorbutton.h> LiquidSettings::LiquidSettings ( QWidget* parent, const char *name, WFlags fl ) : QWidget ( parent, name, fl ) { setCaption ( tr( "Liquid Style" ) ); Config config ( "qpe" ); config. setGroup ( "Liquid-Style" ); m_type = config. readNumEntry ( "Type", TransStippleBg ); QColor mcol = QColor ( config. readEntry ( "Color", QApplication::palette ( ). active ( ). button ( ). name ( ))); QColor tcol = QColor ( config. readEntry ( "TextColor", QApplication::palette ( ). active ( ). text ( ). name ( ))); int opacity = config. readNumEntry ( "Opacity", 10 ); m_shadow = config. readBoolEntry ( "ShadowText", true ); int contrast = config. readNumEntry ( "StippleContrast", 5 ); m_flat = config. readBoolEntry ( "FlatToolButtons", false ); QVBoxLayout *vbox = new QVBoxLayout ( this ); vbox-> setSpacing ( 3 ); vbox-> setMargin ( 4 ); QComboBox *cb = new QComboBox ( this ); cb-> insertItem ( tr( "No translucency" ), None ); cb-> insertItem ( tr( "Stippled, background color" ), StippledBg ); cb-> insertItem ( tr( "Stippled, button color" ), StippledBtn ); cb-> insertItem ( tr( "Translucent stippled, background color" ), TransStippleBg ); cb-> insertItem ( tr( "Translucent stippled, button color" ), TransStippleBtn ); cb-> insertItem ( tr( "Custom translucency" ), Custom ); cb-> setCurrentItem ( m_type ); vbox-> addWidget ( cb ); QGridLayout *grid = new QGridLayout ( vbox ); grid-> addColSpacing ( 0, 16 ); grid-> addColSpacing ( 3, 8 ); grid-> addWidget ( m_menulbl = new QLabel ( tr( "Menu color" ), this ), 0, 1 ); grid-> addWidget ( m_textlbl = new QLabel ( tr( "Text color" ), this ), 0, 4 ); grid-> addWidget ( m_opaclbl = new QLabel ( tr( "Opacity" ), this ), 1, 1 ); m_menubtn = new OColorButton ( this, mcol ); grid-> addWidget ( m_menubtn, 0, 2 ); m_textbtn = new OColorButton ( this, tcol ); grid-> addWidget ( m_textbtn, 0, 5 ); m_opacsld = new QSlider ( Horizontal, this ); m_opacsld-> setRange ( -20, 20 ); m_opacsld-> setSteps ( 1, 1 ); m_opacsld-> setValue ( opacity ); m_opacsld-> setTickmarks ( QSlider::Below ); grid-> addMultiCellWidget ( m_opacsld, 1, 1, 2, 5 ); vbox-> addSpacing ( 4 ); QCheckBox *shadow = new QCheckBox ( tr( "Use shadowed menu text" ), this ); shadow-> setChecked ( m_shadow ); vbox-> addWidget ( shadow ); vbox-> addSpacing ( 4 ); QCheckBox *flattb = new QCheckBox ( tr( "Make toolbar buttons appear flat" ), this ); flattb-> setChecked ( m_flat ); vbox-> addWidget ( flattb ); vbox-> addSpacing ( 4 ); QHBoxLayout *hbox = new QHBoxLayout ( vbox ); hbox-> addWidget ( new QLabel ( tr( "Stipple contrast" ), this )); m_contsld = new QSlider ( Horizontal, this ); m_contsld-> setRange ( 0, 10 ); m_contsld-> setSteps ( 1, 1 ); m_contsld-> setValue ( contrast ); m_contsld-> setTickmarks ( QSlider::Below ); hbox-> addWidget ( m_contsld, 10 ); vbox-> addStretch ( 10 ); changeType ( m_type ); - connect ( cb, SIGNAL( highlighted ( int ) ), this, SLOT( changeType ( int ) ) ); - connect ( shadow, SIGNAL( toggled ( bool ) ), this, SLOT( changeShadow ( bool ) ) ); - connect ( flattb, SIGNAL( toggled ( bool ) ), this, SLOT( changeFlat ( bool ) ) ); + connect ( cb, SIGNAL( highlighted(int) ), this, SLOT( changeType(int) ) ); + connect ( shadow, SIGNAL( toggled(bool) ), this, SLOT( changeShadow(bool) ) ); + connect ( flattb, SIGNAL( toggled(bool) ), this, SLOT( changeFlat(bool) ) ); } void LiquidSettings::changeType ( int t ) { bool custom = ( t == Custom ); m_menulbl-> setEnabled ( custom ); m_textlbl-> setEnabled ( custom ); m_opaclbl-> setEnabled ( custom ); m_menubtn-> setEnabled ( custom ); m_textbtn-> setEnabled ( custom ); m_opacsld-> setEnabled ( custom ); m_type = t; } void LiquidSettings::changeShadow ( bool b ) { m_shadow = b; } void LiquidSettings::changeFlat ( bool b ) { m_flat = b; } bool LiquidSettings::writeConfig ( ) { Config config ( "qpe" ); config. setGroup ( "Liquid-Style" ); config. writeEntry ( "Type", m_type ); config. writeEntry ( "Color", m_menubtn-> color ( ). name ( )); config. writeEntry ( "TextColor", m_textbtn-> color ( ). name ( )); config. writeEntry ( "Opacity", m_opacsld-> value ( )); config. writeEntry ( "ShadowText", m_shadow ); config. writeEntry ( "StippleContrast", m_contsld-> value ( )); config. writeEntry ( "FlatToolButtons", m_flat ); config. write ( ); return true; } diff --git a/noncore/todayplugins/fortune/fortunepluginwidget.cpp b/noncore/todayplugins/fortune/fortunepluginwidget.cpp index b210fa9..e6a0d09 100644 --- a/noncore/todayplugins/fortune/fortunepluginwidget.cpp +++ b/noncore/todayplugins/fortune/fortunepluginwidget.cpp @@ -1,84 +1,84 @@ /* * fortunepluginwidget.cpp * * copyright : (c) 2002 by Maximilian Reiß * email : harlekin@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 "fortunepluginwidget.h" #include <qvaluelist.h> #include <qtl.h> #include <qstring.h> #include <qscrollview.h> #include <qobject.h> #include <qlayout.h> #include <qpe/config.h> #include <qpe/qcopenvelope_qws.h> #include <opie/oprocess.h> #include <opie/oticker.h> FortunePluginWidget::FortunePluginWidget( QWidget *parent, const char* name ) : QWidget( parent, name ) { fortune = NULL; getFortune(); } FortunePluginWidget::~FortunePluginWidget() { if( fortuneProcess ){ delete fortuneProcess; } } /** * Get the fortunes */ void FortunePluginWidget::getFortune() { QVBoxLayout* layoutFortune = new QVBoxLayout( this ); if ( fortune ) { delete fortune; } fortune = new OTicker( this ); // fortune->setReadOnly( TRUE ); // fortune->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ) ); fortune->setText( QString("Obtaining fortune...") ); layoutFortune->addWidget( fortune ); fortuneProcess = new OProcess(); *fortuneProcess << "fortune"; - connect(fortuneProcess, SIGNAL(receivedStdout(OProcess*, char*, int ) ), - this, SLOT(slotStdOut(OProcess*, char*, int) ) ); + connect(fortuneProcess, SIGNAL(receivedStdout(OProcess*,char*,int) ), + this, SLOT(slotStdOut(OProcess*,char*,int) ) ); if(!fortuneProcess->start(OProcess::NotifyOnExit, OProcess::AllOutput) ) { qWarning("could not start :("); fortune->setText( QString("Failed to obtain fortune.") ); delete fortuneProcess; fortuneProcess = 0; } } void FortunePluginWidget::slotStdOut( OProcess* proc, char* buf, int len ) { QCString s( buf, len ); s.replace( QRegExp("\n"), "" ); fortune->setText( s ); } diff --git a/noncore/todayplugins/stockticker/stockticker/helpwindow.cpp b/noncore/todayplugins/stockticker/stockticker/helpwindow.cpp index 2274402..db662e8 100644 --- a/noncore/todayplugins/stockticker/stockticker/helpwindow.cpp +++ b/noncore/todayplugins/stockticker/stockticker/helpwindow.cpp @@ -1,267 +1,267 @@ /**************************************************************************** ** ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. ** ** This file is part of an example program for Qt. This example ** program may be used, distributed and modified without limitation. ** *****************************************************************************/ #include "helpwindow.h" #include <qstatusbar.h> #include <qmenubar.h> #include <qtoolbar.h> #include <qtoolbutton.h> #include <qcombobox.h> #include <ctype.h> HelpWindow::HelpWindow( const QString& home_, const QString& _path, QWidget* parent, const char *name ) : QMainWindow( parent, name, WDestructiveClose ), pathCombo( 0 ), selectedURL() { readHistory(); readBookmarks(); browser = new QTextBrowser( this ); QStringList Strlist; Strlist.append( home_); browser->mimeSourceFactory()->setFilePath( Strlist ); browser->setFrameStyle( QFrame::Panel | QFrame::Sunken ); connect( browser, SIGNAL( textChanged() ), this, SLOT( textChanged() ) ); setCentralWidget( browser ); if ( !home_.isEmpty() ) //////////////////////////////// browser->setSource( home_ ); //////////////////////////////// - connect( browser, SIGNAL( highlighted( const QString&) ), - statusBar(), SLOT( message( const QString&)) ); + connect( browser, SIGNAL( highlighted(const QString&) ), + statusBar(), SLOT( message(const QString&)) ); setGeometry( 0,0,236,280); QPopupMenu* file = new QPopupMenu( this ); // file->insertItem( tr("&New Window"), this, SLOT( newWindow() ), ALT | Key_N ); file->insertItem( tr("&Open File"), this, SLOT( openFile() ), ALT | Key_O ); // file->insertItem( tr("&Print"), this, SLOT( print() ), ALT | Key_P ); file->insertSeparator(); file->insertItem( tr("&Close"), this, SLOT( close() ), ALT | Key_Q ); // file->insertItem( tr("E&xit"), qApp, SLOT( closeAllWindows() ), ALT | Key_X ); // The same three icons are used twice each. ////F FIXME QString pixs=(QDir::homeDirPath ()) +"/Applications/gutenbrowser/pix/"; QIconSet icon_back( QPixmap(pixs+"back.png") ); QIconSet icon_forward( QPixmap(pixs+"forward.png") ); QIconSet icon_home( QPixmap(pixs+"home.png") ); QPopupMenu* go = new QPopupMenu( this ); backwardId = go->insertItem( icon_back, tr("&Backward"), browser, SLOT( backward() ), ALT | Key_Left ); forwardId = go->insertItem( icon_forward, tr("&Forward"), browser, SLOT( forward() ), ALT | Key_Right ); go->insertItem( icon_home, tr("&Home"), browser, SLOT( home() ) ); hist = new QPopupMenu( this ); QStringList::Iterator it = history.begin(); for ( ; it != history.end(); ++it ) mHistory[ hist->insertItem( *it ) ] = *it; - connect( hist, SIGNAL( activated( int ) ), this, SLOT( histChosen( int ) ) ); + connect( hist, SIGNAL( activated(int) ), this, SLOT( histChosen(int) ) ); bookm = new QPopupMenu( this ); bookm->insertItem( tr( "Add Bookmark" ), this, SLOT( addBookmark() ) ); bookm->insertSeparator(); QStringList::Iterator it2 = bookmarks.begin(); for ( ; it2 != bookmarks.end(); ++it2 ) mBookmarks[ bookm->insertItem( *it2 ) ] = *it2; - connect( bookm, SIGNAL( activated( int ) ), - this, SLOT( bookmChosen( int ) ) ); + connect( bookm, SIGNAL( activated(int) ), + this, SLOT( bookmChosen(int) ) ); menuBar()->insertItem( tr("&File"), file ); menuBar()->insertItem( tr("&Go"), go ); menuBar()->insertItem( tr( "History" ), hist ); menuBar()->insertItem( tr( "Bookmarks" ), bookm ); // menuBar()->insertSeparator(); // menuBar()->insertItem( tr("&Help"), help ); menuBar()->setItemEnabled( forwardId, FALSE); menuBar()->setItemEnabled( backwardId, FALSE); - connect( browser, SIGNAL( backwardAvailable( bool ) ), this, SLOT( setBackwardAvailable( bool ) ) ); - connect( browser, SIGNAL( forwardAvailable( bool ) ), this, SLOT( setForwardAvailable( bool ) ) ); + connect( browser, SIGNAL( backwardAvailable(bool) ), this, SLOT( setBackwardAvailable(bool) ) ); + connect( browser, SIGNAL( forwardAvailable(bool) ), this, SLOT( setForwardAvailable(bool) ) ); QToolBar* toolbar = new QToolBar( this ); addToolBar( toolbar, "Toolbar"); QToolButton* button; button = new QToolButton( icon_back, tr("Backward"), "", browser, SLOT(backward()), toolbar ); connect( browser, SIGNAL( backwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); button->setEnabled( FALSE ); button = new QToolButton( icon_forward, tr("Forward"), "", browser, SLOT(forward()), toolbar ); connect( browser, SIGNAL( forwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); button->setEnabled( FALSE ); button = new QToolButton( icon_home, tr("Home"), "", browser, SLOT(home()), toolbar ); toolbar->addSeparator(); pathCombo = new QComboBox( TRUE, toolbar ); - connect( pathCombo, SIGNAL( activated( const QString & ) ), this, SLOT( pathSelected( const QString & ) ) ); + connect( pathCombo, SIGNAL( activated(const QString&) ), this, SLOT( pathSelected(const QString&) ) ); toolbar->setStretchableWidget( pathCombo ); // pathCombo->setMaximumWidth(190); // setRightJustification( TRUE ); // setDockEnabled( Left, FALSE ); // setDockEnabled( Right, FALSE ); pathCombo->insertItem( home_ ); browser->setFocus(); } void HelpWindow::setBackwardAvailable( bool b) { menuBar()->setItemEnabled( backwardId, b); } void HelpWindow::setForwardAvailable( bool b) { menuBar()->setItemEnabled( forwardId, b); } void HelpWindow::textChanged() { if ( browser->documentTitle().isNull() ) { setCaption( "Stockticker Lookup - " + browser->context() ); selectedURL = browser->context(); } else { setCaption( "Stockticker Lookup - " + browser->documentTitle() ) ; selectedURL = browser->documentTitle(); } if ( !selectedURL.isEmpty() && pathCombo ) { bool exists = FALSE; int i; for ( i = 0; i < pathCombo->count(); ++i ) { if ( pathCombo->text( i ) == selectedURL ) { exists = TRUE; break; } } if ( !exists ) { pathCombo->insertItem( selectedURL, 0 ); pathCombo->setCurrentItem( 0 ); mHistory[ hist->insertItem( selectedURL ) ] = selectedURL; } else pathCombo->setCurrentItem( i ); selectedURL = QString::null; } } HelpWindow::~HelpWindow() { history.clear(); QMap<int, QString>::Iterator it = mHistory.begin(); for ( ; it != mHistory.end(); ++it ) history.append( *it ); QFile f( QDir::currentDirPath() + "/.history" ); f.open( IO_WriteOnly ); QDataStream s( &f ); s << history; f.close(); bookmarks.clear(); QMap<int, QString>::Iterator it2 = mBookmarks.begin(); for ( ; it2 != mBookmarks.end(); ++it2 ) bookmarks.append( *it2 ); QFile f2( QDir::currentDirPath() + "/.bookmarks" ); f2.open( IO_WriteOnly ); QDataStream s2( &f2 ); s2 << bookmarks; f2.close(); } void HelpWindow::openFile() { #ifndef QT_NO_FILEDIALOG QString fn = QFileDialog::getOpenFileName( QString::null, QString::null, this ); if ( !fn.isEmpty() ) browser->setSource( fn ); #endif } void HelpWindow::newWindow() { ( new HelpWindow(browser->source(), "qbrowser") )->show(); } void HelpWindow::pathSelected( const QString &_path ) { browser->setSource( _path ); QMap<int, QString>::Iterator it = mHistory.begin(); bool exists = FALSE; for ( ; it != mHistory.end(); ++it ) { if ( *it == _path ) { exists = TRUE; break; } } if ( !exists ) mHistory[ hist->insertItem( _path ) ] = _path; } void HelpWindow::readHistory() { if ( QFile::exists( QDir::currentDirPath() + "/.history" ) ) { QFile f( QDir::currentDirPath() + "/.history" ); f.open( IO_ReadOnly ); QDataStream s( &f ); s >> history; f.close(); while ( history.count() > 20 ) history.remove( history.begin() ); } } void HelpWindow::readBookmarks() { if ( QFile::exists( QDir::currentDirPath() + "/.bookmarks" ) ) { QFile f( QDir::currentDirPath() + "/.bookmarks" ); f.open( IO_ReadOnly ); QDataStream s( &f ); s >> bookmarks; f.close(); } } void HelpWindow::histChosen( int i ) { if ( mHistory.contains( i ) ) browser->setSource( mHistory[ i ] ); } void HelpWindow::bookmChosen( int i ) { if ( mBookmarks.contains( i ) ) browser->setSource( mBookmarks[ i ] ); } void HelpWindow::addBookmark() { mBookmarks[ bookm->insertItem( caption() ) ] = caption(); } diff --git a/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp b/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp index 73f8bb3..64798f4 100644 --- a/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp +++ b/noncore/todayplugins/stockticker/stockticker/inputDialog.cpp @@ -1,89 +1,89 @@ #include "inputDialog.h" #include <qapplication.h> #include <qlayout.h> #include <qcheckbox.h> #include <qlineedit.h> #include <qvariant.h> #include <qpushbutton.h> #include <qwhatsthis.h> #include <qlabel.h> #include <qlayout.h> #include <qpe/config.h> #include <qstringlist.h> #include <qmainwindow.h> #include "helpwindow.h" #include <opie/oprocess.h> #include <stdlib.h> // #include <sys/stat.h> // #include <unistd.h> InputDialog::InputDialog( ) : QMainWindow( 0x0, 0x0, WStyle_ContextHelp ) { setCaption( tr("Symbol Lookup")); QGridLayout *layout = new QGridLayout( this ); layout->setSpacing(6); layout->setMargin( 2); LineEdit1 = new QLineEdit( this, "LineEdit1" ); LineEdit1->setFocus(); layout->addMultiCellWidget( LineEdit1, 0, 0, 0, 3); QLabel *label; label = new QLabel(this); label->setText( tr("Enter something to lookup / search.")); label->setMaximumHeight(60); layout->addMultiCellWidget( label, 1, 1, 0, 3); connect(LineEdit1,SIGNAL(returnPressed()),this,SLOT(doLookup())); QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Expanding ); layout->addItem( spacer, 8, 0 ); } InputDialog::~InputDialog() { } void InputDialog::doLookup() { // http://finance.yahoo.com/l?m=&s=siemens&t= QString url = "\"http://finance.yahoo.com/l?m=&s="+LineEdit1->text()+"\""; QString tempHtml = "/tmp/stockticker.html"; QString cmd = "wget -O "+tempHtml+" "+url; qDebug(cmd); /* OProcess proc; proc << "/usr/bin/wget"; proc<<"-O"<< tempHtml<< url; - connect( &proc, SIGNAL( processExited( OProcess *)),this, SLOT( showBrowser(OProcess *))); + connect( &proc, SIGNAL( processExited(OProcess*)),this, SLOT( showBrowser(OProcess*))); proc.start( OProcess::NotifyOnExit); */ system(cmd.latin1()); HelpWindow *StockLookup = new HelpWindow( tempHtml,".",this, "SymbolLookup"); StockLookup->setCaption("Symbol"); StockLookup->showMaximized(); StockLookup->show(); LineEdit1->text(); } void InputDialog::showBrowser(OProcess*) { qDebug("BLAH"); QString tempHtml = "/tmp/stockticker.html"; HelpWindow *StockLookup = new HelpWindow( tempHtml,".",this, "SymbolLookup"); StockLookup->setCaption("Symbol"); StockLookup->showMaximized(); StockLookup->show(); LineEdit1->text(); } diff --git a/noncore/todayplugins/weather/weatherpluginwidget.cpp b/noncore/todayplugins/weather/weatherpluginwidget.cpp index 4491b91..15d1c6e 100644 --- a/noncore/todayplugins/weather/weatherpluginwidget.cpp +++ b/noncore/todayplugins/weather/weatherpluginwidget.cpp @@ -1,325 +1,325 @@ /* This file is part of the OPIE Project =. .=l. Copyright (c) 2002 Dan Williams <williamsdr@acm.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 <qfile.h> #include <qimage.h> #include <qlabel.h> #include <qlayout.h> #include <qpixmap.h> #include <qtextstream.h> #include <opie/oprocess.h> #include <qpe/config.h> #include <qpe/resource.h> #include "weatherpluginwidget.h" WeatherPluginWidget::WeatherPluginWidget( QWidget *parent, const char* name ) : QWidget( parent, name ) { QHBoxLayout *layout = new QHBoxLayout( this ); layout->setAutoAdd( TRUE ); layout->setSpacing( 2 ); weatherIcon = new QLabel( this ); weatherIcon->setMaximumWidth( 32 ); QImage logo1 = Resource::loadImage( "Clock" ); QPixmap pic; pic.convertFromImage( logo1 ); weatherIcon->setPixmap( pic ); weatherLabel = new QLabel( tr( "Retreiving current weather information." ), this ); weatherLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Preferred ) ); startTimer(1000); } WeatherPluginWidget::~WeatherPluginWidget() { QFile file( localFile ); if ( file.exists() ) { file.remove(); } } void WeatherPluginWidget::timerEvent( QTimerEvent *e ) { killTimer( e->timerId() ); retreiveData(); } void WeatherPluginWidget::retreiveData() { Config config( "todayweatherplugin"); config.setGroup( "Config" ); location = config.readEntry( "Location", "" ); useMetric = config.readBoolEntry( "Metric", TRUE ); frequency = config.readNumEntry( "Frequency", 5 ); startTimer( frequency * 60000 ); localFile = "/tmp/"; localFile.append( location ); localFile.append( ".TXT" ); remoteFile = "http://weather.noaa.gov/pub/data/observations/metar/stations/"; remoteFile.append( location ); remoteFile.append( ".TXT" ); QFile file( localFile ); if ( file.exists() ) { file.remove(); } OProcess *proc = new OProcess; *proc << "wget" << "-q" << remoteFile << "-O" << localFile; - connect( proc, SIGNAL( processExited( OProcess * ) ), this, SLOT( dataRetrieved( OProcess * ) ) ); + connect( proc, SIGNAL( processExited(OProcess*) ), this, SLOT( dataRetrieved(OProcess*) ) ); proc->start(); } void WeatherPluginWidget::displayWeather() { weatherData = QString::null; QFile file( localFile ); if ( file.size() > 0 && file.open( IO_ReadOnly ) ) { QTextStream data( &file ); while ( !data.eof() ) { weatherData.append( data.readLine() ); } file.close(); weatherData = weatherData.simplifyWhiteSpace(); QString tmpstr; tmpstr.append( tr( "Temp: " ) ); getTemp( weatherData ); tmpstr.append( dataStr ); tmpstr.append( tr( " Wind: " ) ); getWind( weatherData ); tmpstr.append( dataStr ); tmpstr.append( tr( "\nPres: " ) ); getPressure( weatherData ); tmpstr.append( dataStr ); weatherLabel->setText( tmpstr ); tmpstr = "todayweatherplugin/"; getIcon( weatherData ); tmpstr.append( dataStr ); QImage logo1 = Resource::loadImage( tmpstr ); QPixmap pic; pic.convertFromImage( logo1 ); weatherIcon->setPixmap( pic ); } else { weatherLabel->setText( tr( "Current weather data not available." ) ); } } void WeatherPluginWidget::getTemp( const QString &data ) { int value; bool ok; int pos = data.find( QRegExp( "M?[0-9]+/M?[0-9]+" ), 20 ); if ( pos > -1 ) { if ( data.at( pos ) == 'M' ) { value = -1 * data.mid( pos + 1, 2 ).toInt( &ok ); } else { value = data.mid( pos, 2 ).toInt( &ok ); } if ( useMetric ) { dataStr = QString::number( value ); dataStr.append( 'C' ); } else { dataStr = QString::number( ( value * 9 / 5 ) + 32 ); dataStr.append( 'F' ); } } else { dataStr = tr( "n/a" ); } } void WeatherPluginWidget::getWind( const QString &data ) { int value; bool ok; int pos = data.find( QRegExp( "[0-9]*G*[0-9]*KT" ), 20 ); if ( pos > -1 ) { if ( data.mid( pos, 3 ) != "VRB" ) { value = data.mid( pos, 3 ).toInt( &ok ); if ( ( value >= 0 && value < 23 ) || ( value >= 239 && value <= 360 ) ) dataStr = tr("E " ); else if ( value >= 23 && value < 69 ) dataStr = tr( "NE " ); else if ( value >= 69 && value < 113 ) dataStr = tr( "N " ); else if ( value >= 113 && value < 157 ) dataStr = tr( "NW " ); else if ( value >= 157 && value < 203 ) dataStr = tr( "W " ); else if ( value >= 203 && value < 248 ) dataStr = tr( "SW " ); else if ( value >= 248 && value < 294 ) dataStr = tr( "S " ); else if ( value >= 294 && value < 238 ) dataStr = tr( "SE " ); } if ( data.mid( pos + 5, 1) == "G" || data.mid( pos + 5, 1) == "K" ) { value = data.mid( pos + 3, 2 ).toInt( &ok ); } else { value = data.mid( pos + 3, 3 ).toInt( &ok ); } if ( useMetric ) { value = value * 3.6 / 1.94; dataStr.append( QString::number( value ) ); dataStr.append( tr( " KPH" ) ); } else { value = value * 2.24 / 1.94; dataStr.append( QString::number( value ) ); dataStr.append( tr( " MPH" ) ); } } else { dataStr = tr( "n/a" ); } } void WeatherPluginWidget::getPressure( const QString &data ) { float value; bool ok; int pos = data.find( QRegExp( "[AQ][0-9]+" ), 20 ); if ( pos > -1 ) { value = data.mid( pos + 1, 4 ).toFloat( &ok ); if ( useMetric ) { if ( data.mid( pos, 1 ) == "A" ) value *= 33.8639 / 100; dataStr = QString::number( value, 'f', 2 ); dataStr.append( tr( " kPa" ) ); } else { if ( data.mid( pos, 1 ) == "Q" ) value /= 33.8639; else value /= 100; dataStr = QString::number( value, 'f', 2 ); dataStr.append( tr( " Hg" ) ); } } else { dataStr = tr( "n/a" ); } } void WeatherPluginWidget::getIcon(const QString &data ) { dataStr = "psunny"; if ( data.find( "CLR ", 20 ) > -1 || data.find( "SKC ", 20 ) > -1 || data.find( "CAVOK ", 20 ) > -1 ) { dataStr = "sunny"; } else if ( data.find( "SH ", 20 ) > -1 || data.find( "DZ ", 20 ) > -1 || data.find( "RA ", 20 ) > -1 || data.find( "UP ", 20 ) > -1 || data.find( "BR ", 20 ) > -1 ) { dataStr = "shower"; } else if ( data.find( "TS ", 20 ) > -1 ) { dataStr = "tstorm"; } else if ( data.find( "SN ", 20 ) > -1 || data.find( "SG ", 20 ) > -1 ) { dataStr = "snow"; } else if ( data.find( "FZ ", 20 ) > -1 || data.find( "GR ", 20 ) > -1 || data.find( "GS ", 20 ) > -1 || data.find( "PE ", 20 ) > -1 || data.find( "IC ", 20 ) > -1 ) { dataStr = "sleet"; } } void WeatherPluginWidget::dataRetrieved( OProcess *process ) { if ( process->normalExit() ) { displayWeather(); } else { weatherLabel->setText( tr( "Current weather data not available." ) ); } } diff --git a/noncore/tools/calc2/calc.cpp b/noncore/tools/calc2/calc.cpp index f75eb69..3dcdf6e 100644 --- a/noncore/tools/calc2/calc.cpp +++ b/noncore/tools/calc2/calc.cpp @@ -1,104 +1,104 @@ /********************************************************************** ** 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 <qvaluelist.h> #include <qpe/qpeapplication.h> #include <qdir.h> #include <qwidgetstack.h> #include "calc.h" #include "plugininterface.h" calc::calc (QWidget * p, const char *n):QWidget (p, n) { setCaption (tr ("Calculator")); // widgets LCD = new QLCDNumber (this); LCD->setMaximumSize (QSize (240, 30)); LCD->setNumDigits(12); LCD->setSegmentStyle(QLCDNumber::Filled); pluginWidgetStack = new QWidgetStack (this); // layout widgets calculatorLayout = new QVBoxLayout (this); calculatorLayout->addWidget (LCD); calculatorLayout->addWidget (pluginWidgetStack); // no formatting of display for now - connect (&engine, SIGNAL(display (double)), LCD, SLOT(display (double))); - connect (&engine, SIGNAL(display (const QString &)), LCD, SLOT(display (const QString &))); + connect (&engine, SIGNAL(display(double)), LCD, SLOT(display(double))); + connect (&engine, SIGNAL(display(const QString&)), LCD, SLOT(display(const QString&))); connect (&engine, SIGNAL(setBinMode()), LCD, SLOT(setBinMode())); connect (&engine, SIGNAL(setOctMode()), LCD, SLOT(setOctMode())); connect (&engine, SIGNAL(setDecMode()), LCD, SLOT(setDecMode())); connect (&engine, SIGNAL(setHexMode()), LCD, SLOT(setHexMode())); #ifndef NO_PLUGINS // load plugins QValueList < Plugin >::Iterator mit; for (mit = pluginList.begin (); mit != pluginList.end (); ++mit) { (*mit).interface->release (); (*mit).library->unload (); delete (*mit).library; } pluginList.clear (); QString path = QPEApplication::qpeDir() + "/plugins/calculator"; QDir dir (path, "lib*.so"); QStringList list = dir.entryList (); QStringList::Iterator it; for (it = list.begin (); it != list.end (); ++it) { CalcInterface *iface = 0; QLibrary *lib = new QLibrary (path + "/" + *it); Plugin plugin; plugin.pluginWidget = 0; if (lib->queryInterface (IID_Calc, (QUnknownInterface **) & iface) == QS_OK) { plugin.library = lib; plugin.interface = iface; plugin.pluginWidget = plugin.interface->getPlugin(&engine,pluginWidgetStack); if (plugin.pluginWidget) pluginWidgetStack->addWidget (plugin.pluginWidget, pluginList.count()); pluginList.append (plugin); } else { delete lib; } } setMode (1); #else // load simple interface #endif } calc::~calc () { #ifndef NO_PLUGINS QValueList < Plugin >::Iterator mit; for (mit = pluginList.begin (); mit != pluginList.end (); ++mit) { (*mit).interface->release (); (*mit).library->unload (); delete (*mit).library; } #endif } diff --git a/noncore/tools/calculator/calculatorimpl.cpp b/noncore/tools/calculator/calculatorimpl.cpp index 163b4da..dead03d 100644 --- a/noncore/tools/calculator/calculatorimpl.cpp +++ b/noncore/tools/calculator/calculatorimpl.cpp @@ -1,607 +1,607 @@ /********************************************************************** ** 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. ** **********************************************************************/ /* * 01/14/2002 Charles-Edouard Ruault <ce@ruault.com> * Added support for Temperature conversions. */ // Sat 03-09-2002 L.J. Potter added the inlined pixmaps here #include "calculatorimpl.h" #include <qpe/resource.h> #include <qpe/qmath.h> #include <qpe/qpeapplication.h> #include <qpushbutton.h> #include <qcombobox.h> #include <qlabel.h> #include <qfont.h> #include <qlayout.h> #include <qstringlist.h> #include <qfile.h> #include <qtextstream.h> #include <qmessagebox.h> #include <math.h> /* XPM */ static char *oneoverx_xpm[] = { /* width height num_colors chars_per_pixel */ " 13 11 2 1", /* colors */ ". c None", "# c #000000", /* pixels */ "......#......", ".....##......", "......#......" ".....###.....", ".............", "..#########..", ".............", "....##.##....", "......#......", "......#......", "....##.##....", }; /* XPM */ static char *ythrootofx_xpm[] = { /* width height num_colors chars_per_pixel */ " 13 11 2 1", /* colors */ ". c None", "# c #000000", /* pixels */ "#.#..........", "#.#..........", "###...#######", "..#..#.......", "###..#.......", ".....#.#...#.", ".#..#...#.#..", "#.#.#....#...", "..#.#...#.#..", "...#...#...#.", "...#........." }; /* XPM */ static char *xtopowerofy_xpm[] = { /* width height num_colors chars_per_pixel */ " 9 8 2 1", /* colors */ ". c None", "# c #000000", /* pixels */ "......#.#", "......#.#", "......###", "#...#...#", ".#.#..###", "..#......", ".#.#.....", "#...#...." }; CalculatorImpl::CalculatorImpl( QWidget * parent, const char * name, WFlags f ) : Calculator( parent, name, f ) { // xtopowerofy = Resource::loadPixmap("xtopowerofy"); // ythrootofx = Resource::loadPixmap("ythrootofx"); // oneoverx = Resource::loadPixmap("oneoverx"); memMark = new QLabel( "m", LCD ); memMark->setFont( QFont( "helvetica", 12, QFont::Bold, TRUE ) ); memMark->resize( 12, 12 ); memMark->move( 4, 2 ); memMark->hide(); mem = 0; PushButtonMR->setEnabled( FALSE ); current_mode = max_mode = conversion_mode_count = 0; last_conversion = -1; // translation trick mode - with this stuff parsed in from a file is translatable QObject::tr("Standard"); QObject::tr("Weight"); QObject::tr("Distance"); QObject::tr("Area"); QObject::tr("Temperatures"); QObject::tr("Volume"); QObject::tr("acres"); QObject::tr("°C"); QObject::tr("carats"); QObject::tr("cm"); QObject::tr("cu cm"); QObject::tr("cu ft"); QObject::tr("cu in"); QObject::tr("°F"); QObject::tr("fl oz (US)"); QObject::tr("ft"); QObject::tr("g"); QObject::tr("gal (US)"); QObject::tr("hectares"); QObject::tr("in"); QObject::tr("kg"); QObject::tr("km"); QObject::tr("l"); QObject::tr("lb"); QObject::tr("Lg tons"); QObject::tr("m"); QObject::tr("mg"); QObject::tr("mi"); QObject::tr("ml"); QObject::tr("mm"); QObject::tr("naut. mi"); QObject::tr("oz"); QObject::tr("points"); QObject::tr("pt"); QObject::tr("qt"); QObject::tr("sq cm"); QObject::tr("sq ft"); QObject::tr("sq in"); QObject::tr("sq km"); QObject::tr("sq m"); QObject::tr("sq mi"); QObject::tr("sq mm"); QObject::tr("sq yd"); QObject::tr("st"); QObject::tr("St tons"); QObject::tr("tblspoon"); QObject::tr("teaspoons"); QObject::tr("tonnes"); QObject::tr("yd"); //bgr_command.insert( PushButtonFunction); bgr_command.insert( PushButtonMPlus); bgr_command.insert( PushButtonMR); bgr_command.insert( PushButtonMC); bgr_command.insert( PushButtonCE); connect( &bgr_command, SIGNAL(clicked(int) ), this, SLOT(command_buttons(int))); bgr_digits.insert(PushButton0); bgr_digits.insert(PushButton1); bgr_digits.insert(PushButton2); bgr_digits.insert(PushButton3); bgr_digits.insert(PushButton4); bgr_digits.insert(PushButton5); bgr_digits.insert(PushButton6); bgr_digits.insert(PushButton7); bgr_digits.insert(PushButton8); bgr_digits.insert(PushButton9); connect( &bgr_digits, SIGNAL(clicked(int) ), this, SLOT(enterNumber(int))); bgr_std.insert(PushButtonEquals); bgr_std.insert(PushButtonDecimal); bgr_std.insert(PushButtonAdd); bgr_std.insert(PushButtonMinus); bgr_std.insert(PushButtonDivide); bgr_std.insert(PushButtonTimes); connect( &bgr_std, SIGNAL(clicked(int) ), this, SLOT(std_buttons(int))); // change the / to a proper division signal PushButtonDivide->setText(QChar(0xF7)); func_buttons[0] = PushButtonF1; func_buttons[1] = PushButtonF2; func_buttons[2] = PushButtonF3; func_buttons[3] = PushButtonF4; func_buttons[4] = PushButtonF5; func_buttons[5] = PushButtonF6; func_buttons[6] = PushButtonF7; func_buttons[7] = PushButtonF8; func_buttons[8] = PushButtonF9; func_buttons[9] = PushButtonF10; func_buttons[10] = PushButtonF11; func_buttons[11] = PushButtonF12; for ( int x = 0 ; x < func_button_count ; x++ ) { QPushButton* tmpbutton = func_buttons[x]; faces << tmpbutton->text(); bgr_function.insert(tmpbutton); } connect( &bgr_function, SIGNAL(clicked(int) ) , this, SLOT(do_convert(int) ) ); - connect( &bgr_function, SIGNAL(clicked(int) ) , this, SLOT(std_funcs (int) ) ); + connect( &bgr_function, SIGNAL(clicked(int) ) , this, SLOT(std_funcs(int) ) ); connect(ComboBoxFunction, SIGNAL(activated(int) ), this, SLOT(function_button(int) ) ); captions.append(tr("Standard")); ComboBoxFunction->insertItem(captions.last()); // now add in the conversion modes // when the menu gets done, these should be in a submenu QString tmp = QPEApplication::qpeDir(); tmp += "etc/unit_conversion.dat"; QFile myfile(tmp); if ( !myfile.open( IO_Translate | IO_ReadOnly ) ) { qDebug("Data file unit_conversion.dat not found\nNo conversion features will be available\n"+tmp); // disable the f button if no conv file available ComboBoxFunction->setEnabled(FALSE); } else { QString line, line2; QTextStream ts(&myfile); // first pass, see how many conversion types there are in order to allocate for them while ( ! ts.eof() ) { line = ts.readLine(); if ( line.contains ("STARTTYPE" ) ) conversion_mode_count++; } entry_list = new double[conversion_mode_count*func_button_count]; preoffset_list = new double[conversion_mode_count*func_button_count]; postoffset_list = new double[conversion_mode_count*func_button_count]; myfile.close(); myfile.open( IO_Translate | IO_ReadOnly ); QTextStream ts2(&myfile); // second pass, read in values int x = 0; while ( ! ts2.eof() ) { line = ts2.readLine(); if ( line.contains("STARTTYPE") ) { captions << tr( line.remove(0,10) ); ComboBoxFunction->insertItem(captions.last()); while ( !line.contains("ENDTYPE") ) { line = ts2.readLine(); if ( line.contains("NAME") ) { faces << tr( line.remove(0,5) ); line2 = ts2.readLine(); line2.remove(0,6); entry_list[x] = line2.toDouble(); line2 = ts2.readLine(); line2.remove(0,7); preoffset_list[x] = line2.toDouble(); line2 = ts2.readLine(); line2.remove(0,8); postoffset_list[x] = line2.toDouble(); x++; } } } } } myfile.close(); clear(); max_mode = pre_conv_modes_count + conversion_mode_count + post_conv_modes_count - 1; display_pixmap_faces(); qApp->installEventFilter( this ); } bool CalculatorImpl::eventFilter( QObject *o, QEvent *e ) { if ( e->type() == QEvent::KeyPress && state != sError ) { QKeyEvent *k = (QKeyEvent*)e; if ( k->key() >= Key_0 && k->key() <= Key_9 ) { enterNumber( k->key() - Key_0 ); return true; } else { switch ( k->key() ) { case Key_Equal: std_buttons(0); return true; case Key_Period: std_buttons(1); return true; case Key_Plus: std_buttons(2); return true; case Key_Minus: std_buttons(3); return true; case Key_Slash: std_buttons(4); return true; case Key_Asterisk: std_buttons(5); return true; case Key_Percent: execOp( oPercent ); return true; case Key_ParenLeft: if ( current_mode < pre_conv_modes_count ) execOp( oOpenBrace ); return true; case Key_ParenRight: if ( current_mode < pre_conv_modes_count ) execOp( oCloseBrace ); return true; default: break; } } } return Calculator::eventFilter( o, e ); } void CalculatorImpl::do_convert(int button) { if ( state == sError ) return; if ( current_mode >= pre_conv_modes_count && current_mode <= (max_mode - post_conv_modes_count) && button < changeable_func_button_count ) { if ( last_conversion > -1 ) { if( state == sNewNumber ){ acc = (num+ preoffset_list[(current_mode - pre_conv_modes_count) * func_button_count + last_conversion]) / (entry_list[(current_mode - pre_conv_modes_count) * func_button_count + last_conversion]) * (entry_list[(current_mode - pre_conv_modes_count) * func_button_count + button]) +postoffset_list[(current_mode - pre_conv_modes_count) * func_button_count + button]; num = acc; LCD->display( acc ); } else { state = sNewNumber; num = (num+ preoffset_list[(current_mode - pre_conv_modes_count) * func_button_count + last_conversion]) / (entry_list[(current_mode - pre_conv_modes_count) * func_button_count + last_conversion]) * (entry_list[(current_mode - pre_conv_modes_count) * func_button_count + button]) + postoffset_list[(current_mode - pre_conv_modes_count) * func_button_count + button];; LCD->display( num ); acc = num; } } last_conversion = button; } } void CalculatorImpl::function_button(int mode){ if ( state == sError ) clear(); // dont need the next line when using a popup menu current_mode = mode; // reset the last conv last_conversion = -1; // set the caption this->setCaption( captions[current_mode] ); reset_conv(); for ( int x = 0 ; x < changeable_func_button_count ; x++ ) { QPushButton* tmpbutton = func_buttons[x]; // if its a conversion , make it a toggle button if ( current_mode >= pre_conv_modes_count && current_mode <= (max_mode - post_conv_modes_count) ) { tmpbutton->setToggleButton(TRUE); } else { tmpbutton->setToggleButton(FALSE); } tmpbutton->setText( faces[current_mode * func_button_count + x] ); } if ( current_mode == 0 ) display_pixmap_faces(); if ( current_mode >= pre_conv_modes_count && current_mode <= (max_mode - post_conv_modes_count) ) { bgr_function.setExclusive(TRUE); } else { bgr_function.setExclusive(FALSE); } } void CalculatorImpl::display_pixmap_faces() { QPixmap image0( ( const char** ) xtopowerofy_xpm); QPushButton* tmpbutton = func_buttons[5]; tmpbutton->setPixmap(image0); QPixmap image1( ( const char** ) ythrootofx_xpm); tmpbutton = func_buttons[6]; tmpbutton->setPixmap(image1); QPixmap image2( ( const char** ) oneoverx_xpm); tmpbutton = func_buttons[3]; tmpbutton->setPixmap(image2); } void CalculatorImpl::clear() { acc = num = 0; operationStack.clear(); state = sStart; numDecimals = 0; numOpenBraces = 0; flPoint = FALSE; LCD->display( 0 ); fake = QString::null; reset_conv(); } void CalculatorImpl::reset_conv() { for ( int x = 0 ; x < changeable_func_button_count ; x++ ) { QPushButton* tmpbutton = func_buttons[x]; // dont carry any selections into the next mode if ( tmpbutton->state() == QPushButton::On ) { tmpbutton->toggle(); } } last_conversion = -1; } void CalculatorImpl::std_buttons(int button) { if ( state == sError ) return; execOp( (Operation)(button + oSum) ); } void CalculatorImpl::std_funcs(int button) { if ( state == sError ) return; if ( current_mode < pre_conv_modes_count || button > changeable_func_button_count-1 ) { Operation op; if ( button < 10 ) op = (Operation)(button + oSin); else if ( button == 10 ) op = oOpenBrace; else op = oCloseBrace; execOp( op ); } } void CalculatorImpl::execOp( Operation i ) { switch (i) { // these operators only affect the current number. case oDivX: case oLog: case oLn: case oSin: case oCos: case oTan: num = evalExpr(i); break; case oAdd: case oSub: { processStack( oAdd ); Op op( num, i ); operationStack.push( op ); break; } case oDiv: case oMult: case oRoot: case oXsquared: { processStack( oDiv ); Op op( num, i ); operationStack.push( op ); break; } case oChSign: num = -num; LCD->display(num); return; case oOpenBrace: { Op op( 0, oOpenBrace ); operationStack.push( op ); numOpenBraces++; state = sNewNumber; return; } case oCloseBrace: { if ( numOpenBraces == 0 ) return; processStack( oAdd ); if ( operationStack.top().operation != oOpenBrace ) qDebug( "Calculator: internal Error" ); operationStack.pop(); state = sNewNumber; numOpenBraces--; break; } case oPoint: flPoint = TRUE; return; case oPercent: processStack( oPercent ); break; case oSum: processStack( oSum ); break; default: return; }; if ( state == sError ) { LCD->display( "Error" ); return; } else { LCD->display(num); } state = sNewNumber; numDecimals = 0; flPoint = FALSE; } void CalculatorImpl::processStack( int op ) { //dubious percent hack, since the changeable operator precedences are //pretty much hardwired to be less than the non-changeable bool percent = FALSE; if ( op == oPercent ) { percent = TRUE; op = oSum; } while( !operationStack.isEmpty() && operationStack.top().operation >= op ) { Op operation = operationStack.pop(); acc = operation.number; if ( percent ) { if ( operation.operation == oAdd || operation.operation == oSub ) num = acc*num/100; else num = num / 100; } num = evalExpr( operation.operation ); percent = FALSE; } } double CalculatorImpl::evalExpr( int op ) { double sum = 0; switch( op ){ case oPercent: sum = num / 100.; break; case oDivX: if (num == 0) state = sError; else sum = 1 / num; break; case oXsquared: sum = pow(acc,num); break; case oChSign: (state == sStart) ? sum = -num : sum = -acc; break; case oSub: sum = acc - num; break; case oMult: sum = acc * num; break; case oAdd: sum = acc + num; break; case oDiv: { if (num == 0) { state = sError; } else { sum = acc / num; } break; } case oRoot: /* the linux library is dumb, and can't to -x to 1/n when n is odd. (even and error of course is acceptable */ if((acc < 0) && (int(num) == num) && (int(num) % 2 == 1 )) { sum = pow(-acc, 1 / num); sum = -sum; } else { sum = pow(acc, 1 / num); } break; case oLog: sum = log10(num); diff --git a/noncore/tools/clock/clock.cpp b/noncore/tools/clock/clock.cpp index 4d92683..118cf1f 100644 --- a/noncore/tools/clock/clock.cpp +++ b/noncore/tools/clock/clock.cpp @@ -1,556 +1,556 @@ /********************************************************************** ** 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. ** **********************************************************************/ // changes added and Copyright (C) by L. J. Potter <ljp@llornkcor.com> 2002 #include "clock.h" #include "setAlarm.h" #include <qpe/qpeapplication.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/config.h> #include <qpe/timestring.h> #include <qpe/alarmserver.h> #include <qpe/sound.h> #include <qpe/resource.h> #include <qsound.h> #include <qtimer.h> #include <opie/oclickablelabel.h> #include <qlcdnumber.h> #include <qslider.h> #include <qlabel.h> #include <qlayout.h> #include <qtimer.h> #include <qpushbutton.h> #include <qradiobutton.h> #include <qbuttongroup.h> #include <qpainter.h> #include <qmessagebox.h> #include <qdatetime.h> #include <math.h> #include <unistd.h> #include <sys/types.h> #include <pthread.h> const double deg2rad = 0.017453292519943295769; // pi/180 const int sw_prec = 2; void startPlayer() { Config config( "qpe" ); config.setGroup( "Time" ); sleep(15); QCopEnvelope e( "QPE/Application/opieplayer", "setDocument(QString)" ); e << config.readEntry( "mp3File", "" ); } static void toggleScreenSaver( bool on ) { QCopEnvelope e( "QPE/System", "setScreenSaverMode(int)" ); e << ( on ? QPEApplication::Enable : QPEApplication::DisableSuspend ); } Clock::Clock( QWidget * parent, const char * name, WFlags f ) : QVBox( parent, name , f ) { setSpacing( 4 ); setMargin( 1 ); snoozeBtn = new QPushButton ( this ); snoozeBtn->setText( tr( "Snooze" ) ); aclock = new AnalogClock( this ); aclock->display( QTime::currentTime() ); aclock->setLineWidth( 2 ); QHBox *hb = new QHBox( this ); hb->setMargin( 0 ); QWidget *space = new QWidget( hb ); lcd = new QLCDNumber( hb ); lcd->setSegmentStyle( QLCDNumber::Flat ); lcd->setFrameStyle( QFrame::NoFrame ); lcd->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ) ); lcd->setFixedHeight( 23 ); ampmLabel = new QLabel( tr( "PM" ), hb ); ampmLabel->setFont( QFont( "Helvetica", 14, QFont::Bold ) ); ampmLabel->setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Preferred ) ); ampmLabel->setAlignment( AlignLeft | AlignBottom ); space = new QWidget( hb ); date = new QLabel( this ); date->setAlignment( AlignHCenter | AlignVCenter ); date->setFont( QFont( "Helvetica", 14, QFont::Bold ) ); date->setText( TimeString::longDateString( QDate::currentDate() ) ); QWidget *controls = new QWidget( this ); QGridLayout *gl = new QGridLayout( controls, 3, 2, 6, 4 ); QButtonGroup *grp = new QButtonGroup( controls ); grp->setRadioButtonExclusive( true ); grp->hide(); clockRB = new QRadioButton ( tr( "Clock" ), controls ); gl->addWidget( clockRB, 0, 0 ); grp->insert( clockRB ); swatchRB = new QRadioButton ( tr( "Stopwatch" ), controls ); gl->addWidget( swatchRB, 1, 0 ); grp->insert( swatchRB ); - connect( grp, SIGNAL( clicked( int ) ), this, SLOT( modeSelect( int ) ) ); + connect( grp, SIGNAL( clicked(int) ), this, SLOT( modeSelect(int) ) ); grp->setButton( 0 ); set = new QPushButton ( controls ); set->setMaximumSize( 50, 30 ); gl->addWidget( set , 0, 1 ); set->setText( tr( "Start" ) ); set->setEnabled( FALSE ); grp->insert( set ); reset = new QPushButton ( controls ); gl->addWidget( reset, 1, 1 ); reset->setText( tr( "Reset" ) ); reset->setEnabled( FALSE ); grp->insert( reset ); alarmOffBtn = new QPushButton ( controls ); gl->addWidget( alarmOffBtn, 0, 2 ); alarmBtn = new QPushButton ( controls ); gl->addWidget( alarmBtn, 1, 2 ); alarmBtn->setText( tr( "Set Alarm" ) ); OClickableLabel *click = new OClickableLabel( controls, "label" ); click->setText( tr( "Set date and time." ) ); gl->addMultiCellWidget( click, 3, 3, 0, 2, AlignHCenter ); connect( click, SIGNAL( clicked() ), this, SLOT( slotAdjustTime() ) ); connect( set , SIGNAL( pressed() ), SLOT( slotSet() ) ); connect( reset, SIGNAL( clicked() ), SLOT( slotReset() ) ); connect( alarmBtn, SIGNAL( clicked() ), SLOT( slotSetAlarm() ) ); connect( snoozeBtn, SIGNAL( clicked() ), SLOT( slotSnooze() ) ); connect( alarmOffBtn, SIGNAL( clicked() ), SLOT( slotToggleAlarm() ) ); - connect( qApp, SIGNAL( appMessage( const QCString&, const QByteArray& ) ), - this, SLOT( appMessage( const QCString&, const QByteArray& ) ) ); + connect( qApp, SIGNAL( appMessage(const QCString&,const QByteArray&) ), + this, SLOT( appMessage(const QCString&,const QByteArray&) ) ); t = new QTimer( this ); connect( t, SIGNAL( timeout() ), SLOT( updateClock() ) ); t->start( 1000 ); connect( qApp, SIGNAL( timeChanged() ), SLOT( updateClock() ) ); swatch_running = FALSE; swatch_totalms = 0; - connect( qApp, SIGNAL( clockChanged( bool ) ), this, SLOT( changeClock( bool ) ) ); + connect( qApp, SIGNAL( clockChanged(bool) ), this, SLOT( changeClock(bool) ) ); Config config( "qpe" ); config.setGroup( "Time" ); ampm = config.readBoolEntry( "AMPM", TRUE ); QString tmp = config.readEntry( "clockAlarmHour", "" ); bool ok; hour = tmp.toInt( &ok, 10 ); tmp = config.readEntry( "clockAlarmMinute", "" ); minute = tmp.toInt( &ok, 10 ); if ( config.readEntry( "clockAlarmSet", "FALSE" ) == "TRUE" ) { alarmOffBtn->setText( tr( "Alarm Is On" ) ); alarmBool = TRUE; snoozeBtn->show(); } else { alarmOffBtn->setText( tr( "Alarm Is Off" ) ); alarmBool = FALSE; snoozeBtn->hide(); } QTimer::singleShot( 0, this, SLOT( updateClock() ) ); Config cfg( "Clock" ); cfg.setGroup( "Mode" ); int mode = cfg.readBoolEntry( "clockMode"); setSwatchMode( mode); modeSelect( mode); } Clock::~Clock() { toggleScreenSaver( true ); } void Clock::updateClock() { if ( clockRB->isChecked() ) { QTime tm = QDateTime::currentDateTime().time(); QString s; if ( ampm ) { int hour = tm.hour(); if ( hour == 0 ) hour = 12; if ( hour > 12 ) hour -= 12; s.sprintf( "%2d%c%02d", hour, ':', tm.minute() ); ampmLabel->setText( ( tm.hour() >= 12 ) ? "PM" : "AM" ); ampmLabel->show(); } else { s.sprintf( "%2d%c%02d", tm.hour(), ':', tm.minute() ); ampmLabel->hide(); } lcd->display( s ); lcd->repaint( FALSE ); aclock->display( QTime::currentTime() ); date->setText( TimeString::longDateString( QDate::currentDate() ) ); } else { QTime swatch_time; QString lcdtext; int totalms = swatch_totalms; if ( swatch_running ) totalms += swatch_start.elapsed(); swatch_time = QTime( 0, 0, 0 ).addMSecs( totalms ); QString d = swatch_running ? QString( " " ) : QString::number( totalms % 1000 + 1000 ); lcdtext = swatch_time.toString() + "." + d.right( 3 ).left( sw_prec ); lcd->display( lcdtext ); lcd->repaint( FALSE ); aclock->display( swatch_time ); date->setText( TimeString::longDateString( QDate::currentDate() ) ); } } void Clock::changeClock( bool a ) { ampm = a; updateClock(); } void Clock::clearClock( void ) { lcd->display( QTime( 0, 0, 0 ).toString() ); aclock->display( QTime( 0, 0, 0 ) ); } void Clock::startSWatch() { if(swatch_running) { stopSWatch(); return; } qDebug("startSWatch()"); swatch_start.start(); set->setText( tr( "Stop" ) ); t->start( 1000 ); swatch_running = TRUE; // disable screensaver while stop watch is running toggleScreenSaver( FALSE ); } void Clock::stopSWatch() { qDebug("stopSWatch()"); swatch_totalms += swatch_start.elapsed(); set->setText( tr( "Start" ) ); t->stop(); swatch_running = FALSE; toggleScreenSaver( TRUE ); updateClock(); } void Clock::slotSet() { if ( t->isActive() ) { startSWatch(); } else { stopSWatch(); } } void Clock::slotReset() { t->stop(); swatch_start.start(); swatch_totalms = 0; if ( swatch_running ) t->start( 1000 ); updateClock(); } void Clock::modeSelect( int m ) { qDebug("Clock::modeSelect( %d) ", m); if ( m != 0 ) { lcd->setNumDigits( 8 + 1 + sw_prec ); lcd->setMinimumWidth( lcd->sizeHint().width() ); set->setEnabled( TRUE ); reset->setEnabled( TRUE ); ampmLabel->hide(); // if(m == 2) { if ( !swatch_running ) { t->start( 1000 ); } // else // { // stopSWatch(); // } // } } else //clock mode { lcd->setNumDigits( 5 ); lcd->setMinimumWidth( lcd->sizeHint().width() ); set->setEnabled( FALSE ); reset->setEnabled( FALSE ); t->start( 1000 ); } Config config( "Clock" ); config.setGroup( "Mode" ); config.writeEntry( "clockMode", m ); updateClock(); } //this sets the alarm time void Clock::slotSetAlarm() { if ( !snoozeBtn->isHidden() ) slotToggleAlarm(); Set_Alarm *setAlarmDlg; setAlarmDlg = new Set_Alarm( this, "SetAlarm", TRUE ); int result = setAlarmDlg->exec(); if ( result == 1 ) { Config config( "qpe" ); config.setGroup( "Time" ); QString tmp; hour = setAlarmDlg->Hour_Slider->value(); minute = setAlarmDlg->Minute_Slider->value(); snoozeTime = setAlarmDlg->SnoozeSlider->value(); if ( ampm ) { if ( hour == 12 ) hour = 0; if ( setAlarmDlg->Pm_RadioButton->isChecked() && hour < 12 ) hour += 12; } config.writeEntry( "clockAlarmHour", tmp.setNum( hour ), 10 ); config.writeEntry( "clockAlarmMinute", tmp.setNum( minute ), 10 ); config.writeEntry( "clockAlarmSnooze", tmp.setNum( snoozeTime ), 10 ); config.write(); } } void Clock::slotSnooze() { bSound = FALSE; int warn = 0; QTime t = QTime::currentTime(); QDateTime whenl( when.date(), t.addSecs( snoozeTime * 60 ) ); when = whenl; AlarmServer::addAlarm( when, "QPE/Application/clock", "alarm(QDateTime,int)", warn ); } //toggles alarm on/off void Clock::slotToggleAlarm() { Config config( "qpe" ); config.setGroup( "Time" ); if ( alarmBool ) { config.writeEntry( "clockAlarmSet", "FALSE" ); alarmOffBtn->setText( tr( "Alarm Is Off" ) ); snoozeBtn->hide(); alarmBool = FALSE; alarmOff(); } else { config.writeEntry( "clockAlarmSet", "TRUE" ); alarmOffBtn->setText( tr( "Alarm Is On" ) ); snoozeBtn->show(); alarmBool = TRUE; alarmOn(); } config.write(); } void Clock::alarmOn() { QDate d = QDate::currentDate(); QTime tm( ( int ) hour, ( int ) minute, 0 ); qDebug( "Time set " + tm.toString() ); QTime t = QTime::currentTime(); if ( t > tm ) d = d.addDays( 1 ); int warn = 0; QDateTime whenl( d, tm ); when = whenl; AlarmServer::addAlarm( when, "QPE/Application/clock", "alarm(QDateTime,int)", warn ); // setCaption( "Alarm set: " + whenl.toString() ); setCaption( tr("Alarm set: %1" ).arg(whenl.toString()) ); } void Clock::alarmOff() { int warn = 0; bSound = FALSE; AlarmServer::deleteAlarm( when, "QPE/Application/clock", "alarm(QDateTime,int)", warn ); qDebug( "Alarm Off " + when.toString() ); setCaption( tr("Clock") ); } void Clock::clearTimer() { alarmOffBtn->setText( tr( "Alarm Is Off" ) ); alarmBool = FALSE; snoozeBtn->hide(); setCaption( tr("Clock") ); } void Clock::appMessage( const QCString& msg, const QByteArray& /*data*/ ) { int stopTimer = 0; int timerStay = 5000; bSound = TRUE; qDebug( "Message received in clock" ); if ( msg == "alarm(QDateTime,int)" ) { Config config( "qpe" ); config.setGroup( "Time" ); if ( config.readBoolEntry( "mp3Alarm", 0 ) ) { clearTimer(); pthread_t thread; pthread_create(&thread, NULL, (void * (*) (void *))startPlayer, NULL/* &*/); } else { Sound::soundAlarm(); stopTimer = startTimer( timerStay ); } } if ( msg == "timerStart()" ) { slotStartTimer(); } if ( msg == "timerStop()" ) { slotStopTimer(); } if ( msg == "timerReset()" ) { slotResetTimer(); } show(); raise(); QPEApplication::setKeepRunning(); setActiveWindow(); } void Clock::timerEvent( QTimerEvent *e ) { static int stop = 0; if ( stop < 120 && bSound ) { Sound::soundAlarm(); stop++; } else { stop = 0; killTimer( e->timerId() ); clearTimer(); setCaption( tr( "Clock: Alarm was missed." ) ); } } AnalogClock::AnalogClock(QWidget * parent, const char * name) : QFrame( parent, name ), clear(true) { QWidget *d = QApplication::desktop(); if(d->width() <= 240) bg = Resource::loadPixmap("clock/bg"); } QSizePolicy AnalogClock::sizePolicy() const { return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); } void AnalogClock::drawContents( QPainter *p ) { QRect r = contentsRect(); QRect fr; p->drawPixmap(QPoint(0, 0), bg, r); if ( r. width ( ) > r. height ( )) fr. setRect (( r. width ( ) - r. height ( )) / 2, r. y ( ), r. height ( ), r. height ( )); else fr. setRect ( r. x ( ), ( r. height ( ) - r. width ( )) / 2, r. width ( ), r. width ( )); QPoint center = fr. center ( ); // ( fr.x() + fr.width() / 2, fr.y() + fr.height() / 2 ); QPoint l1 ( center. x ( ), fr. y ( ) + 2 ); QPoint l2 ( center. x ( ), fr. y ( ) + 8 ); if ( clear ) { erase ( r ); p-> setPen ( NoPen ); p-> setBrush ( colorGroup ( ). color ( QColorGroup::Base )); p-> drawEllipse ( fr ); p-> setBrush ( NoBrush ); diff --git a/noncore/tools/formatter/formatter.cpp b/noncore/tools/formatter/formatter.cpp index e869317..77e1790 100644 --- a/noncore/tools/formatter/formatter.cpp +++ b/noncore/tools/formatter/formatter.cpp @@ -1,549 +1,549 @@ /**************************************************************************** ** formatter.cpp ** ** Copyright: Thu Apr 11 11:01:13 2002 ** by: L. J. Potter ** ****************************************************************************/ #include "formatter.h" #include "inputDialog.h" #include "output.h" /* OPIE */ #include <qpe/qpetoolbar.h> #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/config.h> #include <qpe/mimetype.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/storage.h> /* QT */ #include <qmenubar.h> #include <qmultilineedit.h> #include <qstring.h> #include <qlist.h> #include <qstringlist.h> #include <qdir.h> #include <qfile.h> #include <qtstream.h> #include <qcombobox.h> #include <qpopupmenu.h> #include <qmessagebox.h> #include <qregexp.h> #include <qlabel.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qtabwidget.h> #include <qwidget.h> #include <qlayout.h> #include <qvariant.h> /* STD */ #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/vfs.h> #include <mntent.h> #include <string.h> #include <errno.h> #define BLANK ' ' #define DELIMITER '#' /* Blah blah blah blah */ FormatterApp::FormatterApp( QWidget* parent, const char* name, WFlags fl, bool modal ) : QMainWindow( parent, name, fl ) // : QDialog( parent, name, modal, fl ) { if ( !name ) setName( "FormatterApp" ); connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); setCaption( tr( "Formatter" ) ); FormatterAppLayout = new QGridLayout( this ); FormatterAppLayout->setSpacing( 2); FormatterAppLayout->setMargin( 2 ); TabWidget = new QTabWidget( this, "TabWidget" ); tab = new QWidget( TabWidget, "tab" ); tabLayout = new QGridLayout( tab ); tabLayout->setSpacing( 3); tabLayout->setMargin( 2); storageComboBox = new QComboBox( FALSE, tab, "storageComboBox" ); storageComboBox->setMaximumWidth(220); tabLayout->addMultiCellWidget( storageComboBox, 0, 0, 0, 1); TextLabel4 = new QLabel( tab, "TextLabel4" ); TextLabel4->setText( tr( "Storage Type" ) ); tabLayout->addMultiCellWidget( TextLabel4, 1, 1, 0, 1); TextLabel2 = new QLabel( tab, "TextLabel2" ); TextLabel2->setText( tr( "File Systems" ) ); tabLayout->addMultiCellWidget( TextLabel2, 4, 4, 0, 1); fileSystemsCombo = new QComboBox( FALSE, tab, "fileSystemsCombo" ); fileSystemsCombo->setMaximumWidth(220); tabLayout->addMultiCellWidget( fileSystemsCombo, 3, 3, 0, 1); QSpacerItem* spacer = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Minimum ); tabLayout->addItem( spacer, 2, 0 ); formatPushButton = new QPushButton( tab, "formatPushButton" ); formatPushButton->setText( tr( "Format" ) ); formatPushButton->setMaximumWidth(170); tabLayout->addMultiCellWidget( formatPushButton, 6, 6, 0, 1); QSpacerItem* spacer_2 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Minimum ); tabLayout->addItem( spacer_2, 5, 0 ); TabWidget->insertTab( tab, tr( "Main" ) ); tab_2 = new QWidget( TabWidget, "tab_2" ); tabLayout_2 = new QGridLayout( tab_2 ); tabLayout_2->setSpacing(3); tabLayout_2->setMargin(2); mountPointLineEdit = new QLineEdit( tab_2, "mountPointLineEdit" ); tabLayout_2->addMultiCellWidget( mountPointLineEdit, 0, 0, 0, 1); deviceComboBox = new QComboBox( FALSE, tab_2, "deviceComboBox" ); tabLayout_2->addMultiCellWidget( deviceComboBox, 3, 3, 0, 1); TextLabel5 = new QLabel( tab_2, "TextLabel5" ); TextLabel5->setText( tr( "CAUTION:\n" "Changing parameters on this\n" "page may cause your system\n" "to stop functioning properly!" ) );//idiot message tabLayout_2->addMultiCellWidget( TextLabel5, 6, 6, 0, 1); editPushButton = new QPushButton( tab_2, "editPushButton" ); editPushButton->setText( tr( "Edit fstab" ) ); editPushButton->setMaximumWidth(100); tabLayout_2->addMultiCellWidget( editPushButton, 7, 7, 0, 0 ); fsckButton = new QPushButton( tab_2, "fsckPushButton" ); fsckButton->setText( tr( "Check Disk" ) ); fsckButton->setMaximumWidth(100); tabLayout_2->addMultiCellWidget( fsckButton, 7, 7, 1, 1); TextLabel3 = new QLabel( tab_2, "TextLabel3" ); TextLabel3->setText( tr( "Device" ) ); tabLayout_2->addMultiCellWidget( TextLabel3, 4, 4, 0, 1 ); QSpacerItem* spacer_3 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); tabLayout_2->addItem( spacer_3, 5, 0 ); TextLabel1 = new QLabel( tab_2, "TextLabel1" ); TextLabel1->setText( tr( "Mount Point" ) ); tabLayout_2->addMultiCellWidget( TextLabel1, 1, 1, 0, 1 ); QSpacerItem* spacer_4 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding ); tabLayout_2->addItem( spacer_4, 2, 1 ); TabWidget->insertTab( tab_2, tr( "Advanced" ) ); FormatterAppLayout->addWidget( TabWidget, 0, 1 ); connect( formatPushButton ,SIGNAL(released()),this,SLOT( doFormat()) ); connect( editPushButton ,SIGNAL(released()),this,SLOT( editFstab()) ); connect( fsckButton ,SIGNAL(released()),this,SLOT( doFsck()) ); - connect( fileSystemsCombo,SIGNAL(activated(int)),this,SLOT( fsComboSelected(int ) )); - connect( storageComboBox,SIGNAL(activated(int)),this,SLOT( storageComboSelected(int ) )); - connect( deviceComboBox,SIGNAL(activated(int)),this,SLOT( deviceComboSelected(int ) )); + connect( fileSystemsCombo,SIGNAL(activated(int)),this,SLOT( fsComboSelected(int) )); + connect( storageComboBox,SIGNAL(activated(int)),this,SLOT( storageComboSelected(int) )); + connect( deviceComboBox,SIGNAL(activated(int)),this,SLOT( deviceComboSelected(int) )); fillCombos(); } FormatterApp::~FormatterApp() {} void FormatterApp::doFormat() { int err=0; Output *outDlg; QString umountS, remountS; QString text = storageComboBox->currentText(); QString currentText = storageComboBox->currentText(); QString cmd; QString diskDevice = currentText.right( currentText.length() - currentText.find(" -> ",0,TRUE) - 4); QString diskName = currentText.left(currentText.find(" -> ",0,TRUE)); QString fs = fileSystemsCombo->currentText(); #if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) // lets test on something cheap #else currentText = diskDevice = "/dev/fd0"; umountS = "umount -v /floppy 2>&1"; remountS = "mount -v /floppy 2>&1"; #endif if( currentText.find("CF",0,TRUE) != -1) { umountS = "umount "; remountS = "mount "; // umountS = "/sbin/cardctl eject"; // remountS = "/sbin/cardctl insert"; } if( currentText.find("SD",0,TRUE) != -1) { umountS = "umount "; remountS = "mount "; // umountS = "/etc/sdcontrol compeject"; // remountS = "/etc/sdcontrol insert"; } switch ( QMessageBox::warning(this,tr("Format?") , tr("Really format\n") +diskName+" "+ currentText + tr("\nwith %1 filesystem?\nYou will loose all data!!").arg( fs ) ,tr("Yes") ,tr("No") ,0 ,1 ,1) ) { case 0: { if(fs == "vfat") cmd = "mkdosfs -v " + diskDevice+" 2>&1"; else if(fs == "ext2") cmd = "mke2fs -v " + diskDevice+" 2>&1"; else { QMessageBox::warning(this, tr("Formatter"),tr("Could not format.\nUnknown type"), tr("Ok")); break; } // cmd = "ls -l"; outDlg = new Output(this, tr("Formatter Output"),FALSE); QPEApplication::showDialog( outDlg); qApp->processEvents(); FILE *fp; char line[130]; outDlg->OutputEdit->append( tr("Trying to umount %1.").arg( currentText) ); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); sleep(1); qDebug("Command is "+umountS); fp = popen( (const char *) umountS, "r"); // qDebug("%d", fp); if ( !fp ) { qDebug("Could not execute '" + umountS + "'! err=%d\n" +(QString)strerror(errno), err); QMessageBox::warning( this, tr("Formatter"), tr("umount failed!"), tr("&OK") ); pclose(fp); return; } else { // outDlg->OutputEdit->append( currentText + tr("\nhas been successfully umounted.")); // outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); while ( fgets( line, sizeof line, fp)) { if( ((QString)line).find("busy",0,TRUE) != -1) { qDebug("Could not find '" + umountS); QMessageBox::warning( this, tr("Formatter"), tr("Could not umount.\nDevice is busy!"), tr("&OK") ); pclose(fp); return; } else { QString lineStr = line; lineStr=lineStr.left(lineStr.length()-1); outDlg->OutputEdit->append(lineStr); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); } } } pclose(fp); qDebug("Command would be: "+cmd); outDlg->OutputEdit->append( tr("Trying to format.") ); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); fp = popen( (const char *) cmd, "r"); while ( fgets( line, sizeof line, fp)) { if( ((QString)line).find("No such device",0,TRUE) != -1) { qDebug("No such device '" + umountS); QMessageBox::warning( this, tr("Formatter"), tr("No such device!"), tr("&OK") ); pclose(fp); // outDlg->OutputEdit->append("No such device"); // outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); return; } else { QString lineStr = line; lineStr=lineStr.left(lineStr.length()-1); outDlg->OutputEdit->append(lineStr); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); } } outDlg->OutputEdit->append( currentText + tr("\nhas been successfully formatted.")); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); pclose(fp); outDlg->OutputEdit->append( tr("Trying to mount %1.").arg( currentText) ); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); fp = popen( (const char *) remountS, "r"); if ( !fp) { qDebug("Could not execute '" + remountS + "'! err=%d\n" +(QString)strerror(errno), err); QMessageBox::warning( this, tr("Formatter"), tr("Card mount failed!"), tr("&OK") ); } else { outDlg->OutputEdit->append(tr("%1\nhas been successfully mounted.").arg( currentText )); while ( fgets( line, sizeof line, fp)) { QString lineStr = line; lineStr=lineStr.left(lineStr.length()-1); outDlg->OutputEdit->append(lineStr); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); } } pclose(fp); sleep(1); outDlg->OutputEdit->append(tr("You can now close the output window.")); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); // outDlg->close(); // if(outDlg) // delete outDlg; } break; }; } bool FormatterApp::doFdisk() { return FALSE; } void FormatterApp::fillCombos() { StorageInfo storageInfo; const QList<FileSystem> &fs = storageInfo.fileSystems(); QListIterator<FileSystem> it ( fs ); QString storage; for( ; it.current(); ++it ) { const QString name = (*it)->name(); const QString path = (*it)->path(); const QString disk = (*it)->disk(); const QString options = (*it)->options(); if( name.find( tr("Internal"),0,TRUE) == -1) { storageComboBox->insertItem(name +" -> "+disk); } // deviceComboBox->insertItem(disk); } parsetab("/etc/mtab"); // parsetab("/etc/fstab"); fileSystemsCombo->insertStringList( fsList,-1); deviceComboBox->insertStringList( deviceList,-1); storageComboSelected(0); deviceComboSelected(0); } void FormatterApp::fsComboSelected(int ) {} void FormatterApp::storageComboSelected(int index ) { QString currentText = storageComboBox->text(index); QString nameS = currentText.left( currentText.find("->",0,TRUE)); TextLabel4->setText( tr( "Storage Type: %1").arg( nameS) ); currentText = currentText.right( currentText.length() - currentText.find(" -> ",0,TRUE) - 4); QString fsType = getFileSystemType((const QString &) currentText); // qDebug(fsType); for(int i = 0; i < fileSystemsCombo->count(); i++) { if( fsType == fileSystemsCombo->text(i)) fileSystemsCombo->setCurrentItem(i); } // deviceComboSelected(index); } void FormatterApp::deviceComboSelected(int index) { StorageInfo storageInfo; QString totalS, usedS, avS, diskS, nameS, fsType, selectedText; selectedText = deviceComboBox->text(index); const QList<FileSystem> &fs = storageInfo.fileSystems(); QListIterator<FileSystem> it ( fs ); QString storage; for( ; it.current(); ++it ) { const QString name = (*it)->name(); const QString path = (*it)->path(); const QString disk = (*it)->disk(); // const QString options = (*it)->options(); if( selectedText == disk) { diskS = disk; nameS= name; mountPointLineEdit->setText(path); long mult = (*it)->blockSize() / 1024; long div = 1024 / (*it)->blockSize(); if ( !mult ) mult = 1; if ( !div ) div = 1; long total = (*it)->totalBlocks() * mult / div; long totalMb = total/1024; long avail = (*it)->availBlocks() * mult / div; long availMb = avail/1024; long used = total - avail; long usedMb = used/1024; totalS.sprintf(tr("Total: %1 kB ( %d mB)\n").arg( total ), totalMb ); usedS.sprintf(tr("Used: %1 kB ( %d mB)\n").arg(used) ,usedMb); avS.sprintf( tr("Available: %1 kB ( %d mB)").arg(avail), availMb ); } } fsType = getFileSystemType((const QString &)selectedText); TextLabel5->setText(tr("Type: %1\nFormatted with %2\n%3, %4, %5").arg( nameS).arg( fsType).arg(totalS).arg( usedS).arg( avS )); TextLabel5->setTextFormat( Qt::RichText ); // storageComboSelected(0); } void FormatterApp::cleanUp() {} void FormatterApp::editFstab() { QCopEnvelope e("QPE/Application/textedit","setDocument(QString)"); e << (const QString &)"/etc/fstab"; } void FormatterApp::parsetab(const QString &fileName) { fileSystemTypeList.clear(); fsList.clear(); struct mntent *me; // if(fileName == "/etc/mtab") { FILE *mntfp = setmntent( fileName.latin1(), "r" ); if ( mntfp ) { while ( (me = getmntent( mntfp )) != 0 ) { QString deviceName = me->mnt_fsname; QString filesystemType = me->mnt_type; if(deviceName != "none") { if( fsList.contains(filesystemType) == 0 & filesystemType.find("proc",0,TRUE) == -1 & filesystemType.find("cramfs",0,TRUE) == -1 & filesystemType.find("auto",0,TRUE) == -1) fsList << filesystemType; deviceList << deviceName; qDebug(deviceName+"::"+filesystemType); fileSystemTypeList << deviceName+"::"+filesystemType; } } } endmntent( mntfp ); // } else if(fileName == "/etc/fstab") { // QFile f("/etc/fstab"); // if ( f.open(IO_ReadOnly) ) { // QTextStream t (&f); // QString s; // while (! t.eof()) { // s=t.readLine(); // s=s.simplifyWhiteSpace(); // if ( (!s.isEmpty() ) && (s.find(" ")!=0) ) { // // = me->mnt_fsname; // QString filesystemType = me->mnt_type; // QString deviceName = s.left(0,s.find(BLANK) ); // s=s.remove(0,s.find(BLANK)+1 ); // devicename // s=s.remove(0,s.find(BLANK)+1 ); // mountpoint // QStringt mountPoint= s.left(0,s.find(BLANK) ); // s=s.remove(0,s.find(BLANK)+1 ); // fs // QString filesystemType= s.left(0,s.find(BLANK) ); // } // } // } // f.close(); // } } QString FormatterApp::getFileSystemType(const QString ¤tText) { parsetab("/etc/mtab"); //why did TT forget filesystem type? for ( QStringList::Iterator it = fileSystemTypeList.begin(); it != fileSystemTypeList.end(); ++it ) { QString temp = (*it); if( temp.find( currentText,0,TRUE) != -1) { return temp.right( temp.length() - temp.find("::",0,TRUE) - 2); // qDebug(fsType); } } return ""; } bool FormatterApp::doFsck() { Output *outDlg; QString selectedDevice; // #if defined(QT_QWS_IPAQ) || defined(QT_QWS_SL5XXX) selectedDevice = deviceComboBox->currentText(); QString mountPoint = mountPointLineEdit->text(); QString umountS = "umount -v "+mountPoint+" 2>&1"; QString remountS = "mount -v "+mountPoint+" 2>&1"; // #else // // for testing // // currentText = diskDevice = "/dev/fd0"; // QString umountS = "umount -v /floppy 2>&1"; // QString remountS = "mount -v /floppy 2>&1"; // selectedDevice ="/dev/fd0"; // #endif QString fsType = getFileSystemType((const QString &)selectedDevice); QString cmd; qDebug( selectedDevice +" "+ fsType); if(fsType == "vfat") cmd = "dosfsck -vy "; if(fsType == "ext2") cmd = "e2fsck -cpvy "; cmd += selectedDevice + " 2>&1"; outDlg = new Output(this, tr("Formatter Output"),FALSE); QPEApplication::showDialog( outDlg ); qApp->processEvents(); FILE *fp; char line[130]; outDlg->OutputEdit->append( tr("Trying to umount.")); outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); sleep(1); diff --git a/noncore/tools/remote/buttondialog.cpp b/noncore/tools/remote/buttondialog.cpp index 6ea4801..580f101 100644 --- a/noncore/tools/remote/buttondialog.cpp +++ b/noncore/tools/remote/buttondialog.cpp @@ -1,293 +1,293 @@ /* Opie-Remote. emulates remote controlls on an iPaq (and maybe a Zaurus) in Opie. Copyright (C) 2002 Thomas Stephens 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. This program 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 program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "buttondialog.h" ButtonDialog::ButtonDialog(QString buttonName, QWidget *parent, const char*name, bool modal, WFlags f):QDialog(parent, name, modal, f) { setCaption(tr(buttonName)); QVBoxLayout *layout = new QVBoxLayout(this); QHBoxLayout *hlayout1 = new QHBoxLayout(this); QHBoxLayout *hlayout2 = new QHBoxLayout(this); QHBoxLayout *hlayout3 = new QHBoxLayout(this); layout->addSpacing(5); layout->addLayout(hlayout1); layout->addSpacing(5); layout->addLayout(hlayout2); layout->addSpacing(5); layout->addLayout(hlayout3); layout->addSpacing(5); remote = new QComboBox(false, this, "remote"); QLabel *remoteLabel = new QLabel(remote, "Remote: ", this, "remoteLabel"); hlayout1->addSpacing(5); hlayout1->addWidget(remoteLabel); hlayout1->addSpacing(5); hlayout1->addWidget(remote); hlayout1->addSpacing(5); remote->insertItem("Remote "); remote->insertStringList(getRemotes()); - connect(remote, SIGNAL(activated(const QString &)), this, SLOT(remoteSelected(const QString&)) ); + connect(remote, SIGNAL(activated(const QString&)), this, SLOT(remoteSelected(const QString&)) ); button = new QComboBox(false, this, "button"); QLabel *buttonLabel = new QLabel(remote, "Button: ", this, "buttonLabel"); hlayout2->addSpacing(5); hlayout2->addWidget(buttonLabel); hlayout2->addSpacing(5); hlayout2->addWidget(button); hlayout2->addSpacing(5); button->insertItem("Button "); - connect(button, SIGNAL(activated(const QString &)), this, SLOT(buttonSelected(const QString&)) ); + connect(button, SIGNAL(activated(const QString&)), this, SLOT(buttonSelected(const QString&)) ); label = new QLineEdit(this, "label"); label->setText(buttonName); QLabel *labelLabel = new QLabel(label, "Label: ", this, "labelLabel"); hlayout3->addSpacing(5); hlayout3->addWidget(labelLabel); hlayout3->addSpacing(5); hlayout3->addWidget(label); hlayout3->addSpacing(5); } void ButtonDialog::remoteSelected(const QString &string) { button->insertStringList(getButtons(string.latin1()) ); list="SEND_ONCE"; list+=string; } void ButtonDialog::buttonSelected(const QString &string) { list+=string; } QStringList ButtonDialog::getList() { return list; } QString ButtonDialog::getLabel() { return label->text(); } QStringList ButtonDialog::getRemotes() { const char write_buffer[] = "LIST\n"; const char *readbuffer; int i, numlines; QStringList list; addr.sun_family=AF_UNIX; strcpy(addr.sun_path,"/dev/lircd"); fd = socket(AF_UNIX, SOCK_STREAM, 0); if(fd == -1) { QMessageBox *mb = new QMessageBox("Error!", "couldnt connect to socket", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); mb->exec(); perror("ButtonDialog::GetRemotes"); return NULL; } if(::connect(fd,(struct sockaddr *) &addr, sizeof(addr) ) == -1) { QMessageBox *mb = new QMessageBox("Error!", "couldnt connect to socket", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); mb->exec(); perror("ButtonDialog::GetRemotes"); return NULL; } write(fd, write_buffer, strlen(write_buffer)); for(i=0; i<5; i++) { printf("%d\n", i); readbuffer = readPacket(); printf("%s", readbuffer); printf("%d\n", i); } numlines = atoi(readbuffer); for(i=0; i<numlines; i++) { list+=readPacket(); } if(strcasecmp(readPacket(), "END") != 0) { QMessageBox *mb = new QMessageBox("Error!", "bad packet", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); mb->exec(); perror("ButtonDialog::GetRemotes"); return NULL; } ::close(fd); return list; } QStringList ButtonDialog::getButtons(const char *remoteName) { QString write_buffer = "LIST "; const char *readbuffer; int i, j, numlines; QStringList list; QString string; write_buffer += remoteName; write_buffer += '\n'; fd = socket(AF_UNIX, SOCK_STREAM, 0); if(fd == -1) { QMessageBox *mb = new QMessageBox("Error!", "couldnt connect to socket", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); mb->exec(); perror("ButtonDialog::GetButtons"); return NULL; } if(::connect(fd,(struct sockaddr *) &addr, sizeof(addr) ) == -1) { QMessageBox *mb = new QMessageBox("Error!", "couldnt connect to socket", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); mb->exec(); perror("ButtonDialog::GetButtons"); return NULL; } write(fd, write_buffer.latin1(), strlen(write_buffer) ); for(i=0; i<5; i++) { readbuffer = readPacket(); } numlines = atoi(readbuffer); for(i=0; i<numlines; i++) { list+=readPacket(); for(j=0; j<list[i].length(); j++) { if(list[i][j] == ' ') break; } list[i].remove(0, j+1); } if(strcasecmp(readPacket(), "END") != 0) { QMessageBox *mb = new QMessageBox("Error!", "bad packet", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); mb->exec(); perror("ButtonDialog::GetButtons"); return NULL; } ::close(fd); return list; } //this function was ripped for rc.c in xrc, it is available here: http://www.lirc.org/software.html const char *ButtonDialog::readPacket() { static char buffer[PACKET_SIZE+1]=""; char *end; static int ptr=0,end_len=0; ssize_t ret; timeout = 0; if(ptr>0) { memmove(buffer,buffer+ptr,strlen(buffer+ptr)+1); ptr=strlen(buffer); end=strchr(buffer,'\n'); } else { end=NULL; } alarm(TIMEOUT); while(end==NULL) { if(PACKET_SIZE<=ptr) { fprintf(stderr,"bad packet\n"); ptr=0; return(NULL); } ret=read(fd,buffer+ptr,PACKET_SIZE-ptr); if(ret<=0 || timeout) { if(timeout) { fprintf(stderr,"timeout\n"); } else { alarm(0); } ptr=0; return(NULL); } buffer[ptr+ret]=0; ptr=strlen(buffer); end=strchr(buffer,'\n'); } alarm(0);timeout=0; end[0]=0; ptr=strlen(buffer)+1; //# ifdef DEBUG // printf("buffer: -%s-\n",buffer); //# endif return(buffer); } diff --git a/noncore/tools/remote/recorddialog.cpp b/noncore/tools/remote/recorddialog.cpp index cfab730..1ce5472 100644 --- a/noncore/tools/remote/recorddialog.cpp +++ b/noncore/tools/remote/recorddialog.cpp @@ -1,82 +1,82 @@ /* Opie-Remote. emulates remote controlls on an iPaq (and maybe a Zaurus) in Opie. Copyright (C) 2002 Thomas Stephens 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. This program 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 program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "recorddialog.h" RecordDialog::RecordDialog(QWidget *parent, const char *name) :QDialog(parent, name) { QVBoxLayout *layout = new QVBoxLayout(this); QHBoxLayout *hlayout = new QHBoxLayout(this); layout->insertSpacing(0,5); output = new QTextView("Please enter the name of the new remote, and press Return\n", 0, this, "output"); layout->insertWidget(-1, output); layout->insertSpacing(-1, 5); layout->insertLayout(-1, hlayout); layout->insertSpacing(-1, 5); hlayout->insertSpacing(0, 5); input = new QLineEdit(this, "input"); hlayout->insertWidget(-1, input, 1); hlayout->insertSpacing(-1, 5); QPushButton *ret = new QPushButton("Return", this, "return"); hlayout->insertWidget(-1, ret); hlayout->insertSpacing(-1, 5); connect(ret, SIGNAL(clicked()), this, SLOT(retPressed()) ); where = 0; record = new OProcess; } void RecordDialog::retPressed() { printf("RecordDialog::retPressed: ret pressed\n"); if(where == 0) { - connect(record, SIGNAL(receivedStdout(OProcess *, char *, int)), this, SLOT(incoming(OProcess *, char *, int)) ); - connect(record, SIGNAL(receivedStderr(OProcess *, char *, int)), this, SLOT(incoming(OProcess *, char *, int)) ); - connect(record, SIGNAL(processExited(OProcess *)), this, SLOT(done(OProcess *)) ); + connect(record, SIGNAL(receivedStdout(OProcess*,char*,int)), this, SLOT(incoming(OProcess*,char*,int)) ); + connect(record, SIGNAL(receivedStderr(OProcess*,char*,int)), this, SLOT(incoming(OProcess*,char*,int)) ); + connect(record, SIGNAL(processExited(OProcess*)), this, SLOT(done(OProcess*)) ); printf("RecordDialog::retPressed: starting irrecord\n"); QString file = "/tmp/" + input->text(); *record<<"irrecord"<<file.latin1(); if(!record->start(OProcess::NotifyOnExit, OProcess::AllOutput)) { QMessageBox *mb = new QMessageBox("Error!", "Could not start irrecord. You must<br>use an lirc ipkg that includes<br>irrecord", QMessageBox::NoIcon, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton); mb->exec(); return; } // record->resume(); where = 1; } } void RecordDialog::incoming(OProcess *proc, char *buffer, int len) { // output->setText(output->text() + QString(buffer).truncate(len-1)); printf("RecordDialog::incoming: got text from irrecord\n"); } void RecordDialog::done(OProcess *proc) { } diff --git a/noncore/tools/remote/topgroup.cpp b/noncore/tools/remote/topgroup.cpp index 93cffbb..427cb8f 100644 --- a/noncore/tools/remote/topgroup.cpp +++ b/noncore/tools/remote/topgroup.cpp @@ -1,54 +1,54 @@ /* Opie-Remote. emulates remote controlls on an iPaq (and maybe a Zaurus) in Opie. Copyright (C) 2002 Thomas Stephens 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. This program 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 program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "topgroup.h" TopGroup::TopGroup(QWidget *parent, const char *name):QWidget(parent,name) { QHBoxLayout *layout = new QHBoxLayout(this, 0, -1, 0); QPushButton *power = new QPushButton("Power",this,"power"); layout->addWidget(power); connect(power, SIGNAL(pressed()), this->parentWidget(), SLOT(sendIR()) ); // power->setGeometry(5, 5,40, 20); layout->addSpacing(5); QPushButton *source = new QPushButton("Source",this,"source"); layout->addWidget(source); connect(source, SIGNAL(pressed()), this->parentWidget(), SLOT(sendIR()) ); // source->setGeometry(50,5,40,20); remotes = new QComboBox(false, this, "remotes"); - connect(remotes, SIGNAL(activated(const QString &)), this->parentWidget(), SLOT(remoteSelected(const QString &)) ); + connect(remotes, SIGNAL(activated(const QString&)), this->parentWidget(), SLOT(remoteSelected(const QString&)) ); remotes->insertItem("Select Remote"); // remotes->setGeometry(135,5,95,20); QLabel *remoteLabel = new QLabel(remotes, "Remote: ",this,"remoteLabel"); // remoteLabel->setGeometry(90,5,40,20); remoteLabel->setAlignment(AlignRight | AlignVCenter); layout->addWidget(remoteLabel); layout->addWidget(remotes); } void TopGroup::updateRemotes(Config *cfg) { remotes->clear(); remotes->insertItem(QString("SelectRemote")); cfg->setGroup("Remotes"); remotes->insertStringList(cfg->readListEntry("remoteList", ',') ); } diff --git a/noncore/tools/remote/topgroupconf.cpp b/noncore/tools/remote/topgroupconf.cpp index d763a3a..0419a65 100644 --- a/noncore/tools/remote/topgroupconf.cpp +++ b/noncore/tools/remote/topgroupconf.cpp @@ -1,70 +1,70 @@ /* Opie-Remote. emulates remote controlls on an iPaq (and maybe a Zaurus) in Opie. Copyright (C) 2002 Thomas Stephens 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. This program 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 program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "topgroupconf.h" TopGroupConf::TopGroupConf(QWidget *parent, const char *name):QWidget(parent,name) { QHBoxLayout *layout = new QHBoxLayout(this); QPushButton *power = new QPushButton("Power",this,"power"); layout->addWidget(power); connect(power, SIGNAL(pressed()), this->parentWidget(), SLOT(buttonPressed()) ); // power->setGeometry(5, 5,40, 20); layout->addSpacing(5); QPushButton *source = new QPushButton("Source",this,"source"); layout->addWidget(source); connect(source, SIGNAL(pressed()), this->parentWidget(), SLOT(buttonPressed()) ); // source->setGeometry(50,5,40,20); remotes = new QComboBox(true, this, "remotes"); remotes->insertItem(QString("Remotes")); layout->addWidget(remotes); layout->setStretchFactor(remotes, 1); - connect(remotes, SIGNAL(activated(const QString &)), this->parentWidget(), SLOT(remoteSelected(const QString &)) ); + connect(remotes, SIGNAL(activated(const QString&)), this->parentWidget(), SLOT(remoteSelected(const QString&)) ); QPushButton *newrem = new QPushButton("New", this, "new"); layout->addWidget(newrem); connect(newrem, SIGNAL(pressed()), this->parentWidget(), SLOT(newPressed()) ); /* remotes = new QComboBox(false, this, "remotes"); - connect(remotes, SIGNAL(activated(const QString &)), this->parentWidget(), SLOT(remoteSelected(const QString &)) ); + connect(remotes, SIGNAL(activated(const QString&)), this->parentWidget(), SLOT(remoteSelected(const QString&)) ); remotes->insertItem("Select Remote"); // remotes->setGeometry(135,5,95,20); QLabel *remoteLabel = new QLabel(remotes, "Remote: ",this,"remoteLabel"); // remoteLabel->setGeometry(90,5,40,20); remoteLabel->setAlignment(AlignRight | AlignVCenter); layout->addWidget(remoteLabel); layout->addWidget(remotes); */ } void TopGroupConf::updateRemotes(QStringList list) { remotes->insertStringList(list); } QString TopGroupConf::getRemotesText() { return remotes->currentText(); } diff --git a/noncore/unsupported/filebrowser/filebrowser.cpp b/noncore/unsupported/filebrowser/filebrowser.cpp index 8cf8a60..92a688a 100644 --- a/noncore/unsupported/filebrowser/filebrowser.cpp +++ b/noncore/unsupported/filebrowser/filebrowser.cpp @@ -1,1091 +1,1091 @@ /********************************************************************** ** 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 "inlineedit.h" #include "filebrowser.h" #include "filePermissions.h" #include <qpe/resource.h> #include <qpe/global.h> #include <qpe/mimetype.h> #include <qpe/applnk.h> #include <qpe/config.h> #include <qcopchannel_qws.h> #include <qpe/qcopenvelope_qws.h> #include <qmessagebox.h> #include <qdir.h> #include <qregexp.h> #include <qheader.h> #include <qtoolbar.h> #include <qpopupmenu.h> #include <qmenubar.h> #include <qaction.h> #include <qstringlist.h> #include <qcursor.h> #include <qmultilineedit.h> #include <qfont.h> #include <qpainter.h> #include <qprogressbar.h> #include <unistd.h> #include <stdlib.h> #include <sys/stat.h> #include <qpe/qpeapplication.h> // // FileItem // FileItem::FileItem( QListView * parent, const QFileInfo & fi ) : QListViewItem( parent ), fileInfo( fi ) { QDate d = fi.lastModified().date(); setText( 0, fi.fileName() ); setText( 1, sizeString( fi.size() ) + " " ); setText( 2, QString().sprintf("%4d-%02d-%02d",d.year(), d.month(), d.day() ) ); MimeType mt(fi.filePath()); if ( fi.isSymLink() ) setText( 3, "symlink" ); else if( fi.isDir() ) setText( 3, "directory" ); else if( isLib() ) setText( 3, "library" ); else setText( 3, mt.description() ); QPixmap pm; if( fi.isDir() ){ if( !QDir( fi.filePath() ).isReadable() ) pm = Resource::loadPixmap( "lockedfolder" ); else pm = Resource::loadPixmap( "folder" ); } else if( !fi.isReadable() ) pm = Resource::loadPixmap( "locked" ); else if( isLib() ) pm = Resource::loadPixmap( "library" ); else if( ((FileView* )parent)->getShowThumbnails() && mt.id().contains(QRegExp("^image/", FALSE, FALSE)) ) pm = drawThumbnail(fi); else pm = mt.pixmap(); if ( pm.isNull() ) pm = Resource::loadPixmap("UnknownDocument-14"); if( fi.isSymLink() ){ // overlay link image QPixmap lnk = Resource::loadPixmap( "filebrowser/symlink" ); QPainter painter( &pm ); painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk ); pm.setMask( pm.createHeuristicMask( FALSE ) ); } setPixmap(0,pm); } QString FileItem::sizeString( unsigned int s ) { double size = s; if ( size > 1024 * 1024 * 1024 ) return QString().sprintf( "%.1f", size / ( 1024 * 1024 * 1024 ) ) + "G"; else if ( size > 1024 * 1024 ) return QString().sprintf( "%.1f", size / ( 1024 * 1024 ) ) + "M"; else if ( size > 1024 ) return QString().sprintf( "%.1f", size / ( 1024 ) ) + "K"; else return QString::number( size ) + "B"; } QString FileItem::key( int column, bool ascending ) const { QString tmp; ascending = ascending; if( (column == 0) && fileInfo.isDir() ){ // Sort by name // We want the directories to appear at the top of the list tmp = (char) 0; return (tmp + text( column ).lower()); } else if( column == 2 ) { // Sort by date QDateTime epoch( QDate( 1980, 1, 1 ) ); tmp.sprintf( "%08d", epoch.secsTo( fileInfo.lastModified() ) ); return tmp; } else if( column == 1 ) { // Sort by size return tmp.sprintf( "%08d", fileInfo.size() ); } return text( column ).lower(); } bool FileItem::isLib() { // This is of course not foolproof if( !qstrncmp("lib", fileInfo.baseName(), 3) && ( fileInfo.extension().contains( "so" ) || fileInfo.extension().contains( "a" ) ) ) return TRUE; else return FALSE; } int FileItem::launch() { DocLnk doc( fileInfo.filePath(), FALSE ); doc.execute(); listView()->clearSelection(); return 1; } bool FileItem::rename( const QString & name ) { QString oldpath, newpath; if ( name.isEmpty() ) return FALSE; if ( name.contains( QRegExp("[/\\$\"\'\\*\\?]") ) ) return FALSE; oldpath = fileInfo.filePath(); newpath = fileInfo.dirPath() + "/" + name; if ( ::rename( (const char *) oldpath, (const char *) newpath ) != 0 ) return FALSE; else return TRUE; } QPixmap FileItem::drawThumbnail(const QFileInfo &file) { /* * this thing is sloooooow, and it also doesn't load * dynamicly (like a web browser). if anyone knows how to * do that, please do! */ QString cacheDir = "/tmp/filebrowserThumbnailCache"; QFileInfo cachedFile (cacheDir + file.filePath()); if (cachedFile.exists() && cachedFile.lastModified() == file.lastModified()) { QPixmap cachedImage (cachedFile.filePath()); return cachedImage; } else { QImage image (file.filePath()); // if inside of cache dir, don't render thumbnails! recursive error! if (image.isNull() || file.filePath().contains(QRegExp("^" + cacheDir))) { DocLnk doc (file.filePath()); return doc.pixmap(); } Config cfg("Filebrowser"); cfg.setGroup("View"); int size; size =cfg.readNumEntry("ThumbSize", 72); QPixmap thumb (size, size); double scale = (double)image.height() / (double)image.width(); int newHeight = int(size * scale); thumb.convertFromImage (image.smoothScale(size, newHeight)); if (!cachedFile.dir().exists()) { QString cmd = "/bin/mkdir -p \"" + cachedFile.dirPath() +"\""; system( (const char *) cmd ); } if (thumb.save(cachedFile.filePath(), QPixmap::imageFormat(file.filePath()), 70)) { // make thumbnail modify time the same as the image QString cmd = "/bin/touch -r \"" + file.filePath() +"\" " + "\"" + cachedFile.filePath() + "\""; system( (const char *) cmd ); } return thumb; } } // // FileView // FileView::FileView( const QString & dir, QWidget * parent, const char * name, bool hidden, bool symlinks, bool thumbnails ) : QListView( parent, name ), menuTimer( this ), le( NULL ), itemToRename( NULL ), showHidden( hidden ), showSymlinks( symlinks ), showThumbnails( thumbnails ), menuKeepsOpen( FALSE ) { addColumn( "Name" ); addColumn( "Size" ); addColumn( "Date" ); addColumn( "Type" ); setMultiSelection( TRUE ); //header()->hide(); setColumnWidthMode( 0, Manual ); setColumnWidthMode( 3, Manual ); // right align yize column setColumnAlignment( 1, AlignRight ); generateDir( dir ); - connect( this, SIGNAL( clicked( QListViewItem * )), - SLOT( itemClicked( QListViewItem * )) ); - connect( this, SIGNAL( doubleClicked( QListViewItem * )), - SLOT( itemDblClicked( QListViewItem * )) ); + connect( this, SIGNAL( clicked(QListViewItem*)), + SLOT( itemClicked(QListViewItem*)) ); + connect( this, SIGNAL( doubleClicked(QListViewItem*)), + SLOT( itemDblClicked(QListViewItem*)) ); connect( this, SIGNAL( selectionChanged() ), SLOT( cancelMenuTimer() ) ); connect( &menuTimer, SIGNAL( timeout() ), SLOT( showFileMenu() ) ); } void FileView::resizeEvent( QResizeEvent *e ) { setColumnWidth( 0, width() - 2 * lineWidth() - 20 - columnWidth( 1 ) - columnWidth( 2 ) ); // hide type column, we use it for "sort by type" only //setColumnWidth( 3, 0 ); QListView::resizeEvent( e ); } void FileView::updateDir() { generateDir( currentDir ); } void FileView::setDir( const QString & dir ) { if ( dir.startsWith( "/dev" ) ) { QMessageBox::warning( this, tr( "File Manager" ), tr( "Can't show /dev/ directory." ), tr( "&Ok" ) ); return; } dirHistory += currentDir; generateDir( dir ); } void FileView::generateDir( const QString & dir ) { if(menuKeepsOpen){ cancelMenuTimer(); } QDir d( dir ); if( d.exists() && !d.isReadable() ) return; currentDir = d.canonicalPath(); if( !showHidden) d.setFilter( QDir::Dirs | QDir::Files ); else d.setFilter( QDir::Dirs | QDir::Files |QDir::Hidden | QDir::All); d.setSorting( QDir::Name | QDir::DirsFirst | QDir::IgnoreCase | QDir::Reversed ); const QFileInfoList * list = d.entryInfoList(); QFileInfoListIterator it( *list ); QFileInfo *fi; QProgressBar *thumbProgress = 0; if (showThumbnails) { thumbProgress = new QProgressBar(it.count(), this); thumbProgress->show(); } clear(); int fileCount = 1; // used in the thumbnail progress meter while( (fi = it.current()) ){ if( (fi->fileName() == ".") || (fi->fileName() == "..") ){ ++it; continue; } if(!showSymlinks && fi->isSymLink()){ ++it; continue; } // thumbnail progress if (showThumbnails) { thumbProgress->setProgress(fileCount); } (void) new FileItem( (QListView *) this, *fi ); ++it; ++fileCount; } if (showThumbnails) { thumbProgress->close(); } emit dirChanged(); } void FileView::rename() { itemToRename = (FileItem *) currentItem(); const QPixmap * pm; int pmw; if( itemToRename == NULL ) return; if( ( pm = itemToRename->pixmap( 0 ) ) == NULL ) pmw = 0; else pmw = pm->width(); ensureItemVisible( itemToRename ); horizontalScrollBar()->setValue( 0 ); horizontalScrollBar()->setEnabled( FALSE ); verticalScrollBar()->setEnabled( FALSE ); selected = isSelected( itemToRename ); setSelected( itemToRename, FALSE ); if( le == NULL ){ le = new InlineEdit( this ); le->setFrame( FALSE ); connect( le, SIGNAL( lostFocus() ), SLOT( endRenaming() ) ); } QRect r = itemRect( itemToRename ); r.setTop( r.top() + frameWidth() + 1 ); r.setLeft( r.left() + frameWidth() + pmw ); r.setBottom( r.bottom() + frameWidth() ); r.setWidth( columnWidth( 0 ) - pmw ); le->setGeometry( r ); le->setText( itemToRename->text( 0 ) ); le->selectAll(); le->show(); le->setFocus(); } void FileView::endRenaming() { if( le && itemToRename ){ le->hide(); setSelected( itemToRename, selected ); if( !itemToRename->rename( le->text() ) ){ QMessageBox::warning( this, tr( "Rename file" ), tr( "Rename failed!" ), tr( "&Ok" ) ); } else { updateDir(); } itemToRename = NULL; horizontalScrollBar()->setEnabled( TRUE ); verticalScrollBar()->setEnabled( TRUE ); } } void FileView::copy() { // dont keep cut files any longer than necessary // ##### a better inmplementation might be to rename the CUT file // ##### to ".QPE-FILEBROWSER-MOVING" rather than copying it. system ( "rm -rf /tmp/qpemoving" ); FileItem * i; if((i = (FileItem *) firstChild()) == 0) return; flist.clear(); while( i ){ if( i->isSelected() /*&& !i->isDir()*/ ){ flist += i->getFilePath(); } i = (FileItem *) i->nextSibling(); } } void FileView::paste() { int i, err; QString cmd, dest, basename, cd = currentDir; if(cd == "/") cd = ""; for ( QStringList::Iterator it = flist.begin(); it != flist.end(); ++it ) { basename = (*it).mid((*it).findRev("/") + 1, (*it).length()); dest = cd + "/" + basename; if( QFile( dest ).exists() ){ i = 1; dest = cd + "/Copy of " + basename; while( QFile( dest ).exists() ){ dest.sprintf( "%s/Copy (%d) of %s", (const char *) cd, i++, (const char *) basename ); } } // // Copy a directory recursively using the "cp" command - // may have to be changed // if( QFileInfo( (*it) ).isDir() ){ cmd = "/bin/cp -fpR \"" + (*it) +"\" " + "\"" + dest + "\""; err = system( (const char *) cmd ); } else if( !copyFile( dest, (*it) ) ){ err = -1; } else { err = 0; } if ( err != 0 ) { QMessageBox::warning( this, tr("Paste file"), tr("Paste failed!"), tr("Ok") ); break; } else { updateDir(); QListViewItem * i = firstChild(); basename = dest.mid( dest.findRev("/") + 1, dest.length() ); while( i ){ if( i->text(0) == basename ){ setCurrentItem( i ); ensureItemVisible( i ); break; } i = i->nextSibling(); } } } } bool FileView::copyFile( const QString & dest, const QString & src ) { char bf[ 50000 ]; int bytesRead; bool success = TRUE; struct stat status; QFile s( src ); QFile d( dest ); if( s.open( IO_ReadOnly | IO_Raw ) && d.open( IO_WriteOnly | IO_Raw ) ) { while( (bytesRead = s.readBlock( bf, sizeof( bf ) )) == sizeof( bf ) ) { if( d.writeBlock( bf, sizeof( bf ) ) != sizeof( bf ) ){ success = FALSE; break; } } if( success && (bytesRead > 0) ){ d.writeBlock( bf, bytesRead ); } } else { success = FALSE; } // Set file permissions if( stat( (const char *) src, &status ) == 0 ){ chmod( (const char *) dest, status.st_mode ); } return success; } void FileView::cut() { int err; // ##### a better inmplementation might be to rename the CUT file // ##### to ".QPE-FILEBROWSER-MOVING" rather than copying it. QString cmd, dest, basename, cd = "/tmp/qpemoving"; QStringList newflist; newflist.clear(); cmd = "rm -rf " + cd; system ( (const char *) cmd ); cmd = "mkdir " + cd; system( (const char *) cmd ); // get the names of the files to cut FileItem * item; if((item = (FileItem *) firstChild()) == 0) return; flist.clear(); while( item ){ if( item->isSelected() /*&& !item->isDir()*/ ){ flist += item->getFilePath(); } item = (FileItem *) item->nextSibling(); } // move these files into a tmp dir for ( QStringList::Iterator it = flist.begin(); it != flist.end(); ++it ) { basename = (*it).mid((*it).findRev("/") + 1, (*it).length()); dest = cd + "/" + basename; newflist += dest; cmd = "/bin/mv -f \"" + (*it) +"\" " + "\"" + dest + "\""; err = system( (const char *) cmd ); if ( err != 0 ) { QMessageBox::warning( this, tr("Cut file"), tr("Cut failed!"), tr("Ok") ); break; } else { updateDir(); QListViewItem * im = firstChild(); basename = dest.mid( dest.findRev("/") + 1, dest.length() ); while( im ){ if( im->text(0) == basename ){ setCurrentItem( im ); ensureItemVisible( im ); break; } im = im->nextSibling(); } } } // update the filelist to point to tmp dir so paste works nicely flist = newflist; } void FileView::del() { FileItem * i; QStringList fl; QString cmd; int err; if((i = (FileItem *) firstChild()) == 0) return; while( i ){ if( i->isSelected() ){ fl += i->getFilePath(); } i = (FileItem *) i->nextSibling(); } if( fl.count() < 1 ) return; if( QMessageBox::warning( this, tr("Delete"), tr("Are you sure?"), tr("Yes"), tr("No") ) == 0) { // // Dependant upon the "rm" command - will probably have to be replaced // for ( QStringList::Iterator it = fl.begin(); it != fl.end(); ++it ) { cmd = "/bin/rm -rf \"" + (*it) + "\""; err = system( (const char *) cmd ); if ( err != 0 ) { QMessageBox::warning( this, tr("Delete"), tr("Delete failed!"), tr("Ok") ); break; } } updateDir(); } } void FileView::newFolder() { int t = 1; FileItem * i; QString nd = currentDir + "/NewFolder"; while( QFile( nd ).exists() ){ nd.sprintf( "%s/NewFolder (%d)", (const char *) currentDir, t++ ); } if( mkdir( (const char *) nd, 0777 ) != 0){ QMessageBox::warning( this, tr( "New folder" ), tr( "Folder creation failed!" ), tr( "Ok" ) ); return; } updateDir(); if((i = (FileItem *) firstChild()) == 0) return; while( i ){ if( i->isDir() && ( i->getFilePath() == nd ) ){ setCurrentItem( i ); rename(); break; } i = (FileItem *) i->nextSibling(); } } void FileView::viewAsText() { FileItem * i = (FileItem *) currentItem(); QCopEnvelope e("QPE/Application/textedit","setDocument(QString)"); e << i->getFilePath(); // Global::execute( "textedit -f ", i->getFilePath() ); } void FileView::itemClicked( QListViewItem * i) { FileItem * t = (FileItem *) i; if( t == NULL ) return; if( t->isDir() ){ setDir( t->getFilePath() ); } } void FileView::itemDblClicked( QListViewItem * i) { if(menuKeepsOpen){ cancelMenuTimer(); } FileItem * t = (FileItem *) i; if(t == NULL) return; if(t->launch() == -1){ QMessageBox::warning( this, tr( "Launch Application" ), tr( "Launch failed!" ), tr( "Ok" ) ); } } void FileView::parentDir() { setDir( currentDir + "./.." ); } void FileView::lastDir() { if( dirHistory.count() == 0 ) return; QString newDir = dirHistory.last(); dirHistory.remove( dirHistory.last() ); generateDir( newDir ); } void FileView::contentsMousePressEvent( QMouseEvent * e ) { QListView::contentsMousePressEvent( e ); menuTimer.start( 750, TRUE ); } void FileView::contentsMouseReleaseEvent( QMouseEvent * e ) { QListView::contentsMouseReleaseEvent( e ); if(!menuKeepsOpen){ menuTimer.stop(); } } void FileView::cancelMenuTimer() { if( menuTimer.isActive() ) menuTimer.stop(); } void FileView::addToDocuments() { FileItem * i = (FileItem *) currentItem(); DocLnk f; QString n = i->text(0); n.replace(QRegExp("\\..*"),""); f.setName( n ); f.setFile( i->getFilePath() ); f.writeLink(); } void FileView::run() { FileItem * i = (FileItem *) currentItem(); i->launch(); } void FileView::showFileMenu() { FileItem * i = (FileItem *) currentItem(); if ( !i ) return; QPopupMenu * m = new QPopupMenu( this ); if ( !i->isDir() ) { m->insertItem( tr( "Add to Documents" ), this, SLOT( addToDocuments() ) ); m->insertSeparator(); } MimeType mt(i->getFilePath()); const AppLnk* app = mt.application(); if ( !i->isDir() ) { if ( app ) m->insertItem( app->pixmap(), tr( "Open in " + app->name() ), this, SLOT( run() ) ); else if( i->isExecutable() ) m->insertItem( Resource::loadPixmap( i->text( 0 ) ), tr( "Run" ), this, SLOT( run() ) ); m->insertItem( Resource::loadPixmap( "txt" ), tr( "View as text" ), this, SLOT( viewAsText() ) ); m->insertSeparator(); } m->insertItem( tr( "Rename" ), this, SLOT( rename() ) ); m->insertItem( Resource::loadPixmap("cut"), tr( "Cut" ), this, SLOT( cut() ) ); m->insertItem( Resource::loadPixmap("copy"), tr( "Copy" ), this, SLOT( copy() ) ); m->insertItem( Resource::loadPixmap("paste"), tr( "Paste" ), this, SLOT( paste() ) ); m->insertItem( tr( "Change Permissions" ), this, SLOT( chPerm() ) ); m->insertItem(Resource::loadPixmap( "close" ), tr( "Delete" ), this, SLOT( del() ) ); m->insertSeparator(); m->insertItem( tr( "Select all" ), this, SLOT( selectAll() ) ); m->insertItem( tr( "Deselect all" ), this, SLOT( deselectAll() ) ); m->popup( QCursor::pos() ); } // // FileBrowser // void FileView::setShowHidden(bool hidden) { showHidden=hidden; } void FileView::setShowSymlinks(bool symlinks) { showSymlinks=symlinks; } void FileView::setShowThumbnails(bool thumbnails) { showThumbnails=thumbnails; } void FileView::setMenuKeepsOpen(bool keepOpen) { menuKeepsOpen=keepOpen; } FileBrowser::FileBrowser( QWidget * parent, const char * name, WFlags f ) : QMainWindow( parent, name, f ) { init( QDir::current().canonicalPath() ); } FileBrowser::FileBrowser( const QString & dir, QWidget * parent, const char * name, WFlags f ) : QMainWindow( parent, name, f ) { init( dir ); } void FileBrowser::init(const QString & dir) { setCaption( tr("File Manager") ); setIcon( Resource::loadPixmap( "filebrowser_icon" ) ); connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); Config cfg("Filebrowser"); cfg.setGroup("View"); bool showHidden=(cfg.readEntry("Hidden","FALSE") == "TRUE"); bool showSymlinks=(cfg.readEntry("Symlinks","FALSE") == "TRUE"); bool showThumbnails=(cfg.readEntry("Thumbnails","FALSE") == "TRUE"); cfg.setGroup("Menu"); bool menuKeepsOpen=(cfg.readEntry("KeepOpen", "FALSE") == "TRUE"); fileView = new FileView( dir, this, 0, showHidden, showSymlinks, showThumbnails ); fileView->setAllColumnsShowFocus( TRUE ); fileView->setMenuKeepsOpen(menuKeepsOpen); setCentralWidget( fileView ); setToolBarsMovable( FALSE ); QToolBar* toolBar = new QToolBar( this ); toolBar->setHorizontalStretchable( TRUE ); QMenuBar* menuBar = new QMenuBar( toolBar ); dirMenu = new QPopupMenu( this ); menuBar->insertItem( tr( "Dir" ), dirMenu ); sortMenu = new QPopupMenu( this ); menuBar->insertItem( tr( "Sort" ), sortMenu ); sortMenu->insertItem( tr( "by Name "), this, SLOT( sortName() ) ); sortMenu->insertItem( tr( "by Size "), this, SLOT( sortSize() ) ); sortMenu->insertItem( tr( "by Date "), this, SLOT( sortDate() ) ); sortMenu->insertItem( tr( "by Type "), this, SLOT( sortType() ) ); sortMenu->insertSeparator(); sortMenu->insertItem( tr( "Ascending" ), this, SLOT( updateSorting() ) ); sortMenu->setItemChecked( sortMenu->idAt( 5 ), TRUE ); sortMenu->setItemChecked( sortMenu->idAt( 0 ), TRUE ); viewMenu = new QPopupMenu( this); viewMenu->insertItem( tr( "Hidden"), this, SLOT( updateShowHidden() ) ); viewMenu->insertItem( tr( "Symlinks"), this, SLOT( updateShowSymlinks() ) ); viewMenu->insertItem( tr( "Thumbnails"), this, SLOT( updateShowThumbnails() ) ); viewMenu->setItemChecked( viewMenu->idAt( 0 ), showHidden ); viewMenu->setItemChecked( viewMenu->idAt( 1 ), showSymlinks ); viewMenu->setItemChecked( viewMenu->idAt( 2 ), showThumbnails ); menuBar->insertItem( tr("View"), viewMenu ); toolBar = new QToolBar( this ); lastAction = new QAction( tr("Previous dir"), Resource::loadIconSet( "back" ), QString::null, 0, this, 0 ); connect( lastAction, SIGNAL( activated() ), fileView, SLOT( lastDir() ) ); lastAction->addTo( toolBar ); lastAction->setEnabled( FALSE ); upAction = new QAction( tr("Parent dir"), Resource::loadIconSet( "up" ), QString::null, 0, this, 0 ); connect( upAction, SIGNAL( activated() ), fileView, SLOT( parentDir() ) ); upAction->addTo( toolBar ); QAction *a = new QAction( tr("New folder"), Resource::loadPixmap( "newfolder" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), fileView, SLOT( newFolder() ) ); a->addTo( toolBar ); a = new QAction( tr("Cut"), Resource::loadPixmap( "cut" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), fileView, SLOT( cut() ) ); a->addTo( toolBar ); a = new QAction( tr("Copy"), Resource::loadPixmap( "copy" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), fileView, SLOT( copy() ) ); a->addTo( toolBar ); pasteAction = new QAction( tr("Paste"), Resource::loadPixmap( "paste" ), QString::null, 0, this, 0 ); connect( pasteAction, SIGNAL( activated() ), fileView, SLOT( paste() ) ); pasteAction->addTo( toolBar ); // dirLabel = new QLabel(this, "DirLabel"); connect( fileView, SIGNAL( dirChanged() ), SLOT( updateDirMenu() ) ); updateDirMenu(); QCopChannel* pcmciaChannel = new QCopChannel( "QPE/Card", this ); - connect( pcmciaChannel, SIGNAL(received(const QCString &, const QByteArray &)), - this, SLOT(pcmciaMessage( const QCString &, const QByteArray &)) ); + connect( pcmciaChannel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT(pcmciaMessage(const QCString&,const QByteArray&)) ); } void FileBrowser::pcmciaMessage( const QCString &msg, const QByteArray &) { if ( msg == "mtabChanged()" ) { // ## Only really needed if current dir is on a card fileView->updateDir(); } } void FileBrowser::changeCaption(const QString & dir) { setCaption( dir); } void FileBrowser::dirSelected( int id ) { int i = 0, j; QString dir; // Bulid target dir from menu while( (j = dirMenu->idAt( i )) != id ){ dir += dirMenu->text( j ).stripWhiteSpace(); if( dirMenu->text( j ) != "/" ) dir += "/"; i++; } dir += dirMenu->text( dirMenu->idAt( i ) ).stripWhiteSpace(); fileView->setDir( dir ); } void FileBrowser::updateDirMenu() { QString spc, cd = fileView->cd(); QStringList l = QStringList::split( "/", cd ); int i = 0; dirMenu->clear(); dirMenu->insertItem( tr( "/" ), this, SLOT( dirSelected(int) ) ); for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) { spc.fill( ' ', i++); dirMenu->insertItem( spc + (*it), this, SLOT( dirSelected(int) ) ); } dirMenu->setItemChecked( dirMenu->idAt( l.count() ), TRUE ); lastAction->setEnabled( fileView->history().count() != 0 ); upAction->setEnabled( cd != "/" ); } void FileBrowser::sortName() { fileView->setSorting( 0, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) ); fileView->sort(); sortMenu->setItemChecked( sortMenu->idAt( 0 ), TRUE ); sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE ); } void FileBrowser::sortSize() { fileView->setSorting( 1, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) ); fileView->sort(); sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 1 ), TRUE ); sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE ); } void FileBrowser::sortDate() { fileView->setSorting( 2, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) ); fileView->sort(); sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 2 ), TRUE ); sortMenu->setItemChecked( sortMenu->idAt( 3 ), FALSE ); } void FileBrowser::sortType() { fileView->setSorting( 3, sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) ); fileView->sort(); sortMenu->setItemChecked( sortMenu->idAt( 0 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 1 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 2 ), FALSE ); sortMenu->setItemChecked( sortMenu->idAt( 3 ), TRUE ); } void FileBrowser::updateSorting() { sortMenu->setItemChecked( sortMenu->idAt( 5 ), !sortMenu->isItemChecked( sortMenu->idAt( 5 ) ) ); if ( sortMenu->isItemChecked( sortMenu->idAt( 0 ) ) ) sortName(); else if ( sortMenu->isItemChecked( sortMenu->idAt( 1 ) ) ) sortSize(); else if ( sortMenu->isItemChecked( sortMenu->idAt( 2 ) ) ) sortDate(); else sortType(); } void FileView::chPerm() { FileItem * i; QStringList fl; QString cmd; if((i = (FileItem *) firstChild()) == 0) return; while( i ){ if( i->isSelected() ){ fl += i->getFilePath(); } i = (FileItem *) i->nextSibling(); } if( fl.count() < 1 ) return; if( QMessageBox::warning( this, tr("Change permissions"), tr("Are you sure?"), tr("Yes"), tr("No") ) == 0) { for ( QStringList::Iterator it = fl.begin(); it != fl.end(); ++it ) { filePermissions *filePerm; filePerm = new filePermissions(this, "Permissions",true,0,(const QString &)(*it)); filePerm->exec(); if( filePerm) delete filePerm; break; } updateDir(); } } void FileBrowser::updateShowHidden() { bool valShowHidden=viewMenu->isItemChecked( viewMenu->idAt( 0 ) ); valShowHidden=!valShowHidden; viewMenu->setItemChecked( viewMenu->idAt( 0 ), valShowHidden ); fileView->setShowHidden(valShowHidden); Config cfg("Filebrowser"); cfg.setGroup("View"); cfg.writeEntry("Hidden",valShowHidden?"TRUE":"FALSE"); fileView->updateDir(); } void FileBrowser::updateShowSymlinks() { bool valShowSymlinks=viewMenu->isItemChecked( viewMenu->idAt( 1 ) ); valShowSymlinks=!valShowSymlinks; viewMenu->setItemChecked( viewMenu->idAt( 1 ), valShowSymlinks ); fileView->setShowSymlinks(valShowSymlinks); Config cfg("Filebrowser"); cfg.setGroup("View"); cfg.writeEntry("Symlinks",valShowSymlinks?"TRUE":"FALSE"); fileView->updateDir(); } void FileBrowser::updateShowThumbnails() { bool valShowThumbnails=viewMenu->isItemChecked( viewMenu->idAt( 2 ) ); valShowThumbnails=!valShowThumbnails; viewMenu->setItemChecked( viewMenu->idAt( 2 ), valShowThumbnails ); fileView->setShowThumbnails(valShowThumbnails); Config cfg("Filebrowser"); cfg.setGroup("View"); cfg.writeEntry("Thumbnails",valShowThumbnails?"TRUE":"FALSE"); fileView->updateDir(); } void FileBrowser::cleanUp() { QString cmdr = "rm -rf /tmp/filebrowserThumbnailCache"; // qDebug("exit"); system(cmdr.latin1()); } diff --git a/noncore/unsupported/gsmtool/gsmtool.cpp b/noncore/unsupported/gsmtool/gsmtool.cpp index 5940b0e..47920e5 100644 --- a/noncore/unsupported/gsmtool/gsmtool.cpp +++ b/noncore/unsupported/gsmtool/gsmtool.cpp @@ -1,427 +1,427 @@ #include "gsmtool.h" #include <qpushbutton.h> #include <qcombobox.h> #include <qlineedit.h> #include <qlabel.h> #include <qtabwidget.h> #include <qlistview.h> #include <qtextbrowser.h> #include <qmultilineedit.h> #include <termios.h> #include <gsmlib/gsm_me_ta.h> #include <gsmlib/gsm_unix_serial.h> #include <gsmlib/gsm_sms.h> #include <gsmlib/gsm_sorted_sms_store.h> using namespace gsmlib; /* * Constructs a GSMTool which is a child of 'parent', with the * name 'name' and widget flags set to 'f' */ GSMTool::GSMTool( QWidget* parent, const char* name, WFlags fl ) : GSMToolBase( parent, name, fl ) { devicelocked = 0; me = NULL; sms_store = NULL; setConnected(FALSE); /* FIXME: Persistent settings for device/baudrate */ connect(ConnectButton, SIGNAL(clicked()), this, SLOT(doConnectButton())); connect(SMSDeleteButton, SIGNAL(clicked()), this, SLOT(doSMSDeleteButton())); connect(SMSSendButton, SIGNAL(clicked()), this, SLOT(doSMSSendButton())); connect(NewSMSClearButton, SIGNAL(clicked()), this, SLOT(doNewSMSClearButton())); connect(NewSMSSaveButton, SIGNAL(clicked()), this, SLOT(doNewSMSSaveButton())); connect(NewSMSSendButton, SIGNAL(clicked()), this, SLOT(doNewSMSSendButton())); connect(ScanButton, SIGNAL(clicked()), this, SLOT(doScanButton())); - connect(TabWidget2, SIGNAL(currentChanged(QWidget *)), this, SLOT(doTabChanged())); + connect(TabWidget2, SIGNAL(currentChanged(QWidget*)), this, SLOT(doTabChanged())); connect(SMSStoreList, SIGNAL(activated(int)), this, SLOT(doSMSStoreChanged())); connect(SMSViewType, SIGNAL(activated(int)), this, SLOT(doSMSTypeChanged())); - connect(SMSList, SIGNAL(selectionChanged(QListViewItem *)), this, SLOT(doSelectedSMSChanged(QListViewItem *))); + connect(SMSList, SIGNAL(selectionChanged(QListViewItem*)), this, SLOT(doSelectedSMSChanged(QListViewItem*))); timerid = -1; // Is this not possible normally? } /* * Destroys the object and frees any allocated resources */ GSMTool::~GSMTool() { // no need to delete child widgets, Qt does it all for us if (devicelocked) unlockDevice(); } const speed_t GSMTool::baudrates[12] = { B300, B600, B1200, B2400, B4800, B9600, B19200, B38400, B57600, B115200, B230400, B460800 }; int GSMTool::lockDevice( ) { devicelocked = 1; /* FIXME */ return 0; } void GSMTool::unlockDevice( ) { devicelocked = 0; } void GSMTool::setConnected( bool conn ) { TabWidget2->setTabEnabled(tab_2, conn); TabWidget2->setTabEnabled(tab_3, conn); //TabWidget2->setTabEnabled(tab_4, conn); NewSMSSendButton->setEnabled(conn); MfrLabel->setEnabled(conn); MfrText->setEnabled(conn); ModelLabel->setEnabled(conn); ModelText->setEnabled(conn); RevisionLabel->setEnabled(conn); RevisionText->setEnabled(conn); SerialLabel->setEnabled(conn); SerialText->setEnabled(conn); } void GSMTool::doTabChanged() { int index = TabWidget2->currentPageIndex(); qDebug("tab changed to %d", index); if (index == 1) { timerid = startTimer(5000); timerEvent(NULL); } else if (timerid != -1) { killTimer(timerid); timerid = -1; } } void GSMTool::timerEvent( QTimerEvent * ) { OPInfo opi; opi = me->getCurrentOPInfo(); if (opi._numericName == NOT_SET) { NetStatText->setText("No network"); NetworkLabel->setEnabled(FALSE); NetworkText->setEnabled(FALSE); NetworkText->setText(""); SigStrText->setEnabled(FALSE); SigStrText->setText(""); dB->setEnabled(FALSE); SigStrLabel->setEnabled(FALSE); } else { // FIXME: Add 'roaming' info from AT+CFUN qDebug("network"); NetStatText->setText("Registered"); NetworkLabel->setEnabled(TRUE); NetworkText->setEnabled(TRUE); NetworkText->setText(opi._longName.c_str()); SigStrText->setEnabled(TRUE); qDebug("get sig str"); int csq = me->getSignalStrength(); if (csq == 0) { SigStrText->setText("<= -113"); dB->setEnabled(TRUE); SigStrLabel->setEnabled(TRUE); } else if (csq == 99) { SigStrText->setText("Unknown"); dB->setEnabled(FALSE); SigStrLabel->setEnabled(FALSE); } else { char buf[6]; sprintf(buf, "%d", -113 + (2*csq)); SigStrText->setText(buf); dB->setEnabled(TRUE); SigStrLabel->setEnabled(TRUE); } } } void GSMTool::doSMSStoreChanged() { const char *storename = SMSStoreList->currentText().ascii(); qDebug("Store Changed to '%s'", storename); if (!strcmp(storename, "None")) { sms_store = NULL; } else try { sms_store = new SortedSMSStore(me->getSMSStore(storename)); sms_store->setSortOrder(ByIndex); qDebug("got store of size %d", sms_store->size()); } catch (GsmException) { sms_store = NULL; qDebug("get store failed"); } SMSList->setEnabled(!(sms_store == NULL)); NewSMSSaveButton->setEnabled(!(sms_store == NULL)); doSMSTypeChanged(); } void GSMTool::doSMSTypeChanged() { int direction = SMSViewType->currentItem(); qDebug("direction %s\n", direction?"outgoing":"incoming"); if (direction) SMSSendButton->setText("Send"); else SMSSendButton->setText("Reply"); SMSList->clear(); doSelectedSMSChanged(NULL); if (sms_store == NULL) return; for (SortedSMSStore::iterator e = sms_store->begin(); e != sms_store->end(); e++) { // qDebug("Message %d", i); qDebug("Is%sempty", e->empty()?" ":" not "); if (e->empty()) continue; qDebug("Status %d", e->status()); SMSMessageRef message = e->message(); qDebug("Got message."); // qDebug(message->toString().c_str()); if (direction == message->messageType()) { qDebug("yes\n"); char buf[3]; snprintf(buf, 3, "%d", e->index()); new QListViewItem(SMSList, message->address()._number.c_str(), message->serviceCentreTimestamp().toString().c_str(), buf); } } } void GSMTool::doSelectedSMSChanged(QListViewItem *item) { qDebug("message changed\n"); if (!item || sms_store == NULL) { SMSText->setText(""); SMSText->setEnabled(FALSE); SMSDeleteButton->setEnabled(FALSE); SMSSendButton->setEnabled(FALSE); return; } /* ARGH. This sucks. Surely there's an app-private pointer in the QListViewItem that I've failed to notice? SMSMessageRef message = *(SMSMessageRef*)item->private; */ qDebug("item %p\n", item); qDebug("text(2) is %s\n", item->text(2).ascii()); int index = atoi(item->text(2).ascii()); qDebug("index %d\n", index); SMSMessageRef message = sms_store->find(index)->message(); SMSText->setText(message->userData().c_str()); SMSText->setEnabled(TRUE); SMSDeleteButton->setEnabled(TRUE); SMSSendButton->setEnabled(TRUE); } void GSMTool::doSMSSendButton() { qDebug("SMSSendButton"); QListViewItem *item = SMSList->currentItem(); if (!item) return; int index = atoi(item->text(2).ascii()); qDebug("index %d\n", index); int direction = SMSViewType->currentItem(); qDebug("direction %s\n", direction?"outgoing":"incoming"); SMSMessageRef message = sms_store->find(index)->message(); if (direction) NewSMSText->setText(message->userData().c_str()); else NewSMSText->setText(""); NewSMSToBox->insertItem(message->address()._number.c_str(), 0); TabWidget2->setCurrentPage(3); } void GSMTool::doNewSMSClearButton() { NewSMSText->setText(""); } void GSMTool::doNewSMSSaveButton() { qDebug("NewSMSSaveButton"); const char *msgtext = strdup(NewSMSText->text().local8Bit()); const char *dest = NewSMSToBox->currentText().ascii(); NewSMSStatusLabel->setText("Sending..."); me->setMessageService(1); qDebug("NewSMSSendButton: '%s' to '%s'", msgtext, dest); SMSMessageRef m = new SMSSubmitMessage (msgtext, dest); sms_store->insert(m); free((void *)msgtext); } void GSMTool::doNewSMSSendButton() { const char *msgtext = strdup(NewSMSText->text().local8Bit()); const char *dest = NewSMSToBox->currentText().ascii(); NewSMSStatusLabel->setText("Sending..."); me->setMessageService(1); qDebug("NewSMSSendButton: '%s' to '%s'", msgtext, dest); SMSSubmitMessage m(msgtext, dest); try { m.setAt(new GsmAt(*me)); m.send(); NewSMSStatusLabel->setText("Message sent."); } catch (GsmException &ge) { NewSMSStatusLabel->setText("Failed."); qDebug(ge.what()); } free((void *)msgtext); } void GSMTool::doSMSDeleteButton() { QListViewItem *item = SMSList->currentItem(); if (!item) return; int index = atoi(item->text(2).ascii()); qDebug("delete SMS with index %d\n", index); SortedSMSStore::iterator e = sms_store->find(index); if (e != sms_store->end()) { qDebug("message is %s\n", e->message()->userData().c_str()); sms_store->erase(e); } doSMSTypeChanged(); } void GSMTool::doScanButton() { qDebug("ScanButton"); NetworkList->setEnabled(FALSE); AvailNetsLabel->setEnabled(FALSE); NetworkList->clear(); new QListViewItem(NetworkList, "Scanning..."); vector<OPInfo> opis; try { opis = me->getAvailableOPInfo(); } catch (GsmException) { NetworkList->clear(); new QListViewItem(NetworkList, "Scan failed..."); return; } NetworkList->clear(); for (vector<OPInfo>::iterator i = opis.begin(); i != opis.end(); ++i) { char *statustext; switch (i->_status) { case UnknownOPStatus: statustext = "unknown"; break; case CurrentOPStatus: statustext = "current"; break; case AvailableOPStatus: statustext = "available"; break; case ForbiddenOPStatus: statustext = "forbidden"; break; default: statustext = "(ERROR)"; } char num[7]; snprintf(num, 6, "%d", i->_numericName); new QListViewItem(NetworkList, i->_longName.c_str(), statustext, num, i->_shortName.c_str()); } NetworkList->setEnabled(TRUE); AvailNetsLabel->setEnabled(TRUE); } /* * A simple slot... not very interesting. */ void GSMTool::doConnectButton() { gsmlib::Port *port; speed_t rate; devicename = strdup(DeviceName->currentText().local8Bit().data()); rate = baudrates[BaudRate->currentItem()]; qDebug("Connect Button Pressed"); MfrText->setText("Opening..."); ModelText->setText(""); RevisionText->setText(""); SerialText->setText(""); setConnected(FALSE); if (me) { me = NULL; } if (lockDevice()) { qDebug("lockDevice() failed\n"); MfrText->setText("Lock port failed"); }; qDebug("Device name is %s\n", devicename); try { port = new UnixSerialPort(devicename, rate, DEFAULT_INIT_STRING, 0); } catch (GsmException) { qDebug("port failed"); MfrText->setText("Open port failed"); return; } MfrText->setText("Initialising..."); qDebug("got port"); try { me = new MeTa(port); } catch (GsmException) { qDebug("meta failed"); MfrText->setText("Initialise GSM unit failed"); me = NULL; unlockDevice(); return; } qDebug("Opened"); MEInfo ifo; diff --git a/noncore/unsupported/mail2/bend/bend.cpp b/noncore/unsupported/mail2/bend/bend.cpp index e2ece2a..ab6eb45 100644 --- a/noncore/unsupported/mail2/bend/bend.cpp +++ b/noncore/unsupported/mail2/bend/bend.cpp @@ -1,124 +1,124 @@ #include <qlayout.h> #include <qpixmap.h> #include <qlabel.h> #include <qsound.h> #include <qtimer.h> #include <qdir.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/resource.h> #include <qpe/config.h> #include <opie/odevice.h> #include "imapresponse.h" #include "imaphandler.h" #include "configfile.h" #include "bend.h" using namespace Opie; BenD::BenD(QWidget *parent, const char *name, WFlags fl) : QButton(parent, name, fl) { _config = new Config("mail"); _config->setGroup("Settings"); QVBoxLayout *layout = new QVBoxLayout(this); layout->addItem(new QSpacerItem(0,0)); QLabel *pixmap = new QLabel(this); pixmap->setPixmap(Resource::loadPixmap("mail/mailchecker")); layout->addWidget(pixmap); layout->addItem(new QSpacerItem(0,0)); hide(); connect(this, SIGNAL(clicked()), SLOT(slotClicked())); if (!_config->readBoolEntry("Disabled", false)) { _intervalMs = _config->readNumEntry("CheckEvery", 5) * 60000; _intervalTimer = new QTimer(); _intervalTimer->start(_intervalMs); connect(_intervalTimer, SIGNAL(timeout()), SLOT(slotCheck())); QTimer::singleShot(0, this, SLOT(slotCheck())); } } void BenD::drawButton(QPainter *) { } void BenD::drawButtonText(QPainter *) { } void BenD::slotClicked() { QCopEnvelope e("QPE/System", "execute(QString)"); e << QString("mail"); ODevice *device = ODevice::inst(); if ( !device-> ledList ( ). isEmpty ( )) { OLed led = ( device-> ledList ( ). contains ( Led_Mail )) ? Led_Mail : device-> ledList ( ) [0]; device->setLedState(led, Led_Off); } } void BenD::slotCheck() { // Check wether the check interval has been changed. int newIntervalMs = _config->readNumEntry("CheckEvery", 5) * 60000; if (newIntervalMs != _intervalMs) { _intervalTimer->changeInterval(newIntervalMs); _intervalMs = newIntervalMs; #ifndef QT_NO_DEBUG qWarning("BenD: Detected interval change"); #endif } QValueList<Account> acList = ConfigFile::getAccounts(); QValueList<Account>::Iterator ot; for (ot = acList.begin(); ot != acList.end(); ot++) { if (!((*ot).imapServer().isEmpty() || (*ot).imapPort().isEmpty() || (*ot).user().isEmpty() || (*ot).pass().isEmpty())) { if (!((*ot).imapSsl() && (*ot).imapSslPort().isEmpty())) { IMAPHandler *handler = new IMAPHandler(*ot); handler->iStatus("INBOX", "RECENT"); - connect(handler, SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPStatus(IMAPResponse &))); + connect(handler, SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPStatus(IMAPResponse&))); } } } } void BenD::slotIMAPStatus(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPStatus(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPStatus(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { if (response.STATUS()[0].recent().toInt() > 0) { ODevice *device = ODevice::inst(); if (isHidden()) show(); if (_config->readBoolEntry("BlinkLed", true)) { if ( !device-> ledList ( ). isEmpty ( )) { OLed led = ( device-> ledList ( ). contains ( Led_Mail )) ? Led_Mail : device-> ledList ( ) [0]; device->setLedState(led, device-> ledStateList ( led ). contains ( Led_BlinkSlow ) ? Led_BlinkSlow : Led_On ); } } if (_config->readBoolEntry("PlaySound", false)) device->alarmSound(); } else { ODevice *device = ODevice::inst(); if (!isHidden()) hide(); if ( !device-> ledList ( ). isEmpty ( )) { OLed led = ( device-> ledList ( ). contains ( Led_Mail )) ? Led_Mail : device-> ledList ( ) [0]; device->setLedState(led, Led_Off); } } response.imapHandler()->iLogout(); } else qWarning("BenD: WARNING: Couldn't retrieve INBOX status."); } diff --git a/noncore/unsupported/mail2/composer.cpp b/noncore/unsupported/mail2/composer.cpp index cb80299..da1aee9 100644 --- a/noncore/unsupported/mail2/composer.cpp +++ b/noncore/unsupported/mail2/composer.cpp @@ -1,420 +1,420 @@ #include <qmultilineedit.h> #include <qmessagebox.h> #include <qpopupmenu.h> #include <qcombobox.h> #include <qlineedit.h> #include <qaction.h> #include <qtimer.h> #include <qlabel.h> #include <qapplication.h> #include <qpe/resource.h> #include <qpe/config.h> #include <opie/ofiledialog.h> #include "mailstatusbar.h" #include "addresspicker.h" #include "listviewplus.h" #include "smtphandler.h" #include "composer.h" #include "rename.h" AttachViewItem::AttachViewItem(QListView *parent, Attachment &attachment) : QListViewItem(parent), _attachment(attachment) { setPixmap(0, _attachment.docLnk().pixmap().isNull() ? Resource::loadPixmap("UnknownDocument-14") : _attachment.docLnk().pixmap()); setText(0, _attachment.newName().isEmpty() ? _attachment.fileName() : _attachment.newName()); setText(1, _attachment.description()); } Composer::Composer(QWidget *parent, const char *name, WFlags fl, bool sendQueue) : ComposerBase(parent, name, fl), _inLoop(false) { _sendQueued = sendQueue; status->setStopEnabled(false); to->setFocus(); connect(sendmail, SIGNAL(activated()), SLOT(slotSendMail())); connect(queuemail, SIGNAL(activated()), SLOT(slotQueueMail())); connect(addressbook, SIGNAL(activated()), SLOT(slotOpenAddressPicker())); connect(addattach, SIGNAL(activated()), SLOT(slotAddAttach())); connect(delattach, SIGNAL(activated()), SLOT(slotDelAttach())); connect(from, SIGNAL(activated(int)), SLOT(slotFromChanged(int))); connect(attachPopup, SIGNAL(activated(int)), SLOT(slotPopupHandler(int))); QTimer::singleShot(0, this, SLOT(slotFillStuff())); QTimer::singleShot(0, this, SLOT(slotResizing())); } Composer::~Composer() { hide(); } void Composer::hide() { QWidget::hide(); if (_inLoop) { _inLoop = false; qApp->exit_loop(); } } void Composer::exec() { show(); if (!_inLoop) { _inLoop = true; qApp->enter_loop(); } } void Composer::setSendMail(SendMail &sendMail) { to->setText(sendMail.to()); cc->setText(sendMail.cc()); bcc->setText(sendMail.bcc()); subject->setText(sendMail.subject()); message->setText(sendMail.message()); _inReplyTo = sendMail.inReplyTo(); QValueList<Attachment> attachments = sendMail.attachments(); QValueList<Attachment>::Iterator it; for (it = attachments.begin(); it != attachments.end(); it++) { (void) new AttachViewItem(attachView, *it); if (attachView->isHidden()) attachView->show(); } } void Composer::slotResizing() { from->setMaximumWidth(width() - fromBox->width()); from->resize(width() - fromBox->width(), y()); if (_sendQueued) slotSendQueued(); } void Composer::slotPopupHandler(int itemid) { if (attachView->currentItem() == NULL) { QMessageBox::information(this, tr("Error"), tr("Please select an entry first."), tr("Ok")); return; } if (itemid == POPUP_ATTACH_RENAME) { QString tmp = Rename::rename(attachView->currentItem()->text(0), this); if (tmp != QString(0)) attachView->currentItem()->setText(0, tmp); } else if (itemid == POPUP_ATTACH_DESC) { QString tmp = Rename::getText(tr("Set Description"), tr("<div align=center>Description"), this); if (tmp != QString(0)) attachView->currentItem()->setText(1, tmp); } else if (itemid == POPUP_ATTACH_REMOVE) { attachView->takeItem(attachView->currentItem()); } } void Composer::slotSendMail() { if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) { QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok")); return; } SendMail smail; smail.setFrom(from->currentText()); smail.setReplyTo(replyto->text()); smail.setTo(to->text()); smail.setCc(cc->text()); smail.setBcc(bcc->text()); smail.setSubject(subject->text()); smail.setMessage(message->text()); smail.setNeedsMime(attachView->childCount() == 0 ? false : true); smail.setAccount(accountsLoaded[from->currentItem()]); if (priority->currentItem() == POPUP_PRIO_LOW) { smail.setPriority("Low"); // No i18n on purpose } else if (priority->currentItem() == POPUP_PRIO_NORMAL) { smail.setPriority("Normal"); // No i18n on purpose } else if (priority->currentItem() == POPUP_PRIO_HIGH) { smail.setPriority("High"); // No i18n on purpose } QValueList<Attachment> attachments; QListViewItem *item; for (item = attachView->firstChild(); item != 0; item = item->itemBelow()) { attachments.append(((AttachViewItem *)item)->attachment()); } smail.setAttachments(attachments); QString header, message; MailFactory::genMail(header, message, smail, this); if (header.isNull() || message.isNull()) return; // Aborted. status->setStopEnabled(true); SmtpHandler *handler = new SmtpHandler(header, message, accountsLoaded[from->currentItem()], to->text()); connect(handler, SIGNAL(finished()), SLOT(slotSendFinished())); - connect(handler, SIGNAL(error(const QString &)), SLOT(slotSendError(const QString &))); - connect(handler, SIGNAL(status(const QString &)), status, SLOT(setStatusText(const QString &))); + connect(handler, SIGNAL(error(const QString&)), SLOT(slotSendError(const QString&))); + connect(handler, SIGNAL(status(const QString&)), status, SLOT(setStatusText(const QString&))); } void Composer::slotSendQueued() { int effSendCount = 0; qDebug("Sending queued messages"); Config cfg( "mailqueue", Config::User ); cfg.setGroup( "Settings" ); _sendCount = 0; _sendError = 0; _toSend = cfg.readNumEntry( "count", 0 ); if (_toSend == 0) close(); qDebug("%i messages to send", _toSend); QString str; for (int i=1;i<=_toSend;i++) { qDebug("sending message %i",i); cfg.setGroup( "Mail_" + QString::number(i) ); SendMail smail; str = cfg.readEntry("from"); qDebug("setFrom %s",str.latin1()); smail.setFrom( str ); str = cfg.readEntry("reply"); qDebug("setReplyTo %s",str.latin1()); smail.setReplyTo( str ); QString toAdr = cfg.readEntry("to"); qDebug("to %s",toAdr.latin1()); smail.setTo( toAdr ); //to->text()); str = cfg.readEntry("cc"); qDebug("setCc %s",str.latin1()); smail.setCc( str ); //cc->text()); smail.setBcc( cfg.readEntry("bcc") ); //bcc->text()); str = cfg.readEntry("subject"); qDebug("setSubject %s",str.latin1()); smail.setSubject( str ); //subject->text()); str = cfg.readEntryCrypt("message"); qDebug("setMessage %s",str.latin1()); smail.setMessage( str ); //message->text()); smail.setNeedsMime( cfg.readBoolEntry("mime") ); //attachView->childCount() == 0 ? false : true); qDebug("setting account [%i]",cfg.readNumEntry("account")); Account accnt = accountsLoaded[ cfg.readNumEntry("account") ]; smail.setAccount( accnt ); //accountsLoaded[from->currentItem()]); int prio = cfg.readNumEntry( "priority" ); qDebug("setting priority %i",prio); if (prio == POPUP_PRIO_LOW) { smail.setPriority("Low"); // No i18n on purpose } else if (prio == POPUP_PRIO_NORMAL) { smail.setPriority("Normal"); // No i18n on purpose } else if (prio == POPUP_PRIO_HIGH) { smail.setPriority("High"); // No i18n on purpose } QValueList<Attachment> attachments; Attachment a; QString an; int ac = cfg.readNumEntry( "attachments", 0 ); qDebug("%i Attachments",ac); for (int j = 0; i < ac; ac++) { an = "Attachment_" + QString::number( j ); qDebug(an.latin1()); a.setFileName(cfg.readEntry( an + "fileName" )); a.setNewName(cfg.readEntry( an + "newName" )); a.setDescription(cfg.readEntry( an + "description" )); a.setDocLnk( DocLnk( cfg.readEntry( an + "docLnk" )) ); attachments.append( a ); } smail.setAttachments(attachments); qDebug("putting mail together"); QString header, message; MailFactory::genMail(header, message, smail, this); if (header.isNull() || message.isNull()) continue;//return; // Aborted. // abort->setEnabled(true); qDebug("Sending to %s",toAdr.latin1()); SmtpHandler *handler = new SmtpHandler(header, message, accnt ,toAdr); effSendCount++; connect(handler, SIGNAL(finished()), SLOT(slotSendQueuedFinished())); - connect(handler, SIGNAL(error(const QString &)), SLOT(slotSendQueuedError(const QString &))); - connect(handler, SIGNAL(status(const QString &)), status, SLOT(setStatusText(const QString &))); + connect(handler, SIGNAL(error(const QString&)), SLOT(slotSendQueuedError(const QString&))); + connect(handler, SIGNAL(status(const QString&)), status, SLOT(setStatusText(const QString&))); } if (effSendCount < _toSend) { _toSend = effSendCount; QMessageBox::information(this, tr("Error"), tr("<p>There was a problem sending some of the queued mails.</p>"), tr("Ok")); } } void Composer::slotQueueMail() { if (to->text().find(QRegExp(".*\\@.*\\..*")) == -1) { QMessageBox::information(this, tr("Error"), tr("<p>You have to specify a recipient.<br>(eg: foo@bar.org)</p>"), tr("Ok")); return; } Config cfg( "mailqueue", Config::User ); cfg.setGroup( "Settings" ); int count = cfg.readNumEntry( "count", 0 ); count++; cfg.writeEntry( "count", count ); qDebug("queueing mail %i",count); cfg.setGroup( "Mail_" + QString::number( count )); cfg.writeEntry( "from", from->currentText() ); cfg.writeEntry( "reply", replyto->text()); cfg.writeEntry( "to", to->text()); cfg.writeEntry( "cc", cc->text()); cfg.writeEntry( "bcc", bcc->text()); cfg.writeEntry( "subject", subject->text()); cfg.writeEntryCrypt( "message", message->text()); cfg.writeEntry( "mime", attachView->childCount() == 0 ); cfg.writeEntry( "account", from->currentItem()); cfg.writeEntry( "priority", priority->currentItem() ); cfg.writeEntry( "attachments", attachView->childCount() ); Attachment a; QListViewItem *item; QString an; int i = 0; for (item = attachView->firstChild(); item != 0; item = item->itemBelow()) { a = ((AttachViewItem *)item)->attachment(); an = "Attachment_" + QString::number( i++ ); cfg.writeEntry( an + "fileName", a.fileName() ); cfg.writeEntry( an + "newName", a.newName() ); cfg.writeEntry( an + "description", a.description() ); cfg.writeEntry( an + "docLnk", a.docLnk().file() ); } QMessageBox::information(this, tr("Success"), tr("<p>The mail was queued successfully.</p><p>The queue contains ")+QString::number(count)+tr(" mails.</p>"), tr("Ok")); } void Composer::slotSendError(const QString &error) { status->setStatusText(tr("<font color=#ff0000>Error occoured during sending.</font>")); QMessageBox::warning(this, tr("Error"), tr("<p>%1</p").arg(error), tr("Ok")); } void Composer::slotSendQueuedError(const QString &error) { _sendError++; qDebug("error send mail %i",_sendCount); status->setStatusText(tr("<font color=#ff0000>Error occoured during sending.</font>")); QMessageBox::warning(this, tr("Error"), tr("<p>%1</p").arg(error), tr("Ok")); } void Composer::slotSendFinished() { QMessageBox::information(this, tr("Success"), tr("<p>The mail was sent successfully.</p>"), tr("Ok")); status->setStatusText(QString(0)); status->setStopEnabled(false); } void Composer::slotSendQueuedFinished() { _sendCount++; qDebug("finished send mail %i of %i (error %i)",_sendCount,_toSend,_sendError); if (_sendCount < _toSend) return; if (_sendError == _toSend) close(); QMessageBox::information(this, tr("Success"), tr("<p>The queued mails ")+QString::number(_toSend-_sendError)+tr(" of ")+QString::number(_toSend)+(" were sent successfully.</p>"), tr("Ok")); Config cfg( "mailqueue", Config::User ); cfg.setGroup( "Settings" ); cfg.writeEntry( "count", 0 ); for (int i=1;i<=_sendCount;i++) { cfg.setGroup( "Mail_" + QString::number(i) ); qDebug("remove mail %i", i); cfg.clearGroup(); cfg.removeEntry( "Mail_" + QString::number(i) ); } close(); } void Composer::slotFillStuff() { QValueList<Account> accounts = ConfigFile::getAccounts(); int i = 0; QValueList<Account>::Iterator it; for (it = accounts.begin(); it != accounts.end(); it++) { if (!(*it).email().isEmpty() && !(*it).smtpServer().isEmpty() && !(*it).smtpPort().isEmpty()) { if (!(*it).realName().isEmpty()) from->insertItem((*it).realName() + " <" + (*it).email() + ">", i); else from->insertItem((*it).email()); accountsLoaded.append(*it); i++; } } } void Composer::slotFromChanged(int id) { Account account = accountsLoaded[id]; if (account.defaultCc()) cc->setText(account.cc()); if (account.defaultBcc()) bcc->setText(account.bcc()); if (account.defaultReplyTo()) replyto->setText(account.replyTo()); if (!account.signature().isEmpty()) message->setText(message->text() + "\n\n-- \n" + account.signature()); } void Composer::slotOpenAddressPicker() { if (!to->isHidden() && cc->isHidden() && bcc->isHidden()) { if (to->text().isEmpty()) { to->setText(AddressPicker::getNames()); } else { to->setText(to->text() + ", " + AddressPicker::getNames()); } } else if (to->isHidden() && !cc->isHidden() && bcc->isHidden()) { if (cc->text().isEmpty()) { cc->setText(AddressPicker::getNames()); } else { cc->setText(cc->text() + ", " + AddressPicker::getNames()); } } else if (to->isHidden() && cc->isHidden() && !bcc->isHidden()) { if (bcc->text().isEmpty()) { bcc->setText(AddressPicker::getNames()); } else { bcc->setText(bcc->text() + ", " + AddressPicker::getNames()); } } } void Composer::slotAddAttach() { DocLnk lnk = OFileDialog::getOpenFileName( 1,"/"); // DocLnk lnk = AttachDiag::getFile(this); if (lnk.name().isEmpty()) return; Attachment attachment; attachment.setFileName(lnk.file()); attachment.setNewName(lnk.name()); attachment.setDocLnk(lnk); (void) new AttachViewItem(attachView, attachment); } void Composer::slotDelAttach() { if (attachView->currentItem() == NULL) return; attachView->takeItem(attachView->currentItem()); } diff --git a/noncore/unsupported/mail2/folderwidget.cpp b/noncore/unsupported/mail2/folderwidget.cpp index d27968b..a0520b1 100644 --- a/noncore/unsupported/mail2/folderwidget.cpp +++ b/noncore/unsupported/mail2/folderwidget.cpp @@ -1,314 +1,314 @@ #include <qmessagebox.h> #include <qtextstream.h> #include <qpopupmenu.h> #include <qheader.h> #include <qfile.h> #include <qdir.h> #include <qpe/resource.h> #include <stdlib.h> #include "folderwidget.h" #include "imaphandler.h" #include "imapbase.h" #include "rename.h" FolderWidgetItem::FolderWidgetItem(Folder &folder, QListView *parent) : QListViewItem(parent), _folder(folder) { setPixmap(0, QPixmap(Resource::loadPixmap("mail/inbox"))); setText(0, _folder.topFolder().account().user() + " (" + _folder.topFolder().account().imapServer() + ")"); setOpen(true); } FolderWidgetItem::FolderWidgetItem(Folder &folder, FolderWidgetItem *parent) : QListViewItem(parent), _folder(folder) { if (_folder.noCache()) { setText(0, QObject::tr("<Foldertree not known.>")); } else { if (folder.fullName().upper() == "INBOX") { setPixmap(0, QPixmap(Resource::loadPixmap("mail/inbox"))); setText(0, QObject::tr("Inbox")); } else { setPixmap(0, QPixmap(Resource::loadPixmap("mail/folder"))); setText(0, folder.fullName()); } setOpen(true); } } FolderWidget::FolderWidget(QWidget *parent, const char *name, WFlags fl) : ListViewPlus(parent, name, fl) { header()->hide(); addColumn(""); setSorting(-1); QPopupMenu *menu = new QPopupMenu(); menu->insertItem(tr("Rename"), MENU_RENAME); menu->insertItem(tr("Delete"), MENU_DELETE); menu->insertItem(tr("Move"), MENU_MOVE); menu->insertItem(tr("Copy"), MENU_COPY); menu->insertSeparator(); menu->insertItem(tr("Create folder"), MENU_CREATE); menu->insertSeparator(); menu->insertItem(tr("Rescan folder list"), MENU_RESCAN); setPopup(menu); getAccounts(); connect(menu, SIGNAL(activated(int)), SLOT(slotMenuActivated(int))); - connect(this, SIGNAL(clicked(QListViewItem *)), SLOT(slotItemClicked(QListViewItem *))); + connect(this, SIGNAL(clicked(QListViewItem*)), SLOT(slotItemClicked(QListViewItem*))); } FolderWidget::~FolderWidget() { // TODO: Save folder tree. } void FolderWidget::update() { getAccounts(); } void FolderWidget::getAccounts() { clear(); QValueList<Account> accounts = ConfigFile::getAccounts(); QValueList<Account>::Iterator it; for (it = accounts.begin(); it != accounts.end(); it++) { FolderWidgetItem *item = addAccount(*it); QFile f((QString) getenv("HOME") + "/Applications/mail/foldercache/foldercache-" + (*it).accountName()); if (!f.open(IO_ReadOnly)) { Folder folder; folder.setNoCache(true); addFolder(folder, item); } else { QTextStream t(&f); while (!t.atEnd()) { QString separator = t.readLine(); QString fullname = t.readLine(); Folder folder; folder.setSeparator(separator); folder.setFullName(fullname); folder.setTopFolder(item->folder().topFolder()); addFolder(folder, item); } f.close(); } } } FolderWidgetItem *FolderWidget::addAccount(Account &account) { TopFolder tf; tf.setAccount(account); // XXX This has to change!!! The folderwidget may not create an // XXX IMAPHandler!!!! Do this in IMAPHandler! tf.setIMAPHandler(new IMAPHandler(account)); Folder folder; folder.setTopFolder(tf); connect(tf.handler(), SIGNAL(IMAPLookingUpHost()), SLOT(slotIMAPLookingUpHost())); connect(tf.handler(), SIGNAL(IMAPHostFound()), SLOT(slotIMAPHostFound())); connect(tf.handler(), SIGNAL(IMAPConnected()), SLOT(slotIMAPConnected())); connect(tf.handler(), SIGNAL(IMAPDisconnected()), SLOT(slotIMAPDisconnected())); connect(tf.handler(), SIGNAL(IMAPError(int)), SLOT(slotIMAPError(int))); return new FolderWidgetItem(folder, this); } FolderWidgetItem *FolderWidget::addFolder(Folder &folder, FolderWidgetItem *folderWidgetItem) { return new FolderWidgetItem(folder, folderWidgetItem); } void FolderWidget::slotMenuActivated(int itemid) { if (currentItem() == NULL) { QMessageBox::information(this, tr("Error"), tr("<p>Please select an item first.</p>"), tr("Ok")); return; } if (itemid == MENU_RENAME) { if (((FolderWidgetItem *)currentItem())->folder().fullName().isEmpty()) return; Folder folder = ((FolderWidgetItem *)currentItem())->folder(); QString newName = Rename::rename(folder.fullName(), this); if (newName.isNull()) return; folder.topFolder().handler()->iRename(folder.fullName(), newName); - connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPRename(IMAPResponse &))); + connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPRename(IMAPResponse&))); } else if (itemid == MENU_DELETE) { if (((FolderWidgetItem *)currentItem())->folder().fullName().isEmpty()) return; Folder folder = ((FolderWidgetItem *)currentItem())->folder(); int ret = QMessageBox::information(this, tr("Question"), tr("<p>Do you really want to delete <pre>%1</pre>?").arg(folder.fullName()), tr("Yes"), tr("No")); if (ret == 1) return; _createFolder = folder; folder.topFolder().handler()->iDelete(folder.fullName()); - connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPDelete(IMAPResponse &))); + connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPDelete(IMAPResponse&))); } else if (itemid == MENU_MOVE) { } else if (itemid == MENU_COPY) { } else if (itemid == MENU_CREATE) { Folder folder = (((FolderWidgetItem *)currentItem())->folder()); _createFolder = folder; QString folderName = Rename::getText(tr("Foldername"), tr("<p>Please enter the name of the new folder.</p>"), this); if (folderName.isNull()) return; folder.topFolder().handler()->iCreate(folder.fullName() + folder.separator() + folderName); - connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPCreate(IMAPResponse &))); + connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPCreate(IMAPResponse&))); } else if (itemid == MENU_RESCAN) { Folder folder = (((FolderWidgetItem *)currentItem())->folder()); _rescanAccount = folder.topFolder().account(); folder.topFolder().handler()->iList("", "*"); - connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPList(IMAPResponse &))); + connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPList(IMAPResponse&))); } } void FolderWidget::slotItemClicked(QListViewItem *item) { if (item == NULL) return; Folder folder = ((FolderWidgetItem *)item)->folder(); if (folder.fullName().isEmpty()) return; emit folderSelected(folder); } void FolderWidget::slotIMAPLookingUpHost() { emit status(tr("Looking up host...")); emit connecting(); } void FolderWidget::slotIMAPHostFound() { emit status(tr("Host found.")); } void FolderWidget::slotIMAPConnected() { emit status(tr("Connected to host.")); emit connected(); } void FolderWidget::slotIMAPError(int error) { if (error == IMAPBase::IMAPErrConnectionRefused) { QMessageBox::warning(this, tr("Error"), tr("<p>The IMAP connection was refused.</p>"), tr("Ok")); } else if (error == IMAPBase::IMAPErrHostNotFound) { QMessageBox::warning(this, tr("Error"), tr("<p>The host was not found.</p>"), tr("Ok")); } else if (error == IMAPBase::IMAPErrSocketRead) { QMessageBox::warning(this, tr("Error"), tr("<p>There was an error while reading from the socket.</p>"), tr("Ok")); } else if (error == IMAPBase::IMAPErrLoginFailed) { QMessageBox::warning(this, tr("Error"), tr("<p>Login failed. Check your password/username.</p>"), tr("Ok")); } else { QMessageBox::warning(this, tr("Error"), tr("<p>An unknown error was encountered.</p>"), tr("Ok")); } } void FolderWidget::slotIMAPDisconnected() { emit status(tr("Disconnected.")); emit disconnected(); } void FolderWidget::slotIMAPLogin(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPLogin(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPLogin(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { emit status(tr("Login successful!")); } else { QMessageBox::warning(this, tr("Error"), tr("<p>Login failed. Go away.</p>"), tr("Ok")); } } void FolderWidget::slotIMAPRename(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPRename(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPRename(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { emit status(tr("Renaming successful!")); } else { QMessageBox::warning(this, tr("Error"), tr("<p>Renaming failed. (Server said: %1)</p>").arg(response.statusResponse().comment()), tr("Ok")); } } void FolderWidget::slotIMAPDelete(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPDelete(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPDelete(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { emit status(tr("Deletion successful!")); _rescanAccount = _createFolder.topFolder().account(); _createFolder.topFolder().handler()->iList(".", "*"); - connect(_createFolder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPList(IMAPResponse &))); + connect(_createFolder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPList(IMAPResponse&))); } else { QMessageBox::warning(this, tr("Error"), tr("<p>Delete failed. (Server said: %1)</p>").arg(response.statusResponse().comment()), tr("Ok")); } } void FolderWidget::slotIMAPCreate(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPCreate(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPCreate(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { emit status(tr("Folder created. Rescanning...")); _rescanAccount = _createFolder.topFolder().account(); _createFolder.topFolder().handler()->iList(".", "*"); - connect(_createFolder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPList(IMAPResponse &))); + connect(_createFolder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPList(IMAPResponse&))); } else { QMessageBox::warning(this, tr("Error"), tr("<p>The folder could not be created. (Server said: %1)</p>").arg(response.statusResponse().comment()), tr("Ok")); } } void FolderWidget::slotIMAPList(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPList(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPList(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { QDir d((QString) getenv("HOME") + "/Applications/mail/foldercache"); if (!d.exists()) { system("mkdir -p $HOME/Applications/mail/foldercache"); qWarning("Created $HOME/Applications/mail/foldercache."); } QFile f((QString) getenv("HOME") + "/Applications/mail/foldercache/foldercache-" + _rescanAccount.accountName()); if (!f.open(IO_WriteOnly)) { QMessageBox::critical(this, tr("Error"), tr("<p>Couldn't open folder cache file for writing!</p>"), tr("Ok")); return; } QTextStream t(&f); QValueList<IMAPResponseLIST>::Iterator it; QValueList<IMAPResponseLIST> lists = response.LIST(); for (it = lists.begin(); it != lists.end(); it++) { t << (*it).folderSeparator() << "\n"; t << (*it).folder() << "\n"; } f.close(); emit status(tr("Got folder list.")); getAccounts(); } else { QMessageBox::warning(this, tr("Error"), tr("<p>Couldn't retrieve the folder list. (Server said: %1)</p>").arg(response.statusResponse().comment()), tr("Ok")); } } diff --git a/noncore/unsupported/mail2/libmail/imaphandler.cpp b/noncore/unsupported/mail2/libmail/imaphandler.cpp index dc97b28..8da0acd 100644 --- a/noncore/unsupported/mail2/libmail/imaphandler.cpp +++ b/noncore/unsupported/mail2/libmail/imaphandler.cpp @@ -1,346 +1,346 @@ #include "imapresponse.h" #include "imaphandler.h" #include "imapbase.h" IMAPHandler::IMAPHandler(const Account &account) : QObject(), _account(account) { _ready = false; _loggingin = false; _loggedin = false; _tag = 0; _ibase = new IMAPBase(account); - connect(_ibase, SIGNAL(dataReceived(const QString &)), SLOT(slotDataReceived(const QString &))); + connect(_ibase, SIGNAL(dataReceived(const QString&)), SLOT(slotDataReceived(const QString&))); connect(_ibase, SIGNAL(lookingUpHost()), SLOT(slotLookingUpHost())); connect(_ibase, SIGNAL(hostFound()), SLOT(slotHostFound())); connect(_ibase, SIGNAL(connected()), SLOT(slotConnected())); connect(_ibase, SIGNAL(disconnected()), SLOT(slotDisconnected())); connect(_ibase, SIGNAL(error(int)), SLOT(slotError(int))); } void IMAPHandler::doLogin() { if (_loggedin) return; if (_loggingin) return; _loggingin = true; iLogin(_account.user(), _account.pass()); } QString IMAPHandler::iCapability() { _ibase->sendCommand(QString("%1 CAPABILITY\r\n") .arg(tag())); return tag(false); } QString IMAPHandler::iNoop() { _ibase->sendCommand(QString("%1 NOOP\r\n") .arg(tag())); return tag(false); } QString IMAPHandler::iLogout() { _ibase->sendCommand(QString("%1 LOGOUT\r\n") .arg(tag())); return tag(false); } QString IMAPHandler::iAuthenticate(const QString &mechanism) { _ibase->sendCommand(QString("%1 AUTHENTICATE \"%2\"\r\n") .arg(tag()) .arg(escape(mechanism))); return tag(false); } QString IMAPHandler::iLogin(const QString &user, const QString &pass) { _ibase->sendCommand(QString("%1 LOGIN \"%2\" \"%3\"\r\n") .arg(tag()) .arg(escape(user)) .arg(escape(pass))); return tag(false); } QString IMAPHandler::iSelect(const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 SELECT \"%2\"\r\n") .arg(tag()) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iExamine(const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 EXAMINE \"%2\"\r\n") .arg(tag()) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iCreate(const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 CREATE \"%2\"\r\n") .arg(tag()) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iDelete(const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 DELETE \"%2\"\r\n") .arg(tag()) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iRename(const QString &mailbox, const QString &newMailbox) { doLogin(); _ibase->sendCommand(QString("%1 RENAME \"%2\" \"%3\"\r\n") .arg(tag()) .arg(escape(mailbox)) .arg(escape(newMailbox))); return tag(false); } QString IMAPHandler::iSubscribe(const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 SUBSCRIBE \"%2\"\r\n") .arg(tag()) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iUnsubscribe(const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 UNSUBSCRIBE \"%2\"\r\n") .arg(tag()) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iList(const QString &reference, const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 LIST \"%2\" \"%3\"\r\n") .arg(tag()) .arg(escape(reference)) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iLsub(const QString &reference, const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 LSUB \"%2\" \"%3\"\r\n") .arg(tag()) .arg(escape(reference)) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iStatus(const QString &mailbox, const QString &items) { doLogin(); _ibase->sendCommand(QString("%1 STATUS \"%2\" (%3)\r\n") .arg(tag()) .arg(escape(mailbox)) .arg(escape(items))); return tag(false); } QString IMAPHandler::iAppend(const QString &mailbox, const QString &literal, const QString &flags, const QString &datetime) { doLogin(); _ibase->sendCommand(QString("%1 APPEND \"%2\" (%3) \"%4\" {%5}\r\n%6\r\n") .arg(tag()) .arg(escape(mailbox)) .arg(flags) .arg(escape(datetime)) .arg(literal.length()) .arg(literal)); return tag(false); } QString IMAPHandler::iCheck() { doLogin(); _ibase->sendCommand(QString("%1 CHECK\r\n") .arg(tag())); return tag(false); } QString IMAPHandler::iClose() { doLogin(); _ibase->sendCommand(QString("%1 CLOSE\r\n") .arg(tag())); return tag(false); } QString IMAPHandler::iExpunge() { doLogin(); _ibase->sendCommand(QString("%1 EXPUNGE\r\n") .arg(tag())); return tag(false); } QString IMAPHandler::iSearch(const QString &search, const QString &charset) { doLogin(); _ibase->sendCommand(QString("%1 SEARCH %2 %3\r\n") .arg(tag()) .arg(charset.isEmpty() ? QString(0) : escape(charset)) .arg(search)); return tag(false); } QString IMAPHandler::iFetch(const QString &message, const QString &items) { doLogin(); _ibase->sendCommand(QString("%1 FETCH %2 (%3)\r\n") .arg(tag()) .arg(message) .arg(items)); return tag(false); } QString IMAPHandler::iStore(const QString &message, const QString &items) { doLogin(); _ibase->sendCommand(QString("%1 STORE %2 %3\r\n") .arg(tag()) .arg(message) .arg(items)); return tag(false); } QString IMAPHandler::iCopy(const QString &message, const QString &mailbox) { doLogin(); _ibase->sendCommand(QString("%1 COPY %2 \"%3\"\r\n") .arg(tag()) .arg(message) .arg(escape(mailbox))); return tag(false); } QString IMAPHandler::iUid(const QString &command, const QString &arguments) { doLogin(); _ibase->sendCommand(QString("%1 UID %2 %3\r\n") .arg(tag()) .arg(command) .arg(arguments)); return tag(false); } QString IMAPHandler::iX(const QString &commandAtom, const QString &arguments) { doLogin(); _ibase->sendCommand(QString("%1 X%2 %3\r\n") .arg(tag()) .arg(commandAtom) .arg(arguments)); return tag(false); } QString IMAPHandler::escape(const QString &in) { QString in_ = in; return in_.replace(QRegExp("\""), "\\\""); } QString IMAPHandler::tag(bool count) { return QString("a%1").arg(count ? _tag++ : _tag); } void IMAPHandler::slotDataReceived(const QString &data) { if (!_ready) { // The first data is always the greeting string. // We can ignore it. _ready = true; return; } IMAPResponseParser parser; -// connect ( &parser, SIGNAL( needMoreData ( QString & )), _ibase, SLOT( tryRead ( QString & ))); +// connect ( &parser, SIGNAL( needMoreData(QString&)), _ibase, SLOT( tryRead(QString&))); parser. parse ( data ); IMAPResponse response = parser.response(); -// disconnect ( &parser, SIGNAL( needMoreData ( QString & )), _ibase, SLOT( tryRead ( QString & ))); +// disconnect ( &parser, SIGNAL( needMoreData(QString&)), _ibase, SLOT( tryRead(QString&))); response.setImapHandler(this); if (!_loggingin) { qDebug("Emitting gotResponse!\n" ); emit gotResponse(response); } else { if (response.statusResponse().status() == IMAPResponseEnums::OK) { _loggingin = false; _loggedin = true; qWarning("OK. Logged in. Leaving loggingin state."); } else { _loggingin = false; emit IMAPError(IMAPBase::IMAPErrLoginFailed); } } } void IMAPHandler::slotLookingUpHost() { emit IMAPLookingUpHost(); } void IMAPHandler::slotHostFound() { emit IMAPHostFound(); } void IMAPHandler::slotConnected() { emit IMAPConnected(); } void IMAPHandler::slotDisconnected() { _loggedin = false; emit IMAPDisconnected(); } void IMAPHandler::slotError(int err) { emit IMAPError(err); } diff --git a/noncore/unsupported/mail2/listviewplus.cpp b/noncore/unsupported/mail2/listviewplus.cpp index ce5f35f..722b347 100644 --- a/noncore/unsupported/mail2/listviewplus.cpp +++ b/noncore/unsupported/mail2/listviewplus.cpp @@ -1,54 +1,54 @@ #include <qpopupmenu.h> #include <qtimer.h> #include "listviewplus.h" ListViewPlus::ListViewPlus(QWidget *parent, const char *name, WFlags fl) : QListView(parent, name, fl) { } void ListViewPlus::keyPressEvent(QKeyEvent *event) { switch(event->key()) { case Qt::Key_Space: // FALLTHROUGH case Qt::Key_Enter: if (currentItem() != 0) emit clicked(currentItem()); break; default: break; } QListView::keyPressEvent(event); } void ListViewPlus::setPopup(QPopupMenu *popup, int delay) { _popup = popup; _delay = delay; - connect(this, SIGNAL(pressed(QListViewItem *, const QPoint &, int)), SLOT(_initPopup(QListViewItem *, const QPoint &, int))); - connect(this, SIGNAL(clicked(QListViewItem *, const QPoint &, int)), SLOT(_cancelPopup(QListViewItem *, const QPoint &, int))); + connect(this, SIGNAL(pressed(QListViewItem*,const QPoint&,int)), SLOT(_initPopup(QListViewItem*,const QPoint&,int))); + connect(this, SIGNAL(clicked(QListViewItem*,const QPoint&,int)), SLOT(_cancelPopup(QListViewItem*,const QPoint&,int))); } void ListViewPlus::_initPopup(QListViewItem *, const QPoint &point, int) { _point = point; _timer = new QTimer(); _timer->start(_delay, true); connect(_timer, SIGNAL(timeout()), this, SLOT(_showPopup())); } void ListViewPlus::_cancelPopup(QListViewItem *, const QPoint &, int) { delete _timer; } void ListViewPlus::_showPopup() { _popup->popup(_point); } diff --git a/noncore/unsupported/mail2/mailtable.cpp b/noncore/unsupported/mail2/mailtable.cpp index fd179f0..56feab0 100644 --- a/noncore/unsupported/mail2/mailtable.cpp +++ b/noncore/unsupported/mail2/mailtable.cpp @@ -1,171 +1,171 @@ #include <qmessagebox.h> #include <qpopupmenu.h> #include <qheader.h> #include <qtimer.h> #include "folderwidget.h" #include "imaphandler.h" #include "mailtable.h" MailTableItem::MailTableItem(QListView *parent, IMAPResponseFETCH fetch) : QListViewItem(parent), _fetch(fetch) { _draft = false; _new = false; _unseen = true; QValueList<IMAPResponseEnums::IMAPResponseFlags>::Iterator it; QValueList<IMAPResponseEnums::IMAPResponseFlags> flags = fetch.flags(); for (it = flags.begin(); it != flags.end(); it++) { if (*it == IMAPResponseEnums::Draft) _draft = true; else if (*it == IMAPResponseEnums::Recent) _new = true; else if (*it == IMAPResponseEnums::Seen) _unseen = false; } setText(0, fetch.envelope().from()[0].name().isEmpty() ? QObject::tr("(no from)") : fetch.envelope().from()[0].name()); setText(1, fetch.envelope().subject().isEmpty() ? QObject::tr("(no subject)") : fetch.envelope().subject()); setText(2, fetch.envelope().mailDate().isEmpty() ? QObject::tr("(no date)") : fetch.envelope().mailDate()); } void MailTableItem::paintCell(QPainter *painter, const QColorGroup &cg, int col, int width, int align) { QColor color = cg.color(QColorGroup::Text); QFont font = painter->font(); if (_draft) { color = QColor("#707070"); } else if (_new) { color = QColor("#ff0000"); font.setBold(true); } else if (_unseen) { font.setBold(true); } painter->setFont(font); QColorGroup cg_(cg); cg_.setColor(QColorGroup::Text, color); QListViewItem::paintCell(painter, cg_, col, width, align); } MailTable::MailTable(QWidget *parent, const char *name, WFlags fl) : ListViewPlus(parent, name, fl), _parent(parent) { _stopped = false; setSorting(-1); setAllColumnsShowFocus(true); addColumn(tr("From"), 100); addColumn(tr("Subject"), 100); addColumn(tr("Date"), 100); QPopupMenu *menu = new QPopupMenu(this); menu->insertItem(tr("Copy"), MENU_COPY); QPopupMenu *markMenu = new QPopupMenu(this); markMenu->insertItem(tr("Seen"), MENU_MARK_READ); markMenu->insertItem(tr("Unseen"), MENU_MARK_UNREAD); markMenu->insertSeparator(); markMenu->insertItem(tr("Marked"), MENU_MARK_MARKED); markMenu->insertItem(tr("Unmarked"), MENU_MARK_UNMARKED); menu->insertItem(tr("Mark as..."), markMenu, MENU_MARK); menu->insertSeparator(); menu->insertItem(tr("Delete Mail"), MENU_DELETE); setPopup(menu); - connect(this, SIGNAL(clicked(QListViewItem *)), SLOT(itemClicked(QListViewItem *))); + connect(this, SIGNAL(clicked(QListViewItem*)), SLOT(itemClicked(QListViewItem*))); } void MailTable::setFolder(Folder folder) { folder.topFolder().handler()->iSelect(folder.fullName()); _handler = folder.topFolder().handler(); - connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPSelect(IMAPResponse &))); + connect(folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPSelect(IMAPResponse&))); } void MailTable::setHeaders(QValueList<IMAPResponseFETCH> response) { clear(); QValueList<IMAPResponseFETCH>::Iterator it; for (it = response.begin(); it != response.end(); it++) { (void) new MailTableItem(this, *it); } } void MailTable::slotIMAPSelect(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPSelect(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPSelect(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { clear(); QString mails = response.EXISTS()[0].mails(); if (mails.toInt() == 0) { emit status(tr("Mailbox contained no mails.")); return; } int a = mails.toInt() / 5; int b = mails.toInt() % 5; _downloadSteps = a; if (b > 0) _downloadSteps++; _lastStep = b; _currentProgress = 0; emit totalSteps(_downloadSteps); emit progress(_currentProgress); emit stopEnabled(true); response.imapHandler()->iFetch(QString("1:%1").arg((a == 0) ? b : 5), "ENVELOPE FLAGS UID"); emit status(tr("Getting mail headers...")); - connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPFetch(IMAPResponse &))); + connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPFetch(IMAPResponse&))); } else { QMessageBox::warning(this, tr("Error"), tr("<p>An error occoured during the selection of the mailbox. (Server said: %1)</p>").arg(response.statusResponse().comment()), tr("Ok")); } } void MailTable::slotIMAPFetch(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPFetch(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPFetch(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { QValueList<IMAPResponseFETCH>::Iterator it; QValueList<IMAPResponseFETCH> fetch = response.FETCH(); for (it = fetch.begin(); it != fetch.end(); it++) { (void) new MailTableItem(this, *it); } emit progress(++_currentProgress); if (_currentProgress != _downloadSteps) { if (_stopped) { _currentProgress = 0; _downloadSteps = 0; _lastStep = 0; _stopped = false; emit status(tr("Stopped")); emit resetProgress(); emit stopEnabled(false); } else { response.imapHandler()->iFetch(QString("%1:%2").arg(_currentProgress * 5 + 1).arg((_currentProgress + 1 == _downloadSteps) ? _currentProgress * 5 + _lastStep : _currentProgress * 5 + 5), "ENVELOPE FLAGS UID"); - connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPFetch(IMAPResponse &))); + connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPFetch(IMAPResponse&))); } } else { _currentProgress = 0; _downloadSteps = 0; _lastStep = 0; emit status(tr("Got all mail headers.")); emit resetProgress(); emit stopEnabled(false); } } else { emit status(tr("<font color=#ff0000>Couldn't fetch mail.")); } } void MailTable::itemClicked(QListViewItem *item) { if (item == NULL) return; emit mailClicked(((MailTableItem *)item)->fetch(), _handler); } diff --git a/noncore/unsupported/mail2/mainwindow.cpp b/noncore/unsupported/mail2/mainwindow.cpp index 0d09ec8..ce80391 100644 --- a/noncore/unsupported/mail2/mainwindow.cpp +++ b/noncore/unsupported/mail2/mainwindow.cpp @@ -1,118 +1,118 @@ #include <qmessagebox.h> #include <qaction.h> #include <qapplication.h> #include <qpe/qcopenvelope_qws.h> #include "mailstatusbar.h" #include "folderwidget.h" #include "mainwindow.h" #include "configdiag.h" #include "configfile.h" #include "searchdiag.h" #include "mailtable.h" #include "composer.h" #include "viewmail.h" #include "mailfactory.h" MainWindow::MainWindow(QWidget *parent, const char *name, WFlags fl) : MainWindowBase(parent, name, fl) { status->setStopEnabled(false); - connect(folderView, SIGNAL(status(const QString &)), status, SLOT(setStatusText(const QString &))); + connect(folderView, SIGNAL(status(const QString&)), status, SLOT(setStatusText(const QString&))); connect(folderView, SIGNAL(folderSelected(Folder)), mailView, SLOT(setFolder(Folder))); - connect(mailView, SIGNAL(mailClicked(IMAPResponseFETCH, IMAPHandler *)), SLOT(mailClicked(IMAPResponseFETCH, IMAPHandler *))); - connect(mailView, SIGNAL(status(const QString &)), status, SLOT(setStatusText(const QString &))); + connect(mailView, SIGNAL(mailClicked(IMAPResponseFETCH,IMAPHandler*)), SLOT(mailClicked(IMAPResponseFETCH,IMAPHandler*))); + connect(mailView, SIGNAL(status(const QString&)), status, SLOT(setStatusText(const QString&))); connect(mailView, SIGNAL(totalSteps(int)), status, SLOT(setProgressTotalSteps(int))); connect(mailView, SIGNAL(progress(int)), status, SLOT(setProgress(int))); connect(mailView, SIGNAL(resetProgress()), status, SLOT(resetProgress())); connect(mailView, SIGNAL(stopEnabled(bool)), status, SLOT(setStopEnabled(bool))); connect(status, SIGNAL(stop()), mailView, SLOT(stop())); connect(compose, SIGNAL(activated()), SLOT(slotComposeNoParams())); connect(sendQueue, SIGNAL(activated()), SLOT(slotSendQueued())); connect(findmails, SIGNAL(activated()), SLOT(slotSearch())); connect(configure, SIGNAL(activated()), SLOT(slotConfigure())); // Added by Stefan Eilers to allow starting by addressbook.. #if !defined(QT_NO_COP) // QCopChannel *addressChannel = new QCopChannel("QPE/Application/mail" , this ); -// connect (addressChannel, SIGNAL( received(const QCString &, const QByteArray &)), -// this, SLOT ( appMessage(const QCString &, const QByteArray &) ) ); - connect( qApp, SIGNAL( appMessage( const QCString&, const QByteArray& ) ), - this, SLOT( appMessage( const QCString&, const QByteArray& ) ) ); +// connect (addressChannel, SIGNAL( received(const QCString&,const QByteArray&)), +// this, SLOT ( appMessage(const QCString&,const QByteArray&) ) ); + connect( qApp, SIGNAL( appMessage(const QCString&,const QByteArray&) ), + this, SLOT( appMessage(const QCString&,const QByteArray&) ) ); #endif } // Added by Stefan Eilers to allow starting by addressbook.. void MainWindow::appMessage(const QCString &msg, const QByteArray &data) { if (msg == "writeMail(QString,QString)") { QDataStream stream(data,IO_ReadOnly); QString name, email; stream >> name >> email; qWarning("opie-mail:: Should send mail to %s with address %s", name.latin1(), email.latin1() ); slotCompose( name, email ); }else{ QString str_message = msg; qWarning("opie-mail:: Received unknown QCop-Message: %s", str_message.latin1() ); } } void MainWindow::slotCompose( const QString& name, const QString& email ) { Composer composer(this, 0, true); // If there is a mailaddress given, create message.. if ( ! name.isEmpty() ){ qWarning("opie-mail:: Compose mail for %s with address %s", name.latin1(), email.latin1() ); SendMail compMail; compMail.setTo( "\"" + name + "\"" + " " + "<"+ email + ">"); composer.setSendMail( compMail ); } composer.showMaximized(); composer.exec(); } void MainWindow::slotComposeNoParams() { slotCompose( 0l, 0l); } void MainWindow::slotSendQueued() { Composer composer(this, 0, true, true); // composer.sendQueue(); composer.showMaximized(); composer.exec(); // composer.close(); } void MainWindow::slotSearch() { SearchDiag searchDiag(this, 0, true); searchDiag.showMaximized(); searchDiag.exec(); } void MainWindow::slotConfigure() { ConfigDiag configDiag(this, 0, true); configDiag.showMaximized(); configDiag.exec(); connect(&configDiag, SIGNAL(changed()), folderView, SLOT(update())); } void MainWindow::mailClicked(IMAPResponseFETCH mail, IMAPHandler *handler) { ViewMail viewMail(mail, handler, this, 0, true); viewMail.showMaximized(); viewMail.exec(); } diff --git a/noncore/unsupported/mail2/searchdiag.cpp b/noncore/unsupported/mail2/searchdiag.cpp index 907f6ff..6fb4e4d 100644 --- a/noncore/unsupported/mail2/searchdiag.cpp +++ b/noncore/unsupported/mail2/searchdiag.cpp @@ -1,128 +1,128 @@ #include <qmessagebox.h> #include <qpushbutton.h> #include <qcombobox.h> #include <qlineedit.h> #include <qpe/qpeapplication.h> #include "imaphandler.h" #include "searchdiag.h" #include "viewmail.h" #define INMENU_BODY 0 #define INMENU_HEADERF 1 #define INMENU_SUBJECT 2 #define INMENU_FROM 3 #define INMENU_TO 4 SearchDiag::SearchDiag(QWidget *parent, const char *name, WFlags fl) : SearchDiagBase(parent, name, fl) { _selected = false; in->insertItem(tr("Body"), INMENU_BODY); in->insertItem(tr("Header Field"), INMENU_HEADERF); in->insertItem(tr("Subject"), INMENU_SUBJECT); in->insertItem(tr("From"), INMENU_FROM); in->insertItem(tr("To"), INMENU_TO); connect(folderView, SIGNAL(folderSelected(Folder)), SLOT(folderSelected(Folder))); connect(in, SIGNAL(activated(int)), SLOT(slotInItemActivated(int))); - connect(mailTable, SIGNAL(mailClicked(IMAPResponseFETCH, IMAPHandler *)), SLOT(slotMailClicked(IMAPResponseFETCH, IMAPHandler *))); + connect(mailTable, SIGNAL(mailClicked(IMAPResponseFETCH,IMAPHandler*)), SLOT(slotMailClicked(IMAPResponseFETCH,IMAPHandler*))); } void SearchDiag::accept() { if (searchFor->text().isEmpty()) { QMessageBox::information(this, tr("Error"), tr("<p>Please enter what to search for.</p>"), tr("Ok")); return; } if (!_selected) { QMessageBox::information(this, tr("Error"), tr("<p>Please select a folder.</p>"), tr("Ok")); return; } if (in->currentItem() == INMENU_HEADERF && other->currentText().isEmpty()) { QMessageBox::information(this, tr("Error"), tr("<p>Please enter a header field to search in.</p>"), tr("Ok")); return; } _folder.topFolder().handler()->iSelect(_folder.fullName()); - connect(_folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPSelect(IMAPResponse &))); + connect(_folder.topFolder().handler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPSelect(IMAPResponse&))); } void SearchDiag::folderSelected(Folder folder) { _selected = true; _folder = folder; } void SearchDiag::slotIMAPSelect(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPSelect(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPSelect(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { if (in->currentItem() == INMENU_BODY) { response.imapHandler()->iSearch("BODY \"" + searchFor->text() + "\""); } else if (in->currentItem() == INMENU_HEADERF) { response.imapHandler()->iSearch("HEADER \""+ other->currentText() + "\" \"" + searchFor->text() + "\""); } else if (in->currentItem() == INMENU_SUBJECT) { response.imapHandler()->iSearch("SUBJECT \"" + searchFor->text() + "\""); } else if (in->currentItem() == INMENU_FROM) { response.imapHandler()->iSearch("FROM \"" + searchFor->text() + "\""); } else if (in->currentItem() == INMENU_TO) { response.imapHandler()->iSearch("TO \"" + searchFor->text() + "\""); } else return; - connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPSearch(IMAPResponse &))); + connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPSearch(IMAPResponse&))); } else { QMessageBox::warning(this, tr("Error"), tr("<p>Could not select the folder. Aborting. (Server said: %1)").arg(response.statusResponse().comment()), tr("Ok")); } } void SearchDiag::slotIMAPSearch(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPSearch(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPSearch(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { IMAPResponseSEARCH results = response.SEARCH()[0]; if (results.mails().count() == 0) { QMessageBox::information(this, tr("Results"), tr("<p>No mails match your criteria.</p>"), tr("Ok")); return; } response.imapHandler()->iFetch(results.mails().join(","), "ENVELOPE FLAGS UID"); - connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPFetch(IMAPResponse &))); + connect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPFetch(IMAPResponse&))); } else { QMessageBox::warning(this, tr("Error"), tr("<p>Search failed. (Server said: %1)").arg(response.statusResponse().comment()), tr("Ok")); } } void SearchDiag::slotIMAPFetch(IMAPResponse &response) { - disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPSearch(IMAPResponse &))); + disconnect(response.imapHandler(), SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPSearch(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { mailTable->setHeaders(response.FETCH()); } else { QMessageBox::warning(this, tr("Error"), tr("<p>Couldn't fetch the mail headers. (Server said: %1)").arg(response.statusResponse().comment())); } } void SearchDiag::slotMailClicked(IMAPResponseFETCH fetch, IMAPHandler *) { ViewMail viewMail(fetch, _folder.topFolder().handler(), this, 0, true); viewMail.showMaximized(); viewMail.exec(); } void SearchDiag::slotInItemActivated(int index) { if (index == INMENU_HEADERF) { other->setEnabled(true); } else { other->setEnabled(false); } } diff --git a/noncore/unsupported/mail2/viewmail.cpp b/noncore/unsupported/mail2/viewmail.cpp index da6924d..0cfb6e5 100644 --- a/noncore/unsupported/mail2/viewmail.cpp +++ b/noncore/unsupported/mail2/viewmail.cpp @@ -1,198 +1,198 @@ #include <qtextbrowser.h> #include <qmessagebox.h> #include <qaction.h> #include <qapplication.h> #include "mailfactory.h" #include "composer.h" #include "viewmail.h" AttachItem::AttachItem(QListView *parent, AttachItemStore &attachItemStore) : QListViewItem(parent), _attachItemStore(attachItemStore) { setText(0, _attachItemStore.mimeType()); setText(1, _attachItemStore.fileName()); setText(2, _attachItemStore.description()); } AttachItem::AttachItem(QListViewItem *parent, AttachItemStore &attachItemStore) : QListViewItem(parent), _attachItemStore(attachItemStore) { setText(0, _attachItemStore.mimeType()); setText(1, _attachItemStore.fileName()); setText(2, _attachItemStore.description()); } ViewMail::ViewMail(IMAPResponseFETCH &mail, IMAPHandler *handler, QWidget *parent, const char *name, WFlags fl) : ViewMailBase(parent, name, fl), _inLoop(false), _mail(mail), _handler(handler) { setCaption(caption().arg(mail.envelope().from()[0].name())); _gotBody = false; _mailHtml = tr( "<html><body>" "<div align=center><b>%1</b></div>" "<b>From:</b> %2<br>" "<b>To:</b> %3<br>" "%4" "%5" "<b>Date:</b> %6<hr>" "<font face=fixed>%7</font>") .arg(deHtml(mail.envelope().subject().isNull() ? tr("(no subject)") : deHtml(mail.envelope().subject()))) .arg(deHtml(mail.envelope().from().toString().isNull() ? tr("(no from)") : mail.envelope().from().toString())) .arg(deHtml(mail.envelope().to().toString().isNull() ? tr("(no recipient)") : mail.envelope().to().toString())) .arg(mail.envelope().cc().toString().isNull() ? QString(0) : tr("<b>Cc:</b> %1<br>").arg(deHtml(mail.envelope().cc().toString()))) .arg(mail.envelope().bcc().toString().isNull() ? QString(0) : tr("<b>Bcc:</b> %1<br>").arg(deHtml(mail.envelope().bcc().toString()))) .arg(mail.envelope().mailDate().isNull() ? tr("(no date)") : mail.envelope().mailDate()) .arg("%1"); connect(reply, SIGNAL(activated()), SLOT(slotReply())); connect(forward, SIGNAL(activated()), SLOT(slotForward())); attachments->setEnabled(_gotBody); browser->setText(QString(_mailHtml).arg(tr("Getting mail body from server. Please wait..."))); _handler->iUid("FETCH", QString("%1 (BODY[1])").arg(mail.uid())); - connect(_handler, SIGNAL(gotResponse(IMAPResponse &)), SLOT(slotIMAPUid(IMAPResponse &))); + connect(_handler, SIGNAL(gotResponse(IMAPResponse&)), SLOT(slotIMAPUid(IMAPResponse&))); } ViewMail::~ViewMail() { hide(); } void ViewMail::hide() { QWidget::hide(); if (_inLoop) { _inLoop = false; qApp->exit_loop(); } } void ViewMail::exec() { show(); if (!_inLoop) { _inLoop = true; qApp->enter_loop(); } } QString ViewMail::deHtml(const QString &string) { QString string_ = string; string_.replace(QRegExp("&"), "&"); string_.replace(QRegExp("<"), "<"); string_.replace(QRegExp(">"), ">"); string_.replace(QRegExp("\\n"), "<br>"); return string_; } void ViewMail::slotReply() { if (!_gotBody) { QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot reply yet."), tr("Ok")); return; } QString rtext; rtext += QString("* %1 wrote on %2:\n") // no i18n on purpose .arg(_mail.envelope().from()[0].toString()) .arg(_mail.envelope().mailDate()); QString text = _mail.bodyPart(1).data(); QStringList lines = QStringList::split(QRegExp("\\n"), text); QStringList::Iterator it; for (it = lines.begin(); it != lines.end(); it++) { rtext += "> " + *it + "\n"; } rtext += "\n"; QString prefix; if (_mail.envelope().subject().find(QRegExp("^Re: *$")) != -1) prefix = ""; else prefix = "Re: "; // no i18n on purpose SendMail sendMail; sendMail.setTo(_mail.envelope().from()[0].toString()); sendMail.setSubject(prefix + _mail.envelope().subject()); sendMail.setInReplyTo(_mail.envelope().messageId()); sendMail.setMessage(rtext); Composer composer(this, 0, true); composer.setSendMail(sendMail); composer.showMaximized(); composer.exec(); } void ViewMail::slotForward() { if (!_gotBody) { QMessageBox::information(this, tr("Error"), tr("<p>The mail body is not yet downloaded, so you cannot forward yet."), tr("Ok")); return; } QString ftext; ftext += QString("\n----- Forwarded message from %1 -----\n\n") .arg(_mail.envelope().from()[0].toString()); if (!_mail.envelope().mailDate().isNull()) ftext += QString("Date: %1\n") .arg(_mail.envelope().mailDate()); if (!_mail.envelope().from()[0].toString().isNull()) ftext += QString("From: %1\n") .arg(_mail.envelope().from()[0].toString()); if (!_mail.envelope().to().toString().isNull()) ftext += QString("To: %1\n") .arg(_mail.envelope().to().toString()); if (!_mail.envelope().cc().toString().isNull()) ftext += QString("Cc: %1\n") .arg(_mail.envelope().cc().toString()); if (!_mail.envelope().bcc().toString().isNull()) ftext += QString("Bcc: %1\n") .arg(_mail.envelope().bcc().toString()); if (!_mail.envelope().subject().isNull()) ftext += QString("Subject: %1\n") .arg(_mail.envelope().subject()); ftext += QString("\n%1\n") .arg(_mail.bodyPart(1).data()); ftext += QString("----- End forwarded message -----\n"); SendMail sendMail; sendMail.setSubject("Fwd: " + _mail.envelope().subject()); sendMail.setMessage(ftext); Composer composer(this, 0, true); composer.setSendMail(sendMail); composer.showMaximized(); composer.exec(); } void ViewMail::slotIMAPUid(IMAPResponse &response) { - disconnect(_handler, SIGNAL(gotResponse(IMAPResponse &)), this, SLOT(slotIMAPUid(IMAPResponse &))); + disconnect(_handler, SIGNAL(gotResponse(IMAPResponse&)), this, SLOT(slotIMAPUid(IMAPResponse&))); if (response.statusResponse().status() == IMAPResponseEnums::OK) { QValueList<IMAPResponseBodyPart> bodyParts; bodyParts.append(response.FETCH()[0].bodyPart(0)); _mail.setBodyParts(bodyParts); browser->setText(QString(_mailHtml).arg(deHtml(response.FETCH()[0].bodyPart(0).data()))); // fillList(response.FETCH()[0].bodyStructure()); _gotBody = true; } else { QMessageBox::warning(this, tr("Error"), tr("<p>I was unable to retrieve the mail from the server. You can try again later or give up.</p>"), tr("Ok")); } } diff --git a/noncore/unsupported/mailit/addatt.cpp b/noncore/unsupported/mailit/addatt.cpp index 19ac58f..420f84c 100644 --- a/noncore/unsupported/mailit/addatt.cpp +++ b/noncore/unsupported/mailit/addatt.cpp @@ -1,224 +1,224 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights 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 <qlayout.h> #include <qhbox.h> #include <qdir.h> #include <qstringlist.h> #include <qpe/resource.h> #include "addatt.h" FileItem::FileItem(QListView *parent, DocLnk* dl) : QListViewItem(parent) { /*file = fileInfo; type = fileType;*/ doclnk=dl; setText(0, doclnk->name()); /* if (fileType == "Picture") { setPixmap(0, Resource::loadPixmap("pixmap")); } else if (fileType == "Document") { setPixmap(0, Resource::loadPixmap("txt")); } else if (fileType == "Sound") { setPixmap(0, Resource::loadPixmap("play")); } else if (fileType == "Movie") { setPixmap(0, Resource::loadPixmap("MPEGPlayer")); } else if (fileType == "File") { setPixmap(0, Resource::loadPixmap("exec")); }*/ } FileItem::~FileItem() { if (doclnk!=NULL) delete doclnk; doclnk=NULL; } AddAtt::AddAtt(QWidget *parent, const char *name, WFlags f) : QDialog(parent, name, f) { setCaption(tr("Adding attachments") ); QGridLayout *top = new QGridLayout(this, 1,1 ); QHBox *buttons=new QHBox(this); /*fileCategoryButton = new QPushButton(this);*/ attachButton = new QPushButton(tr("attach..."), buttons); removeButton = new QPushButton(tr("Remove"), buttons); /*fileCategories = new QPopupMenu(fileCategoryButton); fileCategoryButton->setPopup(fileCategories); fileCategories->insertItem("Document"); fileCategories->insertItem("Picture"); fileCategories->insertItem("Sound"); fileCategories->insertItem("Movie"); fileCategories->insertItem("File"); fileCategoryButton->setText("Document"); top->addWidget(fileCategoryButton, 0, 0);*/ top->addWidget(buttons,1,0); //buttons->addWidget(attachButton,0,0); //buttons->addWidget(removeButton,0,1); //connect(fileCategories, SIGNAL(activated(int)), this, // SLOT(fileCategorySelected(int)) );*/ connect(attachButton, SIGNAL(clicked()), this, SLOT(addattachment()) ); connect(removeButton, SIGNAL(clicked()), this, SLOT(removeattachment()) ); /*listView = new QListView(this, "AttView"); listView->addColumn("Documents");* - connect(listView, SIGNAL(doubleClicked(QListViewItem *)), this, + connect(listView, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(addattachment()) );*/ attView = new QListView(this, "Selected"); attView->addColumn(tr("Attached")); attView->addColumn(tr("File type")); - connect(attView, SIGNAL(doubleClicked(QListViewItem *)), this, + connect(attView, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(removeattachment()) ); //top->addWidget(ofs, 0,0); top->addWidget(attView, 0,0); clear(); } void AddAtt::clear() { attView->clear(); //getFiles(); modified = FALSE; } /*void AddAtt::fileCategorySelected(int id) { fileCategoryButton->setText(fileCategories->text(id)); getFiles(); }*/ void AddAtt::addattachment() { // ### FIXME wrong use -zecke OFileDialog ofs("Attachments",this,0,0,"/root/Documents"); ofs.showMaximized(); if (ofs.exec()==QDialog::Accepted) { DocLnk* dl=new DocLnk(ofs.selectedDocument()); FileItem* fi=new FileItem(attView,dl); fi->setPixmap(0,dl->pixmap()); fi->setText(1,dl->type()); attView->insertItem(fi); modified = TRUE; } } void AddAtt::removeattachment() { if (attView->selectedItem() != NULL) { attView->takeItem(attView->selectedItem()); } modified = TRUE; } void AddAtt::reject() { if (modified) { attView->clear(); modified = FALSE; } } void AddAtt::accept() { modified = FALSE; hide(); } void AddAtt::getFiles() { QString path, selected; /*listView->clear(); selected = fileCategoryButton->text(); if (selected == "Picture") { path = "../pics/"; } else if (selected == "Document") { path = "" ; //sub-dirs not decided } else if (selected == "Sound") { path = "../sounds/"; //sub-dirs not decided } else if (selected == "Movie") { path = ""; //sub-dirs not decided } else if (selected == "File") { path = ""; //sub-dirs not decided } dir = new QDir(path); dir->setFilter(QDir::Files); const QFileInfoList *dirInfoList = dir->entryInfoList(); QFileInfoListIterator it(*dirInfoList); // create list iterator while ( (fi=it.current()) ) { // for each file... item = new FileItem(lis+ütView, *fi, selected); ++it; // goto next list element }*/ } QStringList AddAtt::returnattachedFiles() { QFileInfo info; QStringList list; item = (FileItem *) attView->firstChild(); while (item != NULL) { DocLnk* dl=item->getDocLnk(); list+=dl->file(); /*info = item->getFileInfo(); list += info.filePath();*/ item = (FileItem *) item->nextSibling(); } return list; } QStringList AddAtt::returnFileTypes() { QStringList list; item = (FileItem *) attView->firstChild(); while (item != NULL) { list += item->getDocLnk()->type(); item = (FileItem *) item->nextSibling(); } return list; } diff --git a/noncore/unsupported/mailit/emailclient.cpp b/noncore/unsupported/mailit/emailclient.cpp index 8359acf..86c7987 100644 --- a/noncore/unsupported/mailit/emailclient.cpp +++ b/noncore/unsupported/mailit/emailclient.cpp @@ -1,607 +1,607 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights 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 <qapplication.h> #include <qmessagebox.h> #include <qvbox.h> #include <qfile.h> #include <qcheckbox.h> #include <qmenubar.h> #include <qaction.h> #include <qwhatsthis.h> #include <qpe/resource.h> #include "emailclient.h" #include "writemail.h" QCollection::Item AccountList::newItem(QCollection::Item d) { return dupl( (MailAccount *) d); } MailAccount* AccountList::dupl(MailAccount *in) { ac = new MailAccount(*in); return ac; } EmailClient::EmailClient( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { emailHandler = new EmailHandler(); addressList = new AddressList(); sending = FALSE; receiving = FALSE; previewingMail = FALSE; mailIdCount = 1; accountIdCount = 1; allAccounts = FALSE; init(); connect(emailHandler, SIGNAL(mailSent()), this, SLOT(mailSent()) ); - connect(emailHandler, SIGNAL(smtpError(int,const QString &)), this, - SLOT(smtpError(int,const QString &)) ); - connect(emailHandler, SIGNAL(popError(int,const QString &)), this, - SLOT(popError(int,const QString &)) ); + connect(emailHandler, SIGNAL(smtpError(int,const QString&)), this, + SLOT(smtpError(int,const QString&)) ); + connect(emailHandler, SIGNAL(popError(int,const QString&)), this, + SLOT(popError(int,const QString&)) ); - connect(inboxView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(inboxItemSelected()) ); - connect(outboxView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(outboxItemSelected()) ); + connect(inboxView, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(inboxItemSelected()) ); + connect(outboxView, SIGNAL(doubleClicked(QListViewItem*)), this, SLOT(outboxItemSelected()) ); - connect(inboxView, SIGNAL(pressed(QListViewItem *)), this, SLOT(inboxItemPressed()) ); - connect(inboxView, SIGNAL(clicked(QListViewItem *)), this, SLOT(inboxItemReleased()) ); + connect(inboxView, SIGNAL(pressed(QListViewItem*)), this, SLOT(inboxItemPressed()) ); + connect(inboxView, SIGNAL(clicked(QListViewItem*)), this, SLOT(inboxItemReleased()) ); - connect(emailHandler, SIGNAL(mailArrived(const Email &, bool)), this, - SLOT(mailArrived(const Email &, bool)) ); + connect(emailHandler, SIGNAL(mailArrived(const Email&,bool)), this, + SLOT(mailArrived(const Email&,bool)) ); connect(emailHandler, SIGNAL(mailTransfered(int)), this, SLOT(allMailArrived(int)) ); mailconf = new Config("mailit"); //In case Synchronize is not defined in settings.txt readSettings(); updateAccounts(); lineShift = "\n"; readMail(); lineShift = "\r\n"; mailboxView->setCurrentTab(0); //ensure that inbox has focus /*channel = new QCopChannel( "QPE/Application/mailit", this ); - connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), - this, SLOT(receive(const QCString&, const QByteArray&)) );*/ + connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT(receive(const QCString&,const QByteArray&)) );*/ } EmailClient::~EmailClient() { //needs to be moved from destructor to closewindow event saveMail(getPath(FALSE) + "inbox.txt", inboxView); //does not currently work. Defining outbox in the same //format as inbox is not a good solution as they have //different properties saveMail(getPath(FALSE) + "outbox.txt", outboxView); saveSettings(); mailconf->write(); delete mailconf; } void EmailClient::init() { initStatusBar(this); setToolBarsMovable(FALSE); bar = new QToolBar(this); QWhatsThis::add(bar,tr("Main operation toolbar")); bar->setHorizontalStretchable( TRUE ); mb = new QMenuBar( bar ); QPopupMenu *mail = new QPopupMenu(mb); mb->insertItem( tr( "&Mail" ), mail); QPopupMenu *configure = new QPopupMenu(mb); mb->insertItem( tr( "Accounts" ), configure); selectAccountMenu = new QPopupMenu(mb); editAccountMenu = new QPopupMenu(mb); deleteAccountMenu = new QPopupMenu(mb); mail->insertItem(tr("Get Mail in"), selectAccountMenu); configure->insertItem(tr("Edit account"), editAccountMenu); configure->insertItem(tr("Delete account"), deleteAccountMenu); bar = new QToolBar(this); getMailButton = new QToolButton(Resource::loadPixmap("mailit/getmail"),tr("getMail"),tr("select account"), this,SLOT(getAllNewMail()),bar); QWhatsThis::add(getMailButton,tr("Click to download mail via all available accounts.\n Press and hold to select the desired account.")); getMailButton->setPopup(selectAccountMenu); sendMailButton = new QAction(tr("Send mail"), Resource::loadPixmap("mailit/sendqueue"), QString::null, 0, this, 0); connect(sendMailButton, SIGNAL(activated()), this, SLOT(sendQuedMail()) ); sendMailButton->addTo(bar); sendMailButton->addTo(mail); sendMailButton->setWhatsThis("Send mail queued in the outbox"); composeButton = new QAction(tr("Compose"), Resource::loadPixmap("new"), QString::null, 0, this, 0); connect(composeButton, SIGNAL(activated()), this, SLOT(compose()) ); composeButton->addTo(bar); composeButton->addTo(mail); composeButton->setWhatsThis("Compose a new mail"); cancelButton = new QAction(tr("Cancel transfer"), Resource::loadPixmap("close"), QString::null, 0, this, 0); connect(cancelButton, SIGNAL(activated()), this, SLOT(cancel()) ); cancelButton->addTo(mail); cancelButton->addTo(bar); cancelButton->setEnabled(FALSE); cancelButton->setWhatsThis("Stop the currently active mail transfer"); deleteButton = new QAction( tr( "Delete" ), Resource::loadPixmap( "trash" ), QString::null, 0, this, 0 ); connect( deleteButton, SIGNAL( activated() ), this, SLOT( deleteItem() ) ); deleteButton->addTo(bar); deleteButton->setWhatsThis("Remove the currently selected eMail(s)"); mailboxView = new OTabWidget( this, "mailboxView" ); QWidget* widget = new QWidget( mailboxView, "widget" ); grid_2 = new QGridLayout( widget ); // grid_2->setSpacing(6); // grid_2->setMargin( 11 ); inboxView = new QListView( widget, "inboxView" ); inboxView->addColumn( tr( "From" ) ); inboxView->addColumn( tr( "Subject" ) ); inboxView->addColumn( tr( "Date" ) ); inboxView->setMinimumSize( QSize( 0, 0 ) ); inboxView->setAllColumnsShowFocus(TRUE); QWhatsThis::add(inboxView,QWidget::tr("This is the inbox view.\n" "It keeps the fetched mail which can be \n" "viewed by double clicking the entry.\n" "blue attachment icon shows whether this \n" "mailhas attachments.\n")); grid_2->addWidget( inboxView, 2, 0 ); mailboxView->addTab( widget, "mailit/inbox", tr( "Inbox" ) ); QWidget* widget_2 = new QWidget( mailboxView, "widget_2" ); grid_3 = new QGridLayout( widget_2 ); // grid_3->setSpacing(6); // grid_3->setMargin( 11 ); outboxView = new QListView( widget_2, "outboxView" ); outboxView->addColumn( tr( "To" ) ); outboxView->addColumn( tr( "Subject" ) ); outboxView->setAllColumnsShowFocus(TRUE); QWhatsThis::add(outboxView,QWidget::tr("This is the outbox view.\n" "It keeps the queued mails to send which can be \n" "reviewed by double clicking the entry.")); grid_3->addWidget( outboxView, 0, 0 ); mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) ); setCentralWidget(mailboxView); } void EmailClient::initStatusBar(QWidget* parent) { statusBar = new QStatusBar(parent); statusBar->setSizeGripEnabled(FALSE); status1Label = new QLabel( tr("Idle"), statusBar); status2Label = new QLabel("", statusBar); - connect(emailHandler, SIGNAL(updatePopStatus(const QString &)), - status2Label, SLOT(setText(const QString &)) ); - connect(emailHandler, SIGNAL(updateSmtpStatus(const QString &)), - status2Label, SLOT(setText(const QString &)) ); + connect(emailHandler, SIGNAL(updatePopStatus(const QString&)), + status2Label, SLOT(setText(const QString&)) ); + connect(emailHandler, SIGNAL(updateSmtpStatus(const QString&)), + status2Label, SLOT(setText(const QString&)) ); progressBar = new QProgressBar(statusBar); connect(emailHandler, SIGNAL(mailboxSize(int)), this, SLOT(setTotalSize(int)) ); connect(emailHandler, SIGNAL(currentMailSize(int)), this, SLOT(setMailSize(int)) ); connect(emailHandler, SIGNAL(downloadedSize(int)), this, SLOT(setDownloadedSize(int)) ); statusBar->addWidget(status1Label); statusBar->addWidget(progressBar); statusBar->addWidget(status2Label); } void EmailClient::compose() { emit composeRequested(); } void EmailClient::cancel() { emailHandler->cancel(); } AddressList* EmailClient::getAdrListRef() { return addressList; } //this needs to be rewritten to syncronize with outboxView void EmailClient::enqueMail(const Email &mail) { if (accountList.count() == 0) { QMessageBox::warning(qApp->activeWindow(), tr("No account selected"), tr("You must create an account"), "OK\n"); return; } if (accountList.count() > 0) { currentAccount = accountList.first(); qWarning("using account " + currentAccount->name); } Email addMail = mail; addMail.from = currentAccount->name; addMail.fromMail = currentAccount->emailAddress; addMail.rawMail.prepend("From: \"" + addMail.from + "\" <" + addMail.fromMail + ">\n"); item = new EmailListItem(outboxView, addMail, false); mailboxView->setCurrentTab(1); } void EmailClient::sendQuedMail() { int count = 0; if (accountList.count() == 0) { QMessageBox::warning(qApp->activeWindow(), tr("No account selected"), tr("You must create an account"), "OK\n"); return; } //traverse listview, find messages to send if (! sending) { item = (EmailListItem *) outboxView->firstChild(); if (item != NULL) { while (item != NULL) { quedMessages.append(item->getMail()); item = (EmailListItem *) item->nextSibling(); count++; } setMailAccount(); emailHandler->sendMail(&quedMessages); sending = TRUE; sendMailButton->setEnabled(FALSE); cancelButton->setEnabled(TRUE); } else { qWarning("sendQuedMail(): no messages to send"); } } } void EmailClient::setMailAccount() { emailHandler->setAccount(*currentAccount); } void EmailClient::mailSent() { sending = FALSE; sendMailButton->setEnabled(TRUE); quedMessages.clear(); outboxView->clear(); //should be moved to an sentBox } void EmailClient::getNewMail() { if (accountList.count() == 0) { QMessageBox::warning(qApp->activeWindow(),tr("No account selected"), tr("You must create an account"), "OK\n"); return; } setMailAccount(); receiving = TRUE; previewingMail = TRUE; getMailButton->setEnabled(FALSE); cancelButton->setEnabled(TRUE); selectAccountMenu->setEnabled(FALSE); status1Label->setText(currentAccount->accountName + " headers"); progressBar->reset(); //get any previous mails not downloaded and add to queue /*mailDownloadList.clear(); Email *mailPtr; item = (EmailListItem *) inboxView->firstChild(); while (item != NULL) { mailPtr = item->getMail(); if ( (!mailPtr->downloaded) && (mailPtr->fromAccountId == currentAccount->id) ) { mailDownloadList.sizeInsert(mailPtr->serverId, mailPtr->size); } item = (EmailListItem *) item->nextSibling(); }*/ emailHandler->getMailHeaders(); } void EmailClient::getAllNewMail() { allAccounts = TRUE; currentAccount = accountList.first(); getNewMail(); } void EmailClient::mailArrived(const Email &mail, bool fromDisk) { Enclosure *ePtr; Email newMail; int thisMailId; emailHandler->parse( mail.rawMail, lineShift, &newMail); mailconf->setGroup(newMail.id); if (fromDisk) { newMail.downloaded = mailconf->readBoolEntry("downloaded"); newMail.size = mailconf->readNumEntry("size"); newMail.serverId = mailconf->readNumEntry("serverid"); newMail.fromAccountId = mailconf->readNumEntry("fromaccountid"); } else { //mail arrived from server newMail.serverId = mail.serverId; newMail.size = mail.size; newMail.downloaded = mail.downloaded; newMail.fromAccountId = emailHandler->getAccount()->id; mailconf->writeEntry("fromaccountid", newMail.fromAccountId); } //add if read or not newMail.read = mailconf->readBoolEntry("mailread"); //check if new mail if ( (thisMailId = mailconf->readNumEntry("internalmailid", -1)) == -1) { thisMailId = mailIdCount; mailIdCount++; //set server count, so that if the user aborts, the new //header is not reloaded if ((currentAccount)&&(currentAccount->synchronize)) currentAccount->lastServerMailCount++; mailconf->writeEntry("internalmailid", thisMailId); mailconf->writeEntry("downloaded", newMail.downloaded); mailconf->writeEntry("size", (int) newMail.size); mailconf->writeEntry("serverid", newMail.serverId); //addressList->addContact(newMail.fromMail, newMail.from); } mailconf->writeEntry("downloaded", newMail.downloaded); QString stringMailId; stringMailId.setNum(thisMailId); //see if any attatchments needs to be stored for ( ePtr=newMail.files.first(); ePtr != 0; ePtr=newMail.files.next() ) { QString stringId; stringId.setNum(ePtr->id); int id = mailconf->readNumEntry("enclosureid_" + stringId); if (id != ePtr->id) { //new entry mailconf->writeEntry("enclosureid_" + stringId, ePtr->id); mailconf->writeEntry("name_" + stringId, ePtr->originalName); mailconf->writeEntry("contenttype_" + stringId, ePtr->contentType); mailconf->writeEntry("contentattribute_" + stringId, ePtr->contentAttribute); mailconf->writeEntry("saved_" + stringId, ePtr->saved); mailconf->writeEntry("installed_" + stringId, FALSE); ePtr->name = stringMailId + "_" + stringId; ePtr->path = getPath(TRUE); if (emailHandler->getEnclosure(ePtr)) { //file saved ePtr->saved = TRUE; mailconf->writeEntry("saved_" + stringId, ePtr->saved); mailconf->writeEntry("filename_" + stringId, ePtr->name); mailconf->writeEntry("path_" + stringId, ePtr->path); } else { ePtr->saved = FALSE; mailconf->writeEntry("saved_" + stringId, ePtr->saved); } } else { ePtr->saved = mailconf->readBoolEntry("saved_" + stringId); ePtr->installed = mailconf->readBoolEntry("installed_" + stringId); if (ePtr->saved) { ePtr->name = mailconf->readEntry("filename_" + stringId); ePtr->path = mailconf->readEntry("path_" + stringId); } } } bool found=false; if (!fromDisk) { Email *mailPtr; item = (EmailListItem *) inboxView->firstChild(); while ((item != NULL)&&(!found)) { mailPtr = item->getMail(); if (mailPtr->id == newMail.id) { item->setMail(newMail); emit mailUpdated(item->getMail()); found = true; } item = (EmailListItem *) item->nextSibling(); } } if ((!found)||(fromDisk)) { item = new EmailListItem(inboxView, newMail, TRUE); } // if (item->getMail()->files.count()>0) // { // item->setPixmap(0, Resource::loadPixmap("mailit/attach")); // } /*if (!newMail.downloaded) mailDownloadList.sizeInsert(newMail.serverId, newMail.size);*/ mailboxView->setCurrentTab(0); } void EmailClient::allMailArrived(int /*count*/) { // not previewing means all mailtransfer has been done /*if (!previewingMail) {*/ if ( (allAccounts) && ( (currentAccount = accountList.next()) !=0 ) ) { emit newCaption("Mailit - " + currentAccount->accountName); getNewMail(); return; } else { allAccounts = FALSE; receiving = FALSE; getMailButton->setEnabled(TRUE); cancelButton->setEnabled(FALSE); selectAccountMenu->setEnabled(TRUE); status1Label->setText("Idle"); progressBar->reset(); return; } //} // all headers downloaded from server, start downloading remaining mails previewingMail = FALSE; status1Label->setText(currentAccount->accountName); progressBar->reset(); mailboxView->setCurrentTab(0); } void EmailClient::moveMailFront(Email *mailPtr) { if ( (receiving) && (mailPtr->fromAccountId == currentAccount->id) ) { mailDownloadList.moveFront(mailPtr->serverId, mailPtr->size); } } void EmailClient::smtpError(int code, const QString & Msg) { QString temp; if (code == ErrUnknownResponse) { temp = tr("<qt>Unknown response from server</qt>"); if( ! Msg.isEmpty() ) temp += Msg; } else if (code == QSocket::ErrHostNotFound) { temp = tr("<qt>host not found</qt>"); } else if (code == QSocket::ErrConnectionRefused) { temp = tr("<qt>connection refused</qt>"); } else if (code == QSocket::ErrSocketRead) { temp = tr("<qt>socket packet error</qt>"); } if (code != ErrCancel) { QMessageBox::warning(qApp->activeWindow(), "Sending error", temp, "OK\n"); } else { status2Label->setText("Aborted by user"); } sending = FALSE; sendMailButton->setEnabled(TRUE); cancelButton->setEnabled(FALSE); quedMessages.clear(); } void EmailClient::popError(int code, const QString & Msg) { QString temp; if (code == ErrUnknownResponse) { temp = tr("<qt>Unknown response from server</qt>"); if( ! Msg.isEmpty() ) temp += Msg; } else if (code == ErrLoginFailed) { temp = tr("<qt>Login failed\nCheck user name and password</qt>"); } else if (code == QSocket::ErrHostNotFound) { temp = tr("<qt>host not found</qt>"); } else if (code == QSocket::ErrConnectionRefused) { temp = tr("<qt>connection refused</qt>"); } else if (code == QSocket::ErrSocketRead) { temp = tr("<qt>socket packet error</qt>"); } if (code != ErrCancel) { QMessageBox::warning(qApp->activeWindow(), tr("Receiving error"), temp, tr("OK\n")); } else { status2Label->setText("Aborted by user"); } receiving = FALSE; getMailButton->setEnabled(TRUE); cancelButton->setEnabled(FALSE); selectAccountMenu->setEnabled(TRUE); } void EmailClient::inboxItemSelected() { //killTimer(timerID); item = (EmailListItem*) inboxView->selectedItem(); if (item != NULL) { emit viewEmail(inboxView, item->getMail()); } } void EmailClient::outboxItemSelected() { //killTimer(timerID); item = (EmailListItem*) outboxView->selectedItem(); if (item != NULL) { emit viewEmail(outboxView, item->getMail()); } } void EmailClient::readMail() { Email mail; int start, stop; QString s, del; QFile f(getPath(FALSE) + "inbox.txt"); diff --git a/noncore/unsupported/mailit/emailhandler.cpp b/noncore/unsupported/mailit/emailhandler.cpp index 06e978d..02b3e9a 100644 --- a/noncore/unsupported/mailit/emailhandler.cpp +++ b/noncore/unsupported/mailit/emailhandler.cpp @@ -1,442 +1,442 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights 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 <qfileinfo.h> #include <stdlib.h> #include <qapplication.h> #include <qmessagebox.h> #include <qcstring.h> #include "emailhandler.h" #include <qpe/applnk.h> #include <qpe/filemanager.h> QCollection::Item EnclosureList::newItem(QCollection::Item d) { return dupl( (Enclosure *) d); } Enclosure* EnclosureList::dupl(Enclosure *in) { ac = new Enclosure(*in); return ac; } EmailHandler::EmailHandler() { qDebug("EMailHandler::EmailHandler"); smtpClient = new SmtpClient(); popClient = new PopClient(); - connect(smtpClient, SIGNAL(errorOccurred(int, const QString &)), this, - SIGNAL(smtpError(int, const QString &)) ); + connect(smtpClient, SIGNAL(errorOccurred(int,const QString&)), this, + SIGNAL(smtpError(int,const QString&)) ); connect(smtpClient, SIGNAL(mailSent()), this, SIGNAL(mailSent()) ); - connect(smtpClient, SIGNAL(updateStatus(const QString &)), this, - SIGNAL(updateSmtpStatus(const QString &)) ); - - connect(popClient, SIGNAL(errorOccurred(int, const QString &)), this, - SIGNAL(popError(int, const QString &)) ); - connect(popClient, SIGNAL(newMessage(const QString &, int, uint, bool)), - this, SLOT(messageArrived(const QString &, int, uint, bool)) ); - connect(popClient, SIGNAL(updateStatus(const QString &)), this, - SIGNAL(updatePopStatus(const QString &)) ); + connect(smtpClient, SIGNAL(updateStatus(const QString&)), this, + SIGNAL(updateSmtpStatus(const QString&)) ); + + connect(popClient, SIGNAL(errorOccurred(int,const QString&)), this, + SIGNAL(popError(int,const QString&)) ); + connect(popClient, SIGNAL(newMessage(const QString&,int,uint,bool)), + this, SLOT(messageArrived(const QString&,int,uint,bool)) ); + connect(popClient, SIGNAL(updateStatus(const QString&)), this, + SIGNAL(updatePopStatus(const QString&)) ); connect(popClient, SIGNAL(mailTransfered(int)), this, SIGNAL(mailTransfered(int)) ); //relaying size information connect(popClient, SIGNAL(currentMailSize(int)), this, SIGNAL(currentMailSize(int)) ); connect(popClient, SIGNAL(downloadedSize(int)), this, SIGNAL(downloadedSize(int)) ); } void EmailHandler::sendMail(QList<Email> *mailList) { Email *currentMail; QString temp; QString userName = QString::null; // not supported by ALL SMTP servers in the MAIL From field // userName = "\""+mailAccount.name+"\""; userName += "<" + mailAccount.emailAddress + ">"; for (currentMail = mailList->first(); currentMail != 0; currentMail = mailList->next()) { if (encodeMime(currentMail) == 0) { smtpClient->addMail(userName, currentMail->subject, currentMail->recipients, currentMail->rawMail); } else { //error temp = tr("Could not locate all files in \nmail with subject: ") + currentMail->subject; temp += tr("\nMail has NOT been sent"); QMessageBox::warning(qApp->activeWindow(), tr("Attachment error"), temp, tr("OK\n")); } } smtpClient->newConnection(mailAccount.smtpServer, 25); } void EmailHandler::setAccount(MailAccount account) { mailAccount = account; } void EmailHandler::getMail() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); if (mailAccount.synchronize) { popClient->setSynchronize(mailAccount.lastServerMailCount); } else { popClient->removeSynchronize(); } headers = FALSE; //popClient->headersOnly(headers, 0); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailHeaders() { popClient->setAccount(mailAccount.popUserName, mailAccount.popPasswd); mailAccount.synchronize ? popClient->setSynchronize(mailAccount.lastServerMailCount): popClient->removeSynchronize(); headers = TRUE; popClient->headersOnly(headers, mailAccount.syncLimit); //less than requested syncLimit, download all qDebug("Initiating connection"); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::getMailByList(MailList *mailList) { if (mailList->count() == 0) { //should not occur though emit mailTransfered(0); return; } headers = FALSE; popClient->headersOnly(FALSE, 0); popClient->setAccount(mailAccount.popUserName,mailAccount.popPasswd); popClient->setSelectedMails(mailList); popClient->newConnection(mailAccount.popServer, 110); } void EmailHandler::messageArrived(const QString &message, int id, uint size, bool complete) { Email mail; mail.rawMail = message; mail.serverId = id; mail.size = size; mail.downloaded = complete; emit mailArrived(mail, FALSE); } bool EmailHandler::parse(const QString &in, const QString &lineShift, Email *mail) { QString temp, boundary; int pos; QString delimiter, header, body, mimeHeader, mimeBody; QString content, contentType, contentAttribute, id, encoding; QString fileName, storedName; int enclosureId = 0; mail->rawMail = in; mail->received = TRUE; mail->files.setAutoDelete(TRUE); temp = lineShift + "." + lineShift; if (in.right(temp.length()) != temp) { mail->rawMail += temp; } delimiter = lineShift + lineShift; // "\n\n" or "\r\n\r\n" pos = in.find(delimiter, 0, FALSE); header = in.left(pos); body = in.right(in.length() - pos - delimiter.length()); if ((body.at(body.length()-2) == '.') && (body.at(body.length()-3) == '\n')) body.truncate(body.length()-2); // TextParser p(header, lineShift); TextParser * lp = new TextParser(header, lineShift); #define p (*lp) if ((pos = p.find("FROM",':', 0, TRUE)) != -1) { pos++; if (p.separatorAt(pos) == ' ') { mail->from = p.getString(&pos, '<', false); mail->from = mail->from.stripWhiteSpace(); if ( (mail->from.length() > 2) && (mail->from[0] == '"') ) { mail->from = mail->from.left(mail->from.length() - 1); mail->from = mail->from.right(mail->from.length() - 1); } pos++; mail->fromMail = p.getString(&pos, '>', false); } else { if (p.separatorAt(pos) == '<') //No name.. nasty pos++; //pos++; mail->fromMail = p.getString(&pos, 'z', TRUE); if (mail->fromMail.at(mail->fromMail.length()-1) == '>') mail->fromMail.truncate(mail->fromMail.length() - 1); mail->from=mail->fromMail; } } pos=0; //Search for To: after the FROM: attribute to prevent hitting the Delivered-To: while((pos = p.find("TO",':', pos+1, TRUE))!=-1) { QString rec; if (p.separatorAt(pos-1)!='-') //The - separator means that this is a Delivered-To: or Reply-To: { pos++; mail->recipients.append(p.getString(&pos, '\r', TRUE)); } } // //if (pos==-1) mail->recipients.append (tr("undisclosed recipients") ); if ((pos = p.find("CC",':', 0, TRUE)) != -1) { pos++; mail->carbonCopies.append (p.getString(&pos, 'z', TRUE) ); } if ((pos = p.find("SUBJECT",':', 0, TRUE)) != -1) { pos++; mail->subject = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("DATE",':', 0, TRUE)) != -1) { pos++; mail->date = p.getString(&pos, 'z', TRUE); } if ((pos = p.find("MESSAGE",'-', 0, TRUE)) != -1) { pos++; if ( (p.wordAt(pos).upper() == "ID") && (p.separatorAt(pos) == ':') ) { id = p.getString(&pos, 'z', TRUE); mail->id = id; } } pos = 0; while ( ((pos = p.find("MIME",'-', pos, TRUE)) != -1) ) { pos++; if ( (p.wordAt(pos).upper() == "VERSION") && (p.separatorAt(pos) == ':') ) { pos++; if (p.getString(&pos, 'z', true) == "1.0") { mail->mimeType = 1; } } } if (mail->mimeType == 1) { boundary = ""; if ((pos = p.find("BOUNDARY", '=', 0, TRUE)) != -1) { pos++; boundary = p.getString(&pos, 'z', true); if (boundary[0] == '"') { boundary = boundary.left(boundary.length() - 1); //strip " boundary = boundary.right(boundary.length() - 1); //strip " } boundary = "--" + boundary; //create boundary field } if (boundary == "") { //fooled by Mime-Version mail->body = body; mail->bodyPlain = body; delete lp; return mail; } while (body.length() > 0) { pos = body.find(boundary, 0, FALSE); pos = body.find(delimiter, pos, FALSE); mimeHeader = body.left(pos); mimeBody = body.right(body.length() - pos - delimiter.length()); TextParser bp(mimeHeader, lineShift); contentType = ""; contentAttribute = ""; fileName = ""; if ((pos = bp.find("CONTENT",'-', 0, TRUE)) != -1) { pos++; if ( (bp.wordAt(pos).upper() == "TYPE") && (bp.separatorAt(pos) == ':') ) { contentType = bp.nextWord().upper(); if (bp.nextSeparator() == '/') contentAttribute = bp.nextWord().upper(); content = contentType + "/" + contentAttribute; } if ((pos = bp.find("ENCODING",':', 0, TRUE)) != -1) { pos++; encoding = bp.getString(&pos, 'z', TRUE); } if ( (pos = bp.find("FILENAME",'=', 0, TRUE)) != -1) { pos++; fileName = bp.getString(&pos, 'z', TRUE); fileName = fileName.right(fileName.length() - 1); fileName = fileName.left(fileName.length() - 1); } } pos = mimeBody.find(boundary, 0, FALSE); if (pos == -1) //should not occur, malformed mail pos = mimeBody.length(); body = mimeBody.right(mimeBody.length() - pos); mimeBody = mimeBody.left(pos); if (fileName != "") { //attatchments of some type, audio, image etc. Enclosure e; e.id = enclosureId; e.originalName = fileName; e.contentType = contentType; e.contentAttribute = contentAttribute; e.encoding = encoding; e.body = mimeBody; e.saved = FALSE; mail->addEnclosure(&e); enclosureId++; } else if (contentType == "TEXT") { if (contentAttribute == "PLAIN") { mail->body = mimeBody; mail->bodyPlain = mimeBody; } if (contentAttribute == "HTML") { mail->body = mimeBody; } } } } else { mail->bodyPlain = body; mail->body = body; } delete lp; return TRUE; } bool EmailHandler::getEnclosure(Enclosure *ePtr) { QFile f(ePtr->path + ePtr->name); char src[4]; char *destPtr; QByteArray buffer; uint bufCount, pos, decodedCount, size, x; if (! f.open(IO_WriteOnly) ) { qWarning("could not save: " + ePtr->path + ePtr->name); return FALSE; } if (ePtr->encoding.upper() == "BASE64") { size = (ePtr->body.length() * 3 / 4); //approximate size (always above) buffer.resize(size); bufCount = 0; pos = 0; destPtr = buffer.data(); while (pos < ePtr->body.length()) { decodedCount = 4; x = 0; while ( (x < 4) && (pos < ePtr->body.length()) ) { src[x] = ePtr->body[pos].latin1(); pos++; if (src[x] == '\r' || src[x] == '\n' || src[x] == ' ') x--; x++; } if (x > 1) { decodedCount = parse64base(src, destPtr); destPtr += decodedCount; bufCount += decodedCount; } } buffer.resize(bufCount); //set correct length of file f.writeBlock(buffer); } else { QTextStream t(&f); t << ePtr->body; } return TRUE; } int EmailHandler::parse64base(char *src, char *bufOut) { char c, z; char li[4]; int processed; //conversion table withouth table... for (int x = 0; x < 4; x++) { c = src[x]; if ( (int) c >= 'A' && (int) c <= 'Z') li[x] = (int) c - (int) 'A'; if ( (int) c >= 'a' && (int) c <= 'z') li[x] = (int) c - (int) 'a' + 26; if ( (int) c >= '0' && (int) c <= '9') li[x] = (int) c - (int) '0' + 52; if (c == '+') li[x] = 62; if (c == '/') li[x] = 63; } processed = 1; bufOut[0] = (char) li[0] & (32+16+8+4+2+1); //mask out top 2 bits bufOut[0] <<= 2; z = li[1] >> 4; bufOut[0] = bufOut[0] | z; //first byte retrived if (src[2] != '=') { bufOut[1] = (char) li[1] & (8+4+2+1); //mask out top 4 bits bufOut[1] <<= 4; z = li[2] >> 2; bufOut[1] = bufOut[1] | z; //second byte retrived processed++; if (src[3] != '=') { bufOut[2] = (char) li[2] & (2+1); //mask out top 6 bits bufOut[2] <<= 6; z = li[3]; bufOut[2] = bufOut[2] | z; //third byte retrieved processed++; } } return processed; } int EmailHandler::encodeMime(Email *mail) diff --git a/noncore/unsupported/mailit/mailitwindow.cpp b/noncore/unsupported/mailit/mailitwindow.cpp index 6e298c7..fec4d78 100644 --- a/noncore/unsupported/mailit/mailitwindow.cpp +++ b/noncore/unsupported/mailit/mailitwindow.cpp @@ -1,168 +1,168 @@ /********************************************************************** ** Copyright (C) 2001 Trolltech AS. All rights 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 <qwhatsthis.h> #include <qmessagebox.h> #include "mailitwindow.h" MailItWindow::MailItWindow(QWidget *parent, const char *name, WFlags /*fl*/) : QMainWindow(parent, name, WStyle_ContextHelp) { currentCaption = tr("Mailit"); setCaption(tr(currentCaption)); views = new QWidgetStack(this); setCentralWidget(views); QWhatsThis::add(views,tr("Central view area")); emailClient = new EmailClient(views, "client"); writeMail = new WriteMail(views, "writing"); readMail = new ReadMail(views, "reading"); views->raiseWidget(emailClient); connect(emailClient, SIGNAL(composeRequested()), this, SLOT(compose()) ); - connect(emailClient, SIGNAL(viewEmail(QListView *, Email *)), this, - SLOT(viewMail(QListView *, Email *)) ); - connect(emailClient, SIGNAL(mailUpdated(Email *)), this, - SLOT(updateMailView(Email *)) ); + connect(emailClient, SIGNAL(viewEmail(QListView*,Email*)), this, + SLOT(viewMail(QListView*,Email*)) ); + connect(emailClient, SIGNAL(mailUpdated(Email*)), this, + SLOT(updateMailView(Email*)) ); connect(writeMail, SIGNAL(cancelMail()), this, SLOT(showEmailClient()) ); - connect(writeMail, SIGNAL(sendMailRequested(const Email &)), this, + connect(writeMail, SIGNAL(sendMailRequested(const Email&)), this, SLOT(showEmailClient()) ); - connect(writeMail, SIGNAL(sendMailRequested(const Email &)), emailClient, - SLOT(enqueMail(const Email &)) ); + connect(writeMail, SIGNAL(sendMailRequested(const Email&)), emailClient, + SLOT(enqueMail(const Email&)) ); connect(readMail, SIGNAL(cancelView()), this, SLOT(showEmailClient()) ); - connect(readMail, SIGNAL(replyRequested(Email &, bool&)), this, - SLOT(composeReply(Email &, bool&)) ); - connect(readMail, SIGNAL(forwardRequested(Email &)), this, - SLOT(composeForward(Email &)) ); + connect(readMail, SIGNAL(replyRequested(Email&,bool&)), this, + SLOT(composeReply(Email&,bool&)) ); + connect(readMail, SIGNAL(forwardRequested(Email&)), this, + SLOT(composeForward(Email&)) ); - connect(readMail, SIGNAL(removeItem(EmailListItem *, bool &)), emailClient, - SLOT(deleteMail(EmailListItem *, bool &)) ); - connect(readMail, SIGNAL(viewingMail(Email *)), emailClient, - SLOT(moveMailFront(Email *)) ); + connect(readMail, SIGNAL(removeItem(EmailListItem*,bool&)), emailClient, + SLOT(deleteMail(EmailListItem*,bool&)) ); + connect(readMail, SIGNAL(viewingMail(Email*)), emailClient, + SLOT(moveMailFront(Email*)) ); - connect(emailClient, SIGNAL(newCaption(const QString &)), - this, SLOT(updateCaption(const QString &)) ); + connect(emailClient, SIGNAL(newCaption(const QString&)), + this, SLOT(updateCaption(const QString&)) ); - connect(readMail, SIGNAL(download(Email *)), emailClient, SLOT(download(Email*)) ); + connect(readMail, SIGNAL(download(Email*)), emailClient, SLOT(download(Email*)) ); viewingMail = FALSE; } MailItWindow::~MailItWindow() { } void MailItWindow::closeEvent(QCloseEvent *e) { if (views->visibleWidget() == emailClient) { e->accept(); } else { showEmailClient(); } } void MailItWindow::compose() { viewingMail = FALSE; emailClient->hide(); readMail->hide(); views->raiseWidget(writeMail); writeMail->setAddressList(emailClient->getAdrListRef()); writeMail->newMail(); setCaption( tr( "Write mail" ) ); } void MailItWindow::composeReply(Email &mail, bool& replyAll) { compose(); writeMail->reply(mail,replyAll) ; } void MailItWindow::composeForward(Email &mail) { compose(); writeMail->forward(mail) ; } void MailItWindow::showEmailClient() { viewingMail = FALSE; writeMail->hide(); readMail->hide(); views->raiseWidget(emailClient); setCaption( tr(currentCaption) ); } void MailItWindow::viewMail(QListView *view, Email *mail) { viewingMail = TRUE; emailClient->hide(); int result=0; if ((mail->received)&&(!mail->downloaded)) { QMessageBox mb( tr("Mail not downloaded"), tr("The mail you have clicked \n" "has not been downloaded yet.\n " "Would you like to do it now ?"), QMessageBox::Information, QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape,0 ); result=mb.exec(); if (result==QMessageBox::Yes) { emailClient->download(mail); } } readMail->update(view, mail); views->raiseWidget(readMail); setCaption( tr( "Read Mail" ) ); } void MailItWindow::updateMailView(Email *mail) { if (viewingMail) { readMail->mailUpdated(mail); } } void MailItWindow::updateCaption(const QString &newCaption) { currentCaption = newCaption; setCaption(tr(currentCaption)); } void MailItWindow::setDocument(const QString &_address) { // strip leading 'mailto:' QString address = _address; if (address.startsWith("mailto:")) address = address.mid(6); compose(); writeMail->setRecipient(address); } diff --git a/noncore/unsupported/oipkg/mainwindow.cpp b/noncore/unsupported/oipkg/mainwindow.cpp index a09bc30..7f1c0b8 100644 --- a/noncore/unsupported/oipkg/mainwindow.cpp +++ b/noncore/unsupported/oipkg/mainwindow.cpp @@ -1,515 +1,515 @@ /*************************************************************************** * * * 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) 2000 Trolltech AS. // adadpted form qpe/qipkg // (c) 2002 Patrick S. Vogt <tille@handhelds.org> #include "mainwindow.h" #include <qmenubar.h> #include <qpe/qpemessagebox.h> #include <qpe/resource.h> #include <qpe/config.h> #include <qtoolbar.h> #include <qpe/qcopenvelope_qws.h> #include <qaction.h> #include <qmessagebox.h> #include <qpopupmenu.h> #include <qtoolbutton.h> #include <qstring.h> #include <qlabel.h> #include <qfile.h> #include <qlistview.h> #include <qtextview.h> #include <qcheckbox.h> #include <qlineedit.h> #include <qtabwidget.h> #include <qcombobox.h> #include <qmessagebox.h> #include <qpushbutton.h> #include <qlayout.h> #include "pksettingsbase.h" #include "utils.h" #include "packagelistitem.h" MainWindow::MainWindow( QWidget *parent, const char *name, WFlags f ) : QMainWindow( parent, name, f ) // packageListServers( QObject(parent), name ), // packageListSearch( parent, name ), // packageListDocLnk( parent, name ) { setCaption( tr("Package Manager") ); settings = new PackageManagerSettings(this,0,TRUE); listViewPackages = new PackageListView( this,"listViewPackages",settings ); setCentralWidget( listViewPackages ); listViewPackages->addList( tr("feeds"), &packageListServers ); listViewPackages->addList( tr("ipkgfind&killefiz"), &packageListSearch ); listViewPackages->addList( tr("documents"), &packageListDocLnk ); ipkg = new PmIpkg( settings, this ); packageListServers.setSettings( settings ); packageListSearch.setSettings( settings ); packageListDocLnk.setSettings( settings ); pvDebug(9,"packageListServers.update"); packageListServers.update(); pvDebug(9,"packageListDocLnk.update"); packageListDocLnk.update(); pvDebug(9,"makeMenu"); makeMenu(); makeChannel(); connect( section, SIGNAL(activated(int)), SLOT(sectionChanged()) ); connect( subsection, SIGNAL(activated(int)), SLOT(subSectionChanged()) ); connect( settings->removeLinksButton, SIGNAL( clicked()), SLOT(removeLinks()) ); connect( settings->createLinksButton, SIGNAL( clicked()), SLOT(createLinks()) ); pvDebug(9,"displayList"); displayList(); } void MainWindow::makeMenu() { QToolBar *toolBar = new QToolBar( this ); QMenuBar *menuBar = new QMenuBar( toolBar ); QPopupMenu *srvMenu = new QPopupMenu( menuBar ); QPopupMenu *viewMenu = new QPopupMenu( menuBar ); QPopupMenu *cfgMenu = new QPopupMenu( menuBar ); QPopupMenu *helpMenu = new QPopupMenu( menuBar ); setToolBarsMovable( false ); toolBar->setHorizontalStretchable( true ); menuBar->insertItem( tr( "Package" ), srvMenu ); menuBar->insertItem( tr( "View" ), viewMenu ); menuBar->insertItem( tr( "Settings" ), cfgMenu ); menuBar->insertItem( tr( "Help" ), helpMenu ); // QLabel *spacer; // spacer = new QLabel( "", toolBar ); // spacer->setBackgroundColor( toolBar->backgroundColor() ); // toolBar->setStretchableWidget( spacer ); runAction = new QAction( tr( "Apply" ), Resource::loadPixmap( "oipkg/install" ), QString::null, 0, this, 0 ); connect( runAction, SIGNAL( activated() ), this, SLOT( runIpkg() ) ); runAction->addTo( toolBar ); runAction->addTo( srvMenu ); srvMenu->insertSeparator(); updateAction = new QAction( tr( "Update" ), Resource::loadIconSet( "oipkg/update" ), QString::null, 0, this, 0 ); connect( updateAction, SIGNAL( activated() ), this , SLOT( updateList() ) ); updateAction->addTo( toolBar ); updateAction->addTo( srvMenu ); QAction *cfgact; cfgact = new QAction( tr( "Setups" ), QString::null, 0, this, 0 ); connect( cfgact, SIGNAL( activated() ), SLOT( showSettingsSetup() ) ); cfgact->addTo( cfgMenu ); cfgact = new QAction( tr( "Servers" ), QString::null, 0, this, 0 ); connect( cfgact, SIGNAL( activated() ), SLOT( showSettingsSrv() ) ); cfgact->addTo( cfgMenu ); cfgact = new QAction( tr( "Destinations" ), QString::null, 0, this, 0 ); connect( cfgact, SIGNAL( activated() ), SLOT( showSettingsDst() ) ); cfgact->addTo( cfgMenu ); QAction *a; // SECTIONS sectionBar = new QToolBar( this ); addToolBar( sectionBar, "Section", QMainWindow::Top, TRUE ); sectionBar->setHorizontalStretchable( true ); QLabel *label = new QLabel( sectionBar, "section" ); // label->setBackgroundMode( NoBackground ); label->font().setPointSize( 8 ); label->setText( tr( "Section:" ) ); sectionBar->setStretchableWidget( label ); section = new QComboBox( false, sectionBar ); section->font().setPointSize( 8 ); label = new QLabel( " / ", sectionBar ); label->font().setPointSize( 8 ); // label->setBackgroundMode( PaletteForeground ); subsection = new QComboBox( false, sectionBar ); subsection->font().setPointSize( 8 ); a = new QAction( tr( "Close Section" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( sectionClose() ) ); a->addTo( sectionBar ); setSections(); setSubSections(); sectionAction = new QAction( tr( "Sections" ), QString::null, 0, this, 0 ); connect( sectionAction, SIGNAL( toggled(bool) ), this, SLOT( sectionShow(bool) ) ); sectionAction->setToggleAction( true ); sectionAction->addTo( viewMenu ); // sectionBar->setStretchableWidget( section ); //FIND findBar = new QToolBar(this); addToolBar( findBar, "Filter", QMainWindow::Top, TRUE ); label = new QLabel( tr("Filter: "), findBar ); // label->setBackgroundMode( PaletteForeground ); findBar->setHorizontalStretchable( TRUE ); findEdit = new QLineEdit( findBar, "findEdit" ); findBar->setStretchableWidget( findEdit ); - connect( findEdit, SIGNAL( textChanged( const QString & ) ), + connect( findEdit, SIGNAL( textChanged(const QString&) ), this, SLOT( displayList() ) ); a = new QAction( tr( "Clear Find" ), Resource::loadPixmap( "back" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), findEdit, SLOT( clear() ) ); a->addTo( findBar ); a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( findClose() ) ); a->addTo( findBar ); findAction = new QAction( tr( "Filter" ), QString::null, 0, this, 0 ); connect( findAction, SIGNAL( toggled(bool) ), this, SLOT( findShow(bool) ) ); findAction->setToggleAction( true ); findAction->addTo( viewMenu ); //SEARCH searchBar = new QToolBar(this); addToolBar( searchBar, "Search", QMainWindow::Top, TRUE ); label = new QLabel( tr("Search: "), searchBar ); // label->setBackgroundMode( PaletteForeground ); searchBar->setHorizontalStretchable( TRUE ); searchEdit = new QLineEdit( searchBar, "seachEdit" ); searchBar->setStretchableWidget( searchEdit ); -// connect( searchEdit, SIGNAL( textChanged( const QString & ) ), +// connect( searchEdit, SIGNAL( textChanged(const QString&) ), // this, SLOT( displayList() ) ); a = new QAction( tr( "Clear Search" ), Resource::loadPixmap( "back" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), searchEdit, SLOT( clear() ) ); a->addTo( searchBar ); searchCommit = new QAction( tr( "Do Search" ), Resource::loadPixmap( "find" ), QString::null, 0, this, 0 ); connect( searchCommit, SIGNAL( activated() ), SLOT( remotePackageQuery() ) ); searchCommit->addTo( searchBar ); a = new QAction( tr( "Close Find" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), this, SLOT( searchClose() ) ); a->addTo( searchBar ); searchAction = new QAction( tr( "Search" ), QString::null, 0, this, 0 ); connect( searchAction, SIGNAL( toggled(bool) ), this, SLOT( searchShow(bool) ) ); searchAction->setToggleAction( true ); searchAction->addTo( viewMenu ); //DEST destBar = new QToolBar(this); addToolBar( destBar, "Destination", QMainWindow::Top, TRUE ); label = new QLabel( tr("Destination: "), destBar ); // label->setBackgroundMode( PaletteForeground ); destBar->setHorizontalStretchable( TRUE ); destination = new QComboBox( false, destBar ); destination->insertStringList( settings->getDestinationNames() ); setComboName(destination,settings->getDestinationName()); connect( destination, SIGNAL(activated(int)), settings, SLOT(activeDestinationChange(int)) ); // space->setBackgroundMode( PaletteForeground ); CheckBoxLink = new QCheckBox( tr("Link"), destBar); // CheckBoxLink->setBackgroundMode( PaletteForeground ); CheckBoxLink->setChecked( settings->createLinks() ); connect( CheckBoxLink, SIGNAL(toggled(bool)), settings, SLOT(linkEnabled(bool)) ); destAction = new QAction( tr( "Destinations" ), QString::null, 0, this, 0 ); connect( destAction, SIGNAL( toggled(bool) ), SLOT( destShow(bool) ) ); a = new QAction( tr( "Close Destinations" ), Resource::loadPixmap( "close" ), QString::null, 0, this, 0 ); connect( a, SIGNAL( activated() ), SLOT( destClose() ) ); a->addTo( destBar ); destBar->setStretchableWidget( CheckBoxLink ); destAction->setToggleAction( true ); destAction->addTo( viewMenu ); // helpMenu helpMenu->insertSeparator(); a = new QAction( tr( "Package Actions" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); helpMenu->insertSeparator(); a = new QAction( tr( "Install" ), Resource::loadPixmap( "oipkg/install" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); a = new QAction( tr( "Remove" ), Resource::loadPixmap( "oipkg/uninstall" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); helpMenu->insertSeparator(); a = new QAction( tr( "Package Status" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); helpMenu->insertSeparator(); a = new QAction( tr( "New version, installed" ), Resource::loadPixmap( "oipkg/installed" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); a = new QAction( tr( "New version, not installed" ), Resource::loadPixmap( "oipkg/uninstalled" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); a = new QAction( tr( "Old version, installed" ), Resource::loadPixmap( "oipkg/installedOld" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); a = new QAction( tr( "Old version, not installed" ), Resource::loadPixmap( "oipkg/uninstalledOld" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); a = new QAction( tr( "Old version, new version installed" ), Resource::loadPixmap( "oipkg/uninstalledOldinstalledNew" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); a = new QAction( tr( "New version, old version installed" ), Resource::loadPixmap( "oipkg/uninstalledInstalledOld" ), QString::null, 0, this, 0 ); a->addTo( helpMenu ); // a = new QAction( tr( "" ), // Resource::loadPixmap( "oipkg/" ), QString::null, 0, this, 0 ); // a->addTo( helpMenu ); // configure the menus Config cfg( "oipkg", Config::User ); cfg.setGroup( "gui" ); findShow( cfg.readBoolEntry( "findBar", true ) ); searchShow( cfg.readBoolEntry( "searchBar", true ) ); sectionShow( cfg.readBoolEntry( "sectionBar", true ) ); destShow( cfg.readBoolEntry( "destBar", false ) ); setComboName(section,cfg.readEntry("default_section")); sectionChanged(); } MainWindow::~MainWindow() { Config cfg( "oipkg", Config::User ); cfg.setGroup( "gui" ); cfg.writeEntry( "findBar", !findBar->isHidden() ); cfg.writeEntry( "searchBar", !searchBar->isHidden() ); cfg.writeEntry( "sectionBar", !sectionBar->isHidden() ); cfg.writeEntry( "destBar", !destBar->isHidden() ); cfg.writeEntry( "default_section", section->currentText() ); } void MainWindow::runIpkg() { packageListServers.allPackages(); ipkg->loadList( &packageListSearch ); ipkg->loadList( &packageListDocLnk ); ipkg->loadList( &packageListServers ); ipkg->commit(); ipkg->clearLists(); // ##### If we looked in the list of files, we could send out accurate // ##### messages. But we don't bother yet, and just do an "all". QCopEnvelope e("QPE/System", "linkChanged(QString)"); QString lf = QString::null; e << lf; displayList(); } void MainWindow::updateList() { packageListServers.clear(); packageListSearch.clear(); packageListDocLnk.clear(); ipkg->update(); packageListServers.update(); packageListSearch.update(); packageListDocLnk.update(); } void MainWindow::filterList() { QString f = ""; if ( findAction->isOn() ) f = findEdit->text(); packageListServers.filterPackages( f ); } void MainWindow::displayList() { filterList(); listViewPackages->display(); } void MainWindow::sectionChanged() { disconnect( section, SIGNAL( activated(int) ), this, SLOT( sectionChanged() ) ); disconnect( subsection, SIGNAL(activated(int) ), this, SLOT( subSectionChanged() ) ); subsection->clear(); packageListServers.setSection( section->currentText() ); setSubSections(); connect( section, SIGNAL( activated(int) ), this, SLOT( sectionChanged() ) ); connect( subsection, SIGNAL(activated(int) ), this, SLOT( subSectionChanged() ) ); displayList(); } void MainWindow::subSectionChanged() { disconnect( section, SIGNAL( activated(int) ), this, SLOT( sectionChanged() ) ); disconnect( subsection, SIGNAL(activated(int) ), this, SLOT( subSectionChanged() ) ); packageListServers.setSubSection( subsection->currentText() ); connect( section, SIGNAL( activated(int) ), this, SLOT( sectionChanged() ) ); connect( subsection, SIGNAL(activated(int) ), this, SLOT( subSectionChanged() ) ); displayList(); } void MainWindow::setSections() { section->clear(); section->insertStringList( packageListServers.getSections() ); } void MainWindow::setSubSections() { subsection->clear(); subsection->insertStringList( packageListServers.getSubSections() ); } void MainWindow::showSettings(int i) { if ( settings->showDialog( i ) ) { updateList(); } setComboName(destination,settings->getDestinationName()); CheckBoxLink->setChecked( settings->createLinks() ); } void MainWindow::showSettingsSetup() { showSettings(0); } void MainWindow::showSettingsSrv() { showSettings(1); } void MainWindow::showSettingsDst() { showSettings(2); } void MainWindow::sectionShow(bool b) { if (b) sectionBar->show(); else sectionBar->hide(); sectionAction->setOn( b ); } void MainWindow::sectionClose() { sectionAction->setOn( false ); } void MainWindow::findShow(bool b) { if (b) findBar->show(); else findBar->hide(); findAction->setOn( b ); } void MainWindow::findClose() { findAction->setOn( false ); } void MainWindow::searchShow(bool b) { if (b) searchBar->show(); else searchBar->hide(); searchAction->setOn( b ); } void MainWindow::searchClose() { searchAction->setOn( false ); } void MainWindow::destShow(bool b) { if (b) destBar->show(); else destBar->hide(); destAction->setOn( b ); } void MainWindow::destClose() { destAction->setOn( false ); } void MainWindow::setDocument(const QString &fileName) { if ( !QFile::exists( fileName ) ) return; ipkg->installFile( fileName ); QCopEnvelope e("QPE/System", "linkChanged(QString)"); QString lf = QString::null; e << lf; } void MainWindow::makeChannel() { channel = new QCopChannel( "QPE/Application/oipkg", this ); - connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), - this, SLOT(receive(const QCString&, const QByteArray&)) ); + connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), + this, SLOT(receive(const QCString&,const QByteArray&)) ); } void MainWindow::receive(const QCString &msg, const QByteArray &arg) { pvDebug(3, "QCop "+msg+" "+QCString(arg)); if ( msg == "installFile(QString)" ) { ipkg->installFile( QString(arg) ); }else if( msg == "removeFile(QString)" ) { ipkg->removeFile( QString(arg) ); }else if( msg == "createLinks(QString)" ) { ipkg->createLinks( QString(arg) ); }else if( msg == "removeLinks(QString)" ) { ipkg->removeLinks( QString(arg) ); }else{ pvDebug(2,"Huh what do ya want") } } void MainWindow::createLinks() { pvDebug(2,"creating links..."); ipkg->createLinks( settings->destinationurl->text() ); } void MainWindow::removeLinks() { pvDebug(2,"removing links..."); ipkg->removeLinks( settings->destinationurl->text() ); } void MainWindow::remotePackageQuery() { packageListSearch.query( searchEdit->text() ); packageListSearch.update(); displayList(); } diff --git a/noncore/unsupported/oipkg/packagelistitem.cpp b/noncore/unsupported/oipkg/packagelistitem.cpp index 1610a37..1b4812d 100644 --- a/noncore/unsupported/oipkg/packagelistitem.cpp +++ b/noncore/unsupported/oipkg/packagelistitem.cpp @@ -1,240 +1,240 @@ /*************************************************************************** * * * 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. * * * ***************************************************************************/ // (c) 2002 Patrick S. Vogt <tille@handhelds.org> #include "packagelistitem.h" #include <qpe/resource.h> #include <qobject.h> #include <qpopupmenu.h> #include <qaction.h> #include "debug.h" static QPixmap *pm_uninstalled=0; static QPixmap *pm_uninstalled_old=0; static QPixmap *pm_installed=0; static QPixmap *pm_installed_old=0; static QPixmap *pm_uninstall=0; static QPixmap *pm_install=0; static QPixmap *pm_uninstalled_old_installed_new=0; static QPixmap *pm_uninstalled_installed_old=0; PackageListItem::PackageListItem(ListViewItemOipkg *parent, QString name, Type ittype) : ListViewItemOipkg(parent,name,ittype) { } PackageListItem::PackageListItem(QListView* lv, OipkgPackage *pi, PackageManagerSettings *s) : ListViewItemOipkg(lv,pi->name(),ListViewItemOipkg::Package) { init(pi,s); } PackageListItem::PackageListItem(ListViewItemOipkg *lvi, OipkgPackage *pi, PackageManagerSettings *s) : ListViewItemOipkg(lvi,pi->name(),ListViewItemOipkg::Package) { init(pi,s); } PackageListItem::~PackageListItem() { delete popupMenu; delete destsMenu; } void PackageListItem::init( OipkgPackage *pi, PackageManagerSettings *s) { //waring pass something different than 0 popupMenu = new QPopupMenu( 0 ); destsMenu = new QPopupMenu( 0 ); package = pi; settings = s; setExpandable( true ); ListViewItemOipkg *item; nameItem = new ListViewItemOipkg( this, ListViewItemOipkg::Attribute,"name" ); item = new ListViewItemOipkg( this, ListViewItemOipkg::Attribute, QObject::tr("Description: ")+pi->desc() ); item = new ListViewItemOipkg( this, ListViewItemOipkg::Attribute, QObject::tr("Size: ")+pi->size() ); destItem = new ListViewItemOipkg( this, ListViewItemOipkg::Attribute, "dest" ); linkItem = new ListViewItemOipkg( this, ListViewItemOipkg::Attribute, "link" ); statusItem = new ListViewItemOipkg( this, ListViewItemOipkg::Attribute, "status" ); ListViewItemOipkg *otherItem = new ListViewItemOipkg( this, ListViewItemOipkg::Attribute, QObject::tr("other") ); item = new ListViewItemOipkg( otherItem, ListViewItemOipkg::Attribute, QObject::tr("Install Name: ")+pi->installName() ); QDict<QString> *fields = pi->getFields(); QDictIterator<QString> it( *fields ); while ( it.current() ) { item = new ListViewItemOipkg( otherItem, ListViewItemOipkg::Attribute, QString(it.currentKey()+": "+*it.current()) ); ++it; } displayDetails(); if (!pm_uninstalled) { pm_uninstalled = new QPixmap(Resource::loadPixmap("oipkg/uninstalled")); pm_uninstalled_old = new QPixmap(Resource::loadPixmap("oipkg/uninstalledOld")); pm_uninstalled_old_installed_new = new QPixmap(Resource::loadPixmap("oipkg/uninstalledOldinstalledNew")); pm_uninstalled_installed_old = new QPixmap(Resource::loadPixmap("oipkg/uninstalledInstalledOld")); pm_installed = new QPixmap(Resource::loadPixmap("oipkg/installed")); pm_installed_old = new QPixmap(Resource::loadPixmap("oipkg/installedOld")); pm_install = new QPixmap(Resource::loadPixmap("oipkg/install")); pm_uninstall = new QPixmap(Resource::loadPixmap("oipkg/uninstall")); } } void PackageListItem::paintCell( QPainter *p, const QColorGroup & cg, int column, int width, int alignment ) { if ( !p ) return; p->fillRect( 0, 0, width, height(), isSelected()? cg.highlight() : cg.base() ); if ( column != 0 ) { // The rest is text QListViewItem::paintCell( p, cg, column, width, alignment ); return; } QListView *lv = listView(); if ( !lv ) return; int marg = lv->itemMargin(); int r = marg; QPixmap pm = statePixmap(); p->drawPixmap(marg,(height()-pm.height())/2,pm); r += pm.width()+1; p->translate( r, 0 ); QListViewItem::paintCell( p, cg, column, width - r, alignment ); } void PackageListItem::paintFocus( QPainter *p, const QColorGroup & cg, const QRect & r ) { // Skip QCheckListItem // (makes you wonder what we're getting from QCheckListItem) QListViewItem::paintFocus(p,cg,r); } QPixmap PackageListItem::statePixmap() const { bool installed = package->installed(); bool old = package->isOld(); bool verinstalled = package->otherInstalled(); if ( !package->toProcess() ) { if ( !installed ) if (old) { if (verinstalled) return *pm_uninstalled_old_installed_new; else return *pm_uninstalled_old; } else { if (verinstalled) return *pm_uninstalled_installed_old; else return *pm_uninstalled; } else if (old) return *pm_installed_old; else return *pm_installed; } else { //toProcess() == true if ( !installed ) return *pm_install; else return *pm_uninstall; } } QString PackageListItem::key( int column, bool ascending ) const { if ( column == 2 ) { QString t = text(2); double bytes=t.toDouble(); if ( t.contains('M') ) bytes*=1024*1024; else if ( t.contains('K') || t.contains('k') ) bytes*=1024; if ( !ascending ) bytes=999999999-bytes; return QString().sprintf("%09d",(int)bytes); } else { return QListViewItem::key(column,ascending); } } void PackageListItem::setOn( bool b ) { QCheckListItem::setOn( b ); package->toggleProcess(); package->setLink( settings->createLinks() ); displayDetails(); } void PackageListItem::displayDetails() { QString sod; sod += package->sizeUnits().isEmpty()?QString(""):QString(package->sizeUnits()); //sod += QString(package->dest().isEmpty()?"":QObject::tr(" on ")+package->dest()); sod += package->dest().isEmpty()?QString(""):QString(QObject::tr(" on ")+package->dest()); sod = sod.isEmpty()?QString(""):QString(" ("+sod+")"); setText(0, package->name()+sod ); nameItem->setText( 0, QObject::tr("Name: ")+package->name()); linkItem->setText( 0, QObject::tr("Link: ")+(package->link()?QObject::tr("Yes"):QObject::tr("No"))); destItem->setText( 0, QObject::tr("Destination: ")+package->dest() ); statusItem->setText( 0, QObject::tr("Status: ")+package->status() ); repaint(); } QPopupMenu* PackageListItem::getPopupMenu() { popupMenu->clear(); destsMenu->clear(); QAction *popupAction; qDebug("PackageListItem::showPopup "); if (!package->installed()){ popupMenu->insertItem( QObject::tr("Install to"), destsMenu ); QStringList dests = settings->getDestinationNames(); QString ad = settings->getDestinationName(); for (uint i = 0; i < dests.count(); i++ ) { popupAction = new QAction( dests[i], QString::null, 0, popupMenu, 0 ); popupAction->addTo( destsMenu ); if ( dests[i] == ad && getPackage()->toInstall() ) { popupAction->setToggleAction( true ); popupAction->setOn(true); } } - connect( destsMenu, SIGNAL( activated( int ) ), - this, SLOT( menuAction( int ) ) ); + connect( destsMenu, SIGNAL( activated(int) ), + this, SLOT( menuAction(int) ) ); popupMenu->popup( QCursor::pos() ); }else{ popupMenu->insertItem( QObject::tr("Remove")); - connect( popupMenu, SIGNAL( activated( int ) ), - this, SLOT( menuAction( int ) ) ); + connect( popupMenu, SIGNAL( activated(int) ), + this, SLOT( menuAction(int) ) ); popupMenu->popup( QCursor::pos() ); } return popupMenu; } void PackageListItem::menuAction( int i ) { if (!package->installed()){ package->setDest( destsMenu->text(i) ); package->setLink( settings->createLinks() ); } package->setOn(); displayDetails(); } //void PackageListItem::toggleProcess() //{ // package->toggleProcess() ; // displayDetails(); //} diff --git a/noncore/unsupported/oipkg/packagelistview.cpp b/noncore/unsupported/oipkg/packagelistview.cpp index 3c7435d..98ebf88 100644 --- a/noncore/unsupported/oipkg/packagelistview.cpp +++ b/noncore/unsupported/oipkg/packagelistview.cpp @@ -1,118 +1,118 @@ /*************************************************************************** * * * 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. * * * ***************************************************************************/ // (c) 2002 Patrick S. Vogt <tille@handhelds.org> #include "packagelistview.h" #include <qpopupmenu.h> #include <qaction.h> #include "listviewitemoipkg.h" #include "packagelistitem.h" #include "pksettings.h" PackageListView::PackageListView(QWidget *p, const char* n, PackageManagerSettings *s) : QListView(p,n) { settings = s; popupTimer = new QTimer( this ); setSelectionMode(QListView::NoSelection); addColumn( tr("Package") ); setRootIsDecorated( true ); connect( popupTimer, SIGNAL(timeout()), this, SLOT(showPopup()) ); - connect( this, SIGNAL( pressed( QListViewItem* ) ), - this, SLOT( setCurrent( QListViewItem* ) ) ); - connect( this, SIGNAL( clicked( QListViewItem* ) ), - this, SLOT( stopTimer( QListViewItem* ) ) ); + connect( this, SIGNAL( pressed(QListViewItem*) ), + this, SLOT( setCurrent(QListViewItem*) ) ); + connect( this, SIGNAL( clicked(QListViewItem*) ), + this, SLOT( stopTimer(QListViewItem*) ) ); } //PackageListView::~PackageListView() //{ //} void PackageListView::setCurrent( QListViewItem* p ) { qDebug("PackageListView::setCurrent "); activeItem = (ListViewItemOipkg*)p; if ( activeItem != 0 ) popupTimer->start( 750, true ); // if ( activeItem->getType() != ListViewItemOipkg::Package ){ // qDebug("PackageListView::setCurrent !p "); // activePackage = 0; // activePackageListItem = 0; // qDebug("PackageListView::setCurrent returning "); // return; // }; // activePackageListItem = (PackageListItem*)p; // activePackage = activePackageListItem->getPackage(); // if (activePackage == 0 ) // { // qDebug("PackageListView::setCurrent if (!activePackage)"); // return; // } qDebug("PackageListView::setCurrent popupTimer->start"); } void PackageListView::showPopup() { qDebug("PackageListView::showPopup"); QPopupMenu *popup = activeItem->getPopupMenu(); if (popup == 0) return; popup->popup( QCursor::pos() ); qDebug("PackageListView::showPopup"); } void PackageListView::stopTimer( QListViewItem* ) { popupTimer->stop(); } void PackageListView::display() { QDictIterator<PackageList> list( PackageLists ); PackageList *packlist; OipkgPackage *pack; PackageListItem *item; ListViewItemOipkg *rootItem; QListViewItem* it; QListViewItem* itdel; while ( list.current() ) { packlist = list.current(); rootItem = rootItems.find( list.currentKey() ); //rootItem->clear(); it=rootItem->firstChild(); while ( it ) { itdel = it; it = it->nextSibling(); delete itdel; } pack = packlist->first(); while( pack ) { item = new PackageListItem( rootItem, pack, settings ); pack = packlist->next(); } ++list; } } void PackageListView::addList( QString n, PackageList* pl) { PackageLists.insert(n, pl); ListViewItemOipkg *item = new ListViewItemOipkg(this,n,ListViewItemOipkg::Feed); rootItems.insert(n, item); } diff --git a/noncore/unsupported/oipkg/pksettings.cpp b/noncore/unsupported/oipkg/pksettings.cpp index 063b018..aac011e 100644 --- a/noncore/unsupported/oipkg/pksettings.cpp +++ b/noncore/unsupported/oipkg/pksettings.cpp @@ -1,433 +1,433 @@ #include "pksettings.h" #include <qpe/process.h> #include <qpe/resource.h> #include <qpe/stringutil.h> #include <qpe/qpeapplication.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/applnk.h> #include <qpe/config.h> #include <qprogressbar.h> #include <qcombobox.h> #include <qdict.h> #include <qfile.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qlistview.h> #include <qlistbox.h> #include <qcheckbox.h> #include <qmessagebox.h> #include <qpainter.h> #include <qpixmap.h> #include <qregexp.h> #include <qstring.h> #include <qobject.h> #include <qtextstream.h> #include <qtextview.h> #include <qtoolbutton.h> #include <qtabwidget.h> #include <stdlib.h> #include <unistd.h> #include "debug.h" //#include "utils.h" PackageManagerSettings::PackageManagerSettings( QWidget* parent, const char* name, WFlags fl ) : PackageManagerSettingsBase( parent, name, fl ) { connect( newserver, SIGNAL(clicked()), this, SLOT(newServer()) ); connect( removeserver, SIGNAL(clicked()), this, SLOT(removeServer()) ); connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); connect( newdestination, SIGNAL(clicked()), this, SLOT(newDestination()) ); connect( removedestination, SIGNAL(clicked()), this, SLOT(removeDestination()) ); connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); // connect( CheckBoxLink, SIGNAL(toggled(bool)), // activeLinkDestination, SLOT(setEnabled(bool)) ); // connect( settingName, SIGNAL(activated(int)), this, SLOT(installationSettingChange(int)) ); -// connect( settingName, SIGNAL(textChanged(const QString &)), this, SLOT(installationSettingSetName(const QString &)) ); +// connect( settingName, SIGNAL(textChanged(const QString&)), this, SLOT(installationSettingSetName(const QString&)) ); // connect( newsetting, SIGNAL(clicked()), this, SLOT(newInstallationSetting()) ); // connect( renamesetting, SIGNAL(clicked()), this, SLOT(renameInstallationSetting()) ); // connect( removesetting, SIGNAL(clicked()), this, SLOT(removeInstallationSetting()) ); servername->setEnabled(FALSE); serverurl->setEnabled(FALSE); serverurlDic.setAutoDelete(TRUE); destinationname->setEnabled(FALSE); destinationurl->setEnabled(FALSE); destinationurlDic.setAutoDelete(TRUE); readSettings(); activeLinkDestination->hide(); serverChanged = false; // get rid of setups // Settings->hide(); // settingName->hide(); // newsetting->hide(); // renamesetting->hide(); // removesetting->hide(); } PackageManagerSettings::~PackageManagerSettings() { } void PackageManagerSettings::newServer() { int i = servers->count(); if ( servername->isEnabled() || serverurl->text().isEmpty() ) { serverurlDic.insert(i,new QString("http://")); servers->insertItem(tr("New")); activeServers->insertItem(tr("New")); } else { // allows one-level undo serverurlDic.insert(i,new QString(serverurl->text())); servers->insertItem(servername->text()); activeServers->insertItem(servername->text()); } changed = true; servers->setSelected(i,TRUE); editServer(i); changed = true; } void PackageManagerSettings::newDestination() { int i = destinations->count(); if ( destinationname->isEnabled() || destinationurl->text().isEmpty() ) { destinationurlDic.insert(i,new QString("/")); destinations->insertItem(tr("New")); activeDestination->insertItem(tr("New")); activeLinkDestination->insertItem(tr("New")); } else { // allows one-level undo destinationurlDic.insert(i,new QString(destinationurl->text())); destinations->insertItem(destinationname->text()); activeDestination->insertItem(destinationname->text()); activeLinkDestination->insertItem(destinationname->text()); } destinations->setSelected(i,TRUE); editDestination(i); changed = true; } void PackageManagerSettings::editServer(int i) { if ( servername->isEnabled() ) { disconnect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); disconnect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); } else { servername->setEnabled(TRUE); serverurl->setEnabled(TRUE); } servername->setText( servers->text(i) ); serverurl->setText( *serverurlDic[i] ); editedserver = i; serverChanged = true; connect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); connect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); changed = true; } void PackageManagerSettings::editDestination(int i) { if ( destinationname->isEnabled() ) { disconnect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); disconnect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); } else { destinationname->setEnabled(TRUE); destinationurl->setEnabled(TRUE); //since it does not work anyway // createLinksButton->setEnabled(TRUE); // removeLinksButton->setEnabled(TRUE); } destinationname->setText( destinations->text(i) ); destinationurl->setText( *destinationurlDic[i] ); editeddestination = i; connect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); connect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); changed = true; } void PackageManagerSettings::removeServer() { disconnect( servername, SIGNAL(textChanged(const QString&)), this, SLOT(serverNameChanged(const QString&)) ); disconnect( serverurl, SIGNAL(textChanged(const QString&)), this, SLOT(serverUrlChanged(const QString&)) ); servername->setText(servers->text(editedserver)); serverurl->setText(*serverurlDic[editedserver]); disconnect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); servers->removeItem(editedserver); activeServers->removeItem(editedserver); connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); servername->setEnabled(FALSE); serverurl->setEnabled(FALSE); changed = true; } void PackageManagerSettings::removeDestination() { disconnect( destinationname, SIGNAL(textChanged(const QString&)), this, SLOT(destNameChanged(const QString&)) ); disconnect( destinationurl, SIGNAL(textChanged(const QString&)), this, SLOT(destUrlChanged(const QString&)) ); destinationname->setText(""); destinationurl->setText(""); disconnect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); destinations->removeItem(editeddestination); activeDestination->removeItem(editeddestination); activeLinkDestination->removeItem(editeddestination); editeddestination=0; connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); destinationname->setEnabled(FALSE); destinationurl->setEnabled(FALSE); changed = true; } void PackageManagerSettings::serverNameChanged(const QString& t) { disconnect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); servers->changeItem( t, editedserver ); activeServers->changeItem( t, editedserver ); connect( servers, SIGNAL(highlighted(int)), this, SLOT(editServer(int)) ); changed = true; serverChanged = true; } void PackageManagerSettings::destNameChanged(const QString& t) { disconnect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); destinations->changeItem( t, editeddestination ); activeDestination->changeItem( t, editeddestination ); activeLinkDestination->changeItem( t, editeddestination ); connect( destinations, SIGNAL(highlighted(int)), this, SLOT(editDestination(int)) ); changed = true; } void PackageManagerSettings::serverUrlChanged(const QString& t) { serverurlDic.replace(editedserver, new QString(t)); changed = true; serverChanged = true; } void PackageManagerSettings::destUrlChanged(const QString& t) { destinationurlDic.replace(editeddestination, new QString(t)); changed = true; } void PackageManagerSettings::writeIpkgConfig(const QString& conffile) { QFile conf(conffile); if ( ! conf.open(IO_WriteOnly) ) return; QTextStream s(&conf); s << "# Written by oipkg -- the opie package manager\n"; for (int i=0; i<(int)activeServers->count(); i++) { QString url = serverurlDic[i] ? *serverurlDic[i] : QString("???"); if ( !activeServers->isSelected(i) ) s << "#"; s << "src " << activeServers->text(i) << " " << url << "\n"; } for (int i=0; i<(int)destinations->count(); i++) { QString url = destinationurlDic[i] ? *destinationurlDic[i] : QString("???"); s << "dest " << destinations->text(i) << " " << url << "\n"; } conf.close(); } void PackageManagerSettings::readInstallationSettings() { Config cfg( "oipkg", Config::User ); cfg.setGroup( "Settings" ); installationSettingsCount = cfg.readNumEntry( "count", -1 ); currentSetting = cfg.readNumEntry( "current", 0 );// o should be -1 // for (int i = 0; i < installationSettingsCount; i++) // { // cfg.setGroup( "Setting_" + QString::number(i) ); // settingName->insertItem( cfg.readEntry( "name", "???" ), i ); // }; readInstallationSetting( currentSetting ); } ///** // * remove from conf file // */ //void PackageManagerSettings::removeInstallationSetting() //{ // settingName->removeItem( settingName->currentItem() ); // Config cfg( "oipkg", Config::User ); // cfg.setGroup( "Setting_" + QString::number( installationSettingsCount ) ); // cfg.clearGroup(); // installationSettingsCount--; // changed = true; // settingName->setEditable( false ); //} ///** // * write to confgile // */ //void PackageManagerSettings::newInstallationSetting() //{ // installationSettingsCount++; // settingName->insertItem( "New", installationSettingsCount ); // settingName->setCurrentItem( installationSettingsCount ); // settingName->setEditable( true ); // changed = true; //} //void PackageManagerSettings::installationSettingChange(int cs) //{ // writeCurrentInstallationSetting(); // currentSetting = cs; // readInstallationSetting( cs ); // changed = true; //} void PackageManagerSettings::writeInstallationSettings() { { Config cfg( "oipkg", Config::User ); cfg.setGroup( "Settings" ); cfg.writeEntry( "count", installationSettingsCount ); cfg.writeEntry( "current", currentSetting ); } writeCurrentInstallationSetting(); } void PackageManagerSettings::readInstallationSetting(int setting) { if ( setting < 0 ) return; Config cfg( "oipkg", Config::User ); cfg.setGroup( "Setting_" + QString::number( setting ) ); CheckBoxLink->setChecked( cfg.readBoolEntry( "link", true ) ); QString dest = cfg.readEntry( "dest" ); QString linkdest = cfg.readEntry( "linkdest" ); pvDebug(3, "dest="+dest); pvDebug(3, "linkdest="+linkdest); for ( int i = 0; i < activeDestination->count(); i++) { if ( activeDestination->text( i ) == dest ) activeDestination->setCurrentItem( i ); if ( activeLinkDestination->text( i ) == linkdest ) activeLinkDestination->setCurrentItem( i ); } } void PackageManagerSettings::writeCurrentInstallationSetting() { Config cfg( "oipkg", Config::User ); cfg.setGroup( "Setting_" + QString::number(currentSetting) ); cfg.writeEntry( "link", CheckBoxLink->isChecked() ); cfg.writeEntry( "dest", getDestinationName() ); cfg.writeEntry( "linkdest" , getLinkDestinationName() ); QStringList sers = getActiveServers(); int srvc = 0; for ( QStringList::Iterator it = sers.begin(); it != sers.end(); ++it ) { cfg.writeEntry( "server_" + QString::number(srvc++), *it ); } cfg.writeEntry( "server_count", srvc ); } //void PackageManagerSettings::renameInstallationSetting() //{ // settingName->setEditable( true ); // changed = true; //} //void PackageManagerSettings::installationSettingSetName(const QString &name) //{ // settingName->changeItem( name, settingName->currentItem() ); // changed = true; //} bool PackageManagerSettings::readIpkgConfig(const QString& conffile) { QFile conf(conffile); changed = false; if ( conf.open(IO_ReadOnly) ) { QTextStream s(&conf); servers->clear(); activeServers->clear(); destinations->clear(); activeDestination->clear(); activeLinkDestination->clear(); serverurlDic.clear(); destinationurlDic.clear(); ipkg_old=0; int currentserver=0; while ( !s.atEnd() ) { QString l = s.readLine(); QStringList token = QStringList::split(' ', l); if ( token[0] == "src" || token[0] == "#src" ) { currentserver=servers->count(); serverurlDic.insert(servers->count(),new QString(token[2])); int a = token[0] == "src" ? 1 : 0; int i = servers->count(); servers->insertItem(token[1]); activeServers->insertItem( token[1] ); activeServers->setSelected(i,a); } else if ( token[0] == "dest" ) { currentserver=destinations->count(); destinationurlDic.insert(destinations->count(),new QString(token[2])); destinations->insertItem(token[1]); activeDestination->insertItem( token[1] ); activeLinkDestination->insertItem( token[1] ); } else if ( token[0] == "option" ) { // ### somehow need to use the settings from netsetup // if ( token[1] == "http_proxy" ) // http->setText(token[2]); // else if ( token[1] == "ftp_proxy" ) // ftp->setText(token[2]); // else if ( token[1] == "proxy_username" ) // username->setText(token[2]); // else if ( token[1] == "proxy_password" ) // password->setText(token[2]); } else { // Old style? int eq = l.find('='); if ( eq >= 0 ) { QString v = l.mid(eq+1).stripWhiteSpace(); if ( v[0] == '"' || v[0] == '\'' ) { int cl=v.find(v[0],1); if ( cl >= 0 ) v = v.mid(1,cl-1); } if ( l.left(12) == "IPKG_SOURCE=" ) { ipkg_old=1; currentserver=servers->count(); serverurlDic.insert(servers->count(),new QString(v)); servers->insertItem(v); } else if ( l.left(13) == "#IPKG_SOURCE=" ) { serverurlDic.insert(servers->count(),new QString(v)); servers->insertItem(v); } else if ( l.left(10) == "IPKG_ROOT=" ) { // ### no UI // } else if ( l.left(20) == "IPKG_PROXY_USERNAME=" ) { // username->setText(v); // } else if ( l.left(20) == "IPKG_PROXY_PASSWORD=" ) { // password->setText(v); // } else if ( l.left(16) == "IPKG_PROXY_HTTP=" ) { // http->setText(v); // } else if ( l.left(16) == "IPKG_PROXY_FTP=" ) { // ftp->setText(v); } } } } if ( ipkg_old ) { servers->setSelectionMode(QListBox::Single); diff --git a/noncore/unsupported/qpdf/qbusybar.cpp b/noncore/unsupported/qpdf/qbusybar.cpp index ce7ab8e..e942f06 100644 --- a/noncore/unsupported/qpdf/qbusybar.cpp +++ b/noncore/unsupported/qpdf/qbusybar.cpp @@ -1,133 +1,133 @@ #include <qapplication.h> #include <qtimer.h> #include <qpainter.h> #include "qbusybar.h" QBusyBar::QBusyBar ( QWidget *parent, const char *name, int flags ) : QWidget ( parent, name, flags | WRepaintNoErase ) { m_busy = 0; m_div = 0; m_pos = 0; m_fade = 0; m_fadecols = 0; m_speed = 500; m_timer = new QTimer ( this ); - connect ( m_timer, SIGNAL( timeout ( )), this, SLOT( slotTimeout ( ))); + connect ( m_timer, SIGNAL( timeout()), this, SLOT( slotTimeout())); setParameters ( 12, 8, 200 ); } void QBusyBar::setParameters ( int d, int s, int v ) { bool running = m_timer-> isActive ( ); if ( running ) m_timer-> stop ( ); m_div = d; m_speed = v; delete [] m_fadecols; m_fade = s; m_fadecols = new QColor [m_fade]; int rt, gt, bt; int rf, gf, bf; colorGroup ( ). color ( QColorGroup::Highlight ). rgb ( &rf, &gf, &bf ); colorGroup ( ). color ( QColorGroup::Background ). rgb ( &rt, >, &bt ); for ( int i = 0; i < s; i++ ) m_fadecols [i]. setRgb ( rf + ( rt - rf ) * i / s, gf + ( gt - gf ) * i / s, bf + ( bt - bf ) * i / s ); if ( running ) { m_pos = 0; m_timer-> start ( m_speed ); } } QBusyBar::~QBusyBar ( ) { delete [] m_fadecols; } bool QBusyBar::isBusy ( ) const { return m_busy; } void QBusyBar::beginBusy ( ) { setBusy ( true ); } void QBusyBar::endBusy ( ) { setBusy ( false ); } void QBusyBar::setBusy ( bool b ) { int busy = m_busy + ( b ? 1 : -1 ); if ( busy < 0 ) busy = 0; if (( m_busy == 0 ) && ( busy > 0 )) { // Changed state to on m_pos = 0; m_timer-> start ( m_speed ); update ( ); } else if (( m_busy > 0 ) && ( busy == 0 )) { // Changed state to off m_timer-> stop ( ); update ( ); } m_busy = busy; } void QBusyBar::slotTimeout ( ) { m_pos++; m_pos %= ( 2 * ( m_fade + m_div )); update ( ); } void QBusyBar::paintEvent ( QPaintEvent *e ) { QPainter p ( this ); QRect clip = e-> rect ( ); int x = 0; int dx = width ( ) / m_div; int y = clip. top ( ); int dy = clip. height ( ); if ( m_busy ) { int dir = ( m_pos < ( m_fade + m_div )) ? 1 : -1; int pos = ( dir > 0 ) ? m_pos : ( 2 * ( m_div + m_fade )) - m_pos - m_fade - 1; for ( int i = 0; i < m_div; i++ ) { int ind = ( pos - i ) * dir; if (( ind < 0 ) || ( ind >= m_fade )) ind = m_fade - 1; if ((( x + dx ) > clip. left ( )) || ( x < clip. right ( ))) p. fillRect ( x, y, ( i < ( m_div - 1 )) ? dx : width ( ) - x, dy, m_fadecols [ind] ); x += dx; } } else { p. fillRect ( e-> rect ( ), m_fadecols [m_fade - 1] ); } } diff --git a/noncore/unsupported/qpdf/qpdf.cpp b/noncore/unsupported/qpdf/qpdf.cpp index 5cdcccf..75e86d0 100644 --- a/noncore/unsupported/qpdf/qpdf.cpp +++ b/noncore/unsupported/qpdf/qpdf.cpp @@ -1,540 +1,540 @@ //======================================================================== // // qpdf.cc // // Copyright 2001 Robert Griebl // //======================================================================== #include "aconf.h" #include "GString.h" #include "PDFDoc.h" #include "TextOutputDev.h" #include "QPEOutputDev.h" #include <qpe/qpeapplication.h> #include <qpe/resource.h> #include <qpe/applnk.h> #include <qpe/qcopenvelope_qws.h> #include <qclipboard.h> #include <qpe/qpetoolbar.h> #include <qtoolbutton.h> #include <qmenubar.h> #include <qpopupmenu.h> #include <qwidgetstack.h> #include <qtimer.h> #include <qfileinfo.h> #include <qstring.h> #include <qlineedit.h> #include <qspinbox.h> #include <qlayout.h> #include <qdialog.h> #include <qlabel.h> #include <qmessagebox.h> #include "qpdf.h" #ifdef QPDF_QPE_ONLY #include <qpe/fileselector.h> #else #include <opie/ofileselector.h> #endif int main ( int argc, char **argv ) { QPEApplication app ( argc, argv ); // read config file globalParams = new GlobalParams ( "" ); globalParams-> setErrQuiet ( true ); QPdfDlg *dlg = new QPdfDlg ( ); app. showMainDocumentWidget ( dlg ); if (( app. argc ( ) == 3 ) && ( app. argv ( ) [1] == QCString ( "-f" ))) dlg-> openFile ( app. argv ( ) [2] ); return app. exec ( ); } QPdfDlg::QPdfDlg ( ) : QMainWindow ( ) { setCaption ( tr( "QPdf" )); setIcon ( Resource::loadPixmap ( "qpdf_icon" )); m_busy = false; m_doc = 0; m_pages = 0; m_zoom = 72; m_currentpage = 0; m_fullscreen = false; m_renderok = false; setToolBarsMovable ( false ); m_stack = new QWidgetStack ( this ); m_stack-> setSizePolicy ( QSizePolicy ( QSizePolicy::Expanding, QSizePolicy::Expanding )); setCentralWidget ( m_stack ); m_outdev = new QPEOutputDev ( m_stack ); - connect ( m_outdev, SIGNAL( selectionChanged ( const QRect & )), this, SLOT( copyToClipboard ( const QRect & ))); + connect ( m_outdev, SIGNAL( selectionChanged(const QRect&)), this, SLOT( copyToClipboard(const QRect&))); #ifdef QPDF_QPE_ONLY m_filesel = new FileSelector ( "application/pdf", m_stack, "fs", false, true ); #else m_filesel = new OFileSelector ( "application/pdf", m_stack, "fs", false, true ); #endif - connect ( m_filesel, SIGNAL( closeMe ( )), this, SLOT( closeFileSelector ( ))); - connect ( m_filesel, SIGNAL( fileSelected ( const DocLnk & )), this, SLOT( openFile ( const DocLnk & ))); + connect ( m_filesel, SIGNAL( closeMe()), this, SLOT( closeFileSelector())); + connect ( m_filesel, SIGNAL( fileSelected(const DocLnk&)), this, SLOT( openFile(const DocLnk&))); m_tb_menu = new QToolBar ( this ); m_tb_menu-> setHorizontalStretchable ( true ); QMenuBar *mb = new QMenuBar ( m_tb_menu ); m_pm_zoom = new QPopupMenu ( mb ); m_pm_zoom-> setCheckable ( true ); mb-> insertItem ( tr( "Zoom" ), m_pm_zoom ); m_pm_zoom-> insertItem ( tr( "Fit to width" ), 1 ); m_pm_zoom-> insertItem ( tr( "Fit to page" ), 2 ); m_pm_zoom-> insertSeparator ( ); m_pm_zoom-> insertItem ( tr( "50%" ), 50 ); m_pm_zoom-> insertItem ( tr( "75%" ), 75 ); m_pm_zoom-> insertItem ( tr( "100%" ), 100 ); m_pm_zoom-> insertItem ( tr( "125%" ), 125 ); m_pm_zoom-> insertItem ( tr( "150%" ), 150 ); m_pm_zoom-> insertItem ( tr( "200%" ), 200 ); - connect ( m_pm_zoom, SIGNAL( activated ( int )), this, SLOT( setZoom ( int ))); + connect ( m_pm_zoom, SIGNAL( activated(int)), this, SLOT( setZoom(int))); m_tb_tool = new QToolBar ( this ); - new QToolButton ( Resource::loadIconSet ( "fileopen" ), tr( "Open..." ), QString::null, this, SLOT( openFile ( )), m_tb_tool, "open" ); + new QToolButton ( Resource::loadIconSet ( "fileopen" ), tr( "Open..." ), QString::null, this, SLOT( openFile()), m_tb_tool, "open" ); m_tb_tool-> addSeparator ( ); - m_to_find = new QToolButton ( Resource::loadIconSet ( "find" ), tr( "Find..." ), QString::null, this, SLOT( toggleFindBar ( )), m_tb_tool, "find" ); + m_to_find = new QToolButton ( Resource::loadIconSet ( "find" ), tr( "Find..." ), QString::null, this, SLOT( toggleFindBar()), m_tb_tool, "find" ); m_to_find-> setToggleButton ( true ); m_tb_tool-> addSeparator ( ); - m_to_full = new QToolButton ( Resource::loadIconSet ( "fullscreen" ), tr( "Fullscreen" ), QString::null, this, SLOT( toggleFullscreen ( )), m_tb_tool, "fullscreen" ); + m_to_full = new QToolButton ( Resource::loadIconSet ( "fullscreen" ), tr( "Fullscreen" ), QString::null, this, SLOT( toggleFullscreen()), m_tb_tool, "fullscreen" ); m_to_full-> setToggleButton ( true ); m_tb_tool-> addSeparator ( ); - new QToolButton ( Resource::loadIconSet ( "fastback" ), tr( "First page" ), QString::null, this, SLOT( firstPage ( )), m_tb_tool, "first" ); - new QToolButton ( Resource::loadIconSet ( "back" ), tr( "Previous page" ), QString::null, this, SLOT( prevPage ( )), m_tb_tool, "prev" ); - new QToolButton ( Resource::loadIconSet ( "down" ), tr( "Goto page..." ), QString::null, this, SLOT( gotoPageDialog ( )), m_tb_tool, "goto" ); - new QToolButton ( Resource::loadIconSet ( "forward" ), tr( "Next page" ), QString::null, this, SLOT( nextPage ( )), m_tb_tool, "next" ); - new QToolButton ( Resource::loadIconSet ( "fastforward" ), tr( "Last page" ), QString::null, this, SLOT( lastPage ( )), m_tb_tool, "last" ); + new QToolButton ( Resource::loadIconSet ( "fastback" ), tr( "First page" ), QString::null, this, SLOT( firstPage()), m_tb_tool, "first" ); + new QToolButton ( Resource::loadIconSet ( "back" ), tr( "Previous page" ), QString::null, this, SLOT( prevPage()), m_tb_tool, "prev" ); + new QToolButton ( Resource::loadIconSet ( "down" ), tr( "Goto page..." ), QString::null, this, SLOT( gotoPageDialog()), m_tb_tool, "goto" ); + new QToolButton ( Resource::loadIconSet ( "forward" ), tr( "Next page" ), QString::null, this, SLOT( nextPage()), m_tb_tool, "next" ); + new QToolButton ( Resource::loadIconSet ( "fastforward" ), tr( "Last page" ), QString::null, this, SLOT( lastPage()), m_tb_tool, "last" ); m_tb_find = new QToolBar ( this ); addToolBar ( m_tb_find, "Search", QMainWindow::Top, true ); m_tb_find-> setHorizontalStretchable ( true ); m_tb_find-> hide ( ); m_findedit = new QLineEdit ( m_tb_find, "findedit" ); m_tb_find-> setStretchableWidget ( m_findedit ); - connect ( m_findedit, SIGNAL( textChanged ( const QString & )), this, SLOT( findText ( const QString & ))); + connect ( m_findedit, SIGNAL( textChanged(const QString&)), this, SLOT( findText(const QString&))); - new QToolButton ( Resource::loadIconSet ( "next" ), tr( "Next" ), QString::null, this, SLOT( findText ( )), m_tb_find, "findnext" ); + new QToolButton ( Resource::loadIconSet ( "next" ), tr( "Next" ), QString::null, this, SLOT( findText()), m_tb_find, "findnext" ); openFile ( ); } QPdfDlg::~QPdfDlg ( ) { delete m_doc; } // vv Fullscreen handling (for broken QT-lib) [David Hedbor, www.eongames.com] void QPdfDlg::resizeEvent ( QResizeEvent * ) { if ( m_fullscreen && ( size ( ) != qApp-> desktop ( )-> size ( ))) setFullscreen ( true ); } void QPdfDlg::focusInEvent ( QFocusEvent * ) { if ( m_fullscreen ) setFullscreen ( true ); } void QPdfDlg::toggleFullscreen ( ) { if ( m_to_full-> isOn ( ) == m_fullscreen ) m_to_full-> setOn ( !m_fullscreen ); m_fullscreen = !m_fullscreen; setFullscreen ( m_fullscreen ); } void QPdfDlg::setFullscreen ( bool b ) { static QSize normalsize; if ( b ) { if ( !normalsize. isValid ( )) normalsize = size ( ); setFixedSize ( qApp-> desktop ( )-> size ( )); showNormal ( ); reparent ( 0, WStyle_Customize | WStyle_NoBorder, QPoint ( 0, 0 )); showFullScreen ( ); } else { showNormal ( ); reparent ( 0, 0, QPoint ( 0, 0 )); resize ( normalsize ); showMaximized ( ); normalsize = QSize ( ); } } // ^^ Fullscreen handling (for broken QT-lib) void QPdfDlg::setBusy ( bool b ) { if ( b != m_busy ) { m_busy = b; m_outdev-> setBusy ( m_busy ); setEnabled ( !m_busy ); } } bool QPdfDlg::busy ( ) const { return m_busy; } void QPdfDlg::updateCaption ( ) { QString cap = ""; if ( !m_currentdoc. isEmpty ( )) cap = QString ( "%1 - " ). arg ( m_currentdoc ); cap += "QPdf"; setCaption ( cap ); } void QPdfDlg::setZoom ( int id ) { int dpi = 0; switch ( id ) { case 1: if ( m_doc && m_doc-> isOk ( )) dpi = m_outdev-> visibleWidth ( ) * 72 / m_doc-> getPageWidth ( m_currentpage ); break; case 2: if ( m_doc && m_doc-> isOk ( )) dpi = QMIN( m_outdev-> visibleWidth ( ) * 72 / m_doc-> getPageWidth ( m_currentpage ), \ m_outdev-> visibleHeight ( ) * 72 / m_doc-> getPageHeight ( m_currentpage )); break; default: dpi = id * 72 / 100; break; } if ( dpi < 18 ) dpi = 18; if ( dpi > 216 ) dpi = 216; for ( uint i = 0; i < m_pm_zoom-> count ( ); i++ ) { int xid = m_pm_zoom-> idAt ( i ); m_pm_zoom-> setItemChecked ( xid, xid == id ); } if ( dpi != m_zoom ) { m_zoom = dpi; renderPage ( ); } } void QPdfDlg::gotoPageDialog ( ) { QDialog *d = new QDialog ( this, "gotodlg", true ); d-> setCaption ( tr( "Goto page" )); QBoxLayout *lay = new QVBoxLayout ( d, 4, 4 ); QLabel *l = new QLabel ( tr( "Select from 1 .. %1:" ). arg ( m_pages ), d ); lay-> addWidget ( l ); QSpinBox *spin = new QSpinBox ( 1, m_pages, 1, d ); spin-> setValue ( m_currentpage ); spin-> setWrapping ( true ); spin-> setButtonSymbols ( QSpinBox::PlusMinus ); lay-> addWidget ( spin ); if ( d-> exec ( ) == QDialog::Accepted ) { gotoPage ( spin-> value ( )); } delete d; } void QPdfDlg::toggleFindBar ( ) { if ( m_to_find-> isOn ( ) == m_tb_find-> isVisible ( )) m_to_find-> setOn ( !m_tb_find-> isVisible ( )); if ( m_tb_find-> isVisible ( )) { m_tb_find-> hide ( ); m_outdev-> setFocus ( ); } else { m_tb_find-> show ( ); m_findedit-> setFocus ( ); } } void QPdfDlg::findText ( const QString &str ) { if ( !m_doc || !m_doc-> isOk ( ) || str. isEmpty ( )) return; TextOutputDev *textOut = 0; int pg = 0; setBusy ( true ); int len = str. length ( ); Unicode *u = new Unicode [len]; for ( int i = 0; i < len; i++ ) u [i] = str [i]. unicode ( ); int xMin = 0, yMin = 0, xMax = 0, yMax = 0; QRect selr = m_outdev-> selection ( ); bool fromtop = true; if ( selr. isValid ( )) { xMin = selr. right ( ); yMin = selr. top ( ) + selr. height ( ) / 2; fromtop = false; } if ( m_outdev-> findText ( u, len, fromtop, true, &xMin, &yMin, &xMax, &yMax )) goto found; qApp-> processEvents ( ); // search following pages textOut = new TextOutputDev ( 0, gFalse, gFalse ); if ( !textOut-> isOk ( )) goto done; qApp-> processEvents ( ); for ( pg = ( m_currentpage % m_pages ) + 1; pg != m_currentpage; pg = ( pg % m_pages ) + 1 ) { m_doc-> displayPage ( textOut, pg, 72, 0, gFalse ); fp_t xMin1, yMin1, xMax1, yMax1; qApp-> processEvents ( ); if ( textOut-> findText ( u, len, gTrue, gTrue, &xMin1, &yMin1, &xMax1, &yMax1 )) goto foundPage; qApp-> processEvents ( ); } // search current page ending at current selection if ( selr. isValid ( )) { xMax = selr. left ( ); yMax = selr. top ( ) + selr. height ( ) / 2; if ( m_outdev-> findText ( u, len, gTrue, gFalse, &xMin, &yMin, &xMax, &yMax )) goto found; } // not found QMessageBox::information ( this, tr( "Find..." ), tr( "'%1' could not be found." ). arg ( str )); goto done; foundPage: qApp-> processEvents ( ); gotoPage ( pg ); if ( !m_outdev-> findText ( u, len, gTrue, gTrue, &xMin, &yMin, &xMax, &yMax )) { // this can happen if coalescing is bad goto done; } found: selr. setCoords ( xMin, yMin, xMax, yMax ); m_outdev-> setSelection ( selr, true ); // this will emit QPEOutputDev::selectionChanged ( ) -> copyToClipboard ( ) done: delete [] u; delete textOut; setBusy ( false ); } void QPdfDlg::findText ( ) { findText ( m_findedit-> text ( )); } void QPdfDlg::copyToClipboard ( const QRect &r ) { if ( m_doc && m_doc-> isOk ( ) && m_doc-> okToCopy ( )) qApp-> clipboard ( )-> setText ( m_outdev-> getText ( r )); } void QPdfDlg::firstPage ( ) { gotoPage ( 1 ); } void QPdfDlg::prevPage ( ) { gotoPage ( m_currentpage - 1 ); } void QPdfDlg::nextPage ( ) { gotoPage ( m_currentpage + 1 ); } void QPdfDlg::lastPage ( ) { gotoPage ( m_pages ); } void QPdfDlg::gotoPage ( int n ) { if ( n < 1 ) n = 1; if ( n > m_pages ) n = m_pages; if ( n != m_currentpage ) { m_currentpage = n; renderPage ( ); } } void QPdfDlg::renderPage ( ) { if ( m_renderok && m_doc && m_doc-> isOk ( )) { m_renderok = false; setBusy ( true ); m_doc-> displayPage ( m_outdev, m_currentpage, m_zoom, 0, true ); setBusy ( false ); m_outdev-> setPageCount ( m_currentpage, m_pages ); m_renderok = true; } } void QPdfDlg::closeFileSelector ( ) { m_tb_menu-> show ( ); m_tb_tool-> show ( ); m_stack-> raiseWidget ( m_outdev ); } void QPdfDlg::openFile ( ) { m_tb_menu-> hide ( ); m_tb_tool-> hide ( ); m_tb_find-> hide ( ); m_stack-> raiseWidget ( m_filesel ); } void QPdfDlg::openFile ( const QString &f ) { DocLnk nf; nf. setType ( "application/pdf" ); nf. setFile ( f ); QFileInfo fi ( f ); nf. setName ( fi. baseName ( )); openFile ( nf ); } void QPdfDlg::openFile ( const DocLnk &f ) { QString fn = f. file ( ); QFileInfo fi ( fn ); if ( fi. exists ( )) { delete m_doc; m_doc = new PDFDoc ( new GString ( fn. local8Bit ( )), 0, 0 ); if ( m_doc-> isOk ( )) { m_currentdoc = f. name ( ); int sep = m_currentdoc. findRev ( '/' ); if ( sep > 0 ) m_currentdoc = m_currentdoc. mid ( sep + 1 ); m_pages = m_doc-> getNumPages ( ); m_currentpage = 0; - QTimer::singleShot ( 0, this, SLOT( delayedInit ( ))); + QTimer::singleShot ( 0, this, SLOT( delayedInit())); } else { delete m_doc; m_doc = 0; m_currentdoc = QString::null; } updateCaption ( ); } else QMessageBox::warning ( this, tr( "Error" ), tr( "File does not exist!" )); } void QPdfDlg::setDocument ( const QString &f ) { if ( f. find ( ".desktop", 0, true ) == -1 ) openFile ( f ); else openFile ( DocLnk ( f )); closeFileSelector ( ); } void QPdfDlg::delayedInit ( ) { closeFileSelector ( ); m_currentpage = 0; m_zoom = 0; m_renderok = false; setZoom ( 100 ); gotoPage ( 1 ); m_renderok = true; renderPage ( ); m_outdev-> setFocus ( ); } |