kmail

kmcomposewin.h
1 /*
2  * KMComposeWin Header File
3  * Author: Markus Wuebben <markus.wuebben@kde.org>
4  */
5 #ifndef __KMComposeWin
6 #define __KMComposeWin
7 
8 #ifndef KDE_USE_FINAL
9 # ifndef REALLY_WANT_KMCOMPOSEWIN_H
10 # error Do not include kmcomposewin.h anymore. Include composer.h instead.
11 # endif
12 #endif
13 
14 #include "composer.h"
15 #include "messagesender.h"
16 
17 #include <set>
18 
19 #include <tqlabel.h>
20 #include <tqlistview.h>
21 
22 #include <tqcheckbox.h>
23 #include <tqpushbutton.h>
24 #include <tqclipboard.h>
25 #include <tqpalette.h>
26 #include <tqfont.h>
27 #include <tqptrlist.h>
28 #include <tqvaluevector.h>
29 #include <tqsplitter.h>
30 
31 #include <tdeio/job.h>
32 #include <tdeglobalsettings.h>
33 #include <keditcl.h>
34 #include <ktempdir.h>
35 
36 #include "mailcomposerIface.h"
37 #include "accountmanager.h"
38 
39 #include <libtdepim/addresseelineedit.h>
40 #include <mimelib/mediatyp.h>
41 
42 #include <kleo/enum.h>
43 
44 class TQCloseEvent;
45 class TQComboBox;
46 class TQFrame;
47 class TQGridLayout;
48 class TQListView;
49 class TQPopupMenu;
50 class TQPushButton;
51 class TQCString;
52 class TDECompletion;
53 class KMEdit;
54 class KMComposeWin;
55 class KMFolderComboBox;
56 class KMFolder;
57 class KMMessage;
58 class KMMessagePart;
59 class TDEProcess;
60 class KDirWatch;
61 class TDESelectAction;
62 class TDEFontAction;
63 class TDEFontSizeAction;
64 class TDESelectAction;
65 class KStatusBar;
66 class TDEAction;
67 class TDEToggleAction;
68 class KTempFile;
69 class TDEToolBar;
70 class TDEToggleAction;
71 class TDESelectColorAction;
72 class KURL;
73 class TDERecentFilesAction;
74 class SpellingFilter;
75 class MessageComposer;
76 class RecipientsEditor;
77 class KMLineEdit;
78 class KMLineEditSpell;
79 class KMAtmListViewItem;
80 class SnippetWidget;
81 
82 namespace KPIM {
83  class IdentityCombo;
84  class Identity;
85 }
86 
87 namespace KMail {
88  class AttachmentListView;
89  class DictionaryComboBox;
90  class EditorWatcher;
91 }
92 
93 namespace GpgME {
94  class Error;
95 }
96 
97 //-----------------------------------------------------------------------------
98 class KMComposeWin : public KMail::Composer, public MailComposerIface
99 {
100  TQ_OBJECT
101 
102  friend class ::KMEdit;
103  friend class ::MessageComposer;
104 
105 private: // mailserviceimpl, kmkernel, kmcommands, callback, kmmainwidget
106  KMComposeWin( KMMessage* msg=0, uint identity=0 );
107  ~KMComposeWin();
108 public:
109  static Composer * create( KMMessage * msg = 0, uint identity = 0 );
110 
111  MailComposerIface * asMailComposerIFace() { return this; }
112  const MailComposerIface * asMailComposerIFace() const { return this; }
113 
114 public: // mailserviceimpl
118  void send(int how);
119  void addAttachmentsAndSend(const KURL::List &urls, const TQString &comment, int how);
120  void addAttachment(KURL url,TQString comment);
121  void addAttachment(const TQString &name,
122  const TQCString &cte,
123  const TQByteArray &data,
124  const TQCString &type,
125  const TQCString &subType,
126  const TQCString &paramAttr,
127  const TQString &paramValue,
128  const TQCString &contDisp);
129 public: // kmcommand
130  void setBody (TQString body);
131 
132 private:
136  virtual bool event(TQEvent *e);
137 
141  void readColorConfig();
142 
146  void writeConfig(void);
147 
152  void verifyWordWrapLengthIsAdequate(const TQString&);
153 
154 public: // kmkernel, kmcommands, callback
159  void setMsg(KMMessage* newMsg, bool mayAutoSign=true,
160  bool allowDecryption=false, bool isModified=false);
161 
162  void disableWordWrap();
163 
167  void disableRecipientNumberCheck();
168 
172  void disableForgottenAttachmentsCheck();
173 
183  void ignoreStickyFields();
184 
188  bool isComposing() const { return mComposer != 0; }
189 
190 private: // kmedit
195  KMMessage* msg() const { return mMsg; }
196 
197 public: // kmkernel
201  void setAutoSaveFilename( const TQString & filename );
202 
203 private:
207  bool isModified() const;
208 
212  void setModified( bool modified );
213 
214 public: // kmkernel, callback
219  inline void setAutoDelete(bool f) { mAutoDeleteMsg = f; }
220 
225  void setAutoDeleteWindow( bool f );
226 
227 public: // kmcommand
232  void setFolder(KMFolder* aFolder) { mFolder = aFolder; }
233 public: // kmkernel, kmcommand, mailserviceimpl
237  void setCharset(const TQCString& aCharset, bool forceDefault = false);
238 
239 public: // kmcommand
245  void setReplyFocus( bool hasMessage = true );
246 
251  void setFocusToSubject();
252 
253 private:
257  bool inlineSigningEncryptionSelected();
258 
264  static TQString prettyMimeType( const TQString& type );
265  TQString quotePrefixName() const;
266 
267 private: // kmedit:
268  KMLineEditSpell *sujectLineWidget() const { return mEdtSubject;}
269  void setSubjectTextWasSpellChecked( bool _spell ) {
270  mSubjectTextWasSpellChecked = _spell;
271  }
272  bool subjectTextWasSpellChecked() const { return mSubjectTextWasSpellChecked; }
273 
274  void paste( TQClipboard::Mode mode );
275 
276 public: // callback
278  void setSigningAndEncryptionDisabled( bool v )
279  {
280  mSigningAndEncryptionExplicitlyDisabled = v;
281  }
282 
283 private slots:
284  void polish();
288  void slotPrint();
289  void slotAttachFile();
290  void slotInsertRecentFile(const KURL&);
291  void slotAttachedFile(const KURL&);
292 public slots: // kmkernel, callback
293  void slotSendNow();
294 private slots:
295  void slotSendNowVia( int item );
296  void slotSendLater();
297  void slotSendLaterVia( int item );
298 
299  void getTransportMenu();
300 
304  void slotSaveDraft();
305  void slotSaveTemplate();
306  void slotNewComposer();
307  void slotNewMailReader();
308  void slotClose();
309  void slotHelp();
310 
311  void slotFind();
312  void slotSearchAgain();
313  void slotReplace();
314  void slotUndo();
315  void slotRedo();
316  void slotCut();
317  void slotCopy();
318  void slotPasteClipboard();
319  void slotPasteClipboardAsQuotation();
320  void slotPasteClipboardAsAttachment();
321  void slotAddQuotes();
322  void slotRemoveQuotes();
323  void slotAttachPNGImageData(const TQByteArray &image);
324 
325  void slotMarkAll();
326 
327  void slotFolderRemoved(KMFolder*);
328 
329  void slotEditDone( KMail::EditorWatcher* watcher );
330 
331 public slots: // kmkernel
338  void slotSetAlwaysSend( bool bAlwaysSend );
339 private slots:
343  void slotUpdateFont();
344 
348  void slotAddrBook();
352  void slotInsertFile();
353 
354  void slotSetCharset();
358  void slotSpellcheck();
359  void slotSpellcheckConfig();
360  void slotSubjectTextSpellChecked();
361 
366  void slotSelectCryptoModule( bool init = false );
367 
371  void slotStatusMessage(const TQString &message);
372  void slotEditToolbars();
373  void slotUpdateToolbars();
374  void slotEditKeys();
378  void readConfig( bool reload = false );
382  void slotUpdWinTitle(const TQString& );
383 
388  void slotEncryptToggled(bool);
389 
393  void slotSignToggled(bool);
394 
395 public slots: // kmkernel, callback
399  void slotWordWrapToggled(bool);
400 
401 private slots:
405  void slotAppendSignature();
406 
410  void slotPrependSignature();
411 
415  void slotInsertSignatureAtCursor();
416 
420  void slotInsertMyPublicKey();
421 
425  void slotInsertPublicKey();
426 
430  void slotUpdateAttachActions();
431 
435  void slotAttachPopupMenu(TQListViewItem *, const TQPoint &, int);
436 
441  int currentAttachmentNum();
442 
446  void slotAttachOpen();
447  void slotAttachView();
448  void slotAttachRemove();
449  void slotAttachSave();
450  void slotAttachProperties();
451  void slotAttachOpenWith();
452  void slotAttachEdit();
453  void slotAttachEditWith();
454  void slotAttachmentDragStarted();
455 
460  void slotAddrBookTo();
461  void slotAddrBookFrom();
462  void slotAddrBookReplyTo();
463 
464  void slotCleanSpace();
465 
466  void slotToggleMarkup();
467  void toggleMarkup(bool markup);
468  void htmlToolBarVisibilityChanged( bool visible );
469 
470 // void slotSpellConfigure();
471  void slotSpellcheckDone(int result);
472  void slotSpellcheckDoneClearStatus();
473 
474 public slots: // kmkernel
475  void autoSaveMessage();
476 
477 private slots:
478  void updateCursorPosition();
479 
480  void slotView();
481 
485  void slotIdentityChanged(uint);
486 
490  void slotAttachFileData(TDEIO::Job *, const TQByteArray &);
491  void slotAttachFileResult(TDEIO::Job *);
492 
493  void slotListAction(const TQString &);
494  void slotFontAction(const TQString &);
495  void slotSizeAction(int);
496  void slotAlignLeft();
497  void slotAlignCenter();
498  void slotAlignRight();
499  void slotTextBold();
500  void slotTextItalic();
501  void slotTextUnder();
502  void slotFormatReset();
503  void slotTextColor();
504  void fontChanged( const TQFont & );
505  void alignmentChanged( int );
506 
507 public: // kmkernel, attachmentlistview
508  bool addAttach(const KURL url);
509 
510 public: // kmcommand
514  void addAttach(const KMMessagePart* msgPart);
515 
516 private:
517  const KPIM::Identity & identity() const;
518  uint identityUid() const;
519  Kleo::CryptoMessageFormat cryptoMessageFormat() const;
520  bool encryptToSelf() const;
521 
522 signals:
523  void applyChangesDone( bool );
524  void attachmentAdded( const KURL&, bool success );
525 
526 private:
534  void applyChanges( bool dontSignNorEncrypt, bool dontDisable=false );
535 
541  void rethinkFields(bool fromslot=false);
542 
546  TQWidget *connectFocusMoving( TQWidget *prev, TQWidget *next );
547 
552  void rethinkHeaderLine( int aValue, int aMask, int& aRow,
553  TQLabel* aLbl,
554  TQLineEdit* aEdt, TQPushButton* aBtn = 0,
555  const TQString &toolTip = TQString(),
556  const TQString &whatsThis = TQString() );
557 
558  void rethinkHeaderLine( int value, int mask, int& row,
559  TQLabel* lbl, TQComboBox* cbx, TQCheckBox *chk );
560 
565  bool checkRecipientNumber() const;
566 
567 
568  bool checkTransport() const;
569 
573  void setupActions();
574  void setupStatusBar();
575  void setupEditor();
576 
577 
581  TQString subject() const;
582  TQString to() const;
583  TQString cc() const;
584  TQString bcc() const;
585  TQString from() const;
586  TQString replyTo() const;
587 
593  void setFcc( const TQString &idString );
594 
598  virtual bool queryClose ();
602  virtual bool queryExit ();
603 
607  void openAttach( int index, bool with );
608 
612  void viewAttach( int index );
613 
617  void editAttach( int index, bool openWith );
618 
622  void removeAttach(const TQString &url);
623  void removeAttach(int idx);
624 
628  void msgPartToItem(const KMMessagePart* msgPart, KMAtmListViewItem *lvi,
629  bool loadDefaults = true );
630 
635  void addrBookSelInto();
636 
637  void addrBookSelIntoOld();
638  void addrBookSelIntoNew();
639 
640 private:
645  void setEncryption( bool encrypt, bool setByUser = false );
646 
651  void setSigning( bool sign, bool setByUser = false );
652 
656  bool userForgotAttachment();
657 
662  bool encryptFlagOfAttachment(int idx);
663 
668  bool signFlagOfAttachment(int idx);
669 
670 
678  static void decryptOrStripOffCleartextSignature( TQCString& );
679 
683  bool saveDraftOrTemplate( const TQString &folderName, KMMessage *msg );
684 
688  enum SaveIn { None, Drafts, Templates };
689  void doSend( KMail::MessageSender::SendMethod method=KMail::MessageSender::SendDefault,
690  KMComposeWin::SaveIn saveIn = KMComposeWin::None );
691 
695  int autoSaveInterval() const;
696 
700  void initAutoSave();
701 
706  void updateAutoSave();
707 
711  void cleanupAutoSave();
712 
718  static bool validateAddresses( TQWidget * parent, const TQString & addresses );
719 
726  void setTransport( const TQString & transport );
727 
728  enum SignaturePlacement { Append, Prepend, AtCursor };
729 
734  void insertSignature( SignaturePlacement placement = Append );
735 private slots:
739  void compressAttach(int idx);
740  void uncompressAttach(int idx);
741  void editorFocusChanged(bool gained);
742  void recipientEditorSizeHintChanged();
743  void setMaximumHeaderSize();
744 
745 private:
746  TQWidget *mMainWidget;
747  TQComboBox *mTransport;
748  KMail::DictionaryComboBox *mDictionaryCombo;
749  KPIM::IdentityCombo *mIdentity;
750  KMFolderComboBox *mFcc;
751  KMLineEdit *mEdtFrom, *mEdtReplyTo, *mEdtTo, *mEdtCc, *mEdtBcc;
752  KMLineEditSpell *mEdtSubject;
753  TQLabel *mLblIdentity, *mLblTransport, *mLblFcc;
754  TQLabel *mLblFrom, *mLblReplyTo, *mLblTo, *mLblCc, *mLblBcc, *mLblSubject;
755  TQLabel *mDictionaryLabel;
756  TQCheckBox *mBtnIdentity, *mBtnDictionary, *mBtnTransport, *mBtnFcc;
757  TQPushButton *mBtnTo, *mBtnCc, *mBtnBcc, /* *mBtnFrom, */ *mBtnReplyTo;
758  bool mSpellCheckInProgress;
759  bool mDone;
760  bool mAtmModified;
761  TQListViewItem *mAtmSelectNew;
762 
763  KMEdit* mEditor;
764  TQGridLayout* mGrid;
765  KMMessage *mMsg;
766  TQValueVector<KMMessage*> mComposedMessages;
767  KMail::AttachmentListView* mAtmListView;
768  int mAtmColEncrypt;
769  int mAtmColSign;
770  int mAtmColCompress;
771  int mAtmEncryptColWidth;
772  int mAtmSignColWidth;
773  int mAtmCompressColWidth;
774  TQPtrList<TQListViewItem> mAtmItemList;
775  TQPtrList<KMMessagePart> mAtmList;
776  TQPopupMenu *mAttachMenu;
777  int mOpenId, mOpenWithId, mViewId, mRemoveId, mSaveAsId, mPropertiesId, mEditId, mEditWithId;
778  bool mAutoDeleteMsg;
779  bool mSigningAndEncryptionExplicitlyDisabled;
780  bool mLastSignActionState, mLastEncryptActionState;
781  bool mLastIdentityHasSigningKey, mLastIdentityHasEncryptionKey;
782  KMFolder *mFolder;
783  long mShowHeaders;
784  bool mConfirmSend;
785  bool mDisableBreaking; // Move
786  int mNumHeaders;
787  bool mUseHTMLEditor;
788  bool mHtmlMarkup;
789  TQFont mBodyFont, mFixedFont;
790  TQPtrList<KTempFile> mAtmTempList;
791  TQPalette mPalette;
792  uint mId;
793  TQString mOldSigText;
794 
795  TDEAction *mAttachPK, *mAttachMPK,
796  *mAttachRemoveAction, *mAttachSaveAction, *mAttachPropertiesAction,
797  *mPasteQuotation, *mAddQuoteChars, *mRemQuoteChars;
798  TDERecentFilesAction *mRecentAction;
799 
800  TDEAction *mAppendSignatureAction, *mPrependSignatureAction, *mInsertSignatureAction;
801 
802  TDEToggleAction *mSignAction, *mEncryptAction, *mRequestMDNAction;
803  TDEToggleAction *mUrgentAction, *mAllFieldsAction, *mFromAction;
804  TDEToggleAction *mReplyToAction, *mToAction, *mCcAction, *mBccAction;
805  TDEToggleAction *mSubjectAction;
806  TDEToggleAction *mIdentityAction, *mTransportAction, *mFccAction;
807  TDEToggleAction *mWordWrapAction, *mFixedFontAction, *mAutoSpellCheckingAction;
808  TDEToggleAction *mDictionaryAction, *mSnippetAction;
809 
810  TDESelectAction *listAction;
811  TDEFontAction *fontAction;
812  TDEFontSizeAction *fontSizeAction;
813  TDEToggleAction *alignLeftAction, *alignCenterAction, *alignRightAction;
814  TDEToggleAction *textBoldAction, *textItalicAction, *textUnderAction;
815  TDEToggleAction *plainTextAction, *markupAction;
816  TDEAction *actionFormatColor, *actionFormatReset;
817  TDEAction *mHtmlToolbar;
818 
819  TDESelectAction *mEncodingAction;
820  TDESelectAction *mCryptoModuleAction;
821 
822  TQCString mCharset;
823  TQCString mDefCharset;
824  TQStringList mCharsets;
825  bool mAutoCharset;
826 
827  bool mAlwaysSend;
828 
829  TQStringList mFolderNames;
830  TQValueList<TQGuardedPtr<KMFolder> > mFolderList;
831  TQMap<TDEIO::Job*, KURL> mAttachJobs;
832  KURL::List mAttachFilesPending;
833  int mAttachFilesSend;
834 
835 private:
836  // helper method for slotInsert(My)PublicKey()
837  void startPublicKeyExport();
838  bool canSignEncryptAttachments() const {
839  return cryptoMessageFormat() != Kleo::InlineOpenPGPFormat;
840  }
841 
842  bool mSubjectTextWasSpellChecked;
843 
844  TQString addQuotesToText( const TQString &inputText );
845  TQString removeQuotesFromText( const TQString &inputText );
846  // helper method for rethinkFields
847  int calcColumnWidth(int which, long allShowing, int width);
848 
849 private slots:
850  void slotCompletionModeChanged( TDEGlobalSettings::Completion );
851  void slotConfigChanged();
852 
853  void slotComposerDone( bool );
854 
855  void slotContinueDoSend( bool );
856  void slotContinuePrint( bool );
857  void slotContinueAutoSave();
858 
859  void slotEncryptChiasmusToggled( bool );
860 
865  void slotPublicKeyExportResult( const GpgME::Error & err, const TQByteArray & keydata );
866 
870  void slotAutoSpellCheckingToggled(bool);
871 
875  void slotUpdateSignatureActions();
876 
880  void slotUpdateSignatureAndEncrypionStateIndicators();
881 private:
882  TQColor mForeColor,mBackColor;
883  TQFont mSaveFont;
884  TQSplitter *mHeadersToEditorSplitter;
885  TQWidget* mHeadersArea;
886  TQSplitter *mSplitter;
887  TQSplitter *mSnippetSplitter;
888  struct atmLoadData
889  {
890  KURL url;
891  TQByteArray data;
892  bool insert;
893  TQCString encoding;
894  };
895  TQMap<TDEIO::Job *, atmLoadData> mMapAtmLoadData;
896 
897  // These are for passing on methods over the applyChanges calls
898  KMail::MessageSender::SendMethod mSendMethod;
899  KMComposeWin::SaveIn mSaveIn;
900 
901  TDEToggleAction *mEncryptChiasmusAction;
902  bool mEncryptWithChiasmus;
903 
904  // This is the temporary object that constructs the message out of the
905  // window
906  MessageComposer* mComposer;
907 
908  // Temp var for slotPrint:
909  bool mMessageWasModified;
910 
911  // Temp var for slotInsert(My)PublicKey():
912  TQString mFingerprint;
913 
914  // Temp ptr for saving image from clipboard
915  KTempDir *mTempDir;
916 
917  bool mClassicalRecipients;
918 
919  RecipientsEditor *mRecipientsEditor;
920  int mLabelWidth;
921 
922  TQTimer *mAutoSaveTimer;
923  TQString mAutoSaveFilename;
924  int mLastAutoSaveErrno; // holds the errno of the last try to autosave
925 
926  TQPopupMenu *mActNowMenu;
927  TQPopupMenu *mActLaterMenu;
928 
929  TQMap<KMail::EditorWatcher*, KMMessagePart*> mEditorMap;
930  TQMap<KMail::EditorWatcher*, KTempFile*> mEditorTempFiles;
931 
932  TQLabel *mSignatureStateIndicator;
933  TQLabel *mEncryptionStateIndicator;
934 
935  SnippetWidget *mSnippetWidget;
936  std::set<KTempDir*> mTempDirs;
937 
945  bool mPreserveUserCursorPosition;
946 
947  bool mPreventFccOverwrite;
948  bool mCheckForRecipients;
949  bool mCheckForForgottenAttachments;
950  bool mIgnoreStickyFields;
951 };
952 
953 #endif
954 
Mail folder.
Definition: kmfolder.h:69
This is a Mime Message.
Definition: kmmessage.h:68
A combo box for selecting the dictionary used for spell checking.
Starts an editor for the given URL and emits an signal when editing has been finished.
Definition: editorwatcher.h:39
DCOP interface for mail composer window.
virtual void setBody(TQString body)=0
Set message body.
virtual void addAttachment(KURL url, TQString comment)=0
Add url as attachment with a user-defined comment.
virtual void send(int how)=0
Send message.
This is the widget which gets added to the right TreeToolView.
Definition: snippetwidget.h:46
folderdiaquotatab.h
Definition: aboutdata.cpp:40