bool ScreenSetup::Create() { bool foundtheme = false; // Load the theme for this screen foundtheme = LoadWindowFromXML("weather-ui.xml", "screen-setup", this); if (!foundtheme) return false; m_helpText = dynamic_cast<MythUIText *> (GetChild("helptxt")); m_activeList = dynamic_cast<MythUIButtonList *> (GetChild("activelist")); m_inactiveList = dynamic_cast<MythUIButtonList *> (GetChild("inactivelist")); m_finishButton = dynamic_cast<MythUIButton *> (GetChild("finishbutton")); MythUIText *activeheader = dynamic_cast<MythUIText *> (GetChild("activehdr")); if (activeheader) activeheader->SetText(tr("Active Screens")); MythUIText *inactiveheader = dynamic_cast<MythUIText *> (GetChild("inactivehdr")); if (inactiveheader) inactiveheader->SetText(tr("Inactive Screens")); if (!m_activeList || !m_inactiveList || !m_finishButton || !m_helpText) { LOG(VB_GENERAL, LOG_ERR, "Theme is missing required elements."); return false; } BuildFocusList(); connect(m_activeList, SIGNAL(itemSelected(MythUIButtonListItem *)), this, SLOT(updateHelpText())); connect(m_activeList, SIGNAL(itemClicked(MythUIButtonListItem *)), this, SLOT(doListSelect(MythUIButtonListItem *))); connect(m_inactiveList, SIGNAL(itemSelected(MythUIButtonListItem *)), this, SLOT(updateHelpText())); connect(m_inactiveList, SIGNAL(itemClicked(MythUIButtonListItem *)), this, SLOT(doListSelect(MythUIButtonListItem *))); SetFocusWidget(m_inactiveList); m_finishButton->SetText(tr("Finish")); connect(m_finishButton, SIGNAL(Clicked()), this, SLOT(saveData())); loadData(); return true; }
bool PlotDialog::Create() { if (!LoadWindowFromXML("video-ui.xml", "descriptionpopup", this)) return false; MythUIText *plotText = nullptr; MythUIButton *okButton = nullptr; bool err = false; UIUtilE::Assign(this, plotText, "description", &err); if (err) { LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'descriptionpopup'"); return false; } UIUtilW::Assign(this, okButton, "ok"); plotText->SetText(m_metadata->GetPlot()); if (okButton) connect(okButton, SIGNAL(Clicked()), SLOT(Close())); BuildFocusList(); return true; }
bool MythTextInputDialog::Create(void) { if (!CopyWindowFromBase("MythTextInputDialog", this)) return false; MythUIText *messageText = NULL; MythUIButton *okButton = NULL; MythUIButton *cancelButton = NULL; bool err = false; UIUtilE::Assign(this, m_textEdit, "input", &err); UIUtilE::Assign(this, messageText, "message", &err); UIUtilE::Assign(this, okButton, "ok", &err); UIUtilW::Assign(this, cancelButton, "cancel"); if (err) { LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'MythTextInputDialog'"); return false; } if (cancelButton) connect(cancelButton, SIGNAL(Clicked()), SLOT(Close())); connect(okButton, SIGNAL(Clicked()), SLOT(sendResult())); m_textEdit->SetFilter(m_filter); m_textEdit->SetText(m_defaultValue); m_textEdit->SetPassword(m_isPassword); messageText->SetText(m_message); BuildFocusList(); return true; }
void AirPlayPictureScreen::Init(void) { if (m_airplayImage) { if (!m_imageFilename.isEmpty()) { m_airplayImage->SetFilename(m_imageFilename); // Absolute path, http or SG url m_airplayImage->Load(); // By default the image is loaded in a background thread, use LoadNow() to load in foreground } else { // Will default to displaying whatever placeholder image is defined // in the xml by the themer, means we can show _something_ rather than // a big empty hole. Generally you always want to call Reset() in // these circumstances m_airplayImage->Reset(); } } if (m_airplayText) { if (!m_imageDescription.isEmpty()) { m_airplayText->SetText(m_imageDescription); } else { // Same as above, calling Reset() allows for a sane, themer defined //default to be displayed m_airplayText->Reset(); } } }
/** \fn RawSettingsEditor::Create(void) * \brief Creates the UI screen. */ bool RawSettingsEditor::Create(void) { if (!LoadWindowFromXML("settings-ui.xml", "rawsettingseditor", this)) return false; m_settingsList = dynamic_cast<MythUIButtonList *> (GetChild("settings")); m_saveButton = dynamic_cast<MythUIButton *> (GetChild("save")); m_cancelButton = dynamic_cast<MythUIButton *> (GetChild("cancel")); m_textLabel = dynamic_cast<MythUIText *> (GetChild("label-text")); if (!m_settingsList || !m_textLabel || !m_saveButton || !m_cancelButton) { LOG(VB_GENERAL, LOG_EMERG, "Theme is missing critical theme elements."); return false; } BuildFocusList(); MythUIText *text = dynamic_cast<MythUIText *> (GetChild("heading")); if (text) text->SetText(m_title); MythUIShape *shape = nullptr; for (int i = -8; i <= 8; i++) { text = dynamic_cast<MythUIText *> (GetChild(QString("value%1%2").arg(i >= 0? "+" : "").arg(i))); if (text) m_prevNextTexts[i] = text; shape = dynamic_cast<MythUIShape *> (GetChild(QString("shape%1%2").arg(i >= 0? "+" : "").arg(i))); if (shape) m_prevNextShapes[i] = shape; } m_settingValue = dynamic_cast<MythUITextEdit *> (GetChild("settingvalue")); connect(m_settingsList, SIGNAL(itemSelected(MythUIButtonListItem*)), SLOT(selectionChanged(MythUIButtonListItem*))); connect(m_settingValue, SIGNAL(LosingFocus()), SLOT(valueChanged())); connect(m_saveButton, SIGNAL(Clicked()), this, SLOT(Save())); connect(m_cancelButton, SIGNAL(Clicked()), this, SLOT(Close())); LoadInBackground(); return true; }
bool MythDialogBox::Create(void) { if (!CopyWindowFromBase("MythDialogBox", this)) return false; SetFullscreen(false); MythUIText *textarea = dynamic_cast<MythUIText *>(GetChild("messagearea")); buttonList = dynamic_cast<MythListButton *>(GetChild("list")); if (!textarea || !buttonList) return false; textarea->SetText(m_text); buttonList->SetActive(true); connect(buttonList, SIGNAL(itemClicked(MythListButtonItem*)), this, SLOT(Select(MythListButtonItem*))); return true; }
bool MythScreenType::SetFocusWidget(MythUIType *widget) { if (!widget || !widget->IsVisible()) { QMap<int, MythUIType *>::iterator it = m_FocusWidgetList.begin(); MythUIType *current; while (it != m_FocusWidgetList.end()) { current = *it; if (current->CanTakeFocus() && current->IsVisible()) { widget = current; break; } ++it; } } if (!widget) return false; if (m_CurrentFocusWidget == widget) return true; MythUIText *helpText = dynamic_cast<MythUIText *>(GetChild("helptext")); if (helpText) helpText->Reset(); if (m_CurrentFocusWidget) m_CurrentFocusWidget->LoseFocus(); m_CurrentFocusWidget = widget; m_CurrentFocusWidget->TakeFocus(); if (helpText && !widget->GetHelpText().isEmpty()) helpText->SetText(widget->GetHelpText()); return true; }
void IdleScreen::UpdateStatus(void) { QString state = "idle"; if (CheckConnectionToServer()) { if (m_secondsToShutdown >= 0) state = "shuttingdown"; else if (RemoteGetRecordingStatus()) state = "recording"; } else { state = "offline"; } m_statusState->DisplayState(state); MythUIType* shuttingdown = m_statusState->GetState("shuttingdown"); if (shuttingdown) { MythUIText *statusText = dynamic_cast<MythUIText *>(shuttingdown->GetChild("status")); if (statusText) { if (m_secondsToShutdown >= 0) { QString status = tr("Backend will shutdown in %n " "second(s).", "", m_secondsToShutdown); statusText->SetText(status); } else statusText->Reset(); } } }
bool MythConfirmationDialog::Create(void) { if (!CopyWindowFromBase("MythConfirmationDialog", this)) return false; MythUIText *messageText = NULL; MythUIButton *okButton = NULL; MythUIButton *cancelButton = NULL; bool err = false; UIUtilE::Assign(this, messageText, "message", &err); UIUtilE::Assign(this, okButton, "ok", &err); UIUtilE::Assign(this, cancelButton, "cancel", &err); if (err) { VERBOSE(VB_IMPORTANT, "Cannot load screen 'MythConfirmationDialog'"); return false; } if (m_showCancel) { connect(cancelButton, SIGNAL(Clicked()), SLOT(Cancel())); } else cancelButton->SetVisible(false); connect(okButton, SIGNAL(Clicked()), SLOT(Confirm())); messageText->SetText(m_message); BuildFocusList(); SetFocusWidget(okButton); return true; }
bool MythTimeInputDialog::Create() { if (!CopyWindowFromBase("MythTimeInputDialog", this)) return false; MythUIText *messageText = NULL; MythUIButton *okButton = NULL; bool err = false; UIUtilE::Assign(this, messageText, "message", &err); UIUtilE::Assign(this, m_dateList, "dates", &err); UIUtilE::Assign(this, m_timeList, "times", &err); UIUtilE::Assign(this, okButton, "ok", &err); if (err) { LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'MythTimeInputDialog'"); return false; } m_dateList->SetVisible(false); m_timeList->SetVisible(false); MythUIButtonListItem *item; // Date if (kNoDate != (m_resolution & 0xF)) { const QDate startdate(m_startTime.toLocalTime().date()); QDate date(startdate); int limit = 0; if (m_resolution & kFutureDates) { limit += m_rangeLimit; } if (m_resolution & kPastDates) { limit += m_rangeLimit; date = date.addDays(0-m_rangeLimit); } QString text; int flags; bool selected = false; for (int x = 0; x <= limit; x++) { selected = false; if (m_resolution & kDay) { date = date.addDays(1); flags = MythDate::kDateFull | MythDate::kSimplify; if (m_rangeLimit >= 356) flags |= MythDate::kAddYear; text = MythDate::toString(date, flags); if (date == startdate) selected = true; } else if (m_resolution & kMonth) { date = date.addMonths(1); text = date.toString("MMM yyyy"); if ((date.month() == startdate.month()) && (date.year() == startdate.year())) selected = true; } else if (m_resolution & kYear) { date = date.addYears(1); text = date.toString("yyyy"); if (date.year() == startdate.year()) selected = true; } item = new MythUIButtonListItem(m_dateList, text, NULL, false); item->SetData(QVariant(date)); if (selected) m_dateList->SetItemCurrent(item); } m_dateList->SetVisible(true); } // Time if (kNoTime != (m_resolution & 0xF0)) { QDate startdate(m_startTime.toLocalTime().date()); QTime starttime(m_startTime.toLocalTime().time()); QTime time(0,0,0); QString text; bool selected = false; int limit = (m_resolution & kMinutes) ? (60 * 24) : 24; for (int x = 0; x < limit; x++) { selected = false; if (m_resolution & kMinutes) { time = time.addSecs(60); QDateTime dt = QDateTime(startdate, time, Qt::LocalTime); text = MythDate::toString(dt, MythDate::kTime); if (time == starttime) selected = true; } else if (m_resolution & kHours) { time = time.addSecs(60*60); text = time.toString("hh:00"); if (time.hour() == starttime.hour()) selected = true; } item = new MythUIButtonListItem(m_timeList, text, NULL, false); item->SetData(QVariant(time)); if (selected) m_timeList->SetItemCurrent(item); } m_timeList->SetVisible(true); } if (messageText && !m_message.isEmpty()) messageText->SetText(m_message); connect(okButton, SIGNAL(Clicked()), SLOT(okClicked())); BuildFocusList(); return true; }
void ViewScheduled::FillList() { m_schedulesList->Reset(); MythUIText *norecordingText = dynamic_cast<MythUIText*> (GetChild("norecordings_info")); if (norecordingText) norecordingText->SetVisible(m_recList.empty()); if (m_recList.empty()) return; ProgramList plist; if (!m_recgroupList.contains(m_currentGroup)) m_currentGroup = m_defaultGroup; plist = m_recgroupList[m_currentGroup]; ProgramList::iterator pit = plist.begin(); while (pit != plist.end()) { ProgramInfo *pginfo = *pit; if (!pginfo) { ++pit; continue; } QString state; const RecStatusType recstatus = pginfo->GetRecordingStatus(); if (recstatus == rsRecording) state = "running"; else if (recstatus == rsConflict || recstatus == rsOffLine || recstatus == rsTunerBusy || recstatus == rsFailed || recstatus == rsAborted || recstatus == rsMissed) state = "error"; else if (recstatus == rsWillRecord) { if ((m_curcard == 0 && m_curinput == 0) || pginfo->GetCardID() == m_curcard || pginfo->GetInputID() == m_curinput) { if (pginfo->GetRecordingPriority2() < 0) state = "warning"; else state = "normal"; } } else if (recstatus == rsRepeat || recstatus == rsOtherShowing || recstatus == rsNeverRecord || recstatus == rsDontRecord || (recstatus != rsDontRecord && recstatus <= rsEarlierShowing)) state = "disabled"; else state = "warning"; MythUIButtonListItem *item = new MythUIButtonListItem(m_schedulesList,"", qVariantFromValue(pginfo)); InfoMap infoMap; pginfo->ToMap(infoMap); item->SetTextFromMap(infoMap, state); QString rating = QString::number(pginfo->GetStars(10)); item->DisplayState(rating, "ratingstate"); item->DisplayState(state, "status"); ++pit; } MythUIText *statusText = dynamic_cast<MythUIText*>(GetChild("status")); if (statusText) { if (m_conflictBool) { // Find first conflict and store in m_conflictDate field ProgramList::const_iterator it = plist.begin(); for (; it != plist.end(); ++it) { ProgramInfo &p = **it; if (p.GetRecordingStatus() == rsConflict) { m_conflictDate = p.GetRecordingStartTime().date(); break; } } // figure out caption based on m_conflictDate QString cstring = tr("Time Conflict"); QDate now = QDate::currentDate(); int daysToConflict = now.daysTo(m_conflictDate); if (daysToConflict == 0) cstring = tr("Conflict Today"); else if (daysToConflict > 0) cstring = QString(tr("Conflict %1")) .arg(m_conflictDate.toString(m_dateFormat)); statusText->SetText(cstring); } else statusText->SetText(tr("No Conflicts")); } MythUIText *filterText = dynamic_cast<MythUIText*>(GetChild("filter")); if (filterText) { if (m_showAll) filterText->SetText(tr("All")); else filterText->SetText(tr("Important")); } }
void ViewScheduled::FillList() { m_schedulesList->Reset(); MythUIText *norecordingText = dynamic_cast<MythUIText*> (GetChild("norecordings_info")); if (norecordingText) norecordingText->SetVisible(m_recList.empty()); if (m_recList.empty()) return; ProgramList plist; if (!m_recgroupList.contains(m_currentGroup)) m_currentGroup = m_defaultGroup; plist = m_recgroupList[m_currentGroup]; ProgramList::iterator pit = plist.begin(); while (pit != plist.end()) { ProgramInfo *pginfo = *pit; if (!pginfo) { ++pit; continue; } QString state; const RecStatus::Type recstatus = pginfo->GetRecordingStatus(); if (recstatus == RecStatus::Recording || recstatus == RecStatus::Tuning) state = "running"; else if (recstatus == RecStatus::Conflict || recstatus == RecStatus::Offline || recstatus == RecStatus::TunerBusy || recstatus == RecStatus::Failed || recstatus == RecStatus::Failing || recstatus == RecStatus::Aborted || recstatus == RecStatus::Missed) state = "error"; else if (recstatus == RecStatus::WillRecord || recstatus == RecStatus::Pending) { if (m_curinput == 0 || pginfo->GetInputID() == m_curinput) { if (pginfo->GetRecordingPriority2() < 0) state = "warning"; else state = "normal"; } } else if (recstatus == RecStatus::Repeat || recstatus == RecStatus::NeverRecord || recstatus == RecStatus::DontRecord || (recstatus != RecStatus::DontRecord && recstatus <= RecStatus::EarlierShowing)) state = "disabled"; else state = "warning"; MythUIButtonListItem *item = new MythUIButtonListItem(m_schedulesList,"", qVariantFromValue(pginfo)); InfoMap infoMap; pginfo->ToMap(infoMap); item->SetTextFromMap(infoMap, state); QString rating = QString::number(pginfo->GetStars(10)); item->DisplayState(rating, "ratingstate"); item->DisplayState(state, "status"); ++pit; } MythUIText *statusText = dynamic_cast<MythUIText*>(GetChild("status")); if (statusText) { if (m_conflictBool) { // Find first conflict and store in m_conflictDate field ProgramList::const_iterator it = plist.begin(); for (; it != plist.end(); ++it) { ProgramInfo &p = **it; if (p.GetRecordingStatus() == RecStatus::Conflict) { m_conflictDate = p.GetRecordingStartTime() .toLocalTime().date(); break; } } // TODO: This can be templated instead of hardcoding // Conflict/No Conflict QString cstring = tr("Conflict %1") .arg(MythDate::toString(m_conflictDate, MythDate::kDateFull | MythDate::kSimplify)); statusText->SetText(cstring); } else statusText->SetText(tr("No Conflicts")); } MythUIText *filterText = dynamic_cast<MythUIText*>(GetChild("filter")); if (filterText) { if (m_showAll) filterText->SetText(tr("All")); else filterText->SetText(tr("Important")); } }
void OSD::SetText(const QString &window, const InfoMap &map, OSDTimeout timeout) { MythScreenType *win = GetWindow(window); if (!win) return; if (map.contains("numstars")) { MythUIStateType *state = dynamic_cast<MythUIStateType *> (win->GetChild("ratingstate")); if (state) state->DisplayState(map["numstars"]); } if (map.contains("tvstate")) { MythUIStateType *state = dynamic_cast<MythUIStateType *> (win->GetChild("tvstate")); if (state) state->DisplayState(map["tvstate"]); } if (map.contains("videocodec")) { MythUIStateType *state = dynamic_cast<MythUIStateType *> (win->GetChild("videocodec")); if (state) state->DisplayState(map["videocodec"]); } if (map.contains("videodescrip")) { MythUIStateType *state = dynamic_cast<MythUIStateType *> (win->GetChild("videodescrip")); if (state) state->DisplayState(map["videodescrip"]); } if (map.contains("audiocodec")) { MythUIStateType *state = dynamic_cast<MythUIStateType *> (win->GetChild("audiocodec")); if (state) state->DisplayState(map["audiocodec"]); } if (map.contains("audiochannels")) { MythUIStateType *state = dynamic_cast<MythUIStateType *> (win->GetChild("audiochannels")); if (state) state->DisplayState(map["audiochannels"]); } if (map.contains("chanid")) { MythUIImage *icon = dynamic_cast<MythUIImage *> (win->GetChild("iconpath")); if (icon) { icon->Reset(); uint chanid = map["chanid"].toUInt(); QString iconpath; if (map.contains("iconpath")) iconpath = map["iconpath"]; else iconpath = ChannelUtil::GetIcon(chanid); if (!iconpath.isEmpty()) { QString iconurl = gCoreContext->GetMasterHostPrefix("ChannelIcons", iconpath); icon->SetFilename(iconurl); icon->Load(false); } } } if (map.contains("channelgroup")) { MythUIText *textArea = dynamic_cast<MythUIText *> (win->GetChild("channelgroup")); if (textArea) { textArea->SetText(map["channelgroup"]); } } if (map.contains("inetref")) { MythUIImage *cover = dynamic_cast<MythUIImage *> (win->GetChild("coverart")); if (cover && map.contains("coverartpath")) { QString coverpath = map["coverartpath"]; cover->SetFilename(coverpath); cover->Load(false); } MythUIImage *fanart = dynamic_cast<MythUIImage *> (win->GetChild("fanart")); if (fanart && map.contains("fanartpath")) { QString fanartpath = map["fanartpath"]; fanart->SetFilename(fanartpath); fanart->Load(false); } MythUIImage *banner = dynamic_cast<MythUIImage *> (win->GetChild("banner")); if (banner && map.contains("bannerpath")) { QString bannerpath = map["bannerpath"]; banner->SetFilename(bannerpath); banner->Load(false); } MythUIImage *screenshot = dynamic_cast<MythUIImage *> (win->GetChild("screenshot")); if (screenshot && map.contains("screenshotpath")) { QString screenshotpath = map["screenshotpath"]; screenshot->SetFilename(screenshotpath); screenshot->Load(false); } } if (map.contains("nightmode")) { MythUIStateType *state = dynamic_cast<MythUIStateType *> (win->GetChild("nightmode")); if (state) state->DisplayState(map["nightmode"]); } if (map.contains("mediatype")) { MythUIStateType *state = dynamic_cast<MythUIStateType *> (win->GetChild("mediatype")); if (state) state->DisplayState(map["mediatype"]); } MythUIProgressBar *bar = dynamic_cast<MythUIProgressBar *>(win->GetChild("elapsedpercent")); if (bar) { int startts = map["startts"].toInt(); int endts = map["endts"].toInt(); int nowts = MythDate::current().toTime_t(); if (startts > nowts) { bar->SetUsed(0); } else if (endts < nowts) { bar->SetUsed(1000); } else { int duration = endts - startts; if (duration > 0) bar->SetUsed(1000 * (nowts - startts) / duration); else bar->SetUsed(0); } bar->SetVisible(startts > 0); bar->SetStart(0); bar->SetTotal(1000); } win->SetVisible(true); if (win == m_Dialog) { ChannelEditor *edit = dynamic_cast<ChannelEditor*>(m_Dialog); if (edit) edit->SetText(map); } else win->SetTextFromMap(map); SetExpiry(window, timeout); }