void CGUIDialogSettingsBase::DoProcess(unsigned int currentTime, CDirtyRegionList &dirtyregions) { // update alpha status of current button bool bAlphaFaded = false; CGUIControl *control = GetFirstFocusableControl(CONTROL_SETTINGS_START_BUTTONS + m_iCategory); if (control && !control->HasFocus()) { if (control->GetControlType() == CGUIControl::GUICONTROL_BUTTON) { control->SetFocus(true); ((CGUIButtonControl *)control)->SetAlpha(0x80); bAlphaFaded = true; } else if (control->GetControlType() == CGUIControl::GUICONTROL_TOGGLEBUTTON) { control->SetFocus(true); ((CGUIButtonControl *)control)->SetSelected(true); bAlphaFaded = true; } } CGUIDialog::DoProcess(currentTime, dirtyregions); if (control && bAlphaFaded) { control->SetFocus(false); if (control->GetControlType() == CGUIControl::GUICONTROL_BUTTON) ((CGUIButtonControl *)control)->SetAlpha(0xFF); else ((CGUIButtonControl *)control)->SetSelected(false); } }
bool CGUIControlGroup::OnMessage(CGUIMessage& message) { switch (message.GetMessage() ) { case GUI_MSG_ITEM_SELECT: { if (message.GetControlId() == GetID()) { m_focusedControl = message.GetParam1(); return true; } break; } case GUI_MSG_ITEM_SELECTED: { if (message.GetControlId() == GetID()) { message.SetParam1(m_focusedControl); return true; } break; } case GUI_MSG_FOCUSED: { // a control has been focused m_focusedControl = message.GetControlId(); SetFocus(true); // tell our parent thatwe have focus if (m_parentControl) m_parentControl->OnMessage(message); return true; } case GUI_MSG_SETFOCUS: { // first try our last focused control... if (!m_defaultAlways && m_focusedControl) { CGUIControl *control = GetFirstFocusableControl(m_focusedControl); if (control) { CGUIMessage msg(GUI_MSG_SETFOCUS, GetParentID(), control->GetID()); return control->OnMessage(msg); } } // ok, no previously focused control, try the default control first if (m_defaultControl) { CGUIControl *control = GetFirstFocusableControl(m_defaultControl); if (control) { CGUIMessage msg(GUI_MSG_SETFOCUS, GetParentID(), control->GetID()); return control->OnMessage(msg); } } // no success with the default control, so just find one to focus CGUIControl *control = GetFirstFocusableControl(0); if (control) { CGUIMessage msg(GUI_MSG_SETFOCUS, GetParentID(), control->GetID()); return control->OnMessage(msg); } // unsuccessful return false; break; } case GUI_MSG_LOSTFOCUS: { // set all subcontrols unfocused for (iControls it = m_children.begin(); it != m_children.end(); ++it) (*it)->SetFocus(false); if (!HasID(message.GetParam1())) { // we don't have the new id, so unfocus SetFocus(false); if (m_parentControl) m_parentControl->OnMessage(message); } return true; } break; case GUI_MSG_PAGE_CHANGE: case GUI_MSG_REFRESH_THUMBS: case GUI_MSG_REFRESH_LIST: case GUI_MSG_WINDOW_RESIZE: { // send to all child controls (make sure the target is the control id) for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIMessage msg(message.GetMessage(), message.GetSenderId(), (*it)->GetID(), message.GetParam1()); (*it)->OnMessage(msg); } return true; } break; } bool handled(false); //not intented for any specific control, send to all childs and our base handler. if (message.GetControlId() == 0) { for (iControls it = m_children.begin();it != m_children.end(); ++it) { CGUIControl* control = *it; handled |= control->OnMessage(message); } return CGUIControl::OnMessage(message) || handled; } // if it's intended for us, then so be it if (message.GetControlId() == GetID()) return CGUIControl::OnMessage(message); return SendControlMessage(message); }
void CGUIDialogContextMenu::SetupButtons() { if (!m_buttons.size()) return; // disable the template button control CGUIButtonControl *pButtonTemplate = dynamic_cast<CGUIButtonControl *>(GetFirstFocusableControl(BUTTON_TEMPLATE)); if (!pButtonTemplate) pButtonTemplate = dynamic_cast<CGUIButtonControl *>(GetControl(BUTTON_TEMPLATE)); if (!pButtonTemplate) return; pButtonTemplate->SetVisible(false); CGUIControlGroupList* pGroupList = dynamic_cast<CGUIControlGroupList *>(GetControl(GROUP_LIST)); // add our buttons for (unsigned int i = 0; i < m_buttons.size(); i++) { CGUIButtonControl *pButton = new CGUIButtonControl(*pButtonTemplate); if (pButton) { // set the button's ID and position int id = BUTTON_START + i; pButton->SetID(id); pButton->SetVisible(true); pButton->SetLabel(m_buttons[i].second); if (pGroupList) { pButton->SetPosition(pButtonTemplate->GetXPosition(), pButtonTemplate->GetYPosition()); // try inserting context buttons at position specified by template // button, if template button is not in grouplist fallback to adding // new buttons at the end of grouplist if (!pGroupList->InsertControl(pButton, pButtonTemplate)) pGroupList->AddControl(pButton); } } } // fix up background images placement and size CGUIControl *pControl = (CGUIControl *)GetControl(BACKGROUND_IMAGE); if (pControl) { // first set size of background image if (pGroupList) { if (pGroupList->GetOrientation() == VERTICAL) { // keep gap between bottom edges of grouplist and background image pControl->SetHeight(m_backgroundImageSize - pGroupList->Size() + pGroupList->GetHeight()); } else { // keep gap between right edges of grouplist and background image pControl->SetWidth(m_backgroundImageSize - pGroupList->Size() + pGroupList->GetWidth()); } } } // update our default control if (pGroupList) m_defaultControl = pGroupList->GetID(); }