// XTPGlobal.h interface for the CXTPAuxData struct.
//
// This file is a part of the XTREME CONTROLS MFC class library.
// (c)1998-2012 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////

//{{AFX_CODEJOCK_PRIVATE
#if !defined(__XTGLOBALS_H__)
#define __XTGLOBALS_H__
//}}AFX_CODEJOCK_PRIVATE

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

// ----------------------------------------------------------------------
// Summary:
//     CXTPTcbItem class is used to maintain information for a
//     particular tab item in a CXTPExcelTabCtrl, CXTPTabCtrl and CXTPTabView object.
// See Also:
//     CXTPExcelTabCtrl, CXTPTabCtrl and CXTPTabView
// ----------------------------------------------------------------------
class _XTP_EXT_CLASS CXTPTcbItem
{
public:
	//-------------------------------------------------------------------------
	// Summary:
	//     Constructs an CXTPTcbItem object
	//-------------------------------------------------------------------------
	CXTPTcbItem();

	UINT     uiToolTipId;       // Resource ID for the tooltip.
	CWnd*    pWnd;              // A CWnd pointer to the window associated with a tab.
	CString  szTabLabel;        // User specified label for the tab.
	CString  szToolTipLabel;    // Tooltip text for the tab.
	CString  szCondensedLabel;  // The label actually being displayed for auto-condensing tabs.
	DWORD    dwStyle;           // Stores the window style when the tab item was created.
	DWORD    dwExStyle;         // Stores the extended window style when the tab item was created.
	COLORREF crTabBack;         // Application defined tab background color.
	COLORREF crTabText;         // Application defined tab text color.
	COLORREF crTabSelBack;      // Application defined selected tab background color.
	COLORREF crTabSelText;      // Application defined selected tab text color.
};

//=============================================================================
// Summary:
//     CXTPNonClientMetrics is a self initializing NONCLIENTMETRICS derived
//     class. It contains the scalable metrics associated with the
//     non-client area of a non-minimized window.  This class is used by
//     the SPI_GETNONCLIENTMETRICS and SPI_SETNONCLIENTMETRICS actions of
//     SystemParametersInfo.
// Example:
//     The following example demonstrates using CXTPNonClientMetrics.
// <code>
// CXTPLogFont lfMenuFont;
// CXTPNonClientMetrics ncm;
//
// lfMenuFont.lfCharSet = (BYTE)::GetTextCharsetInfo (dc, NULL, 0);
// lfMenuFont.lfHeight  = ncm.lfMenuFont.lfHeight;
// lfMenuFont.lfWeight  = ncm.lfMenuFont.lfWeight;
// lfMenuFont.lfItalic  = ncm.lfMenuFont.lfItalic;
//
// STRCPY_S(lfMenuFont.lfFaceName, LF_FACESIZE, ncm.lfMenuFont.lfFaceName);
// </code>
//=============================================================================
class _XTP_EXT_CLASS CXTPNonClientMetrics : public NONCLIENTMETRICS
{
public:
	//-------------------------------------------------------------------------
	// Summary:
	//     Constructs an CXTPNonClientMetrics object
	//-------------------------------------------------------------------------
	CXTPNonClientMetrics();
};

//=============================================================================
// Summary:
//     CXTPLogFont is a self initializing LOGFONT derived class. It
//     will allow you to create or copy a LOGFONT object, and defines the
//     attributes of a font.
//=============================================================================
class _XTP_EXT_CLASS CXTPLogFont : public LOGFONT
{
public:
	//-------------------------------------------------------------------------
	// Summary:
	//     Constructs an CXTPLogFont object.
	//     The copy constructor will construct an CXTPLogFont object and copy
	//     the data specified by 'logfont' into the structure's data members.
	// Parameters:
	//     logfont - Valid address of a LOGFONT structure.
	//-------------------------------------------------------------------------
	CXTPLogFont();
	CXTPLogFont(LOGFONT& logfont); //<combine CXTPLogFont::CXTPLogFont>

public:
	//-------------------------------------------------------------------------
	// Summary:
	//     This overloaded operator will copy the data specified by 'logfont'
	//     into the structure's data members.
	// Parameters:
	//     logfont - Valid address of a LOGFONT structure.
	//-------------------------------------------------------------------------
	void operator=(LOGFONT& logfont);

public:
	DWORD dwType;  // Used to hold the font type, i.e. TT_FONT, DEVICE_FONT.
};

class CXTPAuxData;

//---------------------------------------------------------------------------
// Summary:
//     The XTPAuxData function is used for access to the
//     CXTPAuxData class.
// Remarks:
//     Call this function to access CXTPAuxData members. Since
//     this class is designed as a single instance object you can only
//     access its members through this method. You cannot directly
//     instantiate an object of type CXTPAuxData.
// Returns:
//     A pointer to the one and only CXTPAuxData instance.
// Example:
//     The following example demonstrates the use of XTPAuxData.
// <code>
// bool bIsWinNT = XTPAuxData().bWinNT;
// </code>
// See Also:
//     CXTPAuxData
//---------------------------------------------------------------------------
_XTP_EXT_CLASS CXTPAuxData& AFXAPI XTPAuxData();

// ---------------------------------------------------------------------
// Summary:
//     CXTPAuxData is a stand alone global item data structure
//     class. It is used by the toolkit to initialize and store resource
//     and item data shared by all objects. Items include system colors,
//     icons, fonts and OS flags.
// ---------------------------------------------------------------------
class _XTP_EXT_CLASS CXTPAuxData
{
private:
	// ------------------------------------------
	// Summary:
	//     Constructs an CXTPAuxData object
	// ------------------------------------------
	CXTPAuxData();

public:
	// -------------------------------------------------------------
	// Summary:
	//     Destroys an CXTPAuxData object, handles cleanup and
	//     deallocation
	// -------------------------------------------------------------
	virtual ~CXTPAuxData();

public:
	// ------------------------------------------------
	// Summary:
	//     Initializes cursors used by the library.
	// Returns:
	//     TRUE if successful, otherwise returns FALSE.
	// ------------------------------------------------
	BOOL LoadSysCursors();

	// ------------------------------------------------------------------------------
	// Summary:
	//     Initializes fonts used by the library.
	// Parameters:
	//     lpszHorzFaceName -  [in] Points to a NULL terminated font name that is used
	//                         to create the horizontal fonts used by the library.
	//     lpszVertFaceName -  [in] Points to a NULL terminated font name that is used
	//                         to create the vertical fonts used by the library.
	// Remarks:
	//     Call this member function to update all of the fonts used by the
	//     library.
	// Returns:
	//     TRUE if successful, otherwise returns FALSE if a font fails to
	//     load.
	// ------------------------------------------------------------------------------
	BOOL LoadSysFonts(LPCTSTR lpszHorzFaceName = NULL, LPCTSTR lpszVertFaceName = NULL);

	//-------------------------------------------------------------------------
	// Summary:
	//     This member function frees font resources.
	//-------------------------------------------------------------------------
	void FreeSysFonts();

	// -------------------------------------------------------------------
	// Summary:
	//     This member function updates system colors used by the library.
	// -------------------------------------------------------------------
	void UpdateSysColors();

	// --------------------------------------------------------------------
	// Summary:
	//     This member function updates system metrics used by the library.
	// --------------------------------------------------------------------
	void UpdateSysMetrics();

	//-------------------------------------------------------------------------
	// Summary:
	//     This member function is called to retrieve the version information
	//     for the common control dll (comctl32.dll).
	// Returns:
	//     A DWORD value.
	//-------------------------------------------------------------------------
	DWORD GetComCtlVersion();

	//-------------------------------------------------------------------------
	// Summary:
	//     This member function is called to check the current version of
	//     the common control dll (comctl32.dll).
	// Returns:
	//     Returns TRUE if the version is 4.72 or higher, otherwise FALSE.
	//-------------------------------------------------------------------------
	BOOL IsComCtlValid() const;

	//-------------------------------------------------------------------------
	// Summary:
	//     This member function is called by the library to initialize resources.
	// Parameters:
	//     hInst - Instance handle for resources.
	//-------------------------------------------------------------------------
	void InitResources(HINSTANCE hInst);

	// ---------------------------------------------------------------------
	// Summary:
	//     Enables or Disables Tahoma font usage for the library.
	// Parameters:
	//     bOfficeFont -  [in] True to use the "Tahoma" font if found on the
	//                    operating system.
	// Remarks:
	//     Call this member function to use the Office font (Tahoma) if it
	//     exists on the operating system.
	// ---------------------------------------------------------------------
	void UseOfficeFont(BOOL bOfficeFont);

	// --------------------------------------------------------------------------------------
	// Summary:
	//     Determines if a font is installed.
	// Parameters:
	//     lpszFaceName -  [in] NULL terminated string that represents the font
	//                    name to search for.
	// Remarks:
	//     Call this member function to determine if the font specified by <i>strFaceName</i>
	//     has been installed on the operating system.
	// Returns:
	//     TRUE if the font is installed, otherwise FALSE.
	// --------------------------------------------------------------------------------------
	BOOL FontExists(LPCTSTR lpszFaceName);

	// -------------------------------------------------------------------------
	// Summary:
	//     Initializes fonts used by the library.
	// Parameters:
	//     lf -             [in] Reference to a CXTPLogFont or LOGFONT structure.
	//     font -           [in] Reference to a CFont object.
	//     lfWeight -       [in] Optional, specifies font weight.
	//     lfUnderline -    [in] Optional, specifies font underline.
	//     lfOrientation -  [in] Optional, specifies font orientation.
	//     lfEscapement -   [in] Optional, specifies font escapement.
	// Remarks:
	//     Call this member function to create a CFont object from an
	//     existing CXTPLogFont or LOGFONT structure. You can specify
	//     additional values to set that will override what is specified in
	//     the LOGFONT structure passed in.
	// Returns:
	//     TRUE if the font was successfully created, otherwise FALSE.
	// -------------------------------------------------------------------------
	BOOL CreateSysFont(const CXTPLogFont& lf, CFont& font, long lfWeight = -1, char lfUnderline = -1, long lfOrientation = -1, long lfEscapement = -1);

	// ----------------------------------------------------------------------------------
	// Summary:
	//     Initializes fonts used by the library.
	// Parameters:
	//     pHorzFont -         [in] Points to a valid CFont object that is used to define
	//                         the fonts the library will use.
	//     pVertFont -         [in] Points to a valid CFont object that is used to define
	//                         the vertical fonts used by the library. If NULL, 'pFont'
	//                         will be used.
	//     lpszFaceName -      [in] Points to a NULL terminated font name that is used to
	//                         create the horizontal fonts used by the library.
	//     lpszVertFaceName -  [in] Points to a NULL terminated font name that is used to
	//                         create the vertical fonts used by the library.
	// Remarks:
	//     Call this member function to update fonts used by the library.
	//     This function will not update the fonts used for Icon Title,
	//     Marlett Icon or Small Captions. To change these fonts as well use
	//     the CreateSysFont method.
	// Returns:
	//     TRUE if successful, otherwise returns FALSE if a font fails to
	//     load.
	// ----------------------------------------------------------------------------------
	BOOL SetGlobalFont(CFont* pHorzFont, CFont* pVertFont = NULL);
	BOOL SetGlobalFont(LPCTSTR lpszFaceName, LPCTSTR lpszVertFaceName = NULL); //<combine CXTPAuxData::SetGlobalFont@CFont*@CFont*>

	// ---------------------------------------------------------------------
	// Summary:
	//     Retrieves the library version.
	// Parameters:
	//     bVerNumOnly -  [in] true to return the version number only, minus
	//                    "Xtreme Toolkit v".
	// Remarks:
	//     Call this member function to retrieve a CString object that
	//     represents the current version of the Xtreme Toolkit. The string
	//     returned is formatted like so: "Xtreme Toolkit v1.94".
	// Returns:
	//     A NULL terminated string that indicates the version of the Xtreme
	//     Toolkit.
	// ---------------------------------------------------------------------
	CString XTPGetVersion(bool bVerNumOnly = false);


private:
	static int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX* pelf,
		NEWTEXTMETRICEX*, int, LPVOID pThis);
	DISABLE_COPY_OPERATOR(CXTPAuxData)

public:
	//=======================================================================
	//## (RGB) System colors used by Xtreme Toolkit
	//=======================================================================

	COLORREF clr3DFace;                   // An RGB value that represents the face color for three dimensional display elements.
	COLORREF clr3DShadow;                 // An RGB value that represents the shadow color for three dimensional display elements.
	COLORREF clr3DDkShadow;               // An RGB value that represents the dark shadow for three dimensional display elements.
	COLORREF clr3DHilight;                // An RGB value that represents the highlight color for three dimensional display elements.
	COLORREF clr3DLight;                  // An RGB value that represents the light color for three dimensional display elements.
	COLORREF clrBtnText;                  // An RGB value that represents the text color on push buttons.
	COLORREF clrGrayText;                 // An RGB value that represents the grayed (disabled) text.
	COLORREF clrHighlight;                // An RGB value that represents the item(s) selected in a control.
	COLORREF clrHighlightText;            // An RGB value that represents the text color of item(s) selected in a control.
	COLORREF clrMenu;                     // An RGB value that represents the menu background.
	COLORREF clrMenuText;                 // An RGB value that represents the text color in menus.
	COLORREF clrWindow;                   // An RGB value that represents the window background.
	COLORREF clrWindowFrame;              // An RGB value that represents the window frame.
	COLORREF clrWindowText;               // An RGB value that represents the text color in windows.
	COLORREF clrActiveCaption;            // An RGB value that represents the active window title bar.
	COLORREF clrInActiveCaption;          // An RGB value that represents the inactive window title bar.
	COLORREF clrGradActiveCapt;           // An RGB value that represents the gradient active title bar.
	COLORREF clrGradInActiveCapt;         // An RGB value that represents the gradient inactive title bar.
	COLORREF clrActiveCaptText;           // An RGB value that represents the active caption text.
	COLORREF clrInactiveCaptText;         // An RGB value that represents the inactive caption text.
	COLORREF clrXPBarFace;                // An RGB value that represents the XP toolbar background color.
	COLORREF clrXPHighlight;              // An RGB value that represents the XP menu item selected color.
	COLORREF clrXPHighlightBorder;        // An RGB value that represents the XP menu item selected border color.
	COLORREF clrXPHighlightPushed;        // An RGB value that represents the XP menu item pushed color.
	COLORREF clrXPIconShadow;             // An RGB value that represents the XP menu item icon shadow.
	COLORREF clrXPGrayText;               // An RGB value that represents the XP menu item disabled text color.
	COLORREF clrXPHighlightChecked;       // An RGB value that represents the XP menu item checked color.
	COLORREF clrXPHighlightCheckedBorder; // An RGB value that represents the XP menu item checked border color.
	COLORREF clrXPGripper;                // An RGB value that represents the XP toolbar gripper color.
	COLORREF clrXPSeparator;              // An RGB value that represents the XP toolbar separator color.
	COLORREF clrXPDisabled;               // An RGB value that represents the XP menu icon disabled color.
	COLORREF clrXPMenuTextBack;           // An RGB value that represents the XP menu item text background color.
	COLORREF clrXPMenuExpanded;           // An RGB value that represents the XP hidden menu commands background color.
	COLORREF clrXPMenuBorder;             // An RGB value that represents the XP menu border color.
	COLORREF clrXPMenuText;               // An RGB value that represents the XP menu item text color.
	COLORREF clrXPHighlightText;          // An RGB value that represents the XP menu item selected text color.
	COLORREF clrXPBarText;                // An RGB value that represents the XP toolbar text color.
	COLORREF clrXPBarTextPushed;          // An RGB value that represents the XP toolbar pushed text color.
	COLORREF clrXPTabInactiveBack;        // An RGB value that represents the XP inactive tab background color.
	COLORREF clrXPTabInactiveText;        // An RGB value that represents the XP inactive tab text color.

	//=======================================================================
	//## Cursors used by Xtreme Toolkit
	//=======================================================================

	HCURSOR hcurDragCopy;  // Drag copy cursor handle.
	HCURSOR hcurDragMove;  // Drag move cursor handle.
	HCURSOR hcurDragNone;  // Drag none cursor handle.
	HCURSOR hcurHand;      // Hand cursor handle.
	HCURSOR hcurHSplitBar; // Horizontal Splitter cursor handle.
	HCURSOR hcurVSplitBar; // Vertical Splitter cursor handle.
	HCURSOR hcurMove;      // 4 way move cursor handle.

	//=======================================================================
	//## System metrics
	//=======================================================================

	int cxSmIcon;   // cx small icon size (width).
	int cySmIcon;   // cy small icon size (height).
	int cxSize;     // Width, in pixels, of a button in a window's caption or title bar.
	int cySize;     // Height, in pixels, of a button in a window's caption or title bar.
	int cxHThumb;   // Width, in pixels, of the thumb box in a horizontal scroll bar.
	int cyVThumb;   // Height, in pixels, of the thumb box in a vertical scroll bar.
	int cyMenuItem; // Height, in pixels, of single-line menu bar.

	//=======================================================================
	//## Fonts used by Xtreme Toolkit
	//=======================================================================

	CFont font;              // Menu font.
	CFont fontBold;          // Menu bold font.
	CFont fontULine;         // Menu underlined font.
	CFont fontVert;          // Vertical menu font.
	CFont fontVertBold;      // Vertical menu bold font.
	CFont fontIconTitle;     // Icon title font.
	CFont fontIconTitleBold; // Icon title bold font.
	CFont fontMarlettIcon;   // Marlett icon font.
	CFont fontStatus;        // Status bar font.
	CFont fontSmCaption;     // Small caption font.

	//=======================================================================
	//## Flags used by Xtreme Toolkit
	//=======================================================================

	BOOL bWin95;           // TRUE if Windows 95.
	BOOL bWin98;           // TRUE if Windows 98.
	BOOL bWinNT;           // TRUE if Windows NT.
	BOOL bWin2K;           // TRUE if Windows 2000.
	BOOL bWinXP;           // TRUE if Windows XP.
	BOOL bUseOfficeFont;   // TRUE to use the Tahoma font if found, good for Office style applications by default.
	BOOL bUseSolidShadows; // TRUE to use solid shadows for operating systems that do not supported layered windows.
	BOOL bMenuShadows;     // TRUE to use shadows under the menus.

	//=======================================================================
	//## Miscellaneous settings
	//=======================================================================

	int       iComCtlVersion;  // Common control dll (comctl32.dll) version information.

	friend _XTP_EXT_CLASS CXTPAuxData& AFXAPI XTPAuxData();
};

//////////////////////////////////////////////////////////////////////

#endif // #if !defined(__XTGLOBALS_H__)