kmail

kmatmlistview.cpp

00001 // -*- mode: C++; c-file-style: "gnu" -*-
00002 // kmcomposewin.cpp
00003 // Author: Markus Wuebben <markus.wuebben@kde.org>
00004 // This code is published under the GPL.
00005 
00006 #include <config.h>
00007 
00008 #include "kmatmlistview.h"
00009 
00010 #include "kmmainwin.h"
00011 #include "kmreadermainwin.h"
00012 #include "messagesender.h"
00013 #include "kmmsgpartdlg.h"
00014 #include <kpgpblock.h>
00015 #include <kaddrbook.h>
00016 #include "kmaddrbook.h"
00017 #include "kmmsgdict.h"
00018 #include "kmfolderimap.h"
00019 #include "kmfoldermgr.h"
00020 #include "kmfoldercombobox.h"
00021 #include "kmtransport.h"
00022 #include "kmcommands.h"
00023 #include "kcursorsaver.h"
00024 #include "partNode.h"
00025 #include "attachmentlistview.h"
00026 #include "transportmanager.h"
00027 using KMail::AttachmentListView;
00028 #include "dictionarycombobox.h"
00029 using KMail::DictionaryComboBox;
00030 #include "addressesdialog.h"
00031 using KPIM::AddressesDialog;
00032 #include "addresseeemailselection.h"
00033 using KPIM::AddresseeEmailSelection;
00034 using KPIM::AddresseeSelectorDialog;
00035 #include <maillistdrag.h>
00036 using KPIM::MailListDrag;
00037 #include "recentaddresses.h"
00038 using KRecentAddress::RecentAddresses;
00039 #include "kleo_util.h"
00040 #include "stl_util.h"
00041 #include "recipientseditor.h"
00042 
00043 #include "attachmentcollector.h"
00044 #include "objecttreeparser.h"
00045 
00046 #include "kmfoldermaildir.h"
00047 
00048 #include <libkpimidentities/identitymanager.h>
00049 #include <libkpimidentities/identitycombo.h>
00050 #include <libkpimidentities/identity.h>
00051 #include <libkdepim/kfileio.h>
00052 #include <libemailfunctions/email.h>
00053 #include <kleo/cryptobackendfactory.h>
00054 #include <kleo/exportjob.h>
00055 #include <ui/progressdialog.h>
00056 #include <ui/keyselectiondialog.h>
00057 
00058 #include <gpgmepp/context.h>
00059 #include <gpgmepp/key.h>
00060 
00061 #include <kabc/vcardconverter.h>
00062 #include <libkdepim/kvcarddrag.h>
00063 #include <kio/netaccess.h>
00064 
00065 
00066 #include "klistboxdialog.h"
00067 
00068 #include "messagecomposer.h"
00069 
00070 #include <kcharsets.h>
00071 #include <kcompletionbox.h>
00072 #include <kcursor.h>
00073 #include <kcombobox.h>
00074 #include <kstdaccel.h>
00075 #include <kpopupmenu.h>
00076 #include <kedittoolbar.h>
00077 #include <kkeydialog.h>
00078 #include <kdebug.h>
00079 #include <kfiledialog.h>
00080 #include <kwin.h>
00081 #include <kinputdialog.h>
00082 #include <kmessagebox.h>
00083 #include <kurldrag.h>
00084 #include <kio/scheduler.h>
00085 #include <ktempfile.h>
00086 #include <klocale.h>
00087 #include <kapplication.h>
00088 #include <kstatusbar.h>
00089 #include <kaction.h>
00090 #include <kstdaction.h>
00091 #include <kdirwatch.h>
00092 #include <kstdguiitem.h>
00093 #include <kiconloader.h>
00094 #include <kpushbutton.h>
00095 #include <kuserprofile.h>
00096 #include <krun.h>
00097 #include <ktempdir.h>
00098 //#include <keditlistbox.h>
00099 #include "globalsettings.h"
00100 #include "replyphrases.h"
00101 
00102 #include <kspell.h>
00103 #include <kspelldlg.h>
00104 #include <spellingfilter.h>
00105 #include <ksyntaxhighlighter.h>
00106 #include <kcolordialog.h>
00107 #include <kzip.h>
00108 #include <ksavefile.h>
00109 
00110 #include <qtabdialog.h>
00111 #include <qregexp.h>
00112 #include <qbuffer.h>
00113 #include <qtooltip.h>
00114 #include <qtextcodec.h>
00115 #include <qheader.h>
00116 #include <qwhatsthis.h>
00117 #include <qfontdatabase.h>
00118 
00119 #include <mimelib/mimepp.h>
00120 
00121 #include <algorithm>
00122 
00123 #include <sys/stat.h>
00124 #include <sys/types.h>
00125 #include <stdlib.h>
00126 #include <unistd.h>
00127 #include <errno.h>
00128 #include <fcntl.h>
00129 #include <assert.h>
00130 
00131 KMAtmListViewItem::KMAtmListViewItem(QListView *parent)
00132   : QObject(),
00133     QListViewItem( parent ),
00134     mListview( parent ),
00135     mCBSignEnabled( false ),
00136     mCBEncryptEnabled( false )
00137 {
00138   mCBEncrypt = new QCheckBox( mListview->viewport() );
00139   mCBSign = new QCheckBox( mListview->viewport() );
00140   mCBCompress = new QCheckBox( mListview->viewport() );
00141   connect( mCBCompress, SIGNAL( clicked() ), this, SLOT( slotCompress() ) );
00142 
00143   mCBEncrypt->hide();
00144   mCBSign->hide();
00145 }
00146 
00147 KMAtmListViewItem::~KMAtmListViewItem()
00148 {
00149   delete mCBEncrypt;
00150   mCBEncrypt = 0;
00151   delete mCBSign;
00152   mCBSign = 0;
00153   delete mCBCompress;
00154   mCBCompress = 0;
00155 }
00156 
00157 void KMAtmListViewItem::paintCell( QPainter * p, const QColorGroup & cg,
00158                                   int column, int width, int align )
00159 {
00160   // this is also called for the encrypt/sign columns to assure that the
00161   // background is cleared
00162   QListViewItem::paintCell( p, cg, column, width, align );
00163   if ( 4 == column ) {
00164     QRect r = mListview->itemRect( this );
00165     if ( !r.size().isValid() ) {
00166         mListview->ensureItemVisible( this );
00167         mListview->repaintContents( FALSE );
00168         r = mListview->itemRect( this );
00169     }
00170     int colWidth = mListview->header()->sectionSize( column );
00171     r.setX( mListview->header()->sectionPos( column )
00172             - mListview->header()->offset()
00173             + colWidth / 2
00174             - r.height() / 2
00175             - 1 );
00176     r.setY( r.y() + 1 );
00177     r.setWidth(  r.height() - 2 );
00178     r.setHeight( r.height() - 2 );
00179     r = QRect( mListview->viewportToContents( r.topLeft() ), r.size() );
00180 
00181     mCBCompress->resize( r.size() );
00182     mListview->moveChild( mCBCompress, r.x(), r.y() );
00183 
00184     QColor bg;
00185     if (isSelected())
00186       bg = cg.highlight();
00187     else
00188       bg = cg.base();
00189 
00190     mCBCompress->setPaletteBackgroundColor(bg);
00191     mCBCompress->show();
00192   }
00193   if( 5 == column || 6 == column ) {
00194     QRect r = mListview->itemRect( this );
00195     if ( !r.size().isValid() ) {
00196         mListview->ensureItemVisible( this );
00197         mListview->repaintContents( FALSE );
00198         r = mListview->itemRect( this );
00199     }
00200     int colWidth = mListview->header()->sectionSize( column );
00201     r.setX( mListview->header()->sectionPos( column )
00202             + colWidth / 2
00203             - r.height() / 2
00204             - 1 );
00205     r.setY( r.y() + 1 );
00206     r.setWidth(  r.height() - 2 );
00207     r.setHeight( r.height() - 2 );
00208     r = QRect( mListview->viewportToContents( r.topLeft() ), r.size() );
00209 
00210     QCheckBox* cb = (5 == column) ? mCBEncrypt : mCBSign;
00211     cb->resize( r.size() );
00212     mListview->moveChild( cb, r.x(), r.y() );
00213 
00214     QColor bg;
00215     if (isSelected())
00216       bg = cg.highlight();
00217     else
00218       bg = cg.base();
00219 
00220     bool enabled = (5 == column) ? mCBEncryptEnabled : mCBSignEnabled;
00221     cb->setPaletteBackgroundColor(bg);
00222     if (enabled) cb->show();
00223   }
00224 }
00225 
00226 void KMAtmListViewItem::enableCryptoCBs(bool on)
00227 {
00228   if( mCBEncrypt ) {
00229     mCBEncryptEnabled = on;
00230     mCBEncrypt->setEnabled( on );
00231     mCBEncrypt->setShown( on );
00232   }
00233   if( mCBSign ) {
00234     mCBSignEnabled = on;
00235     mCBSign->setEnabled( on );
00236     mCBSign->setShown( on );
00237   }
00238 }
00239 
00240 void KMAtmListViewItem::setEncrypt(bool on)
00241 {
00242   if( mCBEncrypt )
00243     mCBEncrypt->setChecked( on );
00244 }
00245 
00246 bool KMAtmListViewItem::isEncrypt()
00247 {
00248   if( mCBEncrypt )
00249     return mCBEncrypt->isChecked();
00250   else
00251     return false;
00252 }
00253 
00254 void KMAtmListViewItem::setSign(bool on)
00255 {
00256   if( mCBSign )
00257     mCBSign->setChecked( on );
00258 }
00259 
00260 bool KMAtmListViewItem::isSign()
00261 {
00262   if( mCBSign )
00263     return mCBSign->isChecked();
00264   else
00265     return false;
00266 }
00267 
00268 void KMAtmListViewItem::setCompress(bool on)
00269 {
00270   mCBCompress->setChecked( on );
00271 }
00272 
00273 bool KMAtmListViewItem::isCompress()
00274 {
00275   return mCBCompress->isChecked();
00276 }
00277 
00278 void KMAtmListViewItem::slotCompress()
00279 {
00280     if ( mCBCompress->isChecked() )
00281         emit compress( itemPos() );
00282     else
00283         emit uncompress( itemPos() );
00284 }
00285 
00286 #include "kmatmlistview.moc"
KDE Home | KDE Accessibility Home | Description of Access Keys