bool CGUIButtonControl::OnMessage(CGUIMessage& message) { if (message.GetControlId() == GetID()) { if (message.GetMessage() == GUI_MSG_LABEL_SET) { SetLabel(message.GetLabel()); return true; } if (message.GetMessage() == GUI_MSG_LABEL2_SET) { SetLabel2(message.GetLabel()); return true; } if (message.GetMessage() == GUI_MSG_IS_SELECTED) { message.SetParam1(m_bSelected ? 1 : 0); return true; } if (message.GetMessage() == GUI_MSG_SET_SELECTED) { if (!m_bSelected) SetInvalid(); m_bSelected = true; return true; } if (message.GetMessage() == GUI_MSG_SET_DESELECTED) { if (m_bSelected) SetInvalid(); m_bSelected = false; return true; } } return CGUIControl::OnMessage(message); }
bool CGUISelectButtonControl::OnMessage(CGUIMessage& message) { if ( message.GetControlId() == GetID() ) { if (message.GetMessage() == GUI_MSG_LABEL_ADD) { if (m_vecItems.size() <= 0) { m_iCurrentItem = 0; m_iDefaultItem = 0; } m_vecItems.push_back(message.GetLabel()); return true; } else if (message.GetMessage() == GUI_MSG_LABEL_RESET) { m_vecItems.erase(m_vecItems.begin(), m_vecItems.end()); m_iCurrentItem = -1; m_iDefaultItem = -1; return true; } else if (message.GetMessage() == GUI_MSG_ITEM_SELECTED) { message.SetParam1(m_iCurrentItem); if (m_iCurrentItem >= 0 && m_iCurrentItem < (int)m_vecItems.size()) message.SetLabel(m_vecItems[m_iCurrentItem]); return true; } else if (message.GetMessage() == GUI_MSG_ITEM_SELECT) { m_iDefaultItem = m_iCurrentItem = message.GetParam1(); return true; } } return CGUIButtonControl::OnMessage(message); }
bool CGUIWindow::OnMessage(CGUIMessage& message) { switch ( message.GetMessage() ) { case GUI_MSG_WINDOW_INIT: { CLog::Log(LOGDEBUG, "------ Window Init (%s) ------", GetProperty("xmlfile").c_str()); if (m_dynamicResourceAlloc || !m_bAllocated) AllocResources(); OnInitWindow(); return true; } break; case GUI_MSG_WINDOW_DEINIT: { CLog::Log(LOGDEBUG, "------ Window Deinit (%s) ------", GetProperty("xmlfile").c_str()); OnDeinitWindow(message.GetParam1()); // now free the window if (m_dynamicResourceAlloc) FreeResources(); return true; } break; case GUI_MSG_CLICKED: { // a specific control was clicked CLICK_EVENT clickEvent = m_mapClickEvents[ message.GetSenderId() ]; // determine if there are any handlers for this event if (clickEvent.HasAHandler()) { // fire the message to all handlers clickEvent.Fire(message); } break; } case GUI_MSG_SELCHANGED: { // a selection within a specific control has changed SELECTED_EVENT selectedEvent = m_mapSelectedEvents[ message.GetSenderId() ]; // determine if there are any handlers for this event if (selectedEvent.HasAHandler()) { // fire the message to all handlers selectedEvent.Fire(message); } break; } case GUI_MSG_FOCUSED: { // a control has been focused if (HasID(message.GetSenderId())) { m_focusedControl = message.GetControlId(); return true; } break; } case GUI_MSG_LOSTFOCUS: { // nothing to do at the window level when we lose focus return true; } case GUI_MSG_MOVE: { if (HasID(message.GetSenderId())) return OnMove(message.GetControlId(), message.GetParam1()); break; } case GUI_MSG_SETFOCUS: { // CLog::Log(LOGDEBUG,"set focus to control:%i window:%i (%i)\n", message.GetControlId(),message.GetSenderId(), GetID()); if ( message.GetControlId() ) { // first unfocus the current control CGUIControl *control = GetFocusedControl(); if (control) { CGUIMessage msgLostFocus(GUI_MSG_LOSTFOCUS, GetID(), control->GetID(), message.GetControlId()); control->OnMessage(msgLostFocus); } // get the control to focus CGUIControl* pFocusedControl = GetFirstFocusableControl(message.GetControlId()); if (!pFocusedControl) pFocusedControl = (CGUIControl *)GetControl(message.GetControlId()); // and focus it if (pFocusedControl) return pFocusedControl->OnMessage(message); } return true; } break; case GUI_MSG_EXCLUSIVE_MOUSE: { m_exclusiveMouseControl = message.GetSenderId(); return true; } break; case GUI_MSG_GESTURE_NOTIFY: { CAction action(ACTION_GESTURE_NOTIFY, 0, (float)message.GetParam1(), (float)message.GetParam2(), 0, 0); EVENT_RESULT result = OnMouseAction(action); message.SetParam1(result); return result != EVENT_RESULT_UNHANDLED; } case GUI_MSG_ADD_CONTROL: { if (message.GetPointer()) { CGUIControl *control = (CGUIControl *)message.GetPointer(); control->AllocResources(); AddControl(control); } return true; } case GUI_MSG_REMOVE_CONTROL: { if (message.GetPointer()) { CGUIControl *control = (CGUIControl *)message.GetPointer(); RemoveControl(control); control->FreeResources(true); delete control; } return true; } case GUI_MSG_NOTIFY_ALL: { // only process those notifications that come from this window, or those intended for every window if (HasID(message.GetSenderId()) || !message.GetSenderId()) { if (message.GetParam1() == GUI_MSG_PAGE_CHANGE || message.GetParam1() == GUI_MSG_REFRESH_THUMBS || message.GetParam1() == GUI_MSG_REFRESH_LIST || message.GetParam1() == GUI_MSG_WINDOW_RESIZE) { // alter the message accordingly, and send to all controls for (iControls it = m_children.begin(); it != m_children.end(); ++it) { CGUIControl *control = *it; CGUIMessage msg(message.GetParam1(), message.GetControlId(), control->GetID(), message.GetParam2()); control->OnMessage(msg); } } } } break; } return SendControlMessage(message); }
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); }
bool CGUIBaseContainer::OnMessage(CGUIMessage& message) { if (message.GetControlId() == GetID() ) { if (!m_staticContent) { if (message.GetMessage() == GUI_MSG_LABEL_BIND && message.GetPointer()) { // bind our items Reset(); CFileItemList *items = (CFileItemList *)message.GetPointer(); for (int i = 0; i < items->Size(); i++) m_items.push_back(items->Get(i)); UpdateLayout(true); // true to refresh all items UpdateScrollByLetter(); SelectItem(message.GetParam1()); return true; } else if (message.GetMessage() == GUI_MSG_LABEL_RESET) { Reset(); SetPageControlRange(); return true; } } if (message.GetMessage() == GUI_MSG_ITEM_SELECT) { SelectItem(message.GetParam1()); return true; } else if (message.GetMessage() == GUI_MSG_ITEM_SELECTED) { message.SetParam1(GetSelectedItem()); return true; } else if (message.GetMessage() == GUI_MSG_PAGE_CHANGE) { if (message.GetSenderId() == m_pageControl && IsVisible()) { // update our page if we're visible - not much point otherwise if ((int)message.GetParam1() != GetOffset()) m_pageChangeTimer.StartZero(); ScrollToOffset(message.GetParam1()); return true; } } else if (message.GetMessage() == GUI_MSG_REFRESH_LIST) { // update our list contents for (unsigned int i = 0; i < m_items.size(); ++i) m_items[i]->SetInvalid(); } else if (message.GetMessage() == GUI_MSG_MOVE_OFFSET) { int count = (int)message.GetParam1(); while (count < 0) { MoveUp(true); count++; } while (count > 0) { MoveDown(true); count--; } return true; } } return CGUIControl::OnMessage(message); }
bool CGUISpinControl::OnMessage(CGUIMessage& message) { if (CGUIControl::OnMessage(message) ) return true; if (message.GetControlId() == GetID() ) { switch (message.GetMessage()) { case GUI_MSG_ITEM_SELECT: if (SPIN_CONTROL_TYPE_PAGE == m_iType) { m_currentItem = message.GetParam1(); return true; } SetValue( message.GetParam1()); if (message.GetParam2() == SPIN_BUTTON_DOWN || message.GetParam2() == SPIN_BUTTON_UP) m_iSelect = message.GetParam2(); return true; break; case GUI_MSG_LABEL_RESET: if (SPIN_CONTROL_TYPE_PAGE == m_iType) { m_itemsPerPage = message.GetParam1(); m_numItems = message.GetParam2(); return true; } { Clear(); return true; } break; case GUI_MSG_SHOWRANGE: if (message.GetParam1() ) m_bShowRange = true; else m_bShowRange = false; break; case GUI_MSG_SET_LABELS: if (message.GetPointer()) { const vector< pair<string, int> > *labels = (const vector< pair<string, int> > *)message.GetPointer(); Clear(); for (vector< pair<string, int> >::const_iterator i = labels->begin(); i != labels->end(); ++i) AddLabel(i->first, i->second); SetValue( message.GetParam1()); } break; case GUI_MSG_LABEL_ADD: { AddLabel(message.GetLabel(), message.GetParam1()); return true; } break; case GUI_MSG_ITEM_SELECTED: { message.SetParam1( GetValue() ); message.SetParam2(m_iSelect); if (m_iType == SPIN_CONTROL_TYPE_TEXT) { if ( m_iValue >= 0 && m_iValue < (int)m_vecLabels.size() ) message.SetLabel( m_vecLabels[m_iValue]); } return true; } case GUI_MSG_PAGE_UP: if (CanMoveUp()) MoveUp(); return true; case GUI_MSG_PAGE_DOWN: if (CanMoveDown()) MoveDown(); return true; case GUI_MSG_MOVE_OFFSET: { int count = (int)message.GetParam1(); while (count < 0) { MoveUp(); count++; } while (count > 0) { MoveDown(); count--; } return true; } } } return false; }