// qryprop.h - Query node property pages header file #ifndef _QRYPROP_H_ #define _QRYPROP_H_ #include "scopenode.h" #include "atlwin.h" #include "atldlgs.h" #include "atlctrls.h" #include "rootprop.h" #include class CQueryEditObj { public: CQueryEditObj(CQueryNode* pQueryNode) { ASSERT(pQueryNode != NULL); m_spQueryNode = pQueryNode; if( pQueryNode ) { m_vObjInfo = pQueryNode->Objects(); m_vMenus = pQueryNode->Menus(); } m_iPageMax = -1; m_cRef = 0; } HRESULT LoadStrings(IStringTable* pStringTable) { menucmd_vector::iterator itMenuCmd; for (itMenuCmd = Menus().begin(); itMenuCmd != Menus().end(); ++itMenuCmd) { HRESULT hr = (*itMenuCmd)->LoadName(pStringTable); RETURN_ON_FAILURE(hr); } return S_OK; } void PageActive(HWND hwndPage); BOOL ApplyChanges(HWND hwndPage); menucmd_vector& Menus() { return m_vMenus; } ULONG AddRef() { return ++m_cRef; } ULONG Release() { ASSERT(m_cRef > 0); if (--m_cRef != 0) return m_cRef; delete this; return 0; } public: CComPtr m_spQueryNode; QueryObjVector m_vObjInfo; menucmd_vector m_vMenus; // Query Nodes now have menus private: int m_iPageMax; int m_cRef; }; class CQueryGeneralPage : public CPropertyPageImpl { public: typedef CPropertyPageImpl BC; // Constructor/destructor CQueryGeneralPage(CQueryEditObj* pEditObj); virtual ~CQueryGeneralPage(); enum { IDD = IDD_QUERY_GENERAL_PAGE }; protected: BEGIN_MSG_MAP( CQueryGeneralPage ) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) MESSAGE_HANDLER(WM_CLOSE, OnClose) COMMAND_HANDLER(IDC_COMMENTS, EN_CHANGE, OnChange) COMMAND_HANDLER(IDC_QUERYSCOPE, BN_CLICKED, OnScopeChange) COMMAND_HANDLER(IDC_LOCALSCOPE, BN_CLICKED, OnScopeChange) CHAIN_MSG_MAP(BC) END_MSG_MAP() // message handlers LRESULT OnInitDialog( UINT mMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnClose( UINT mMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnChange( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnScopeChange( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); // overrrides BOOL OnSetActive(); BOOL OnApply(); private: CQueryEditObj& m_EditObject; }; class CQueryMenuPage : public CPropertyPageImpl { public: typedef CPropertyPageImpl BC; CQueryMenuPage(CQueryEditObj* pEditObj); virtual ~CQueryMenuPage(); enum { IDD = IDD_QUERY_MENU_PAGE }; protected: BEGIN_MSG_MAP( CQueryMenuPage ) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) NOTIFY_HANDLER(IDC_MENULIST, LVN_ITEMCHANGED, OnMenuChanged) COMMAND_HANDLER(IDC_DEFAULTMENU, BN_CLICKED, OnDefaultChanged) COMMAND_HANDLER(IDC_OBJECTLIST, CBN_SELENDOK, OnObjectSelect) COMMAND_HANDLER(IDC_MOVEUP, BN_CLICKED, OnMoveUpDown) COMMAND_HANDLER(IDC_MOVEDOWN, BN_CLICKED, OnMoveUpDown); COMMAND_HANDLER(IDC_PROPERTYMENU, BN_CLICKED, OnPropertyMenuChanged) CHAIN_MSG_MAP(BC) END_MSG_MAP() // handlers LRESULT OnInitDialog( UINT mMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnMenuChanged(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled); LRESULT OnObjectSelect( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnMoveUpDown( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnDefaultChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); LRESULT OnPropertyMenuChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled); // overrrides BOOL OnSetActive(); BOOL OnApply(); void DisplayMenus(); void DisplayMenuItem(int iIndex, CMenuCmd* pMenuCmd, BOOL bEnabled); void SaveMenuSet(); private: CQueryEditObj& m_EditObject; CComboBox m_ObjectCB; CListViewEx m_MenuLV; CQueryObjInfo* m_pObjSel; BOOL m_bLoading; BOOL m_DefaultID; }; class CQueryViewPage : public CPropertyPageImpl { public: typedef CPropertyPageImpl BC; CQueryViewPage(CQueryEditObj* pEditObj); virtual ~CQueryViewPage(); enum { IDD = IDD_QUERY_VIEW_PAGE }; protected: BEGIN_MSG_MAP( CQueryViewPage ) NOTIFY_HANDLER(IDC_COLUMNLIST, LVN_ITEMCHANGED, OnColumnChanged) NOTIFY_HANDLER(IDC_COLUMNLIST, LVN_COLUMNCLICK, OnColumnClick) COMMAND_HANDLER(IDC_OBJECTLIST, CBN_SELENDOK, OnObjectSelect ) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) CHAIN_MSG_MAP(BC) END_MSG_MAP() // handlers LRESULT OnInitDialog( UINT mMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnObjectSelect( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnColumnChanged(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled); LRESULT OnColumnClick(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled); // overrrides BOOL OnSetActive(); BOOL OnApply(); void DisplayColumns(); void SaveColumnSet(); private: CQueryEditObj& m_EditObject; CQueryObjInfo* m_pObjSel; CComboBox m_ObjectCB; CListViewEx m_ColumnLV; BOOL m_bLoading; }; class CQueryNodeMenuPage : public CPropertyPageImpl { public: typedef CPropertyPageImpl BC; CQueryNodeMenuPage(CQueryEditObj* pEditObj); virtual ~CQueryNodeMenuPage(); enum { IDD = IDD_QUERY_NODE_MENU_PAGE }; protected: BEGIN_MSG_MAP( CQueryNodeMenuPage ) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) NOTIFY_HANDLER(IDC_MENULIST, LVN_ITEMCHANGED, OnMenuListChanged) NOTIFY_HANDLER(IDC_MENULIST, NM_DBLCLK, OnMenuListDblClk) COMMAND_HANDLER(IDC_ADDMENU, BN_CLICKED, OnAddMenu) COMMAND_HANDLER(IDC_REMOVEMENU, BN_CLICKED, OnRemoveMenu) COMMAND_HANDLER(IDC_EDITMENU, BN_CLICKED, OnEditMenu) COMMAND_HANDLER(IDC_MOVEUP, BN_CLICKED, OnMoveUpDown) COMMAND_HANDLER(IDC_MOVEDOWN, BN_CLICKED, OnMoveUpDown); CHAIN_MSG_MAP(BC) END_MSG_MAP() // handlers LRESULT OnInitDialog( UINT mMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ); LRESULT OnAddMenu( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnRemoveMenu( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnEditMenu( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnMoveUpDown( WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled ); LRESULT OnMenuListChanged(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled); LRESULT OnMenuListDblClk(int idCtrl, LPNMHDR pNMHDR, BOOL& bHandled); // overrrides BOOL OnSetActive(); BOOL OnApply(); void OnFinalMessage(HWND) { delete this; } // implementation void DisplayMenus(); private: CListViewCtrl m_MenuLV; CQueryEditObj& m_EditObject; }; #endif // _QRYPROP_H_