⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stylesdlg.cpp

📁 俄罗斯人开发的大名鼎鼎的Pocket Pc 阅读器haaliread的源代码,visual c
💻 CPP
字号:
/*
 * Copyright (c) 2001,2002,2003 Mike Matsnev.  All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice immediately at the beginning of the file, without modification,
 *    this list of conditions, and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. Absolutely no warranty of function or purpose is made by the author
 *    Mike Matsnev.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 * $Id: StylesDlg.cpp,v 1.15.2.2 2004/10/21 15:35:24 mike Exp $
 * 
 */

#include <afxext.h>
#include <afxtempl.h>

#include "config.h"
#include "resource.h"

#include "XMLParser.h"
#include "StylesDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define	MINFSIZE    -5
#define	MAXFSIZE    +10

/////////////////////////////////////////////////////////////////////////////
// CStylesDlg dialog


CStylesDlg::CStylesDlg(CWnd* pParent /*=NULL*/)
: CDialog(CStylesDlg::IDD, pParent), m_cur(-1)
{
  m_fmt.Append(XMLParser::GetXMLStyles());
  //{{AFX_DATA_INIT(CStylesDlg)
		// NOTE: the ClassWizard will add member initialization here
  //}}AFX_DATA_INIT
}


void CStylesDlg::DoDataExchange(CDataExchange* pDX)
{
  CDialog::DoDataExchange(pDX);
  if (pDX->m_bSaveAndValidate)
    GetValues();
  //{{AFX_DATA_MAP(CStylesDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
  //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CStylesDlg, CDialog)
//{{AFX_MSG_MAP(CStylesDlg)
ON_CBN_SELCHANGE(IDC_ELEMENTS, OnSelchangeElements)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CStylesDlg message handlers

static const TCHAR  *g_onoff[]={
  _T("Off"),
  _T("On"),
  _T("Inherit"),
  0
};

static const TCHAR  *g_colors[]={
  _T("Normal"),
  _T("HL 1"),
  _T("HL 2"),
  _T("HL 3"),
  _T("HL 4"),
  _T("HL 5"),
  _T("HL 6"),
  _T("HL 7"),
  _T("Inherit")
};

static struct {
  BYTE	  fmt;
  const TCHAR *name;
}		    g_align[]={
  { 0,	_T("Default") },
  { Paragraph::right, _T("Right") },
  { Paragraph::center, _T("Center") },
  { Paragraph::justify, _T("Justified") },
  { 0,  _T("Inherit") },
  { 0, 0 }
};

BOOL CStylesDlg::OnInitDialog() 
{
  CDialog::OnInitDialog();

#if POCKETPC
  ((CCeCommandBar *)m_pWndEmptyCB)->LoadToolBar(cIDR_DIALOG);
#endif

  // fill in comboboxes
  int	i;
  for (i=MINFSIZE;i<=MAXFSIZE;++i) {
    CString tmp;
    tmp.Format(_T("%+d"),i);
    SendDlgItemMessage(IDC_FONT,CB_ADDSTRING,0,(LPARAM)(const TCHAR *)tmp);
  }
  SendDlgItemMessage(IDC_FONT,CB_ADDSTRING,0,(LPARAM)_T("Inherit"));
  for (i=0;g_onoff[i];++i) {
    SendDlgItemMessage(IDC_FBOLD,CB_ADDSTRING,0,(LPARAM)g_onoff[i]);
    SendDlgItemMessage(IDC_FITALIC,CB_ADDSTRING,0,(LPARAM)g_onoff[i]);
    SendDlgItemMessage(IDC_FUNDERLINE,CB_ADDSTRING,0,(LPARAM)g_onoff[i]);
  }
  for (i=0;g_colors[i];++i)
    SendDlgItemMessage(IDC_COLOR,CB_ADDSTRING,0,(LPARAM)g_colors[i]);
  for (i=0;g_align[i].name;++i)
    SendDlgItemMessage(IDC_ALIGN,CB_ADDSTRING,0,(LPARAM)g_align[i].name);
  for (i=0;i<m_fmt.GetSize();++i)
    if (m_fmt[i].name.GetLength()>0 && m_fmt[i].flags&XMLParser::ElemFmt::FMT) {
      LRESULT idx=SendDlgItemMessage(IDC_ELEMENTS,CB_ADDSTRING,0,(LPARAM)(const TCHAR *)m_fmt[i].name);
      if (idx!=CB_ERR)
	SendDlgItemMessage(IDC_ELEMENTS,CB_SETITEMDATA,idx,i);
    }
  SendDlgItemMessage(IDC_ELEMENTS,CB_SETCURSEL);
  SendDlgItemMessage(IDC_LISPIN,UDM_SETRANGE32,-100,100);
  SendDlgItemMessage(IDC_RISPIN,UDM_SETRANGE32,-100,100);
  SendDlgItemMessage(IDC_FIRSTSPIN,UDM_SETRANGE32,-100,100);
  SetValues(0);
  return TRUE;
}

void CStylesDlg::OnSelchangeElements() 
{
  GetValues();
  SetValues(SendDlgItemMessage(IDC_ELEMENTS,CB_GETCURSEL));
}

void CStylesDlg::GetValues() {
  if (m_cur>=0) {
    int	  n;
    n=SendDlgItemMessage(IDC_FONT,CB_GETCURSEL);
    if (n==SendDlgItemMessage(IDC_FONT,CB_GETCOUNT)-1)
      n=XMLParser::ElemFmt::NOCHG;
    else
      n+=MINFSIZE;
    m_fmt[m_cur].fsz=n;
    n=SendDlgItemMessage(IDC_FBOLD,CB_GETCURSEL);
    if (n==SendDlgItemMessage(IDC_FBOLD,CB_GETCOUNT)-1)
      n=XMLParser::ElemFmt::NOCHG;
    m_fmt[m_cur].bold=n;
    n=SendDlgItemMessage(IDC_FITALIC,CB_GETCURSEL);
    if (n==SendDlgItemMessage(IDC_FITALIC,CB_GETCOUNT)-1)
      n=XMLParser::ElemFmt::NOCHG;
    m_fmt[m_cur].italic=n;
    n=SendDlgItemMessage(IDC_FUNDERLINE,CB_GETCURSEL);
    if (n==SendDlgItemMessage(IDC_FUNDERLINE,CB_GETCOUNT)-1)
      n=XMLParser::ElemFmt::NOCHG;
    m_fmt[m_cur].underline=n;
    n=SendDlgItemMessage(IDC_COLOR,CB_GETCURSEL);
    if (n==SendDlgItemMessage(IDC_COLOR,CB_GETCOUNT)-1)
      n=XMLParser::ElemFmt::NOCHG;
    m_fmt[m_cur].color=n;
    n=SendDlgItemMessage(IDC_ALIGN,CB_GETCURSEL);
    if (n==SendDlgItemMessage(IDC_ALIGN,CB_GETCOUNT)-1)
      n=XMLParser::ElemFmt::NOCHG;
    else
      n=g_align[n].fmt;
    m_fmt[m_cur].align=n;
    m_fmt[m_cur].lindent=GetDlgItemInt(IDC_LI);
    if (m_fmt[m_cur].lindent==0)
      m_fmt[m_cur].lindent=XMLParser::ElemFmt::NOCHG;
    m_fmt[m_cur].rindent=GetDlgItemInt(IDC_RI);
    if (m_fmt[m_cur].rindent==0)
      m_fmt[m_cur].rindent=XMLParser::ElemFmt::NOCHG;
    m_fmt[m_cur].findent=GetDlgItemInt(IDC_FIRST);
    if (m_fmt[m_cur].findent==0)
      m_fmt[m_cur].findent=XMLParser::ElemFmt::NOCHG;
  }
}

void CStylesDlg::SetValues(int idx) {
  LRESULT   ri=SendDlgItemMessage(IDC_ELEMENTS,CB_GETITEMDATA,idx);
  if (ri==CB_ERR)
    return;
  int	n;
  n=m_fmt[ri].fsz;
  if (n==XMLParser::ElemFmt::NOCHG)
    n=SendDlgItemMessage(IDC_FONT,CB_GETCOUNT)-1;
  else {
    if (n<MINFSIZE)
      n=MINFSIZE;
    if (n>MAXFSIZE)
      n=MAXFSIZE;
    n-=MINFSIZE;
  }
  SendDlgItemMessage(IDC_FONT,CB_SETCURSEL,n);
  n=m_fmt[ri].bold;
  if (n==XMLParser::ElemFmt::NOCHG)
    n=SendDlgItemMessage(IDC_FBOLD,CB_GETCOUNT)-1;
  SendDlgItemMessage(IDC_FBOLD,CB_SETCURSEL,n);
  n=m_fmt[ri].italic;
  if (n==XMLParser::ElemFmt::NOCHG)
    n=SendDlgItemMessage(IDC_FITALIC,CB_GETCOUNT)-1;
  SendDlgItemMessage(IDC_FITALIC,CB_SETCURSEL,n);
  n=m_fmt[ri].underline;
  if (n==XMLParser::ElemFmt::NOCHG)
    n=SendDlgItemMessage(IDC_FUNDERLINE,CB_GETCOUNT)-1;
  SendDlgItemMessage(IDC_FUNDERLINE,CB_SETCURSEL,n);
  n=m_fmt[ri].color;
  if (n==XMLParser::ElemFmt::NOCHG)
    n=SendDlgItemMessage(IDC_COLOR,CB_GETCOUNT)-1;
  SendDlgItemMessage(IDC_COLOR,CB_SETCURSEL,n);
  n=m_fmt[ri].align;
  if (n==XMLParser::ElemFmt::NOCHG)
    n=SendDlgItemMessage(IDC_ALIGN,CB_GETCOUNT)-1;
  else {
    for (int i=0;g_align[i].name;++i)
      if (n==g_align[i].fmt) {
	n=i;
	goto ok;
      }
    n=SendDlgItemMessage(IDC_ALIGN,CB_GETCOUNT)-1;
ok:;
  }
  SendDlgItemMessage(IDC_ALIGN,CB_SETCURSEL,n);
  SetDlgItemInt(IDC_LI,m_fmt[ri].lindent==XMLParser::ElemFmt::NOCHG ? 0 :
    m_fmt[ri].lindent);
  SetDlgItemInt(IDC_RI,m_fmt[ri].rindent==XMLParser::ElemFmt::NOCHG ? 0 :
    m_fmt[ri].rindent);
  SetDlgItemInt(IDC_FIRST,m_fmt[ri].findent==XMLParser::ElemFmt::NOCHG ? 0 :
    m_fmt[ri].findent);
  m_cur=ri;
}

bool CStylesDlg::SaveChanges() {
  XMLParser::FmtArray&	fa=XMLParser::GetXMLStyles();
  bool flag=false;
  if (fa.GetSize()==m_fmt.GetSize()) {
    for (int i=0;i<fa.GetSize();++i)
      if (fa[i].align!=m_fmt[i].align ||
	  fa[i].bold!=m_fmt[i].bold ||
	  fa[i].color!=m_fmt[i].color ||
	  fa[i].flags!=m_fmt[i].flags ||
	  fa[i].fsz!=m_fmt[i].fsz ||
	  fa[i].italic!=m_fmt[i].italic ||
	  fa[i].underline!=m_fmt[i].underline ||
	  fa[i].lindent!=m_fmt[i].lindent ||
	  fa[i].rindent!=m_fmt[i].rindent ||
	  fa[i].findent!=m_fmt[i].findent) {
	flag=true;
	fa[i].align=m_fmt[i].align;
	fa[i].bold=m_fmt[i].bold;
	fa[i].color=m_fmt[i].color;
	fa[i].flags=m_fmt[i].flags;
	fa[i].fsz=m_fmt[i].fsz;
	fa[i].italic=m_fmt[i].italic;
	fa[i].underline=m_fmt[i].underline;
	fa[i].lindent=m_fmt[i].lindent;
	fa[i].rindent=m_fmt[i].rindent;
	fa[i].findent=m_fmt[i].findent;
      }
  }
  return flag;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -