void CGUIDialogKeyboard::OnInitWindow() { CGUIDialog::OnInitWindow(); m_bIsConfirmed = false; // set alphabetic (capitals) UpdateButtons(); CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { pEdit->ShowCursor(); } // set heading if (!m_strHeading.IsEmpty()) { SET_CONTROL_LABEL(CTL_LABEL_HEADING, m_strHeading); SET_CONTROL_VISIBLE(CTL_LABEL_HEADING); } else { SET_CONTROL_HIDDEN(CTL_LABEL_HEADING); } }
void CGUIDialogKeyboardGeneric::UpdateLabel() // FIXME seems to be called twice for one USB SDL keyboard action/character { CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { CStdStringW edit = m_strEdit; if (m_hiddenInput) { // convert to *'s edit.Empty(); if (m_lastRemoteClickTime + REMOTE_SMS_DELAY > CTimeUtils::GetFrameTime() && m_strEdit.size()) { // using the remove to input, so display the last key input edit.append(m_strEdit.size() - 1, L'*'); edit.append(1, m_strEdit[m_strEdit.size() - 1]); } else edit.append(m_strEdit.size(), L'*'); } // convert back to utf8 CStdString utf8Edit; g_charsetConverter.wToUTF8(edit, utf8Edit); pEdit->SetLabel(utf8Edit); // Send off a search message unsigned int now = CTimeUtils::GetFrameTime(); // don't send until the REMOTE_SMS_DELAY has passed if (m_lastRemoteClickTime && m_lastRemoteClickTime + REMOTE_SMS_DELAY >= now) return; if (m_pCharCallback) m_pCharCallback(this, utf8Edit); } }
void CGUIDialogKeyboardGeneric::OnIPAddress() { // find any IP address in the current string if there is any // We match to #.#.#.# CStdString utf8String; g_charsetConverter.wToUTF8(m_strEdit, utf8String); CStdString ip; CRegExp reg; reg.RegComp("[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+"); int start = reg.RegFind(utf8String.c_str()); int length = 0; if (start > -1) { length = reg.GetSubLength(0); ip = utf8String.Mid(start, length); } else start = utf8String.size(); if (CGUIDialogNumeric::ShowAndGetIPAddress(ip, g_localizeStrings.Get(14068))) { utf8String = utf8String.Left(start) + ip + utf8String.Mid(start + length); g_charsetConverter.utf8ToW(utf8String, m_strEdit); UpdateLabel(); CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) pEdit->SetCursorPos(m_strEdit.size()); } }
void CGUIDialogBoxeeBrowseMenu::Render() { #ifdef HAS_EMBEDDED if (m_downloadCounter % 60 == 0) { m_downloadCounter = 0; if (g_boxeeVersionUpdateManager.GetBoxeeVerUpdateJob().GetVersionUpdateDownloadStatus() == VUDS_DOWNLOADING) { CDownloadInfo downloadnfo; g_boxeeVersionUpdateManager.GetDownloadInfo(downloadnfo); double percent = downloadnfo.m_CurrentDownloadProgress; CGUILabelControl* pControl = (CGUILabelControl*) GetControl(DOWNLOADING_LABEL); if (pControl) { CStdString percentStr = "%d%%"; CStdString percentLabel; percentLabel.Format(percentStr.c_str(),(int)percent); pControl->SetLabel(percentLabel); } } } m_downloadCounter++; #endif CGUIDialog::Render(); }
void CGUIDialogKeyboardGeneric::OnInitWindow() { CGUIDialog::OnInitWindow(); m_bIsConfirmed = false; // set alphabetic (capitals) UpdateButtons(); CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { pEdit->ShowCursor(); } // set heading if (!m_strHeading.empty()) { SET_CONTROL_LABEL(CTL_LABEL_HEADING, m_strHeading); SET_CONTROL_VISIBLE(CTL_LABEL_HEADING); } else { SET_CONTROL_HIDDEN(CTL_LABEL_HEADING); } CVariant data; data["title"] = m_strHeading; data["type"] = !m_hiddenInput ? "keyboard" : "password"; data["value"] = GetText(); ANNOUNCEMENT::CAnnouncementManager::Announce(ANNOUNCEMENT::Input, "xbmc", "OnInputRequested", data); }
void CGUIDialogKeyboard::OnInitWindow() { #ifdef __APPLE__ // Override skin defaults to always make the defaul control 'DONE' to allow // natual entry on keyboards. // m_dwDefaultFocusControlID = 300; #endif CGUIDialog::OnInitWindow(); m_bIsConfirmed = false; // set alphabetic (capitals) UpdateButtons(); CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { pEdit->ShowCursor(); } // set heading if (!m_strHeading.IsEmpty()) { SET_CONTROL_LABEL(CTL_LABEL_HEADING, m_strHeading); SET_CONTROL_VISIBLE(CTL_LABEL_HEADING); } else { SET_CONTROL_HIDDEN(CTL_LABEL_HEADING); } }
bool CGUIDialog::Load(const CStdString& strFileName, bool bContainsPath) { m_renderOrder = 1; if (!CGUIWindow::Load(strFileName, bContainsPath)) { return false; } // Clip labels to extents if (m_vecControls.size()) { CGUIControl* pBase = m_vecControls[0]; for (ivecControls p = m_vecControls.begin() + 1; p != m_vecControls.end(); ++p) { if ((*p)->GetControlType() == CGUIControl::GUICONTROL_LABEL) { CGUILabelControl* pLabel = (CGUILabelControl*)(*p); if (!pLabel->GetWidth()) { float spacing = (pLabel->GetXPosition() - pBase->GetXPosition()) * 2; pLabel->SetWidth(pBase->GetWidth() - spacing); pLabel->SetTruncate(true); } } } } return true; }
void CGUIDialogKeyboardGeneric::MoveCursor(int iAmount) { CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { pEdit->SetCursorPos(pEdit->GetCursorPos() + iAmount); } }
void CGUIDialogKeyboardGeneric::SetCursorPos(int iPos) { CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { pEdit->SetCursorPos(iPos); } }
void CGUIDialogKeyboardGeneric::OnInitWindow() { CGUIDialog::OnInitWindow(); m_bIsConfirmed = false; m_isKeyboardNavigationMode = false; // fill in the keyboard layouts m_currentLayout = 0; m_layouts.clear(); const KeyboardLayouts& keyboardLayouts = CKeyboardLayoutManager::GetInstance().GetLayouts(); std::vector<CVariant> layoutNames = CSettings::GetInstance().GetList(CSettings::SETTING_LOCALE_KEYBOARDLAYOUTS); for (std::vector<CVariant>::const_iterator layoutName = layoutNames.begin(); layoutName != layoutNames.end(); ++layoutName) { KeyboardLayouts::const_iterator keyboardLayout = keyboardLayouts.find(layoutName->asString()); if (keyboardLayout != keyboardLayouts.end()) m_layouts.push_back(keyboardLayout->second); } // set alphabetic (capitals) UpdateButtons(); // set heading if (!m_strHeading.empty()) { SET_CONTROL_LABEL(CTL_LABEL_HEADING, m_strHeading); SET_CONTROL_VISIBLE(CTL_LABEL_HEADING); } else { SET_CONTROL_HIDDEN(CTL_LABEL_HEADING); } // set type { CGUIMessage msg(GUI_MSG_SET_TYPE, GetID(), CTL_EDIT, m_hiddenInput ? CGUIEditControl::INPUT_TYPE_PASSWORD : CGUIEditControl::INPUT_TYPE_TEXT); OnMessage(msg); } SetEditText(m_text); // get HZLIST label options CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_HZLIST)); CLabelInfo labelInfo = pEdit->GetLabelInfo(); m_listfont = labelInfo.font; m_listwidth = pEdit->GetWidth(); m_hzcode.clear(); m_words.clear(); SET_CONTROL_LABEL(CTL_LABEL_HZCODE, ""); SET_CONTROL_LABEL(CTL_LABEL_HZLIST, ""); CVariant data; data["title"] = m_strHeading; data["type"] = !m_hiddenInput ? "keyboard" : "password"; data["value"] = GetText(); ANNOUNCEMENT::CAnnouncementManager::GetInstance().Announce(ANNOUNCEMENT::Input, "xbmc", "OnInputRequested", data); }
void CGUIDialogKeyboardGeneric::SetCursorPos(int iPos) { if (iPos < 0) iPos = 0; else if (iPos > (int)m_strEdit.size()) iPos = (int)m_strEdit.size(); m_iCursorPos = iPos; CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { pEdit->SetCursorPos(m_iCursorPos + (m_hiddenInput ? 0 : m_iEditingOffset)); } }
void CGUIWindowFullScreen::OnWindowLoaded() { CGUIWindow::OnWindowLoaded(); // override the clear colour - we must never clear fullscreen m_clearBackground = 0; CGUIProgressControl* pProgress = (CGUIProgressControl*)GetControl(CONTROL_PROGRESS); if(pProgress) { if( pProgress->GetInfo() == 0 || pProgress->GetVisibleCondition() == 0) { pProgress->SetInfo(PLAYER_PROGRESS); pProgress->SetVisibleCondition(PLAYER_DISPLAY_AFTER_SEEK, false); pProgress->SetVisible(true); } } CGUILabelControl* pLabel = (CGUILabelControl*)GetControl(LABEL_BUFFERING); if(pLabel && pLabel->GetVisibleCondition() == 0) { pLabel->SetVisibleCondition(PLAYER_CACHING, false); pLabel->SetVisible(true); } pLabel = (CGUILabelControl*)GetControl(LABEL_CURRENT_TIME); if(pLabel && pLabel->GetVisibleCondition() == 0) { pLabel->SetVisibleCondition(PLAYER_DISPLAY_AFTER_SEEK, false); pLabel->SetVisible(true); pLabel->SetLabel("$INFO(VIDEOPLAYER.TIME) / $INFO(VIDEOPLAYER.DURATION)"); } FillInTVGroups(); }
void CGUIWindowFullScreen::OnWindowLoaded() { CGUIWindow::OnWindowLoaded(); CGUIProgressControl* pProgress = (CGUIProgressControl*)GetControl(CONTROL_PROGRESS); if(pProgress) { if( pProgress->GetInfo() == 0 || pProgress->GetVisibleCondition() == 0) { pProgress->SetInfo(PLAYER_PROGRESS); pProgress->SetVisibleCondition(PLAYER_DISPLAY_AFTER_SEEK, false); pProgress->SetVisible(true); } } CGUILabelControl* pLabel = (CGUILabelControl*)GetControl(LABEL_BUFFERING); if(pLabel && pLabel->GetVisibleCondition() == 0) { pLabel->SetVisibleCondition(PLAYER_CACHING, false); pLabel->SetVisible(true); } pLabel = (CGUILabelControl*)GetControl(LABEL_CURRENT_TIME); if(pLabel && pLabel->GetVisibleCondition() == 0) { pLabel->SetVisibleCondition(PLAYER_DISPLAY_AFTER_SEEK, false); pLabel->SetVisible(true); pLabel->SetLabel("$INFO(VIDEOPLAYER.TIME) / $INFO(VIDEOPLAYER.DURATION)"); } }
void CGUIWindowFullScreen::OnWindowLoaded() { CGUIWindow::OnWindowLoaded(); // override the clear colour - we must never clear fullscreen m_clearBackground = 0; CGUIProgressControl* pProgress = dynamic_cast<CGUIProgressControl*>(GetControl(CONTROL_PROGRESS)); if(pProgress) { if( pProgress->GetInfo() == 0 || !pProgress->HasVisibleCondition()) { pProgress->SetInfo(PLAYER_PROGRESS); pProgress->SetVisibleCondition("player.displayafterseek"); pProgress->SetVisible(true); } } CGUILabelControl* pLabel = dynamic_cast<CGUILabelControl*>(GetControl(LABEL_BUFFERING)); if(pLabel && !pLabel->HasVisibleCondition()) { pLabel->SetVisibleCondition("player.caching"); pLabel->SetVisible(true); } pLabel = dynamic_cast<CGUILabelControl*>(GetControl(LABEL_CURRENT_TIME)); if(pLabel && !pLabel->HasVisibleCondition()) { pLabel->SetVisibleCondition("player.displayafterseek"); pLabel->SetVisible(true); pLabel->SetLabel("$INFO(VIDEOPLAYER.TIME) / $INFO(VIDEOPLAYER.DURATION)"); } m_showCodec.Parse("player.showcodec", GetID()); }
void CGUIDialogNumeric::FrameMove() { CStdString strLabel; unsigned int start = 0; unsigned int end = 0; if (m_mode == INPUT_PASSWORD) { for (unsigned int i=0; i < m_number.size(); i++) strLabel += '*'; } else if (m_mode == INPUT_NUMBER) { // simple - just render text directly strLabel = m_number; } else if (m_mode == INPUT_TIME) { // format up the time strLabel = StringUtils::Format("%2d:%02d", m_datetime.wHour, m_datetime.wMinute); start = m_block * 3; end = m_block * 3 + 2; } else if (m_mode == INPUT_TIME_SECONDS) { // format up the time strLabel = StringUtils::Format("%2d:%02d", m_datetime.wMinute, m_datetime.wSecond); start = m_block * 3; end = m_block * 3 + 2; } else if (m_mode == INPUT_DATE) { // format up the date strLabel = StringUtils::Format("%2d/%2d/%4d", m_datetime.wDay, m_datetime.wMonth, m_datetime.wYear); start = m_block * 3; end = m_block * 3 + 2; if (m_block == 2) end = m_block * 3 + 4; } else if (m_mode == INPUT_IP_ADDRESS) { // format up the date strLabel = StringUtils::Format("%3d.%3d.%3d.%3d", m_ip[0], m_ip[1], m_ip[2], m_ip[3]); start = m_block * 4; end = m_block * 4 + 3; } CGUILabelControl *pLabel = (CGUILabelControl *)GetControl(CONTROL_INPUT_LABEL); if (pLabel) { pLabel->SetLabel(strLabel); pLabel->SetHighlight(start, end); } CGUIDialog::FrameMove(); }
void CGUIDialogButtonMenu::FrameMove() { // get the label control CGUILabelControl *pLabel = (CGUILabelControl *)GetControl(CONTROL_BUTTON_LABEL); if (pLabel) { // get the active window, and put it's label into the label control const CGUIControl *pControl = GetFocusedControl(); if (pControl && (pControl->GetControlType() == CGUIControl::GUICONTROL_BUTTON || pControl->GetControlType() == CGUIControl::GUICONTROL_TOGGLEBUTTON)) { CGUIButtonControl *pButton = (CGUIButtonControl *)pControl; pLabel->SetLabel(pButton->GetLabel()); } } CGUIDialog::FrameMove(); }
void CGUIDialogKeyboard::UpdateLabel() // FIXME seems to be called twice for one USB SDL keyboard action/character { CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { CStdStringW edit = m_strEdit; if (m_hiddenInput) { // convert to *'s edit.Empty(); if (m_lastRemoteClickTime + REMOTE_SMS_DELAY > timeGetTime() && m_strEdit.size()) { // using the remove to input, so display the last key input edit.append(m_strEdit.size() - 1, L'*'); edit.append(1, m_strEdit[m_strEdit.size() - 1]); } else edit.append(m_strEdit.size(), L'*'); } // convert back to utf8 CStdString utf8Edit; g_charsetConverter.wToUTF8(edit, utf8Edit); pEdit->SetLabel(utf8Edit); // Send off a search message if it's been SEARCH_DELAY since last search. DWORD now = timeGetTime(); if (!m_lastSearchUpdate || m_lastSearchUpdate + SEARCH_DELAY >= now) m_lastSearchUpdate = now; // update is called when we haven't passed our search delay, so reset it if (m_lastSearchUpdate + SEARCH_DELAY < now) { // don't send until the REMOTE_SMS_DELAY has passed if (m_lastRemoteClickTime && m_lastRemoteClickTime + REMOTE_SMS_DELAY >= now) return; m_lastSearchUpdate = 0; if (m_filtering == FILTERING_CURRENT) { // send our filter message CGUIMessage message(GUI_MSG_NOTIFY_ALL, GetID(), 0, GUI_MSG_FILTER_ITEMS); message.SetStringParam(utf8Edit); g_graphicsContext.SendMessage(message); } if (m_filtering == FILTERING_SEARCH) { // send our search message CGUIMessage message(GUI_MSG_NOTIFY_ALL, GetID(), 0, GUI_MSG_SEARCH_UPDATE); message.SetStringParam(utf8Edit); g_graphicsContext.SendMessage(message); } } } }
void CGUIWindowMusicNav::OnWindowLoaded() { #ifdef PRE_SKIN_VERSION_2_1_COMPATIBILITY const CGUIControl *pList = GetControl(CONTROL_LIST); if (pList && !GetControl(CONTROL_LABELEMPTY)) { CLabelInfo info; info.align = XBFONT_CENTER_X | XBFONT_CENTER_Y; info.font = g_fontManager.GetFont("font13"); info.textColor = 0xffffffff; CGUILabelControl *pLabel = new CGUILabelControl(GetID(),CONTROL_LABELEMPTY,pList->GetXPosition(),pList->GetYPosition(),pList->GetWidth(),pList->GetHeight(),info,false,false); pLabel->SetAnimations(pList->GetAnimations()); Add(pLabel); } #endif CGUIWindowMusicBase::OnWindowLoaded(); }
void CGUIDialogNumeric::FrameMove() { std::string strLabel; unsigned int start = 0; unsigned int end = 0; if (m_mode == INPUT_PASSWORD) strLabel.assign(m_number.length(), '*'); else if (m_mode == INPUT_NUMBER) strLabel = m_number; else if (m_mode == INPUT_TIME) { // format up the time strLabel = StringUtils::Format("%2d:%02d", m_datetime.wHour, m_datetime.wMinute); start = m_block * 3; end = m_block * 3 + 2; } else if (m_mode == INPUT_TIME_SECONDS) { // format up the time strLabel = StringUtils::Format("%2d:%02d:%02d", m_datetime.wHour, m_datetime.wMinute, m_datetime.wSecond); start = m_block * 3; end = m_block * 3 + 2; } else if (m_mode == INPUT_DATE) { // format up the date strLabel = StringUtils::Format("%2d/%2d/%4d", m_datetime.wDay, m_datetime.wMonth, m_datetime.wYear); start = m_block * 3; end = m_block * 3 + 2; if (m_block == 2) end = m_block * 3 + 4; } else if (m_mode == INPUT_IP_ADDRESS) { // format up the date strLabel = StringUtils::Format("%3d.%3d.%3d.%3d", m_ip[0], m_ip[1], m_ip[2], m_ip[3]); start = m_block * 4; end = m_block * 4 + 3; } CGUILabelControl *pLabel = dynamic_cast<CGUILabelControl *>(GetControl(CONTROL_INPUT_LABEL)); if (pLabel) { pLabel->SetLabel(strLabel); pLabel->SetHighlight(start, end); } CGUIDialog::FrameMove(); }
void CGUIDialogKeyboard::UpdateLabel() // FIXME seems to be called twice for one USB SDL keyboard action/character { CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { CStdStringW edit = m_strEdit; if (m_hiddenInput) { // convert to *'s edit.Empty(); if (m_lastRemoteClickTime + REMOTE_SMS_DELAY > CTimeUtils::GetFrameTime() && m_strEdit.size()) { // using the remove to input, so display the last key input edit.append(m_strEdit.size() - 1, L'*'); edit.append(1, m_strEdit[m_strEdit.size() - 1]); } else edit.append(m_strEdit.size(), L'*'); } // convert back to utf8 CStdString utf8Edit; g_charsetConverter.wToUTF8(edit, utf8Edit); pEdit->SetLabel(utf8Edit); // Send off a search message unsigned int now = CTimeUtils::GetFrameTime(); // don't send until the REMOTE_SMS_DELAY has passed if (m_lastRemoteClickTime && m_lastRemoteClickTime + REMOTE_SMS_DELAY >= now) return; if (m_filtering == FILTERING_CURRENT) { // send our filter message CGUIMessage message(GUI_MSG_NOTIFY_ALL, GetID(), 0, GUI_MSG_FILTER_ITEMS); message.SetStringParam(utf8Edit); g_windowManager.SendMessage(message); } if (m_filtering == FILTERING_SEARCH) SendSearchMessage(); } }
void CGUIDialog::OnWindowLoaded() { CGUIWindow::OnWindowLoaded(); // Clip labels to extents if (m_children.size()) { CGUIControl* pBase = m_children[0]; for (iControls p = m_children.begin() + 1; p != m_children.end(); ++p) { if ((*p)->GetControlType() == CGUIControl::GUICONTROL_LABEL) { CGUILabelControl* pLabel = (CGUILabelControl*)(*p); if (!pLabel->GetWidth()) { float spacing = (pLabel->GetXPosition() - pBase->GetXPosition()) * 2; pLabel->SetWidth(pBase->GetWidth() - spacing); } } } } }
void CGUIDialogKeyboardGeneric::UpdateLabel() // FIXME seems to be called twice for one USB SDL keyboard action/character { CGUILabelControl* pEdit = ((CGUILabelControl*)GetControl(CTL_LABEL_EDIT)); if (pEdit) { CStdStringW edit = m_strEdit; pEdit->SetHighlight(0, 0); pEdit->SetSelection(0, 0); if (m_hiddenInput) { // convert to *'s edit.clear(); if (m_lastRemoteClickTime + REMOTE_SMS_DELAY > CTimeUtils::GetFrameTime() && m_iCursorPos > 0) { // using the remove to input, so display the last key input edit.append(m_iCursorPos - 1, L'*'); edit.append(1, m_strEdit[m_iCursorPos - 1]); } else edit.append(m_strEdit.size(), L'*'); } else if (!m_strEditing.empty()) { edit.insert(m_iCursorPos, m_strEditing); pEdit->SetHighlight(m_iCursorPos, m_iCursorPos + m_strEditing.size()); if (m_iEditingLength > 0) pEdit->SetSelection(m_iCursorPos + m_iEditingOffset, m_iCursorPos + m_iEditingOffset + m_iEditingLength); } // convert back to utf8 CStdString utf8Edit; g_charsetConverter.wToUTF8(edit, utf8Edit); pEdit->SetLabel(utf8Edit); // Send off a search message unsigned int now = CTimeUtils::GetFrameTime(); // don't send until the REMOTE_SMS_DELAY has passed if (m_lastRemoteClickTime && m_lastRemoteClickTime + REMOTE_SMS_DELAY >= now) return; if (m_pCharCallback) { // do not send editing text comes from system input method if (!m_hiddenInput && !m_strEditing.empty()) g_charsetConverter.wToUTF8(m_strEdit, utf8Edit); m_pCharCallback(this, utf8Edit); } } }
void CGUIDialogKeyboardGeneric::OnWindowLoaded() { CGUIEditControl *edit = (CGUIEditControl *)GetControl(CTL_EDIT); if (!edit && g_SkinInfo && g_SkinInfo->APIVersion() < ADDON::AddonVersion("5.2.0")) { // backward compatibility: convert label to edit control CGUILabelControl *label = (CGUILabelControl *)GetControl(CTL_LABEL_EDIT); if (label && label->GetControlType() == CGUIControl::GUICONTROL_LABEL) { // create a new edit control positioned in the same spot edit = new CGUIEditControl(label->GetParentID(), CTL_EDIT, label->GetXPosition(), label->GetYPosition(), label->GetWidth(), label->GetHeight(), CTextureInfo(), CTextureInfo(), label->GetLabelInfo(), ""); AddControl(edit); m_defaultControl = CTL_EDIT; m_defaultAlways = true; } } // show the cursor always if (edit) edit->SetShowCursorAlways(true); CGUIDialog::OnWindowLoaded(); }
void CGUIDialogAddonSettings::CreateControls() { FreeControls(); CGUISpinControlEx *pOriginalSpin = dynamic_cast<CGUISpinControlEx*>(GetControl(CONTROL_DEFAULT_SPIN)); CGUIRadioButtonControl *pOriginalRadioButton = dynamic_cast<CGUIRadioButtonControl *>(GetControl(CONTROL_DEFAULT_RADIOBUTTON)); CGUIButtonControl *pOriginalButton = dynamic_cast<CGUIButtonControl *>(GetControl(CONTROL_DEFAULT_BUTTON)); CGUIImage *pOriginalImage = dynamic_cast<CGUIImage *>(GetControl(CONTROL_DEFAULT_SEPARATOR)); CGUILabelControl *pOriginalLabel = dynamic_cast<CGUILabelControl *>(GetControl(CONTROL_DEFAULT_LABEL_SEPARATOR)); CGUISettingsSliderControl *pOriginalSlider = dynamic_cast<CGUISettingsSliderControl *>(GetControl(CONTROL_DEFAULT_SLIDER)); if (!m_addon || !pOriginalSpin || !pOriginalRadioButton || !pOriginalButton || !pOriginalImage || !pOriginalLabel || !pOriginalSlider) return; pOriginalSpin->SetVisible(false); pOriginalRadioButton->SetVisible(false); pOriginalButton->SetVisible(false); pOriginalImage->SetVisible(false); pOriginalLabel->SetVisible(false); pOriginalSlider->SetVisible(false); CGUIControlGroupList *group = dynamic_cast<CGUIControlGroupList *>(GetControl(CONTROL_SETTINGS_AREA)); if (!group) return; // set our dialog heading SET_CONTROL_LABEL(CONTROL_HEADING_LABEL, m_strHeading); CGUIControl* pControl = NULL; int controlId = CONTROL_START_SETTING; const TiXmlElement *setting = GetFirstSetting(); while (setting) { const std::string type = XMLUtils::GetAttribute(setting, "type"); const std::string id = XMLUtils::GetAttribute(setting, "id"); const std::string values = XMLUtils::GetAttribute(setting, "values"); const std::string lvalues = XMLUtils::GetAttribute(setting, "lvalues"); const std::string entries = XMLUtils::GetAttribute(setting, "entries"); const std::string defaultVal = XMLUtils::GetAttribute(setting, "default"); const std::string subsetting = XMLUtils::GetAttribute(setting, "subsetting"); const std::string label = GetString(setting->Attribute("label"), subsetting == "true"); bool bSort = XMLUtils::GetAttribute(setting, "sort") == "yes"; if (!type.empty()) { bool isAddonSetting = false; if (type == "text" || type == "ipaddress" || type == "number" || type == "video" || type == "audio" || type == "image" || type == "folder" || type == "executable" || type == "file" || type == "action" || type == "date" || type == "time" || type == "select" || (isAddonSetting = type == "addon")) { pControl = new CGUIButtonControl(*pOriginalButton); if (!pControl) return; ((CGUIButtonControl *)pControl)->SetLabel(label); if (!id.empty()) { std::string value = m_settings[id]; m_buttonValues[id] = value; // get any option to test for hidden const std::string option = XMLUtils::GetAttribute(setting, "option"); if (option == "urlencoded") value = CURL::Decode(value); else if (option == "hidden") { std::string hiddenText; hiddenText.append(value.size(), L'*'); ((CGUIButtonControl *)pControl)->SetLabel2(hiddenText); } else { if (isAddonSetting) ((CGUIButtonControl *)pControl)->SetLabel2(GetAddonNames(value)); else if (type == "select" && !lvalues.empty()) { vector<string> valuesVec = StringUtils::Split(lvalues, '|'); int selected = atoi(value.c_str()); if (selected >= 0 && selected < (int)valuesVec.size()) { std::string label = m_addon->GetString(atoi(valuesVec[selected].c_str())); if (label.empty()) label = g_localizeStrings.Get(atoi(valuesVec[selected].c_str())); ((CGUIButtonControl *)pControl)->SetLabel2(label); } } else ((CGUIButtonControl *)pControl)->SetLabel2(value); } } else ((CGUIButtonControl *)pControl)->SetLabel2(defaultVal); } else if (type == "bool" && !id.empty()) { pControl = new CGUIRadioButtonControl(*pOriginalRadioButton); if (!pControl) return; ((CGUIRadioButtonControl *)pControl)->SetLabel(label); ((CGUIRadioButtonControl *)pControl)->SetSelected(m_settings[id] == "true"); } else if ((type == "enum" || type == "labelenum") && !id.empty()) { vector<std::string> valuesVec; vector<std::string> entryVec; pControl = new CGUISpinControlEx(*pOriginalSpin); if (!pControl) return; ((CGUISpinControlEx *)pControl)->SetText(label); if (!lvalues.empty()) StringUtils::Tokenize(lvalues, valuesVec, "|"); else if (values == "$HOURS") { for (unsigned int i = 0; i < 24; i++) { CDateTime time(2000, 1, 1, i, 0, 0); valuesVec.push_back(g_infoManager.LocalizeTime(time, TIME_FORMAT_HH_MM_XX)); } } else StringUtils::Tokenize(values, valuesVec, "|"); if (!entries.empty()) StringUtils::Tokenize(entries, entryVec, "|"); if(bSort && type == "labelenum") std::sort(valuesVec.begin(), valuesVec.end(), sortstringbyname()); for (unsigned int i = 0; i < valuesVec.size(); i++) { int iAdd = i; if (entryVec.size() > i) iAdd = atoi(entryVec[i].c_str()); if (!lvalues.empty()) { std::string replace = m_addon->GetString(atoi(valuesVec[i].c_str())); if (replace.empty()) replace = g_localizeStrings.Get(atoi(valuesVec[i].c_str())); ((CGUISpinControlEx *)pControl)->AddLabel(replace, iAdd); } else ((CGUISpinControlEx *)pControl)->AddLabel(valuesVec[i], iAdd); } if (type == "labelenum") { // need to run through all our settings and find the one that matches ((CGUISpinControlEx*) pControl)->SetValueFromLabel(m_settings[id]); } else ((CGUISpinControlEx*) pControl)->SetValue(atoi(m_settings[id].c_str())); } else if (type == "fileenum" && !id.empty()) { pControl = new CGUISpinControlEx(*pOriginalSpin); if (!pControl) return; ((CGUISpinControlEx *)pControl)->SetText(label); ((CGUISpinControlEx *)pControl)->SetFloatValue(1.0f); vector<std::string> items = GetFileEnumValues(values, XMLUtils::GetAttribute(setting, "mask"), XMLUtils::GetAttribute(setting, "option")); for (unsigned int i = 0; i < items.size(); ++i) { ((CGUISpinControlEx *)pControl)->AddLabel(items[i], i); if (StringUtils::EqualsNoCase(items[i], m_settings[id])) ((CGUISpinControlEx *)pControl)->SetValue(i); } } // Sample: <setting id="mysettingname" type="rangeofnum" label="30000" rangestart="0" rangeend="100" elements="11" valueformat="30001" default="0" /> // in strings.xml: <string id="30001">%2.0f mp</string> // creates 11 piece, text formated number labels from 0 to 100 else if (type == "rangeofnum" && !id.empty()) { pControl = new CGUISpinControlEx(*pOriginalSpin); if (!pControl) return; ((CGUISpinControlEx *)pControl)->SetText(label); ((CGUISpinControlEx *)pControl)->SetFloatValue(1.0f); double rangestart = 0, rangeend = 1; setting->Attribute("rangestart", &rangestart); setting->Attribute("rangeend", &rangeend); int elements = 2; setting->Attribute("elements", &elements); std::string valueformat; if (setting->Attribute("valueformat")) valueformat = m_addon->GetString(atoi(setting->Attribute("valueformat"))); for (int i = 0; i < elements; i++) { std::string valuestring; if (elements < 2) valuestring = StringUtils::Format(valueformat.c_str(), rangestart); else valuestring = StringUtils::Format(valueformat.c_str(), rangestart+(rangeend-rangestart)/(elements-1)*i); ((CGUISpinControlEx *)pControl)->AddLabel(valuestring, i); } ((CGUISpinControlEx *)pControl)->SetValue(atoi(m_settings[id].c_str())); } // Sample: <setting id="mysettingname" type="slider" label="30000" range="5,5,60" option="int" default="5"/> // to make ints from 5-60 with 5 steps else if (type == "slider" && !id.empty()) { pControl = new CGUISettingsSliderControl(*pOriginalSlider); if (!pControl) return; ((CGUISettingsSliderControl *)pControl)->SetText(label); float fMin = 0.0f; float fMax = 100.0f; float fInc = 1.0f; vector<std::string> range = StringUtils::Split(XMLUtils::GetAttribute(setting, "range"), ','); if (range.size() > 1) { fMin = (float)atof(range[0].c_str()); if (range.size() > 2) { fMax = (float)atof(range[2].c_str()); fInc = (float)atof(range[1].c_str()); } else fMax = (float)atof(range[1].c_str()); } std::string option = XMLUtils::GetAttribute(setting, "option"); int iType=0; if (option.empty() || StringUtils::EqualsNoCase(option, "float")) iType = SLIDER_CONTROL_TYPE_FLOAT; else if (StringUtils::EqualsNoCase(option, "int")) iType = SLIDER_CONTROL_TYPE_INT; else if (StringUtils::EqualsNoCase(option, "percent")) iType = SLIDER_CONTROL_TYPE_PERCENTAGE; ((CGUISettingsSliderControl *)pControl)->SetType(iType); ((CGUISettingsSliderControl *)pControl)->SetFloatRange(fMin, fMax); ((CGUISettingsSliderControl *)pControl)->SetFloatInterval(fInc); ((CGUISettingsSliderControl *)pControl)->SetFloatValue((float)atof(m_settings[id].c_str())); } else if (type == "lsep") { pControl = new CGUILabelControl(*pOriginalLabel); if (pControl) ((CGUILabelControl *)pControl)->SetLabel(label); } else if (type == "sep") pControl = new CGUIImage(*pOriginalImage); } if (pControl) { pControl->SetWidth(group->GetWidth()); pControl->SetVisible(true); pControl->SetID(controlId); pControl->AllocResources(); group->AddControl(pControl); pControl = NULL; } setting = setting->NextSiblingElement("setting"); controlId++; } EnableControls(); }
void CGUIDialogPluginSettings::CreateControls() { CGUISpinControlEx *pOriginalSpin = (CGUISpinControlEx*)GetControl(CONTROL_DEFAULT_SPIN); CGUIRadioButtonControl *pOriginalRadioButton = (CGUIRadioButtonControl *)GetControl(CONTROL_DEFAULT_RADIOBUTTON); CGUIButtonControl *pOriginalButton = (CGUIButtonControl *)GetControl(CONTROL_DEFAULT_BUTTON); CGUIImage *pOriginalImage = (CGUIImage *)GetControl(CONTROL_DEFAULT_SEPARATOR); CGUILabelControl *pOriginalLabel = (CGUILabelControl *)GetControl(CONTROL_DEFAULT_LABEL_SEPARATOR); if (!pOriginalSpin || !pOriginalRadioButton || !pOriginalButton || !pOriginalImage) return; pOriginalSpin->SetVisible(false); pOriginalRadioButton->SetVisible(false); pOriginalButton->SetVisible(false); pOriginalImage->SetVisible(false); if (pOriginalLabel) pOriginalLabel->SetVisible(false); // clear the category group CGUIControlGroupList *group = (CGUIControlGroupList *)GetControl(CONTROL_AREA); if (!group) return; // set our dialog heading SET_CONTROL_LABEL(CONTROL_HEADING_LABEL, m_strHeading); // Create our base path, used for type "fileenum" settings CStdString basepath = "Q:\\plugins\\"; CUtil::AddFileToFolder(basepath, m_url.GetHostName(), basepath); CUtil::AddFileToFolder(basepath, m_url.GetFileName(), basepath); CGUIControl* pControl = NULL; int controlId = CONTROL_START_CONTROL; TiXmlElement *setting = m_settings.GetPluginRoot()->FirstChildElement("setting"); while (setting) { const char *type = setting->Attribute("type"); const char *option = setting->Attribute("option"); const char *id = setting->Attribute("id"); CStdString values; if (setting->Attribute("values")) values = setting->Attribute("values"); CStdString lvalues; if (setting->Attribute("lvalues")) lvalues = setting->Attribute("lvalues"); CStdString entries; if (setting->Attribute("entries")) entries = setting->Attribute("entries"); CStdString label; if (setting->Attribute("label") && atoi(setting->Attribute("label")) > 0) label.Format("$LOCALIZE[%s]", setting->Attribute("label")); else label = setting->Attribute("label"); if (type) { if (strcmpi(type, "text") == 0 || strcmpi(type, "ipaddress") == 0 || strcmpi(type, "integer") == 0 || strcmpi(type, "video") == 0 || strcmpi(type, "music") == 0 || strcmpi(type, "pictures") == 0 || strcmpi(type, "folder") == 0 || strcmpi(type, "programs") == 0 || strcmpi(type, "files") == 0 || strcmpi(type, "action") == 0) { pControl = new CGUIButtonControl(*pOriginalButton); if (!pControl) return; ((CGUIButtonControl *)pControl)->SettingsCategorySetTextAlign(XBFONT_CENTER_Y); ((CGUIButtonControl *)pControl)->SetLabel(label); if (id) ((CGUIButtonControl *)pControl)->SetLabel2(m_settings.Get(id)); if (option && strcmpi(option, "hidden") == 0) ((CGUIButtonControl *)pControl)->SetHidden(true); } else if (strcmpi(type, "bool") == 0) { pControl = new CGUIRadioButtonControl(*pOriginalRadioButton); if (!pControl) return; ((CGUIRadioButtonControl *)pControl)->SetLabel(label); ((CGUIRadioButtonControl *)pControl)->SetSelected(m_settings.Get(id) == "true"); } else if (strcmpi(type, "enum") == 0 || strcmpi(type, "labelenum") == 0) { vector<CStdString> valuesVec; vector<CStdString> entryVec; pControl = new CGUISpinControlEx(*pOriginalSpin); if (!pControl) return; ((CGUISpinControlEx *)pControl)->SetText(label); if (!lvalues.IsEmpty()) CUtil::Tokenize(lvalues, valuesVec, "|"); else CUtil::Tokenize(values, valuesVec, "|"); if (!entries.IsEmpty()) CUtil::Tokenize(entries, entryVec, "|"); for (unsigned int i = 0; i < valuesVec.size(); i++) { int iAdd = i; if (entryVec.size() > i) iAdd = atoi(entryVec[i]); if (!lvalues.IsEmpty()) { CStdString replace = g_localizeStringsTemp.Get(atoi(valuesVec[i])); if (replace.IsEmpty()) replace = g_localizeStrings.Get(atoi(valuesVec[i])); ((CGUISpinControlEx *)pControl)->AddLabel(replace, iAdd); } else ((CGUISpinControlEx *)pControl)->AddLabel(valuesVec[i], iAdd); } if (strcmpi(type, "labelenum") == 0) { // need to run through all our settings and find the one that matches ((CGUISpinControlEx*) pControl)->SetValueFromLabel(m_settings.Get(id)); } else ((CGUISpinControlEx*) pControl)->SetValue(atoi(m_settings.Get(id))); } else if (strcmpi(type, "fileenum") == 0) { pControl = new CGUISpinControlEx(*pOriginalSpin); if (!pControl) return; ((CGUISpinControlEx *)pControl)->SetText(label); //find Folders... CFileItemList items; CStdString enumpath; CUtil::AddFileToFolder(basepath, values, enumpath); CStdString mask; if (setting->Attribute("mask")) mask = setting->Attribute("mask"); if (!mask.IsEmpty()) CDirectory::GetDirectory(enumpath, items, mask); else CDirectory::GetDirectory(enumpath, items); int iItem = 0; for (int i = 0; i < items.Size(); ++i) { CFileItemPtr pItem = items[i]; if ((mask.Equals("/") && pItem->m_bIsFolder) || !pItem->m_bIsFolder) { ((CGUISpinControlEx *)pControl)->AddLabel(pItem->GetLabel(), iItem); if (pItem->GetLabel().Equals(m_settings.Get(id))) ((CGUISpinControlEx *)pControl)->SetValue(iItem); iItem++; } } } else if (strcmpi(type, "lsep") == 0 && pOriginalLabel) { pControl = new CGUILabelControl(*pOriginalLabel); if (pControl) ((CGUILabelControl *)pControl)->SetLabel(label); } else if ((strcmpi(type, "sep") == 0 || strcmpi(type, "lsep") == 0) && pOriginalImage) pControl = new CGUIImage(*pOriginalImage); } if (pControl) { pControl->SetWidth(group->GetWidth()); pControl->SetVisible(true); pControl->SetID(controlId); pControl->AllocResources(); group->AddControl(pControl); pControl = NULL; } setting = setting->NextSiblingElement("setting"); controlId++; } EnableControls(); }