diff --git a/cck/driver/CChooseFolderDialog.cpp b/cck/driver/CChooseFolderDialog.cpp new file mode 100644 index 00000000000..3c9db0d93c8 --- /dev/null +++ b/cck/driver/CChooseFolderDialog.cpp @@ -0,0 +1,175 @@ +#include "stdafx.h" +#include "CChooseFolderDialog.h" + +///////////////////////////////////////////////////////////////////////////// +// CChooseFolderDialog +// + +BEGIN_MESSAGE_MAP(CChooseFolderDialog, CDialog) + ON_BN_CLICKED(IDC_NEW_FOLDER, OnNewFolder) + ON_CBN_SELCHANGE(IDC_COMBO_SERVERS, OnSelectServer) + ON_CBN_SELCHANGE(IDC_COMBO_FOLDERS, OnSelectFolder) +END_MESSAGE_MAP() + +CChooseFolderDialog::CChooseFolderDialog(CWnd *pParent, char* pFolderPath, int nTypeID) + : CDialog(IDD, pParent) +{ + m_pFolderPath = pFolderPath; + m_nTypeID = nTypeID; + + if (nTypeID == TYPE_SENTMAIL || nTypeID == TYPE_SENTNEWS) + m_nDefaultID = MK_MSG_SENT_L10N_NAME; + else if (nTypeID == TYPE_DRAFT) + m_nDefaultID = MK_MSG_DRAFTS_L10N_NAME; + else if (nTypeID == TYPE_TEMPLATE) + m_nDefaultID = MK_MSG_TEMPLATES_L10N_NAME; +} + +BOOL CChooseFolderDialog::OnInitDialog() +{ + BOOL ret = CDialog::OnInitDialog(); + + if (m_nTypeID == TYPE_SENTNEWS) + SetDlgItemText(IDC_STATIC_TITLE, szLoadString(IDS_COPY_NEWS_MSG)); + else if (m_nTypeID == TYPE_DRAFT) + SetDlgItemText(IDC_STATIC_TITLE, szLoadString(IDS_COPY_DRAFTS)); + else if (m_nTypeID == TYPE_TEMPLATE) + SetDlgItemText(IDC_STATIC_TITLE, szLoadString(IDS_COPY_TEMPLATES)); + + CString formatString, defaultTitle; + formatString.LoadString(IDS_SPECIAL_FOLDER); + defaultTitle.Format(LPCTSTR(formatString), XP_GetString(m_nDefaultID)); + SetDlgItemText(IDC_RADIO_SENT, LPCTSTR(defaultTitle)); + + if ( ret ) { + // Subclass Server combo + m_ServerCombo.SubclassDlgItem( IDC_COMBO_SERVERS, this ); + m_ServerCombo.NoPrettyName(); + m_ServerCombo.PopulateMailServer( WFE_MSGGetMaster() ); + if (SetServerComboCurSel(m_ServerCombo.GetSafeHwnd(), + m_pFolderPath, m_nDefaultID)) + CheckDlgButton(IDC_RADIO_SENT, TRUE); + else + CheckDlgButton(IDC_RADIO_OTHER, TRUE); + + // Subclass folder combo + m_FolderCombo.SubclassDlgItem( IDC_COMBO_FOLDERS, this ); + m_FolderCombo.PopulateMail( WFE_MSGGetMaster() ); + SetFolderComboCurSel(m_FolderCombo.GetSafeHwnd(), + m_pFolderPath, m_nDefaultID); + } + + return ret; +} + +void CChooseFolderDialog::OnOK() +{ + MSG_FolderInfo *pFolder = NULL; + MSG_FolderLine folderLine; + MSG_Master* pMaster = WFE_MSGGetMaster(); + + if (IsDlgButtonChecked(IDC_RADIO_SENT)) + { + pFolder = (MSG_FolderInfo*)m_ServerCombo.GetItemData(m_ServerCombo.GetCurSel()); + m_szFolder = XP_GetString(m_nDefaultID); + if (MSG_GetFolderLineById(pMaster, pFolder, &folderLine)) + m_szServer = folderLine.name; + URL_Struct *url = MSG_ConstructUrlForFolder(NULL, pFolder); + if (MK_MSG_SENT_L10N_NAME == m_nDefaultID && + MAILBOX_TYPE_URL == NET_URL_Type(url->address)) + { //local mail + int nPos = strlen("mailbox:/"); + m_szPrefUrl = &url->address[nPos]; + m_szPrefUrl += "\\"; + m_szPrefUrl += m_szFolder; + LPTSTR pBuffer = m_szPrefUrl.GetBuffer(m_szPrefUrl.GetLength()); + UnixToDosString(pBuffer); + m_szPrefUrl.ReleaseBuffer(); + } + else + { //imap + m_szPrefUrl = url->address; + // m_szPrefUrl += "/"; + // m_szPrefUrl += m_szFolder; + } + } + else if (IsDlgButtonChecked(IDC_RADIO_OTHER)) + { + pFolder = (MSG_FolderInfo*)m_FolderCombo.GetItemData(m_FolderCombo.GetCurSel()); + + if (MSG_GetFolderLineById(pMaster, pFolder, &folderLine)) + { + m_szFolder = folderLine.name; + MSG_FolderInfo* pHostFolderInfo = GetHostFolderInfo(pFolder); + if (pHostFolderInfo) + { //imap + if (MSG_GetFolderLineById(pMaster, pHostFolderInfo, &folderLine)) + m_szServer = folderLine.name; + URL_Struct *url = MSG_ConstructUrlForFolder(NULL, pFolder); + m_szPrefUrl = url->address; + } + else + { //local mail + m_szServer = XP_GetString(MK_MSG_LOCAL_MAIL); + URL_Struct *url = MSG_ConstructUrlForFolder(NULL, pFolder); + if (MK_MSG_SENT_L10N_NAME == m_nDefaultID) + { + int nPos = strlen("mailbox:/"); + m_szPrefUrl = &url->address[nPos]; + LPTSTR pBuffer = m_szPrefUrl.GetBuffer(m_szPrefUrl.GetLength()); + UnixToDosString(pBuffer); + m_szPrefUrl.ReleaseBuffer(); + } + else + m_szPrefUrl = url->address; + } + } + } + + CDialog::OnOK(); +} + +void CChooseFolderDialog::DoDataExchange(CDataExchange* pDX) +{ + CDialog::DoDataExchange(pDX); +} + +void CChooseFolderDialog::OnNewFolder() +{ + CPrefNewFolderDialog newFolderDlg( this, NULL); + if (IDOK == newFolderDlg.DoModal()) + { + MSG_FolderInfo *pNewFolder = newFolderDlg.GetNewFolder(); + m_FolderCombo.PopulateMail(WFE_MSGGetMaster()); + + for (int i = m_FolderCombo.GetCount(); i >= 0 ; i--) + { + MSG_FolderInfo *pFolderInfo = (MSG_FolderInfo*)m_FolderCombo.GetItemData(i); + if (pNewFolder == pFolderInfo) + { + m_FolderCombo.SetCurSel(i); + break; + } + } + OnSelectFolder(); //check the radio button + } +} + +void CChooseFolderDialog::OnSelectServer() +{ + if (!IsDlgButtonChecked(IDC_RADIO_SENT)) + { + CheckDlgButton(IDC_RADIO_SENT, TRUE); + CheckDlgButton(IDC_RADIO_OTHER, FALSE); + } +} + +void CChooseFolderDialog::OnSelectFolder() +{ + if (!IsDlgButtonChecked(IDC_RADIO_OTHER)) + { + CheckDlgButton(IDC_RADIO_OTHER, TRUE); + CheckDlgButton(IDC_RADIO_SENT, FALSE); + } +} +