// XTPTipOfTheDay.h interface for the CXTPTipOfTheDay class.
//
// This file is a part of the XTREME CONTROLS MFC class library.
// (c)1998-2011 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(__XTPTIPOFTHEDAY_H__)
#define __XTPTIPOFTHEDAY_H__
//}}AFX_CODEJOCK_PRIVATE

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

class CXTPMarkupContext;
class CXTPMarkupUIElement;
class CXTPImageManagerIcon;

//===========================================================================
// Summary:
//     CXTPTipOfTheDay is a CDialog derived class.
//     CXTPTipOfTheDay is used to create a Visual Studio(tm) style
//     Tip Of The Day dialog. To use, place a file called "tips.txt" in the
//     same directory as your application exe. Place each tip on its own line.
//===========================================================================
class _XTP_EXT_CLASS CXTPTipOfTheDay : public CDialog
{
	DECLARE_DYNAMIC(CXTPTipOfTheDay)

public:
	//-----------------------------------------------------------------------
	// Summary:
	//     Constructs a CXTPTipOfTheDay object
	// Parameters:
	//     lpszTipFile - A NULL terminated string that represents the path and file name
	//                   of where the tips text file is located. By default, the file name
	//                   is set to "tips.txt".
	//     pParent     - Points to the parent window for the Tip Of The Day Dialog.
	//-----------------------------------------------------------------------
	CXTPTipOfTheDay(LPCTSTR lpszTipFile = NULL, CWnd* pParent = NULL);

	//-----------------------------------------------------------------------
	// Summary:
	//     Destroys a CXTPTipOfTheDay object, handles cleanup and deallocation
	//-----------------------------------------------------------------------
	virtual ~CXTPTipOfTheDay();

	//-----------------------------------------------------------------------
	// Summary:
	//     Destroys a CXTPTipOfTheDay object, handles cleanup and deallocation
	//-----------------------------------------------------------------------

public:

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function will set the fonts to be used by the "Did you
	//     know..." and the Tip Of The Day text.
	// Parameters:
	//     pFontTitle - Points to a CFont object that represents the new
	//                  font to be used for the "Did you know..." text.
	//     pFontTip   - Points to a CFont object that represents the new
	//                  font to be used for the Tip Of The Day text.
	//-----------------------------------------------------------------------
	virtual void SetDefaultFonts(CFont* pFontTitle, CFont* pFontTip);

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function will retrieve the next string to be displayed
	//     as the Tip Of The Day.
	// Parameters:
	//     strNext - A CString reference that represents the next
	//     Tip Of The Day text that is to be displayed.
	//-----------------------------------------------------------------------
	virtual void GetNextTipString(CString& strNext);

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function will set the text that is to be displayed
	//     in place of the "Did you know..." string.
	// Parameters:
	//     lpszTitle - Represents a NULL terminated string that is
	//                 the string to be displayed in place of the
	//                 "Did you know..." text.
	//-----------------------------------------------------------------------
	virtual void SetDefaultTitle(LPCTSTR lpszTitle);

	//-----------------------------------------------------------------------
	// Summary:
	//     This member function will set the path to where the tips file is
	//     located.
	// Parameters:
	//     lpszTipFile - A NULL terminated string that represents the full
	//                   path to where the tips text file is located.
	//-----------------------------------------------------------------------
	virtual void SetTipsFilePath(LPCTSTR lpszTipFile);

	//-----------------------------------------------------------------------
	// Summary:
	//     Call this method to add all tips manually.
	// Parameters:
	//     lpszTip - Next tooltip to add.
	//-----------------------------------------------------------------------
	void AddTip(LPCTSTR lpszTip);

	// -----------------------------------------------------------------------
	// Summary:
	//     Call this member function to set the tip text.
	// Parameters:
	//     lpszText :  NULL terminated string that represents the new tip text
	//                 to display.
	//
	// -----------------------------------------------------------------------
	void SetTipText(LPCTSTR lpszText);

	//-------------------------------------------------------------------------
	// Summary:
	//     Call this method to enable markup for tab captions
	// Parameters:
	//     bEnable - TRUE to enable markup
	//-------------------------------------------------------------------------
	void EnableMarkup(BOOL bEnable);

	//-----------------------------------------------------------------------
	// Summary: Call this method to get Markup element that renders the item.
	// Returns: Pointer to Markup element.
	//-----------------------------------------------------------------------
	CXTPMarkupContext* GetMarkupContext() const;

protected:

//{{AFX_CODEJOCK_PRIVATE
	DECLARE_MESSAGE_MAP()

	//{{AFX_VIRTUAL(CXTPTipOfTheDay)
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
	//}}AFX_VIRTUAL

	//{{AFX_MSG(CXTPTipOfTheDay)
	afx_msg void OnPaint();
	virtual BOOL OnInitDialog();
	virtual void OnOK();
	afx_msg void OnDaytipNext();
	//}}AFX_MSG
//}}AFX_CODEJOCK_PRIVATE


public:
//{{AFX_CODEJOCK_PRIVATE
	//{{AFX_DATA(CXTPTipOfTheDay)
	enum { IDD = XTP_IDD_TIPOFTHEDAY };
	CButton m_ok;
	CButton m_showTips;
	CButton m_btnNextTip;
	CStatic m_staticBorder;
	BOOL    m_bStartup;
	//}}AFX_DATA
//}}AFX_CODEJOCK_PRIVATE

	BOOL m_bClassicStyle;   // Classic Style

protected:
	FILE*   m_pStream;      // A pointer to the open file stream.
	CRect   m_rcBorder;     // Size of the total display area.
	CRect   m_rcTipText;    // Size of the display area for tip text.
	CFont   m_fontTitle;    // Default font used for "Did you know..." text.
	CFont   m_fontTip;      // Default font used for tips.
	CFont*  m_pFontTitle;   // User defined font for "Did you know..." text.
	CFont*  m_pFontTip;     // User defined font for tips.
	CString m_strTipTitle;  // Represents the "Did you know" text.
	CString m_strTipText;   // Represents the Tip Of The Day text.
	CString m_strTipFile;   // Represents the file name and path for the tips file.
	CXTPImageManagerIcon* m_pLightBulbIcon; // Bulb bitmap.

	CXTPMarkupContext* m_pMarkupContext;  // Markup Context.
	CXTPMarkupUIElement* m_pMarkupTipText;  // Markup element.

	CStringArray m_arrTips;  // Array of tips to display.
	UINT m_nNextTip;  // Index of next tip to display.
};

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

AFX_INLINE void CXTPTipOfTheDay::SetDefaultTitle(LPCTSTR lpszTitle) {
	m_strTipTitle = lpszTitle;
}
AFX_INLINE void CXTPTipOfTheDay::AddTip(LPCTSTR lpszTip) {
	m_arrTips.Add(lpszTip);
}
AFX_INLINE CXTPMarkupContext* CXTPTipOfTheDay::GetMarkupContext() const {
	return m_pMarkupContext;
}

#endif // #if !defined(__XTPTIPOFTHEDAY_H__)
