home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / sdk / mapi / win16 / dev / mdbview / restrict.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-11  |  71.4 KB  |  2,075 lines

  1. /*******************************************************************/
  2. /*
  3.  -  restrict.cpp
  4.  -  Copyright (C) 1995 Microsoft Corporation
  5.  -
  6.  *  Purpose:
  7.  *      Contains member functions for CRestrictionDlg
  8.  */
  9. /*******************************************************************/
  10.                                                    
  11. #undef  CINTERFACE      // C++ calling convention for mapi calls
  12.  
  13.  
  14. #ifdef WIN32
  15. #ifdef _WIN95
  16. #define _INC_OLE
  17. #endif
  18. #define INC_OLE2
  19. #define INC_RPC
  20. #endif
  21.  
  22. #include <afxwin.h>     
  23. #include <string.h>
  24.  
  25. #ifdef WIN16
  26. #include <compobj.h>
  27. #endif
  28.  
  29. #ifdef WIN32
  30. #include <objbase.h>
  31. #include <objerror.h>
  32. #ifdef _WIN95
  33. #include <ole2.h>
  34. #endif
  35. #endif
  36.  
  37.  
  38. #ifdef WIN16
  39. #include <mapiwin.h>    
  40. #endif
  41. #include <mapix.h>      
  42. #include <strtbl.h>     
  43. #include <misctool.h>
  44. #include <pvalloc.h>
  45. #include "resource.h"   
  46. #include "mdbview.h"  
  47. #include "restrict.h"
  48.  
  49. /* Global Data */
  50.  
  51. ULONG   ulNumResTypes   = 0;        // determine number of restriction types
  52.  
  53. /*******************************************************************/
  54. /**************************** RESTRICTION **************************/
  55.  
  56. /********************************************************************/
  57. /*
  58.  -  CRestrictionDlg::
  59.  -  OnInitDialog
  60.  -
  61.  *  Purpose:
  62.  *
  63.  */
  64. /********************************************************************/
  65.  
  66. BOOL CRestrictionDlg::OnInitDialog()
  67. {
  68.     int             rgTabStops[12];
  69.     DWORD           dwReturn        = 0;      
  70.     char            szSearchState[80];
  71.         
  72.     SendDlgItemMessage(IDC_RESTRICTION,LB_RESETCONTENT,0,0);
  73.  
  74.     rgTabStops[0] = 20;
  75.     rgTabStops[1] = 30;
  76.     rgTabStops[2] = 40;
  77.     rgTabStops[3] = 50;
  78.     rgTabStops[4] = 60;
  79.     rgTabStops[5] = 70;
  80.     rgTabStops[6] = 80;
  81.     rgTabStops[7] = 90;
  82.     rgTabStops[8] = 100;
  83.     rgTabStops[9] = 110;
  84.     rgTabStops[10]= 120;
  85.  
  86.     dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_SETTABSTOPS,
  87.                     (WPARAM) 11,(LPARAM)rgTabStops );
  88.  
  89.     wsprintf(szSearchState,"Search State: %lu,%s%s%s%s",m_ulSearchState,
  90.       ((m_ulSearchState & SEARCH_RUNNING)      ? "SEARCH_RUNNING | "        : ""),
  91.       ((m_ulSearchState & SEARCH_REBUILD)      ? "SEARCH_REBUILD | "  : ""),
  92.       ((m_ulSearchState & SEARCH_RECURSIVE)    ? "SEARCH_RECURSIVE | "   : ""),
  93.       ((m_ulSearchState & SEARCH_FOREGROUND)   ? "SEARCH_FOREGROUND  "   : "0"));
  94.  
  95.     SetDlgItemText(IDT_SEARCHSTATE,szSearchState);
  96.  
  97.     DisplayRestriction(m_prest);
  98.  
  99.     return TRUE;    
  100.  
  101. }
  102.  
  103. /*******************************************************************/
  104. /*
  105.  -  CBldPropDlg::
  106.  -  DisplayRestriction
  107.  *
  108.  *  Purpose:
  109.  *
  110.  *  Parameters:
  111.  *
  112.  *  Returns:
  113.  *
  114.  */
  115. /*******************************************************************/
  116.  
  117. void CRestrictionDlg::DisplayRestriction(LPSRestriction lpRes)
  118. {
  119.     DWORD           dwReturn        = 0;      
  120.     char            szBuff1[256];
  121.     char            szBuff2[256];
  122.     char            szBuff3[256];
  123.     char            szBuffer[1024];
  124.     ULONG           i = 0;
  125.     static  ULONG   cTabs = 0;
  126.     static  char    szTabs[11][22] = {"",
  127.                      "\t",
  128.                      "\t\t",
  129.                      "\t\t\t",
  130.                      "\t\t\t\t",
  131.                      "\t\t\t\t\t",
  132.                      "\t\t\t\t\t\t",
  133.                      "\t\t\t\t\t\t\t",
  134.                      "\t\t\t\t\t\t\t\t",
  135.                      "\t\t\t\t\t\t\t\t\t",
  136.                      "\t\t\t\t\t\t\t\t\t\t"};
  137.  
  138.     if(!lpRes)
  139.     {
  140.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)"lpRestriction == NULL"); 
  141.         return;
  142.     }        
  143.  
  144.     switch(lpRes->rt)
  145.     {
  146.     case RES_CONTENT:       
  147.         wsprintf(szBuffer,"%sSContentRestriction:", szTabs[cTabs]);
  148.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  149.         wsprintf(szBuffer,"%sFuzzy Level: %s", szTabs[cTabs+1],
  150.             GetString("FuzzyLevel", lpRes->res.resContent.ulFuzzyLevel, szBuff1));
  151.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  152.         wsprintf(szBuffer,"%s%s contains %s", szTabs[cTabs+1],
  153.             GetString("PropTags", lpRes->res.resContent.ulPropTag, szBuff1),
  154.             SzGetPropValue(szBuff2, lpRes->res.resContent.lpProp));
  155.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  156.         break;
  157.  
  158.     case RES_PROPERTY:
  159.         wsprintf(szBuffer,"%sSPropertyRestriction:", szTabs[cTabs]);
  160.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  161.         wsprintf(szBuffer,"%s%s %s %s", szTabs[cTabs+1],
  162.             GetString("PropTags", lpRes->res.resProperty.ulPropTag, szBuff1),
  163.             GetString("RelOp", lpRes->res.resProperty.relop, szBuff2),
  164.             SzGetPropValue(szBuff3, lpRes->res.resProperty.lpProp));
  165.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  166.         break;
  167.  
  168.     case RES_COMPAREPROPS:
  169.         wsprintf(szBuffer,"%sSComparePropsRestriction:", szTabs[cTabs]);
  170.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  171.         wsprintf(szBuffer,"%s%s %s %s", szTabs[cTabs+1],
  172.             GetString("PropTags", lpRes->res.resCompareProps.ulPropTag1, szBuff1),
  173.             GetString("RelOp", lpRes->res.resCompareProps.relop, szBuff2),
  174.             GetString("PropTags", lpRes->res.resCompareProps.ulPropTag2, szBuff3));        
  175.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  176.         break;
  177.  
  178.     case RES_BITMASK:
  179.         wsprintf(szBuffer,"%sSBitMaskRestriction:", szTabs[cTabs]);
  180.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  181.         wsprintf(szBuffer,"%s(%s & 0x%08lX) %s", szTabs[cTabs+1],
  182.             GetString("PropTags", lpRes->res.resBitMask.ulPropTag, szBuff1),
  183.             lpRes->res.resBitMask.ulMask,
  184.             GetString("Bmr", lpRes->res.resBitMask.relBMR, szBuff2));        
  185.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  186.         break;
  187.  
  188.     case RES_SIZE:
  189.         wsprintf(szBuffer,"%sSSizeRestriction:", szTabs[cTabs]);
  190.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  191.         wsprintf(szBuffer,"%ssizeof(%s) %s %lu", szTabs[cTabs+1],
  192.             GetString("PropTags", lpRes->res.resSize.ulPropTag, szBuff1),
  193.             GetString("RelOp", lpRes->res.resSize.relop, szBuff2),
  194.             lpRes->res.resSize.cb);
  195.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  196.         break;
  197.  
  198.     case RES_EXIST:
  199.         wsprintf(szBuffer,"%sSExistRestriction:", szTabs[cTabs]);
  200.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  201.         wsprintf(szBuffer,"%s%s Exists", szTabs[cTabs+1],
  202.             GetString("PropTags", lpRes->res.resExist.ulPropTag, szBuff1));       
  203.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  204.         break;
  205.  
  206.     case RES_SUBRESTRICTION:
  207.         wsprintf(szBuffer,"%sSSubRestriction:", szTabs[cTabs]);
  208.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  209.         wsprintf(szBuffer,"%s ulSubObject: %s", szTabs[cTabs+1],
  210.             (lpRes->res.resSub.ulSubObject == PR_MESSAGE_ATTACHMENTS) 
  211.                         ? "PR_MESSAGE_ATTACHMENTS" :
  212.                           "PR_MESSAGE_RECIPIENTS"     );
  213.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  214.         cTabs++;
  215.         DisplayRestriction(lpRes->res.resSub.lpRes);
  216.         cTabs--;
  217.         break;
  218.  
  219.     case RES_NOT:
  220.         wsprintf(szBuffer,"%sNot:", szTabs[cTabs]);
  221.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  222.         cTabs++;
  223.         DisplayRestriction(lpRes->res.resNot.lpRes);
  224.         cTabs--;
  225.         break;
  226.  
  227.     case RES_AND:
  228.         wsprintf(szBuffer,"%sAnd:", szTabs[cTabs]);
  229.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  230.         cTabs++;
  231.         for(i = 0; i < lpRes->res.resAnd.cRes; i++)
  232.         {
  233.             DisplayRestriction(&lpRes->res.resAnd.lpRes[i]);
  234.         }
  235.         cTabs--;
  236.         break;
  237.  
  238.     case RES_OR:
  239.         wsprintf(szBuffer,"%sOr:", szTabs[cTabs]);
  240.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  241.         cTabs++;
  242.         for(i = 0; i < lpRes->res.resOr.cRes; i++)
  243.         {
  244.             DisplayRestriction(&lpRes->res.resOr.lpRes[i]);
  245.         }
  246.         cTabs--;
  247.         break;
  248.  
  249.     case RES_COMMENT:
  250.         wsprintf(szBuffer,"%sSCommentRestriction:", szTabs[cTabs]);
  251.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  252.         wsprintf(szBuffer,"%s cValues: %lu, lpPropValue: 0x%08X", szTabs[cTabs+1],
  253.             lpRes->res.resComment.cValues,
  254.             lpRes->res.resComment.lpProp);
  255.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  256.         cTabs++;
  257.         DisplayRestriction(lpRes->res.resComment.lpRes);
  258.         cTabs--;
  259.         break;
  260.  
  261.     default:
  262.         wsprintf(szBuffer,"%sUNKNOWN RES TYPE lpRes->rt == %lu",szTabs[cTabs] , lpRes->rt);
  263.         dwReturn = SendDlgItemMessage(IDC_RESTRICTION,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  264.         break;
  265.     }
  266.     return;
  267. }
  268.  
  269. /*******************************************************************/
  270. /*
  271.  -  CRestrictionDlg::
  272.  -  ~CRestrictionDlg
  273.  -
  274.  *  Purpose:
  275.  *      Destructor for class CRestrictionDlg. Releases and Frees memory
  276.  *      allocated in this class
  277.  *
  278.  */
  279. /*******************************************************************/
  280.  
  281. CRestrictionDlg::~CRestrictionDlg()
  282. {
  283.  
  284.  
  285.  
  286.  
  287. ////////////////////////////////////////////////////
  288.  
  289.  
  290.  
  291. /*-----------------------------*/
  292. /* CResDlg Message Handlers    */
  293. /*-----------------------------*/
  294.  
  295. BEGIN_MESSAGE_MAP(CResDlg, CModalDialog)
  296.     ON_COMMAND(IDC_AND,      OnAnd)
  297.     ON_COMMAND(IDC_OR,       OnOr)
  298.     ON_COMMAND(IDC_SUBRES1,  OnSubRes1)
  299.     ON_COMMAND(IDC_SUBRES2,  OnSubRes2)
  300.     ON_COMMAND(IDC_SUBRES3,  OnSubRes3)
  301.     ON_CBN_SELCHANGE(IDC_RESTYPE1, OnResType1)
  302.     ON_CBN_SELCHANGE(IDC_RESTYPE2, OnResType2)
  303.     ON_CBN_SELCHANGE(IDC_RESTYPE3, OnResType3)
  304. END_MESSAGE_MAP()
  305.  
  306. /*
  307.  -  CResDlg::
  308.  -  CResDlg
  309.  *
  310.  *  Purpose:
  311.  *      Constructor for the CResDlg class.
  312.  */
  313.  
  314. CResDlg::CResDlg(LPSPropTagArray lpspta, LPSRestriction lpr, CWnd* lpParent)
  315.         : CModalDialog(IDD_RESDLG, lpParent)
  316. {
  317.     m_lpCurColumns = lpspta;
  318.     m_lpRes        = lpr;
  319.  
  320.     m_lpSubRes = (LPSRestriction)PvAlloc(3 * sizeof(SRestriction));
  321. }
  322.  
  323.  
  324. /*
  325.  -  CResDlg::
  326.  -  OnInitDialog
  327.  -
  328.  *  Purpose:
  329.  *      Constructor for main dialog class.
  330.  *
  331.  */
  332.  
  333. BOOL CResDlg::OnInitDialog()
  334. {
  335.     ULONG   idx;
  336.     char    szBuff[512];
  337.     char    szBuffer[256];
  338.     ULONG   ulNum;
  339.  
  340.     CheckDlgButton(IDC_AND, TRUE);
  341.  
  342.     ulNumResTypes = GetRowCount("RestrictionType");
  343.  
  344.     for(idx = 0; idx < ulNumResTypes; idx++)
  345.     {
  346.         GetRowString("RestrictionType",idx,szBuffer);
  347.         SendDlgItemMessage(IDC_RESTYPE1, CB_ADDSTRING, 0,
  348.                 (LPARAM)szBuffer);
  349.         SendDlgItemMessage(IDC_RESTYPE2, CB_ADDSTRING, 0,
  350.                 (LPARAM)szBuffer);
  351.         SendDlgItemMessage(IDC_RESTYPE3, CB_ADDSTRING, 0,
  352.                 (LPARAM)szBuffer);
  353.     }
  354.  
  355.     SendDlgItemMessage(IDC_RESTYPE1, CB_ADDSTRING, 0,
  356.                 (LPARAM) (char *)"None");
  357.     SendDlgItemMessage(IDC_RESTYPE2, CB_ADDSTRING, 0,
  358.                 (LPARAM) (char *)"None");
  359.     SendDlgItemMessage(IDC_RESTYPE3, CB_ADDSTRING, 0,
  360.                 (LPARAM) (char *)"None");
  361.  
  362.     SendDlgItemMessage(IDC_RESTYPE1, CB_SETCURSEL, (WPARAM) ulNumResTypes, (LPARAM) 0L);
  363.     SendDlgItemMessage(IDC_RESTYPE2, CB_SETCURSEL, (WPARAM) ulNumResTypes, (LPARAM) 0L);
  364.     SendDlgItemMessage(IDC_RESTYPE3, CB_SETCURSEL, (WPARAM) ulNumResTypes, (LPARAM) 0L);
  365.  
  366.     for(idx = 0; idx < m_lpCurColumns->cValues; idx++)
  367.     {
  368.         GetString("PropTags", m_lpCurColumns->aulPropTag[idx], szBuff);
  369.  
  370.         SendDlgItemMessage(IDC_PROPTAG1, CB_ADDSTRING, 0, (LPARAM)szBuff);
  371.         SendDlgItemMessage(IDC_PROPTAG2, CB_ADDSTRING, 0, (LPARAM)szBuff);
  372.         SendDlgItemMessage(IDC_PROPTAG3, CB_ADDSTRING, 0, (LPARAM)szBuff);
  373.     }
  374.  
  375.     ulNum = GetRowCount("RelOp");
  376.  
  377.     for(idx = 0; idx < ulNum; idx++)
  378.     {
  379.         GetRowString("RelOp",idx,szBuffer);
  380.   
  381.         SendDlgItemMessage(IDC_RELATIONSHIP1, CB_ADDSTRING, 0,
  382.                 (LPARAM)szBuffer);
  383.         SendDlgItemMessage(IDC_RELATIONSHIP2, CB_ADDSTRING, 0,
  384.                 (LPARAM)szBuffer);
  385.         SendDlgItemMessage(IDC_RELATIONSHIP3, CB_ADDSTRING, 0,
  386.                 (LPARAM)szBuffer);
  387.     }
  388.  
  389.     /* Hide everything until the Restriction Type is chosen
  390.        Restriction 1 */
  391.     GetDlgItem(IDT_PROPTAG1)->ShowWindow(FALSE);
  392.     GetDlgItem(IDC_PROPTAG1)->ShowWindow(FALSE);
  393.     GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  394.     GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(FALSE);
  395.     GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(FALSE);
  396.     GetDlgItem(IDT_VALUE1)->ShowWindow(FALSE);
  397.     GetDlgItem(IDC_VALUE1)->ShowWindow(FALSE);
  398.     GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  399.  
  400.     /* Restriction 2 */
  401.     GetDlgItem(IDT_PROPTAG2)->ShowWindow(FALSE);
  402.     GetDlgItem(IDC_PROPTAG2)->ShowWindow(FALSE);
  403.     GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  404.     GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(FALSE);
  405.     GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(FALSE);
  406.     GetDlgItem(IDT_VALUE2)->ShowWindow(FALSE);
  407.     GetDlgItem(IDC_VALUE2)->ShowWindow(FALSE);
  408.     GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  409.  
  410.     /* Restriction 3 */
  411.     GetDlgItem(IDT_PROPTAG3)->ShowWindow(FALSE);
  412.     GetDlgItem(IDC_PROPTAG3)->ShowWindow(FALSE);
  413.     GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  414.     GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(FALSE);
  415.     GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(FALSE);
  416.     GetDlgItem(IDT_VALUE3)->ShowWindow(FALSE);
  417.     GetDlgItem(IDC_VALUE3)->ShowWindow(FALSE);
  418.  
  419.     m_fComb = 0;
  420.     m_nResType1 = (int) ulNumResTypes;
  421.     m_nResType2 = (int) ulNumResTypes;
  422.     m_nResType3 = (int) ulNumResTypes;
  423.  
  424.     GetDlgItem(IDC_AND)->SetFocus();
  425.  
  426.     return TRUE;
  427. }
  428.  
  429.  
  430. /*
  431.  -  CResDlg
  432.  -  OnAnd
  433.  -
  434.  *  Purpose:
  435.  *      Sets the AND restriction flag.
  436.  *
  437.  */
  438.  
  439. void CResDlg::OnAnd()
  440. {
  441.     m_fComb = 0;
  442. }
  443.  
  444.  
  445. /*
  446.  -  CResDlg
  447.  -  OnOr
  448.  -
  449.  *  Purpose:
  450.  *      Sets the OR restriction flag.
  451.  *
  452.  */
  453.  
  454. void CResDlg::OnOr()
  455. {
  456.     m_fComb = 1;
  457. }
  458.  
  459.  
  460. /*
  461.  -  CResDlg
  462.  -  OnResType1
  463.  -
  464.  *  Purpose:
  465.  *      Changes the view of the restriction based on the type for
  466.  *      Restriction 1.
  467.  *
  468.  */
  469.  
  470. void CResDlg::OnResType1()
  471. {
  472.     INT     idx;
  473.     LONG    nNewResType;
  474.     char    szBuff[128];
  475.     char    szBuffer[256];
  476.     ULONG   ulNum   = 0;
  477.  
  478.     nNewResType = SendDlgItemMessage(IDC_RESTYPE1, CB_GETCURSEL, 0, 0L);
  479.  
  480.     if(nNewResType == m_nResType1)
  481.         return;
  482.  
  483.     switch(nNewResType)
  484.     {
  485.     case RES_AND:
  486.     case RES_OR:
  487.     case RES_NOT:
  488.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(FALSE);
  489.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(FALSE);
  490.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  491.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(FALSE);
  492.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(FALSE);
  493.         GetDlgItem(IDT_VALUE1)->ShowWindow(FALSE);
  494.         GetDlgItem(IDC_VALUE1)->ShowWindow(FALSE);
  495.         GetDlgItem(IDC_SUBRES1)->EnableWindow(TRUE);
  496.         break;
  497.  
  498.     case RES_CONTENT:
  499.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(TRUE);
  500.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(TRUE);
  501.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  502.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(TRUE);
  503.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(TRUE);
  504.         GetDlgItem(IDT_VALUE1)->ShowWindow(TRUE);
  505.         GetDlgItem(IDC_VALUE1)->ShowWindow(TRUE);
  506.         GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  507.         
  508.         GetDlgItem(IDT_VALUE1)->SetWindowText("Value:");
  509.         GetDlgItem(IDT_PROPTAG1)->SetWindowText("PropTag:");
  510.         GetDlgItem(IDT_RELATIONSHIP1)->SetWindowText("Fuzzy Level:");
  511.  
  512.         // update RELATIONSHIP
  513.         SendDlgItemMessage(IDC_RELATIONSHIP1, CB_RESETCONTENT, 0, 0L);
  514.         ulNum = GetRowCount("FuzzyLevel");
  515.  
  516.         for(idx = 0; idx < ulNum; idx++)
  517.         {
  518.             GetRowString("FuzzyLevel",idx,szBuffer);
  519.             SendDlgItemMessage(IDC_RELATIONSHIP1, CB_ADDSTRING, 0,
  520.                     (LPARAM)szBuffer);
  521.         }
  522.  
  523.         break;
  524.  
  525.     case RES_PROPERTY:
  526.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(TRUE);
  527.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(TRUE);
  528.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  529.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(TRUE);
  530.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(TRUE);
  531.         GetDlgItem(IDT_VALUE1)->ShowWindow(TRUE);
  532.         GetDlgItem(IDC_VALUE1)->ShowWindow(TRUE);
  533.         GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  534.         
  535.         GetDlgItem(IDT_VALUE1)->SetWindowText("Value:");
  536.         GetDlgItem(IDT_PROPTAG1)->SetWindowText("PropTag:");
  537.         GetDlgItem(IDT_RELATIONSHIP1)->SetWindowText("Relationship:");
  538.  
  539.         // update RELATIONSHIP
  540.         SendDlgItemMessage(IDC_RELATIONSHIP1, CB_RESETCONTENT, 0, 0L);
  541.         ulNum = GetRowCount("RelOp");
  542.         for(idx = 0; idx < ulNum; idx++)
  543.         {
  544.             GetRowString("RelOp",idx,szBuffer);
  545.             SendDlgItemMessage(IDC_RELATIONSHIP1, CB_ADDSTRING, 0,
  546.                     (LPARAM)szBuffer);
  547.         }
  548.         break;
  549.  
  550.     case RES_COMPAREPROPS:
  551.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(TRUE);
  552.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(TRUE);
  553.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(TRUE);
  554.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(TRUE);
  555.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(TRUE);
  556.         GetDlgItem(IDT_VALUE1)->ShowWindow(TRUE);
  557.         GetDlgItem(IDC_VALUE1)->ShowWindow(FALSE);
  558.         GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  559.         
  560.         GetDlgItem(IDT_PROPTAG1)->SetWindowText("PropTag1:");
  561.         GetDlgItem(IDT_VALUE1)->SetWindowText("PropTag2:");
  562.         GetDlgItem(IDT_RELATIONSHIP1)->SetWindowText("Relationship:");
  563.  
  564.         // update RELATIONSHIP
  565.         SendDlgItemMessage(IDC_RELATIONSHIP1, CB_RESETCONTENT, 0, 0L);
  566.         ulNum = GetRowCount("RelOp");
  567.         for(idx = 0; idx < ulNum; idx++)
  568.         {
  569.             GetRowString("RelOp",idx,szBuffer);
  570.             SendDlgItemMessage(IDC_RELATIONSHIP1, CB_ADDSTRING, 0,
  571.                     (LPARAM)szBuffer);
  572.         }
  573.  
  574.         // update second PROPS
  575.         SendDlgItemMessage(IDC_PROPTAG12, CB_RESETCONTENT, 0, (LPARAM)szBuff);
  576.         for(idx = 0; idx < m_lpCurColumns->cValues; idx++)
  577.         {
  578.             GetString("PropTags", m_lpCurColumns->aulPropTag[idx], szBuff);
  579.             SendDlgItemMessage(IDC_PROPTAG12, CB_ADDSTRING, 0, (LPARAM)szBuff);
  580.         }
  581.         break;
  582.  
  583.     case RES_BITMASK:
  584.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(TRUE);
  585.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(TRUE);
  586.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  587.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(TRUE);
  588.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(TRUE);
  589.         GetDlgItem(IDT_VALUE1)->ShowWindow(TRUE);
  590.         GetDlgItem(IDC_VALUE1)->ShowWindow(TRUE);
  591.         GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  592.  
  593.         GetDlgItem(IDT_VALUE1)->SetWindowText("Mask: ex. 0x00000678");
  594.         GetDlgItem(IDT_PROPTAG1)->SetWindowText("PropTag:");
  595.         GetDlgItem(IDT_RELATIONSHIP1)->SetWindowText("Relationship:");
  596.  
  597.         // update RELATIONSHIP
  598.         SendDlgItemMessage(IDC_RELATIONSHIP1, CB_RESETCONTENT, 0, 0L);
  599.         ulNum = GetRowCount("Bmr");
  600.         for(idx = 0; idx < ulNum; idx++)
  601.         {
  602.             GetRowString("Bmr",idx,szBuffer);
  603.             SendDlgItemMessage(IDC_RELATIONSHIP1, CB_ADDSTRING, 0,
  604.                     (LPARAM)szBuffer);
  605.         }
  606.         break;
  607.  
  608.     case RES_SUBRESTRICTION:
  609.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(FALSE);
  610.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(FALSE);
  611.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(TRUE);
  612.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(FALSE);
  613.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(FALSE);
  614.         GetDlgItem(IDT_VALUE1)->ShowWindow(TRUE);
  615.         GetDlgItem(IDC_VALUE1)->ShowWindow(FALSE);
  616.         GetDlgItem(IDC_SUBRES1)->EnableWindow(TRUE);
  617.  
  618.         GetDlgItem(IDT_VALUE1)->SetWindowText("ulSubObj:");
  619.  
  620.         // DIFFERENT SPECIAL PROPERTIES
  621.         SendDlgItemMessage(IDC_PROPTAG12, CB_RESETCONTENT, 0, 0L);
  622.         SendDlgItemMessage(IDC_PROPTAG12, CB_ADDSTRING,    0, (LPARAM)(char *)"PR_MESSAGE_ATTACHMENTS");
  623.         SendDlgItemMessage(IDC_PROPTAG12, CB_ADDSTRING,    0, (LPARAM)(char *)"PR_MESSAGE_RECIPIENTS");
  624.  
  625.         break;
  626.  
  627.     case RES_SIZE:
  628.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(TRUE);
  629.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(TRUE);
  630.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  631.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(TRUE);
  632.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(TRUE);
  633.         GetDlgItem(IDT_VALUE1)->ShowWindow(TRUE);
  634.         GetDlgItem(IDC_VALUE1)->ShowWindow(TRUE);
  635.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  636.         GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  637.  
  638.         GetDlgItem(IDT_PROPTAG1)->SetWindowText("PropTag:");
  639.         GetDlgItem(IDT_RELATIONSHIP1)->SetWindowText("Relationship:");
  640.         GetDlgItem(IDT_VALUE1)->SetWindowText("cb:");
  641.  
  642.         // update RELATIONSHIP
  643.         SendDlgItemMessage(IDC_RELATIONSHIP1, CB_RESETCONTENT, 0, 0L);
  644.         ulNum = GetRowCount("RelOp");
  645.         for(idx = 0; idx < ulNum; idx++)
  646.         {
  647.             GetRowString("RelOp",idx,szBuffer);
  648.             SendDlgItemMessage(IDC_RELATIONSHIP1, CB_ADDSTRING, 0,
  649.                     (LPARAM)szBuffer);
  650.         }
  651.  
  652.         break;
  653.  
  654.     case RES_EXIST:
  655.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(TRUE);
  656.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(TRUE);
  657.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  658.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(FALSE);
  659.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(FALSE);
  660.         GetDlgItem(IDT_VALUE1)->ShowWindow(FALSE);
  661.         GetDlgItem(IDC_VALUE1)->ShowWindow(FALSE);
  662.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  663.         GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  664.  
  665.         GetDlgItem(IDT_PROPTAG1)->SetWindowText("PropTag:");
  666.         break;
  667.  
  668.     case RES_COMMENT:
  669.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(FALSE);
  670.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(FALSE);
  671.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  672.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(FALSE);
  673.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(FALSE);
  674.         GetDlgItem(IDT_VALUE1)->ShowWindow(TRUE);
  675.         GetDlgItem(IDC_VALUE1)->ShowWindow(TRUE);
  676.         GetDlgItem(IDC_SUBRES1)->EnableWindow(TRUE);
  677.  
  678.         GetDlgItem(IDT_VALUE1)->SetWindowText("cValues:");
  679.  
  680.         break;
  681.  
  682.     
  683.     default:
  684.         GetDlgItem(IDT_PROPTAG1)->ShowWindow(FALSE);
  685.         GetDlgItem(IDC_PROPTAG1)->ShowWindow(FALSE);
  686.         GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  687.         GetDlgItem(IDT_RELATIONSHIP1)->ShowWindow(FALSE);
  688.         GetDlgItem(IDC_RELATIONSHIP1)->ShowWindow(FALSE);
  689.         GetDlgItem(IDT_VALUE1)->ShowWindow(FALSE);
  690.         GetDlgItem(IDC_VALUE1)->ShowWindow(FALSE);
  691.         GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  692.     }
  693.  
  694.     m_nResType1 = (int)nNewResType;
  695. }
  696.  
  697.  
  698. /*
  699.  -  CResDlg
  700.  -  OnResType2
  701.  -
  702.  *  Purpose:
  703.  *      Changes the view of the restriction based on the type for
  704.  *      Restriction 2.
  705.  *
  706.  */
  707.  
  708. void CResDlg::OnResType2()
  709. {
  710.     INT     idx;
  711.     LONG    nNewResType;
  712.     char    szBuff[128];
  713.     char    szBuffer[256];
  714.     ULONG   ulNum   = 0;
  715.  
  716.     nNewResType = SendDlgItemMessage(IDC_RESTYPE2, CB_GETCURSEL, 0, 0L);
  717.  
  718.     if(nNewResType == m_nResType2)
  719.         return;
  720.  
  721.     switch(nNewResType)
  722.     {
  723.     case RES_AND:
  724.     case RES_OR:
  725.     case RES_NOT:
  726.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(FALSE);
  727.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(FALSE);
  728.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  729.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(FALSE);
  730.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(FALSE);
  731.         GetDlgItem(IDT_VALUE2)->ShowWindow(FALSE);
  732.         GetDlgItem(IDC_VALUE2)->ShowWindow(FALSE);
  733.         GetDlgItem(IDC_SUBRES2)->EnableWindow(TRUE);
  734.         break;
  735.  
  736.     case RES_CONTENT:
  737.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(TRUE);
  738.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(TRUE);
  739.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  740.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(TRUE);
  741.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(TRUE);
  742.         GetDlgItem(IDT_VALUE2)->ShowWindow(TRUE);
  743.         GetDlgItem(IDC_VALUE2)->ShowWindow(TRUE);
  744.  
  745.         GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  746.         GetDlgItem(IDT_VALUE2)->SetWindowText("Value:");
  747.         GetDlgItem(IDT_PROPTAG2)->SetWindowText("PropTag:");
  748.         GetDlgItem(IDT_RELATIONSHIP2)->SetWindowText("Fuzzy Level:");
  749.  
  750.         // update RELATIONSHIP
  751.         SendDlgItemMessage(IDC_RELATIONSHIP2, CB_RESETCONTENT, 0, 0L);
  752.         ulNum = GetRowCount("FuzzyLevel");
  753.         for(idx = 0; idx < ulNum; idx++)
  754.         {
  755.             GetRowString("FuzzyLevel",idx,szBuffer);
  756.             SendDlgItemMessage(IDC_RELATIONSHIP2, CB_ADDSTRING, 0,
  757.                     (LPARAM)szBuffer);
  758.         }
  759.         break;
  760.  
  761.     case RES_PROPERTY:
  762.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(TRUE);
  763.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(TRUE);
  764.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  765.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(TRUE);
  766.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(TRUE);
  767.         GetDlgItem(IDT_VALUE2)->ShowWindow(TRUE);
  768.         GetDlgItem(IDC_VALUE2)->ShowWindow(TRUE);
  769.  
  770.         GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  771.         GetDlgItem(IDT_VALUE2)->SetWindowText("Value:");
  772.         GetDlgItem(IDT_PROPTAG2)->SetWindowText("PropTag:");
  773.         GetDlgItem(IDT_RELATIONSHIP2)->SetWindowText("Relationship:");
  774.  
  775.         // update RELATIONSHIP
  776.         SendDlgItemMessage(IDC_RELATIONSHIP2, CB_RESETCONTENT, 0, 0L);
  777.         ulNum = GetRowCount("RelOp");
  778.         for(idx = 0; idx < ulNum; idx++)
  779.         {
  780.             GetRowString("RelOp",idx,szBuffer);
  781.             SendDlgItemMessage(IDC_RELATIONSHIP2, CB_ADDSTRING, 0,
  782.                     (LPARAM)szBuffer);
  783.         }
  784.  
  785.         break;
  786.  
  787.     case RES_COMPAREPROPS:
  788.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(TRUE);
  789.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(TRUE);
  790.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(TRUE);
  791.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(TRUE);
  792.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(TRUE);
  793.         GetDlgItem(IDT_VALUE2)->ShowWindow(TRUE);
  794.         GetDlgItem(IDC_VALUE2)->ShowWindow(FALSE);
  795.  
  796.         GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  797.         GetDlgItem(IDT_PROPTAG2)->SetWindowText("PropTag1:");
  798.         GetDlgItem(IDT_VALUE2)->SetWindowText("PropTag2:");
  799.         GetDlgItem(IDT_RELATIONSHIP2)->SetWindowText("Relationship:");
  800.  
  801.         // update RELATIONSHIP
  802.         SendDlgItemMessage(IDC_RELATIONSHIP2, CB_RESETCONTENT, 0, 0L);
  803.         ulNum = GetRowCount("RelOp");
  804.         for(idx = 0; idx < ulNum; idx++)
  805.         {
  806.             GetRowString("RelOp",idx,szBuffer);
  807.             SendDlgItemMessage(IDC_RELATIONSHIP2, CB_ADDSTRING, 0,
  808.                     (LPARAM)szBuffer);
  809.         }
  810.  
  811.         // update 2nd PROPS
  812.         SendDlgItemMessage(IDC_PROPTAG22, CB_RESETCONTENT, 0, (LPARAM)szBuff);
  813.         for(idx = 0; idx < m_lpCurColumns->cValues; idx++)
  814.         {
  815.             GetString("PropTags", m_lpCurColumns->aulPropTag[idx], szBuff);
  816.             SendDlgItemMessage(IDC_PROPTAG22, CB_ADDSTRING, 0, (LPARAM)szBuff);
  817.         }
  818.         break;
  819.  
  820.     case RES_BITMASK:
  821.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(TRUE);
  822.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(TRUE);
  823.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  824.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(TRUE);
  825.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(TRUE);
  826.         GetDlgItem(IDT_VALUE2)->ShowWindow(TRUE);
  827.         GetDlgItem(IDC_VALUE2)->ShowWindow(TRUE);
  828.  
  829.         GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  830.         GetDlgItem(IDT_VALUE2)->SetWindowText("Mask: ex. 0x00000678");
  831.         GetDlgItem(IDT_PROPTAG2)->SetWindowText("PropTag:");
  832.         GetDlgItem(IDT_RELATIONSHIP2)->SetWindowText("Relationship:");
  833.  
  834.  
  835.         // update RELATIONSHIP
  836.         SendDlgItemMessage(IDC_RELATIONSHIP2, CB_RESETCONTENT, 0, 0L);
  837.         ulNum = GetRowCount("Bmr");
  838.         for(idx = 0; idx < ulNum; idx++)
  839.         {
  840.             GetRowString("Bmr",idx,szBuffer);
  841.             SendDlgItemMessage(IDC_RELATIONSHIP2, CB_ADDSTRING, 0,
  842.                     (LPARAM)szBuffer);
  843.         }
  844.  
  845.         break;
  846.  
  847.     case RES_SUBRESTRICTION:
  848.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(FALSE);
  849.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(FALSE);
  850.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(TRUE);
  851.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(FALSE);
  852.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(FALSE);
  853.         GetDlgItem(IDT_VALUE2)->ShowWindow(TRUE);
  854.         GetDlgItem(IDC_VALUE2)->ShowWindow(FALSE);
  855.         GetDlgItem(IDC_SUBRES2)->EnableWindow(TRUE);
  856.  
  857.         GetDlgItem(IDT_VALUE2)->SetWindowText("ulSubObj:");
  858.  
  859.         // DIFFERENT SPECIAL PROPERTIES
  860.         SendDlgItemMessage(IDC_PROPTAG22, CB_RESETCONTENT, 0, 0L);
  861.         SendDlgItemMessage(IDC_PROPTAG22, CB_ADDSTRING,    0, (LPARAM)(char *)"PR_MESSAGE_ATTACHMENTS");
  862.         SendDlgItemMessage(IDC_PROPTAG22, CB_ADDSTRING,    0, (LPARAM)(char *)"PR_MESSAGE_RECIPIENTS");
  863.                 
  864.         break;
  865.  
  866.     case RES_SIZE:
  867.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(TRUE);
  868.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(TRUE);
  869.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  870.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(TRUE);
  871.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(TRUE);
  872.         GetDlgItem(IDT_VALUE2)->ShowWindow(TRUE);
  873.         GetDlgItem(IDC_VALUE2)->ShowWindow(TRUE);
  874.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  875.         GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  876.  
  877.         GetDlgItem(IDT_PROPTAG2)->SetWindowText("PropTag:");
  878.         GetDlgItem(IDT_RELATIONSHIP2)->SetWindowText("Relationship:");
  879.         GetDlgItem(IDT_VALUE2)->SetWindowText("cb:");
  880.  
  881.         // update RELATIONSHIP
  882.         SendDlgItemMessage(IDC_RELATIONSHIP2, CB_RESETCONTENT, 0, 0L);
  883.         ulNum = GetRowCount("RelOp");
  884.         for(idx = 0; idx < ulNum; idx++)
  885.         {
  886.             GetRowString("RelOp",idx,szBuffer);
  887.             SendDlgItemMessage(IDC_RELATIONSHIP2, CB_ADDSTRING, 0,
  888.                     (LPARAM)szBuffer);
  889.         }
  890.  
  891.         break;
  892.  
  893.     case RES_EXIST:
  894.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(TRUE);
  895.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(TRUE);
  896.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  897.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(FALSE);
  898.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(FALSE);
  899.         GetDlgItem(IDT_VALUE2)->ShowWindow(FALSE);
  900.         GetDlgItem(IDC_VALUE2)->ShowWindow(FALSE);
  901.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  902.         GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  903.  
  904.         GetDlgItem(IDT_PROPTAG2)->SetWindowText("PropTag:");
  905.         break;
  906.  
  907.  
  908.     case RES_COMMENT:
  909.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(FALSE);
  910.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(FALSE);
  911.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  912.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(FALSE);
  913.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(FALSE);
  914.         GetDlgItem(IDT_VALUE2)->ShowWindow(TRUE);
  915.         GetDlgItem(IDC_VALUE2)->ShowWindow(TRUE);
  916.         GetDlgItem(IDC_SUBRES2)->EnableWindow(TRUE);
  917.  
  918.         GetDlgItem(IDT_VALUE2)->SetWindowText("cValues:");
  919.  
  920.         break;
  921.  
  922.  
  923.  
  924.     default:
  925.         GetDlgItem(IDT_PROPTAG2)->ShowWindow(FALSE);
  926.         GetDlgItem(IDC_PROPTAG2)->ShowWindow(FALSE);
  927.         GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  928.         GetDlgItem(IDT_RELATIONSHIP2)->ShowWindow(FALSE);
  929.         GetDlgItem(IDC_RELATIONSHIP2)->ShowWindow(FALSE);
  930.         GetDlgItem(IDT_VALUE2)->ShowWindow(FALSE);
  931.         GetDlgItem(IDC_VALUE2)->ShowWindow(FALSE);
  932.         GetDlgItem(IDC_VALUE2)->ShowWindow(FALSE);
  933.         GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  934.   
  935.     }
  936.  
  937.     m_nResType2 = (int)nNewResType;
  938. }
  939.  
  940.  
  941. /*
  942.  -  CResDlg
  943.  -  OnResType3
  944.  -
  945.  *  Purpose:
  946.  *      Changes the view of the restriction based on the type for
  947.  *      Restriction 3.
  948.  *
  949.  */
  950.  
  951. void CResDlg::OnResType3()
  952. {
  953.     INT     idx;
  954.     LONG    nNewResType;
  955.     char    szBuff[128];
  956.     char    szBuffer[256];
  957.     ULONG   ulNum   = 0;
  958.  
  959.     nNewResType = SendDlgItemMessage(IDC_RESTYPE3, CB_GETCURSEL, 0, 0L);
  960.  
  961.     if(nNewResType == m_nResType3)
  962.         return;
  963.  
  964.     switch(nNewResType)
  965.     {
  966.     case RES_AND:
  967.     case RES_OR:
  968.     case RES_NOT:
  969.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(FALSE);
  970.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(FALSE);
  971.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  972.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(FALSE);
  973.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(FALSE);
  974.         GetDlgItem(IDT_VALUE3)->ShowWindow(FALSE);
  975.         GetDlgItem(IDC_VALUE3)->ShowWindow(FALSE);
  976.         GetDlgItem(IDC_SUBRES3)->EnableWindow(TRUE);
  977.         break;
  978.  
  979.     case RES_CONTENT:
  980.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(TRUE);
  981.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(TRUE);
  982.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  983.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(TRUE);
  984.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(TRUE);
  985.         GetDlgItem(IDT_VALUE3)->ShowWindow(TRUE);
  986.         GetDlgItem(IDC_VALUE3)->ShowWindow(TRUE);
  987.  
  988.         GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  989.         GetDlgItem(IDT_VALUE3)->SetWindowText("Value:");
  990.         GetDlgItem(IDT_PROPTAG3)->SetWindowText("PropTag:");
  991.         GetDlgItem(IDT_RELATIONSHIP3)->SetWindowText("Fuzzy Level:");
  992.  
  993.         // update RELATIONSHIP
  994.         SendDlgItemMessage(IDC_RELATIONSHIP3, CB_RESETCONTENT, 0, 0L);
  995.         ulNum = GetRowCount("FuzzyLevel");
  996.         for(idx = 0; idx < ulNum; idx++)
  997.         {
  998.             GetRowString("FuzzyLevel",idx,szBuffer);
  999.             SendDlgItemMessage(IDC_RELATIONSHIP3, CB_ADDSTRING, 0,
  1000.                     (LPARAM)szBuffer);
  1001.         }
  1002.  
  1003.         break;
  1004.  
  1005.     case RES_PROPERTY:
  1006.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(TRUE);
  1007.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(TRUE);
  1008.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1009.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(TRUE);
  1010.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(TRUE);
  1011.         GetDlgItem(IDT_VALUE3)->ShowWindow(TRUE);
  1012.         GetDlgItem(IDC_VALUE3)->ShowWindow(TRUE);
  1013.  
  1014.         GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1015.         GetDlgItem(IDT_VALUE3)->SetWindowText("Value:");
  1016.         GetDlgItem(IDT_PROPTAG3)->SetWindowText("PropTag:");
  1017.         GetDlgItem(IDT_RELATIONSHIP3)->SetWindowText("Relationship:");
  1018.  
  1019.         // update RELATIONSHIP
  1020.         SendDlgItemMessage(IDC_RELATIONSHIP3, CB_RESETCONTENT, 0, 0L);
  1021.         ulNum = GetRowCount("RelOp");
  1022.         for(idx = 0; idx < ulNum; idx++)
  1023.         {
  1024.             GetRowString("RelOp",idx,szBuffer);
  1025.             SendDlgItemMessage(IDC_RELATIONSHIP3, CB_ADDSTRING, 0,
  1026.                     (LPARAM)szBuffer);
  1027.         }
  1028.  
  1029.         break;
  1030.  
  1031.     case RES_COMPAREPROPS:
  1032.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(TRUE);
  1033.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(TRUE);
  1034.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(TRUE);
  1035.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(TRUE);
  1036.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(TRUE);
  1037.         GetDlgItem(IDT_VALUE3)->ShowWindow(TRUE);
  1038.         GetDlgItem(IDC_VALUE3)->ShowWindow(FALSE);
  1039.  
  1040.         GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1041.         GetDlgItem(IDT_PROPTAG3)->SetWindowText("PropTag1:");
  1042.         GetDlgItem(IDT_VALUE3)->SetWindowText("PropTag2:");
  1043.         GetDlgItem(IDT_RELATIONSHIP3)->SetWindowText("Relationship:");
  1044.  
  1045.         // update RELATIONSHIP
  1046.         SendDlgItemMessage(IDC_RELATIONSHIP3, CB_RESETCONTENT, 0, 0L);
  1047.         ulNum = GetRowCount("RelOp");
  1048.         for(idx = 0; idx < ulNum; idx++)
  1049.         {
  1050.             GetRowString("RelOp",idx,szBuffer);
  1051.             SendDlgItemMessage(IDC_RELATIONSHIP3, CB_ADDSTRING, 0,
  1052.                     (LPARAM)szBuffer);
  1053.         }
  1054.  
  1055.         // update 2nd PROPS
  1056.         SendDlgItemMessage(IDC_PROPTAG32, CB_RESETCONTENT, 0, (LPARAM)szBuff);
  1057.         for(idx = 0; idx < m_lpCurColumns->cValues; idx++)
  1058.         {
  1059.             GetString("PropTags", m_lpCurColumns->aulPropTag[idx], szBuff);
  1060.             SendDlgItemMessage(IDC_PROPTAG32, CB_ADDSTRING, 0, (LPARAM)szBuff);
  1061.         }
  1062.         break;
  1063.  
  1064.     case RES_BITMASK:
  1065.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(TRUE);
  1066.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(TRUE);
  1067.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1068.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(TRUE);
  1069.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(TRUE);
  1070.         GetDlgItem(IDT_VALUE3)->ShowWindow(TRUE);
  1071.         GetDlgItem(IDC_VALUE3)->ShowWindow(TRUE);
  1072.  
  1073.         GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1074.         GetDlgItem(IDT_VALUE3)->SetWindowText("Mask: ex. 0x00000678");
  1075.         GetDlgItem(IDT_PROPTAG3)->SetWindowText("PropTag:");
  1076.         GetDlgItem(IDT_RELATIONSHIP3)->SetWindowText("Relationship:");
  1077.  
  1078.         // update RELATIONSHIP
  1079.         SendDlgItemMessage(IDC_RELATIONSHIP3, CB_RESETCONTENT, 0, 0L);
  1080.         ulNum = GetRowCount("Bmr");
  1081.         for(idx = 0; idx < ulNum; idx++)
  1082.         {
  1083.             GetRowString("Bmr",idx,szBuffer);
  1084.             SendDlgItemMessage(IDC_RELATIONSHIP3, CB_ADDSTRING, 0,
  1085.                     (LPARAM)szBuffer);
  1086.         }
  1087.  
  1088.         break;
  1089.  
  1090.     case RES_SUBRESTRICTION:
  1091.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(FALSE);
  1092.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(FALSE);
  1093.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(TRUE);
  1094.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(FALSE);
  1095.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(FALSE);
  1096.         GetDlgItem(IDT_VALUE3)->ShowWindow(TRUE);
  1097.         GetDlgItem(IDC_VALUE3)->ShowWindow(FALSE);
  1098.         GetDlgItem(IDC_SUBRES3)->EnableWindow(TRUE);
  1099.         
  1100.         GetDlgItem(IDT_VALUE3)->SetWindowText("ulSubObj:");
  1101.  
  1102.         // DIFFERENT SPECIAL PROPERTIES
  1103.         SendDlgItemMessage(IDC_PROPTAG32, CB_RESETCONTENT, 0, 0L);
  1104.         SendDlgItemMessage(IDC_PROPTAG32, CB_ADDSTRING,    0, (LPARAM)(char *)"PR_MESSAGE_ATTACHMENTS");
  1105.         SendDlgItemMessage(IDC_PROPTAG32, CB_ADDSTRING,    0, (LPARAM)(char *)"PR_MESSAGE_RECIPIENTS");
  1106.         
  1107.         break;
  1108.  
  1109.     case RES_SIZE:
  1110.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(TRUE);
  1111.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(TRUE);
  1112.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1113.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(TRUE);
  1114.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(TRUE);
  1115.         GetDlgItem(IDT_VALUE3)->ShowWindow(TRUE);
  1116.         GetDlgItem(IDC_VALUE3)->ShowWindow(TRUE);
  1117.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1118.         GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1119.  
  1120.         GetDlgItem(IDT_PROPTAG3)->SetWindowText("PropTag:");
  1121.         GetDlgItem(IDT_RELATIONSHIP3)->SetWindowText("Relationship:");
  1122.         GetDlgItem(IDT_VALUE3)->SetWindowText("cb:");
  1123.  
  1124.         // update RELATIONSHIP
  1125.         SendDlgItemMessage(IDC_RELATIONSHIP3, CB_RESETCONTENT, 0, 0L);
  1126.         ulNum = GetRowCount("RelOp");
  1127.         for(idx = 0; idx < ulNum; idx++)
  1128.         {
  1129.             GetRowString("RelOp",idx,szBuffer);
  1130.             SendDlgItemMessage(IDC_RELATIONSHIP3, CB_ADDSTRING, 0,
  1131.                     (LPARAM)szBuffer);
  1132.         }
  1133.         break;
  1134.  
  1135.     case RES_EXIST:
  1136.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(TRUE);
  1137.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(TRUE);
  1138.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1139.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(FALSE);
  1140.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(FALSE);
  1141.         GetDlgItem(IDT_VALUE3)->ShowWindow(FALSE);
  1142.         GetDlgItem(IDC_VALUE3)->ShowWindow(FALSE);
  1143.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1144.         GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1145.  
  1146.         GetDlgItem(IDT_PROPTAG3)->SetWindowText("PropTag:");
  1147.         
  1148.         break;
  1149.  
  1150.     case RES_COMMENT:
  1151.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(FALSE);
  1152.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(FALSE);
  1153.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1154.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(FALSE);
  1155.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(FALSE);
  1156.         GetDlgItem(IDT_VALUE3)->ShowWindow(TRUE);
  1157.         GetDlgItem(IDC_VALUE3)->ShowWindow(TRUE);
  1158.         GetDlgItem(IDC_SUBRES3)->EnableWindow(TRUE);
  1159.  
  1160.         GetDlgItem(IDT_VALUE2)->SetWindowText("cValues:");
  1161.         break;
  1162.  
  1163.  
  1164.     default:
  1165.         GetDlgItem(IDT_PROPTAG3)->ShowWindow(FALSE);
  1166.         GetDlgItem(IDC_PROPTAG3)->ShowWindow(FALSE);
  1167.         GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1168.         GetDlgItem(IDT_RELATIONSHIP3)->ShowWindow(FALSE);
  1169.         GetDlgItem(IDC_RELATIONSHIP3)->ShowWindow(FALSE);
  1170.         GetDlgItem(IDT_VALUE3)->ShowWindow(FALSE);
  1171.         GetDlgItem(IDC_VALUE3)->ShowWindow(FALSE);
  1172.         GetDlgItem(IDC_VALUE3)->ShowWindow(FALSE);
  1173.         GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1174.     }
  1175.  
  1176.     m_nResType3 = (int)nNewResType;
  1177. }
  1178.  
  1179.  
  1180. /*
  1181.  -  CResDlg
  1182.  -  OnSubRes1
  1183.  -
  1184.  *  Purpose:
  1185.  *      Creates a sub-Restriction for Restriction 1.
  1186.  *
  1187.  */
  1188.  
  1189. void CResDlg::OnSubRes1()
  1190. {
  1191.     LPSRestriction  lpRes;
  1192.     ULONG           rt;
  1193.  
  1194.     rt = SendDlgItemMessage(IDC_RESTYPE1, CB_GETCURSEL, 0, 0L);
  1195.  
  1196.     if(rt == RES_NOT)
  1197.     {
  1198.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1199.  
  1200.         m_lpSubRes[0].rt = RES_NOT;
  1201.         m_lpSubRes[0].res.resNot.lpRes = lpRes;
  1202.     }
  1203.     else if(rt == RES_SUBRESTRICTION)
  1204.     {
  1205.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1206.  
  1207.         m_lpSubRes[0].rt = RES_SUBRESTRICTION;
  1208.         m_lpSubRes[0].res.resSub.lpRes = lpRes;
  1209.     }
  1210.     else if(rt == RES_COMMENT)
  1211.     {
  1212.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1213.  
  1214.         m_lpSubRes[0].rt = RES_COMMENT;
  1215.         m_lpSubRes[0].res.resComment.lpRes = lpRes;
  1216.     }
  1217.     else
  1218.     {
  1219.         lpRes = &m_lpSubRes[0];
  1220.     }
  1221.  
  1222.     CResDlg dlgSubRes1(m_lpCurColumns, lpRes);
  1223.     dlgSubRes1.SetWindowText("Sub Restriction");
  1224.  
  1225.     if(dlgSubRes1.DoModal() != IDOK) 
  1226.     {
  1227.         if(rt == RES_NOT)
  1228.         {
  1229.             m_lpSubRes[0].res.resNot.lpRes = NULL;
  1230.             SendDlgItemMessage(IDC_RESTYPE1, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1231.             GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  1232.         }
  1233.         else if(rt ==  RES_SUBRESTRICTION )
  1234.         { 
  1235.             m_lpSubRes[0].res.resSub.lpRes = NULL;
  1236.             SendDlgItemMessage(IDC_RESTYPE1, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1237.             GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  1238.             
  1239.             GetDlgItem(IDT_VALUE1)->ShowWindow(FALSE);
  1240.             GetDlgItem(IDC_PROPTAG12)->ShowWindow(FALSE);
  1241.         }
  1242.         else if(rt ==  RES_COMMENT )
  1243.         {
  1244.             m_lpSubRes[0].res.resComment.lpRes = NULL;
  1245.             SendDlgItemMessage(IDC_RESTYPE1, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1246.             GetDlgItem(IDC_SUBRES1)->EnableWindow(FALSE);
  1247.          
  1248.             GetDlgItem(IDT_VALUE1)->ShowWindow(FALSE);
  1249.             GetDlgItem(IDC_VALUE1)->ShowWindow(FALSE);
  1250.         }        
  1251.     }
  1252. }
  1253.  
  1254.  
  1255. /*
  1256.  -  CResDlg
  1257.  -  OnSubRes2
  1258.  -
  1259.  *  Purpose:
  1260.  *      Creates a sub-Restriction for Restriction 2.
  1261.  *
  1262.  */
  1263.  
  1264. void CResDlg::OnSubRes2()
  1265. {
  1266.     LPSRestriction  lpRes;
  1267.     ULONG           rt;
  1268.  
  1269.     rt = SendDlgItemMessage(IDC_RESTYPE2, CB_GETCURSEL, 0, 0L);
  1270.  
  1271.     if(rt == RES_NOT)
  1272.     {
  1273.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1274.  
  1275.         m_lpSubRes[1].rt = RES_NOT;
  1276.         m_lpSubRes[1].res.resNot.lpRes = lpRes;
  1277.     }
  1278.     else if(rt == RES_SUBRESTRICTION)
  1279.     {
  1280.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1281.  
  1282.         m_lpSubRes[1].rt = RES_SUBRESTRICTION;
  1283.         m_lpSubRes[1].res.resSub.lpRes = lpRes;
  1284.     }
  1285.     else if(rt == RES_COMMENT)
  1286.     {
  1287.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1288.  
  1289.         m_lpSubRes[1].rt = RES_COMMENT;
  1290.         m_lpSubRes[1].res.resComment.lpRes = lpRes;
  1291.     }
  1292.     else
  1293.     {
  1294.         lpRes = &m_lpSubRes[1];
  1295.     }
  1296.  
  1297.     CResDlg dlgSubRes2(m_lpCurColumns, lpRes);
  1298.     dlgSubRes2.SetWindowText("Sub Restriction");
  1299.  
  1300.     if(dlgSubRes2.DoModal() != IDOK) 
  1301.     {
  1302.         if(rt == RES_NOT)
  1303.         {
  1304.             m_lpSubRes[1].res.resNot.lpRes = NULL;
  1305.             SendDlgItemMessage(IDC_RESTYPE2, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1306.             GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  1307.  
  1308.         }
  1309.         else if(rt ==  RES_SUBRESTRICTION )
  1310.         { 
  1311.             m_lpSubRes[1].res.resSub.lpRes = NULL;
  1312.             SendDlgItemMessage(IDC_RESTYPE2, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1313.             GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  1314.             GetDlgItem(IDT_VALUE2)->ShowWindow(FALSE);
  1315.             GetDlgItem(IDC_PROPTAG22)->ShowWindow(FALSE);
  1316.         }
  1317.         else if(rt ==  RES_COMMENT )
  1318.         {
  1319.             m_lpSubRes[1].res.resComment.lpRes = NULL;
  1320.             SendDlgItemMessage(IDC_RESTYPE2, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1321.             GetDlgItem(IDC_SUBRES2)->EnableWindow(FALSE);
  1322.  
  1323.             GetDlgItem(IDT_VALUE2)->ShowWindow(FALSE);
  1324.             GetDlgItem(IDC_VALUE2)->ShowWindow(FALSE);
  1325.         }        
  1326.     }
  1327. }
  1328.  
  1329.  
  1330. /*
  1331.  -  CResDlg
  1332.  -  OnSubRes3
  1333.  -
  1334.  *  Purpose:
  1335.  *      Creates a sub-Restriction for Restriction 3.
  1336.  *
  1337.  */
  1338.  
  1339. void CResDlg::OnSubRes3()
  1340. {
  1341.     LPSRestriction  lpRes;
  1342.     ULONG           rt;
  1343.  
  1344.     rt = SendDlgItemMessage(IDC_RESTYPE3, CB_GETCURSEL, 0, 0L);
  1345.  
  1346.     if(rt == RES_NOT)
  1347.     {
  1348.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1349.  
  1350.         m_lpSubRes[2].rt = RES_NOT;
  1351.         m_lpSubRes[2].res.resNot.lpRes = lpRes;
  1352.     }
  1353.     else if(rt == RES_SUBRESTRICTION)
  1354.     {
  1355.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1356.  
  1357.         m_lpSubRes[2].rt = RES_SUBRESTRICTION;
  1358.         m_lpSubRes[2].res.resSub.lpRes = lpRes;
  1359.     }
  1360.     else if(rt == RES_COMMENT)
  1361.     {
  1362.         lpRes = (LPSRestriction)PvAllocMore(sizeof(SRestriction), m_lpSubRes);
  1363.  
  1364.         m_lpSubRes[2].rt = RES_COMMENT;
  1365.         m_lpSubRes[2].res.resComment.lpRes = lpRes;
  1366.     }
  1367.     else
  1368.     {
  1369.         lpRes = &m_lpSubRes[2];
  1370.     }
  1371.  
  1372.     CResDlg dlgSubRes3(m_lpCurColumns, lpRes);
  1373.     dlgSubRes3.SetWindowText("Sub Restriction");
  1374.  
  1375.  
  1376.     if(dlgSubRes3.DoModal() != IDOK) 
  1377.     {
  1378.         if(rt == RES_NOT)
  1379.         {
  1380.             m_lpSubRes[2].res.resNot.lpRes = NULL;
  1381.             SendDlgItemMessage(IDC_RESTYPE3, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1382.             GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1383.  
  1384.         }
  1385.         else if(rt ==  RES_SUBRESTRICTION )
  1386.         { 
  1387.             m_lpSubRes[2].res.resSub.lpRes = NULL;
  1388.             SendDlgItemMessage(IDC_RESTYPE3, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1389.             GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1390.  
  1391.             GetDlgItem(IDT_VALUE3)->ShowWindow(FALSE);
  1392.             GetDlgItem(IDC_PROPTAG32)->ShowWindow(FALSE);
  1393.  
  1394.         }                         
  1395.         else if(rt ==  RES_COMMENT )
  1396.         {
  1397.             m_lpSubRes[2].res.resComment.lpRes = NULL;
  1398.             SendDlgItemMessage(IDC_RESTYPE3, CB_SETCURSEL, (WPARAM) ulNumResTypes, 0L);
  1399.             GetDlgItem(IDC_SUBRES3)->EnableWindow(FALSE);
  1400.  
  1401.             GetDlgItem(IDT_VALUE3)->ShowWindow(FALSE);
  1402.             GetDlgItem(IDC_VALUE3)->ShowWindow(FALSE);
  1403.         }        
  1404.     }
  1405. }
  1406.  
  1407.  
  1408. /*
  1409.  -  CResDlg
  1410.  -  OnOK
  1411.  -
  1412.  *  Purpose:
  1413.  *      Collects the restiction and sub-restriction information and does
  1414.  *      the appropriate assignments.  This function performs the assignments
  1415.  *      for all three restrictions.
  1416.  *
  1417.  */
  1418.  
  1419. void CResDlg::OnOK()
  1420. {
  1421.     ULONG           cRes = 1;
  1422.     char            szBuff[1024];
  1423.     char            *szEnd      = NULL;
  1424.     LPSPropValue    lpProp;
  1425.     ULONG           idx;
  1426.     BOOL            fTrans;
  1427.     LONG            lSelection   = 0;
  1428.     ULONG           i = 0;
  1429.  
  1430.     m_lpRes->rt = m_fComb;
  1431.     m_lpRes->res.resAnd.cRes = 0;
  1432.     m_lpRes->res.resAnd.lpRes = m_lpSubRes;
  1433.  
  1434.     /* Collect values from Restriction 1 group */
  1435.     switch(m_lpSubRes[0].rt = SendDlgItemMessage(IDC_RESTYPE1,
  1436.             CB_GETCURSEL, 0, 0L))
  1437.     {
  1438.     case RES_AND:
  1439.     case RES_OR:
  1440.     case RES_NOT:
  1441.         m_lpRes[0].res.resAnd.cRes++;
  1442.         break;
  1443.  
  1444.     case RES_CONTENT:
  1445.         idx = SendDlgItemMessage(IDC_PROPTAG1, CB_GETCURSEL, 0, 0L);
  1446.         m_lpSubRes[0].res.resContent.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1447.  
  1448.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP1, CB_GETCURSEL, 0, 0L);
  1449.         m_lpSubRes[0].res.resContent.ulFuzzyLevel = GetRowID("FuzzyLevel",lSelection);
  1450.         
  1451.         SendDlgItemMessage(IDC_VALUE1, WM_GETTEXT, sizeof(szBuff),
  1452.                 (LPARAM)szBuff);
  1453.         lpProp = (LPSPropValue)PvAllocMore(sizeof(SPropValue),
  1454.                 (LPVOID)m_lpSubRes);
  1455.  
  1456.         MakePropValue(lpProp, PROP_TAG(PT_TSTRING, 0x0000), szBuff, m_lpSubRes);
  1457.  
  1458.         m_lpSubRes[0].res.resContent.lpProp = lpProp;
  1459.         m_lpRes[0].res.resAnd.cRes++;
  1460.         break;
  1461.  
  1462.     case RES_PROPERTY:
  1463.         idx = SendDlgItemMessage(IDC_PROPTAG1, CB_GETCURSEL, 0, 0L);
  1464.         m_lpSubRes[0].res.resProperty.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1465.  
  1466.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP1, CB_GETCURSEL, 0, 0L);
  1467.         m_lpSubRes[0].res.resProperty.relop  = GetRowID("RelOp",lSelection);
  1468.         
  1469.         SendDlgItemMessage(IDC_VALUE1, WM_GETTEXT, sizeof(szBuff),
  1470.                 (LPARAM)szBuff);
  1471.  
  1472.         lpProp = (LPSPropValue)PvAllocMore(sizeof(SPropValue),
  1473.                 (LPVOID)m_lpSubRes);
  1474.  
  1475.         MakePropValue(lpProp,m_lpCurColumns->aulPropTag[idx] , szBuff, m_lpSubRes);
  1476.         
  1477.         m_lpSubRes[0].res.resProperty.lpProp = lpProp;
  1478.         m_lpRes[0].res.resAnd.cRes++;
  1479.         break;
  1480.  
  1481.     case RES_COMPAREPROPS:
  1482.         idx = SendDlgItemMessage(IDC_PROPTAG1, CB_GETCURSEL, 0, 0L);
  1483.         m_lpSubRes[0].res.resCompareProps.ulPropTag1 = m_lpCurColumns->aulPropTag[idx];
  1484.  
  1485.         idx = SendDlgItemMessage(IDC_PROPTAG12, CB_GETCURSEL, 0, 0L);
  1486.         m_lpSubRes[0].res.resCompareProps.ulPropTag2 = m_lpCurColumns->aulPropTag[idx];
  1487.  
  1488.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP1, CB_GETCURSEL, 0, 0L);
  1489.         m_lpSubRes[0].res.resCompareProps.relop  = GetRowID("RelOp",lSelection);
  1490.  
  1491.         m_lpRes[0].res.resAnd.cRes++;
  1492.         break;
  1493.  
  1494.     case RES_BITMASK:
  1495.         idx = SendDlgItemMessage(IDC_PROPTAG1, CB_GETCURSEL, 0, 0L);
  1496.         m_lpSubRes[0].res.resBitMask.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1497.  
  1498.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP1, CB_GETCURSEL, 0, 0L);
  1499.         m_lpSubRes[0].res.resBitMask.relBMR  = GetRowID("Bmr",lSelection);
  1500.  
  1501.         m_lpSubRes[0].res.resBitMask.relBMR = SendDlgItemMessage(IDC_RELATIONSHIP1,
  1502.                 CB_GETCURSEL, 0, 0L);
  1503.  
  1504.         SendDlgItemMessage(IDC_VALUE1, WM_GETTEXT, sizeof(szBuff),
  1505.                 (LPARAM)szBuff);
  1506.  
  1507. //        #ifdef WIN16
  1508. //            wsscanf(szBuff, "0x%lX", &m_lpSubRes[0].res.resBitMask.ulMask);
  1509. //        #else
  1510. //            sscanf(szBuff, "0x%lX", &m_lpSubRes[0].res.resBitMask.ulMask);
  1511. //        #endif
  1512.  
  1513.  
  1514.         m_lpSubRes[0].res.resBitMask.ulMask = strtoul(szBuff,&szEnd,16);
  1515.         
  1516.         m_lpRes[0].res.resAnd.cRes++;
  1517.         break;
  1518.  
  1519.     case RES_SIZE:
  1520.     
  1521.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP1, CB_GETCURSEL, 0, 0L);
  1522.         m_lpSubRes[0].res.resSize.relop  = GetRowID("RelOp",lSelection);
  1523.     
  1524.         idx = SendDlgItemMessage(IDC_PROPTAG1, CB_GETCURSEL, 0, 0L);
  1525.         m_lpSubRes[0].res.resSize.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1526.  
  1527.         m_lpSubRes[0].res.resSize.cb = (ULONG)GetDlgItemInt(IDC_VALUE1, &fTrans , FALSE );
  1528.  
  1529.         m_lpRes[0].res.resAnd.cRes++;
  1530.         break;
  1531.  
  1532.     case RES_EXIST:
  1533.         idx = SendDlgItemMessage(IDC_PROPTAG1, CB_GETCURSEL, 0, 0L);
  1534.         m_lpSubRes[0].res.resExist.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1535.  
  1536.         m_lpRes[0].res.resAnd.cRes++;
  1537.         break;
  1538.  
  1539.     case RES_SUBRESTRICTION:
  1540.         idx = SendDlgItemMessage(IDC_PROPTAG12, CB_GETCURSEL, 0, 0L);
  1541.         if( idx == 1 ) 
  1542.             m_lpSubRes[0].res.resSub.ulSubObject = PR_MESSAGE_RECIPIENTS;
  1543.         else
  1544.             m_lpSubRes[0].res.resSub.ulSubObject = PR_MESSAGE_ATTACHMENTS;
  1545.  
  1546.         m_lpRes[0].res.resAnd.cRes++;
  1547.         break;
  1548.  
  1549.     case RES_COMMENT:
  1550.         m_lpSubRes[0].res.resComment.cValues = (ULONG)GetDlgItemInt(IDC_VALUE1, &fTrans , FALSE );
  1551.  
  1552.         lpProp = (LPSPropValue)PvAllocMore( m_lpSubRes[0].res.resComment.cValues * sizeof(SPropValue),
  1553.                 (LPVOID)m_lpSubRes);
  1554.  
  1555.         for( i = 0 ; i < m_lpSubRes[0].res.resComment.cValues ; i++)
  1556.             MakePropValue( &(lpProp[i]),PR_SUBJECT, "TEST STRING", m_lpSubRes);
  1557.  
  1558.         m_lpSubRes[0].res.resComment.lpProp = lpProp;
  1559.         m_lpRes[0].res.resAnd.cRes++;
  1560.         break;
  1561.  
  1562.     default:
  1563.         break;
  1564.     }
  1565.  
  1566.     /* Collect values from Restriction 2 group */
  1567.     switch(m_lpSubRes[1].rt = SendDlgItemMessage(IDC_RESTYPE2,
  1568.             CB_GETCURSEL, 0, 0L))
  1569.     {
  1570.     case RES_AND:
  1571.     case RES_OR:
  1572.     case RES_NOT:
  1573.         m_lpRes[0].res.resAnd.cRes++;
  1574.         break;
  1575.  
  1576.     case RES_CONTENT:
  1577.         idx = SendDlgItemMessage(IDC_PROPTAG2, CB_GETCURSEL, 0, 0L);
  1578.         m_lpSubRes[1].res.resContent.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1579.  
  1580.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP2, CB_GETCURSEL, 0, 0L);
  1581.         m_lpSubRes[1].res.resContent.ulFuzzyLevel = GetRowID("FuzzyLevel",lSelection);
  1582.  
  1583.         SendDlgItemMessage(IDC_VALUE2, WM_GETTEXT, sizeof(szBuff),
  1584.                 (LPARAM)szBuff);
  1585.         lpProp = (LPSPropValue)PvAllocMore(sizeof(SPropValue),
  1586.                 (LPVOID)m_lpSubRes);
  1587.  
  1588.         MakePropValue(lpProp, PROP_TAG(PT_TSTRING, 0x0000), szBuff, m_lpSubRes);
  1589.  
  1590.         m_lpSubRes[1].res.resContent.lpProp = lpProp;
  1591.         m_lpRes[0].res.resAnd.cRes++;
  1592.         break;
  1593.  
  1594.     case RES_PROPERTY:
  1595.         idx = SendDlgItemMessage(IDC_PROPTAG2, CB_GETCURSEL, 0, 0L);
  1596.         m_lpSubRes[1].res.resProperty.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1597.  
  1598.  
  1599.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP2, CB_GETCURSEL, 0, 0L);
  1600.         m_lpSubRes[1].res.resProperty.relop  = GetRowID("RelOp",lSelection);
  1601.  
  1602.         SendDlgItemMessage(IDC_VALUE2, WM_GETTEXT, sizeof(szBuff),
  1603.                 (LPARAM)szBuff);
  1604.         lpProp = (LPSPropValue)PvAllocMore(sizeof(SPropValue),
  1605.                 (LPVOID)m_lpSubRes);
  1606.  
  1607.         MakePropValue(lpProp,m_lpCurColumns->aulPropTag[idx] , szBuff, m_lpSubRes);
  1608.  
  1609.         m_lpSubRes[1].res.resProperty.lpProp = lpProp;
  1610.         m_lpRes[0].res.resAnd.cRes++;
  1611.         break;
  1612.  
  1613.     case RES_COMPAREPROPS:
  1614.         idx = SendDlgItemMessage(IDC_PROPTAG2, CB_GETCURSEL, 0, 0L);
  1615.         m_lpSubRes[1].res.resCompareProps.ulPropTag1 = m_lpCurColumns->aulPropTag[idx];
  1616.  
  1617.         idx = SendDlgItemMessage(IDC_PROPTAG22, CB_GETCURSEL, 0, 0L);
  1618.         m_lpSubRes[1].res.resCompareProps.ulPropTag2 = m_lpCurColumns->aulPropTag[idx];
  1619.  
  1620.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP2, CB_GETCURSEL, 0, 0L);
  1621.         m_lpSubRes[1].res.resCompareProps.relop  = GetRowID("RelOp",lSelection);
  1622.  
  1623.         m_lpRes[0].res.resAnd.cRes++;
  1624.         break;
  1625.  
  1626.     case RES_BITMASK:
  1627.         idx = SendDlgItemMessage(IDC_PROPTAG2, CB_GETCURSEL, 0, 0L);
  1628.         m_lpSubRes[1].res.resBitMask.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1629.  
  1630.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP2, CB_GETCURSEL, 0, 0L);
  1631.         m_lpSubRes[1].res.resBitMask.relBMR  = GetRowID("Bmr",lSelection);
  1632.  
  1633.         SendDlgItemMessage(IDC_VALUE2, WM_GETTEXT, sizeof(szBuff),
  1634.                 (LPARAM)szBuff);
  1635.  
  1636. //        #ifdef WIN16
  1637. //            wsscanf(szBuff, "0x%lX", &m_lpSubRes[1].res.resBitMask.ulMask);
  1638. //        #else
  1639. //            sscanf(szBuff, "0x%lX", &m_lpSubRes[1].res.resBitMask.ulMask);
  1640. //        #endif
  1641.  
  1642.         m_lpSubRes[1].res.resBitMask.ulMask = strtoul(szBuff,&szEnd,16);
  1643.  
  1644.         m_lpRes[0].res.resAnd.cRes++;
  1645.         break;
  1646.  
  1647.     case RES_SIZE:
  1648.  
  1649.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP2, CB_GETCURSEL, 0, 0L);
  1650.         m_lpSubRes[1].res.resSize.relop  = GetRowID("RelOp",lSelection);
  1651.  
  1652.         idx = SendDlgItemMessage(IDC_PROPTAG2, CB_GETCURSEL, 0, 0L);
  1653.         m_lpSubRes[1].res.resSize.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1654.  
  1655.         m_lpSubRes[1].res.resSize.cb = (ULONG)GetDlgItemInt(IDC_VALUE2, &fTrans , FALSE );
  1656.  
  1657.         m_lpRes[0].res.resAnd.cRes++;
  1658.         break;
  1659.  
  1660.     case RES_EXIST:
  1661.         idx = SendDlgItemMessage(IDC_PROPTAG2, CB_GETCURSEL, 0, 0L);
  1662.         m_lpSubRes[1].res.resExist.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1663.  
  1664.         m_lpRes[0].res.resAnd.cRes++;
  1665.         break;
  1666.  
  1667.     case RES_SUBRESTRICTION:
  1668.         idx = SendDlgItemMessage(IDC_PROPTAG22, CB_GETCURSEL, 0, 0L);
  1669.         if( idx == 1 ) 
  1670.             m_lpSubRes[1].res.resSub.ulSubObject = PR_MESSAGE_RECIPIENTS;
  1671.         else
  1672.             m_lpSubRes[1].res.resSub.ulSubObject = PR_MESSAGE_ATTACHMENTS;
  1673.  
  1674.         m_lpRes[0].res.resAnd.cRes++;
  1675.         break;
  1676.  
  1677.     case RES_COMMENT:
  1678.         m_lpSubRes[1].res.resComment.cValues = (ULONG)GetDlgItemInt(IDC_VALUE2, &fTrans , FALSE );
  1679.  
  1680.         lpProp = (LPSPropValue)PvAllocMore( m_lpSubRes[1].res.resComment.cValues * sizeof(SPropValue),
  1681.                 (LPVOID)m_lpSubRes);
  1682.  
  1683.         for( i = 0 ; i < m_lpSubRes[1].res.resComment.cValues ; i++)
  1684.             MakePropValue( &(lpProp[i]),PR_SUBJECT, "TEST STRING", m_lpSubRes);
  1685.  
  1686.         m_lpSubRes[1].res.resComment.lpProp = lpProp;
  1687.         m_lpRes[0].res.resAnd.cRes++;
  1688.         break;
  1689.  
  1690.     default:
  1691.         break;
  1692.     }
  1693.  
  1694.     /* Collect values from Restriction 3 group */
  1695.     switch(m_lpSubRes[2].rt = SendDlgItemMessage(IDC_RESTYPE3,
  1696.             CB_GETCURSEL, 0, 0L))
  1697.     {
  1698.     case RES_AND:
  1699.     case RES_OR:
  1700.     case RES_NOT:
  1701.         m_lpRes[0].res.resAnd.cRes++;
  1702.         break;
  1703.  
  1704.     case RES_CONTENT:
  1705.         idx = SendDlgItemMessage(IDC_PROPTAG3, CB_GETCURSEL, 0, 0L);
  1706.         m_lpSubRes[2].res.resContent.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1707.  
  1708.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP3, CB_GETCURSEL, 0, 0L);
  1709.         m_lpSubRes[2].res.resContent.ulFuzzyLevel = GetRowID("FuzzyLevel",lSelection);
  1710.  
  1711.         SendDlgItemMessage(IDC_VALUE3, WM_GETTEXT, sizeof(szBuff),
  1712.                 (LPARAM)szBuff);
  1713.         lpProp = (LPSPropValue)PvAllocMore(sizeof(SPropValue),
  1714.                 (LPVOID)m_lpSubRes);
  1715.  
  1716.         MakePropValue(lpProp, PROP_TAG(PT_TSTRING, 0x0000), szBuff, m_lpSubRes);
  1717.  
  1718.         m_lpSubRes[2].res.resContent.lpProp = lpProp;
  1719.         m_lpRes[0].res.resAnd.cRes++;
  1720.         break;
  1721.  
  1722.     case RES_PROPERTY:
  1723.         idx = SendDlgItemMessage(IDC_PROPTAG3, CB_GETCURSEL, 0, 0L);
  1724.         m_lpSubRes[2].res.resProperty.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1725.  
  1726.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP3, CB_GETCURSEL, 0, 0L);
  1727.         m_lpSubRes[2].res.resProperty.relop  = GetRowID("RelOp",lSelection);
  1728.  
  1729.         SendDlgItemMessage(IDC_VALUE3, WM_GETTEXT, sizeof(szBuff),
  1730.                 (LPARAM)szBuff);
  1731.         lpProp = (LPSPropValue)PvAllocMore(sizeof(SPropValue),
  1732.                 (LPVOID)m_lpSubRes);
  1733.  
  1734.         MakePropValue(lpProp,m_lpCurColumns->aulPropTag[idx] , szBuff, m_lpSubRes);
  1735.  
  1736.         m_lpSubRes[2].res.resProperty.lpProp = lpProp;
  1737.         m_lpRes[0].res.resAnd.cRes++;
  1738.         break;
  1739.  
  1740.     case RES_COMPAREPROPS:
  1741.         idx = SendDlgItemMessage(IDC_PROPTAG3, CB_GETCURSEL, 0, 0L);
  1742.         m_lpSubRes[2].res.resCompareProps.ulPropTag1 = m_lpCurColumns->aulPropTag[idx];
  1743.  
  1744.         idx = SendDlgItemMessage(IDC_PROPTAG32, CB_GETCURSEL, 0, 0L);
  1745.         m_lpSubRes[2].res.resCompareProps.ulPropTag2 = m_lpCurColumns->aulPropTag[idx];
  1746.  
  1747.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP3, CB_GETCURSEL, 0, 0L);
  1748.         m_lpSubRes[2].res.resCompareProps.relop  = GetRowID("RelOp",lSelection);
  1749.  
  1750.         m_lpRes[0].res.resAnd.cRes++;
  1751.         break;
  1752.  
  1753.     case RES_BITMASK:
  1754.         idx = SendDlgItemMessage(IDC_PROPTAG3, CB_GETCURSEL, 0, 0L);
  1755.         m_lpSubRes[2].res.resBitMask.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1756.  
  1757.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP3, CB_GETCURSEL, 0, 0L);
  1758.         m_lpSubRes[2].res.resBitMask.relBMR  = GetRowID("Bmr",lSelection);
  1759.  
  1760.         SendDlgItemMessage(IDC_VALUE3, WM_GETTEXT, sizeof(szBuff),
  1761.                 (LPARAM)szBuff);
  1762.  
  1763. //        #ifdef WIN16
  1764. //            wsscanf(szBuff, "0x%lX", &m_lpSubRes[2].res.resBitMask.ulMask);
  1765. //        #else
  1766. //            sscanf(szBuff, "0x%lX", &m_lpSubRes[2].res.resBitMask.ulMask);
  1767. //       #endif
  1768.  
  1769.         m_lpSubRes[2].res.resBitMask.ulMask = strtoul(szBuff,&szEnd,16);
  1770.  
  1771.         m_lpRes[0].res.resAnd.cRes++;
  1772.         break;
  1773.  
  1774.     case RES_SIZE:
  1775.         lSelection = SendDlgItemMessage(IDC_RELATIONSHIP3, CB_GETCURSEL, 0, 0L);
  1776.         m_lpSubRes[2].res.resSize.relop  = GetRowID("RelOp",lSelection);
  1777.  
  1778.         idx = SendDlgItemMessage(IDC_PROPTAG3, CB_GETCURSEL, 0, 0L);
  1779.         m_lpSubRes[2].res.resSize.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1780.  
  1781.         m_lpSubRes[2].res.resSize.cb = (ULONG)GetDlgItemInt(IDC_VALUE3, &fTrans , FALSE );
  1782.  
  1783.         m_lpRes[0].res.resAnd.cRes++;
  1784.         break;
  1785.  
  1786.     case RES_EXIST:
  1787.         idx = SendDlgItemMessage(IDC_PROPTAG3, CB_GETCURSEL, 0, 0L);
  1788.         m_lpSubRes[2].res.resExist.ulPropTag = m_lpCurColumns->aulPropTag[idx];
  1789.  
  1790.         m_lpRes[0].res.resAnd.cRes++;
  1791.         break;
  1792.  
  1793.     case RES_SUBRESTRICTION:
  1794.         idx = SendDlgItemMessage(IDC_PROPTAG32, CB_GETCURSEL, 0, 0L);
  1795.         if( idx == 1 ) 
  1796.             m_lpSubRes[2].res.resSub.ulSubObject = PR_MESSAGE_RECIPIENTS;
  1797.         else
  1798.             m_lpSubRes[2].res.resSub.ulSubObject = PR_MESSAGE_ATTACHMENTS;
  1799.        
  1800.         m_lpRes[0].res.resAnd.cRes++;
  1801.         break;
  1802.  
  1803.     case RES_COMMENT:
  1804.         m_lpSubRes[2].res.resComment.cValues = (ULONG)GetDlgItemInt(IDC_VALUE3, &fTrans , FALSE );
  1805.  
  1806.         lpProp = (LPSPropValue)PvAllocMore( m_lpSubRes[2].res.resComment.cValues * sizeof(SPropValue),
  1807.                 (LPVOID)m_lpSubRes);
  1808.  
  1809.         for( i = 0 ; i < m_lpSubRes[2].res.resComment.cValues ; i++)
  1810.             MakePropValue( &(lpProp[i]),PR_SUBJECT, "TEST STRING", m_lpSubRes);
  1811.  
  1812.         m_lpSubRes[2].res.resComment.lpProp = lpProp;
  1813.         m_lpRes[0].res.resAnd.cRes++;
  1814.         break;
  1815.  
  1816.     default:
  1817.         break;
  1818.     }
  1819.  
  1820.     // display restriction
  1821.     CAcceptRestrictionDlg Res(this);
  1822.     
  1823.     Res.m_prest = m_lpRes;
  1824.     if(Res.DoModal() == IDOK)
  1825.         EndDialog(IDOK);        
  1826.  
  1827. }
  1828.  
  1829.  
  1830. void CResDlg::OnCancel()
  1831. {
  1832.     PvFree(m_lpSubRes);
  1833.     EndDialog(IDCANCEL);
  1834. }
  1835.  
  1836.  
  1837.  
  1838. /*---------------------------------*/
  1839. /* CRestriction Message Handlers   */
  1840. /*---------------------------------*/
  1841.  
  1842. BEGIN_MESSAGE_MAP(CAcceptRestrictionDlg, CModalDialog)
  1843.     ON_COMMAND(IDMODIFY,    OnModify)
  1844. END_MESSAGE_MAP()
  1845.  
  1846. void CAcceptRestrictionDlg::OnModify()
  1847. {
  1848.     EndDialog(IDCANCEL);
  1849. }
  1850.  
  1851. /********************************************************************/
  1852. /*
  1853.  -  CAcceptRestrictionDlg::
  1854.  -  OnInitDialog
  1855.  -
  1856.  *  Purpose:
  1857.  *
  1858.  */
  1859. /********************************************************************/
  1860.  
  1861. BOOL CAcceptRestrictionDlg::OnInitDialog()
  1862. {
  1863.     int             rgTabStops[12];
  1864.     DWORD           dwReturn        = 0;      
  1865.         
  1866.     SendDlgItemMessage(IDC_ACCEPTRES,LB_RESETCONTENT,0,0);
  1867.  
  1868.     rgTabStops[0] = 20;
  1869.     rgTabStops[1] = 30;
  1870.     rgTabStops[2] = 40;
  1871.     rgTabStops[3] = 50;
  1872.     rgTabStops[4] = 60;
  1873.     rgTabStops[5] = 70;
  1874.     rgTabStops[6] = 80;
  1875.     rgTabStops[7] = 90;
  1876.     rgTabStops[8] = 100;
  1877.     rgTabStops[9] = 110;
  1878.     rgTabStops[10]= 120;
  1879.  
  1880.     dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_SETTABSTOPS,
  1881.                     (WPARAM) 11,(LPARAM)rgTabStops );
  1882.  
  1883.     DisplayRestriction(m_prest);
  1884.  
  1885.     return TRUE;    
  1886. }
  1887.  
  1888. /*******************************************************************/
  1889. /*
  1890.  -  CAcceptRestrictionDlg::
  1891.  -  DisplayRestriction
  1892.  *
  1893.  *  Purpose:
  1894.  *
  1895.  *  Parameters:
  1896.  *
  1897.  *  Returns:
  1898.  *
  1899.  */
  1900. /*******************************************************************/
  1901.  
  1902. void CAcceptRestrictionDlg::DisplayRestriction(LPSRestriction lpRes)
  1903. {
  1904.     DWORD           dwReturn        = 0;      
  1905.     char            szBuff1[256];
  1906.     char            szBuff2[256];
  1907.     char            szBuff3[256];
  1908.     char            szBuffer[1024];
  1909.     ULONG           i = 0;
  1910.     static  ULONG   cTabs = 0;
  1911.     static  char    szTabs[11][22] = {"",
  1912.                      "\t",
  1913.                      "\t\t",
  1914.                      "\t\t\t",
  1915.                      "\t\t\t\t",
  1916.                      "\t\t\t\t\t",
  1917.                      "\t\t\t\t\t\t",
  1918.                      "\t\t\t\t\t\t\t",
  1919.                      "\t\t\t\t\t\t\t\t",
  1920.                      "\t\t\t\t\t\t\t\t\t",
  1921.                      "\t\t\t\t\t\t\t\t\t\t"};
  1922.  
  1923.     if(!lpRes)
  1924.     {
  1925.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)(char *)"lpRestriction == NULL"); 
  1926.         return;
  1927.     }        
  1928.  
  1929.     switch(lpRes->rt)
  1930.     {
  1931.     case RES_CONTENT:       
  1932.         wsprintf(szBuffer,"%sSContentRestriction:", szTabs[cTabs]);
  1933.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1934.         wsprintf(szBuffer,"%sFuzzy Level: %s", szTabs[cTabs+1],
  1935.             GetString("FuzzyLevel", lpRes->res.resContent.ulFuzzyLevel, szBuff1));
  1936.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1937.         wsprintf(szBuffer,"%s%s contains %s", szTabs[cTabs+1],
  1938.             GetString("PropTags", lpRes->res.resContent.ulPropTag, szBuff1),
  1939.             SzGetPropValue(szBuff2, lpRes->res.resContent.lpProp));
  1940.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1941.         break;
  1942.  
  1943.     case RES_PROPERTY:
  1944.         wsprintf(szBuffer,"%sSPropertyRestriction:", szTabs[cTabs]);
  1945.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1946.         wsprintf(szBuffer,"%s%s %s %s", szTabs[cTabs+1],
  1947.             GetString("PropTags", lpRes->res.resProperty.ulPropTag, szBuff1),
  1948.             GetString("RelOp", lpRes->res.resProperty.relop, szBuff2),
  1949.             SzGetPropValue(szBuff3, lpRes->res.resProperty.lpProp));
  1950.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1951.         break;
  1952.  
  1953.     case RES_COMPAREPROPS:
  1954.         wsprintf(szBuffer,"%sSComparePropsRestriction:", szTabs[cTabs]);
  1955.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1956.         wsprintf(szBuffer,"%s%s %s %s", szTabs[cTabs+1],
  1957.             GetString("PropTags", lpRes->res.resCompareProps.ulPropTag1, szBuff1),
  1958.             GetString("RelOp", lpRes->res.resCompareProps.relop, szBuff2),
  1959.             GetString("PropTags", lpRes->res.resCompareProps.ulPropTag2, szBuff3));        
  1960.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1961.         break;
  1962.  
  1963.     case RES_BITMASK:
  1964.         wsprintf(szBuffer,"%sSBitMaskRestriction:", szTabs[cTabs]);
  1965.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1966.         wsprintf(szBuffer,"%s(%s & 0x%08lX) %s", szTabs[cTabs+1],
  1967.             GetString("PropTags", lpRes->res.resBitMask.ulPropTag, szBuff1),
  1968.             lpRes->res.resBitMask.ulMask,
  1969.             GetString("Bmr", lpRes->res.resBitMask.relBMR, szBuff2));        
  1970.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1971.         break;
  1972.  
  1973.     case RES_SIZE:
  1974.         wsprintf(szBuffer,"%sSSizeRestriction:", szTabs[cTabs]);
  1975.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1976.         wsprintf(szBuffer,"%ssizeof(%s) %s %lu", szTabs[cTabs+1],
  1977.             GetString("PropTags", lpRes->res.resSize.ulPropTag, szBuff1),
  1978.             GetString("RelOp", lpRes->res.resSize.relop, szBuff2),
  1979.             lpRes->res.resSize.cb);
  1980.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1981.         break;
  1982.  
  1983.     case RES_EXIST:
  1984.         wsprintf(szBuffer,"%sSExistRestriction:", szTabs[cTabs]);
  1985.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1986.         wsprintf(szBuffer,"%s%s Exists", szTabs[cTabs+1],
  1987.             GetString("PropTags", lpRes->res.resExist.ulPropTag, szBuff1));       
  1988.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1989.         break;
  1990.  
  1991.     case RES_SUBRESTRICTION:
  1992.         wsprintf(szBuffer,"%sSSubRestriction:", szTabs[cTabs]);
  1993.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1994.         wsprintf(szBuffer,"%s ulSubObject: %s", szTabs[cTabs+1],
  1995.             (lpRes->res.resSub.ulSubObject == PR_MESSAGE_ATTACHMENTS) 
  1996.                         ? "PR_MESSAGE_ATTACHMENTS" :
  1997.                           "PR_MESSAGE_RECIPIENTS"     );
  1998.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  1999.         cTabs++;
  2000.         DisplayRestriction(lpRes->res.resSub.lpRes);
  2001.         cTabs--;
  2002.         break;
  2003.  
  2004.     case RES_NOT:
  2005.         wsprintf(szBuffer,"%sNot:", szTabs[cTabs]);
  2006.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  2007.         cTabs++;
  2008.         DisplayRestriction(lpRes->res.resNot.lpRes);
  2009.         cTabs--;
  2010.         break;
  2011.  
  2012.     case RES_AND:
  2013.         wsprintf(szBuffer,"%sAnd:", szTabs[cTabs]);
  2014.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  2015.         cTabs++;
  2016.         for(i = 0; i < lpRes->res.resAnd.cRes; i++)
  2017.         {
  2018.             DisplayRestriction(&lpRes->res.resAnd.lpRes[i]);
  2019.         }
  2020.         cTabs--;
  2021.         break;
  2022.  
  2023.     case RES_OR:
  2024.         wsprintf(szBuffer,"%sOr:", szTabs[cTabs]);
  2025.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  2026.         cTabs++;
  2027.         for(i = 0; i < lpRes->res.resOr.cRes; i++)
  2028.         {
  2029.             DisplayRestriction(&lpRes->res.resOr.lpRes[i]);
  2030.         }
  2031.         cTabs--;
  2032.         break;
  2033.  
  2034.     case RES_COMMENT:
  2035.         wsprintf(szBuffer,"%sSCommentRestriction:", szTabs[cTabs]);
  2036.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  2037.         wsprintf(szBuffer,"%s cValues: %lu, lpPropValue: 0x%08X", szTabs[cTabs+1],
  2038.             lpRes->res.resComment.cValues,
  2039.             lpRes->res.resComment.lpProp);
  2040.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  2041.         cTabs++;
  2042.         DisplayRestriction(lpRes->res.resComment.lpRes);
  2043.         cTabs--;
  2044.         break;
  2045.  
  2046.     default:
  2047.         wsprintf(szBuffer,"%sUNKNOWN RES TYPE lpRes->rt == %lu",szTabs[cTabs] , lpRes->rt);
  2048.         dwReturn = SendDlgItemMessage(IDC_ACCEPTRES,LB_ADDSTRING,0,(LPARAM)szBuffer);   
  2049.         break;
  2050.     }
  2051.     return;
  2052. }
  2053.  
  2054. /*******************************************************************/
  2055. /*
  2056.  -  CAcceptRestrictionDlg::
  2057.  -  ~CAcceptRestrictionDlg
  2058.  -
  2059.  *  Purpose:
  2060.  *      Destructor for class CAcceptRestrictionDlg. Releases and Frees memory
  2061.  *      allocated in this class
  2062.  *
  2063.  */
  2064. /*******************************************************************/
  2065.  
  2066. CAcceptRestrictionDlg::~CAcceptRestrictionDlg()
  2067. {
  2068.  
  2069.  
  2070.  
  2071.  
  2072. ////////////////////////////////////////////////////
  2073.