/*++

   Copyright    (c)    1994-1998    Microsoft Corporation

   Module  Name :

        mime.h

   Abstract:

        Mime mapping dialog

   Author:

        Ronald Meijer (ronaldm)

   Project:

        Internet Services Manager

   Revision History:

--*/

#ifndef _MIME_H_
#define _MIME_H_




class COMDLL CMimeEditDlg : public CDialog
/*++

Class Description:

    MIME editor dialog.

Public Interface:

    CMimeEditDlg  : MIME editor dialog constructor

--*/
{
//
// Construction
//
public:
    //
    // Create new  mime mapping constructor
    //
    CMimeEditDlg(
        IN CWnd * pParent = NULL
        );   

    //
    // Constructor to edit existing MIME mapping
    //
    CMimeEditDlg(
        IN LPCTSTR lpstrExt,
        IN LPCTSTR lpstrMime,
        IN CWnd * pParent = NULL
        );

//
// Dialog Data
//
public:
    //{{AFX_DATA(CMimeEditDlg)
    enum { IDD = IDD_MIME_PROPERTY };
    CButton m_button_Ok;
    CEdit   m_edit_Mime;
    CEdit   m_edit_Extent;
    //}}AFX_DATA

    CString m_strMime;
    CString m_strExt;

//
// Overrides
//
protected:
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMimeEditDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

//
// Implementation
//
protected:
    //
    // Enable/disable controls depending on window status
    //
    void SetControlStates();

    //
    // Extentions must start with a dot, add it if it isn't there
    //
    void CleanExtension(
        IN OUT CString & strExtension
        );

    // Generated message map functions
    //{{AFX_MSG(CMimeEditDlg)
    virtual BOOL OnInitDialog();
    virtual void OnOK();
    //}}AFX_MSG

    afx_msg void OnItemChanged();

    DECLARE_MESSAGE_MAP()
};




class COMDLL CMimeDlg : public CDialog
/*++

Class Description:

    MIME listings dialog

Public Interface:

    CMimeDlg : Constructor for the dialog

--*/
{
//
// Construction
//
public:
    CMimeDlg(
        IN CStringListEx & strlMimeTypes,
        IN CWnd * pParent = NULL
        );  

//
// Dialog Data
//
protected:
    //
    // Build the MIME list from the listbox
    //
    void FillFromListBox();

    //
    // Fill the listbox from the list of MIME types
    //
    void FillListBox();

    //
    // Enable/disable control states depending on dialog data
    //
    void SetControlStates();

    //
    // Build a listbox-suitable display string for the mime type
    //
    void BuildDisplayString(
       IN  CString & strExt,
       IN  CString & strMime,
       OUT CString & strOut
       );

    //
    // As above, but use a metabase internal formatted string for input
    //
    BOOL BuildDisplayString(
        IN  CString & strIn,
        OUT CString & strOut
        );

    //
    // Build a string in the metabase internal format for this mime type
    //
    void BuildMetaString(
       IN  CString & strExt,
       IN  CString & strMime,
       OUT CString & strOut
       );

    //
    // Given the listbox suitable display string, break it in extension
    // and MIME type strings
    //
    BOOL CrackDisplayString(
        IN  CString & strIn,
        OUT CString & strExt,
        OUT CString & strMime
        );

    //
    // Find a MIME entry for the given extension, or return -1 if not found
    //
    int FindMimeType(
        IN const CString & strTargetExt
        );

    //{{AFX_DATA(CMimeDlg)
    enum { IDD = IDD_MIME_TYPES };
    CEdit    m_edit_Extention;
    CEdit    m_edit_ContentType;
    CButton  m_button_Remove;
    CButton  m_button_Edit;
    CButton  m_button_Ok;
    //}}AFX_DATA

    CStringListEx & m_strlMimeTypes;
    CRMCListBox   m_list_MimeTypes;

//
// Overrides
//
protected:
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMimeDlg)
    protected:
    virtual void DoDataExchange(CDataExchange * pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

//
// Implementation
//
protected:
    // Generated message map functions
    //{{AFX_MSG(CMimeDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnButtonEdit();
    afx_msg void OnButtonNewType();
    afx_msg void OnButtonRemove();
    afx_msg void OnDblclkListMimeTypes();
    afx_msg void OnSelchangeListMimeTypes();
    virtual void OnOK();
    //}}AFX_MSG

    afx_msg void OnItemChanged();

    DECLARE_MESSAGE_MAP()


private:
    BOOL m_fDirty;
};


//
// Inline Expansion
//
// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

inline void CMimeEditDlg::CleanExtension(
    IN OUT CString & strExtension
    )
{
    if (strExtension[0] != _T('.'))
    {
        strExtension = _T('.') + strExtension;
    }
}

inline void CMimeDlg::BuildDisplayString(
   IN  CString & strExt,
   IN  CString & strMime,
   OUT CString & strOut
   )
{
    strOut.Format(_T("%s\t%s"), (LPCTSTR)strExt, (LPCTSTR)strMime);
}

inline void CMimeDlg::BuildMetaString(
   IN  CString & strExt,
   IN  CString & strMime,
   OUT CString & strOut
   )
{
    strOut.Format(_T("%s,%s"), (LPCTSTR)strExt, (LPCTSTR)strMime);
}

#endif // _MIME_H_