本文整理汇总了C++中CGUIWindow::OnAction方法的典型用法代码示例。如果您正苦于以下问题:C++ CGUIWindow::OnAction方法的具体用法?C++ CGUIWindow::OnAction怎么用?C++ CGUIWindow::OnAction使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CGUIWindow
的用法示例。
在下文中一共展示了CGUIWindow::OnAction方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnAction
bool CGUIWindowManager::OnAction(const CAction &action) const
{
CSingleLock lock(g_graphicsContext);
unsigned int topMost = m_activeDialogs.size();
while (topMost)
{
CGUIWindow *dialog = m_activeDialogs[--topMost];
lock.Leave();
if (dialog->IsModalDialog())
{ // we have the topmost modal dialog
if (!dialog->IsAnimating(ANIM_TYPE_WINDOW_CLOSE))
{
bool fallThrough = (dialog->GetID() == WINDOW_DIALOG_FULLSCREEN_INFO);
if (dialog->OnAction(action))
return true;
// dialog didn't want the action - we'd normally return false
// but for some dialogs we want to drop the actions through
if (fallThrough)
break;
return false;
}
return true; // do nothing with the action until the anim is finished
}
lock.Enter();
if (topMost > m_activeDialogs.size())
topMost = m_activeDialogs.size();
}
lock.Leave();
CGUIWindow* window = GetWindow(GetActiveWindow());
if (window)
return window->OnAction(action);
return false;
}
示例2: OnAction
bool CGUIWindowManager::OnAction(const CAction &action)
{
if (g_powerManager.IsSuspended())
{
g_powerManager.Resume();
return true;
}
// If the screen saver is active, it is on top of
// existing dialogs. Pass the actions to the screen
// saver and not to the dialogs
if (!g_application.GetInSlideshowScreensaver())
{
CSingleLock lock(g_graphicsContext);
unsigned int topMost = m_activeDialogs.size();
while (topMost)
{
CGUIWindow *dialog = m_activeDialogs[--topMost];
lock.Leave();
if (dialog->IsModalDialog())
{ // we have the topmost modal dialog
if (!dialog->IsAnimating(ANIM_TYPE_WINDOW_CLOSE))
{
bool fallThrough = (dialog->GetID() == WINDOW_DIALOG_FULLSCREEN_INFO);
if (dialog->OnAction(action))
return true;
// dialog didn't want the action - we'd normally return false
// but for some dialogs we want to drop the actions through
if (fallThrough)
break;
return false;
}
return true; // do nothing with the action until the anim is finished
}
// music or video overlay are handled as a special case, as they're modeless, but we allow
// clicking on them with the mouse.
if (action.id == ACTION_MOUSE && (dialog->GetID() == WINDOW_VIDEO_OVERLAY ||
dialog->GetID() == WINDOW_MUSIC_OVERLAY))
{
if (dialog->OnAction(action))
return true;
}
lock.Enter();
if (topMost > m_activeDialogs.size())
topMost = m_activeDialogs.size();
}
lock.Leave();
}
CGUIWindow* window = GetWindow(GetActiveWindow());
if (window)
return window->OnAction(action);
return false;
}
示例3: OnAction
bool CGUIWindowManager::OnAction(const CAction &action)
{
/*
参数:
1、
返回:
1、
说明:
1、
*/
CSingleLock lock(g_graphicsContext);
unsigned int topMost = m_activeDialogs.size();
while (topMost)
{
CGUIWindow *dialog = m_activeDialogs[--topMost];
lock.Leave();
if (dialog->IsModalDialog())
{ // we have the topmost modal dialog
if (!dialog->IsAnimating(ANIM_TYPE_WINDOW_CLOSE))
{
bool fallThrough = (dialog->GetID() == WINDOW_DIALOG_FULLSCREEN_INFO);
if (dialog->OnAction(action))
return true;
// dialog didn't want the action - we'd normally return false
// but for some dialogs we want to drop the actions through
if (fallThrough)
break;
return false;
}
return true; // do nothing with the action until the anim is finished
}
// music or video overlay are handled as a special case, as they're modeless, but we allow
// clicking on them with the mouse.
if (action.IsMouse() && (dialog->GetID() == WINDOW_DIALOG_VIDEO_OVERLAY || dialog->GetID() == WINDOW_DIALOG_MUSIC_OVERLAY))
{
if (dialog->OnAction(action))
return true;
}
lock.Enter();
if (topMost > m_activeDialogs.size())
topMost = m_activeDialogs.size();
}
lock.Leave();
CGUIWindow* window = GetWindow(GetActiveWindow());
if (window)
return window->OnAction(action);
return false;
}
示例4: OnAction
bool CGUIDialogPictureInfo::OnAction(const CAction& action)
{
switch (action.id)
{
// if we're running from slideshow mode, drop the "next picture" and "previous picture" actions through.
case ACTION_NEXT_PICTURE:
case ACTION_PREV_PICTURE:
case ACTION_PLAYER_PLAY:
case ACTION_PAUSE:
if (g_windowManager.GetActiveWindow() == WINDOW_SLIDESHOW)
{
CGUIWindow* pWindow = g_windowManager.GetWindow(WINDOW_SLIDESHOW);
return pWindow->OnAction(action);
}
break;
};
return CGUIDialog::OnAction(action);
}
示例5: OnAction
bool CGUIDialogPictureInfo::OnAction(const CAction& action)
{
switch (action.GetID())
{
// if we're running from slideshow mode, drop the "next picture" and "previous picture" actions through.
case ACTION_NEXT_PICTURE:
case ACTION_PREV_PICTURE:
case ACTION_PLAYER_PLAY:
case ACTION_PAUSE:
if (CServiceBroker::GetGUI()->GetWindowManager().GetActiveWindow() == WINDOW_SLIDESHOW)
{
CGUIWindow* pWindow = CServiceBroker::GetGUI()->GetWindowManager().GetWindow(WINDOW_SLIDESHOW);
return pWindow->OnAction(action);
}
break;
case ACTION_SHOW_INFO:
Close();
return true;
};
return CGUIDialog::OnAction(action);
}
示例6: ProcessMessage
//.........这里部分代码省略.........
pDialog->Show();
}
break;
case TMSG_GUI_WINDOW_CLOSE:
{
CGUIWindow *window = (CGUIWindow *)pMsg->lpVoid;
if (window)
window->Close(pMsg->param2 & 0x1 ? true : false, pMsg->param1, pMsg->param2 & 0x2 ? true : false);
}
break;
case TMSG_GUI_ACTIVATE_WINDOW:
{
g_windowManager.ActivateWindow(pMsg->param1, pMsg->params, pMsg->param2 & 0x1 ? true : false, pMsg->param2 & 0x2 ? true : false);
}
break;
case TMSG_GUI_ADDON_DIALOG:
{
if (pMsg->lpVoid)
{ // TODO: This is ugly - really these python dialogs should just be normal XBMC dialogs
((ADDON::CGUIAddonWindowDialog *) pMsg->lpVoid)->Show_Internal(pMsg->param2 > 0);
}
}
break;
#ifdef HAS_PYTHON
case TMSG_GUI_PYTHON_DIALOG:
{
// This hack is not much better but at least I don't need to make ApplicationMessenger
// know about Addon (Python) specific classes.
CAction caction(pMsg->param1);
((CGUIWindow*)pMsg->lpVoid)->OnAction(caction);
}
break;
#endif
case TMSG_GUI_ACTION:
{
if (pMsg->lpVoid)
{
CAction *action = (CAction *)pMsg->lpVoid;
if (pMsg->param1 == WINDOW_INVALID)
g_application.OnAction(*action);
else
{
CGUIWindow *pWindow = g_windowManager.GetWindow(pMsg->param1);
if (pWindow)
pWindow->OnAction(*action);
else
CLog::Log(LOGWARNING, "Failed to get window with ID %i to send an action to", pMsg->param1);
}
delete action;
}
}
break;
case TMSG_GUI_MESSAGE:
{
if (pMsg->lpVoid)
{
CGUIMessage *message = (CGUIMessage *)pMsg->lpVoid;
g_windowManager.SendMessage(*message, pMsg->param1);
delete message;
}
示例7: ProcessMessage
//.........这里部分代码省略.........
case TMSG_GUI_WINDOW_CLOSE:
{
CGUIWindow *window = (CGUIWindow *)pMsg->lpVoid;
if (window)
window->Close(pMsg->dwParam2 & 0x1 ? true : false, pMsg->dwParam1, pMsg->dwParam2 & 0x2 ? true : false);
}
break;
case TMSG_GUI_ACTIVATE_WINDOW:
{
g_windowManager.ActivateWindow(pMsg->dwParam1, pMsg->params, pMsg->dwParam2 > 0);
}
break;
case TMSG_GUI_PYTHON_DIALOG:
{
if (pMsg->lpVoid)
{ // TODO: This is ugly - really these python dialogs should just be normal XBMC dialogs
if (pMsg->dwParam1)
((CGUIPythonWindowXMLDialog *)pMsg->lpVoid)->Show_Internal(pMsg->dwParam2 > 0);
else
((CGUIPythonWindowDialog *)pMsg->lpVoid)->Show_Internal(pMsg->dwParam2 > 0);
}
}
break;
case TMSG_GUI_ACTION:
{
if (pMsg->lpVoid)
{
CAction *action = (CAction *)pMsg->lpVoid;
if (pMsg->dwParam1 == WINDOW_INVALID)
g_application.OnAction(*action);
else
{
CGUIWindow *pWindow = g_windowManager.GetWindow(pMsg->dwParam1);
if (pWindow)
pWindow->OnAction(*action);
else
CLog::Log(LOGWARNING, "Failed to get window with ID %i to send an action to", pMsg->dwParam1);
}
delete action;
}
}
break;
case TMSG_GUI_MESSAGE:
{
if (pMsg->lpVoid)
{
CGUIMessage *message = (CGUIMessage *)pMsg->lpVoid;
g_windowManager.SendMessage(*message, pMsg->dwParam1);
delete message;
}
}
break;
case TMSG_GUI_INFOLABEL:
{
if (pMsg->lpVoid)
{
vector<CStdString> *infoLabels = (vector<CStdString> *)pMsg->lpVoid;
for (unsigned int i = 0; i < pMsg->params.size(); i++)
infoLabels->push_back(g_infoManager.GetLabel(g_infoManager.TranslateString(pMsg->params[i])));
}
示例8: OnApplicationMessage
void CGUIWindowManager::OnApplicationMessage(ThreadMessage* pMsg)
{
switch (pMsg->dwMessage)
{
case TMSG_GUI_DIALOG_OPEN:
{
if (pMsg->lpVoid)
static_cast<CGUIDialog*>(pMsg->lpVoid)->Open(pMsg->strParam);
else
{
CGUIDialog* pDialog = static_cast<CGUIDialog*>(GetWindow(pMsg->param1));
if (pDialog)
pDialog->Open(pMsg->strParam);
}
}
break;
case TMSG_GUI_WINDOW_CLOSE:
{
CGUIWindow *window = static_cast<CGUIWindow *>(pMsg->lpVoid);
if (window)
window->Close((pMsg->param1 & 0x1) ? true : false, pMsg->param1, (pMsg->param1 & 0x2) ? true : false);
}
break;
case TMSG_GUI_ACTIVATE_WINDOW:
{
ActivateWindow(pMsg->param1, pMsg->params, pMsg->param2 > 0);
}
break;
case TMSG_GUI_ADDON_DIALOG:
{
if (pMsg->lpVoid)
{ // TODO: This is ugly - really these python dialogs should just be normal XBMC dialogs
static_cast<ADDON::CGUIAddonWindowDialog *>(pMsg->lpVoid)->Show_Internal(pMsg->param2 > 0);
}
}
break;
#ifdef HAS_PYTHON
case TMSG_GUI_PYTHON_DIALOG:
{
// This hack is not much better but at least I don't need to make ApplicationMessenger
// know about Addon (Python) specific classes.
CAction caction(pMsg->param1);
static_cast<CGUIWindow*>(pMsg->lpVoid)->OnAction(caction);
}
break;
#endif
case TMSG_GUI_ACTION:
{
if (pMsg->lpVoid)
{
CAction *action = static_cast<CAction *>(pMsg->lpVoid);
if (pMsg->param1 == WINDOW_INVALID)
g_application.OnAction(*action);
else
{
CGUIWindow *pWindow = GetWindow(pMsg->param1);
if (pWindow)
pWindow->OnAction(*action);
else
CLog::Log(LOGWARNING, "Failed to get window with ID %i to send an action to", pMsg->param1);
}
delete action;
}
}
break;
case TMSG_GUI_MESSAGE:
if (pMsg->lpVoid)
{
CGUIMessage *message = static_cast<CGUIMessage *>(pMsg->lpVoid);
SendMessage(*message, pMsg->param1);
delete message;
}
break;
case TMSG_GUI_DIALOG_YESNO:
if (!pMsg->lpVoid && pMsg->param1 < 0 && pMsg->param2 < 0)
return;
auto dialog = static_cast<CGUIDialogYesNo*>(GetWindow(WINDOW_DIALOG_YES_NO));
if (!dialog)
return;
if (pMsg->lpVoid)
pMsg->SetResult(dialog->ShowAndGetInput(*static_cast<HELPERS::DialogYesNoMessage*>(pMsg->lpVoid)));
else
{
HELPERS::DialogYesNoMessage options;
options.heading = pMsg->param1;
options.text = pMsg->param2;
pMsg->SetResult(dialog->ShowAndGetInput(options));
}
break;
}
//.........这里部分代码省略.........
示例9: ProcessMessage
//.........这里部分代码省略.........
msg.SetLabel(pMsg->strParam);
CGUIWindow* pWindowScripts = g_windowManager.GetWindow(WINDOW_SCRIPTS_INFO);
if (pWindowScripts) pWindowScripts->OnMessage(msg);
}
break;
case TMSG_NETWORKMESSAGE:
{
g_application.getNetwork().NetworkMessage((CNetwork::EMESSAGE)pMsg->dwParam1, (int)pMsg->dwParam2);
}
break;
case TMSG_GUI_DO_MODAL:
{
CGUIDialog *pDialog = (CGUIDialog *)pMsg->lpVoid;
if (pDialog)
pDialog->DoModal_Internal((int)pMsg->dwParam1, pMsg->strParam);
}
break;
case TMSG_GUI_SHOW:
{
CGUIDialog *pDialog = (CGUIDialog *)pMsg->lpVoid;
if (pDialog)
pDialog->Show_Internal();
}
break;
case TMSG_GUI_ACTION:
{
if (pMsg->lpVoid)
{
if (pMsg->dwParam1 == WINDOW_INVALID)
g_application.OnAction(*(CAction *)pMsg->lpVoid);
else
{
CGUIWindow *pWindow = g_windowManager.GetWindow(pMsg->dwParam1);
if (pWindow)
pWindow->OnAction(*(CAction *)pMsg->lpVoid);
else
CLog::Log(LOGWARNING, "Failed to get window with ID %i to send an action to", pMsg->dwParam1);
}
}
}
break;
case TMSG_GUI_INFOLABEL:
{
if (pMsg->lpVoid)
{
vector<CStdString> *infoLabels = (vector<CStdString> *)pMsg->lpVoid;
for (unsigned int i = 0; i < pMsg->params.size(); i++)
infoLabels->push_back(g_infoManager.GetLabel(g_infoManager.TranslateString(pMsg->params[i])));
}
}
break;
case TMSG_GUI_INFOBOOL:
{
if (pMsg->lpVoid)
{
vector<bool> *infoLabels = (vector<bool> *)pMsg->lpVoid;
for (unsigned int i = 0; i < pMsg->params.size(); i++)
infoLabels->push_back(g_infoManager.GetBool(g_infoManager.TranslateString(pMsg->params[i])));
}
}
示例10: OnApplicationMessage
void CGUIWindowManager::OnApplicationMessage(ThreadMessage* pMsg)
{
switch (pMsg->dwMessage)
{
case TMSG_GUI_DIALOG_OPEN:
{
if (pMsg->lpVoid)
static_cast<CGUIDialog*>(pMsg->lpVoid)->Open();
else
{
CGUIDialog* pDialog = static_cast<CGUIDialog*>(GetWindow(pMsg->param1));
if (pDialog)
pDialog->Open();
}
}
break;
case TMSG_GUI_WINDOW_CLOSE:
{
CGUIWindow *window = static_cast<CGUIWindow *>(pMsg->lpVoid);
if (window)
window->Close(pMsg->param1 & 0x1 ? true : false, pMsg->param1, pMsg->param1 & 0x2 ? true : false);
}
break;
case TMSG_GUI_ACTIVATE_WINDOW:
{
ActivateWindow(pMsg->param1, pMsg->params, pMsg->param2 > 0);
}
break;
case TMSG_GUI_ADDON_DIALOG:
{
if (pMsg->lpVoid)
{ // TODO: This is ugly - really these python dialogs should just be normal XBMC dialogs
static_cast<ADDON::CGUIAddonWindowDialog *>(pMsg->lpVoid)->Show_Internal(pMsg->param2 > 0);
}
}
break;
#ifdef HAS_PYTHON
case TMSG_GUI_PYTHON_DIALOG:
{
// This hack is not much better but at least I don't need to make ApplicationMessenger
// know about Addon (Python) specific classes.
CAction caction(pMsg->param1);
static_cast<CGUIWindow*>(pMsg->lpVoid)->OnAction(caction);
}
break;
#endif
case TMSG_GUI_ACTION:
{
if (pMsg->lpVoid)
{
CAction *action = static_cast<CAction *>(pMsg->lpVoid);
if (pMsg->param1 == WINDOW_INVALID)
g_application.OnAction(*action);
else
{
CGUIWindow *pWindow = GetWindow(pMsg->param1);
if (pWindow)
pWindow->OnAction(*action);
else
CLog::Log(LOGWARNING, "Failed to get window with ID %i to send an action to", pMsg->param1);
}
delete action;
}
}
break;
case TMSG_GUI_MESSAGE:
{
if (pMsg->lpVoid)
{
CGUIMessage *message = static_cast<CGUIMessage *>(pMsg->lpVoid);
SendMessage(*message, pMsg->param1);
delete message;
}
}
break;
}
}