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

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: StylesDlg.cpp,v 1.15.2.2 2004/10/21 15:35:24 mike Exp $
  29.  * 
  30.  */
  31. #include <afxext.h>
  32. #include <afxtempl.h>
  33. #include "config.h"
  34. #include "resource.h"
  35. #include "XMLParser.h"
  36. #include "StylesDlg.h"
  37. #ifdef _DEBUG
  38. #define new DEBUG_NEW
  39. #undef THIS_FILE
  40. static char THIS_FILE[] = __FILE__;
  41. #endif
  42. #define MINFSIZE    -5
  43. #define MAXFSIZE    +10
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CStylesDlg dialog
  46. CStylesDlg::CStylesDlg(CWnd* pParent /*=NULL*/)
  47. : CDialog(CStylesDlg::IDD, pParent), m_cur(-1)
  48. {
  49.   m_fmt.Append(XMLParser::GetXMLStyles());
  50.   //{{AFX_DATA_INIT(CStylesDlg)
  51. // NOTE: the ClassWizard will add member initialization here
  52.   //}}AFX_DATA_INIT
  53. }
  54. void CStylesDlg::DoDataExchange(CDataExchange* pDX)
  55. {
  56.   CDialog::DoDataExchange(pDX);
  57.   if (pDX->m_bSaveAndValidate)
  58.     GetValues();
  59.   //{{AFX_DATA_MAP(CStylesDlg)
  60. // NOTE: the ClassWizard will add DDX and DDV calls here
  61.   //}}AFX_DATA_MAP
  62. }
  63. BEGIN_MESSAGE_MAP(CStylesDlg, CDialog)
  64. //{{AFX_MSG_MAP(CStylesDlg)
  65. ON_CBN_SELCHANGE(IDC_ELEMENTS, OnSelchangeElements)
  66. //}}AFX_MSG_MAP
  67. END_MESSAGE_MAP()
  68. /////////////////////////////////////////////////////////////////////////////
  69. // CStylesDlg message handlers
  70. static const TCHAR  *g_onoff[]={
  71.   _T("Off"),
  72.   _T("On"),
  73.   _T("Inherit"),
  74.   0
  75. };
  76. static const TCHAR  *g_colors[]={
  77.   _T("Normal"),
  78.   _T("HL 1"),
  79.   _T("HL 2"),
  80.   _T("HL 3"),
  81.   _T("HL 4"),
  82.   _T("HL 5"),
  83.   _T("HL 6"),
  84.   _T("HL 7"),
  85.   _T("Inherit")
  86. };
  87. static struct {
  88.   BYTE   fmt;
  89.   const TCHAR *name;
  90. }     g_align[]={
  91.   { 0, _T("Default") },
  92.   { Paragraph::right, _T("Right") },
  93.   { Paragraph::center, _T("Center") },
  94.   { Paragraph::justify, _T("Justified") },
  95.   { 0,  _T("Inherit") },
  96.   { 0, 0 }
  97. };
  98. BOOL CStylesDlg::OnInitDialog() 
  99. {
  100.   CDialog::OnInitDialog();
  101. #if POCKETPC
  102.   ((CCeCommandBar *)m_pWndEmptyCB)->LoadToolBar(cIDR_DIALOG);
  103. #endif
  104.   // fill in comboboxes
  105.   int i;
  106.   for (i=MINFSIZE;i<=MAXFSIZE;++i) {
  107.     CString tmp;
  108.     tmp.Format(_T("%+d"),i);
  109.     SendDlgItemMessage(IDC_FONT,CB_ADDSTRING,0,(LPARAM)(const TCHAR *)tmp);
  110.   }
  111.   SendDlgItemMessage(IDC_FONT,CB_ADDSTRING,0,(LPARAM)_T("Inherit"));
  112.   for (i=0;g_onoff[i];++i) {
  113.     SendDlgItemMessage(IDC_FBOLD,CB_ADDSTRING,0,(LPARAM)g_onoff[i]);
  114.     SendDlgItemMessage(IDC_FITALIC,CB_ADDSTRING,0,(LPARAM)g_onoff[i]);
  115.     SendDlgItemMessage(IDC_FUNDERLINE,CB_ADDSTRING,0,(LPARAM)g_onoff[i]);
  116.   }
  117.   for (i=0;g_colors[i];++i)
  118.     SendDlgItemMessage(IDC_COLOR,CB_ADDSTRING,0,(LPARAM)g_colors[i]);
  119.   for (i=0;g_align[i].name;++i)
  120.     SendDlgItemMessage(IDC_ALIGN,CB_ADDSTRING,0,(LPARAM)g_align[i].name);
  121.   for (i=0;i<m_fmt.GetSize();++i)
  122.     if (m_fmt[i].name.GetLength()>0 && m_fmt[i].flags&XMLParser::ElemFmt::FMT) {
  123.       LRESULT idx=SendDlgItemMessage(IDC_ELEMENTS,CB_ADDSTRING,0,(LPARAM)(const TCHAR *)m_fmt[i].name);
  124.       if (idx!=CB_ERR)
  125. SendDlgItemMessage(IDC_ELEMENTS,CB_SETITEMDATA,idx,i);
  126.     }
  127.   SendDlgItemMessage(IDC_ELEMENTS,CB_SETCURSEL);
  128.   SendDlgItemMessage(IDC_LISPIN,UDM_SETRANGE32,-100,100);
  129.   SendDlgItemMessage(IDC_RISPIN,UDM_SETRANGE32,-100,100);
  130.   SendDlgItemMessage(IDC_FIRSTSPIN,UDM_SETRANGE32,-100,100);
  131.   SetValues(0);
  132.   return TRUE;
  133. }
  134. void CStylesDlg::OnSelchangeElements() 
  135. {
  136.   GetValues();
  137.   SetValues(SendDlgItemMessage(IDC_ELEMENTS,CB_GETCURSEL));
  138. }
  139. void CStylesDlg::GetValues() {
  140.   if (m_cur>=0) {
  141.     int   n;
  142.     n=SendDlgItemMessage(IDC_FONT,CB_GETCURSEL);
  143.     if (n==SendDlgItemMessage(IDC_FONT,CB_GETCOUNT)-1)
  144.       n=XMLParser::ElemFmt::NOCHG;
  145.     else
  146.       n+=MINFSIZE;
  147.     m_fmt[m_cur].fsz=n;
  148.     n=SendDlgItemMessage(IDC_FBOLD,CB_GETCURSEL);
  149.     if (n==SendDlgItemMessage(IDC_FBOLD,CB_GETCOUNT)-1)
  150.       n=XMLParser::ElemFmt::NOCHG;
  151.     m_fmt[m_cur].bold=n;
  152.     n=SendDlgItemMessage(IDC_FITALIC,CB_GETCURSEL);
  153.     if (n==SendDlgItemMessage(IDC_FITALIC,CB_GETCOUNT)-1)
  154.       n=XMLParser::ElemFmt::NOCHG;
  155.     m_fmt[m_cur].italic=n;
  156.     n=SendDlgItemMessage(IDC_FUNDERLINE,CB_GETCURSEL);
  157.     if (n==SendDlgItemMessage(IDC_FUNDERLINE,CB_GETCOUNT)-1)
  158.       n=XMLParser::ElemFmt::NOCHG;
  159.     m_fmt[m_cur].underline=n;
  160.     n=SendDlgItemMessage(IDC_COLOR,CB_GETCURSEL);
  161.     if (n==SendDlgItemMessage(IDC_COLOR,CB_GETCOUNT)-1)
  162.       n=XMLParser::ElemFmt::NOCHG;
  163.     m_fmt[m_cur].color=n;
  164.     n=SendDlgItemMessage(IDC_ALIGN,CB_GETCURSEL);
  165.     if (n==SendDlgItemMessage(IDC_ALIGN,CB_GETCOUNT)-1)
  166.       n=XMLParser::ElemFmt::NOCHG;
  167.     else
  168.       n=g_align[n].fmt;
  169.     m_fmt[m_cur].align=n;
  170.     m_fmt[m_cur].lindent=GetDlgItemInt(IDC_LI);
  171.     if (m_fmt[m_cur].lindent==0)
  172.       m_fmt[m_cur].lindent=XMLParser::ElemFmt::NOCHG;
  173.     m_fmt[m_cur].rindent=GetDlgItemInt(IDC_RI);
  174.     if (m_fmt[m_cur].rindent==0)
  175.       m_fmt[m_cur].rindent=XMLParser::ElemFmt::NOCHG;
  176.     m_fmt[m_cur].findent=GetDlgItemInt(IDC_FIRST);
  177.     if (m_fmt[m_cur].findent==0)
  178.       m_fmt[m_cur].findent=XMLParser::ElemFmt::NOCHG;
  179.   }
  180. }
  181. void CStylesDlg::SetValues(int idx) {
  182.   LRESULT   ri=SendDlgItemMessage(IDC_ELEMENTS,CB_GETITEMDATA,idx);
  183.   if (ri==CB_ERR)
  184.     return;
  185.   int n;
  186.   n=m_fmt[ri].fsz;
  187.   if (n==XMLParser::ElemFmt::NOCHG)
  188.     n=SendDlgItemMessage(IDC_FONT,CB_GETCOUNT)-1;
  189.   else {
  190.     if (n<MINFSIZE)
  191.       n=MINFSIZE;
  192.     if (n>MAXFSIZE)
  193.       n=MAXFSIZE;
  194.     n-=MINFSIZE;
  195.   }
  196.   SendDlgItemMessage(IDC_FONT,CB_SETCURSEL,n);
  197.   n=m_fmt[ri].bold;
  198.   if (n==XMLParser::ElemFmt::NOCHG)
  199.     n=SendDlgItemMessage(IDC_FBOLD,CB_GETCOUNT)-1;
  200.   SendDlgItemMessage(IDC_FBOLD,CB_SETCURSEL,n);
  201.   n=m_fmt[ri].italic;
  202.   if (n==XMLParser::ElemFmt::NOCHG)
  203.     n=SendDlgItemMessage(IDC_FITALIC,CB_GETCOUNT)-1;
  204.   SendDlgItemMessage(IDC_FITALIC,CB_SETCURSEL,n);
  205.   n=m_fmt[ri].underline;
  206.   if (n==XMLParser::ElemFmt::NOCHG)
  207.     n=SendDlgItemMessage(IDC_FUNDERLINE,CB_GETCOUNT)-1;
  208.   SendDlgItemMessage(IDC_FUNDERLINE,CB_SETCURSEL,n);
  209.   n=m_fmt[ri].color;
  210.   if (n==XMLParser::ElemFmt::NOCHG)
  211.     n=SendDlgItemMessage(IDC_COLOR,CB_GETCOUNT)-1;
  212.   SendDlgItemMessage(IDC_COLOR,CB_SETCURSEL,n);
  213.   n=m_fmt[ri].align;
  214.   if (n==XMLParser::ElemFmt::NOCHG)
  215.     n=SendDlgItemMessage(IDC_ALIGN,CB_GETCOUNT)-1;
  216.   else {
  217.     for (int i=0;g_align[i].name;++i)
  218.       if (n==g_align[i].fmt) {
  219. n=i;
  220. goto ok;
  221.       }
  222.     n=SendDlgItemMessage(IDC_ALIGN,CB_GETCOUNT)-1;
  223. ok:;
  224.   }
  225.   SendDlgItemMessage(IDC_ALIGN,CB_SETCURSEL,n);
  226.   SetDlgItemInt(IDC_LI,m_fmt[ri].lindent==XMLParser::ElemFmt::NOCHG ? 0 :
  227.     m_fmt[ri].lindent);
  228.   SetDlgItemInt(IDC_RI,m_fmt[ri].rindent==XMLParser::ElemFmt::NOCHG ? 0 :
  229.     m_fmt[ri].rindent);
  230.   SetDlgItemInt(IDC_FIRST,m_fmt[ri].findent==XMLParser::ElemFmt::NOCHG ? 0 :
  231.     m_fmt[ri].findent);
  232.   m_cur=ri;
  233. }
  234. bool CStylesDlg::SaveChanges() {
  235.   XMLParser::FmtArray& fa=XMLParser::GetXMLStyles();
  236.   bool flag=false;
  237.   if (fa.GetSize()==m_fmt.GetSize()) {
  238.     for (int i=0;i<fa.GetSize();++i)
  239.       if (fa[i].align!=m_fmt[i].align ||
  240.   fa[i].bold!=m_fmt[i].bold ||
  241.   fa[i].color!=m_fmt[i].color ||
  242.   fa[i].flags!=m_fmt[i].flags ||
  243.   fa[i].fsz!=m_fmt[i].fsz ||
  244.   fa[i].italic!=m_fmt[i].italic ||
  245.   fa[i].underline!=m_fmt[i].underline ||
  246.   fa[i].lindent!=m_fmt[i].lindent ||
  247.   fa[i].rindent!=m_fmt[i].rindent ||
  248.   fa[i].findent!=m_fmt[i].findent) {
  249. flag=true;
  250. fa[i].align=m_fmt[i].align;
  251. fa[i].bold=m_fmt[i].bold;
  252. fa[i].color=m_fmt[i].color;
  253. fa[i].flags=m_fmt[i].flags;
  254. fa[i].fsz=m_fmt[i].fsz;
  255. fa[i].italic=m_fmt[i].italic;
  256. fa[i].underline=m_fmt[i].underline;
  257. fa[i].lindent=m_fmt[i].lindent;
  258. fa[i].rindent=m_fmt[i].rindent;
  259. fa[i].findent=m_fmt[i].findent;
  260.       }
  261.   }
  262.   return flag;
  263. }