// XTToolsManager.h: interface for the CXTToolsManager class. // // This file is a part of the Xtreme Toolkit for MFC. // ©1998-2003 Codejock Software, All Rights Reserved. // // This source code can only be used under the terms and conditions // outlined in the accompanying license agreement. // // support@codejock.com // http://www.codejock.com // ////////////////////////////////////////////////////////////////////// #if !defined(__XTTOOLSMANAGER_H__) #define __XTTOOLSMANAGER_H__ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // forwards class CXTMenuBar; class CXTCoolMenu; class CXTEditListBox; ////////////////////////////////////////////////////////////////////// // Summary: XT_TOOL is a stand alone structure class. It is used by CXTToolsManager // to manage tool data settings. struct XT_TOOL { UINT uCmdID; // Command ID to be associated with this tool. TCHAR szTitle[128]; // A NULL terminated string that represents the command title. TCHAR szArg[128]; // A NULL terminated string that represents the argument passed to the executable. TCHAR szCmd[_MAX_PATH]; // A NULL terminated string that represents the executable associated with this command. TCHAR szDir[_MAX_PATH]; // A NULL terminated string that represents the default directory. }; typedef CMap CXTToolsMap; typedef CMap CXTToolsMenuMap; ////////////////////////////////////////////////////////////////////// // Summary: CXTColorRef is a stand alone class. It is used to manage the tools // configuration page in the Customize dialog. class _XT_EXT_CLASS CXTToolsManager { private: // Summary: Constructs a CXTToolsManager object. CXTToolsManager(); public: // Summary: Destroys a CXTToolsManager object, handles cleanup and de-allocation. virtual ~CXTToolsManager(); protected: ////////////////////////////////////////////////////////////////////// // Frame window binding information ////////////////////////////////////////////////////////////////////// CFrameWnd* m_pFrameWnd; // Frame window the accelerators are connected to. ////////////////////////////////////////////////////////////////////// // Our tools buffer ////////////////////////////////////////////////////////////////////// int m_iHTMLIcon; // Index of the HTML icon in the shell image list. int m_iArgPopup; // Resource ID of the popup menu to be displayed for the arguments browse edit box. int m_iDirPopup; // Resource ID of the popup menu to be displayed for the directory browse edit box. int m_iNormalIndex; // Index where the 'Tools' menu should be inserted into the standard menu. int m_iWindowIndex; // Index where the 'Tools' menu should be inserted into the MDI window menu. int m_nToolsCount; // The count of tools pointed to by 'm_pToolsArray'. bool m_bChanged; // true if the contents of 'm_pToolsArray' has been changed. bool m_bAutoSave; // true if the tool's data is automatically saved when this class is destroyed. bool m_bInitialized; // true if the tool's data has been initialized. bool m_bRemoveAll; // true if all tool's have been removed. HMENU m_hToolsMenu; // Handle to the tools menu inserted into the applications menu. CString m_strToolsTitle; // User defined title of the 'Tools' pulldown menu. XT_TOOL* m_pToolsArray; // Array of tool commands. CXTIconMap m_mapIconCmd; // Hash table to map tool commands with corresponding menu icons. HIMAGELIST m_hImageList; // Handle to the system image list. CXTMenuBar* m_pMenuBar; // Points to the menubar for the application. CXTToolsMap m_mapTools; // Hash table of XT_TOOL structures mapped to user defined commands. CXTCoolMenu* m_pCoolMenu; // Points to the application's cool menu hook. CXTToolsMenuMap m_mapToolsMenu; // Hash table of application menus mapped to existing tools menus. public: // Example:
CXTOptionsManager::Get().Init( this, GetMenuBar(), GetCoolMenu() );
// Returns: A reference to the one and only CXTToolsManager object. // Summary: This static member function will retrieve a reference to the one // and only CXTToolsManager object. You can use this function to access // data members for the CXTToolsManager class. static CXTToolsManager& Get(); // Input: iArgPopup - Resource ID of the popup menu to be displayed. // Summary: This member function is called to set the popup menu used by the argument browse // edit control in the toolbar customize dialogs tools page. void SetArgPopupMenu(int iArgPopup); // Returns: An integer value that represents the resource ID. // Summary: This member function retrieves the resource ID of the argument menu // associated with the argument browse edit control in the toolbar customize // dialog tools page. int GetArgPopupMenu() const; // Input: iDirPopup - Resource ID of the popup menu to be displayed. // Summary: This member function is called to set the popup menu used by the directory browse // edit control in the toolbar customize dialogs tools page. void SetDirPopupMenu(int iDirPopup); // Returns: An integer value that represents the resource ID. // Summary: This member function retrieves the resource ID of the directory // menu associated with the argument browse edit control in the toolbar // customize dialog tools page. int GetDirPopupMenu() const; // Input: bNormal - true for normal index, false to return the MDI window index. // Returns: An integer value that represents the zero-based index where the tools // menu is inserted. // Summary: This member function is called to retrieve the location where the // tools menu is currently inserted into the framework's main menu. int GetMenuIndex(bool bNormal); // Returns: A handle to the tools menu. // Summary: This member function is called to retrieve a handle to the tools // menu that is inserted into the framework's main menu. HMENU GetToolsMenu() const; // Returns: A reference to the CXTToolMap object. // Summary: This member function is called to retrieve a reference to the CXTToolMap // object that represents the array of user commands defined for the tools // menu. CXTToolsMap& GetToolsMap(); // Returns: true if the accelerator data has been initialized, otherwise it returns false. // Summary: This member function will check to see if the accelerator data has // been initialized. bool IsInitialized(); // Summary: This member function is called to remove all of the custom user // defined tools. void RemoveAllTools(); // Input: pTool - A pointer to a valid XT_TOOL structure. // Returns: true if successful, otherwise returns false. // Summary: This member function is called to remove the user tool specified by // 'pTool'. bool RemoveTool(XT_TOOL* pTool); // Input: pTool - A pointer to a valid XT_TOOL structure. // Summary: This member function is called to add a user defined tool to the Tools // manager command array. void AddTool(XT_TOOL* pTool); // Input: bUnInitialize - true if the object is to be un-initialized. // Returns: true if successful, otherwise returns false. // Summary: This member function saves the current tool information. bool Save(bool bUnInitialize=false); // Returns: true if successful, otherwise returns false. // Summary: This member function loads saved tool information. bool Load(); // Input: pFrameWnd - A pointer to a valid CFrameWnd object. // pMenuBar - A pointer to a valid CXTMenuBar object. // m_pCoolMenu - A pointer to a valid CXTCoolMenu object. // Returns: true if successful, otherwise returns false. // Summary: This member function is called to initialize the Tools manager. This // function is called by the framework, usually from an overridden LoadFrame // handler. bool Init(CFrameWnd* pFrameWnd,CXTMenuBar* pMenuBar,CXTCoolMenu* m_pCoolMenu); // Input: editListBox - A reference to a valid CXTEditListBox object. // Summary: This member function is called to initialize the tools list that // is displayed in the customize toolbar tools page. void GetToolsList(CXTEditListBox& editListBox); // Input: bEnable - true to enable autosave. // Summary: Call this member function to enable or disable the autosave feature. // Autosave will automatically save the tool's information when this object // is destroyed. void EnableAutoSave(bool bEnable); // Input: bChanged - true if the tools data has changed. // Summary: This member function is called to set the changed flag for the tools manager. void HasChanged(bool bChanged); // Input: bDeleteAll - TRUE to remove all menus including items not belonging to us. // Summary: This member function is called to rebuild the tools menu that is // displayed in the framework's main menu. void BuildToolsMenu(BOOL bDeleteAll); // Returns: A zero-based index value. // Summary: This member function is called to retrieve the index of the HTML // icon stored in the system's image list. int GetHTMLIcon(); // Input: iNormalIndex - Index where the 'Tools' menu should be inserted into the standard menu. // iWindowIndex - Index where the 'Tools' menu should be inserted into the MDI window menu. // Summary: This member function is called to set the index location of where // the Tools manager will insert the tools menu in the framework's main menu. void SetMenuIndex(int iNormalIndex,int iWindowIndex); // Returns: A UINT value that represents the next available command id. // Summary: This member function is called to retrieve the next available command // ID to be used when creating a user defined tool. UINT GetNextCmdID(); // Input: strToolsText - NULL terminated string that represents the new tools title. // Summary: This member function will set the title for the 'Tools' pulldown menu. You can // use this function to set the name to something other than the default 'Tools'. If // you set the title to an existing pulldown menu then the existing menu will be // appended to include the user defined items normally seen in the 'Tools' menu. void SetMenuTitle(CString strToolsText); // Returns: A CString object that represents the current text for the 'Tools' pulldown // menu item. // Summary: This member function returns the current title for the 'Tools' pulldown menu. CString GetMenuTitle() const; // Input: hMenu - Handle to the menu to search. // iMenuItem - Index of the sub menu found, or -1 if no menu was found. // Returns: The handle of the existing tools menu if found, otherwise returns NULL. // Summary: This member function searches the menu specified by 'hMenu' for a submenu that // is titled 'Tools'. HMENU ToolsMenuExists(HMENU hMenu,int& iMenuItem); // Input: hNewMenu - Handle of the menu to modify. // iIndex - Zero based index where to insert the tools submenu. // Returns: true if successful, otherwise returns false. // Summary: This member function will insert the tools menu into the menu specified by 'hNewMenu' // at the index specified by iIndex. bool InsertToolsMenu(HMENU hNewMenu,int iIndex); protected: // Returns: true if successful, otherwise returns false. // Summary: This member function is called by the Tools manager during load // operations. virtual bool OnLoad(); // Input: pToolsArray - A pointer to a valid XT_TOOL structure. // nCount - Size of the 'pToolsArray'. // Returns: true if successful, otherwise returns false. // Summary: This member function is called by the Tools manager during save // operations. virtual bool OnSave(XT_TOOL* pToolsArray,int nCount); friend class CXTToolBar; }; ////////////////////////////////////////////////////////////////////// AFX_INLINE bool CXTToolsManager::IsInitialized() { return m_bInitialized; } AFX_INLINE void CXTToolsManager::EnableAutoSave(bool bEnable) { m_bAutoSave = bEnable; } AFX_INLINE void CXTToolsManager::HasChanged(bool bChanged) { m_bChanged = bChanged; } AFX_INLINE CXTToolsMap& CXTToolsManager::GetToolsMap() { return m_mapTools; } AFX_INLINE HMENU CXTToolsManager::GetToolsMenu() const { return m_hToolsMenu; } AFX_INLINE void CXTToolsManager::SetArgPopupMenu(int iArgPopup) { m_iArgPopup = iArgPopup; } AFX_INLINE int CXTToolsManager::GetArgPopupMenu() const { return m_iArgPopup; } AFX_INLINE void CXTToolsManager::SetDirPopupMenu(int iDirPopup) { m_iDirPopup = iDirPopup; } AFX_INLINE int CXTToolsManager::GetDirPopupMenu() const { return m_iDirPopup; } AFX_INLINE int CXTToolsManager::GetMenuIndex(bool bNormal) { return bNormal ? m_iNormalIndex : m_iWindowIndex; } AFX_INLINE void CXTToolsManager::SetMenuIndex(int iNormalIndex, int iWindowIndex) { m_iNormalIndex = iNormalIndex; m_iWindowIndex = iWindowIndex; } AFX_INLINE void CXTToolsManager::SetMenuTitle(CString strToolsText) { m_strToolsTitle = strToolsText; } ////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // #if !defined(__XTTOOLSMANAGER_H__)