DictSetupDlg.cpp
上传用户:hmc_gdtv
上传日期:2013-08-04
资源大小:798k
文件大小:6k
源码类别:

Windows Mobile

开发平台:

Visual C++

  1. /*
  2.  * Copyright (c) 2001,2002,2003 Mike Matsnev.  All Rights Reserved.
  3.  *
  4.  * Redistribution and use in source and binary forms, with or without
  5.  * modification, are permitted provided that the following conditions
  6.  * are met:
  7.  *
  8.  * 1. Redistributions of source code must retain the above copyright
  9.  *    notice immediately at the beginning of the file, without modification,
  10.  *    this list of conditions, and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. Absolutely no warranty of function or purpose is made by the author
  15.  *    Mike Matsnev.
  16.  *
  17.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  19.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  20.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  22.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  23.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  24.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  25.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  26.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  * 
  28.  * $Id: DictSetupDlg.cpp,v 1.6.2.4 2004/10/21 15:35:24 mike Exp $
  29.  * 
  30.  */
  31. #include <afxcmn.h>
  32. #include <afxtempl.h>
  33. #include <afxext.h>
  34. #include "resource.h"
  35. #include "ptr.h"
  36. #include "DictSetupDlg.h"
  37. #include "TextViewNG.h"
  38. #include "ZipFile.h"
  39. #include "FileOpenDialog.h"
  40. #include "Unicode.h"
  41. #include "TextParser.h"
  42. #include "Dictionary.h"
  43. #include "config.h"
  44. #ifdef _DEBUG
  45. #define new DEBUG_NEW
  46. #undef THIS_FILE
  47. static char THIS_FILE[] = __FILE__;
  48. #endif
  49. static const TCHAR  *g_res_dicts[]={
  50.   _T(":Disable"),
  51. #ifdef _WIN32_WCE
  52.   _T(":SlovoEd"),
  53.   _T(":Lingvo"),
  54. #endif
  55. };
  56. #define RESERVED_DICTS ((int)(sizeof(g_res_dicts)/sizeof(g_res_dicts[0])))
  57. /////////////////////////////////////////////////////////////////////////////
  58. // CDictSetupDlg dialog
  59. CDictSetupDlg::CDictSetupDlg(CWnd* pParent /*=NULL*/)
  60. : CDialog(CDictSetupDlg::IDD, pParent), m_cur(0)
  61. {
  62.   //{{AFX_DATA_INIT(CDictSetupDlg)
  63. // NOTE: the ClassWizard will add member initialization here
  64.   //}}AFX_DATA_INIT
  65. }
  66. void CDictSetupDlg::DoDataExchange(CDataExchange* pDX)
  67. {
  68.   CDialog::DoDataExchange(pDX);
  69.   //{{AFX_DATA_MAP(CDictSetupDlg)
  70. // NOTE: the ClassWizard will add DDX and DDV calls here
  71.   //}}AFX_DATA_MAP
  72. }
  73. BEGIN_MESSAGE_MAP(CDictSetupDlg, CDialog)
  74. //{{AFX_MSG_MAP(CDictSetupDlg)
  75. ON_COMMAND(IDC_ADD_DICT,OnAddDict)
  76. ON_COMMAND(IDC_REMOVE_DICT,OnRemoveDict)
  77. //}}AFX_MSG_MAP
  78. END_MESSAGE_MAP()
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CDictSetupDlg message handlers
  81. BOOL CDictSetupDlg::OnInitDialog() 
  82. {
  83.   CDialog::OnInitDialog();
  84. #if POCKETPC
  85.   ((CCeCommandBar *)m_pWndEmptyCB)->LoadToolBar(cIDR_DIALOG);
  86. #endif
  87.   // fetch dictionaries list
  88.   CStringArray list;
  89.   GetDictList(list,m_cur);
  90.   for (int d=RESERVED_DICTS;d<list.GetSize();d++) {
  91.     int   index=SendDlgItemMessage(IDC_DICTLIST,LB_ADDSTRING,0,
  92.   (LPARAM)(LPCTSTR)list[d]);
  93.     if (index==LB_ERR)
  94.       break;
  95.     SendDlgItemMessage(IDC_DICTLIST,LB_SETITEMDATA,index,m_cur-RESERVED_DICTS==d);
  96.   }
  97.   return TRUE;
  98. }
  99. void  CDictSetupDlg::OnAddDict() {
  100.   if (SendDlgItemMessage(IDC_DICTLIST,LB_GETCOUNT)>=MAXDICT)
  101.     return;
  102.   CString   path=GetFileName(NULL,this);
  103.   if (path.GetLength()>0) {
  104.     CString msg;
  105.     IDict *d=IDict::Create(path,&msg);
  106.     if (!d)
  107.       MessageBox(_T("Can't open dictionary: ")+msg,_T("Error"),MB_ICONERROR|MB_OK);
  108.     else {
  109.       SendDlgItemMessage(IDC_DICTLIST,LB_ADDSTRING,0,(LPARAM)(LPCTSTR)path);
  110.       delete d;
  111.     }
  112.   }
  113. }
  114. void  CDictSetupDlg::OnRemoveDict() {
  115.   int index=SendDlgItemMessage(IDC_DICTLIST,LB_GETCURSEL);
  116.   if (index!=LB_ERR)
  117.     SendDlgItemMessage(IDC_DICTLIST,LB_DELETESTRING,index);
  118. }
  119. void CDictSetupDlg::OnOK() {
  120.   int     sel=SendDlgItemMessage(IDC_DICTLIST,LB_GETCURSEL);
  121.   int     count=SendDlgItemMessage(IDC_DICTLIST,LB_GETCOUNT);
  122.   CStringArray list;
  123.   int       cur=m_cur >= RESERVED_DICTS ? 0 : m_cur;
  124.   for (int i=0;i<count;++i) {
  125.     if (i==sel || (sel==LB_ERR && SendDlgItemMessage(IDC_DICTLIST,LB_GETITEMDATA,i)))
  126.       cur=i+RESERVED_DICTS;
  127.     int   len=SendDlgItemMessage(IDC_DICTLIST,LB_GETTEXTLEN,i);
  128.     CString tmp;
  129.     TCHAR *cp=tmp.GetBuffer(len);
  130.     SendDlgItemMessage(IDC_DICTLIST,LB_GETTEXT,i,(LPARAM)cp);
  131.     tmp.ReleaseBuffer(len);
  132.     list.Add(tmp);
  133.   }
  134.   PutDictList(list,cur);
  135.   CDialog::OnOK();
  136. }
  137. void  CDictSetupDlg::GetDictList(CStringArray& list,int& cur) {
  138.   list.RemoveAll();
  139.   cur=0;
  140.   for (int k=0;k<RESERVED_DICTS;++k)
  141.     list.Add(g_res_dicts[k]);
  142.   // fetch dictionaries list
  143.   CString   dlist=CTVApp::GetStr(_T("Dictionary"));
  144.   int i=0;
  145.   int cc=0;
  146.   while (i<dlist.GetLength() && dlist[i]>='0' && dlist[i]<='9') {
  147.     cc=cc*10+dlist[i]-'0';
  148.     ++i;
  149.   }
  150.   if (i<dlist.GetLength() && dlist[i]==_T('?'))
  151.     ++i;
  152.   for (;i<dlist.GetLength();) {
  153.     int   end=dlist.Find(_T('?'),i);
  154.     if (end<0)
  155.       end=dlist.GetLength();
  156.     if (dlist[i]==_T('*')) {
  157.       ++i;
  158.       if (i>=end)
  159. continue;
  160.     }
  161.     list.Add(dlist.Mid(i,end-i));
  162.     i=end+1;
  163.   }
  164.   if (cc>=0 && cc<list.GetSize())
  165.     cur=cc;
  166. }
  167. void  CDictSetupDlg::PutDictList(const CStringArray& list,int cur) {
  168.   CString   dlist;
  169.   dlist.Format(_T("%d"),cur);
  170.   for (int i=0;i<list.GetSize();++i) {
  171.     dlist+=_T("?");
  172.     dlist+=list[i];
  173.   }
  174.   CTVApp::SetStr(_T("Dictionary"),dlist);
  175. }
  176. void CDictSetupDlg::SetActiveDict(int cur) {
  177.   int cd;
  178.   CStringArray list;
  179.   GetDictList(list,cd);
  180.   list.RemoveAt(0,RESERVED_DICTS);
  181.   PutDictList(list,cur);
  182. }