Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
7.9 KiB

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // EditRule.h
  4. //
  5. ///////////////////////////////////////////////////////////////////////////////
  6. // Bring in only once
  7. #pragma once
  8. #include "oerules.h"
  9. #include "ruledesc.h"
  10. static const int c_cchNameMax = 257;
  11. typedef struct tagCRIT_LIST
  12. {
  13. CRIT_TYPE typeCrit;
  14. DWORD dwFlags;
  15. UINT uiText;
  16. UINT uiTextAlt;
  17. } CRIT_LIST, * PCRIT_LIST;
  18. typedef struct tagACT_LIST
  19. {
  20. ACT_TYPE typeAct;
  21. DWORD dwFlags;
  22. UINT uiText;
  23. UINT uiTextAlt;
  24. } ACT_LIST, * PACT_LIST;
  25. static const int STATE_DEFAULT = 0x00000000;
  26. static const int STATE_INITIALIZED = 0x00000001;
  27. static const int STATE_DIRTY = 0x00000002;
  28. static const int STATE_EXCLUSIVE = 0x00000004;
  29. static const int STATE_MAIL = 0x00000008;
  30. static const int STATE_NEWS = 0x00000010;
  31. static const int STATE_FILTER = 0x00000020;
  32. static const int STATE_NOEDIT = 0x00000040;
  33. static const int STATE_JUNK = 0x00000080;
  34. static const int STATE_ALL = STATE_MAIL | STATE_NEWS | STATE_FILTER;
  35. static const int STATE_NOFILTER = STATE_MAIL | STATE_NEWS;
  36. static const int STATE_NOMAIL = STATE_NEWS | STATE_FILTER;
  37. static const int STATE_NONEWS = STATE_MAIL | STATE_FILTER;
  38. static const CRIT_LIST c_rgEditCritList[] =
  39. {
  40. {CRIT_TYPE_NEWSGROUP, STATE_NEWS, idsCriteriaNewsgroup, idsCriteriaNewsgroup},
  41. {CRIT_TYPE_FROM, STATE_ALL, idsCriteriaFrom, idsCriteriaFromNot},
  42. {CRIT_TYPE_SUBJECT, STATE_ALL, idsCriteriaSubject, idsCriteriaSubjectNot},
  43. {CRIT_TYPE_BODY, STATE_MAIL, idsCriteriaBody, idsCriteriaBodyNot},
  44. {CRIT_TYPE_TO, STATE_MAIL, idsCriteriaTo, idsCriteriaToNot},
  45. {CRIT_TYPE_CC, STATE_MAIL, idsCriteriaCC, idsCriteriaCCNot},
  46. {CRIT_TYPE_TOORCC, STATE_MAIL, idsCriteriaToOrCC, idsCriteriaToOrCCNot},
  47. {CRIT_TYPE_PRIORITY, STATE_NONEWS, idsCriteriaPriority, idsCriteriaPriority},
  48. {CRIT_TYPE_ACCOUNT, STATE_ALL, idsCriteriaAccount, idsCriteriaAccount},
  49. {CRIT_TYPE_AGE, STATE_NOMAIL, idsCriteriaAge, idsCriteriaAge},
  50. {CRIT_TYPE_SIZE, STATE_MAIL, idsCriteriaSize, idsCriteriaSize},
  51. {CRIT_TYPE_LINES, STATE_NOMAIL, idsCriteriaLines, idsCriteriaLines},
  52. {CRIT_TYPE_ATTACH, STATE_NONEWS, idsCriteriaAttachment, idsCriteriaAttachment},
  53. // {CRIT_TYPE_DATE, idsCriteriaDate},
  54. // {CRIT_TYPE_HEADER, idsCriteriaHeader},
  55. {CRIT_TYPE_JUNK, STATE_NOEDIT, idsCriteriaJunk, idsCriteriaJunk},
  56. {CRIT_TYPE_SENDER, STATE_NOEDIT, idsCriteriaSender, idsCriteriaSender},
  57. {CRIT_TYPE_READ, STATE_FILTER, idsCriteriaRead, idsCriteriaNotRead},
  58. // {CRIT_TYPE_REPLIES, STATE_FILTER, idsCriteriaReplies, idsCriteriaReplies},
  59. {CRIT_TYPE_DOWNLOADED, STATE_FILTER, idsCriteriaDownloaded, idsCriteriaNotDownloaded},
  60. // {CRIT_TYPE_DELETED, STATE_FILTER, idsCriteriaDeleted, idsCriteriaNotDeleted},
  61. {CRIT_TYPE_FLAGGED, STATE_FILTER, idsCriteriaFlagged, idsCriteriaNotFlagged},
  62. {CRIT_TYPE_THREADSTATE, STATE_FILTER, idsCriteriaThreadState, idsCriteriaThreadState},
  63. {CRIT_TYPE_SECURE, STATE_NONEWS, idsCriteriaSecure, idsCriteriaSecure},
  64. {CRIT_TYPE_ALL, STATE_EXCLUSIVE | STATE_ALL, idsCriteriaAll, idsCriteriaAll}
  65. };
  66. static const ULONG c_cEditCritList = sizeof(c_rgEditCritList)/sizeof(c_rgEditCritList[0]);
  67. static const ACT_LIST c_rgEditActList[] =
  68. {
  69. {ACT_TYPE_MOVE, STATE_MAIL, idsActionsMove, idsActionsMove},
  70. {ACT_TYPE_COPY, STATE_MAIL, idsActionsCopy, idsActionsCopy},
  71. {ACT_TYPE_DELETE, STATE_NOFILTER, idsActionsDelete, idsActionsDelete},
  72. {ACT_TYPE_FWD, STATE_MAIL, idsActionsFwd, idsActionsFwd},
  73. {ACT_TYPE_JUNKMAIL, STATE_MAIL | STATE_JUNK, idsActionsJunkMail, idsActionsJunkMail},
  74. // {ACT_TYPE_NOTIFYMSG, idsActionsNotifyMsg},
  75. // {ACT_TYPE_NOTIFYSND, STATE_NOFILTER, idsActionsNotifySound, idsActionsNotifySound},
  76. {ACT_TYPE_HIGHLIGHT, STATE_NOFILTER, idsActionsHighlight, idsActionsHighlight},
  77. {ACT_TYPE_FLAG, STATE_NOFILTER, idsActionsFlag, idsActionsFlag},
  78. {ACT_TYPE_READ, STATE_NOFILTER, idsActionsRead, idsActionsRead},
  79. {ACT_TYPE_WATCH, STATE_NOFILTER, idsActionsWatch, idsActionsWatch},
  80. {ACT_TYPE_REPLY, STATE_MAIL, idsActionsReply, idsActionsReply},
  81. {ACT_TYPE_MARKDOWNLOAD, STATE_NEWS, idsActionsDownload, idsActionsDownload},
  82. {ACT_TYPE_STOP, STATE_NOFILTER, idsActionsStop, idsActionsStop},
  83. {ACT_TYPE_DONTDOWNLOAD, STATE_EXCLUSIVE | STATE_MAIL, idsActionsDontDownload, idsActionsDontDownload},
  84. {ACT_TYPE_DELETESERVER, STATE_EXCLUSIVE | STATE_MAIL, idsActionsDelServer, idsActionsDelServer},
  85. {ACT_TYPE_SHOW, STATE_EXCLUSIVE | STATE_FILTER, idsActionsShow, idsActionsShow}
  86. };
  87. static const ULONG c_cEditActList = sizeof(c_rgEditActList)/sizeof(c_rgEditActList[0]);
  88. const int ERF_ADDDEFAULTACTION = 0x00000001;
  89. const int ERF_NEWRULE = 0x00000002;
  90. const int ERF_CUSTOMIZEVIEW = 0x00000004;
  91. const int ERF_CREATERULE = 0x00000008;
  92. class CEditRuleUI
  93. {
  94. private:
  95. enum
  96. {
  97. STATE_UNINIT = 0x00000000,
  98. STATE_INITIALIZED = 0x00000001,
  99. STATE_DIRTY = 0x00000002
  100. };
  101. private:
  102. HWND m_hwndOwner;
  103. DWORD m_dwFlags;
  104. DWORD m_dwState;
  105. HWND m_hwndDlg;
  106. RULE_TYPE m_typeRule;
  107. HWND m_hwndCrit;
  108. HWND m_hwndAct;
  109. HWND m_hwndDescript;
  110. HWND m_hwndName;
  111. IOERule * m_pIRule;
  112. CRuleDescriptUI * m_pDescriptUI;
  113. BOOL m_rgfCritEnabled[c_cEditCritList];
  114. BOOL m_rgfActEnabled[c_cEditActList];
  115. public:
  116. CEditRuleUI();
  117. ~CEditRuleUI();
  118. // The main UI methods
  119. HRESULT HrInit(HWND hwndOwner, DWORD dwFlags, RULE_TYPE typeRule, IOERule * pIRule, MESSAGEINFO * pmsginfo);
  120. HRESULT HrShow(void);
  121. // The Rules Manager dialog function
  122. static INT_PTR CALLBACK FEditRuleDlgProc(HWND hwnd, UINT uiMsg, WPARAM wParam, LPARAM lParam);
  123. // Message handling functions
  124. BOOL FOnInitDialog(HWND hwndDlg);
  125. BOOL FOnListClick(HWND hwndList, LPNMLISTVIEW pnmlv);
  126. BOOL FOnHelp(UINT uiMsg, WPARAM wParam, LPARAM lParam);
  127. BOOL FOnOK(void);
  128. BOOL FOnNameChange(HWND hwndName);
  129. // Utility functions
  130. BOOL _FInitializeCritListCtrl(VOID);
  131. BOOL _FLoadCritListCtrl(INT * piSelect);
  132. BOOL _FAddCritToList(INT iItem, BOOL fEnable);
  133. BOOL _FInitializeActListCtrl(VOID);
  134. VOID _SetTitleText(VOID);
  135. void HandleEnabledState(HWND hwndList, int nItem);
  136. };