Source code of Windows XP (NT5)
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.

1617 lines
55 KiB

  1. /*--------------------------------------------------------------------------*
  2. *
  3. * Microsoft Windows
  4. * Copyright (C) Microsoft Corporation, 1992 - 1999
  5. *
  6. * File: taskui.h
  7. *
  8. * Contents: Interface file for console taskpad UI classes.
  9. *
  10. * History: 29-Oct-98 jeffro Created
  11. *
  12. *--------------------------------------------------------------------------*/
  13. #ifndef TASKUI_H
  14. #define TASKUI_H
  15. #pragma once
  16. #include "tstring.h"
  17. #include "dlgs.h"
  18. #include "task.h"
  19. #include "cmenuinfo.h"
  20. /*
  21. * forward declarations
  22. */
  23. class CMTNode;
  24. class CTaskpadGeneralPage;
  25. class CTaskpadTasksPage;
  26. class CTaskpadPropertySheet;
  27. class CTaskpadOptionsDlg;
  28. class CContextMenuVisitor;
  29. class CMTBrowserCtrl;
  30. class CConsoleExtendTaskPadImpl;
  31. class CContextMenu;
  32. class CConsoleTask;
  33. class CTaskpadGroupPropertySheet;
  34. class CTaskpadGroupGeneralPage;
  35. class CConsoleView;
  36. // property page classes
  37. class CTaskNamePage;
  38. class CTaskCmdLinePage;
  39. class CTaskSymbolDlg;
  40. #include <pshpack8.h> // for Win64
  41. // ATL does not allow chaining more than one class or member at a time. This works around that.
  42. #define CHAIN_MSG_MAP_EX(theChainClass) \
  43. { \
  44. theChainClass::ProcessWindowMessage(hWnd, uMsg, wParam, lParam, lResult); \
  45. }
  46. //############################################################################
  47. //############################################################################
  48. //
  49. // class CBrowserCookie
  50. //
  51. // a class to store the Node's for each MTNode. Used by CMTBrowserCtrl
  52. //############################################################################
  53. //############################################################################
  54. class CBrowserCookie
  55. {
  56. CMTNode * m_pMTNode;
  57. CNode * m_pNode;
  58. public:
  59. CBrowserCookie();
  60. CBrowserCookie(CMTNode *pMTNode, CNode *pNode);
  61. void DeleteNode();
  62. CNode * PNode() {return m_pNode;}
  63. CMTNode * PMTNode() const {ASSERT(m_pMTNode); return m_pMTNode;}
  64. void SetNode(CNode *pNode);
  65. bool operator < (const CBrowserCookie &rhs) const {return m_pMTNode < rhs.m_pMTNode;}
  66. };
  67. //############################################################################
  68. //############################################################################
  69. // inlines
  70. //############################################################################
  71. //############################################################################
  72. inline CBrowserCookie::CBrowserCookie()
  73. : m_pMTNode(NULL), m_pNode(NULL)
  74. {}
  75. inline CBrowserCookie::CBrowserCookie(CMTNode *pMTNode, CNode *pNode)
  76. : m_pMTNode(pMTNode), m_pNode(pNode){}
  77. inline void
  78. CBrowserCookie::SetNode(CNode *pNode)
  79. {
  80. ASSERT(!m_pNode);
  81. m_pNode = pNode;
  82. }
  83. class CBrowserCookieList : public std::list<CBrowserCookie>
  84. {
  85. public:
  86. ~CBrowserCookieList();
  87. };
  88. //############################################################################
  89. //############################################################################
  90. //
  91. // class CMTBrowserCtrl
  92. //
  93. // PURPOSE: Implements a general purpose scope tree browser that enables a
  94. // user to browse down the master scope tree and select a node.
  95. //
  96. // USAGE: Add an object of this class to your dialog, and construct it with
  97. // the ID of the tree control to use. Chain the object into the
  98. // message loop. If needed, subclass this class and override any
  99. // methods appropriately.
  100. //
  101. //############################################################################
  102. //############################################################################
  103. class CMTBrowserCtrl : public CWindowImpl<CMTBrowserCtrl, WTL::CTreeViewCtrlEx>
  104. {
  105. typedef CWindowImpl<CMTBrowserCtrl, WTL::CTreeViewCtrlEx> BC;
  106. public:
  107. typedef std::vector<CMTNode*> CMTNodeCollection;
  108. struct InitData
  109. {
  110. InitData () :
  111. hwnd(NULL), pScopeTree(NULL), pmtnRoot(NULL), pmtnSelect(NULL)
  112. {}
  113. HWND hwnd;
  114. CScopeTree* pScopeTree;
  115. CMTNode* pmtnRoot;
  116. CMTNode* pmtnSelect;
  117. CMTNodeCollection vpmtnExclude;
  118. };
  119. public:
  120. // constructor /destructor
  121. CMTBrowserCtrl();
  122. ~CMTBrowserCtrl();
  123. BEGIN_MSG_MAP(CMTBrowserCtrl)
  124. REFLECTED_NOTIFY_CODE_HANDLER (TVN_ITEMEXPANDING, OnItemExpanding);
  125. //CHAIN_MSG_MAP(BC)
  126. DEFAULT_REFLECTION_HANDLER ()
  127. END_MSG_MAP();
  128. void Initialize (const InitData& init);
  129. HTREEITEM InsertItem (const CBrowserCookie &browserCookie, HTREEITEM hParent, HTREEITEM hInsertAfter);
  130. bool SelectNode (CMTNode* pmtnSelect);
  131. CMTNode* GetSelectedMTNode () const;
  132. CBrowserCookie* CookieFromItem (HTREEITEM hti) const;
  133. CBrowserCookie* CookieFromItem (const TV_ITEM* ptvi) const;
  134. CBrowserCookie* CookieFromLParam (LPARAM lParam) const;
  135. CMTNode* MTNodeFromItem (HTREEITEM hti) const;
  136. CMTNode* MTNodeFromItem (const TV_ITEM* ptvi) const;
  137. protected:
  138. LRESULT OnItemExpanding (int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  139. bool ExpandItem (const TV_ITEM& itemExpand);
  140. HTREEITEM FindChildItemByMTNode (HTREEITEM htiParent, const CMTNode* pmtnToFind);
  141. private:
  142. // set this to non-zero to optimize access to m_vpmtnExclude
  143. enum { OptimizeExcludeList = 0 };
  144. // implementation
  145. int m_id; // the ID of the tree control
  146. int ID() {return m_id;}
  147. CMTNodeCollection m_vpmtnExclude;
  148. CScopeTree * m_pScopeTree;
  149. CScopeTree * PScopeTree() {return m_pScopeTree;}
  150. CBrowserCookieList m_browserCookieList;
  151. CBrowserCookieList *PBrowserCookieList() {return &m_browserCookieList;}
  152. bool IsMTNodeExcluded (CMTNode* pmtn) const;
  153. };
  154. //############################################################################
  155. //############################################################################
  156. //
  157. // class CTempAMCView
  158. //
  159. //############################################################################
  160. //############################################################################
  161. class CTempAMCView
  162. {
  163. public:
  164. CTempAMCView() : m_pViewData(NULL)
  165. {}
  166. ~CTempAMCView()
  167. {
  168. Destroy();
  169. }
  170. CNode* Create (CConsoleFrame* pFrame, CNode* pRootNode);
  171. CNode* Create (CConsoleFrame* pFrame, CMTNode* pRootMTNode);
  172. CNode* Create (CConsoleFrame* pFrame, MTNODEID idRootNode);
  173. bool Destroy ()
  174. {
  175. if (m_pViewData == NULL)
  176. return (false);
  177. GetChildFrame().SendMessage (WM_CLOSE);
  178. m_pViewData = NULL;
  179. return (true);
  180. }
  181. CViewData* GetViewData() const
  182. {
  183. return (m_pViewData);
  184. }
  185. MMC_ATL::CWindow GetChildFrame() const
  186. {
  187. return ((m_pViewData != NULL) ? m_pViewData->GetChildFrame() : NULL);
  188. }
  189. CConsoleView* GetConsoleView() const
  190. {
  191. return ((m_pViewData != NULL) ? m_pViewData->GetConsoleView() : NULL);
  192. }
  193. MMC_ATL::CWindow GetListCtrl() const
  194. {
  195. return ((m_pViewData != NULL) ? m_pViewData->GetListCtrl() : NULL);
  196. }
  197. private:
  198. CViewData* m_pViewData;
  199. };
  200. //############################################################################
  201. //############################################################################
  202. //
  203. // class CMirrorListView
  204. //
  205. // CMirrorListView is a list view control that will mirror the contents of
  206. // another list view control.
  207. //
  208. //############################################################################
  209. //############################################################################
  210. class CMirrorListView : public CWindowImpl<CMirrorListView, WTL::CListViewCtrl>
  211. {
  212. typedef CMirrorListView ThisClass;
  213. typedef CWindowImpl<CMirrorListView, WTL::CListViewCtrl> BaseClass;
  214. public:
  215. CMirrorListView();
  216. void AttachSource (HWND hwndList, HWND hwndSourceList);
  217. LPARAM GetSelectedItemData ();
  218. BEGIN_MSG_MAP(ThisClass)
  219. MESSAGE_HANDLER (LVM_GETITEM, ForwardMessage);
  220. REFLECTED_NOTIFY_CODE_HANDLER (LVN_GETDISPINFO, OnGetDispInfo);
  221. REFLECTED_NOTIFY_CODE_HANDLER (LVN_ODCACHEHINT, ForwardVirtualNotification);
  222. REFLECTED_NOTIFY_CODE_HANDLER (LVN_ODFINDITEM, ForwardVirtualNotification);
  223. REFLECTED_NOTIFY_CODE_HANDLER (LVN_ODSTATECHANGED, ForwardVirtualNotification);
  224. DEFAULT_REFLECTION_HANDLER ()
  225. END_MSG_MAP();
  226. protected:
  227. LRESULT ForwardMessage (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  228. LRESULT OnGetDispInfo (int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  229. LRESULT ForwardNotification (int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  230. LRESULT ForwardVirtualNotification (int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  231. private:
  232. void InsertColumns ();
  233. private:
  234. WTL::CListViewCtrl m_wndSourceList;
  235. bool m_fVirtualSource;
  236. };
  237. //############################################################################
  238. //############################################################################
  239. //
  240. // class MMC:CEdit
  241. //
  242. //############################################################################
  243. //############################################################################
  244. namespace MMC
  245. {
  246. class CEdit : public WTL::CEdit
  247. {
  248. public:
  249. void Initialize(CWindow *pwndParent, int idEdit, int cchMax = -1, LPCTSTR sz = NULL);
  250. void Empty(LPCTSTR sz = _T(""))
  251. {
  252. SetSel(0, -1);
  253. ReplaceSel(sz);
  254. }
  255. };
  256. }; // namespace MMC
  257. //############################################################################
  258. //############################################################################
  259. //
  260. // class CDialogBase
  261. //
  262. //############################################################################
  263. //############################################################################
  264. template<class T>
  265. class CDialogBase : public CDialogImpl<T>
  266. {
  267. typedef CDialogBase ThisClass;
  268. typedef CDialogImpl<T> BaseClass;
  269. public:
  270. CDialogBase (bool fAutoCenter = false);
  271. BEGIN_MSG_MAP(ThisClass)
  272. MESSAGE_HANDLER (WM_INITDIALOG, OnInitDialog)
  273. COMMAND_ID_HANDLER (IDOK, OnOK)
  274. COMMAND_ID_HANDLER (IDCANCEL, OnCancel)
  275. REFLECT_NOTIFICATIONS()
  276. END_MSG_MAP()
  277. virtual LRESULT OnInitDialog (HWND hwndFocus, LPARAM lParam, BOOL& bHandled);
  278. virtual bool OnApply () = 0;
  279. public:
  280. BOOL EnableDlgItem (int idControl, bool fEnable);
  281. void CheckDlgItem (int idControl, int nCheck);
  282. tstring GetDlgItemText (int idControl);
  283. BOOL SetDlgItemText (int idControl, tstring str);
  284. // Generated message map functions
  285. protected:
  286. LRESULT OnInitDialog (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  287. virtual LRESULT OnOK (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  288. virtual LRESULT OnCancel (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  289. private:
  290. bool m_fAutoCenter;
  291. };
  292. //############################################################################
  293. //############################################################################
  294. //
  295. // class CMyComboBox
  296. //
  297. //############################################################################
  298. //############################################################################
  299. class CMyComboBox : public WTL::CComboBox
  300. {
  301. typedef WTL::CComboBox BaseClass;
  302. public:
  303. CMyComboBox (HWND hwnd = NULL) : BaseClass(hwnd)
  304. {}
  305. CMyComboBox& operator= (HWND hwnd)
  306. {
  307. m_hWnd = hwnd;
  308. return *this;
  309. }
  310. void InsertStrings (const int rgStringIDs[], int cStringIDs);
  311. LPARAM GetSelectedItemData () const;
  312. void SelectItemByData (LPARAM lParam);
  313. int FindItemByData (LPARAM lParam) const;
  314. };
  315. //############################################################################
  316. //############################################################################
  317. //
  318. // class CContextMenuVisitor
  319. //
  320. // PURPOSE: Enables traversal of a tree of context menu items by
  321. // any class that derives from this one.
  322. //
  323. //############################################################################
  324. //############################################################################
  325. class CContextMenuVisitor
  326. {
  327. SC ScTraverseContextMenu(CContextMenu *pContextMenu);
  328. protected:
  329. SC ScTraverseContextMenu(CNode *pNodeTarget, CScopeTree *pCScopeTree,
  330. BOOL fScopeItem, CNode *pNodeScope, LPARAM resultItemParam, bool bShowSaveList = false);
  331. virtual SC ScOnVisitContextMenu(CMenuItem &menuItem) = 0; // defined by derived class.
  332. protected:
  333. virtual SC ScShouldItemBeVisited(CMenuItem *pMenuItem, CContextMenuInfo *pContextInfo, /*out*/ bool &bVisitItem); // should this item be visited?
  334. virtual ~CContextMenuVisitor() {};
  335. };
  336. //############################################################################
  337. //############################################################################
  338. //
  339. // class CTaskpadFrame
  340. //
  341. //############################################################################
  342. //############################################################################
  343. class CTaskpadFrame
  344. {
  345. protected:
  346. CConsoleTaskpad * m_pConsoleTaskpad;
  347. bool m_fNew; // is this a new taskpad?
  348. CViewData * m_pViewData;
  349. LPARAM m_lCookie;
  350. bool m_fCookieValid;
  351. CNode * m_pNodeTarget;
  352. bool m_bTargetNodeSelected; // has the target node been selected, if there is one
  353. public:
  354. CScopeTree * PScopeTree() {return dynamic_cast<CScopeTree *>(m_pViewData->GetScopeTree());}
  355. CNode * PNodeTarget() {return m_pNodeTarget;}
  356. CConsoleTaskpad * PConsoleTaskpad() {return m_pConsoleTaskpad;}
  357. bool FNew() {return m_fNew;}
  358. void SetNew(bool b) {m_fNew = b;}
  359. LPARAM Cookie() {return m_lCookie;}
  360. bool FCookieValid() {return m_fCookieValid;}
  361. CViewData * PViewData() {return m_pViewData;}
  362. void SetConsoleTaskpad(CConsoleTaskpad *pConsoleTaskpad)
  363. {m_pConsoleTaskpad = pConsoleTaskpad;}
  364. bool FTargetNodeSelected() {return m_bTargetNodeSelected;}
  365. void SetTargetNodeSelected(bool b) {m_bTargetNodeSelected = b;}
  366. CTaskpadFrame(CNode *pNodeTarget, CConsoleTaskpad* pConsoleTaskpad, CViewData *pViewData,
  367. bool fCookieValid, LPARAM lCookie);
  368. CTaskpadFrame(const CTaskpadFrame &rhs);
  369. };
  370. //############################################################################
  371. //############################################################################
  372. //
  373. // class CTaskpadStyle
  374. //
  375. // PURPOSE: Stores details of a taskpad style. Used by CTaskpadGeneralPage
  376. //
  377. //############################################################################
  378. //############################################################################
  379. class CTaskpadStyle
  380. {
  381. private:
  382. /*
  383. * NOTE: this class has a custom assignment operator. Be sure to
  384. * update it if you add member variables to this class.
  385. */
  386. ListSize m_eSize;
  387. DWORD m_dwOrientation;
  388. int m_idsDescription; // eg "Horizontal listpad with tasks underneath."
  389. int m_nPreviewBitmapID;
  390. mutable CStr m_strDescription;
  391. mutable WTL::CBitmap m_PreviewBitmap;
  392. public:
  393. CTaskpadStyle (ListSize eSize, int idsDescription, int nPreviewBitmapID, DWORD dwOrientation);
  394. CTaskpadStyle (ListSize eSize, DWORD dwOrientation);
  395. CTaskpadStyle (const CTaskpadStyle& other);
  396. CTaskpadStyle& operator= (const CTaskpadStyle& other);
  397. bool operator== (const CTaskpadStyle& other) const
  398. {
  399. return ((m_dwOrientation == other.m_dwOrientation) &&
  400. ((m_eSize == other.m_eSize) || (m_eSize == eSize_None)));
  401. }
  402. const CStr& GetDescription() const;
  403. HBITMAP GetPreviewBitmap() const;
  404. };
  405. //############################################################################
  406. //############################################################################
  407. //
  408. // class CTaskpadFramePtr
  409. //
  410. // PURPOSE: holds a pointer to the taskpad frame.
  411. // If multiple base classes inherit from this class, declare this
  412. // class to be a static base.
  413. //
  414. //############################################################################
  415. //############################################################################
  416. class CTaskpadFramePtr
  417. {
  418. public:
  419. CTaskpadFramePtr(CTaskpadFrame * pTaskpadFrame): m_pTaskpadFrame(pTaskpadFrame){}
  420. protected:
  421. // attributes
  422. CTaskpadFrame * PTaskpadFrame() const { return (m_pTaskpadFrame); }
  423. CConsoleTaskpad * PConsoleTaskpad() { return PTaskpadFrame()->PConsoleTaskpad();}
  424. private:
  425. CTaskpadFrame * m_pTaskpadFrame;
  426. };
  427. //############################################################################
  428. //############################################################################
  429. //
  430. // class CTaskpadStyleBase
  431. //
  432. //############################################################################
  433. //############################################################################
  434. class CTaskpadStyleBase:public virtual CTaskpadFramePtr
  435. {
  436. typedef CTaskpadStyleBase ThisClass;
  437. static CTaskpadStyle s_rgTaskpadStyle[];
  438. WTL::CStatic m_wndPreview;
  439. WTL::CComboBox m_wndSizeCombo;
  440. public:
  441. CTaskpadStyleBase(CTaskpadFrame * pTaskpadFrame);
  442. protected:
  443. virtual HWND HWnd() =0;
  444. BEGIN_MSG_MAP(ThisClass)
  445. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  446. COMMAND_HANDLER(IDC_Style_VerticalList, BN_CLICKED, OnSettingChanged)
  447. COMMAND_HANDLER(IDC_Style_HorizontalList, BN_CLICKED, OnSettingChanged)
  448. COMMAND_HANDLER(IDC_Style_TasksOnly, BN_CLICKED, OnSettingChanged)
  449. COMMAND_HANDLER(IDC_Style_TooltipDesc, BN_CLICKED, OnSettingChanged)
  450. COMMAND_HANDLER(IDC_Style_TextDesc, BN_CLICKED, OnSettingChanged)
  451. COMMAND_HANDLER(IDC_Style_SizeCombo, CBN_SELCHANGE, OnSettingChanged)
  452. END_MSG_MAP();
  453. bool Apply(); // must call this explicitly
  454. LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  455. LRESULT OnSettingChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
  456. void GetSettings (DWORD& dwOrientation, ListSize& eSize);
  457. void UpdateControls ();
  458. int FindStyle (DWORD dwOrientation, ListSize eSize);
  459. };
  460. //############################################################################
  461. //############################################################################
  462. //
  463. // class CTaskpadGeneralPage
  464. //
  465. //############################################################################
  466. //############################################################################
  467. class CTaskpadGeneralPage : public WTL::CPropertyPageImpl<CTaskpadGeneralPage>,
  468. public CTaskpadStyleBase
  469. {
  470. MMC::CEdit m_strName;
  471. MMC::CEdit m_strDescription;
  472. MMC::CEdit m_strTooltip;
  473. public:
  474. typedef WTL::CPropertyPageImpl<CTaskpadGeneralPage> BC;
  475. typedef CTaskpadStyleBase BC2;
  476. enum { IDD = IDD_TASKPAD_GENERAL};
  477. //constructor/destructor
  478. CTaskpadGeneralPage(CTaskpadFrame * pTaskpadFrame);
  479. public: // Notification handlers
  480. bool OnApply();
  481. protected:
  482. BEGIN_MSG_MAP(CTaskpadGeneralPage)
  483. CHAIN_MSG_MAP_EX(BC2) // This MUST be the first entry.
  484. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  485. CONTEXT_HELP_HANDLER()
  486. COMMAND_ID_HANDLER(IDC_Options, OnOptions)
  487. CHAIN_MSG_MAP(BC)
  488. END_MSG_MAP();
  489. IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASKPAD_GENERAL);
  490. // for the base classes
  491. virtual HWND HWnd() {return m_hWnd;}
  492. LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  493. LRESULT OnOptions (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  494. };
  495. //############################################################################
  496. //############################################################################
  497. //
  498. // class CTaskpadWizardWelcomePage
  499. //
  500. //############################################################################
  501. //############################################################################
  502. class CTaskpadWizardWelcomePage :
  503. public CWizard97WelcomeFinishPage<CTaskpadWizardWelcomePage>
  504. {
  505. typedef CTaskpadWizardWelcomePage ThisClass;
  506. typedef CWizard97WelcomeFinishPage<CTaskpadWizardWelcomePage> BaseClass;
  507. public:
  508. // Construction/Destruction
  509. CTaskpadWizardWelcomePage() {}
  510. public:
  511. // Dialog data
  512. enum { IDD = IDD_TASKPAD_WIZARD_WELCOME};
  513. // Implementation
  514. protected:
  515. BEGIN_MSG_MAP( ThisClass );
  516. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  517. CHAIN_MSG_MAP(BaseClass)
  518. END_MSG_MAP();
  519. bool OnSetActive();
  520. bool OnKillActive();
  521. LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  522. };
  523. //############################################################################
  524. //############################################################################
  525. //
  526. // class CTaskpadWizardFinishPage
  527. //
  528. //############################################################################
  529. //############################################################################
  530. class CTaskpadWizardFinishPage :
  531. public CWizard97WelcomeFinishPage<CTaskpadWizardFinishPage>
  532. {
  533. typedef CTaskpadWizardFinishPage ThisClass;
  534. typedef CWizard97WelcomeFinishPage<CTaskpadWizardFinishPage> BaseClass;
  535. public:
  536. // Construction/Destruction
  537. CTaskpadWizardFinishPage(bool *pfStartTaskWizard) {m_pfStartTaskWizard = pfStartTaskWizard;}
  538. public:
  539. // Dialog data
  540. enum { IDD = IDD_TASKPAD_WIZARD_FINISH};
  541. BOOL OnSetActive();
  542. BOOL OnWizardFinish();
  543. // Implementation
  544. protected:
  545. BEGIN_MSG_MAP( ThisClass );
  546. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  547. CHAIN_MSG_MAP(BaseClass)
  548. END_MSG_MAP();
  549. LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  550. private:
  551. bool * m_pfStartTaskWizard;
  552. };
  553. //############################################################################
  554. //############################################################################
  555. //
  556. // class CTaskpadNamePage
  557. //
  558. //############################################################################
  559. //############################################################################
  560. class CTaskpadNamePage :
  561. public CWizard97InteriorPage<CTaskpadNamePage>,
  562. public virtual CTaskpadFramePtr
  563. {
  564. typedef CTaskpadNamePage ThisClass;
  565. typedef CWizard97InteriorPage<CTaskpadNamePage> BaseClass;
  566. public:
  567. // Construction/Destruction
  568. CTaskpadNamePage(CTaskpadFrame * pTaskpadFrame);
  569. public:
  570. // Dialog data
  571. enum
  572. {
  573. IDD = IDD_TASKPAD_WIZARD_NAME_PAGE,
  574. IDS_Title = IDS_TaskpadWiz_NamePageTitle,
  575. IDS_Subtitle = IDS_TaskpadWiz_NamePageSubtitle,
  576. };
  577. BOOL OnSetActive();
  578. int OnWizardNext();
  579. int OnWizardBack();
  580. // Implementation
  581. protected:
  582. BEGIN_MSG_MAP( ThisClass );
  583. CHAIN_MSG_MAP(BaseClass)
  584. END_MSG_MAP();
  585. private:
  586. MMC::CEdit m_strName;
  587. MMC::CEdit m_strDescription;
  588. };
  589. //############################################################################
  590. //############################################################################
  591. //
  592. // class CTaskpadStylePage
  593. //
  594. //############################################################################
  595. //############################################################################
  596. class CTaskpadStylePage :
  597. public CWizard97InteriorPage<CTaskpadStylePage>,
  598. public CTaskpadStyleBase
  599. {
  600. typedef CTaskpadStylePage ThisClass;
  601. typedef CWizard97InteriorPage<CTaskpadStylePage> BaseClass;
  602. typedef CTaskpadStyleBase BC2;
  603. public:
  604. // Construction/Destruction
  605. CTaskpadStylePage(CTaskpadFrame * pTaskpadFrame);
  606. public:
  607. // Dialog data
  608. enum
  609. {
  610. IDD = IDD_TASKPAD_WIZARD_STYLE_PAGE,
  611. IDS_Title = IDS_TaskpadWiz_StylePageTitle,
  612. IDS_Subtitle = IDS_TaskpadWiz_StylePageSubtitle,
  613. };
  614. // Implementation
  615. protected:
  616. BEGIN_MSG_MAP( ThisClass )
  617. CHAIN_MSG_MAP_EX(BC2) // This must be the first entry.
  618. CHAIN_MSG_MAP(BaseClass)
  619. END_MSG_MAP();
  620. bool OnSetActive();
  621. bool OnKillActive();
  622. // for the base classes
  623. virtual HWND HWnd() {return m_hWnd;}
  624. };
  625. //############################################################################
  626. //############################################################################
  627. //
  628. // class CTaskpadNodetypeBase
  629. //
  630. //############################################################################
  631. //############################################################################
  632. class CTaskpadNodetypeBase : public virtual CTaskpadFramePtr
  633. {
  634. typedef CTaskpadNodetypeBase ThisClass;
  635. typedef CTaskpadFramePtr BC;
  636. bool m_bApplytoNodetype;
  637. bool m_bSetDefaultForNodetype;
  638. protected:
  639. virtual HWND HWnd() =0;
  640. public:
  641. CTaskpadNodetypeBase(CTaskpadFrame *pTaskpadFrame);
  642. BEGIN_MSG_MAP(ThisClass)
  643. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  644. COMMAND_HANDLER (IDC_UseForSimilarNodes, BN_CLICKED, OnUseForNodetype)
  645. COMMAND_HANDLER (IDC_DontUseForSimilarNodes,BN_CLICKED, OnDontUseForNodetype)
  646. COMMAND_HANDLER (IDC_SetDefaultForNodetype, BN_CLICKED, OnSetAsDefault)
  647. END_MSG_MAP();
  648. bool OnApply();
  649. void EnableControls();
  650. LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  651. LRESULT OnUseForNodetype (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  652. LRESULT OnDontUseForNodetype(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  653. LRESULT OnSetAsDefault (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  654. };
  655. //############################################################################
  656. //############################################################################
  657. //
  658. // class CTaskpadNodetypePage
  659. //
  660. //############################################################################
  661. //############################################################################
  662. class CTaskpadNodetypePage :
  663. public CWizard97InteriorPage<CTaskpadNodetypePage>,
  664. public CTaskpadNodetypeBase
  665. {
  666. typedef CTaskpadNodetypePage ThisClass;
  667. typedef CWizard97InteriorPage<CTaskpadNodetypePage> BaseClass;
  668. typedef CTaskpadNodetypeBase BC2;
  669. protected:
  670. virtual HWND HWnd() {return m_hWnd;}
  671. public:
  672. enum
  673. {
  674. IDD = IDD_TASKPAD_WIZARD_NODETYPE_PAGE,
  675. IDS_Title = IDS_TaskpadWiz_NodeTypePageTitle,
  676. IDS_Subtitle = IDS_TaskpadWiz_NodeTypePageSubtitle,
  677. };
  678. CTaskpadNodetypePage(CTaskpadFrame *pTaskpadFrame);
  679. BEGIN_MSG_MAP( ThisClass )
  680. CHAIN_MSG_MAP_EX(BC2) // This must be the first entry.
  681. CHAIN_MSG_MAP(BaseClass)
  682. END_MSG_MAP();
  683. bool OnApply() {return BC2::OnApply();}
  684. };
  685. //############################################################################
  686. //############################################################################
  687. //
  688. // class CTaskpadOptionsDlg
  689. //
  690. //############################################################################
  691. //############################################################################
  692. #include <pshpack8.h> // for Win64
  693. class CTaskpadOptionsDlg : public CDialogBase<CTaskpadOptionsDlg>,
  694. public CTaskpadNodetypeBase
  695. {
  696. typedef CTaskpadOptionsDlg ThisClass;
  697. typedef CDialogBase<CTaskpadOptionsDlg> BaseClass;
  698. typedef CTaskpadNodetypeBase BC4;
  699. public:
  700. enum { IDD = IDD_TASKPAD_ADVANCED };
  701. //constructor/destructor
  702. CTaskpadOptionsDlg(CTaskpadFrame* pTaskpadFrame);
  703. ~CTaskpadOptionsDlg();
  704. protected:
  705. BEGIN_MSG_MAP(ThisClass)
  706. CONTEXT_HELP_HANDLER()
  707. //CHAIN_MSG_MAP_EX(BC3) // This MUST be the second entry.
  708. CHAIN_MSG_MAP (BC4) // This MUST be the third entry.
  709. CHAIN_MSG_MAP (BaseClass)
  710. END_MSG_MAP();
  711. IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASKPAD_ADVANCED);
  712. virtual HWND HWnd() {return m_hWnd;} // for the base classes.
  713. virtual LRESULT OnInitDialog (HWND hwndFocus, LPARAM lParam, BOOL& bHandled);
  714. virtual bool OnApply ();
  715. void EnableControls();
  716. };
  717. #include <poppack.h> // for Win64
  718. //############################################################################
  719. //############################################################################
  720. //
  721. // class CTaskPropertiesBase
  722. //
  723. //############################################################################
  724. //############################################################################
  725. typedef std::map<int, CConsoleTask> IntToTaskMap;
  726. class CTaskPropertiesBase :
  727. public CContextMenuVisitor, public virtual CTaskpadFramePtr
  728. {
  729. public:
  730. CTaskPropertiesBase(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew);
  731. protected:
  732. virtual IntToTaskMap & GetTaskMap() =0;
  733. virtual WTL::CListBox& GetListBox() =0;
  734. protected:
  735. LRESULT OnCommandListSelChange (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  736. virtual SC ScOnVisitContextMenu(CMenuItem &menuItem);
  737. CScopeTree * PScopeTree() const { return (PTaskpadFrame()->PScopeTree()); }
  738. CNode * PNodeTarget() const { return (PTaskpadFrame()->PNodeTarget()); }
  739. bool FCookieValid() const { return (PTaskpadFrame()->FCookieValid()); }
  740. LPARAM Cookie() const { return (PTaskpadFrame()->Cookie()); }
  741. CConsoleTask & ConsoleTask() const { return *m_pTask;}
  742. private:
  743. CConsoleTask * m_pTask;
  744. const bool m_fNew;
  745. IContextMenuCallbackPtr m_spContextMenuCallback;
  746. };
  747. //############################################################################
  748. //############################################################################
  749. //
  750. // class CTasksListDialog
  751. //
  752. //############################################################################
  753. //############################################################################
  754. template <class T>
  755. class CTasksListDialog : public WTL::CPropertyPageImpl<T> // do NOT inherit from CTaskpadFramePtr.
  756. {
  757. public:
  758. typedef CTasksListDialog ThisClass;
  759. typedef WTL::CPropertyPageImpl<T> BC;
  760. private:
  761. typedef CConsoleTaskpad::TaskIter TaskIter;
  762. CNode * PNodeTarget() {return PTaskpadFrame()->PNodeTarget();}
  763. CConsoleTaskpad * PConsoleTaskpad() {return PTaskpadFrame()->PConsoleTaskpad();}
  764. std::map<int, TaskIter> m_mapTaskIterators;
  765. std::map<int, TaskIter> & MapTaskIterators(){return m_mapTaskIterators;}
  766. WTL::CButton m_buttonNewTask;
  767. WTL::CButton m_buttonRemoveTask;
  768. WTL::CButton m_buttonModifyTask;
  769. WTL::CButton m_buttonMoveUp;
  770. WTL::CButton m_buttonMoveDown;
  771. WTL::CListViewCtrl m_listboxTasks;
  772. WTL::CListViewCtrl * PListBoxTasks() {return &m_listboxTasks;}
  773. int GetCurSel();
  774. bool m_bDisplayProperties; // should task properties be displayed?
  775. bool m_bNewTaskOnInit; // display the NewTask dialog on init.
  776. bool FNewTaskOnInit() {return m_bNewTaskOnInit;}
  777. public:
  778. //constructor/destructor
  779. CTasksListDialog(CTaskpadFrame * pTaskpadFrame, bool bNewTaskOnInit, bool bDisplayProperties) ;
  780. protected:
  781. BEGIN_MSG_MAP(CTasksPage)
  782. COMMAND_ID_HANDLER(IDC_NEW_TASK_BT, OnNewTask)
  783. COMMAND_ID_HANDLER(IDC_REMOVE_TASK, OnRemoveTask)
  784. COMMAND_ID_HANDLER(IDC_MODIFY, OnTaskProperties)
  785. COMMAND_ID_HANDLER(IDC_MOVE_UP, OnMoveUp)
  786. COMMAND_ID_HANDLER(IDC_MOVE_DOWN, OnMoveDown)
  787. NOTIFY_HANDLER (IDC_LIST_TASKS, NM_CUSTOMDRAW, OnCustomDraw)
  788. NOTIFY_HANDLER (IDC_LIST_TASKS, LVN_ITEMCHANGED, OnTaskChanged)
  789. NOTIFY_HANDLER (IDC_LIST_TASKS, NM_DBLCLK, OnTaskProperties)
  790. MESSAGE_HANDLER (WM_INITDIALOG, OnInitDialog)
  791. CONTEXT_HELP_HANDLER()
  792. CHAIN_MSG_MAP(BC)
  793. END_MSG_MAP();
  794. IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASKS);
  795. LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  796. LRESULT OnNewTask();
  797. LRESULT OnNewTask( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ) {return OnNewTask();}
  798. LRESULT OnRemoveTask( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
  799. LRESULT OnMoveUp( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
  800. LRESULT OnMoveDown( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
  801. LRESULT OnTaskProperties(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ) {OnTaskProperties(); return 0;}
  802. LRESULT OnTaskProperties(int id, LPNMHDR pnmh, BOOL& bHandled ) {OnTaskProperties(); return 0;}
  803. LRESULT OnCustomDraw( int id, LPNMHDR pnmh, BOOL& bHandled );
  804. LRESULT OnTaskChanged( int id, LPNMHDR pnmh, BOOL& bHandled );
  805. void OnTaskProperties();
  806. // operations
  807. LRESULT DrawItem(NMCUSTOMDRAW *pnmcd);
  808. void UpdateTaskListbox(TaskIter taskIteratorSelected);
  809. void EnableButtons();
  810. void EnableButtonAndCorrectFocus( WTL::CButton& button, BOOL bEnable );
  811. private:
  812. CTaskpadFrame * PTaskpadFrame() { return m_pTaskpadFrame;}
  813. CTaskpadFrame * m_pTaskpadFrame;
  814. };
  815. //############################################################################
  816. //############################################################################
  817. //
  818. // class CTasksPage
  819. //
  820. //############################################################################
  821. //############################################################################
  822. class CTasksPage : public CTasksListDialog<CTasksPage>, public virtual CTaskpadFramePtr
  823. {
  824. public:
  825. typedef CTasksListDialog<CTasksPage> BC;
  826. enum { IDD = IDD_TASKS};
  827. //constructor/destructor
  828. CTasksPage(CTaskpadFrame * pTaskpadFrame, bool bNewTaskOnInit)
  829. : BC(pTaskpadFrame, bNewTaskOnInit, true), CTaskpadFramePtr(pTaskpadFrame) {}
  830. };
  831. //############################################################################
  832. //############################################################################
  833. //
  834. // class CTaskWizardWelcomePage
  835. //
  836. //############################################################################
  837. //############################################################################
  838. class CTaskWizardWelcomePage :
  839. public CWizard97WelcomeFinishPage<CTaskWizardWelcomePage>,
  840. public virtual CTaskpadFramePtr
  841. {
  842. typedef CTaskWizardWelcomePage ThisClass;
  843. typedef CWizard97WelcomeFinishPage<CTaskWizardWelcomePage> BaseClass;
  844. public:
  845. // Construction/Destruction
  846. CTaskWizardWelcomePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew)
  847. : CTaskpadFramePtr(pTaskpadFrame){}
  848. public:
  849. // Dialog data
  850. enum { IDD = IDD_TASK_WIZARD_WELCOME};
  851. // Implementation
  852. protected:
  853. BEGIN_MSG_MAP( ThisClass );
  854. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  855. CHAIN_MSG_MAP(BaseClass)
  856. END_MSG_MAP();
  857. bool OnSetActive();
  858. bool OnKillActive();
  859. LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  860. private:
  861. // attributes
  862. CConsoleTask * m_pConsoleTask;
  863. CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;}
  864. };
  865. //############################################################################
  866. //############################################################################
  867. //
  868. // class CTaskWizardFinishPage
  869. //
  870. //############################################################################
  871. //############################################################################
  872. class CTaskWizardFinishPage :
  873. public CTasksListDialog<CTaskWizardFinishPage>,
  874. public virtual CTaskpadFramePtr
  875. {
  876. typedef CTaskWizardFinishPage ThisClass;
  877. typedef CTasksListDialog<CTaskWizardFinishPage> BaseClass;
  878. public:
  879. // Construction/Destruction
  880. CTaskWizardFinishPage(CTaskpadFrame * pTaskpadFrame,
  881. CConsoleTask & consoleTask, bool *pfRestartTaskWizard);
  882. public:
  883. // Dialog data
  884. enum { IDD = IDD_TASK_WIZARD_FINISH};
  885. BOOL OnWizardFinish();
  886. int OnWizardBack();
  887. // Implementation
  888. protected:
  889. BEGIN_MSG_MAP( ThisClass );
  890. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  891. CHAIN_MSG_MAP(BaseClass)
  892. END_MSG_MAP();
  893. BOOL OnSetActive();
  894. LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  895. private:
  896. CTaskpadFrame m_taskpadFrameTemp; // for the list dialog
  897. CConsoleTaskpad m_consoleTaskpadTemp; //
  898. bool * m_pfRestartTaskWizard;
  899. // attributes
  900. CConsoleTask * m_pConsoleTask;
  901. CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;}
  902. };
  903. //############################################################################
  904. //############################################################################
  905. //
  906. // class CTaskWizardTypePage
  907. //
  908. //############################################################################
  909. //############################################################################
  910. class CTaskWizardTypePage :
  911. public CWizard97InteriorPage<CTaskWizardTypePage>,
  912. public virtual CTaskpadFramePtr
  913. {
  914. typedef CTaskWizardTypePage ThisClass;
  915. typedef CWizard97InteriorPage<CTaskWizardTypePage> BaseClass;
  916. public:
  917. // Construction/Destruction
  918. CTaskWizardTypePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew);
  919. public:
  920. // Dialog data
  921. enum
  922. {
  923. IDD = IDD_TASK_WIZARD_TYPE_PAGE,
  924. IDS_Title = IDS_TaskWiz_TypePageTitle,
  925. IDS_Subtitle = IDS_TaskWiz_TypePageSubtitle,
  926. };
  927. int OnWizardNext();
  928. // Implementation
  929. protected:
  930. BEGIN_MSG_MAP( ThisClass );
  931. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  932. COMMAND_ID_HANDLER(IDC_MENU_TASK, OnMenuTask)
  933. COMMAND_ID_HANDLER(IDC_CMDLINE_TASK, OnCmdLineTask)
  934. COMMAND_ID_HANDLER(IDC_NAVIGATION_TASK, OnFavoriteTask)
  935. CHAIN_MSG_MAP(BaseClass)
  936. END_MSG_MAP();
  937. LRESULT OnInitDialog ( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  938. LRESULT OnMenuTask ( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
  939. LRESULT OnCmdLineTask( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
  940. LRESULT OnFavoriteTask(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
  941. private:
  942. // attributes
  943. CConsoleTask * m_pConsoleTask;
  944. CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;}
  945. };
  946. //############################################################################
  947. //############################################################################
  948. //
  949. // class CTaskNamePage
  950. //
  951. //############################################################################
  952. //############################################################################
  953. class CTaskNamePage : public WTL::CPropertyPageImpl<CTaskNamePage>,
  954. public virtual CTaskpadFramePtr
  955. {
  956. typedef CTaskNamePage ThisClass;
  957. typedef WTL::CPropertyPageImpl<CTaskNamePage> BaseClass;
  958. public:
  959. // Construction/Destruction
  960. CTaskNamePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew);
  961. public:
  962. // Dialog data
  963. enum { IDD = IDD_TASK_PROPS_NAME_PAGE,
  964. IDD_WIZ = IDD_TASK_WIZARD_NAME_PAGE };
  965. BOOL OnSetActive();
  966. BOOL OnKillActive();
  967. int OnWizardBack();
  968. int OnWizardNext();
  969. protected:
  970. BEGIN_MSG_MAP( ThisClass );
  971. CONTEXT_HELP_HANDLER()
  972. CHAIN_MSG_MAP(BaseClass)
  973. END_MSG_MAP();
  974. IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASK_PROPS_NAME_PAGE);
  975. private:
  976. // Implementation
  977. BOOL SetTaskName(bool fCheckIfOK);
  978. // attributes
  979. CConsoleTask * m_pConsoleTask;
  980. CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;}
  981. bool m_fRunAsWizard;
  982. };
  983. class CTaskNameWizardPage: public CTaskNamePage
  984. {
  985. typedef CTaskNamePage BC;
  986. public:
  987. CTaskNameWizardPage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew) :
  988. CTaskpadFramePtr(pTaskpadFrame),
  989. BC(pTaskpadFrame, consoleTask, fNew)
  990. {
  991. m_psp.pszTemplate = MAKEINTRESOURCE(BC::IDD_WIZ);
  992. /*
  993. * Wizard97-style pages have titles, subtitles and header bitmaps
  994. */
  995. VERIFY (m_strTitle. LoadString(GetStringModule(), IDS_TaskWiz_NamePageTitle));
  996. VERIFY (m_strSubtitle.LoadString(GetStringModule(), IDS_TaskWiz_NamePageSubtitle));
  997. m_psp.dwFlags |= PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
  998. m_psp.pszHeaderTitle = m_strTitle.data();
  999. m_psp.pszHeaderSubTitle = m_strSubtitle.data();
  1000. }
  1001. private:
  1002. tstring m_strTitle;
  1003. tstring m_strSubtitle;
  1004. };
  1005. //############################################################################
  1006. //############################################################################
  1007. //
  1008. // class CTaskWizardMenuPage
  1009. //
  1010. //############################################################################
  1011. //############################################################################
  1012. class CTaskWizardMenuPage :
  1013. public CWizard97InteriorPage<CTaskWizardMenuPage>,
  1014. public CTaskPropertiesBase
  1015. {
  1016. typedef CTaskWizardMenuPage ThisClass;
  1017. typedef CWizard97InteriorPage<CTaskWizardMenuPage> BaseClass;
  1018. typedef CTaskPropertiesBase BC2;
  1019. public:
  1020. // Construction/Destruction
  1021. CTaskWizardMenuPage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew);
  1022. public:
  1023. // Dialog data
  1024. enum
  1025. {
  1026. IDD = IDD_TASK_WIZARD_MENU_PAGE,
  1027. IDS_Title = IDS_TaskWiz_MenuPageTitle,
  1028. IDS_Subtitle = IDS_TaskWiz_MenuPageSubtitle,
  1029. };
  1030. BOOL OnSetActive();
  1031. BOOL OnKillActive();
  1032. int OnWizardBack() {return IDD_TASK_WIZARD_TYPE_PAGE;}
  1033. int OnWizardNext();
  1034. // Implementation
  1035. protected:
  1036. BEGIN_MSG_MAP( ThisClass );
  1037. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  1038. COMMAND_HANDLER (IDC_CommandList, LBN_SELCHANGE, BC2::OnCommandListSelChange)
  1039. NOTIFY_HANDLER (IDC_ScopeTree, TVN_SELCHANGED, OnScopeItemChanged)
  1040. NOTIFY_HANDLER (IDC_ResultList, LVN_ITEMCHANGED, OnResultItemChanged)
  1041. COMMAND_HANDLER (IDC_TASK_SOURCE_COMBO, CBN_SELCHANGE, OnSettingChanged)
  1042. CHAIN_MSG_MAP(BaseClass)
  1043. REFLECT_NOTIFICATIONS()
  1044. END_MSG_MAP();
  1045. LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  1046. LRESULT OnScopeItemChanged (int id, LPNMHDR pnmh, BOOL& bHandled );
  1047. LRESULT OnResultItemChanged(int id, LPNMHDR pnmh, BOOL& bHandled);
  1048. LRESULT OnSettingChanged( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled );
  1049. void EnableWindows();
  1050. virtual IntToTaskMap & GetTaskMap() { return m_TaskMap;}
  1051. virtual WTL::CListBox& GetListBox() { return m_wndCommandListbox;}
  1052. void InitResultView (CNode* pRootNode);
  1053. void ShowWindow(HWND hWnd, bool bShowWindow);
  1054. void SelectFirstResultItem(bool bSelect = true);
  1055. void OnSettingsChanged();
  1056. private:
  1057. struct _TaskSource
  1058. {
  1059. int idsName;
  1060. eConsoleTaskType type;
  1061. };
  1062. // attributes
  1063. static _TaskSource s_rgTaskSource[];
  1064. IntToTaskMap m_TaskMap;
  1065. WTL::CListBox m_wndCommandListbox;
  1066. CMTBrowserCtrl m_wndScopeTree;
  1067. WTL::CComboBox m_wndSourceCombo;
  1068. CMirrorListView m_wndResultView;
  1069. CTempAMCView m_MirroredView;
  1070. CNode* m_pMirrorTargetNode;
  1071. };
  1072. //############################################################################
  1073. //############################################################################
  1074. //
  1075. // class CTaskWizardFavoritePage
  1076. //
  1077. //############################################################################
  1078. //############################################################################
  1079. class CTaskWizardFavoritePage :
  1080. public CWizard97InteriorPage<CTaskWizardFavoritePage>,
  1081. public virtual CTaskpadFramePtr
  1082. {
  1083. typedef CTaskWizardFavoritePage ThisClass;
  1084. typedef CWizard97InteriorPage<CTaskWizardFavoritePage> BaseClass;
  1085. enum { IDC_FavoritesTree = 16384}; // this shouldn't occur on the page.
  1086. public:
  1087. // Construction/Destruction
  1088. CTaskWizardFavoritePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew);
  1089. ~CTaskWizardFavoritePage();
  1090. public:
  1091. // Dialog data
  1092. enum
  1093. {
  1094. IDD = IDD_TASK_WIZARD_FAVORITE_PAGE,
  1095. IDD_WIZ = IDD_TASK_WIZARD_FAVORITE_PAGE,
  1096. IDS_Title = IDS_TaskWiz_FavoritePage_Title,
  1097. IDS_Subtitle = IDS_TaskWiz_FavoritePage_Subtitle,
  1098. };
  1099. BOOL OnSetActive();
  1100. BOOL OnKillActive();
  1101. int OnWizardBack();
  1102. int OnWizardNext();
  1103. // Implementation
  1104. protected:
  1105. BEGIN_MSG_MAP( ThisClass );
  1106. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  1107. MESSAGE_HANDLER(MMC_MSG_FAVORITE_SELECTION, OnItemChanged)
  1108. CHAIN_MSG_MAP(BaseClass)
  1109. REFLECT_NOTIFICATIONS()
  1110. END_MSG_MAP();
  1111. LRESULT OnInitDialog (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  1112. LRESULT OnItemChanged (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  1113. LRESULT OnSelChanged ( int id, LPNMHDR pnmh, BOOL& bHandled );
  1114. void SetItemSelected(bool bItemSelected);
  1115. private:
  1116. // attributes
  1117. CConsoleTask * m_pConsoleTask;
  1118. CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;}
  1119. bool m_bItemSelected;
  1120. };
  1121. //############################################################################
  1122. //############################################################################
  1123. //
  1124. // class CTaskCmdLinePage
  1125. //
  1126. //############################################################################
  1127. //############################################################################
  1128. class CTaskCmdLinePage :
  1129. public CWizard97InteriorPage<CTaskCmdLinePage>,
  1130. public virtual CTaskpadFramePtr
  1131. {
  1132. typedef CTaskCmdLinePage ThisClass;
  1133. typedef CWizard97InteriorPage<CTaskCmdLinePage> BaseClass;
  1134. public:
  1135. // Construction/Destruction
  1136. CTaskCmdLinePage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew);
  1137. ~CTaskCmdLinePage();
  1138. public:
  1139. // Dialog data
  1140. enum
  1141. {
  1142. IDD = IDD_TASK_PROPS_CMDLINE_PAGE,
  1143. IDD_WIZ = IDD_TASK_WIZARD_CMDLINE_PAGE,
  1144. IDS_Title = IDS_TaskWiz_CmdLinePageTitle,
  1145. IDS_Subtitle = IDS_TaskWiz_CmdLinePageSubtitle,
  1146. };
  1147. BOOL OnSetActive();
  1148. BOOL OnKillActive();
  1149. int OnWizardBack() {return IDD_TASK_WIZARD_TYPE_PAGE;}
  1150. int OnWizardNext();
  1151. // Implementation
  1152. protected:
  1153. BEGIN_MSG_MAP( ThisClass );
  1154. COMMAND_ID_HANDLER (IDC_BrowseForCommand, OnBrowseForCommand)
  1155. COMMAND_ID_HANDLER (IDC_BrowseForWorkingDir, OnBrowseForWorkingDir)
  1156. COMMAND_ID_HANDLER (IDC_BrowseForArguments, OnBrowseForArguments)
  1157. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  1158. CONTEXT_HELP_HANDLER()
  1159. CHAIN_MSG_MAP(BaseClass)
  1160. END_MSG_MAP();
  1161. IMPLEMENT_CONTEXT_HELP(g_aHelpIDs_IDD_TASK_PROPS_CMDLINE_PAGE);
  1162. LRESULT OnInitDialog( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
  1163. LRESULT OnBrowseForCommand (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  1164. LRESULT OnBrowseForWorkingDir (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  1165. LRESULT OnBrowseForArguments (WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  1166. private:
  1167. // attributes
  1168. CConsoleTask * m_pConsoleTask;
  1169. CConsoleTask & ConsoleTask() const { return *m_pConsoleTask;}
  1170. WTL::CButton m_wndRightArrowButton;
  1171. HBITMAP m_hBitmapRightArrow;
  1172. CMyComboBox m_wndWindowStateCombo;
  1173. static const int const s_rgidWindowStates[];
  1174. };
  1175. class CTaskCmdLineWizardPage: public CTaskCmdLinePage
  1176. {
  1177. typedef CTaskCmdLinePage BC;
  1178. public:
  1179. CTaskCmdLineWizardPage(CTaskpadFrame * pTaskpadFrame, CConsoleTask & consoleTask, bool fNew) :
  1180. CTaskpadFramePtr(pTaskpadFrame),
  1181. CTaskCmdLinePage(pTaskpadFrame, consoleTask, fNew)
  1182. {
  1183. m_psp.pszTemplate = MAKEINTRESOURCE(BC::IDD_WIZ);
  1184. }
  1185. };
  1186. //############################################################################
  1187. //############################################################################
  1188. //
  1189. // class CTaskPropertySheet
  1190. //
  1191. //############################################################################
  1192. //############################################################################
  1193. class CTaskPropertySheet : public WTL::CPropertySheet
  1194. {
  1195. public:
  1196. CTaskPropertySheet(HWND hWndParent, CTaskpadFrame * pTaskpadFrame, CConsoleTask &consoleTask, bool fNew);
  1197. CConsoleTask & ConsoleTask() {return m_consoleTask;}
  1198. private:
  1199. CConsoleTask m_consoleTask; // the task that the wizard creates.
  1200. CTaskNamePage m_namePage;
  1201. CTaskCmdLinePage m_cmdLinePage;
  1202. CTaskSymbolDlg m_taskSymbolDialog;
  1203. };
  1204. //############################################################################
  1205. //############################################################################
  1206. //
  1207. // class CTaskWizard // similar to CTaskPropertySheet
  1208. //
  1209. //############################################################################
  1210. //############################################################################
  1211. class CTaskWizard
  1212. {
  1213. public:
  1214. CTaskWizard() {}
  1215. HRESULT Show(HWND hWndParent, CTaskpadFrame * pTaskpadFrame,
  1216. bool fNew, bool *pfRestartTaskWizard);
  1217. CConsoleTask & ConsoleTask() {return m_consoleTask;}
  1218. private:
  1219. CConsoleTask m_consoleTask; // the task that the wizard creates.
  1220. };
  1221. //############################################################################
  1222. //############################################################################
  1223. //
  1224. // class CTaskpadPropertySheet
  1225. //
  1226. //############################################################################
  1227. //############################################################################
  1228. class CTaskpadPropertySheet : public WTL::CPropertySheet, public CTaskpadFrame
  1229. {
  1230. typedef WTL::CPropertySheet BC;
  1231. public:
  1232. enum eReason // the reason for bringing up the sheet
  1233. {
  1234. eReason_PROPERTIES,
  1235. eReason_NEWTASK
  1236. };
  1237. private:
  1238. // Attributes:
  1239. CTaskpadGeneralPage m_proppTaskpadGeneral;
  1240. CTaskpadGeneralPage * PproppTaskpadGeneral() {return &m_proppTaskpadGeneral;}
  1241. CTasksPage m_proppTasks;
  1242. CTasksPage * PproppTasks() {return &m_proppTasks;}
  1243. bool m_fInsertNode; // TRUE if the taskpad node should be inserted when the sheet is closed.
  1244. bool FInsertNode() {return m_fInsertNode;}
  1245. bool m_fNew; // is this a new taskpad?
  1246. bool FNew() {return m_fNew;}
  1247. eReason m_eReason; // why was the sheet created?
  1248. eReason Reason() {return m_eReason;}
  1249. tstring m_strTitle;
  1250. public:
  1251. //constructor/destructor
  1252. CTaskpadPropertySheet(CNode *pNodeTarget, CConsoleTaskpad & rConsoleTaskPad, bool fNew,
  1253. LPARAM lparamSelectedNode, bool fLParamValid, CViewData *pViewData,
  1254. eReason reason = eReason_PROPERTIES);
  1255. ~CTaskpadPropertySheet();
  1256. // operations
  1257. int DoModal();
  1258. };
  1259. //############################################################################
  1260. //############################################################################
  1261. //
  1262. // class CTaskpadWizard // similar to CTaskpadPropertySheet
  1263. //
  1264. //############################################################################
  1265. //############################################################################
  1266. class CTaskpadWizard : public CTaskpadFrame
  1267. {
  1268. typedef CTaskpadFrame BC;
  1269. public:
  1270. CTaskpadWizard(CNode *pNodeTarget, CConsoleTaskpad & rConsoleTaskPad, bool fNew,
  1271. LPARAM lparamSelectedNode, bool fLParamValid, CViewData *pViewData);
  1272. HRESULT Show(HWND hWndParent, bool *pfStartTaskWizard);
  1273. };
  1274. //############################################################################
  1275. //############################################################################
  1276. //
  1277. // class CExtendPropSheetImpl
  1278. //
  1279. //############################################################################
  1280. //############################################################################
  1281. class CExtendPropSheetImpl :
  1282. public IExtendPropertySheet2,
  1283. public CComObjectRoot
  1284. {
  1285. public:
  1286. void AddPage (HPROPSHEETPAGE hPage);
  1287. void SetHeaderID (int nHeaderID);
  1288. void SetWatermarkID (int nWatermarkID);
  1289. protected:
  1290. BEGIN_COM_MAP(CExtendPropSheetImpl)
  1291. COM_INTERFACE_ENTRY(IExtendPropertySheet)
  1292. COM_INTERFACE_ENTRY(IExtendPropertySheet2)
  1293. END_COM_MAP()
  1294. // IExtendPropertySheet2
  1295. STDMETHOD(CreatePropertyPages)(IPropertySheetCallback* pPSC, LONG_PTR handle, IDataObject* pDO);
  1296. STDMETHOD(QueryPagesFor)(IDataObject* pDO);
  1297. STDMETHOD(GetWatermarks)(IDataObject* pDO, HBITMAP* phbmWatermark, HBITMAP* phbmHeader, HPALETTE* phPal, BOOL* pbStretch);
  1298. private:
  1299. std::vector<HANDLE> m_vPages;
  1300. int m_nWatermarkID;
  1301. int m_nHeaderID;
  1302. };
  1303. typedef CComObject<CExtendPropSheetImpl> CExtendPropSheet;
  1304. ///////////////////////////////////////////////////////////////////////////////
  1305. ///////////////////////////////////////////////////////////////////////////////
  1306. ////////////// INLINES ///////////////////////////
  1307. ///////////////////////////////////////////////////////////////////////////////
  1308. ///////////////////////////////////////////////////////////////////////////////
  1309. namespace MMC
  1310. {
  1311. inline void
  1312. CEdit::Initialize(CWindow *pwndParent, int idEdit, int cchMax, LPCTSTR sz)
  1313. {
  1314. Attach (pwndParent->GetDlgItem( idEdit ));
  1315. ASSERT( m_hWnd != NULL );
  1316. if(sz)
  1317. SetWindowText( sz );
  1318. if(cchMax >=0)
  1319. SetLimitText( 128 );
  1320. }
  1321. tstring GetWindowText (HWND hwnd);
  1322. }; // namespace MMC
  1323. void PreventMFCAutoCenter (MMC_ATL::CWindow* pwnd);
  1324. HBITMAP LoadSysColorBitmap (HINSTANCE hInst, UINT id, bool bMono = false);
  1325. #include <poppack.h>
  1326. #endif /* TASKUI_H */