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

📄 parmchregexpdlg.cpp

📁 Intel开发的IPP库的应用例程
💻 CPP
字号:

/*
//
//               INTEL CORPORATION PROPRIETARY INFORMATION
//  This software is supplied under the terms of a license agreement or
//  nondisclosure agreement with Intel Corporation and may not be copied
//  or disclosed except in accordance with the terms of that agreement.
//        Copyright(c) 2005-2006 Intel Corporation. All Rights Reserved.
//
*/

// CParmChRegExpDlg dialog gets parameters for certain ippCH functions.
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ippsDemo.h"
#include "ippsDemoDoc.h"
#include "ParmChRegExpDlg.h"
#include "RunChRegExp.h"
#include ".\parmchregexpdlg.h"

static char* patternArray[] = {
   ".  Any single character",
   "[]   Any one character in the set",
   "[-] Any one character in the range",
   "[^] Any one character not in the set",
   "[^-] Any one character not in the range",
   NULL,
   "[:alpha:]  A letter",
   "[:upper:]  An upper-case letter",
   "[:lower:]  A lower-case letter",
   "[:digit:]  A decimal digit",
   "[:xdigit:] A hexadecimal digit",
   "[:alnum:]  A letter or a digit",
   "[:punct:]  A punctuation character",
   "[:blank:]  A space or tab character",
   "[:space:]  A character producing white space",
   "[:graph:]  A character with a visible representation",
   "[:cntrl:]  A control character",
   NULL,
   "",
   "^   Beginning of line",
   "$   End of line",
   "\\< Beginning of word",
   "\\> End of word",
   "\\   Escape special character",
   "",
   "?  Zero or one matches of preceding item",
   "*  Zero or more matches of preceding item",
   "+  One or more matches of preceding item",
   "{}  Number of matches",
   "{,} Range of matches",
   "",
   "|    Or",
};

enum {ID_REGEXP_00 = 50000,
      ID_REGEXP_01,
      ID_REGEXP_02,
      ID_REGEXP_03,
      ID_REGEXP_04,
      ID_REGEXP_05,
      ID_REGEXP_06,
      ID_REGEXP_07,
      ID_REGEXP_08,
      ID_REGEXP_09,
      ID_REGEXP_10,
      ID_REGEXP_11,
      ID_REGEXP_12,
      ID_REGEXP_13,
      ID_REGEXP_14,
      ID_REGEXP_15,
      ID_REGEXP_16,
      ID_REGEXP_17,
      ID_REGEXP_18,
      ID_REGEXP_19,
      ID_REGEXP_20,
      ID_REGEXP_21,
      ID_REGEXP_22,
      ID_REGEXP_23,
      ID_REGEXP_24,
      ID_REGEXP_25,
      ID_REGEXP_26,
      ID_REGEXP_27,
      ID_REGEXP_28,
      ID_REGEXP_29,
      ID_REGEXP_30,
      ID_REGEXP_31,
      ID_REGEXP_32,
      ID_REGEXP_33,
      ID_REGEXP_34,
      ID_REGEXP_35,
      ID_REGEXP_36,
      ID_REGEXP_37,
      ID_REGEXP_38,
      ID_REGEXP_39,
};

IMPLEMENT_DYNAMIC(CParmChRegExpDlg, CParamDlg)
CParmChRegExpDlg::CParmChRegExpDlg(CRunChRegExp* pRun, UINT nID)
   : CParamDlg(nID)
   , m_pRun(pRun)
   , m_pPattern(_T(""))
   , m_numFindIn(0)
   , m_numFind(0)
   , m_FindTitle(_T(""))
   , m_FindString(_T(""))
   , m_FindNumStr(_T(""))
{
}

CParmChRegExpDlg::~CParmChRegExpDlg()
{
}

void CParmChRegExpDlg::DoDataExchange(CDataExchange* pDX)
{
   CParamDlg::DoDataExchange(pDX);
   DDX_Text(pDX, IDC_PATTERN, m_pPattern);
   DDX_Text(pDX, IDC_LIMIT_EDIT, m_numFindIn);
   DDV_MinMaxInt(pDX, m_numFindIn, 1, INT_MAX);
   DDX_Control(pDX, IDC_LIMIT_SPIN, m_LimitSpin);
   DDX_Control(pDX, IDC_FIND_STATIC, m_FindNumStatic);
   DDX_Text(pDX, IDC_FIND_NUM, m_FindNumStr);
   DDX_Control(pDX, IDC_FIND_NUM, m_FindNumEdit);
   DDX_Control(pDX, IDC_FIND_TITLE, m_FindTitleEdit);
   DDX_Text(pDX, IDC_FIND_TITLE, m_FindTitle);
   DDX_Control(pDX, IDC_FIND_EDIT, m_FindEdit);
   DDX_Text(pDX, IDC_FIND_EDIT, m_FindString);
   DDX_Check(pDX, IDC_OPTION_0, m_Option[0]);
   DDX_Check(pDX, IDC_OPTION_1, m_Option[1]);
   DDX_Check(pDX, IDC_OPTION_2, m_Option[2]);
   DDX_Check(pDX, IDC_OPTION_3, m_Option[3]);
   DDX_Check(pDX, IDC_OPTION_4, m_Option[4]);
   DDX_Control(pDX, IDC_PATTERN_BUTTON, m_PatternButton);
   DDX_Control(pDX, IDC_PATTERN, m_PatternEdit);
}


BEGIN_MESSAGE_MAP(CParmChRegExpDlg, CParamDlg)
   ON_BN_CLICKED(IDC_FIND_BUTTON, OnBnClickedFindButton)
   ON_EN_CHANGE(IDC_PATTERN, OnChange)
   ON_EN_CHANGE(IDC_LIMIT_EDIT, OnChange)
   ON_BN_CLICKED(IDC_OPTION_0, OnChange)
   ON_BN_CLICKED(IDC_OPTION_1, OnChange)
   ON_BN_CLICKED(IDC_OPTION_2, OnChange)
   ON_BN_CLICKED(IDC_OPTION_3, OnChange)
   ON_BN_CLICKED(IDC_OPTION_4, OnChange)
   ON_BN_CLICKED(IDC_PATTERN_BUTTON, OnBnClickedPatternButton)
   ON_COMMAND(ID_REGEXP_00, OnPattern00 )
   ON_COMMAND(ID_REGEXP_01, OnPattern01 )
   ON_COMMAND(ID_REGEXP_02, OnPattern02 )
   ON_COMMAND(ID_REGEXP_03, OnPattern03 )
   ON_COMMAND(ID_REGEXP_04, OnPattern04 )
   ON_COMMAND(ID_REGEXP_05, OnPattern05 )
   ON_COMMAND(ID_REGEXP_06, OnPattern06 )
   ON_COMMAND(ID_REGEXP_07, OnPattern07 )
   ON_COMMAND(ID_REGEXP_08, OnPattern08 )
   ON_COMMAND(ID_REGEXP_09, OnPattern09 )
   ON_COMMAND(ID_REGEXP_10, OnPattern10 )
   ON_COMMAND(ID_REGEXP_11, OnPattern11 )
   ON_COMMAND(ID_REGEXP_12, OnPattern12 )
   ON_COMMAND(ID_REGEXP_13, OnPattern13 )
   ON_COMMAND(ID_REGEXP_14, OnPattern14 )
   ON_COMMAND(ID_REGEXP_15, OnPattern15 )
   ON_COMMAND(ID_REGEXP_16, OnPattern16 )
   ON_COMMAND(ID_REGEXP_17, OnPattern17 )
   ON_COMMAND(ID_REGEXP_18, OnPattern18 )
   ON_COMMAND(ID_REGEXP_19, OnPattern19 )
   ON_COMMAND(ID_REGEXP_20, OnPattern20 )
   ON_COMMAND(ID_REGEXP_21, OnPattern21 )
   ON_COMMAND(ID_REGEXP_22, OnPattern22 )
   ON_COMMAND(ID_REGEXP_23, OnPattern23 )
   ON_COMMAND(ID_REGEXP_24, OnPattern24 )
   ON_COMMAND(ID_REGEXP_25, OnPattern25 )
   ON_COMMAND(ID_REGEXP_26, OnPattern26 )
   ON_COMMAND(ID_REGEXP_27, OnPattern27 )
   ON_COMMAND(ID_REGEXP_28, OnPattern28 )
   ON_COMMAND(ID_REGEXP_29, OnPattern29 )
   ON_COMMAND(ID_REGEXP_30, OnPattern30 )
   ON_COMMAND(ID_REGEXP_31, OnPattern31 )
   ON_COMMAND(ID_REGEXP_32, OnPattern32 )
   ON_COMMAND(ID_REGEXP_33, OnPattern33 )
   ON_COMMAND(ID_REGEXP_34, OnPattern34 )
   ON_COMMAND(ID_REGEXP_35, OnPattern35 )
   ON_COMMAND(ID_REGEXP_36, OnPattern36 )
   ON_COMMAND(ID_REGEXP_37, OnPattern37 )
   ON_COMMAND(ID_REGEXP_38, OnPattern38 )
   ON_COMMAND(ID_REGEXP_39, OnPattern39 )
END_MESSAGE_MAP()

void CParmChRegExpDlg::UpdateMyData(BOOL bSave)
{
   if (bSave) {
      UpdateData();
      UpdateOptions();
   } else {
      UpdateOptions(FALSE);
      SetFindString();
      UpdateData(FALSE);
   }
}

void CParmChRegExpDlg::UpdateOptions(BOOL bSave)
{
   CMyString OptStr = "ismxg";
   if (bSave) {
      m_pOptions = "";
      for (int i=0; i<OPT_NUM; i++) {
         if(m_Option[i])
            m_pOptions += OptStr[i];
      }
   } else {
      for (int i=0; i<OPT_NUM; i++) {
         m_Option[i] = m_pOptions.Found(OptStr[i]);
      }
   }
}

void CParmChRegExpDlg::SetFindString()
{
   m_FindString = "";
   Ipp8u* pStart = (Ipp8u*)m_pDocSrc->GetVector()->GetDataVoi();
   for (int i=0; i<m_numFind; i++) {
      CString str;
      str.Format("%d\t%d\r\n",
                  (Ipp8u*)(m_pFind[i].pFind) - pStart,
                  m_pFind[i].lenFind);
      m_FindString += str;
   }
   m_FindNumStr.Format("%d", m_numFind);
}

void CParmChRegExpDlg::ShowFindResult(BOOL result)
{
}

// CParmChRegExpDlg message handlers

BOOL CParmChRegExpDlg::OnInitDialog()
{
   CParamDlg::OnInitDialog();

   m_LimitSpin.SetRange(1,SHRT_MAX);
   int tab = 40;
   m_FindTitleEdit.SetTabStops(1,&tab);
   m_FindEdit.SetTabStops(1,&tab);
   m_FindTitle = "posFind\tlenFind";

   UpdateMyData(FALSE);

   return TRUE;  // return TRUE unless you set the focus to a control
}

void CParmChRegExpDlg::OnBnClickedFindButton()
{
   UpdateMyData();
   BOOL result = m_pRun->SetValues(this);
   ShowFindResult(result);
   UpdateMyData(FALSE);
}

void CParmChRegExpDlg::OnChange()
{
   if (m_bInit) {
      ShowFindResult(TRUE);
      m_FindNumEdit.SetWindowText("");
      m_FindEdit.SetWindowText("");
   }
}


void CParmChRegExpDlg::OnBnClickedPatternButton()
{
   CRect rect;
   m_PatternButton.GetWindowRect(&rect);
   CPoint point(rect.right, rect.top);
   CMenu menu;
   CMenu subMenu;
   menu.CreatePopupMenu();
   subMenu.CreatePopupMenu();
   bool bSubMenu = false;
   for (int i=0; i<sizeof(patternArray)/sizeof(char*); i++) {
      UINT id = ID_REGEXP_00 + i;
      if (patternArray[i] == NULL) {
         if (bSubMenu) {
            bSubMenu = false;
         } else {
            bSubMenu = true;
            menu.AppendMenu(MF_POPUP,  (UINT)subMenu.GetSafeHmenu(), "More...");
         }
      } else if (bSubMenu) {
         CString string = patternArray[i];
         UINT flags = string.IsEmpty() ? MF_SEPARATOR : MF_STRING;
         subMenu.AppendMenu(flags, id, string);
      } else {
         CString string = patternArray[i];
         UINT flags = string.IsEmpty() ? MF_SEPARATOR : MF_STRING;
         menu.AppendMenu(flags, id, string);
      }
   }
   menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON,
      point.x, point.y, this);
   menu.DestroyMenu();
   subMenu.DestroyMenu();
}

void CParmChRegExpDlg::OnPatternInsert(int idx)
{
   CString string = patternArray[idx];
   string = string.Mid(0, string.Find(' ')); 
   if (string.IsEmpty())
      return;

   UpdateData();
   int start, end;
   m_PatternEdit.GetSel(start,end);
   m_pPattern = m_pPattern.Mid(0,start) + string + m_pPattern.Mid(end);
   start = start + string.GetLength();
   if ((m_pPattern[start-1] == ']') ||
       (m_pPattern[start-1] == '}'))
       start --;
   if ((m_pPattern[start-1] == ':'))
       start ++;
   if ((m_pPattern[start-1] == ',') ||
       (m_pPattern[start-1] == '-'))
       start --;
   UpdateData(FALSE);
   m_PatternEdit.SetFocus();
   m_PatternEdit.SetSel(start,start);
   

}

void CParmChRegExpDlg::OnUpdatePattern(CCmdUI* pCmdUI) 
{
   pCmdUI->Enable(TRUE);
}

void CParmChRegExpDlg::OnPattern00() {  OnPatternInsert(0);}
void CParmChRegExpDlg::OnPattern01() {  OnPatternInsert(1);}
void CParmChRegExpDlg::OnPattern02() {  OnPatternInsert(2);}
void CParmChRegExpDlg::OnPattern03() {  OnPatternInsert(3);}
void CParmChRegExpDlg::OnPattern04() {  OnPatternInsert(4);}
void CParmChRegExpDlg::OnPattern05() {  OnPatternInsert(5);}
void CParmChRegExpDlg::OnPattern06() {  OnPatternInsert(6);}
void CParmChRegExpDlg::OnPattern07() {  OnPatternInsert(7);}
void CParmChRegExpDlg::OnPattern08() {  OnPatternInsert(8);}
void CParmChRegExpDlg::OnPattern09() {  OnPatternInsert(9);}
void CParmChRegExpDlg::OnPattern10() {  OnPatternInsert(10);}
void CParmChRegExpDlg::OnPattern11() {  OnPatternInsert(11);}
void CParmChRegExpDlg::OnPattern12() {  OnPatternInsert(12);}
void CParmChRegExpDlg::OnPattern13() {  OnPatternInsert(13);}
void CParmChRegExpDlg::OnPattern14() {  OnPatternInsert(14);}
void CParmChRegExpDlg::OnPattern15() {  OnPatternInsert(15);}
void CParmChRegExpDlg::OnPattern16() {  OnPatternInsert(16);}
void CParmChRegExpDlg::OnPattern17() {  OnPatternInsert(17);}
void CParmChRegExpDlg::OnPattern18() {  OnPatternInsert(18);}
void CParmChRegExpDlg::OnPattern19() {  OnPatternInsert(19);}
void CParmChRegExpDlg::OnPattern20() {  OnPatternInsert(20);}
void CParmChRegExpDlg::OnPattern21() {  OnPatternInsert(21);}
void CParmChRegExpDlg::OnPattern22() {  OnPatternInsert(22);}
void CParmChRegExpDlg::OnPattern23() {  OnPatternInsert(23);}
void CParmChRegExpDlg::OnPattern24() {  OnPatternInsert(24);}
void CParmChRegExpDlg::OnPattern25() {  OnPatternInsert(25);}
void CParmChRegExpDlg::OnPattern26() {  OnPatternInsert(26);}
void CParmChRegExpDlg::OnPattern27() {  OnPatternInsert(27);}
void CParmChRegExpDlg::OnPattern28() {  OnPatternInsert(28);}
void CParmChRegExpDlg::OnPattern29() {  OnPatternInsert(29);}
void CParmChRegExpDlg::OnPattern30() {  OnPatternInsert(30);}
void CParmChRegExpDlg::OnPattern31() {  OnPatternInsert(31);}
void CParmChRegExpDlg::OnPattern32() {  OnPatternInsert(32);}
void CParmChRegExpDlg::OnPattern33() {  OnPatternInsert(33);}
void CParmChRegExpDlg::OnPattern34() {  OnPatternInsert(34);}
void CParmChRegExpDlg::OnPattern35() {  OnPatternInsert(35);}
void CParmChRegExpDlg::OnPattern36() {  OnPatternInsert(36);}
void CParmChRegExpDlg::OnPattern37() {  OnPatternInsert(37);}
void CParmChRegExpDlg::OnPattern38() {  OnPatternInsert(38);}
void CParmChRegExpDlg::OnPattern39() {  OnPatternInsert(39);}

⌨️ 快捷键说明

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