rlm@1: // -*- C++ -*- rlm@1: // VisualBoyAdvance - Nintendo Gameboy/GameboyAdvance (TM) emulator. rlm@1: // Copyright (C) 1999-2003 Forgotten rlm@1: // Copyright (C) 2004 Forgotten and the VBA development team rlm@1: rlm@1: // This program is free software; you can redistribute it and/or modify rlm@1: // it under the terms of the GNU General Public License as published by rlm@1: // the Free Software Foundation; either version 2, or(at your option) rlm@1: // any later version. rlm@1: // rlm@1: // This program is distributed in the hope that it will be useful, rlm@1: // but WITHOUT ANY WARRANTY; without even the implied warranty of rlm@1: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the rlm@1: // GNU General Public License for more details. rlm@1: // rlm@1: // You should have received a copy of the GNU General Public License rlm@1: // along with this program; if not, write to the Free Software Foundation, rlm@1: // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. rlm@1: rlm@1: #ifndef __VBA_WINDOW_H__ rlm@1: #define __VBA_WINDOW_H__ rlm@1: rlm@1: #include rlm@1: #include rlm@1: rlm@1: #include rlm@1: #include rlm@1: rlm@1: #ifndef GTKMM20 rlm@1: # include "sigccompat.h" rlm@1: #endif // ! GTKMM20 rlm@1: rlm@1: #include rlm@1: #include rlm@1: #include rlm@1: rlm@1: #include "../common/System.h" rlm@1: rlm@1: #include "configfile.h" rlm@1: #include "screenarea.h" rlm@1: #include "filters.h" rlm@1: #include "input.h" rlm@1: #include "joypadconfig.h" rlm@1: rlm@1: namespace VBA rlm@1: { rlm@1: rlm@1: class Window : public Gtk::Window rlm@1: { rlm@1: friend class Gnome::Glade::Xml; rlm@1: rlm@1: public: rlm@1: virtual ~Window(); rlm@1: rlm@1: inline static Window * poGetInstance() { return m_poInstance; } rlm@1: rlm@1: enum ECartridge rlm@1: { rlm@1: CartridgeNone, rlm@1: CartridgeGB, rlm@1: CartridgeGBA rlm@1: }; rlm@1: rlm@1: // GB/GBA screen sizes rlm@1: const int m_iGBScreenWidth; rlm@1: const int m_iGBScreenHeight; rlm@1: const int m_iSGBScreenWidth; rlm@1: const int m_iSGBScreenHeight; rlm@1: const int m_iGBAScreenWidth; rlm@1: const int m_iGBAScreenHeight; rlm@1: rlm@1: bool bLoadROM(const std::string & _rsFile); rlm@1: void vPopupError(const char * _csFormat, ...); rlm@1: void vPopupErrorV(const char * _csFormat, va_list _args); rlm@1: void vDrawScreen(); rlm@1: void vComputeFrameskip(int _iRate); rlm@1: void vShowSpeed(int _iSpeed); rlm@1: void vCaptureScreen(int _iNum); rlm@1: u32 uiReadJoypad(); rlm@1: rlm@1: inline ECartridge eGetCartridge() const { return m_eCartridge; } rlm@1: inline int iGetThrottle() const { return m_iThrottle; } rlm@1: rlm@1: protected: rlm@1: Window(GtkWindow * _pstWindow, rlm@1: const Glib::RefPtr & _poXml); rlm@1: rlm@1: enum EShowSpeed rlm@1: { rlm@1: ShowNone, rlm@1: ShowPercentage, rlm@1: ShowDetailed rlm@1: }; rlm@1: rlm@1: enum ESaveType rlm@1: { rlm@1: SaveAuto, rlm@1: SaveEEPROM, rlm@1: SaveSRAM, rlm@1: SaveFlash, rlm@1: SaveEEPROMSensor, rlm@1: SaveNone rlm@1: }; rlm@1: rlm@1: enum ESoundStatus rlm@1: { rlm@1: SoundOff, rlm@1: SoundMute, rlm@1: SoundOn rlm@1: }; rlm@1: rlm@1: enum ESoundQuality rlm@1: { rlm@1: Sound44K = 1, rlm@1: Sound22K = 2, rlm@1: Sound11K = 4 rlm@1: }; rlm@1: rlm@1: enum ESoundVolume rlm@1: { rlm@1: Sound100, rlm@1: Sound200, rlm@1: Sound300, rlm@1: Sound400, rlm@1: Sound25, rlm@1: Sound50 rlm@1: }; rlm@1: rlm@1: enum EEmulatorType rlm@1: { rlm@1: EmulatorAuto, rlm@1: EmulatorCGB, rlm@1: EmulatorSGB, rlm@1: EmulatorGB, rlm@1: EmulatorGBA, rlm@1: EmulatorSGB2 rlm@1: }; rlm@1: rlm@1: virtual void vOnFileOpen(); rlm@1: virtual void vOnFileLoad(); rlm@1: virtual void vOnFileSave(); rlm@1: virtual void vOnLoadGameMostRecent(); rlm@1: virtual void vOnLoadGameAutoToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnLoadGame(int _iSlot); rlm@1: virtual void vOnSaveGameOldest(); rlm@1: virtual void vOnSaveGame(int _iSlot); rlm@1: virtual void vOnFilePauseToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnFileReset(); rlm@1: virtual void vOnRecentReset(); rlm@1: virtual void vOnRecentFreezeToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnRecentFile(std::string _sFile); rlm@1: virtual void vOnImportBatteryFile(); rlm@1: virtual void vOnExportBatteryFile(); rlm@1: virtual void vOnFileScreenCapture(); rlm@1: virtual void vOnFileClose(); rlm@1: virtual void vOnFileExit(); rlm@1: virtual void vOnFrameskipToggled(Gtk::CheckMenuItem * _poCMI, int _iValue); rlm@1: virtual void vOnThrottleToggled(Gtk::CheckMenuItem * _poCMI, int _iPercent); rlm@1: virtual void vOnThrottleOther(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnVideoScaleToggled(Gtk::CheckMenuItem * _poCMI, int _iScale); rlm@1: virtual void vOnLayerToggled(Gtk::CheckMenuItem * _poCMI, int _iLayer); rlm@1: virtual void vOnDirectories(); rlm@1: virtual void vOnDirectoryReset(Gtk::Entry * _poEntry); rlm@1: virtual void vOnDirectorySelect(Gtk::Entry * _poEntry); rlm@1: virtual void vOnPauseWhenInactiveToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnSelectBios(); rlm@1: virtual void vOnUseBiosToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnShowSpeedToggled(Gtk::CheckMenuItem * _poCMI, int _iShowSpeed); rlm@1: virtual void vOnSaveTypeToggled(Gtk::CheckMenuItem * _poCMI, int _iSaveType); rlm@1: virtual void vOnFlashSizeToggled(Gtk::CheckMenuItem * _poCMI, int _iFlashSize); rlm@1: virtual void vOnScreenshotFormatToggled(Gtk::CheckMenuItem * _poCMI, std::string _sFormat); rlm@1: virtual void vOnSoundStatusToggled(Gtk::CheckMenuItem * _poCMI, int _iSoundStatus); rlm@1: virtual void vOnSoundEchoToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnSoundLowPassToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnSoundReverseToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnSoundChannelToggled(Gtk::CheckMenuItem * _poCMI, int _iSoundChannel); rlm@1: virtual void vOnSoundQualityToggled(Gtk::CheckMenuItem * _poCMI, int _iSoundQuality); rlm@1: virtual void vOnSoundVolumeToggled(Gtk::CheckMenuItem * _poCMI, int _iSoundVolume); rlm@1: virtual void vOnGBBorderToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnGBPrinterToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: virtual void vOnEmulatorTypeToggled(Gtk::CheckMenuItem * _poCMI, int _iEmulatorType); rlm@1: virtual void vOnFilter2xToggled(Gtk::CheckMenuItem * _poCMI, int _iFilter2x); rlm@1: virtual void vOnFilterIBToggled(Gtk::CheckMenuItem * _poCMI, int _iFilterIB); rlm@1: #ifdef MMX rlm@1: virtual void vOnDisableMMXToggled(Gtk::CheckMenuItem * _poCMI); rlm@1: #endif // MMX rlm@1: virtual void vOnJoypadConfigure(int _iJoypad); rlm@1: virtual void vOnJoypadToggled(Gtk::CheckMenuItem * _poCMI, int _iJoypad); rlm@1: virtual void vOnAutofireToggled(Gtk::CheckMenuItem * _poCMI, u32 _uiKeyFlag); rlm@1: virtual void vOnGDBWait(); rlm@1: virtual void vOnGDBLoadAndWait(); rlm@1: virtual void vOnGDBBreak(); rlm@1: virtual void vOnGDBDisconnect(); rlm@1: virtual void vOnHelpAbout(); rlm@1: virtual bool bOnEmuIdle(); rlm@1: rlm@1: virtual bool on_focus_in_event(GdkEventFocus * _pstEvent); rlm@1: virtual bool on_focus_out_event(GdkEventFocus * _pstEvent); rlm@1: virtual bool on_key_press_event(GdkEventKey * _pstEvent); rlm@1: virtual bool on_key_release_event(GdkEventKey * _pstEvent); rlm@1: rlm@1: private: rlm@1: // Config limits rlm@1: const int m_iFrameskipMin; rlm@1: const int m_iFrameskipMax; rlm@1: const int m_iThrottleMin; rlm@1: const int m_iThrottleMax; rlm@1: const int m_iScaleMin; rlm@1: const int m_iScaleMax; rlm@1: const int m_iShowSpeedMin; rlm@1: const int m_iShowSpeedMax; rlm@1: const int m_iSaveTypeMin; rlm@1: const int m_iSaveTypeMax; rlm@1: const int m_iSoundQualityMin; rlm@1: const int m_iSoundQualityMax; rlm@1: const int m_iSoundVolumeMin; rlm@1: const int m_iSoundVolumeMax; rlm@1: const int m_iEmulatorTypeMin; rlm@1: const int m_iEmulatorTypeMax; rlm@1: const int m_iFilter2xMin; rlm@1: const int m_iFilter2xMax; rlm@1: const int m_iFilterIBMin; rlm@1: const int m_iFilterIBMax; rlm@1: const int m_iJoypadMin; rlm@1: const int m_iJoypadMax; rlm@1: rlm@1: static Window * m_poInstance; rlm@1: rlm@1: Glib::RefPtr m_poXml; rlm@1: rlm@1: std::string m_sUserDataDir; rlm@1: std::string m_sConfigFile; rlm@1: Config::File m_oConfig; rlm@1: Config::Section * m_poHistoryConfig; rlm@1: Config::Section * m_poDirConfig; rlm@1: Config::Section * m_poCoreConfig; rlm@1: Config::Section * m_poDisplayConfig; rlm@1: Config::Section * m_poSoundConfig; rlm@1: Config::Section * m_poInputConfig; rlm@1: rlm@1: #ifdef GTKMM20 rlm@1: Gtk::FileSelection * m_poFileOpenDialog; rlm@1: #else // ! GTKMM20 rlm@1: Gtk::FileChooserDialog * m_poFileOpenDialog; rlm@1: #endif // ! GTKMM20 rlm@1: ScreenArea * m_poScreenArea; rlm@1: Gtk::Menu * m_poRecentMenu; rlm@1: Gtk::MenuItem * m_poRecentResetItem; rlm@1: Gtk::CheckMenuItem * m_poFilePauseItem; rlm@1: Gtk::CheckMenuItem * m_poUseBiosItem; rlm@1: Gtk::CheckMenuItem * m_poSoundOffItem; rlm@1: rlm@1: struct SGameSlot rlm@1: { rlm@1: bool m_bEmpty; rlm@1: std::string m_sFile; rlm@1: time_t m_uiTime; rlm@1: }; rlm@1: rlm@1: Gtk::MenuItem * m_apoLoadGameItem[10]; rlm@1: Gtk::MenuItem * m_apoSaveGameItem[10]; rlm@1: SGameSlot m_astGameSlot[10]; rlm@1: rlm@1: std::list m_listHistory; rlm@1: rlm@1: std::list m_listSensitiveWhenPlaying; rlm@1: rlm@1: Gtk::Tooltips m_oTooltips; rlm@1: rlm@1: SigC::connection m_oEmuSig; rlm@1: rlm@1: std::vector m_oJoypads; rlm@1: Keymap * m_poKeymap; rlm@1: rlm@1: int m_iScreenWidth; rlm@1: int m_iScreenHeight; rlm@1: rlm@1: std::string m_sRomFile; rlm@1: ECartridge m_eCartridge; rlm@1: EmulatedSystem m_stEmulator; rlm@1: u32 m_uiJoypadState; rlm@1: u32 m_uiAutofireState; rlm@1: bool m_bAutofireToggle; rlm@1: bool m_bPaused; rlm@1: bool m_bWasEmulating; rlm@1: bool m_bAutoFrameskip; rlm@1: int m_iThrottle; rlm@1: u32 m_uiThrottleLastTime; rlm@1: u32 m_uiThrottleDelay; rlm@1: EShowSpeed m_eShowSpeed; rlm@1: ESoundQuality m_eSoundQuality; rlm@1: rlm@1: void vInitSystem(); rlm@1: void vInitSDL(); rlm@1: void vInitConfig(); rlm@1: void vCheckConfig(); rlm@1: void vLoadConfig(const std::string & _rsFile); rlm@1: void vSaveConfig(const std::string & _rsFile); rlm@1: void vLoadHistoryFromConfig(); rlm@1: void vSaveHistoryToConfig(); rlm@1: void vHistoryAdd(const std::string & _rsFile); rlm@1: void vClearHistoryMenu(); rlm@1: void vUpdateHistoryMenu(); rlm@1: void vLoadJoypadsFromConfig(); rlm@1: void vSaveJoypadsToConfig(); rlm@1: void vUpdateScreen(); rlm@1: void vDrawDefaultScreen(); rlm@1: void vSetDefaultTitle(); rlm@1: void vCreateFileOpenDialog(); rlm@1: void vLoadBattery(); rlm@1: void vSaveBattery(); rlm@1: void vStartEmu(); rlm@1: void vStopEmu(); rlm@1: void vSetThrottle(int _iPercent); rlm@1: void vSelectBestThrottleItem(); rlm@1: void vUpdateGameSlots(); rlm@1: }; rlm@1: rlm@1: } // namespace VBA rlm@1: rlm@1: rlm@1: #endif // __VBA_WINDOW_H__