Пример #1
0
bool CGUIDialog::OnMessage(CGUIMessage& message)
{
  switch ( message.GetMessage() )
  {
  case GUI_MSG_WINDOW_DEINIT:
    {
      CGUIWindow *pWindow = m_gWindowManager.GetWindow(m_gWindowManager.GetActiveWindow());
      if (pWindow)
        m_gWindowManager.ShowOverlay(pWindow->GetOverlayState());

      CGUIWindow::OnMessage(message);
      // if we were running, make sure we remove ourselves from the window manager
      if (m_bRunning)
      {
        m_gWindowManager.RemoveDialog(GetID());
        m_bRunning = false;
        m_dialogClosing = false;
        m_autoClosing = false;
      }
      return true;
    }
  case GUI_MSG_WINDOW_INIT:
    {
      CGUIWindow::OnMessage(message);
      m_showStartTime = timeGetTime();
      return true;
    }
  }

  return CGUIWindow::OnMessage(message);
}
Пример #2
0
bool CGUIPythonWindowXMLDialog::OnMessage(CGUIMessage &message)
{
  if (message.GetMessage() == GUI_MSG_WINDOW_DEINIT)
  {
    CGUIWindow *pWindow = g_windowManager.GetWindow(g_windowManager.GetActiveWindow());
    if (pWindow)
      g_windowManager.ShowOverlay(pWindow->GetOverlayState());
    return CGUIWindow::OnMessage(message);
  }
  return CGUIPythonWindowXML::OnMessage(message);
}
Пример #3
0
bool CGUIDialog::OnMessage(CGUIMessage& message)
{
  switch ( message.GetMessage() )
  {
  case GUI_MSG_WINDOW_DEINIT:
    {
      CGUIWindow *pWindow = g_windowManager.GetWindow(g_windowManager.GetActiveWindow());
      if (pWindow)
        g_windowManager.ShowOverlay(pWindow->GetOverlayState());

      CGUIWindow::OnMessage(message);
      return true;
    }
  case GUI_MSG_WINDOW_INIT:
    {
      CGUIWindow::OnMessage(message);
      m_showStartTime = 0;
      return true;
    }
  }

  return CGUIWindow::OnMessage(message);
}
Пример #4
0
void CGUIWindowManager::ActivateWindow_Internal(int iWindowID, const vector<CStdString>& params, bool swappingWindows)
{
  // translate virtual windows
  // virtual music window which returns the last open music window (aka the music start window)
  if (iWindowID == WINDOW_MUSIC)
  {
    iWindowID = g_settings.m_iMyMusicStartWindow;
    // ensure the music virtual window only returns music files and music library windows
    if (iWindowID != WINDOW_MUSIC_NAV)
      iWindowID = WINDOW_MUSIC_FILES;
  }
  // virtual video window which returns the last open video window (aka the video start window)
  if (iWindowID == WINDOW_VIDEOS || iWindowID == WINDOW_VIDEO_FILES)
  { // backward compatibility for pre-Eden
    iWindowID = WINDOW_VIDEO_NAV;
  }
  if (iWindowID == WINDOW_SCRIPTS)
  { // backward compatibility for pre-Dharma
    iWindowID = WINDOW_PROGRAMS;
  }
  if (iWindowID == WINDOW_START)
  { // virtual start window
    iWindowID = g_SkinInfo->GetStartWindow();
  }

  // debug
  CLog::Log(LOGDEBUG, "Activating window ID: %i", iWindowID);

  if (!g_passwordManager.CheckMenuLock(iWindowID))
  {
    CLog::Log(LOGERROR, "MasterCode is Wrong: Window with id %d will not be loaded! Enter a correct MasterCode!", iWindowID);
    if (GetActiveWindow() == WINDOW_INVALID && iWindowID != WINDOW_HOME)
      ActivateWindow(WINDOW_HOME);
    return;
  }

  // first check existence of the window we wish to activate.
  CGUIWindow *pNewWindow = GetWindow(iWindowID);
  if (!pNewWindow)
  { // nothing to see here - move along
    CLog::Log(LOGERROR, "Unable to locate window with id %d.  Check skin files", iWindowID - WINDOW_HOME);
    return ;
  }
  else if (pNewWindow->IsDialog())
  { // if we have a dialog, we do a DoModal() rather than activate the window
    if (!pNewWindow->IsDialogRunning())
    {
      CSingleExit exitit(g_graphicsContext);
      ((CGUIDialog *)pNewWindow)->DoModal(iWindowID, params.size() ? params[0] : "");
    }
    return;
  }

  g_infoManager.SetNextWindow(iWindowID);

  // set our overlay state
  HideOverlay(pNewWindow->GetOverlayState());

  // deactivate any window
  int currentWindow = GetActiveWindow();
  CGUIWindow *pWindow = GetWindow(currentWindow);
  if (pWindow)
    CloseWindowSync(pWindow, iWindowID);
  g_infoManager.SetNextWindow(WINDOW_INVALID);

  // Add window to the history list (we must do this before we activate it,
  // as all messages done in WINDOW_INIT will want to be sent to the new
  // topmost window).  If we are swapping windows, we pop the old window
  // off the history stack
  if (swappingWindows && m_windowHistory.size())
    m_windowHistory.pop();
  AddToWindowHistory(iWindowID);

  g_infoManager.SetPreviousWindow(currentWindow);
  // Send the init message
  CGUIMessage msg(GUI_MSG_WINDOW_INIT, 0, 0, currentWindow, iWindowID);
  msg.SetStringParams(params);
  pNewWindow->OnMessage(msg);
//  g_infoManager.SetPreviousWindow(WINDOW_INVALID);
}
Пример #5
0
void CGUIWindowManager::PreviousWindow()
{
  // deactivate any window
  CSingleLock lock(g_graphicsContext);
  CLog::Log(LOGDEBUG,"CGUIWindowManager::PreviousWindow: Deactivate");
  int currentWindow = GetActiveWindow();
  CGUIWindow *pCurrentWindow = GetWindow(currentWindow);
  if (!pCurrentWindow)
    return;     // no windows or window history yet

  // check to see whether our current window has a <previouswindow> tag
  if (pCurrentWindow->GetPreviousWindow() != WINDOW_INVALID)
  {
    // TODO: we may need to test here for the
    //       whether our history should be changed

    // don't reactivate the previouswindow if it is ourselves.
    if (currentWindow != pCurrentWindow->GetPreviousWindow())
      ActivateWindow(pCurrentWindow->GetPreviousWindow());
    return;
  }
  // get the previous window in our stack
  if (m_windowHistory.size() < 2)
  { // no previous window history yet - check if we should just activate home
    if (GetActiveWindow() != WINDOW_INVALID && GetActiveWindow() != WINDOW_HOME)
    {
      ClearWindowHistory();
      ActivateWindow(WINDOW_HOME);
    }
    return;
  }
  m_windowHistory.pop();
  int previousWindow = GetActiveWindow();
  m_windowHistory.push(currentWindow);

  CGUIWindow *pNewWindow = GetWindow(previousWindow);
  if (!pNewWindow)
  {
    CLog::Log(LOGERROR, "Unable to activate the previous window");
    ClearWindowHistory();
    ActivateWindow(WINDOW_HOME);
    return;
  }

  // ok to go to the previous window now

  // tell our info manager which window we are going to
  g_infoManager.SetNextWindow(previousWindow);

  // set our overlay state (enables out animations on window change)
  HideOverlay(pNewWindow->GetOverlayState());

  // deinitialize our window
  CloseWindowSync(pCurrentWindow);

  g_infoManager.SetNextWindow(WINDOW_INVALID);
  g_infoManager.SetPreviousWindow(currentWindow);

  // remove the current window off our window stack
  m_windowHistory.pop();

  // ok, initialize the new window
  CLog::Log(LOGDEBUG,"CGUIWindowManager::PreviousWindow: Activate new");
  CGUIMessage msg2(GUI_MSG_WINDOW_INIT, 0, 0, WINDOW_INVALID, GetActiveWindow());
  pNewWindow->OnMessage(msg2);

  g_infoManager.SetPreviousWindow(WINDOW_INVALID);
  return;
}
Пример #6
0
void CGUIWindowManager::ActivateWindow_Internal(int iWindowID, const vector<CStdString>& params, bool swappingWindows)
{
/*
	参数:
		1、iWindowID 		: 要激活的窗体id 号
		2、params			: 传递给窗体的参数
		3、swappingWindows	: 是否交换激活窗体( 见下面对此参数的说明)

	返回:
		1、

	说明:
		1、激活窗体的原则:
		
			A、根据传入的窗体id 找到要激活的窗体指针
				1) 没找到
						a、直接出错返回
				2) 找到了
						a、如果是一个对话框,则调用对话框的DoModal  方法将对话框显示,然后返回
						b、执行下面的B 步骤
			B、
			C、

		2、参数swappingWindows 的作用:
				假设:
					AAA : 原来激活的窗体,即当前激活窗体
					BBB : 要激活的窗体

				true 	 : 将BBB 窗体激活,将AAA 窗体从窗体操作栈出栈,将BBB 窗体添加到窗体操作栈
				false : 将BBB 窗体激活,不将AAA 窗体从窗体操作栈出栈,将BBB 窗体添加到窗体操作栈
			
*/
	// translate virtual windows
	// virtual music window which returns the last open music window (aka the music start window)
	if (iWindowID == WINDOW_MUSIC)
	{
		iWindowID = g_settings.m_iMyMusicStartWindow;
		// ensure the music virtual window only returns music files and music library windows
		if (iWindowID != WINDOW_MUSIC_NAV)
			iWindowID = WINDOW_MUSIC_FILES;
	}
	
	// virtual video window which returns the last open video window (aka the video start window)
	if (iWindowID == WINDOW_VIDEOS || iWindowID == WINDOW_VIDEO_FILES)
	{ // backward compatibility for pre-Eden
		iWindowID = WINDOW_VIDEO_NAV;
	}
	
	if (iWindowID == WINDOW_SCRIPTS)
	{ // backward compatibility for pre-Dharma
		iWindowID = WINDOW_PROGRAMS;
	}
	
	if (iWindowID == WINDOW_START)
	{ // virtual start window
		iWindowID = g_SkinInfo->GetStartWindow();
	}

	// debug
	CLog::Log(LOGDEBUG, "Activating window ID: %i", iWindowID);

	if (!g_passwordManager.CheckMenuLock(iWindowID))
	{
		CLog::Log(LOGERROR, "MasterCode is Wrong: Window with id %d will not be loaded! Enter a correct MasterCode!", iWindowID);
		if (GetActiveWindow() == WINDOW_INVALID && iWindowID != WINDOW_HOME)
			ActivateWindow(WINDOW_HOME);
		return;
	}

	// first check existence of the window we wish to activate.
	CGUIWindow *pNewWindow = GetWindow(iWindowID);/* 获取要激活的窗体*/
	if (!pNewWindow)/* 没得到*/
	{ // nothing to see here - move along
		CLog::Log(LOGERROR, "Unable to locate window with id %d.  Check skin files", iWindowID - WINDOW_HOME);
		return ;
	}
	else if (pNewWindow->IsDialog()) /* 如果要激活的窗体是个对话框*/
	{ // if we have a dialog, we do a DoModal() rather than activate the window
		if (!pNewWindow->IsDialogRunning())/* 对话框没有在运行状态,则将其模态显示出来*/
		{
			CSingleExit exitit(g_graphicsContext);
			((CGUIDialog *)pNewWindow)->DoModal(iWindowID, params.size() ? params[0] : "");
		}
		return;
	}

	//-------------------------------------------------------->>> 调用SetNextWindow 开始
	g_infoManager.SetNextWindow(iWindowID); /* 设定要激活的窗体的id  为下一个窗体id ,即相当于全局变量保存这个值*/

	// set our overlay state
	HideOverlay(pNewWindow->GetOverlayState());

	// deactivate any window
	int currentWindow = GetActiveWindow();
	CGUIWindow *pWindow = GetWindow(currentWindow);
	if (pWindow)
		CloseWindowSync(pWindow, iWindowID);

	//-------------------------------------------------------->>> 调用SetNextWindow 结束
	g_infoManager.SetNextWindow(WINDOW_INVALID); /* 设定下一个窗体id  为无效的*/

	// Add window to the history list (we must do this before we activate it,
	// as all messages done in WINDOW_INIT will want to be sent to the new
	// topmost window).  If we are swapping windows, we pop the old window
	// off the history stack
	if (swappingWindows && m_windowHistory.size())
		m_windowHistory.pop(); /* 将当前激活的窗体从窗体操作栈中出栈*/
	
	AddToWindowHistory(iWindowID); /* 将要激活的窗体id 号添加入窗体操作栈*/ 

	g_infoManager.SetPreviousWindow(currentWindow);
	
	/* 向要激活的窗体发送init 消息,即直接调用要激活窗体的OnMessage 方法*/
	// Send the init message
	CGUIMessage msg(GUI_MSG_WINDOW_INIT, 0, 0, currentWindow, iWindowID);
	msg.SetStringParams(params);
	pNewWindow->OnMessage(msg);

	
	//  g_infoManager.SetPreviousWindow(WINDOW_INVALID);
}
Пример #7
0
void CGUIWindowManager::PreviousWindow()
{
/*
	参数:
		1、

	返回:
		1、

	说明:
		1、此函数实现激活上一个窗体的功能
		2、函数执行的原理:

			根据窗体操作栈(m_windowHistory) 来实现的
*/
	// deactivate any window
	CSingleLock lock(g_graphicsContext);
	CLog::Log(LOGDEBUG,"CGUIWindowManager::PreviousWindow: Deactivate");
	
	int currentWindow = GetActiveWindow(); /* 获取当前激活窗体的id 号*/
	CGUIWindow *pCurrentWindow = GetWindow(currentWindow); /* 获取当前激活窗体指针*/
	if (!pCurrentWindow)/* 没有当前被激活的窗体*/
		return;     // no windows or window history yet

	// check to see whether our current window has a <previouswindow> tag
	if (pCurrentWindow->GetPreviousWindow() != WINDOW_INVALID)/* 获取当前窗体是否具有上一个窗体的标记*/
	{
		// TODO: we may need to test here for the
		//       whether our history should be changed

		// don't reactivate the previouswindow if it is ourselves.
		if (currentWindow != pCurrentWindow->GetPreviousWindow())
			ActivateWindow(pCurrentWindow->GetPreviousWindow());/* 激活上一个窗体*/
		
		return;/* 返回*/
	}

	/* 
		执行到此处时只能是从窗体的历史记录中获取上一个窗体进行激活了
	*/
	
	// get the previous window in our stack
	/* 窗体操作记录总数少于2 个,则激活home 窗体*/
	if (m_windowHistory.size() < 2)
	{ // no previous window history yet - check if we should just activate home
		if (GetActiveWindow() != WINDOW_INVALID && GetActiveWindow() != WINDOW_HOME)/* 当前窗体有效,并且不是home 窗体,则激活home 窗体,否则直接返回了*/
		{
			ClearWindowHistory();
			ActivateWindow(WINDOW_HOME);
		}
		return; /* 返回*/
	}

	/*
		执行到此处时窗体操作栈中的数量肯定是大于等于2 个,因此需要从窗体操作栈中获取前一个窗体
	*/

	/* 如下三行代码就是从窗体的操作记录表( 窗体操作栈)  中取出当前窗体前一个窗体的id 号*/
	m_windowHistory.pop(); /* 将当前激活的窗体出栈*/
	int previousWindow = GetActiveWindow(); /* 取出当前窗体的前一个窗体,即当前窗体出栈后栈顶的那个窗体*/
	m_windowHistory.push(currentWindow); /* 再将当前激活的窗体入栈*/

	

	CGUIWindow *pNewWindow = GetWindow(previousWindow);/* 根据前一个窗体的id 号取出窗体的指针*/
	if (!pNewWindow)/* 没得到前一个窗体的指针则清除窗体操作记录栈,将home 窗体激活*/
	{
		CLog::Log(LOGERROR, "Unable to activate the previous window");
		ClearWindowHistory();
		ActivateWindow(WINDOW_HOME);
		return;
	}

	/* 
		执行到此处时获得到了前一个窗体的指针
	*/
	
	// ok to go to the previous window now

	//-------------------------------------------------------->>> 调用SetNextWindow 开始
	// tell our info manager which window we are going to
	g_infoManager.SetNextWindow(previousWindow);

	// set our overlay state (enables out animations on window change)
	HideOverlay(pNewWindow->GetOverlayState());

	// deinitialize our window
	CloseWindowSync(pCurrentWindow);

	//-------------------------------------------------------->>> 调用SetNextWindow 结束
	g_infoManager.SetNextWindow(WINDOW_INVALID);
	g_infoManager.SetPreviousWindow(currentWindow);

	// remove the current window off our window stack
	m_windowHistory.pop();

	// ok, initialize the new window
	CLog::Log(LOGDEBUG,"CGUIWindowManager::PreviousWindow: Activate new");
	CGUIMessage msg2(GUI_MSG_WINDOW_INIT, 0, 0, WINDOW_INVALID, GetActiveWindow());
	pNewWindow->OnMessage(msg2);

	g_infoManager.SetPreviousWindow(WINDOW_INVALID);
	return;
}
Пример #8
0
void CGUIWindowManager::ActivateWindow_Internal(int iWindowID, const vector<CStdString>& params, bool swappingWindows)
{
  bool passParams = true;
  // translate virtual windows
  // virtual music window which returns the last open music window (aka the music start window)
  if (iWindowID == WINDOW_MUSIC)
  {
    iWindowID = g_stSettings.m_iMyMusicStartWindow;
    // ensure the music virtual window only returns music files and music library windows
    if (iWindowID != WINDOW_MUSIC_NAV)
      iWindowID = WINDOW_MUSIC_FILES;
    // destination path cannot be used with virtual window
    passParams = false;
  }
  // virtual video window which returns the last open video window (aka the video start window)
  if (iWindowID == WINDOW_VIDEOS)
  {
    iWindowID = g_stSettings.m_iVideoStartWindow;
    // ensure the virtual video window only returns video windows
    if (iWindowID != WINDOW_VIDEO_NAV)
      iWindowID = WINDOW_VIDEO_FILES;
    // destination path cannot be used with virtual window
    passParams = false;
  }

  // stop video player when entering home screen
  if(iWindowID == WINDOW_HOME && g_application.IsPlayingVideo())
  {
    CLog::Log(LOGDEBUG,"CGUIWindowManager::ActivateWindow_Internal - [iWindowID=%d=WINDOW_HOME][IsPlayingVideo=TRUE] - Going to stop the video (ev)",iWindowID);
    g_application.StopPlaying();
  }

  // debug
  CLog::Log(LOGDEBUG, "Activating window ID: %i", iWindowID);

  if(!g_passwordManager.CheckMenuLock(iWindowID))
  {
    CLog::Log(LOGERROR, "MasterCode is Wrong: Window with id %d will not be loaded! Enter a correct MasterCode!", iWindowID);
    return;
  }

  // first check existence of the window we wish to activate.
  CGUIWindow *pNewWindow = GetWindow(iWindowID);
  if (!pNewWindow)
  { // nothing to see here - move along
    CLog::Log(LOGERROR, "Unable to locate window with id %d.  Check skin files", iWindowID - WINDOW_HOME);
    return ;
  }
  else if (pNewWindow->IsDialog())
  { // if we have a dialog, we do a DoModal() rather than activate the window
    if (!pNewWindow->IsDialogRunning())
      ((CGUIDialog *)pNewWindow)->DoModal(iWindowID, (passParams && params.size()) ? params[0] : "");
    return;
  }

  g_infoManager.SetNextWindow(iWindowID);

  // set our overlay state
  HideOverlay(pNewWindow->GetOverlayState());

  // deactivate any window
  int currentWindow = GetActiveWindow();
  CGUIWindow *pWindow = GetWindow(currentWindow);
  if (pWindow)
  {
    // If we got here from the screen saver, don't close the dialogs as we want to see
    // them when we come back
    if (!g_application.GetInSlideshowScreensaver())
      CloseDialogs();

    //  Play the window specific deinit sound
    g_audioManager.PlayWindowSound(pWindow->GetID(), SOUND_DEINIT);
    CGUIMessage msg(GUI_MSG_WINDOW_DEINIT, 0, 0, iWindowID);
    pWindow->OnMessage(msg);
  }
  g_infoManager.SetNextWindow(WINDOW_INVALID);

  // Add window to the history list (we must do this before we activate it,
  // as all messages done in WINDOW_INIT will want to be sent to the new
  // topmost window).  If we are swapping windows, we pop the old window
  // off the history stack
  if (swappingWindows && m_windowHistory.size())
    m_windowHistory.pop();
  AddToWindowHistory(iWindowID);

  g_infoManager.SetPreviousWindow(currentWindow);
  g_audioManager.PlayWindowSound(pNewWindow->GetID(), SOUND_INIT);
  // Send the init message
  CGUIMessage msg(GUI_MSG_WINDOW_INIT, 0, 0, currentWindow, iWindowID);
  if (passParams)
    msg.SetStringParams(params);
  pNewWindow->OnMessage(msg);
//  g_infoManager.SetPreviousWindow(WINDOW_INVALID);
}
Пример #9
0
void CGUIWindowManager::ActivateWindow_Internal(int iWindowID, const vector<string>& params, bool swappingWindows, bool force /* = false */)
{
  // translate virtual windows
  // virtual music window which returns the last open music window (aka the music start window)
  if (iWindowID == WINDOW_MUSIC)
  { // backward compatibility for pre-something
    iWindowID = WINDOW_MUSIC_NAV;
  }
  // virtual video window which returns the last open video window (aka the video start window)
  if (iWindowID == WINDOW_VIDEOS || iWindowID == WINDOW_VIDEO_FILES)
  { // backward compatibility for pre-Eden
    iWindowID = WINDOW_VIDEO_NAV;
  }
  if (iWindowID == WINDOW_SCRIPTS)
  { // backward compatibility for pre-Dharma
    iWindowID = WINDOW_PROGRAMS;
  }
  if (iWindowID == WINDOW_START)
  { // virtual start window
    iWindowID = g_SkinInfo->GetStartWindow();
  }

  // debug
  CLog::Log(LOGDEBUG, "Activating window ID: %i", iWindowID);

  if (!g_passwordManager.CheckMenuLock(iWindowID))
  {
    CLog::Log(LOGERROR, "MasterCode is Wrong: Window with id %d will not be loaded! Enter a correct MasterCode!", iWindowID);
    if (GetActiveWindow() == WINDOW_INVALID && iWindowID != WINDOW_HOME)
      ActivateWindow(WINDOW_HOME);
    return;
  }

  // first check existence of the window we wish to activate.
  CGUIWindow *pNewWindow = GetWindow(iWindowID);
  if (!pNewWindow)
  { // nothing to see here - move along
    CLog::Log(LOGERROR, "Unable to locate window with id %d.  Check skin files", iWindowID - WINDOW_HOME);
    return ;
  }
  else if (pNewWindow->IsDialog())
  { // if we have a dialog, we do a DoModal() rather than activate the window
    if (!pNewWindow->IsDialogRunning())
    {
      CSingleExit exitit(g_graphicsContext);
      ((CGUIDialog *)pNewWindow)->Open();
    }
    return;
  }

  // don't activate a window if there are active modal dialogs of type NORMAL
  if (!force && HasModalDialog({ DialogModalityType::MODAL }))
  {
    CLog::Log(LOGINFO, "Activate of window '%i' refused because there are active modal dialogs", iWindowID);
    g_audioManager.PlayActionSound(CAction(ACTION_ERROR));
    return;
  }

  g_infoManager.SetNextWindow(iWindowID);

  // set our overlay state
  HideOverlay(pNewWindow->GetOverlayState());

  // deactivate any window
  int currentWindow = GetActiveWindow();
  CGUIWindow *pWindow = GetWindow(currentWindow);
  if (pWindow)
    CloseWindowSync(pWindow, iWindowID);
  g_infoManager.SetNextWindow(WINDOW_INVALID);

  // Add window to the history list (we must do this before we activate it,
  // as all messages done in WINDOW_INIT will want to be sent to the new
  // topmost window).  If we are swapping windows, we pop the old window
  // off the history stack
  if (swappingWindows && !m_windowHistory.empty())
    m_windowHistory.pop();
  AddToWindowHistory(iWindowID);

  g_infoManager.SetPreviousWindow(currentWindow);
  // Send the init message
  CGUIMessage msg(GUI_MSG_WINDOW_INIT, 0, 0, currentWindow, iWindowID);
  msg.SetStringParams(params);
  pNewWindow->OnMessage(msg);
//  g_infoManager.SetPreviousWindow(WINDOW_INVALID);
}