merged: Linuxport revisions through to r15292.
[xbmc:xbmc-antiquated.git] / xbmc / GUIWindowOSD.cpp
1 /*
2  *      Copyright (C) 2005-2008 Team XBMC
3  *      http://www.xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, write to
17  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18  *  http://www.gnu.org/copyleft/gpl.html
19  *
20  */
21
22 #include "stdafx.h"
23 #include "GUIWindowOSD.h"
24 #include "Application.h"
25 #include "GUIWindowManager.h"
26
27 CGUIWindowOSD::CGUIWindowOSD(void)
28     : CGUIDialog(WINDOW_OSD, "VideoOSD.xml")
29 {
30 }
31
32 CGUIWindowOSD::~CGUIWindowOSD(void)
33 {
34 }
35
36 void CGUIWindowOSD::OnWindowLoaded()
37 {
38   CGUIDialog::OnWindowLoaded();
39   m_bRelativeCoords = true;
40 }
41
42 void CGUIWindowOSD::Render()
43 {
44   if (m_autoClosing)
45   {
46     // check for movement of mouse or a submenu open
47     if (g_Mouse.HasMoved() || m_gWindowManager.IsWindowActive(WINDOW_DIALOG_AUDIO_OSD_SETTINGS)
48                            || m_gWindowManager.IsWindowActive(WINDOW_DIALOG_VIDEO_OSD_SETTINGS)
49                            || m_gWindowManager.IsWindowActive(WINDOW_DIALOG_VIDEO_BOOKMARKS))
50       SetAutoClose(3000);
51   }
52   CGUIDialog::Render();
53 }
54
55 bool CGUIWindowOSD::OnAction(const CAction &action)
56 {
57   // keyboard or controller movement should prevent autoclosing
58   if (action.wID != ACTION_MOUSE && m_autoClosing)
59     SetAutoClose(3000);
60
61   // ACTION_SHOW_OSD should take the OSD away too!
62   if (action.wID == ACTION_SHOW_OSD)
63   {
64     Close();
65     return true;
66   }
67   else if (action.wID == ACTION_NEXT_ITEM || action.wID == ACTION_PREV_ITEM)
68   {
69     // these could indicate next chapter if video supports it
70     if (g_application.m_pPlayer != NULL && g_application.m_pPlayer->OnAction(action))
71       return true;
72   }
73
74   return CGUIDialog::OnAction(action);
75 }
76
77 bool CGUIWindowOSD::OnMouse(const CPoint &point)
78 {
79   if (g_Mouse.bClick[MOUSE_LEFT_BUTTON])
80   { // pause
81     CAction action;
82     action.wID = ACTION_PAUSE;
83     return g_application.OnAction(action);
84   }
85   return CGUIDialog::OnMouse(point);
86 }
87
88 bool CGUIWindowOSD::OnMessage(CGUIMessage& message)
89 {
90   switch ( message.GetMessage() )
91   {
92   case GUI_MSG_VIDEO_MENU_STARTED:
93     {
94       // We have gone to the DVD menu, so close the OSD.
95       Close();
96     }
97   case GUI_MSG_WINDOW_DEINIT:  // fired when OSD is hidden
98     {
99       // Remove our subdialogs if visible
100       CGUIDialog *pDialog = (CGUIDialog *)m_gWindowManager.GetWindow(WINDOW_DIALOG_VIDEO_OSD_SETTINGS);
101       if (pDialog && pDialog->IsDialogRunning())
102         pDialog->Close(true);
103       pDialog = (CGUIDialog *)m_gWindowManager.GetWindow(WINDOW_DIALOG_AUDIO_OSD_SETTINGS);
104       if (pDialog && pDialog->IsDialogRunning()) pDialog->Close(true);
105       pDialog = (CGUIDialog *)m_gWindowManager.GetWindow(WINDOW_DIALOG_VIDEO_BOOKMARKS);
106       if (pDialog && pDialog->IsDialogRunning()) pDialog->Close(true);
107     }
108     break;
109   }
110   return CGUIDialog::OnMessage(message);
111 }
112