changed: don't include event.h in stdafx.h
[xbmc:xbmc-antiquated.git] / xbmc / Application.h
1 #pragma once
2
3 /*
4  *      Copyright (C) 2005-2008 Team XBMC
5  *      http://xbmc.org
6  *
7  *  This Program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2, or (at your option)
10  *  any later version.
11  *
12  *  This Program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with XBMC; see the file COPYING.  If not, write to
19  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
20  *  http://www.gnu.org/copyleft/gpl.html
21  *
22  */
23
24 #include "XBApplicationEx.h"
25
26 #include "IMsgTargetCallback.h"
27 #include "Key.h"
28
29 class CFileItem;
30 class CFileItemList;
31
32 #include "GUIDialogSeekBar.h"
33 #include "GUIDialogKaiToast.h"
34 #include "GUIDialogVolumeBar.h"
35 #include "GUIDialogMuteBug.h"
36 #include "GUIWindowPointer.h"   // Mouse pointer
37
38 #include "cores/IPlayer.h"
39 #include "cores/PlayerCoreFactory.h"
40 #include "PlayListPlayer.h"
41 #if !defined(_WIN32PC) && defined(HAS_DVD_DRIVE)
42 #include "DetectDVDType.h"
43 #endif
44 #include "Autorun.h"
45 #include "Bookmark.h"
46 #include "utils/Stopwatch.h"
47 #include "ApplicationMessenger.h"
48 #include "utils/Network.h"
49 #ifdef HAS_PERFORMANCE_SAMPLE
50 #include "utils/PerformanceStats.h"
51 #endif
52 #ifdef _LINUX
53 #include "linux/LinuxResourceCounter.h"
54 #endif
55 #ifdef _WIN32PC
56 #include "WIN32Util.h"
57 #include "WINMessageHandler.h"
58 #endif
59 #include "XBMC_events.h"
60 #include "utils/Thread.h"
61
62 class CWebServer;
63 class CXBFileZilla;
64 class CSNTPClient;
65 class CKaraokeLyricsManager;
66 class CApplicationMessenger;
67 class DPMSSupport;
68 class CProfile;
69 class CSplash;
70
71 class CBackgroundPlayer : public CThread
72 {
73 public:
74   CBackgroundPlayer(const CFileItem &item, int iPlayList);
75   virtual ~CBackgroundPlayer();
76   virtual void Process();
77 protected:
78   CFileItem *m_item;
79   int       m_iPlayList;
80 };
81
82 class CApplication : public CXBApplicationEx, public IPlayerCallback, public IMsgTargetCallback
83 {
84 public:
85   CApplication(void);
86   virtual ~CApplication(void);
87   virtual HRESULT Initialize();
88   virtual void FrameMove();
89   virtual void Render();
90   virtual void DoRender();
91   virtual void RenderNoPresent();
92   virtual void Preflight();
93   virtual HRESULT Create(HWND hWnd);
94   virtual HRESULT Cleanup();
95
96   void StartServices();
97   void StopServices();
98   void StartWebServer();
99   void StopWebServer();
100   void StartFtpServer();
101   void StopFtpServer();
102   void StartTimeServer();
103   void StopTimeServer();
104   void StartUPnP();
105   void StopUPnP();
106   void StartUPnPRenderer();
107   void StopUPnPRenderer();
108   void StartUPnPClient();
109   void StopUPnPClient();
110   void StartUPnPServer();
111   void StopUPnPServer();
112   void StartEventServer();
113   bool StopEventServer(bool promptuser=false);
114   void RefreshEventServer();
115   void StartDbusServer();
116   bool StopDbusServer();
117   void StartZeroconf();
118   void StopZeroconf();
119   void DimLCDOnPlayback(bool dim);
120   DWORD GetThreadId() const { return m_threadID; };
121   void Stop();
122   void RestartApp();
123   void LoadSkin(const CStdString& strSkin);
124   void UnloadSkin();
125   bool LoadUserWindows(const CStdString& strSkinPath);
126   void DelayLoadSkin();
127   void CancelDelayLoadSkin();
128   void ReloadSkin();
129   const CStdString& CurrentFile();
130   CFileItem& CurrentFileItem();
131   virtual bool OnMessage(CGUIMessage& message);
132   PLAYERCOREID GetCurrentPlayer();
133   virtual void OnPlayBackEnded();
134   virtual void OnPlayBackStarted();
135   virtual void OnPlayBackStopped();
136   virtual void OnQueueNextItem();
137   bool PlayMedia(const CFileItem& item, int iPlaylist = PLAYLIST_MUSIC);
138   bool PlayMediaSync(const CFileItem& item, int iPlaylist = PLAYLIST_MUSIC);
139   bool ProcessAndStartPlaylist(const CStdString& strPlayList, PLAYLIST::CPlayList& playlist, int iPlaylist);
140   bool PlayFile(const CFileItem& item, bool bRestart = false);
141   void SaveFileState();
142   void UpdateFileState();
143   void StopPlaying();
144   void Restart(bool bSamePosition = true);
145   void DelayedPlayerRestart();
146   void CheckDelayedPlayerRestart();
147   void RenderFullScreen();
148   void DoRenderFullScreen();
149   bool NeedRenderFullScreen();
150   bool IsPlaying() const;
151   bool IsPaused() const;
152   bool IsPlayingAudio() const;
153   bool IsPlayingVideo() const;
154   bool IsPlayingFullScreenVideo() const;
155   bool IsStartingPlayback() const { return m_bPlaybackStarting; }
156   bool OnKey(CKey& key);
157   bool OnAction(CAction &action);
158   void RenderMemoryStatus();
159   void CheckShutdown();
160   // Checks whether the screensaver and / or DPMS should become active.
161   void CheckScreenSaverAndDPMS();
162   void CheckPlayingProgress();
163   void CheckAudioScrobblerStatus();
164   void ActivateScreenSaver(bool forceType = false);
165
166   virtual void Process();
167   void ProcessSlow();
168   void ResetScreenSaver();
169   int GetVolume() const;
170   void SetVolume(int iPercent);
171   void Mute(void);
172   int GetPlaySpeed() const;
173   int GetSubtitleDelay() const;
174   int GetAudioDelay() const;
175   void SetPlaySpeed(int iSpeed);
176   void ResetScreenSaverTimer();
177   // Wakes up from the screensaver and / or DPMS. Returns true if woken up.
178   bool WakeUpScreenSaverAndDPMS();
179   bool WakeUpScreenSaver();
180   double GetTotalTime() const;
181   double GetTime() const;
182   float GetPercentage() const;
183   void SeekPercentage(float percent);
184   void SeekTime( double dTime = 0.0 );
185   void ResetPlayTime();
186
187   void SaveMusicScanSettings();
188   void RestoreMusicScanSettings();
189   void CheckMusicPlaylist();
190
191   bool ExecuteXBMCAction(std::string action);
192   bool ExecuteAction(CGUIActionDescriptor action);
193
194   static bool OnEvent(XBMC_Event& newEvent);
195   
196
197   CApplicationMessenger& getApplicationMessenger();
198 #if defined(HAS_LINUX_NETWORK)
199   CNetworkLinux& getNetwork();
200 #elif defined(HAS_WIN32_NETWORK)
201   CNetworkWin32& getNetwork();
202 #else
203   CNetwork& getNetwork();
204 #endif
205 #ifdef HAS_PERFORMANCE_SAMPLE
206   CPerformanceStats &GetPerformanceStats();
207 #endif
208
209   CGUIDialogVolumeBar m_guiDialogVolumeBar;
210   CGUIDialogSeekBar m_guiDialogSeekBar;
211   CGUIDialogKaiToast m_guiDialogKaiToast;
212   CGUIDialogMuteBug m_guiDialogMuteBug;
213   CGUIWindowPointer m_guiPointer;
214
215 #ifdef HAS_DVD_DRIVE  
216   MEDIA_DETECT::CAutorun m_Autorun;
217 #endif
218   
219 #if !defined(_WIN32PC) && defined(HAS_DVD_DRIVE)
220   MEDIA_DETECT::CDetectDVDMedia m_DetectDVDType;
221 #endif
222   CSNTPClient *m_psntpClient;
223   CWebServer* m_pWebServer;
224   CXBFileZilla* m_pFileZilla;
225   IPlayer* m_pPlayer;
226
227   inline bool IsInScreenSaver() { return m_bScreenSave; };
228   int m_iScreenSaveLock; // spiff: are we checking for a lock? if so, ignore the screensaver state, if -1 we have failed to input locks
229
230   DWORD m_dwSkinTime;
231   bool m_bIsPaused;
232   bool m_bPlaybackStarting;
233
234   CKaraokeLyricsManager* m_pKaraokeMgr;
235
236   PLAYERCOREID m_eForcedNextPlayer;
237   CStdString m_strPlayListFile;
238
239   int GlobalIdleTime();
240   void NewFrame();
241   bool WaitFrame(DWORD timeout);
242
243   void EnablePlatformDirectories(bool enable=true)
244   {
245     m_bPlatformDirectories = enable;
246   }
247
248   bool PlatformDirectoriesEnabled()
249   {
250     return m_bPlatformDirectories;
251   }
252
253   void SetStandAlone(bool value)
254   {
255     m_bStandalone = value;
256   }
257
258   bool IsStandAlone()
259   {
260     return m_bStandalone;
261   }
262
263   void SetEnableLegacyRes(bool value)
264   {
265     m_bEnableLegacyRes = value;
266   }
267
268   bool IsEnableLegacyRes()
269   {
270     return m_bEnableLegacyRes;
271   }
272
273   bool IsPresentFrame();
274
275   void Minimize(bool minimize = true);
276
277   bool m_bRunResumeJobs;
278
279 protected:
280   void RenderScreenSaver();
281
282   friend class CApplicationMessenger;
283   // screensaver
284   bool m_bScreenSave;
285   CStdString m_screenSaverMode;
286
287   // timer information
288   CStopWatch m_idleTimer;
289   CStopWatch m_restartPlayerTimer;
290   CStopWatch m_frameTime;
291   CStopWatch m_navigationTimer;
292   CStopWatch m_slowTimer;
293   CStopWatch m_screenSaverTimer;
294   CStopWatch m_shutdownTimer;
295
296   DPMSSupport* m_dpms;
297   bool m_dpmsIsActive;
298
299   CFileItemPtr m_itemCurrentFile;
300   CFileItemList* m_currentStack;
301   CStdString m_prevMedia;
302   CSplash* m_splash;
303   DWORD m_threadID;       // application thread ID.  Used in applicationMessanger to know where we are firing a thread with delay from.
304   PLAYERCOREID m_eCurrentPlayer;
305   bool m_bXboxMediacenterLoaded;
306   bool m_bSettingsLoaded;
307   bool m_bAllSettingsLoaded;
308   bool m_bInitializing;
309   bool m_bPlatformDirectories;
310
311   CBookmark m_progressTrackingVideoResumeBookmark;
312   CFileItemPtr m_progressTrackingItem;
313   bool m_progressTrackingPlayCountUpdate;
314
315   int m_iPlaySpeed;
316   int m_currentStackPosition;
317   int m_nextPlaylistItem;
318
319   bool m_bPresentFrame;
320
321   bool m_bStandalone;
322   bool m_bEnableLegacyRes;
323   bool m_bWasFullScreenBeforeMinimize;
324
325 #ifdef HAS_SDL
326   int        m_frameCount;
327   SDL_mutex* m_frameMutex;
328   SDL_cond*  m_frameCond;
329 #endif
330
331   void SetHardwareVolume(long hardwareVolume);
332   void UpdateLCD();
333   void FatalErrorHandler(bool WindowSystemInitialized, bool MapDrives, bool InitNetwork);
334
335   bool PlayStack(const CFileItem& item, bool bRestart);
336   bool SwitchToFullScreen();
337   bool ProcessMouse();
338   bool ProcessHTTPApiButtons();
339   bool ProcessKeyboard();
340   bool ProcessRemote(float frameTime);
341   bool ProcessGamepad(float frameTime);
342   bool ProcessEventServer(float frameTime);
343
344   bool ProcessJoystickEvent(const std::string& joystickName, int button, bool isAxis, float fAmount);
345
346   void StartFtpEmergencyRecoveryMode();
347   float NavigationIdleTime();
348   void CheckForTitleChange();
349   static bool AlwaysProcess(const CAction& action);
350
351   void SaveCurrentFileSettings();
352
353   CProfile* InitDirectoriesLinux();
354   CProfile* InitDirectoriesOSX();
355   CProfile* InitDirectoriesWin32();
356
357   CApplicationMessenger m_applicationMessenger;
358 #if defined(HAS_LINUX_NETWORK)
359   CNetworkLinux m_network;
360 #elif defined(HAS_WIN32_NETWORK)
361   CNetworkWin32 m_network;
362 #else
363   CNetwork    m_network;
364 #endif
365 #ifdef HAS_PERFORMANCE_SAMPLE
366   CPerformanceStats m_perfStats;
367 #endif
368 #ifdef _LINUX
369   CLinuxResourceCounter m_resourceCounter;
370 #endif
371
372 #ifdef HAS_EVENT_SERVER
373   std::map<std::string, std::map<int, float> > m_lastAxisMap;
374 #endif
375 #ifdef _WIN32PC
376   CWIN32Util::SystemParams::SysParam *m_SSysParam;
377   CWINMessageHandler  m_messageHandler;
378 #endif
379 };
380
381 extern CApplication g_application;
382 extern CStdString g_LoadErrorStr;