/**************************************************************************** * * * 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 class CGfxPlugin; //Plugin that controls the rendering class CAudioPlugin; //Plugin for audio, need the hwnd class CControl_Plugin; //Controller needs hwnd to see if it is the focused window class CBaseMenu; //Menu for the gui class CN64System; class CNotification; class CriticalSection; enum { WM_HIDE_CUROSR = WM_USER + 10, WM_MAKE_FOCUS = WM_USER + 17, WM_RESET_PLUGIN = WM_USER + 18, WM_BORWSER_TOP = WM_USER + 40, }; class CMainGui : public CRomBrowser, private CGuiSettings { enum { StatusBarID = 400 }; enum { Timer_SetWindowPos = 1 }; typedef struct { CN64System * system; CPlugins * plugins; HANDLE hEvent; bool res; } RESET_PLUGIN; public: CMainGui ( bool bMainWindow, const char * WindowTitle = "" ); ~CMainGui ( void ); //Message Processing int ProcessAllMessages ( void ); bool ProcessGuiMessages ( void ); //debugging functions void EnterLogOptions ( void ); //Get Information about the window int Height ( void ); //Get the Height of the window int Width ( void ); //Get the Width of the window //Manipulate the state of the window void SetPos ( int X, int Y ); //Move the window to this screen location void Show ( bool ShowWindow ); //Show or Hide the current window void MakeWindowOnTop ( bool OnTop ); void BringToTop ( void ); void Caption ( LPCWSTR Caption ); //Set the caption of the window void SaveWindowLoc ( void ); //Menu Function void SetWindowMenu ( CBaseMenu * Menu ); void RefreshMenu ( void ); CBaseMenu * GetMenuClass ( void ) { return m_Menu; } // Status bar void SetStatusText ( int Panel,const wchar_t * Text ); void ShowStatusBar ( bool ShowBar ); //About Window void AboutIniBox ( void ); void AboutBox ( void ); //Plugins bool ResetPlugins ( CPlugins * plugins, CN64System * System ); //Get Window Handle inline HWND GetHandle ( void ) const { return m_hMainWindow; } private: CMainGui(void); // Disable default constructor CMainGui(const CMainGui&); // Disable copy constructor CMainGui& operator=(const CMainGui&); // Disable assignment friend CGfxPlugin; friend CAudioPlugin; friend CControl_Plugin; bool RegisterWinClass ( void ); void ChangeWinSize ( long width, long height ); void Create ( const char * WindowTitle ); void CreateStatusBar ( void ); void Resize ( DWORD fwSizeType, WORD nWidth, WORD nHeight ); //responding to WM_SIZE friend DWORD CALLBACK AboutBoxProc ( HWND, DWORD, DWORD, DWORD ); friend DWORD CALLBACK AboutIniBoxProc ( HWND, DWORD, DWORD, DWORD ); static DWORD CALLBACK MainGui_Proc ( HWND, DWORD, DWORD, DWORD ); friend void RomBowserEnabledChanged (CMainGui * Gui); friend void RomBowserColoumnsChanged (CMainGui * Gui); friend void RomBrowserRecursiveChanged (CMainGui * Gui); CBaseMenu * m_Menu; HWND m_hMainWindow, m_hStatusWnd; DWORD m_ThreadId; const bool m_bMainWindow; bool m_Created; bool m_AttachingMenu; bool m_MakingVisible; bool m_ResetPlugins; RESET_PLUGIN * m_ResetInfo; CriticalSection m_CS; bool m_SaveMainWindowPos; LONG m_SaveMainWindowTop; LONG m_SaveMainWindowLeft; bool m_SaveRomBrowserPos; LONG m_SaveRomBrowserTop; LONG m_SaveRomBrowserLeft; };