//////////////////////////////////////////////////////////////////////////////////////// // // Nestopia - NES/Famicom emulator written in C++ // // Copyright (C) 2003-2008 Martin Freij // // This file is part of Nestopia. // // Nestopia is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // Nestopia is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nestopia; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // //////////////////////////////////////////////////////////////////////////////////////// #ifndef NST_WINDOW_MAIN_H #define NST_WINDOW_MAIN_H #pragma once #include "NstWindowDynamic.hpp" #include "NstManagerVideo.hpp" #include "NstManagerSound.hpp" #include "NstManagerInput.hpp" #include "NstManagerFrameClock.hpp" namespace Nestopia { namespace Window { class Main : Managers::Manager { public: Main ( Managers::Emulator&, const Configuration&, Menu&, const Managers::Paths&, const Managers::Preferences&, int ); ~Main(); int Run(); void Save(Configuration&) const; uint GetMaxMessageLength() const; private: struct MainWindow : Dynamic { MainWindow(const Configuration&,const Menu&); enum { CLASS_STYLE = ( CS_HREDRAW | CS_VREDRAW ), WIN_STYLE = ( WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CLIPCHILDREN ), WIN_EXSTYLE = ( WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE ) }; bool menu; bool maximized; Rect rect; static const wchar_t name[]; }; inline bool Fullscreen() const; inline bool Windowed() const; bool CanRunInBackground() const; bool ToggleMenu() const; bool OnStartEmulation(); void OnStopEmulation(); void OnReturnInputScreen(Rect&); void OnReturnOutputScreen(Rect&); ibool OnSysKeyDown (Param&); ibool OnCommand (Param&); ibool OnEnable (Param&); ibool OnEnterSizeMoveMenu (Param&); ibool OnActivate (Param&); ibool OnSysCommand (Param&); ibool OnNclButton (Param&); ibool OnNcrButton (Param&); ibool OnPowerBroadCast (Param&); ibool OnCommandResume (Param&); void OnCmdViewSwitchScreen (uint); void OnCmdViewShowOnTop (uint); void OnCmdViewShowMenu (uint); void OnEmuEvent(Managers::Emulator::Event,Managers::Emulator::Data); void OnAppEvent(Application::Instance::Event,const void*); const Managers::Preferences& preferences; MainWindow window; Managers::Video video; Managers::Sound sound; Managers::Input input; Managers::FrameClock frameClock; public: Custom& Get() { return window; } const Custom& Get() const { return window; } }; } } #endif