author | groucho <groucho> | 2003-04-11 14:48:19 (UTC) |
---|---|---|
committer | groucho <groucho> | 2003-04-11 14:48:19 (UTC) |
commit | d37f3eac6b876285eb7a03ab01194ea261458ea5 (patch) (side-by-side diff) | |
tree | 47420d872c6d298db7e26715c80cf3aebb055033 | |
parent | ebf5bb083d47179918d47f083a3cc98a5ed5d2e0 (diff) | |
download | opie-d37f3eac6b876285eb7a03ab01194ea261458ea5.zip opie-d37f3eac6b876285eb7a03ab01194ea261458ea5.tar.gz opie-d37f3eac6b876285eb7a03ab01194ea261458ea5.tar.bz2 |
Lots of improvements regarding usability and stability:
- Now uses ofileselector for sending attachments (reading follows, does not crash any more)
- Uses DocLnks for attachments (when composing a message)
- Beautified the attachments dialog with doc icons
- removed a crash when sending attachments and no account was set
- smaller fixes
ToDo:
- Attachment viewer should use doclnk too
- get rid of teh save button in ofileselector
- fix the bug with GMX mail provider sending mail (user encoding wrong)
- replace the Attach and Remove buttons with a nice toolbar
- Maybe integrate attview into the mail sending window on demand
- get rid of crashes
-rw-r--r-- | noncore/net/mailit/addatt.cpp | 119 | ||||
-rw-r--r-- | noncore/net/mailit/addatt.h | 24 | ||||
-rw-r--r-- | noncore/net/mailit/emailclient.cpp | 10 | ||||
-rw-r--r-- | noncore/net/mailit/emailhandler.cpp | 7 | ||||
-rw-r--r-- | noncore/net/mailit/writemail.cpp | 6 | ||||
-rw-r--r-- | noncore/unsupported/mailit/addatt.cpp | 119 | ||||
-rw-r--r-- | noncore/unsupported/mailit/addatt.h | 24 | ||||
-rw-r--r-- | noncore/unsupported/mailit/emailclient.cpp | 10 | ||||
-rw-r--r-- | noncore/unsupported/mailit/emailhandler.cpp | 7 | ||||
-rw-r--r-- | noncore/unsupported/mailit/writemail.cpp | 6 |
10 files changed, 200 insertions, 132 deletions
diff --git a/noncore/net/mailit/addatt.cpp b/noncore/net/mailit/addatt.cpp index c030e36..f279f52 100644 --- a/noncore/net/mailit/addatt.cpp +++ b/noncore/net/mailit/addatt.cpp @@ -1,209 +1,230 @@ /********************************************************************** ** 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 <qdir.h> #include <qstringlist.h> #include "resource.h" #include "addatt.h" -FileItem::FileItem(QListView *parent, QFileInfo fileInfo, QString fileType) +FileItem::FileItem(QListView *parent, DocLnk* dl) : QListViewItem(parent) { - file = fileInfo; - type = fileType; + /*file = fileInfo; + type = fileType;*/ + + doclnk=dl; - setText(0, fileInfo.baseName()); + setText(0, doclnk->name()); - if (fileType == "Picture") { +/* 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")); - } + }*/ } -QFileInfo FileItem::getFileInfo() +FileItem::~FileItem() { - return file; -} - -QString FileItem::getFileType() -{ - return type; + if (doclnk!=NULL) delete doclnk; + doclnk=NULL; } AddAtt::AddAtt(QWidget *parent, const char *name, WFlags f) : QDialog(parent, name, f) { setCaption("Adding attatchments"); - QGridLayout *top = new QGridLayout(this, 3, 2); + QGridLayout *top = new QGridLayout(this, 3,1 ); + - fileCategoryButton = new QPushButton(this); + /*fileCategoryButton = new QPushButton(this);*/ attatchButton = new QPushButton("Attatch ->", this); removeButton = new QPushButton("Remove", this); - fileCategories = new QPopupMenu(fileCategoryButton); + /*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(attatchButton, 2, 0); - top->addWidget(removeButton, 2, 1); + top->addWidget(fileCategoryButton, 0, 0);*/ + + //ofs=new OFileSelector(this,2,0,"/root/Documents"); + + + top->addWidget(attatchButton,1,0); + top->addWidget(removeButton,2,0); - connect(fileCategories, SIGNAL(activated(int)), this, - SLOT(fileCategorySelected(int)) ); + /*connect(fileCategories, SIGNAL(activated(int)), this, + SLOT(fileCategorySelected(int)) );*/ connect(attatchButton, SIGNAL(clicked()), this, SLOT(addAttatchment()) ); connect(removeButton, SIGNAL(clicked()), this, SLOT(removeAttatchment()) ); - listView = new QListView(this, "AttView"); - listView->addColumn("Documents"); + /*listView = new QListView(this, "AttView"); + listView->addColumn("Documents");* connect(listView, SIGNAL(doubleClicked(QListViewItem *)), this, - SLOT(addAttatchment()) ); + SLOT(addAttatchment()) );*/ + attView = new QListView(this, "Selected"); - attView->addColumn("Attatched"); + attView->addColumn(tr("Attached")); + attView->addColumn(tr("File type")); connect(attView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(removeAttatchment()) ); - top->addWidget(listView, 1,0); - top->addWidget(attView, 1,1); + //top->addWidget(ofs, 0,0); + top->addWidget(attView, 0,0); + + clear(); - clear(); + } void AddAtt::clear() { attView->clear(); - getFiles(); + //getFiles(); modified = FALSE; } -void AddAtt::fileCategorySelected(int id) +/*void AddAtt::fileCategorySelected(int id) { fileCategoryButton->setText(fileCategories->text(id)); getFiles(); -} +}*/ void AddAtt::addAttatchment() -{ - QFileInfo info; - QString type; +{ + QDialog qd(this,tr("Select attachment"),true); + + QGridLayout top(&qd,1,1); + + OFileSelector ofs(&qd,1,0,"/root/Documents"); + + top.addWidget(&ofs,0,0); - if (listView->selectedItem() != NULL) { - item = (FileItem *) listView->selectedItem(); - info = item->getFileInfo(); - type = item->getFileType(); - item = new FileItem(attView, info, type); + qd.showMaximized(); + + if (qd.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; } - modified = TRUE; } void AddAtt::removeAttatchment() { - if (attView->selectedItem() != NULL) { + 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; - QDir *dir; - listView->clear(); + /*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(listView, *fi, selected); + item = new FileItem(lis+ütView, *fi, selected); ++it; // goto next list element - } + }*/ } QStringList AddAtt::returnAttatchedFiles() { QFileInfo info; QStringList list; item = (FileItem *) attView->firstChild(); + + while (item != NULL) { - info = item->getFileInfo(); - list += info.filePath(); + 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->getFileType(); + list += item->getDocLnk()->type(); item = (FileItem *) item->nextSibling(); } return list; } diff --git a/noncore/net/mailit/addatt.h b/noncore/net/mailit/addatt.h index 867c905..73062e2 100644 --- a/noncore/net/mailit/addatt.h +++ b/noncore/net/mailit/addatt.h @@ -1,70 +1,76 @@ /********************************************************************** ** 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. ** **********************************************************************/ #ifndef ADDATT_H #define ADDATT_H #include <qdialog.h> #include <qlistview.h> #include <qpushbutton.h> #include <qpopupmenu.h> #include <qstring.h> #include <qfileinfo.h> #include <qstringlist.h> +#include <opie/ofileselector.h> +#include <qpe/applnk.h> class FileItem : public QListViewItem { public: - FileItem(QListView *parent, QFileInfo fileInfo, QString fileType); - QFileInfo getFileInfo(); - QString getFileType(); - + //FileItem(QListView *parent, QFileInfo fileInfo, QString fileType); + FileItem(QListView*, DocLnk*); + ~FileItem(); + DocLnk* getDocLnk() {return doclnk;} + + private: - QFileInfo file; - QString type; + DocLnk* doclnk; }; class AddAtt : public QDialog { Q_OBJECT public: AddAtt(QWidget *parent = 0, const char *name = 0, WFlags f = 0); QStringList returnAttatchedFiles(); QStringList returnFileTypes(); void getFiles(); void clear(); + public slots: - void fileCategorySelected(int); + //void fileCategorySelected(int); void addAttatchment(); void removeAttatchment(); void reject(); void accept(); private: - FileItem *item; - QListView *listView, *attView; + FileItem* item; + QListView *attView; QPushButton *fileCategoryButton, *attatchButton, *removeButton; QPopupMenu *fileCategories; bool modified; QFileInfo *fi; + + OFileSelector* ofs; }; #endif diff --git a/noncore/net/mailit/emailclient.cpp b/noncore/net/mailit/emailclient.cpp index fc4276b..9258aac 100644 --- a/noncore/net/mailit/emailclient.cpp +++ b/noncore/net/mailit/emailclient.cpp @@ -116,169 +116,175 @@ void EmailClient::init() connect(emailHandler, SIGNAL(downloadedSize(int)), this, SLOT(setDownloadedSize(int)) ); statusBar->addWidget(status1Label); statusBar->addWidget(progressBar); statusBar->addWidget(status2Label); setToolBarsMovable(FALSE); bar = new QToolBar(this); 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 QAction(tr("Get all mail"), Resource::loadPixmap("mailit/getmail"), QString::null, 0, this, 0); connect(getMailButton, SIGNAL(activated()), this, SLOT(getAllNewMail()) ); getMailButton->addTo(bar); getMailButton->addTo(mail); sendMailButton = new QAction(tr("Send mail"), Resource::loadPixmap("mailit/sendmail"), QString::null, 0, this, 0); connect(sendMailButton, SIGNAL(activated()), this, SLOT(sendQuedMail()) ); sendMailButton->addTo(bar); sendMailButton->addTo(mail); 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); 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); 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); 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); grid_3->addWidget( outboxView, 0, 0 ); mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) ); setCentralWidget(mailboxView); } 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); } void EmailClient::sendQuedMail() { int count = 0; if (accountList.count() == 0) { - QMessageBox::warning(qApp->activeWindow(), - "No account selected", "You must create an account", "OK\n"); + QMessageBox::warning(qApp->activeWindow(), "No account selected", "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(),"No account selected", "You must create an account", "OK\n"); return; } setMailAccount(); receiving = TRUE; previewingMail = TRUE; diff --git a/noncore/net/mailit/emailhandler.cpp b/noncore/net/mailit/emailhandler.cpp index 2144899..1be16d4 100644 --- a/noncore/net/mailit/emailhandler.cpp +++ b/noncore/net/mailit/emailhandler.cpp @@ -367,102 +367,105 @@ bool EmailHandler::getEnclosure(Enclosure *ePtr) } 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) { +int EmailHandler::encodeMime(Email *mail) +{ + QString fileName, fileType, contentType, newBody, boundary; Enclosure *ePtr; QString userName = mailAccount.name; - userName += " <" + mailAccount.emailAddress + ">"; + if (userName.length()>0) //only embrace it if there is a user name + userName += " <" + mailAccount.emailAddress + ">"; //add standard headers newBody = "From: " + userName + "\r\nTo: "; for (QStringList::Iterator it = mail->recipients.begin(); it != mail->recipients.end(); ++it ) { newBody += *it + " "; } newBody += "\r\nSubject: " + mail->subject + "\r\n"; if (mail->files.count() == 0) { //just a simple mail newBody += "\r\n" + mail->body; mail->rawMail = newBody; return 0; } //Build mime encoded mail boundary = "-----4345=next_bound=0495----"; newBody += "Mime-Version: 1.0\r\n"; newBody += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\r\n\r\n"; newBody += "This is a multipart message in Mime 1.0 format\r\n\r\n"; newBody += "--" + boundary + "\r\nContent-Type: text/plain\r\n\r\n"; newBody += mail->body; for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { fileName = ePtr->originalName; fileType = ePtr->contentType; QFileInfo fi(fileName); // This specification of contentType is temporary contentType = ""; if (fileType == "Picture") { contentType = "image/x-image"; } else if (fileType == "Document") { contentType = "text/plain"; } else if (fileType == "Sound") { contentType = "audio/x-wav"; } else if (fileType == "Movie") { contentType = "video/mpeg"; } else { contentType = "application/octet-stream"; } newBody += "\r\n\r\n--" + boundary + "\r\n"; newBody += "Content-Type: " + contentType + "; name=\"" + fi.fileName() + "\"\r\n"; newBody += "Content-Transfer-Encoding: base64\r\n"; diff --git a/noncore/net/mailit/writemail.cpp b/noncore/net/mailit/writemail.cpp index 1a7185e..70332a9 100644 --- a/noncore/net/mailit/writemail.cpp +++ b/noncore/net/mailit/writemail.cpp @@ -19,97 +19,97 @@ **********************************************************************/ #include <qmessagebox.h> #include "writemail.h" #include "resource.h" WriteMail::WriteMail( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { showingAddressList = FALSE; init(); addAtt = new AddAtt(0, "Add Attatchments"); } WriteMail::~WriteMail() { delete addAtt; } void WriteMail::setAddressList(AddressList *list) { Contact *cPtr; addressList = list; addressView->clear(); QList<Contact> *cListPtr = addressList->getContactList(); QListViewItem *item; for (cPtr = cListPtr->first(); cPtr != 0; cPtr = cListPtr->next() ) { item = new QListViewItem(addressView, cPtr->email, cPtr->name); } } void WriteMail::init() { setToolBarsMovable(FALSE); bar = new QToolBar(this); bar->setHorizontalStretchable( TRUE ); menu = new QMenuBar( bar ); mailMenu = new QPopupMenu(menu); menu->insertItem( tr( "&Mail" ), mailMenu); addMenu = new QPopupMenu(menu); menu->insertItem( tr( "&Add" ), addMenu); bar = new QToolBar(this); - attatchButton = new QAction(tr("Attatchment"), Resource::loadPixmap("fileopen"), QString::null, 0, this, 0); + attatchButton = new QAction(tr("Attatchment"), Resource::loadPixmap("mailit/attach"), QString::null, 0, this, 0); attatchButton->addTo(bar); attatchButton->addTo(addMenu); connect( attatchButton, SIGNAL( activated() ), this, SLOT( attatchFile() ) ); confirmButton = new QAction(tr("Enque mail"), Resource::loadPixmap("OKButton"), QString::null, 0, this, 0); confirmButton->addTo(bar); confirmButton->addTo(mailMenu); connect( confirmButton, SIGNAL( activated() ), this, SLOT( accept() ) ); newButton = new QAction(tr("New mail"), Resource::loadPixmap("new"), QString::null, 0, this, 0); newButton->addTo(mailMenu); connect( newButton, SIGNAL( activated() ), this, SLOT( newMail() ) ); widget = new QWidget(this, "widget"); grid = new QGridLayout( widget ); recipientsBox = new QComboBox( FALSE, widget, "toLabel" ); recipientsBox->insertItem( tr( "To:" ) ); recipientsBox->insertItem( tr( "CC:" ) ); recipientsBox->setCurrentItem(0); grid->addWidget( recipientsBox, 0, 0 ); subjetLabel = new QLabel( widget, "subjetLabel" ); subjetLabel->setText( tr( "Subject:" ) ); grid->addWidget( subjetLabel, 1, 0 ); ToolButton13_2 = new QToolButton( widget, "ToolButton13_2" ); ToolButton13_2->setText( tr( "..." ) ); grid->addWidget( ToolButton13_2, 1, 2 ); subjectInput = new QLineEdit( widget, "subjectInput" ); grid->addWidget( subjectInput, 1, 1 ); toInput = new QLineEdit( widget, "toInput" ); grid->addWidget( toInput, 0, 1 ); addressButton = new QToolButton( widget, "addressButton" ); addressButton->setPixmap( Resource::loadPixmap("AddressBook") ); addressButton->setToggleButton(TRUE); grid->addWidget( addressButton, 0, 2 ); connect(addressButton, SIGNAL(clicked()), this, SLOT(getAddress()) ); emailInput = new QMultiLineEdit( widget, "emailInput" ); grid->addMultiCellWidget( emailInput, 2, 2, 0, 2); addressView = new QListView( widget, "addressView"); addressView->addColumn("Email"); @@ -126,99 +126,97 @@ void WriteMail::init() setCentralWidget(widget); } void WriteMail::reject() { emit cancelMail(); } // need to insert date void WriteMail::accept() { QStringList attatchedFiles, attatchmentsType; int idCount = 0; if (toInput->text() == "") { QMessageBox::warning(this,"No recipient", "Send mail to whom?", "OK\n"); return; } if (! getRecipients() ) { QMessageBox::warning(this,"Incorrect recipient separator", "Recipients must be separated by ;\nand be valid emailaddresses", "OK\n"); return; } mail.subject = subjectInput->text(); mail.body = emailInput->text(); mail.sent = false; mail.received = false; mail.rawMail = "To: "; for (QStringList::Iterator it = mail.recipients.begin(); it != mail.recipients.end(); ++it) { mail.rawMail += (*it); mail.rawMail += ",\n"; } mail.rawMail.truncate(mail.rawMail.length()-2); mail.rawMail += mail.from; mail.rawMail += "\nSubject: "; mail.rawMail += mail.subject; mail.rawMail += "\n\n"; attatchedFiles = addAtt->returnAttatchedFiles(); attatchmentsType = addAtt->returnFileTypes(); QStringList::Iterator itType = attatchmentsType.begin(); Enclosure e; - for ( QStringList::Iterator it = attatchedFiles.begin(); - it != attatchedFiles.end(); ++it ) { - + for ( QStringList::Iterator it = attatchedFiles.begin(); it != attatchedFiles.end(); ++it ) { e.id = idCount; e.originalName = (*it).latin1(); e.contentType = (*itType).latin1(); e.contentAttribute = (*itType).latin1(); e.saved = TRUE; mail.addEnclosure(&e); itType++; idCount++; } mail.rawMail += mail.body; mail.rawMail += "\n"; mail.rawMail += ".\n"; emit sendMailRequested(mail); addAtt->clear(); } void WriteMail::getAddress() { showingAddressList = !showingAddressList; if (showingAddressList) { emailInput->hide(); addressView->show(); okButton->show(); } else { addressView->hide(); okButton->hide(); emailInput->show(); } } void WriteMail::attatchFile() { addAtt->showMaximized(); } void WriteMail::reply(Email replyMail) { int pos; mail = replyMail; mail.files.clear(); toInput->setText(mail.fromMail); subjectInput->setText("Re: " + mail.subject); diff --git a/noncore/unsupported/mailit/addatt.cpp b/noncore/unsupported/mailit/addatt.cpp index c030e36..f279f52 100644 --- a/noncore/unsupported/mailit/addatt.cpp +++ b/noncore/unsupported/mailit/addatt.cpp @@ -1,209 +1,230 @@ /********************************************************************** ** 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 <qdir.h> #include <qstringlist.h> #include "resource.h" #include "addatt.h" -FileItem::FileItem(QListView *parent, QFileInfo fileInfo, QString fileType) +FileItem::FileItem(QListView *parent, DocLnk* dl) : QListViewItem(parent) { - file = fileInfo; - type = fileType; + /*file = fileInfo; + type = fileType;*/ + + doclnk=dl; - setText(0, fileInfo.baseName()); + setText(0, doclnk->name()); - if (fileType == "Picture") { +/* 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")); - } + }*/ } -QFileInfo FileItem::getFileInfo() +FileItem::~FileItem() { - return file; -} - -QString FileItem::getFileType() -{ - return type; + if (doclnk!=NULL) delete doclnk; + doclnk=NULL; } AddAtt::AddAtt(QWidget *parent, const char *name, WFlags f) : QDialog(parent, name, f) { setCaption("Adding attatchments"); - QGridLayout *top = new QGridLayout(this, 3, 2); + QGridLayout *top = new QGridLayout(this, 3,1 ); + - fileCategoryButton = new QPushButton(this); + /*fileCategoryButton = new QPushButton(this);*/ attatchButton = new QPushButton("Attatch ->", this); removeButton = new QPushButton("Remove", this); - fileCategories = new QPopupMenu(fileCategoryButton); + /*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(attatchButton, 2, 0); - top->addWidget(removeButton, 2, 1); + top->addWidget(fileCategoryButton, 0, 0);*/ + + //ofs=new OFileSelector(this,2,0,"/root/Documents"); + + + top->addWidget(attatchButton,1,0); + top->addWidget(removeButton,2,0); - connect(fileCategories, SIGNAL(activated(int)), this, - SLOT(fileCategorySelected(int)) ); + /*connect(fileCategories, SIGNAL(activated(int)), this, + SLOT(fileCategorySelected(int)) );*/ connect(attatchButton, SIGNAL(clicked()), this, SLOT(addAttatchment()) ); connect(removeButton, SIGNAL(clicked()), this, SLOT(removeAttatchment()) ); - listView = new QListView(this, "AttView"); - listView->addColumn("Documents"); + /*listView = new QListView(this, "AttView"); + listView->addColumn("Documents");* connect(listView, SIGNAL(doubleClicked(QListViewItem *)), this, - SLOT(addAttatchment()) ); + SLOT(addAttatchment()) );*/ + attView = new QListView(this, "Selected"); - attView->addColumn("Attatched"); + attView->addColumn(tr("Attached")); + attView->addColumn(tr("File type")); connect(attView, SIGNAL(doubleClicked(QListViewItem *)), this, SLOT(removeAttatchment()) ); - top->addWidget(listView, 1,0); - top->addWidget(attView, 1,1); + //top->addWidget(ofs, 0,0); + top->addWidget(attView, 0,0); + + clear(); - clear(); + } void AddAtt::clear() { attView->clear(); - getFiles(); + //getFiles(); modified = FALSE; } -void AddAtt::fileCategorySelected(int id) +/*void AddAtt::fileCategorySelected(int id) { fileCategoryButton->setText(fileCategories->text(id)); getFiles(); -} +}*/ void AddAtt::addAttatchment() -{ - QFileInfo info; - QString type; +{ + QDialog qd(this,tr("Select attachment"),true); + + QGridLayout top(&qd,1,1); + + OFileSelector ofs(&qd,1,0,"/root/Documents"); + + top.addWidget(&ofs,0,0); - if (listView->selectedItem() != NULL) { - item = (FileItem *) listView->selectedItem(); - info = item->getFileInfo(); - type = item->getFileType(); - item = new FileItem(attView, info, type); + qd.showMaximized(); + + if (qd.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; } - modified = TRUE; } void AddAtt::removeAttatchment() { - if (attView->selectedItem() != NULL) { + 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; - QDir *dir; - listView->clear(); + /*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(listView, *fi, selected); + item = new FileItem(lis+ütView, *fi, selected); ++it; // goto next list element - } + }*/ } QStringList AddAtt::returnAttatchedFiles() { QFileInfo info; QStringList list; item = (FileItem *) attView->firstChild(); + + while (item != NULL) { - info = item->getFileInfo(); - list += info.filePath(); + 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->getFileType(); + list += item->getDocLnk()->type(); item = (FileItem *) item->nextSibling(); } return list; } diff --git a/noncore/unsupported/mailit/addatt.h b/noncore/unsupported/mailit/addatt.h index 867c905..73062e2 100644 --- a/noncore/unsupported/mailit/addatt.h +++ b/noncore/unsupported/mailit/addatt.h @@ -1,70 +1,76 @@ /********************************************************************** ** 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. ** **********************************************************************/ #ifndef ADDATT_H #define ADDATT_H #include <qdialog.h> #include <qlistview.h> #include <qpushbutton.h> #include <qpopupmenu.h> #include <qstring.h> #include <qfileinfo.h> #include <qstringlist.h> +#include <opie/ofileselector.h> +#include <qpe/applnk.h> class FileItem : public QListViewItem { public: - FileItem(QListView *parent, QFileInfo fileInfo, QString fileType); - QFileInfo getFileInfo(); - QString getFileType(); - + //FileItem(QListView *parent, QFileInfo fileInfo, QString fileType); + FileItem(QListView*, DocLnk*); + ~FileItem(); + DocLnk* getDocLnk() {return doclnk;} + + private: - QFileInfo file; - QString type; + DocLnk* doclnk; }; class AddAtt : public QDialog { Q_OBJECT public: AddAtt(QWidget *parent = 0, const char *name = 0, WFlags f = 0); QStringList returnAttatchedFiles(); QStringList returnFileTypes(); void getFiles(); void clear(); + public slots: - void fileCategorySelected(int); + //void fileCategorySelected(int); void addAttatchment(); void removeAttatchment(); void reject(); void accept(); private: - FileItem *item; - QListView *listView, *attView; + FileItem* item; + QListView *attView; QPushButton *fileCategoryButton, *attatchButton, *removeButton; QPopupMenu *fileCategories; bool modified; QFileInfo *fi; + + OFileSelector* ofs; }; #endif diff --git a/noncore/unsupported/mailit/emailclient.cpp b/noncore/unsupported/mailit/emailclient.cpp index fc4276b..9258aac 100644 --- a/noncore/unsupported/mailit/emailclient.cpp +++ b/noncore/unsupported/mailit/emailclient.cpp @@ -116,169 +116,175 @@ void EmailClient::init() connect(emailHandler, SIGNAL(downloadedSize(int)), this, SLOT(setDownloadedSize(int)) ); statusBar->addWidget(status1Label); statusBar->addWidget(progressBar); statusBar->addWidget(status2Label); setToolBarsMovable(FALSE); bar = new QToolBar(this); 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 QAction(tr("Get all mail"), Resource::loadPixmap("mailit/getmail"), QString::null, 0, this, 0); connect(getMailButton, SIGNAL(activated()), this, SLOT(getAllNewMail()) ); getMailButton->addTo(bar); getMailButton->addTo(mail); sendMailButton = new QAction(tr("Send mail"), Resource::loadPixmap("mailit/sendmail"), QString::null, 0, this, 0); connect(sendMailButton, SIGNAL(activated()), this, SLOT(sendQuedMail()) ); sendMailButton->addTo(bar); sendMailButton->addTo(mail); 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); 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); 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); 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); grid_3->addWidget( outboxView, 0, 0 ); mailboxView->addTab( widget_2,"mailit/outbox", tr( "Outbox" ) ); setCentralWidget(mailboxView); } 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); } void EmailClient::sendQuedMail() { int count = 0; if (accountList.count() == 0) { - QMessageBox::warning(qApp->activeWindow(), - "No account selected", "You must create an account", "OK\n"); + QMessageBox::warning(qApp->activeWindow(), "No account selected", "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(),"No account selected", "You must create an account", "OK\n"); return; } setMailAccount(); receiving = TRUE; previewingMail = TRUE; diff --git a/noncore/unsupported/mailit/emailhandler.cpp b/noncore/unsupported/mailit/emailhandler.cpp index 2144899..1be16d4 100644 --- a/noncore/unsupported/mailit/emailhandler.cpp +++ b/noncore/unsupported/mailit/emailhandler.cpp @@ -367,102 +367,105 @@ bool EmailHandler::getEnclosure(Enclosure *ePtr) } 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) { +int EmailHandler::encodeMime(Email *mail) +{ + QString fileName, fileType, contentType, newBody, boundary; Enclosure *ePtr; QString userName = mailAccount.name; - userName += " <" + mailAccount.emailAddress + ">"; + if (userName.length()>0) //only embrace it if there is a user name + userName += " <" + mailAccount.emailAddress + ">"; //add standard headers newBody = "From: " + userName + "\r\nTo: "; for (QStringList::Iterator it = mail->recipients.begin(); it != mail->recipients.end(); ++it ) { newBody += *it + " "; } newBody += "\r\nSubject: " + mail->subject + "\r\n"; if (mail->files.count() == 0) { //just a simple mail newBody += "\r\n" + mail->body; mail->rawMail = newBody; return 0; } //Build mime encoded mail boundary = "-----4345=next_bound=0495----"; newBody += "Mime-Version: 1.0\r\n"; newBody += "Content-Type: multipart/mixed; boundary=\"" + boundary + "\"\r\n\r\n"; newBody += "This is a multipart message in Mime 1.0 format\r\n\r\n"; newBody += "--" + boundary + "\r\nContent-Type: text/plain\r\n\r\n"; newBody += mail->body; for ( ePtr=mail->files.first(); ePtr != 0; ePtr=mail->files.next() ) { fileName = ePtr->originalName; fileType = ePtr->contentType; QFileInfo fi(fileName); // This specification of contentType is temporary contentType = ""; if (fileType == "Picture") { contentType = "image/x-image"; } else if (fileType == "Document") { contentType = "text/plain"; } else if (fileType == "Sound") { contentType = "audio/x-wav"; } else if (fileType == "Movie") { contentType = "video/mpeg"; } else { contentType = "application/octet-stream"; } newBody += "\r\n\r\n--" + boundary + "\r\n"; newBody += "Content-Type: " + contentType + "; name=\"" + fi.fileName() + "\"\r\n"; newBody += "Content-Transfer-Encoding: base64\r\n"; diff --git a/noncore/unsupported/mailit/writemail.cpp b/noncore/unsupported/mailit/writemail.cpp index 1a7185e..70332a9 100644 --- a/noncore/unsupported/mailit/writemail.cpp +++ b/noncore/unsupported/mailit/writemail.cpp @@ -19,97 +19,97 @@ **********************************************************************/ #include <qmessagebox.h> #include "writemail.h" #include "resource.h" WriteMail::WriteMail( QWidget* parent, const char* name, WFlags fl ) : QMainWindow( parent, name, fl ) { showingAddressList = FALSE; init(); addAtt = new AddAtt(0, "Add Attatchments"); } WriteMail::~WriteMail() { delete addAtt; } void WriteMail::setAddressList(AddressList *list) { Contact *cPtr; addressList = list; addressView->clear(); QList<Contact> *cListPtr = addressList->getContactList(); QListViewItem *item; for (cPtr = cListPtr->first(); cPtr != 0; cPtr = cListPtr->next() ) { item = new QListViewItem(addressView, cPtr->email, cPtr->name); } } void WriteMail::init() { setToolBarsMovable(FALSE); bar = new QToolBar(this); bar->setHorizontalStretchable( TRUE ); menu = new QMenuBar( bar ); mailMenu = new QPopupMenu(menu); menu->insertItem( tr( "&Mail" ), mailMenu); addMenu = new QPopupMenu(menu); menu->insertItem( tr( "&Add" ), addMenu); bar = new QToolBar(this); - attatchButton = new QAction(tr("Attatchment"), Resource::loadPixmap("fileopen"), QString::null, 0, this, 0); + attatchButton = new QAction(tr("Attatchment"), Resource::loadPixmap("mailit/attach"), QString::null, 0, this, 0); attatchButton->addTo(bar); attatchButton->addTo(addMenu); connect( attatchButton, SIGNAL( activated() ), this, SLOT( attatchFile() ) ); confirmButton = new QAction(tr("Enque mail"), Resource::loadPixmap("OKButton"), QString::null, 0, this, 0); confirmButton->addTo(bar); confirmButton->addTo(mailMenu); connect( confirmButton, SIGNAL( activated() ), this, SLOT( accept() ) ); newButton = new QAction(tr("New mail"), Resource::loadPixmap("new"), QString::null, 0, this, 0); newButton->addTo(mailMenu); connect( newButton, SIGNAL( activated() ), this, SLOT( newMail() ) ); widget = new QWidget(this, "widget"); grid = new QGridLayout( widget ); recipientsBox = new QComboBox( FALSE, widget, "toLabel" ); recipientsBox->insertItem( tr( "To:" ) ); recipientsBox->insertItem( tr( "CC:" ) ); recipientsBox->setCurrentItem(0); grid->addWidget( recipientsBox, 0, 0 ); subjetLabel = new QLabel( widget, "subjetLabel" ); subjetLabel->setText( tr( "Subject:" ) ); grid->addWidget( subjetLabel, 1, 0 ); ToolButton13_2 = new QToolButton( widget, "ToolButton13_2" ); ToolButton13_2->setText( tr( "..." ) ); grid->addWidget( ToolButton13_2, 1, 2 ); subjectInput = new QLineEdit( widget, "subjectInput" ); grid->addWidget( subjectInput, 1, 1 ); toInput = new QLineEdit( widget, "toInput" ); grid->addWidget( toInput, 0, 1 ); addressButton = new QToolButton( widget, "addressButton" ); addressButton->setPixmap( Resource::loadPixmap("AddressBook") ); addressButton->setToggleButton(TRUE); grid->addWidget( addressButton, 0, 2 ); connect(addressButton, SIGNAL(clicked()), this, SLOT(getAddress()) ); emailInput = new QMultiLineEdit( widget, "emailInput" ); grid->addMultiCellWidget( emailInput, 2, 2, 0, 2); addressView = new QListView( widget, "addressView"); addressView->addColumn("Email"); @@ -126,99 +126,97 @@ void WriteMail::init() setCentralWidget(widget); } void WriteMail::reject() { emit cancelMail(); } // need to insert date void WriteMail::accept() { QStringList attatchedFiles, attatchmentsType; int idCount = 0; if (toInput->text() == "") { QMessageBox::warning(this,"No recipient", "Send mail to whom?", "OK\n"); return; } if (! getRecipients() ) { QMessageBox::warning(this,"Incorrect recipient separator", "Recipients must be separated by ;\nand be valid emailaddresses", "OK\n"); return; } mail.subject = subjectInput->text(); mail.body = emailInput->text(); mail.sent = false; mail.received = false; mail.rawMail = "To: "; for (QStringList::Iterator it = mail.recipients.begin(); it != mail.recipients.end(); ++it) { mail.rawMail += (*it); mail.rawMail += ",\n"; } mail.rawMail.truncate(mail.rawMail.length()-2); mail.rawMail += mail.from; mail.rawMail += "\nSubject: "; mail.rawMail += mail.subject; mail.rawMail += "\n\n"; attatchedFiles = addAtt->returnAttatchedFiles(); attatchmentsType = addAtt->returnFileTypes(); QStringList::Iterator itType = attatchmentsType.begin(); Enclosure e; - for ( QStringList::Iterator it = attatchedFiles.begin(); - it != attatchedFiles.end(); ++it ) { - + for ( QStringList::Iterator it = attatchedFiles.begin(); it != attatchedFiles.end(); ++it ) { e.id = idCount; e.originalName = (*it).latin1(); e.contentType = (*itType).latin1(); e.contentAttribute = (*itType).latin1(); e.saved = TRUE; mail.addEnclosure(&e); itType++; idCount++; } mail.rawMail += mail.body; mail.rawMail += "\n"; mail.rawMail += ".\n"; emit sendMailRequested(mail); addAtt->clear(); } void WriteMail::getAddress() { showingAddressList = !showingAddressList; if (showingAddressList) { emailInput->hide(); addressView->show(); okButton->show(); } else { addressView->hide(); okButton->hide(); emailInput->show(); } } void WriteMail::attatchFile() { addAtt->showMaximized(); } void WriteMail::reply(Email replyMail) { int pos; mail = replyMail; mail.files.clear(); toInput->setText(mail.fromMail); subjectInput->setText("Re: " + mail.subject); |