Index: src/ictranslate/ICTranslateDlg.cpp =================================================================== diff -u -N -rbee51aca3d5d9b67ecac4f528a3203738cc63455 -r50fea83cc4ee863edac0fd3960e2249f99c33b03 --- src/ictranslate/ICTranslateDlg.cpp (.../ICTranslateDlg.cpp) (revision bee51aca3d5d9b67ecac4f528a3203738cc63455) +++ src/ictranslate/ICTranslateDlg.cpp (.../ICTranslateDlg.cpp) (revision 50fea83cc4ee863edac0fd3960e2249f99c33b03) @@ -4,6 +4,7 @@ #include "stdafx.h" #include "ictranslate.h" #include "ICTranslateDlg.h" +#include #ifdef _DEBUG #define new DEBUG_NEW @@ -55,13 +56,21 @@ void CICTranslateDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); + DDX_Control(pDX, IDC_SRCDATA_LIST, m_ctlBaseLanguageList); + DDX_Control(pDX, IDC_DSTDATA_LIST, m_ctlCustomLanguageList); + DDX_Control(pDX, IDC_SRCDATA_EDIT, m_ctlSrcText); + DDX_Control(pDX, IDC_DSTDATA_EDIT, m_ctlDstText); } BEGIN_MESSAGE_MAP(CICTranslateDlg, CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP + ON_COMMAND(ID_FILE_OPENBASETRANSLATION, &CICTranslateDlg::OnFileOpenBaseTranslation) + ON_COMMAND(ID_FILE_OPENYOURTRANSLATION, &CICTranslateDlg::OnFileOpenYourTranslation) + ON_NOTIFY(LVN_ITEMCHANGED, IDC_SRCDATA_LIST, &CICTranslateDlg::OnItemChangedSrcDataList) + ON_NOTIFY(LVN_ITEMCHANGED, IDC_DSTDATA_LIST, &CICTranslateDlg::OnItemChangedDstDataList) END_MESSAGE_MAP() @@ -81,8 +90,7 @@ if (pSysMenu != NULL) { CString strAboutMenu; - strAboutMenu.LoadString(IDS_ABOUTBOX); - if (!strAboutMenu.IsEmpty()) + if(strAboutMenu.LoadString(IDS_ABOUTBOX)) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); @@ -94,8 +102,24 @@ SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon - // TODO: Add extra initialization here + m_ctlBaseLanguageList.SetExtendedStyle(LVS_EX_FULLROWSELECT); + m_ctlCustomLanguageList.SetExtendedStyle(LVS_EX_FULLROWSELECT); + // setup the lists + LVCOLUMN lvc; + lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT; + lvc.fmt = LVCFMT_LEFT; + lvc.cx = 50; + lvc.pszText = _T("ID"); + + m_ctlBaseLanguageList.InsertColumn(0, &lvc); + m_ctlCustomLanguageList.InsertColumn(0, &lvc); + + lvc.cx = 150; + lvc.pszText = _T("Text"); + m_ctlBaseLanguageList.InsertColumn(1, &lvc); + m_ctlCustomLanguageList.InsertColumn(1, &lvc); + return TRUE; // return TRUE unless you set the focus to a control } @@ -148,3 +172,147 @@ return static_cast(m_hIcon); } +void CICTranslateDlg::OnFileOpenBaseTranslation() +{ + CFileDialog fd(TRUE, _T(".lng"), _T(""), OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, _T("Language files (*.lng)|*.lng|All files(*.*)|*.*||"), this); + if(fd.DoModal() == IDOK) + { + if(!m_ldBase.ReadTranslation(fd.GetPathName())) + AfxMessageBox(_T("Reading file failed")); + + // add texts to the list + m_ldBase.EnumStrings(&EnumLngStrings, &m_ctlBaseLanguageList); + } +} + +void CICTranslateDlg::OnFileOpenYourTranslation() +{ + CFileDialog fd(TRUE, _T(".lng"), _T(""), OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, _T("Language files (*.lng)|*.lng|All files(*.*)|*.*||"), this); + if(fd.DoModal() == IDOK) + { + if(!m_ldCustom.ReadTranslation(fd.GetPathName())) + AfxMessageBox(_T("Reading file failed")); + + // add texts to the list + m_ctlCustomLanguageList.DeleteAllItems(); + m_ldCustom.EnumStrings(&EnumLngStrings, &m_ctlCustomLanguageList); + } +} + +void CICTranslateDlg::EnumLngStrings(uint_t uiID, const ictranslate::CTranslationItem* pTranslationItem, ptr_t pData) +{ + CListCtrl* pList = (CListCtrl*)pData; + assert(pTranslationItem); + if(!pTranslationItem) + return; + CString strID; + strID.Format(UIFMT, uiID); + + LVITEM lvi; + lvi.mask = LVIF_TEXT | LVIF_PARAM; + lvi.pszText = (PTSTR)(PCTSTR)strID; + lvi.iItem = 0; + lvi.iSubItem = 0; + lvi.lParam = uiID; + + pList->InsertItem(&lvi); + + lvi.mask = LVIF_TEXT; + lvi.pszText = (PTSTR)pTranslationItem->GetText(); + lvi.iItem = 0; + lvi.iSubItem = 1; + + pList->SetItem(&lvi); +} + +void CICTranslateDlg::OnItemChangedSrcDataList(NMHDR *pNMHDR, LRESULT *pResult) +{ + LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); + *pResult = 0; + + if(pNMLV->uNewState & LVIS_SELECTED) + { + // set the text to the edit box + m_ctlSrcText.SetWindowText(m_ctlBaseLanguageList.GetItemText(pNMLV->iItem, 1)); + + uint_t uiID = pNMLV->lParam; + + // to avoid infinite loop of selections, check if the current selection is already valid + POSITION pos = m_ctlCustomLanguageList.GetFirstSelectedItemPosition(); + if(pos) + { + int iPos = m_ctlCustomLanguageList.GetNextSelectedItem(pos); + uint_t uiCurrentID = m_ctlCustomLanguageList.GetItemData(iPos); + if(uiID == uiCurrentID) + return; + } +// m_ctlCustomLanguageList.SetItemState(-1, 0, LVIS_SELECTED); + + // search in the second list for the specified id + int iCount = m_ctlCustomLanguageList.GetItemCount(); + for(int i = 0; i < iCount; i++) + { + uint_t uiCustomID = m_ctlCustomLanguageList.GetItemData(i); + if(uiCustomID == uiID) + { + m_ctlCustomLanguageList.EnsureVisible(i, FALSE); + m_ctlCustomLanguageList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); + break; + } + } + } + else if(pNMLV->uOldState & LVIS_SELECTED) + { + m_ctlCustomLanguageList.SetItemState(-1, 0, LVIS_SELECTED); + m_ctlDstText.SetWindowText(_T("")); + } +} + +void CICTranslateDlg::OnItemChangedDstDataList(NMHDR *pNMHDR, LRESULT *pResult) +{ + LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); + *pResult = 0; + + if(pNMLV->uNewState & LVIS_SELECTED) + { + // set the text to the edit box + m_ctlDstText.SetWindowText(m_ctlCustomLanguageList.GetItemText(pNMLV->iItem, 1)); + + uint_t uiID = pNMLV->lParam; + + // to avoid infinite loop of selections, check if the current selection is already valid + POSITION pos = m_ctlBaseLanguageList.GetFirstSelectedItemPosition(); + if(pos) + { + int iPos = m_ctlBaseLanguageList.GetNextSelectedItem(pos); + uint_t uiCurrentID = m_ctlBaseLanguageList.GetItemData(iPos); + if(uiID == uiCurrentID) + return; + } +// m_ctlBaseLanguageList.SetItemState(-1, 0, LVIS_SELECTED); + + // search in the second list for the specified id + int iCount = m_ctlBaseLanguageList.GetItemCount(); + for(int i = 0; i < iCount; i++) + { + uint_t uiCustomID = m_ctlBaseLanguageList.GetItemData(i); + if(uiCustomID == uiID) + { + m_ctlBaseLanguageList.EnsureVisible(i, FALSE); + m_ctlBaseLanguageList.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); + break; + } + } + } + else if(pNMLV->uOldState & LVIS_SELECTED) + { + m_ctlBaseLanguageList.SetItemState(-1, 0, LVIS_SELECTED); + m_ctlSrcText.SetWindowText(_T("")); + } +} + +void CICTranslateDlg::UpdateCustomListImages() +{ + int iCount = m_ctlCustomLanguageList.GetItemCount(); + +}