/* -*- 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.0 (the "NPL"); you may not use this file except in
 * compliance with the NPL.  You may obtain a copy of the NPL at
 * http://www.mozilla.org/NPL/
 *
 * Software distributed under the NPL is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
 * for the specific language governing rights and limitations under the
 * NPL.
 *
 * The Initial Developer of this code under the NPL is Netscape
 * Communications Corporation.  Portions created by Netscape are
 * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
 * Reserved.
 */
#ifndef __COMPBAR_H
#define __COMPBAR_H

#include <afxwin.h>
#include <afxext.h>
#include "compstd.h"
#include "msgcom.h"
#include "addrbook.h"
#include "apiaddr.h"
#include "apiimg.h"
#include "collapse.h"
#include "tooltip.h"

class CComposeEdit;
class CNSAddressList;
class CNSAttachmentList;

#define MAX_TIPS    4

class CComposeSubjectEdit;

class CComposeBar : public CDialogBar,
		    public IAddressParent
{
protected:
    class CNSComposeToolInfo 
    {
    public:
   	CRect m_rect;
    UINT m_idText;
   	WPARAM m_idCommand;
    CString m_csToolTip;
   	void Initialize(UINT idText, CRect & rect, WPARAM idCommand)
   	{
   	    m_csToolTip = szLoadString(idText);
        m_idText = idText;
   	    m_rect = rect;
   	    m_idCommand = idCommand;
   	}
    };
    LPUNKNOWN m_pUnkImage;
    LPUNKNOWN m_pUnkAddressControl;
    LPIMAGEMAP m_pIImage;
public:
	CNSToolTip2  * m_pToolTip;
    CNSCollapser collapser;
    LPADDRESSCONTROL m_pIAddressList;
    LPUNKNOWN m_pUnkAddress;
    int m_iMinSize;
    int m_iMaxSize;
    int m_iHeight;
    int m_iBoxHeight;
    int m_cxChar;
    int m_iFirstX;
    int m_iSelectedTab;
    int m_iPriorityIdx;
    char * m_pszMessageFormat;
    char * m_pszCharSet;
    BOOL m_bReceipt;
    BOOL m_bEncrypted;
    BOOL m_bSigned;
    BOOL m_bAttachVCard;
    BOOL m_bUse8Bit;
    BOOL m_bUseUUENCODE;
    int m_iTotalAttachments;
    int m_iPrevHeight;
    CNSComposeToolInfo m_ToolTipInfo[MAX_TIPS];
    HFONT m_cfTextFont;
    HFONT m_cfStaticFont;
    HFONT m_cfSubjectFont;
    CComposeEdit * m_pComposeEdit;
#ifdef BUTTONS
    CWnd * m_pButton[3];
#endif
    CButton * m_pReturnReceipt;
    CButton * m_pEncrypted;
    CButton * m_pSigned;
    CButton * m_pUse8Bit;
    CButton * m_pUseUUENCODE;

    CNSAttachmentList * m_pAttachmentList;
    CWnd * m_pWidget;

    CComposeSubjectEdit * m_pSubjectEdit;
    CStatic * m_pPriorityText;
    CStatic * m_pSubjectEditText;
    CStatic * m_pMessageFormatText;
    CComboBox * m_pPriority;
    CComboBox * m_pMessageFormat;
    CNSAttachDropTarget * m_pDropTarget;

    virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz );
    void Enable3d(BOOL bEnable);
   
public:

    CEdit * m_pSubject;
    BOOL m_bClosed;
    BOOL m_bHidden;
    BOOL m_bSizing;
    BOOL m_bCanSize;
    int  m_iY;
    
    CComposeBar ( );
    ~CComposeBar ( );
    
    LPADDRESSCONTROL GetAddressWidgetInterface();

    void ShowTab(int idx);
    int GetTab();
    void AttachFile(void);
    void AttachUrl(void);
    inline BOOL IsCollapsed(void) { return m_bClosed; }

    void SetComposeEdit ( CComposeEdit * pEdit )
    {
    	m_pComposeEdit = pEdit;
    }
    CComposeEdit * GetComposeEdit ( void )
    {
    	return m_pComposeEdit;
    }
	void SetCSID(int m_iCSID);
    void SetSigned(BOOL bSigned) { m_bSigned = bSigned; }
    void SetEncrypted(BOOL bEncrypted) { m_bEncrypted = bEncrypted; }
	void SetReturnReceipt(BOOL bReceipt) { m_bReceipt = bReceipt; }
	void SetUse8Bit(BOOL bUse8Bit) { m_bUse8Bit = bUse8Bit; }
	void SetUseUUENCODE(BOOL bUseUUENCODE) {m_bUseUUENCODE = bUseUUENCODE; }
    BOOL GetEncrypted(void) { return m_bEncrypted; }
    BOOL GetSigned(void) { return m_bSigned; }
	BOOL GetReturnReceipt(void) { return m_bReceipt; }
	BOOL GetUse8Bit(void) { return m_bUse8Bit; }
	BOOL GetUseUUENCODE(void) { return m_bUseUUENCODE; }
    void Draw3DStaticEdgeSimulation(CDC & dc, CRect &rect, BOOL bReverse = FALSE);
    void DrawVerticalTab(CDC &, int, CRect &);
    BOOL IsAttachmentsMailOnly(void);
	BOOL TabControl(BOOL bShift = FALSE, BOOL bControl = FALSE, CWnd * pWnd = (CWnd*)TABCTRL_HOME);
    void CalcFieldLayout(void);
    void DisplayHeaders ( MSG_HEADER_SET );
    int GetHeightNeeded ( void );
    void CreateAddressingBlock(void);
    void CreateStandardFields(void);
    void CreateAddressPage(void);
    void CreateAttachmentsPage(void);
    void CreateOptionsPage(void);
    void DestroyOptionsPage(void);
    void DestroyAddressPage(void);
    void DestroyStandardFields(void);
    void DestroyAttachmentsPage(void);
    void UpdateFixedSize ( );
    void UpdateHeaderInfo ( void );
	void UpdateRecipientInfo ( char *pTo, char *pCc, char *pBcc );
    int  GetTotalAttachments(void);
    void UpdateAttachmentInfo(int nTotal = -1);
    void TabChanging(int tab);
    void TabChanged(int tab);
	void GetWidgetRect(CRect &WinRect, CRect &rect);
    BOOL GetAttachMyCard() { return m_bAttachVCard; }
    void SetAttachMyCard(BOOL bAttach) { m_bAttachVCard = bAttach; }
    void Cleanup(void);
    void UpdateSecurityOptions(void);

    virtual void AddedItem (HWND hwnd, LONG id,int index);
    virtual int	 ChangedItem (char * pString, int index, HWND hwnd, char ** ppszFullName, unsigned long* entryID = NULL, UINT* bitmapID = NULL);
    virtual void DeletedItem (HWND hwnd, LONG id,int index);
    virtual char * NameCompletion (char *);
    virtual int OnToolHitTest( CPoint point, TOOLINFO* pTI ) const;
    BOOL ProcessVCardData(COleDataObject * pDataObject,CPoint &point);

    void OnAttachTab(void);
    void OnAddressTab(void);
    void OnOptionsTab(void);
    void OnCollapse(void);
    void OnToggleShow(void);
    inline BOOL IsVisible() {return !m_bHidden;}

protected:
#ifdef XP_WIN16
    BOOL PreTranslateMessage( MSG* pMsg );
#endif
    void UpdateOptionsInfo();
  
    afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
    afx_msg void    OnDropFiles( HDROP hDropInfo );
    afx_msg void OnMouseMove( UINT nFlags, CPoint point );
    afx_msg int  OnCreate ( LPCREATESTRUCT );
    afx_msg void OnPaint();
    afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
    afx_msg void OnButtonAttach(void);
    afx_msg void OnSize( UINT nType, int cx, int cy );
    afx_msg LONG OnLeavingLastField(UINT, LONG);
    afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
    afx_msg void OnLButtonUp( UINT nFlags, CPoint point );
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg void OnTimer( UINT  nIDEvent );
    afx_msg void OnUpdateToolBar(void);
    afx_msg void OnUpdateOptions(void);

    DECLARE_MESSAGE_MAP()

    friend class CComposeFrame;

};

#endif

