/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ #ifndef _MsgCPane_H_ #define _MsgCPane_H_ #include "rosetta.h" #include "msg.h" #include "msgpane.h" #include "xlate.h" /* The MSG_REPLY_TYPE shares the same space as MSG_CommandType, to avoid possible weird errors, but is restricted to the `composition' commands (MSG_ReplyToSender through MSG_ForwardMessage.) */ typedef MSG_CommandType MSG_REPLY_TYPE; struct MSG_AttachedFile; typedef struct PrintSetup_ PrintSetup; typedef struct _XPDialogState XPDialogState; HG82621 class MSG_NewsHost; class MSG_HTMLRecipients; class MSG_CompositionPane : public MSG_Pane { public: MSG_CompositionPane(MWContext* context, MWContext* old_context, MSG_Prefs* prefs, MSG_CompositionFields* initfields, MSG_Master* master); // Or, if you prefer, construct using below constructor and be sure to // soon call the Initialize() method: MSG_CompositionPane(MWContext* context, MSG_Prefs* prefs, MSG_Master* master); int Initialize(MWContext* old_context, MSG_CompositionFields* initfields); virtual ~MSG_CompositionPane(); virtual MSG_PaneType GetPaneType(); virtual void NotifyPrefsChange(NotifyCode code); virtual MsgERR GetCommandStatus(MSG_CommandType command, const MSG_ViewIndex* indices, int32 numindices, XP_Bool *selectable_p, MSG_COMMAND_CHECK_STATE *selected_p, const char **display_string, XP_Bool * plural_p); virtual MsgERR DoCommand(MSG_CommandType command, MSG_ViewIndex* indices, int32 numindices); const char* GetDefaultURL(); int SetCallbacks(MSG_CompositionPaneCallbacks* callbacks, void* closure); MSG_CompositionFields* GetInitialFields(); MSG_HEADER_SET GetInterestingHeaders(); int SetAttachmentList(struct MSG_AttachmentData*); char* GetAttachmentString(); XP_Bool ShouldAutoQuote(); const char* GetCompHeader(MSG_HEADER_SET); int SetCompHeader(MSG_HEADER_SET, const char*); XP_Bool GetCompBoolHeader(MSG_BOOL_HEADER_SET); int SetCompBoolHeader(MSG_BOOL_HEADER_SET, XP_Bool); const char* GetCompBody(); int SetCompBody(const char*); void ToggleCompositionHeader(uint32 header); XP_Bool ShowingAllCompositionHeaders(); XP_Bool ShowingCompositionHeader(uint32 mask); XP_Bool GetHTMLMarkup(void); void SetHTMLMarkup(XP_Bool flag); MsgERR QuoteMessage(int (*func)(void* closure, const char* data), void* closure); int PastePlaintextQuotation(const char* str); const struct MSG_AttachmentData *GetAttachmentList(); int DownloadAttachments(); char* UpdateHeaderContents(MSG_HEADER_SET which_header, const char* value); const char* GetWindowTitle(); void SetBodyEdited(XP_Bool value); void MailCompositionAllConnectionsComplete(); XP_Bool DeliveryInProgress(); int SendMessageNow(); int QueueMessageForLater(); int SaveMessageAsDraft(); int SaveMessageAsTemplate(); XP_Bool IsDuplicatePost(); const char* GetCompositionMessageID(); void ClearCompositionMessageID(); HG22960 int SanityCheck(int skippast); /* draft */ int SetPreloadedAttachments ( MWContext *context, struct MSG_AttachmentData *attachmentData, struct MSG_AttachedFile *attachments, int attachments_count ); #ifdef MOZ_MAIL_NEWS virtual void SetIMAPMessageUID (MessageKey key); #endif /* MOZ_MAIL_NEWS */ int RetrieveStandardHeaders(MSG_HeaderEntry ** return_list); void SetHeaderEntries(MSG_HeaderEntry * in_list,int count); void ClearComposeHeaders(); int SetHTMLAction(MSG_HTMLComposeAction action) { m_htmlaction = action; return 0; } MSG_HTMLComposeAction GetHTMLAction() {return m_htmlaction;} int PutUpRecipientsDialog(void *pWnd = NULL); int ResultsRecipients(XP_Bool cancelled, int32* nohtml, int32* htmlok); XP_Bool m_confirmed_uuencode_p; // Have we confirmed sending uuencoded data? // For qutoing plain text to html then convert back to plain text void SetLineWidth(int width) { m_lineWidth = width; } int GetLineWidth() { return m_lineWidth; } protected: static void QuoteHTMLDone_S(URL_Struct* url, int status, MWContext* context); void InitializeHeaders(MWContext* old_context, MSG_CompositionFields* fields); char* FigureBcc(XP_Bool newsBcc); static void GetUrlDone_S(PrintSetup*); void GetUrlDone(PrintSetup*); static void DownloadAttachmentsDone_S(MWContext *context, void *fe_data, int status, const char *error_message, struct MSG_AttachedFile *attachmnts); void DownloadAttachmentsDone(MWContext* context, int status, const char* error_message, struct MSG_AttachedFile *attachments); int DoneComposeMessage(MSG_Deliver_Mode deliver_mode); static void DeliveryDoneCB_s(MWContext *context, void *fe_data, int status, const char *error_message); void DeliveryDoneCB(MWContext* context, int status, const char* error_message); HG22860 XP_Bool HasNoMarkup(); MSG_HTMLComposeAction DetermineHTMLAction(); int MungeThroughRecipients(XP_Bool* someNonHTML, XP_Bool* groupNonHTML); static PRBool AskDialogDone_s(XPDialogState *state, char **argv, int argc, unsigned int button); PRBool AskDialogDone(XPDialogState *state, char **argv, int argc, unsigned int button); static PRBool RecipientDialogDone_s(XPDialogState *state, char **argv, int argc, unsigned int button); PRBool RecipientDialogDone(XPDialogState *state, char **argv, int argc, unsigned int button); MSG_REPLY_TYPE m_replyType; /* The kind of message composition in progress (reply, forward, etc.) */ XP_Bool m_markup; /* Whether we should generate messages whose first part is text/html rather than text/plain. */ MSG_AttachmentData *m_attachData; /* null-terminated list of the URLs and desired types currently scheduled for attachment. */ MSG_AttachedFile *m_attachedFiles; /* The attachments which have already been downloaded, and some info about them. */ char *m_defaultUrl; /* Default URL for attaching, etc. */ MSG_CompositionFields* m_initfields; // What all the fields were, // initially. MSG_CompositionFields* m_fields; // Current value of all the fields. char* m_messageId; // Message-Id to use for composition. char* m_attachmentString; // Storage for string to display in UI for // the list of attachments. char* m_quotedText; // The results of quoting the original text. /* Stuff used while quoting a message. */ PrintSetup* m_print; MWContext *m_textContext; char* m_quoteUrl; URL_Struct *m_dummyUrl; Net_GetUrlExitFunc *m_exitQuoting; int (*m_quotefunc)(void* closure, const char* data); void* m_quoteclosure; XP_Bool m_deliveryInProgress; /* True while mail is being sent. */ XP_Bool m_attachmentInProgress; /* True while attachments being saved. */ int m_pendingAttachmentsCount; MSG_Deliver_Mode m_deliver_mode; /* MSG_DelverNow, MSG_QueueForLater, * MSG_SaveAsDraft, MSG_SaveAsTemplate */ XP_Bool m_cited; XP_Bool m_duplicatePost; /* Whether we seem to be trying for a second time to post the same message. (If this is true, then we know to ignore 435 errors from the newsserver.) */ HG92827 MSG_HTMLComposeAction m_htmlaction; MSG_HTMLRecipients* m_htmlrecip; int m_status; // I'm sure this isn't what Terry had in mind... // ### dmb MSG_HEADER_SET m_visible_headers; MSG_NewsHost* m_host; // Which newshost we're posting to. This is // lazily evaluated, so a NULL does necessarily // mean we have no news host specified. XP_Bool m_closeAfterSave; XP_Bool m_haveQuoted; XP_Bool m_haveAttachedVcard; MSG_CompositionPaneCallbacks m_callbacks; void* m_callbackclosure; int m_lineWidth; // for quoting plain text to html then convert back // to plain text }; #endif /* _MsgCPane_H_ */