/****************************************************************************
*                                                                           *
* Project 64 - A Nintendo 64 emulator.                                      *
* http://www.pj64-emu.com/                                                  *
* Copyright (C) 2012 Project64. All rights reserved.                        *
*                                                                           *
* License:                                                                  *
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html                        *
*                                                                           *
****************************************************************************/
#pragma once

#include "../Settings/Notification Settings.h"

class CSettings;

class CNotification :
	CNotificationSettings
{
public:
         CNotification    ( void );
	
	// Make sure we are not in full screen
	void WindowMode       ( void ) const;

	//Error Messages
    void DisplayError     ( const wchar_t * Message, ... ) const;
	void DisplayError     ( const wchar_t * Message, va_list ap ) const;
    void DisplayError     ( LanguageStringID StringID ) const { std::wstring str = g_Lang->GetString(StringID); DisplayError(str.c_str()); }
	void FatalError       ( const wchar_t * Message, ... ) const;
	void FatalError       ( const wchar_t * Message, va_list ap ) const;
	void FatalError       ( LanguageStringID StringID ) const { std::wstring str = g_Lang->GetString(StringID); FatalError(str.c_str()); }
	
	//User Feedback
    void DisplayMessage   ( int DisplayTime, const wchar_t * Message, ... ) const;
	void DisplayMessage   ( int DisplayTime, const wchar_t * Message, va_list ap ) const;
	void DisplayMessage   ( int DisplayTime, LanguageStringID StringID ) const 
	{ 
		std::wstring str = g_Lang->GetString(StringID); 
		DisplayMessage(DisplayTime,L"%s",str.c_str()); 
	}
	void DisplayMessage2  ( const wchar_t * Message, ... ) const;
	void DisplayMessage2  ( const wchar_t * Message, va_list ap ) const;
	void SetWindowCaption ( const wchar_t * Caption );
	
	//Remember roms loaded and Rom Dir selected
	void AddRecentDir     ( const char * RomDir );
	void AddRecentRom     ( const char * ImagePath );

	//Gui for responses
	void SetMainWindow      ( CMainGui * Gui );
	void RefreshMenu        ( void );
	void HideRomBrowser     ( void );
	void ShowRomBrowser     ( void );
	void MakeWindowOnTop    ( bool OnTop );
	void BringToTop         ( void );
	void BreakPoint         ( const wchar_t * FileName, const int LineNumber);
	bool ProcessGuiMessages ( void ) const;
	void ChangeFullScreen   ( void ) const;
	void SetGfxPlugin       ( CGfxPlugin * Plugin );

private:
	CNotification(const CNotification&);				// Disable copy constructor
	CNotification& operator=(const CNotification&);		// Disable assignment

	CMainGui   * m_hWnd;
	CGfxPlugin * m_gfxPlugin;

	mutable time_t m_NextMsg;
};

CNotification  & Notify ( void );
