int CGUIDialogContextMenu::AddButton(const CStdString &strLabel) { // add a button to our control CGUIButtonControl *pButtonTemplate = (CGUIButtonControl *)GetFirstFocusableControl(BUTTON_TEMPLATE); if (!pButtonTemplate) pButtonTemplate = (CGUIButtonControl *)GetControl(BUTTON_TEMPLATE); if (!pButtonTemplate) return 0; CGUIButtonControl *pButton = new CGUIButtonControl(*pButtonTemplate); if (!pButton) return 0; // set the button's ID and position m_iNumButtons++; int id = BUTTON_TEMPLATE + m_iNumButtons; pButton->SetID(id); pButton->SetPosition(pButtonTemplate->GetXPosition(), (m_iNumButtons - 1)*(pButtonTemplate->GetHeight() + SPACE_BETWEEN_BUTTONS)); pButton->SetVisible(true); pButton->SetNavigation(id - 1, id + 1, id, id); pButton->SetLabel(strLabel); AddControl(pButton); // and update the size of our menu CGUIControl *pControl = (CGUIControl *)GetControl(BACKGROUND_IMAGE); if (pControl) { pControl->SetHeight(m_iNumButtons*(pButtonTemplate->GetHeight() + SPACE_BETWEEN_BUTTONS)); CGUIControl *pControl2 = (CGUIControl *)GetControl(BACKGROUND_BOTTOM); if (pControl2) pControl2->SetPosition(pControl2->GetXPosition(), pControl->GetYPosition() + pControl->GetHeight()); } return m_iNumButtons; }
void CGUIDialogAddonSettings::CreateSections() { CGUIControlGroupList *group = dynamic_cast<CGUIControlGroupList *>(GetControl(CONTROL_SECTION_AREA)); CGUIButtonControl *originalButton = dynamic_cast<CGUIButtonControl *>(GetControl(CONTROL_DEFAULT_SECTION_BUTTON)); if (!m_addon) return; if (originalButton) originalButton->SetVisible(false); // clear the category group FreeSections(); // grab our categories const TiXmlElement *category = m_addon->GetSettingsXML()->FirstChildElement("category"); if (!category) // add a default one... category = m_addon->GetSettingsXML(); int buttonID = CONTROL_START_SECTION; while (category) { // add a category CGUIButtonControl *button = originalButton ? originalButton->Clone() : NULL; std::string label = GetString(category->Attribute("label")); if (label.empty()) label = g_localizeStrings.Get(128); if (buttonID >= CONTROL_START_SETTING) { CLog::Log(LOGERROR, "%s - cannot have more than %d categories - simplify your addon!", __FUNCTION__, CONTROL_START_SETTING - CONTROL_START_SECTION); break; } // add the category button if (button && group) { button->SetID(buttonID++); button->SetLabel(label); button->SetVisible(true); group->AddControl(button); } // grab a local copy of all the settings in this category const TiXmlElement *setting = category->FirstChildElement("setting"); while (setting) { const std::string id = XMLUtils::GetAttribute(setting, "id"); if (!id.empty()) m_settings[id] = m_addon->GetSetting(id); setting = setting->NextSiblingElement("setting"); } category = category->NextSiblingElement("category"); } m_totalSections = buttonID - CONTROL_START_SECTION; }
void CGUIDialogContextMenu::SetupButtons() { if (!m_buttons.size()) return; // disable the template button control CGUIButtonControl *pButtonTemplate = (CGUIButtonControl *)GetFirstFocusableControl(BUTTON_TEMPLATE); if (!pButtonTemplate) pButtonTemplate = (CGUIButtonControl *)GetControl(BUTTON_TEMPLATE); if (!pButtonTemplate) return; pButtonTemplate->SetVisible(false); // 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->SetPosition(pButtonTemplate->GetXPosition(), i*(pButtonTemplate->GetHeight() + SPACE_BETWEEN_BUTTONS)); pButton->SetVisible(true); pButton->SetNavigation(id - 1, id + 1, id, id); pButton->SetLabel(m_buttons[i].second); AddControl(pButton); } } // update the navigation of the first and last buttons CGUIControl *pControl = (CGUIControl *)GetControl(BUTTON_START); if (pControl) pControl->SetNavigation(BUTTON_END, pControl->GetControlIdDown(), pControl->GetControlIdLeft(), pControl->GetControlIdRight()); pControl = (CGUIControl *)GetControl(BUTTON_END); if (pControl) pControl->SetNavigation(pControl->GetControlIdUp(), BUTTON_START, pControl->GetControlIdLeft(), pControl->GetControlIdRight()); // fix up the height of the background image pControl = (CGUIControl *)GetControl(BACKGROUND_IMAGE); if (pControl) { pControl->SetHeight(m_buttons.size() * (pButtonTemplate->GetHeight() + SPACE_BETWEEN_BUTTONS)); CGUIControl *pControl2 = (CGUIControl *)GetControl(BACKGROUND_BOTTOM); if (pControl2) pControl2->SetPosition(pControl2->GetXPosition(), pControl->GetYPosition() + pControl->GetHeight()); } // update our default control if (m_defaultControl < BUTTON_START || m_defaultControl > BUTTON_END) m_defaultControl = BUTTON_START; while (m_defaultControl <= BUTTON_END && !(GetControl(m_defaultControl)->CanFocus())) m_defaultControl++; }
void CGUIDialogSettingsBase::SetupControls(bool createSettings /* = true */) { // cleanup first, if necessary FreeControls(); // get the section CSettingSection *section = GetSection(); if (section == NULL) return; // update the screen string SetHeading(section->GetLabel()); // get the categories we need m_categories = section->GetCategories((SettingLevel)GetSettingLevel()); if (m_categories.empty()) m_categories.push_back(m_dummyCategory); // get all controls m_pOriginalSpin = dynamic_cast<CGUISpinControlEx*>(GetControl(CONTROL_DEFAULT_SPIN)); m_pOriginalSlider = dynamic_cast<CGUISettingsSliderControl*>(GetControl(CONTROL_DEFAULT_SLIDER)); m_pOriginalRadioButton = dynamic_cast<CGUIRadioButtonControl *>(GetControl(CONTROL_DEFAULT_RADIOBUTTON)); m_pOriginalCategoryButton = dynamic_cast<CGUIButtonControl *>(GetControl(CONTROL_DEFAULT_CATEGORY_BUTTON)); m_pOriginalButton = dynamic_cast<CGUIButtonControl *>(GetControl(CONTROL_DEFAULT_BUTTON)); m_pOriginalImage = dynamic_cast<CGUIImage *>(GetControl(CONTROL_DEFAULT_SEPARATOR)); m_pOriginalEdit = dynamic_cast<CGUIEditControl *>(GetControl(CONTROL_DEFAULT_EDIT)); if (!m_pOriginalEdit && m_pOriginalButton) { m_pOriginalEdit = new CGUIEditControl(*m_pOriginalButton); m_newOriginalEdit = true; } if (m_pOriginalSpin) m_pOriginalSpin->SetVisible(false); if (m_pOriginalSlider) m_pOriginalSlider->SetVisible(false); if (m_pOriginalRadioButton) m_pOriginalRadioButton->SetVisible(false); if (m_pOriginalButton) m_pOriginalButton->SetVisible(false); if (m_pOriginalCategoryButton) m_pOriginalCategoryButton->SetVisible(false); m_pOriginalEdit->SetVisible(false); if (m_pOriginalImage) m_pOriginalImage->SetVisible(false); if (m_pOriginalCategoryButton != NULL) { // setup our control groups... CGUIControlGroupList *group = dynamic_cast<CGUIControlGroupList *>(GetControl(CATEGORY_GROUP_ID)); if (!group) return; // go through the categories and create the necessary buttons int buttonIdOffset = 0; for (SettingCategoryList::const_iterator category = m_categories.begin(); category != m_categories.end(); category++) { CGUIButtonControl *pButton = NULL; if (m_pOriginalCategoryButton->GetControlType() == CGUIControl::GUICONTROL_TOGGLEBUTTON) pButton = new CGUIToggleButtonControl(*(CGUIToggleButtonControl *)m_pOriginalCategoryButton); else pButton = new CGUIButtonControl(*m_pOriginalCategoryButton); pButton->SetLabel(GetLocalizedString((*category)->GetLabel())); pButton->SetID(CONTROL_SETTINGS_START_BUTTONS + buttonIdOffset); pButton->SetVisible(true); pButton->AllocResources(); group->AddControl(pButton); buttonIdOffset++; } } if (createSettings) CreateSettings(); // set focus correctly depending on whether there are categories visible or not m_defaultControl = m_pOriginalCategoryButton != NULL ? CATEGORY_GROUP_ID : SETTINGS_GROUP_ID; }
void CGUIDialogContextMenu::SetupButtons() { if (!m_buttons.size()) return; // disable the template button control CGUIButtonControl *pButtonTemplate = (CGUIButtonControl *)GetFirstFocusableControl(BUTTON_TEMPLATE); if (!pButtonTemplate) pButtonTemplate = (CGUIButtonControl *)GetControl(BUTTON_TEMPLATE); if (!pButtonTemplate) return; pButtonTemplate->SetVisible(false); CGUIControlGroupList* pGroupList = NULL; { const CGUIControl* pControl = GetControl(GROUP_LIST); if (pControl && pControl->GetControlType() == GUICONTROL_GROUPLIST) pGroupList = (CGUIControlGroupList*)pControl; } // 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()); pGroupList->AddControl(pButton); } #if PRE_SKIN_VERSION_11_COMPATIBILITY else { pButton->SetPosition(pButtonTemplate->GetXPosition(), i*(pButtonTemplate->GetHeight() + SPACE_BETWEEN_BUTTONS)); pButton->SetNavigation(id - 1, id + 1, id, id); AddControl(pButton); } #endif } } CGUIControl *pControl = NULL; #if PRE_SKIN_VERSION_11_COMPATIBILITY if (!pGroupList) { // if we don't have grouplist update the navigation of the first and last buttons pControl = (CGUIControl *)GetControl(BUTTON_START); if (pControl) pControl->SetNavigation(BUTTON_END, pControl->GetControlIdDown(), pControl->GetControlIdLeft(), pControl->GetControlIdRight()); pControl = (CGUIControl *)GetControl(BUTTON_END); if (pControl) pControl->SetNavigation(pControl->GetControlIdUp(), BUTTON_START, pControl->GetControlIdLeft(), pControl->GetControlIdRight()); } #endif // fix up background images placement and size 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(pControl->GetHeight() - pGroupList->Size() + pGroupList->GetHeight()); } else { // keep gap between right edges of grouplist and background image pControl->SetWidth(pControl->GetWidth() - pGroupList->Size() + pGroupList->GetWidth()); } } #if PRE_SKIN_VERSION_11_COMPATIBILITY else pControl->SetHeight(m_buttons.size() * (pButtonTemplate->GetHeight() + SPACE_BETWEEN_BUTTONS)); if (pGroupList && pGroupList->GetOrientation() == HORIZONTAL) { // if there is grouplist control with horizontal orientation - adjust width of top and bottom background CGUIControl* pControl2 = (CGUIControl *)GetControl(BACKGROUND_TOP); if (pControl2) pControl2->SetWidth(pControl->GetWidth()); pControl2 = (CGUIControl *)GetControl(BACKGROUND_BOTTOM); if (pControl2) pControl2->SetWidth(pControl->GetWidth()); } else { // adjust position of bottom background CGUIControl* pControl2 = (CGUIControl *)GetControl(BACKGROUND_BOTTOM); if (pControl2) pControl2->SetPosition(pControl2->GetXPosition(), pControl->GetYPosition() + pControl->GetHeight()); } #endif } // update our default control if (m_defaultControl < BUTTON_START || m_defaultControl > BUTTON_END) m_defaultControl = BUTTON_START; while (m_defaultControl <= BUTTON_END && !(GetControl(m_defaultControl)->CanFocus())) m_defaultControl++; }
void CGUIWindowSettingsCategory::SetupControls(bool createSettings /* = true */) { // cleanup first, if necessary FreeControls(); m_pOriginalSpin = (CGUISpinControlEx*)GetControl(CONTROL_DEFAULT_SPIN); m_pOriginalRadioButton = (CGUIRadioButtonControl *)GetControl(CONTROL_DEFAULT_RADIOBUTTON); m_pOriginalCategoryButton = (CGUIButtonControl *)GetControl(CONTROL_DEFAULT_CATEGORY_BUTTON); m_pOriginalButton = (CGUIButtonControl *)GetControl(CONTROL_DEFAULT_BUTTON); m_pOriginalImage = (CGUIImage *)GetControl(CONTROL_DEFAULT_SEPARATOR); if (!m_pOriginalCategoryButton || !m_pOriginalSpin || !m_pOriginalRadioButton || !m_pOriginalButton) return ; m_pOriginalEdit = (CGUIEditControl *)GetControl(CONTROL_DEFAULT_EDIT); if (!m_pOriginalEdit || m_pOriginalEdit->GetControlType() != CGUIControl::GUICONTROL_EDIT) { delete m_pOriginalEdit; m_pOriginalEdit = new CGUIEditControl(*m_pOriginalButton); newOriginalEdit = true; } m_pOriginalSpin->SetVisible(false); m_pOriginalRadioButton->SetVisible(false); m_pOriginalButton->SetVisible(false); m_pOriginalCategoryButton->SetVisible(false); m_pOriginalEdit->SetVisible(false); if (m_pOriginalImage) m_pOriginalImage->SetVisible(false); // setup our control groups... CGUIControlGroupList *group = (CGUIControlGroupList *)GetControl(CATEGORY_GROUP_ID); if (!group) return; CSettingSection *section = GetSection(m_iSection); if (section == NULL) return; // update the screen string SET_CONTROL_LABEL(CONTROL_SETTINGS_LABEL, section->GetLabel()); SET_CONTROL_LABEL(CONTRL_BTN_LEVELS, 10036 + (int)CViewStateSettings::Get().GetSettingLevel()); // get the categories we need m_categories = section->GetCategories(CViewStateSettings::Get().GetSettingLevel()); if (m_categories.empty()) m_categories.push_back(m_dummyCategory); // go through the categories and create the necessary buttons int buttonIdOffset = 0; for (SettingCategoryList::const_iterator category = m_categories.begin(); category != m_categories.end(); ++category) { CGUIButtonControl *pButton = NULL; if (m_pOriginalCategoryButton->GetControlType() == CGUIControl::GUICONTROL_TOGGLEBUTTON) pButton = new CGUIToggleButtonControl(*(CGUIToggleButtonControl *)m_pOriginalCategoryButton); else pButton = new CGUIButtonControl(*m_pOriginalCategoryButton); pButton->SetLabel(g_localizeStrings.Get((*category)->GetLabel())); pButton->SetID(CONTROL_START_BUTTONS + buttonIdOffset); pButton->SetVisible(true); pButton->AllocResources(); group->AddControl(pButton); buttonIdOffset++; } if (createSettings) CreateSettings(); // set focus correctly m_defaultControl = CONTROL_START_BUTTONS; }
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(); }