/** \fn GalleryView::UpdateThumbnail(ImageMetadata *, int) * \brief Updates the thumbnail image of an image or * folder which contains the given image metadata * \param item The item that shall be updated * \param id The thumbnail id that shall be used, * there are 4 ids when the item is a folder * \return void */ void GalleryView::UpdateThumbnail(ImageMetadata *thumbImageMetadata, int id) { // get through the entire list of image items and find // the filename that matches the created thumbnail filename for (int i = 0; i < m_imageList->GetCount(); i++) { MythUIButtonListItem *item = m_imageList->GetItemAt(i); if (!item) continue; ImageMetadata *im = GetImageMetadataFromButton(item); if (!im) continue; // Set the thumbnail image if the thumbnail // image names at the given index are the same if (thumbImageMetadata->m_thumbFileNameList->at(id).compare( im->m_thumbFileNameList->at(id)) == 0) { // Set the images for the four thumbnail image widgets in case // the node is a folder. Otherwise set the buttonimage widget. if (im->m_type == kUpDirectory || im->m_type == kSubDirectory) { item->SetImage(thumbImageMetadata->m_thumbFileNameList->at(id), QString("thumbimage%1").arg(id+1), true); } else { item->SetImage(thumbImageMetadata->m_thumbFileNameList->at(0), "", true); } break; } } }
void ChannelRecPriority::updateList() { m_channelList->Reset(); QMap<QString, ChannelInfo*>::Iterator it; MythUIButtonListItem *item; for (it = m_sortedChannel.begin(); it != m_sortedChannel.end(); ++it) { ChannelInfo *chanInfo = *it; item = new MythUIButtonListItem(m_channelList, "", qVariantFromValue(chanInfo)); QString fontState = "default"; if (!m_visMap[chanInfo->chanid]) fontState = "disabled"; QString stringFormat = item->GetText(); if (stringFormat.isEmpty()) stringFormat = "<num> <sign> \"<name>\""; item->SetText(chanInfo->GetFormatted(stringFormat), fontState); item->SetText(chanInfo->chanstr, "channum", fontState); item->SetText(chanInfo->callsign, "callsign", fontState); item->SetText(chanInfo->channame, "name", fontState); item->SetText(QString().setNum(chanInfo->sourceid), "sourceid", fontState); item->SetText(chanInfo->sourcename, "sourcename", fontState); if (m_visMap[chanInfo->chanid]) item->DisplayState("normal", "status"); else item->DisplayState("disabled", "status"); item->SetImage(chanInfo->iconpath, "icon"); item->SetImage(chanInfo->iconpath); item->SetText(chanInfo->recpriority, "priority", fontState); if (m_currentItem == chanInfo) m_channelList->SetItemCurrent(item); } MythUIText *norecordingText = dynamic_cast<MythUIText*> (GetChild("norecordings_info")); if (norecordingText) norecordingText->SetVisible(m_channelData.isEmpty()); }
void SearchEditor::fillGrabberButtonList() { for (GrabberScript::scriptList::iterator i = m_grabberList.begin(); i != m_grabberList.end(); ++i) { MythUIButtonListItem *item = new MythUIButtonListItem(m_grabbers, (*i)->GetTitle()); if (item) { item->SetText((*i)->GetTitle(), "title"); item->SetData(qVariantFromValue(*i)); QString img = (*i)->GetImage(); QString thumb; if (!img.startsWith("/") && !img.isEmpty()) thumb = QString("%1mythnetvision/icons/%2").arg(GetShareDir()) .arg((*i)->GetImage()); else thumb = img; item->SetImage(thumb); item->setCheckable(true); item->setChecked(MythUIButtonListItem::NotChecked); QFileInfo fi((*i)->GetCommandline()); if (findSearchGrabberInDB(fi.fileName(), VIDEO)) item->setChecked(MythUIButtonListItem::FullChecked); } else delete item; } }
void NetSearch::customEvent(QEvent *event) { if (event->type() == ThumbnailDLEvent::kEventType) { ThumbnailDLEvent *tde = (ThumbnailDLEvent *)event; ThumbnailData *data = tde->thumb; if (!data) return; QString title = data->title; QString file = data->url; uint pos = qVariantValue<uint>(data->data); if (file.isEmpty() || !((uint)m_searchResultList->GetCount() >= pos)) return; MythUIButtonListItem *item = m_searchResultList->GetItemAt(pos); if (!item) return; if (item->GetText() == title) item->SetImage(file); if (m_searchResultList->GetItemCurrent() == item) SetThumbnail(item); } else NetBase::customEvent(event); }
void NetSearch::PopulateResultList(ResultItem::resultList list) { for (ResultItem::resultList::iterator i = list.begin(); i != list.end(); ++i) { QString title = (*i)->GetTitle(); MythUIButtonListItem *item = new MythUIButtonListItem(m_searchResultList, title, qVariantFromValue(*i)); InfoMap metadataMap; (*i)->toMap(metadataMap); item->SetTextFromMap(metadataMap); if (!(*i)->GetThumbnail().isEmpty()) { QString dlfile = (*i)->GetThumbnail(); if (dlfile.contains("%SHAREDIR%")) { dlfile.replace("%SHAREDIR%", GetShareDir()); item->SetImage(dlfile); } else { uint pos = m_searchResultList->GetItemPos(item); m_imageDownload->addThumb((*i)->GetTitle(), (*i)->GetThumbnail(), qVariantFromValue<uint>(pos)); } } } }
void ThumbFinder::updateThumb(void) { int itemNo = m_imageGrid->GetCurrentPos(); MythUIButtonListItem *item = m_imageGrid->GetItemCurrent(); ThumbImage *thumb = m_thumbList.at(itemNo); if (!thumb) return; // copy current frame image to the selected thumb image QString imageFile = thumb->filename; QFile dst(imageFile); QFile src(m_frameFile); copy(dst, src); item->SetImage(imageFile, "", true); // update the image grid item int64_t pos = (int) ((m_currentPTS - m_startPTS) / m_frameTime); thumb->frame = pos - m_offset; if (itemNo != 0) { thumb->caption = frameToTime(thumb->frame); item->SetText(thumb->caption); } m_imageGrid->SetRedraw(); }
void MetadataResultsDialog::customEvent(QEvent *event) { if (event->type() == ThumbnailDLEvent::kEventType) { ThumbnailDLEvent *tde = (ThumbnailDLEvent *)event; ThumbnailData *data = tde->thumb; QString file = data->url; uint pos = data->data.value<uint>(); if (file.isEmpty()) return; if (!((uint)m_resultsList->GetCount() >= pos)) return; MythUIButtonListItem *item = m_resultsList->GetItemAt(pos); if (item) { item->SetImage(file); } } }
void ChannelRecPriority::updateList() { m_channelList->Reset(); QMap<QString, ChannelInfo*>::Iterator it; for (it = m_sortedChannel.begin(); it != m_sortedChannel.end(); ++it) { ChannelInfo *chanInfo = *it; MythUIButtonListItem *item = new MythUIButtonListItem(m_channelList, "", qVariantFromValue(chanInfo)); QString fontState = "default"; item->SetText(chanInfo->GetFormatted(ChannelInfo::kChannelLong), fontState); InfoMap infomap; chanInfo->ToMap(infomap); item->SetTextFromMap(infomap, fontState); item->DisplayState("normal", "status"); if (!chanInfo->icon.isEmpty()) { QString iconUrl = gCoreContext->GetMasterHostPrefix("ChannelIcons", chanInfo->icon); item->SetImage(iconUrl, "icon"); item->SetImage(iconUrl); } item->SetText(QString::number(chanInfo->recpriority), "priority", fontState); if (m_currentItem == chanInfo) m_channelList->SetItemCurrent(item); } // this textarea name is depreciated use 'nochannels_warning' instead MythUIText *noChannelsText = dynamic_cast<MythUIText*>(GetChild("norecordings_info")); if (!noChannelsText) noChannelsText = dynamic_cast<MythUIText*>(GetChild("nochannels_warning")); if (noChannelsText) noChannelsText->SetVisible(m_channelData.isEmpty()); }
void ChannelRecPriority::updateList() { m_channelList->Reset(); QMap<QString, ChannelInfo*>::Iterator it; MythUIButtonListItem *item; for (it = m_sortedChannel.begin(); it != m_sortedChannel.end(); ++it) { ChannelInfo *chanInfo = *it; item = new MythUIButtonListItem(m_channelList, "", qVariantFromValue(chanInfo)); QString fontState = "default"; if (!m_visMap[chanInfo->chanid]) fontState = "disabled"; item->SetText(chanInfo->GetFormatted(ChannelInfo::kChannelLong), fontState); InfoMap infomap; chanInfo->ToMap(infomap); item->SetTextFromMap(infomap, fontState); if (m_visMap[chanInfo->chanid]) item->DisplayState("normal", "status"); else item->DisplayState("disabled", "status"); item->SetImage(chanInfo->iconpath, "icon"); item->SetImage(chanInfo->iconpath); item->SetText(chanInfo->recpriority, "priority", fontState); if (m_currentItem == chanInfo) m_channelList->SetItemCurrent(item); } MythUIText *norecordingText = dynamic_cast<MythUIText*> (GetChild("norecordings_info")); if (norecordingText) norecordingText->SetVisible(m_channelData.isEmpty()); }
void NetSearch::customEvent(QEvent *event) { if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; if (me->Message().left(17) == "DOWNLOAD_COMPLETE") { QStringList tokens = me->Message() .split(" ", QString::SkipEmptyParts); if (tokens.size() != 2) { VERBOSE(VB_IMPORTANT, "Bad DOWNLOAD_COMPLETE message"); return; } GetMythMainWindow()->HandleMedia("Internal", tokens.takeAt(1)); } } else if (event->type() == ThumbnailDLEvent::kEventType) { ThumbnailDLEvent *tde = (ThumbnailDLEvent *)event; if (!tde) return; ThumbnailData *data = tde->thumb; if (!data) return; QString title = data->title; QString file = data->url; uint pos = qVariantValue<uint>(data->data); if (file.isEmpty() || !((uint)m_searchResultList->GetCount() >= pos)) { delete data; return; } MythUIButtonListItem *item = m_searchResultList->GetItemAt(pos); if (item && item->GetText() == title) { item->SetImage(file); } delete data; } }
void NetSearch::FillGrabberButtonList() { m_siteList->Reset(); for (GrabberScript::scriptList::iterator i = m_grabberList.begin(); i != m_grabberList.end(); ++i) { MythUIButtonListItem *item = new MythUIButtonListItem(m_siteList, (*i)->GetTitle()); item->SetText((*i)->GetTitle(), "title"); item->SetData((*i)->GetCommandline()); QString thumb = QString("%1mythnetvision/icons/%2").arg(GetShareDir()) .arg((*i)->GetImage()); item->SetImage(thumb); } }
void EditAlbumartDialog::updateImageGrid(void) { AlbumArtList *albumArtList = m_albumArt->getImageList(); m_coverartList->Reset(); for (int x = 0; x < albumArtList->size(); x++) { MythUIButtonListItem *item = new MythUIButtonListItem(m_coverartList, AlbumArtImages::getTypeName(albumArtList->at(x)->imageType), qVariantFromValue(albumArtList->at(x))); item->SetImage(albumArtList->at(x)->filename); QString state = albumArtList->at(x)->embedded ? "tag" : "file"; item->DisplayState(state, "locationstate"); } }
void ZMEvents::eventChanged(MythUIButtonListItem *item) { (void) item; if (m_eventNoText) { if (m_eventGrid->GetCount() > 0) m_eventNoText->SetText(QString("%1/%2") .arg(m_eventGrid->GetCurrentPos() + 1).arg(m_eventGrid->GetCount())); else m_eventNoText->SetText("0/0"); } // update the images for all the visible items for (int x = m_eventGrid->GetCurrentPos() - m_eventGrid->GetVisibleCount(); x < m_eventGrid->GetCurrentPos() + (int)m_eventGrid->GetVisibleCount(); x++) { if (x < 0 || x > (int)m_eventGrid->GetCount() - 1) continue; MythUIButtonListItem *gridItem = m_eventGrid->GetItemAt(x); if (gridItem && !gridItem->HasImage()) { if (x < 0 || x > (int)m_eventList->size() - 1) continue; Event *event = m_eventList->at(x); if (event) { QImage image; if (class ZMClient *zm = ZMClient::get()) { zm->getAnalyseFrame(event, 0, image); if (!image.isNull()) { MythImage *mimage = GetMythPainter()->GetFormatImage(); mimage->Assign(image); gridItem->SetImage(mimage); mimage->SetChanged(); mimage->DecrRef(); } } } } } }
void RSSEditor::fillRSSButtonList() { QMutexLocker locker(&m_lock); m_sites->Reset(); for (RSSSite::rssList::iterator i = m_siteList.begin(); i != m_siteList.end(); ++i) { MythUIButtonListItem *item = new MythUIButtonListItem(m_sites, (*i)->GetTitle()); item->SetText((*i)->GetTitle(), "title"); item->SetText((*i)->GetDescription(), "description"); item->SetText((*i)->GetURL(), "url"); item->SetText((*i)->GetAuthor(), "author"); item->SetData(qVariantFromValue(*i)); item->SetImage((*i)->GetImage()); } }
bool MetadataResultsDialog::Create() { if (!LoadWindowFromXML("base.xml", "MythMetadataResults", this)) return false; bool err = false; UIUtilE::Assign(this, m_resultsList, "results", &err); if (err) { LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'MythMetadataResults'"); return false; } for (int i = 0; i != m_results.count(); ++i) { MythUIButtonListItem *button = new MythUIButtonListItem(m_resultsList, m_results[i]->GetTitle()); InfoMap metadataMap; m_results[i]->toMap(metadataMap); QString coverartfile; ArtworkList art = m_results[i]->GetArtwork(kArtworkCoverart); if (art.count() > 0) coverartfile = art.takeFirst().thumbnail; if (coverartfile.isEmpty()) { art = m_results[i]->GetArtwork(kArtworkBanner); if (art.count() > 0) coverartfile = art.takeFirst().thumbnail; } if (coverartfile.isEmpty()) { art = m_results[i]->GetArtwork(kArtworkScreenshot); if (art.count() > 0) coverartfile = art.takeFirst().thumbnail; } QString dlfile = getDownloadFilename(m_results[i]->GetTitle(), coverartfile); if (!coverartfile.isEmpty()) { int pos = m_resultsList->GetItemPos(button); if (QFile::exists(dlfile)) button->SetImage(dlfile); else m_imageDownload->addThumb(m_results[i]->GetTitle(), coverartfile, qVariantFromValue<uint>(pos)); } button->SetTextFromMap(metadataMap); button->SetData(qVariantFromValue<uint>(i)); } connect(m_resultsList, SIGNAL(itemClicked(MythUIButtonListItem *)), SLOT(sendResult(MythUIButtonListItem *))); BuildFocusList(); return true; }
void NetTree::customEvent(QEvent *event) { if (event->type() == ThumbnailDLEvent::kEventType) { ThumbnailDLEvent *tde = (ThumbnailDLEvent *)event; if (!tde) return; ThumbnailData *data = tde->thumb; if (!data) return; QString title = data->title; QString file = data->url; uint pos = qVariantValue<uint>(data->data); if (file.isEmpty()) return; if (m_type == DLG_TREE) { if (title == m_siteMap->GetCurrentNode()->getString() && m_thumbImage) { m_thumbImage->SetFilename(file); m_thumbImage->Load(); m_thumbImage->Show(); } } else { if (!((uint)m_siteButtonList->GetCount() >= pos)) { delete data; return; } MythUIButtonListItem *item = m_siteButtonList->GetItemAt(pos); if (item && item->GetText() == title) { item->SetImage(file); } } delete data; } else if (event->type() == kGrabberUpdateEventType) { doTreeRefresh(); } else if ((MythEvent::Type)(event->type()) == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (tokens.isEmpty()) return; if (tokens[0] == "DOWNLOAD_FILE") { QStringList args = me->ExtraDataList(); if ((tokens.size() != 2) || (args[1] != m_downloadFile)) return; if (tokens[1] == "UPDATE") { QString message = tr("Downloading Video...\n" "(%1 of %2 MB)") .arg(QString::number(args[2].toInt() / 1024.0 / 1024.0, 'f', 2)) .arg(QString::number(args[3].toInt() / 1024.0 / 1024.0, 'f', 2)); m_progressDialog->SetMessage(message); m_progressDialog->SetTotal(args[3].toInt()); m_progressDialog->SetProgress(args[2].toInt()); } else if (tokens[1] == "FINISHED") { int fileSize = args[2].toInt(); int errorCode = args[4].toInt(); if (m_progressDialog) m_progressDialog->Close(); QFileInfo file(m_downloadFile); if ((m_downloadFile.startsWith("myth://"))) { if ((errorCode == 0) && (fileSize > 0)) { doPlayVideo(m_downloadFile); } else { ShowOkPopup(tr("Error downloading video to backend.")); } } } } } }
void MythUIFileBrowser::updateLocalFileList() { QDir d; d.setPath(m_subDirectory); d.setNameFilters(m_nameFilter); d.setFilter(m_typeFilter); d.setSorting(QDir::Name | QDir::DirsFirst | QDir::IgnoreCase); if (!d.exists()) { LOG(VB_GENERAL, LOG_ERR, "MythUIFileBrowser: current directory does not exist!"); m_locationEdit->SetText("/"); m_subDirectory = "/"; d.setPath("/"); } QFileInfoList list = d.entryInfoList(); bool showBackButton = false; if (list.isEmpty()) { MythUIButtonListItem *item = new MythUIButtonListItem(m_fileList, tr("Parent Directory")); item->DisplayState("upfolder", "nodetype"); } else { QFileInfoList::const_iterator it = list.begin(); const QFileInfo *fi; while (it != list.end()) { fi = &(*it); MFileInfo finfo(fi->filePath()); if (finfo.fileName() == ".") { ++it; continue; } QString displayName = finfo.fileName(); QString type; if (displayName == "..") { if (m_subDirectory.endsWith("/")) { ++it; continue; } displayName = tr("Parent"); type = "upfolder"; showBackButton = true; } else if (finfo.isDir()) { type = "folder"; } else if (finfo.isExecutable()) { type = "executable"; } else if (finfo.isFile()) { type = "file"; } MythUIButtonListItem *item = new MythUIButtonListItem(m_fileList, displayName, qVariantFromValue(finfo)); if (IsImage(finfo.suffix())) { item->SetImage(finfo.absoluteFilePath()); type = "image"; } item->SetText(FormatSize(finfo.size()), "filesize"); item->SetText(finfo.absoluteFilePath(), "fullpath"); item->DisplayState(type, "nodetype"); ++it; } } if (m_backButton) m_backButton->SetEnabled(showBackButton); m_locationEdit->SetText(m_subDirectory); }
void MythUIFileBrowser::updateRemoteFileList() { QStringList sgdirlist; QString sgdir; QStringList slist; if (!m_baseDirectory.endsWith("/")) m_baseDirectory.append("/"); QString dirURL = QString("%1%2").arg(m_baseDirectory) .arg(m_subDirectory); if (!GetRemoteFileList(m_baseDirectory, sgdir, sgdirlist)) { LOG(VB_GENERAL, LOG_ERR, "GetRemoteFileList failed to get " "Storage Group dirs"); return; } if ((sgdirlist.size() == 1) && (sgdirlist[0].startsWith("sgdir::"))) { QStringList tokens = sgdirlist[0].split("::"); m_storageGroupDir = tokens[1]; } if (!GetRemoteFileList(dirURL, m_storageGroupDir, slist)) { LOG(VB_GENERAL, LOG_ERR, QString("GetRemoteFileList failed for '%1' in '%2' SG dir") .arg(dirURL).arg(m_storageGroupDir)); return; } m_locationEdit->SetText(dirURL); QString displayName; QString dataName; QString type; if ((sgdirlist.size() > 1 && !m_storageGroupDir.isEmpty()) || (!m_subDirectory.isEmpty())) { displayName = tr("Parent"); type = "upfolder"; m_parentDir = m_baseDirectory; if (!m_subDirectory.isEmpty()) { m_parentDir += "/" + m_subDirectory; int pos = m_parentDir.lastIndexOf('/'); if (pos > 0) m_parentDir = m_parentDir.left(pos); } MFileInfo finfo(m_parentDir, m_storageGroupDir, true); m_parentSGDir = m_storageGroupDir; if (m_subDirectory.isEmpty() && m_parentDir == m_baseDirectory) { finfo.setSGDir(""); m_parentSGDir = ""; } MythUIButtonListItem *item = new MythUIButtonListItem( m_fileList, displayName, qVariantFromValue(finfo)); item->SetText(QString("0"), "filesize"); item->SetText(m_parentDir, "fullpath"); item->DisplayState(type, "nodetype"); if (m_backButton) m_backButton->SetEnabled(true); } else { if (m_backButton) m_backButton->SetEnabled(false); } QStringList::const_iterator it = slist.begin(); while (it != slist.end()) { QStringList tokens = (*it).split("::"); if (tokens.size() < 2) { LOG(VB_GENERAL, LOG_ERR, QString("failed to parse '%1'.").arg(*it)); ++it; continue; } displayName = tokens[1]; if (tokens[0] == "sgdir") dataName = m_baseDirectory; else if (m_subDirectory.isEmpty()) dataName = QString("%1%2").arg(m_baseDirectory) .arg(displayName); else dataName = QString("%1%2/%3").arg(m_baseDirectory) .arg(m_subDirectory).arg(displayName); MFileInfo finfo(dataName, m_storageGroupDir); if ((tokens[0] == "dir") && (m_typeFilter & (QDir::Dirs | QDir::AllDirs))) { type = "folder"; finfo.setIsDir(true); finfo.setSGDir(m_storageGroupDir); finfo.setSize(0); } else if ((tokens[0] == "sgdir") && (m_typeFilter & (QDir::Dirs | QDir::AllDirs))) { type = "folder"; finfo.setIsDir(true); finfo.setSGDir(displayName); finfo.setSize(0); } else if ((tokens[0] == "file") && (m_typeFilter & QDir::Files)) { finfo.setIsDir(false); finfo.setSize(tokens[2].toInt()); if (IsImage(finfo.suffix())) type = "image"; else type = "file"; } else { // unknown type or filtered out ++it; continue; } MythUIButtonListItem *item = new MythUIButtonListItem(m_fileList, displayName, qVariantFromValue(finfo)); if (finfo.size()) item->SetText(FormatSize(finfo.size()), "filesize"); if (type == "image") item->SetImage(dataName); item->SetText(dataName, "fullpath"); item->DisplayState(type, "nodetype"); ++it; } }
void IconView::customEvent(QEvent *event) { if (event->type() == ThumbGenEvent::kEventType) { ThumbGenEvent *tge = dynamic_cast<ThumbGenEvent *>(event); if (!tge) return; ThumbData *td = tge->thumbData; if (!td) return; ThumbItem *thumbitem = m_itemHash.value(td->fileName); if (thumbitem) { int rotateAngle = thumbitem->GetRotationAngle(); if (rotateAngle) { QMatrix matrix; matrix.rotate(rotateAngle); td->thumb = td->thumb.transformed( matrix, Qt::SmoothTransformation); } int pos = m_itemList.indexOf(thumbitem); LoadThumbnail(thumbitem); MythUIButtonListItem *item = m_imageList->GetItemAt(pos); if (QFile(thumbitem->GetImageFilename()).exists()) item->SetImage(thumbitem->GetImageFilename()); if (m_imageList->GetCurrentPos() == pos) UpdateImage(item); } delete td; } else if (event->type() == ChildCountEvent::kEventType) { ChildCountEvent *cce = dynamic_cast<ChildCountEvent *>(event); if (!cce) return; ChildCountData *ccd = cce->childCountData; if (!ccd) return; ThumbItem *thumbitem = m_itemHash.value(ccd->fileName); if (thumbitem) { int pos = m_itemList.indexOf(thumbitem); MythUIButtonListItem *item = m_imageList->GetItemAt(pos); if (item) item->SetText(QString("%1").arg(ccd->count), "childcount"); } delete ccd; } else if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = (DialogCompletionEvent*)(event); QString resultid = dce->GetId(); int resultdata = dce->GetData().toInt(); if (resultid == "mainmenu") { switch (resultdata) { case 0: HandleSlideShow(); break; case 1: HandleRandomShow(); break; case 2: break; case 3: break; case 4: HandleSubMenuFilter(); break; case 5: break; case 6: HandleSettings(); break; case 7: HandleSeasonalShow(); break; } } else if (resultid == "metadatamenu") { switch (resultdata) { case 0: HandleRotateCW(); break; case 1: HandleRotateCCW(); break; } } else if (resultid == "markingmenu") { switch (resultdata) { case 0: HandleSelectOne(); break; case 1: HandleClearOneMarked(); break; case 2: HandleSelectAll(); break; case 3: HandleClearMarked(); break; } } else if (resultid == "filemenu") { switch (resultdata) { case 0: HandleShowDevices(); break; case 1: HandleEject(); break; case 2: HandleImport(); break; case 3: HandleCopyHere(); break; case 4: HandleMoveHere(); break; case 5: HandleDelete(); break; case 6: HandleMkDir(); break; case 7: HandleRename(); break; } } m_menuPopup = NULL; } }
void IconView::LoadDirectory(const QString &dir) { if (m_thumbGen && m_thumbGen->isRunning()) m_thumbGen->cancel(); if (m_childCountThread && m_childCountThread->isRunning()) m_childCountThread->cancel(); QDir d(dir); if (!d.exists()) { LOG(VB_GENERAL, LOG_ERR, LOC + "LoadDirectory called with " + QString("non-existant directory: '%1'").arg(dir)); return; } m_showDevices = false; m_currDir = d.absolutePath(); while (!m_itemList.isEmpty()) delete m_itemList.takeFirst(); m_itemHash.clear(); m_imageList->Reset(); m_isGallery = GalleryUtil::LoadDirectory(m_itemList, dir, *m_galleryFilter, false, &m_itemHash, m_thumbGen); if (m_thumbGen && !m_thumbGen->isRunning()) m_thumbGen->start(); ThumbItem *thumbitem; for (int x = 0; x < m_itemList.size(); x++) { thumbitem = m_itemList.at(x); thumbitem->InitCaption(m_showcaption); MythUIButtonListItem* item = new MythUIButtonListItem(m_imageList, thumbitem->GetCaption(), 0, true, MythUIButtonListItem::NotChecked); item->SetData(qVariantFromValue(thumbitem)); if (thumbitem->IsDir()) { item->DisplayState("subfolder", "nodetype"); m_childCountThread->addFile(thumbitem->GetPath()); } LoadThumbnail(thumbitem); if (QFile(thumbitem->GetImageFilename()).exists()) item->SetImage(thumbitem->GetImageFilename()); if (m_itemMarked.contains(thumbitem->GetPath())) item->setChecked(MythUIButtonListItem::FullChecked); } if (m_childCountThread && !m_childCountThread->isRunning()) m_childCountThread->start(); if (m_noImagesText) m_noImagesText->SetVisible(m_itemList.isEmpty()); if (!m_itemList.isEmpty()) { UpdateText(m_imageList->GetItemCurrent()); UpdateImage(m_imageList->GetItemCurrent()); } }
void ChannelEditor::fillList(void) { QString currentValue = m_channelList->GetValue(); uint currentIndex = qMax(m_channelList->GetCurrentPos(), 0); m_channelList->Reset(); QString newchanlabel = tr("(Add New Channel)"); MythUIButtonListItem *item = new MythUIButtonListItem(m_channelList, ""); item->SetText(newchanlabel, "compoundname"); item->SetText(newchanlabel, "name"); bool fAllSources = true; QString querystr = "SELECT channel.name,channum,chanid,callsign,icon," "visible ,videosource.name FROM channel " "LEFT JOIN videosource ON " "(channel.sourceid = videosource.sourceid) "; if (m_sourceFilter == FILTER_ALL) { fAllSources = true; } else { querystr += QString(" WHERE channel.sourceid='%1' ") .arg(m_sourceFilter); fAllSources = false; } if (m_currentSortMode == tr("Channel Name")) { querystr += " ORDER BY channel.name"; } else if (m_currentSortMode == tr("Channel Number")) { querystr += " ORDER BY channum + 0"; } MSqlQuery query(MSqlQuery::InitCon()); query.prepare(querystr); uint selidx = 0, idx = 1; if (query.exec() && query.size() > 0) { for (; query.next() ; idx++) { QString name = query.value(0).toString(); QString channum = query.value(1).toString(); QString chanid = query.value(2).toString(); QString callsign = query.value(3).toString(); QString icon = query.value(4).toString(); bool visible = query.value(5).toBool(); QString sourceid = "Unassigned"; QString state = "normal"; if (!visible) state = "disabled"; if (!query.value(6).toString().isEmpty()) { sourceid = query.value(6).toString(); if (fAllSources && m_sourceFilter == FILTER_UNASSIGNED) continue; } else state = "warning"; if (channum.isEmpty() && m_currentHideMode) continue; if (name.isEmpty()) name = "(Unnamed : " + chanid + ")"; QString compoundname = name; if (m_currentSortMode == tr("Channel Name")) { if (!channum.isEmpty()) compoundname += " (" + channum + ")"; } else if (m_currentSortMode == tr("Channel Number")) { if (!channum.isEmpty()) compoundname = channum + ". " + compoundname; else compoundname = "???. " + compoundname; } if (m_sourceFilter == FILTER_ALL) compoundname += " (" + sourceid + ")"; bool sel = (chanid == currentValue); selidx = (sel) ? idx : selidx; item = new MythUIButtonListItem(m_channelList, "", qVariantFromValue(chanid)); item->SetText(compoundname, "compoundname"); item->SetText(name, "name"); item->SetText(channum, "channum"); item->SetText(chanid, "chanid"); item->SetText(callsign, "callsign"); item->SetText(sourceid, "sourcename"); item->SetImage(icon); item->SetImage(icon, "icon"); item->DisplayState(state, "status"); } } // Make sure we select the current item, or the following one after // deletion, with wrap around to "(New Channel)" after deleting last item. m_channelList->SetItemCurrent((!selidx && currentIndex < idx) ? currentIndex : selidx); }
void FileSelector::updateFileList() { if (!m_fileButtonList) return; m_fileButtonList->Reset(); while (!m_fileData.isEmpty()) delete m_fileData.takeFirst(); m_fileData.clear(); QDir d; d.setPath(m_curDirectory); if (d.exists()) { // first get a list of directory's in the current directory QStringList filters; filters << "*"; QFileInfoList list = d.entryInfoList(filters, QDir::Dirs, QDir::Name); QFileInfo fi; for (int x = 0; x < list.size(); x++) { fi = list.at(x); if (fi.fileName() != ".") { FileData *data = new FileData; data->selected = false; data->directory = true; data->filename = fi.fileName(); data->size = 0; m_fileData.append(data); // add a row to the MythUIButtonList MythUIButtonListItem* item = new MythUIButtonListItem(m_fileButtonList, data->filename); item->setCheckable(false); item->SetImage("ma_folder.png"); item->SetData(qVariantFromValue(data)); } } if (m_selectorType != FSTYPE_DIRECTORY) { // second get a list of file's in the current directory filters.clear(); filters = m_filemask.split(" ", QString::SkipEmptyParts); list = d.entryInfoList(filters, QDir::Files, QDir::Name); for (int x = 0; x < list.size(); x++) { fi = list.at(x); FileData *data = new FileData; data->selected = false; data->directory = false; data->filename = fi.fileName(); data->size = fi.size(); m_fileData.append(data); // add a row to the UIListBtnArea MythUIButtonListItem* item = new MythUIButtonListItem(m_fileButtonList, data->filename); item->SetText(formatSize(data->size / 1024, 2), "size"); if (m_selectorType == FSTYPE_FILELIST) { item->setCheckable(true); QString fullPath = m_curDirectory; if (!fullPath.endsWith("/")) fullPath += "/"; fullPath += data->filename; if (m_selectedList.indexOf(fullPath) != -1) { item->setChecked(MythUIButtonListItem::FullChecked); } else { item->setChecked(MythUIButtonListItem::NotChecked); } } else item->setCheckable(false); item->SetData(qVariantFromValue(data)); } } m_locationEdit->SetText(m_curDirectory); } else { m_locationEdit->SetText("/"); LOG(VB_GENERAL, LOG_ERR, "MythArchive: current directory does not exist!"); } }
void StreamView::customEvent(QEvent *event) { bool handled = true; if (event->type() == MusicPlayerEvent::PlayedTracksChangedEvent) { if (gPlayer->getPlayedTracksList().count()) updateTrackInfo(gPlayer->getCurrentMetadata()); // add the new track to the list if (m_playedTracksList && gPlayer->getPlayedTracksList().count()) { Metadata *mdata = gPlayer->getPlayedTracksList().last(); MythUIButtonListItem *item = new MythUIButtonListItem(m_playedTracksList, "", qVariantFromValue(mdata), 0); MetadataMap metadataMap; mdata->toMap(metadataMap); item->SetTextFromMap(metadataMap); item->SetFontState("normal"); item->DisplayState("default", "playstate"); item->SetImage(mdata->getAlbumArtFile()); m_playedTracksList->SetItemCurrent(item); } } else if (event->type() == MusicPlayerEvent::TrackChangeEvent) { MusicPlayerEvent *mpe = dynamic_cast<MusicPlayerEvent *>(event); if (!mpe) return; int trackNo = mpe->TrackID; if (m_streamList) { if (m_currentTrack >= 0 && m_currentTrack < m_streamList->GetCount()) { MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); if (item) { item->SetFontState("normal"); item->DisplayState("default", "playstate"); } } if (trackNo >= 0 && trackNo < m_streamList->GetCount()) { if (m_currentTrack == m_streamList->GetCurrentPos()) m_streamList->SetItemCurrent(trackNo); MythUIButtonListItem *item = m_streamList->GetItemAt(trackNo); if (item) { item->SetFontState("running"); item->DisplayState("playing", "playstate"); } } } m_currentTrack = trackNo; updateTrackInfo(gPlayer->getCurrentMetadata()); } else if (event->type() == OutputEvent::Playing) { if (gPlayer->isPlaying()) { if (m_streamList) { MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); if (item) { item->SetFontState("running"); item->DisplayState("playing", "playstate"); } } } // pass it on to the default handler in MusicCommon handled = false; } else if (event->type() == OutputEvent::Stopped) { if (m_streamList) { MythUIButtonListItem *item = m_streamList->GetItemAt(m_currentTrack); if (item) { item->SetFontState("normal"); item->DisplayState("stopped", "playstate"); } } // pass it on to the default handler in MusicCommon handled = false; } else if (event->type() == OutputEvent::Buffering) { } else if (event->type() == MythEvent::MythEventMessage) { MythEvent *me = (MythEvent *)event; QStringList tokens = me->Message().split(" ", QString::SkipEmptyParts); if (tokens.isEmpty()) return; if (tokens[0] == "DOWNLOAD_FILE") { QStringList args = me->ExtraDataList(); if (tokens[1] == "UPDATE") { } else if (tokens[1] == "FINISHED") { QString url = args[0]; int fileSize = args[2].toInt(); int errorCode = args[4].toInt(); QString filename = args[1]; if ((errorCode != 0) || (fileSize == 0)) LOG(VB_GENERAL, LOG_ERR, QString("StreamView: failed to download radio icon from '%1'").arg(url)); else { for (int x = 0; x < m_streamList->GetCount(); x++) { MythUIButtonListItem *item = m_streamList->GetItemAt(x); Metadata *mdata = qVariantValue<Metadata*> (item->GetData()); if (mdata && mdata->LogoUrl() == url) item->SetImage(filename); } } } } } else if (event->type() == DecoderHandlerEvent::OperationStart) { DecoderHandlerEvent *dhe = dynamic_cast<DecoderHandlerEvent*>(event); if (!dhe) return; if (dhe->getMessage() && m_bufferStatus) { m_bufferStatus->SetText(*dhe->getMessage()); } } else if (event->type() == DecoderHandlerEvent::BufferStatus) { DecoderHandlerEvent *dhe = dynamic_cast<DecoderHandlerEvent*>(event); if (!dhe) return; int available, maxSize; dhe->getBufferStatus(&available, &maxSize); if (m_bufferStatus) { QString status = QString("%1%").arg((int)(100.0 / ((double)maxSize / (double)available))); m_bufferStatus->SetText(status); } if (m_bufferProgress) { m_bufferProgress->SetTotal(maxSize); m_bufferProgress->SetUsed(available); } } else if (event->type() == DecoderHandlerEvent::OperationStop) { if (m_bufferStatus) m_bufferStatus->SetText(""); } else if (event->type() == DialogCompletionEvent::kEventType) { DialogCompletionEvent *dce = static_cast<DialogCompletionEvent*>(event); // make sure the user didn't ESCAPE out of the menu if (dce->GetResult() < 0) return; QString resultid = dce->GetId(); QString resulttext = dce->GetResultText(); if (resultid == "streammenu") { if (resulttext == tr("Add Stream")) { MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack(); MythScreenType *screen = new EditStreamMetadata(mainStack, this, NULL); if (screen->Create()) mainStack->AddScreen(screen); else delete screen; } else if (resulttext == tr("Remove Stream")) { removeStream(); } else if (resulttext == tr("Edit Stream")) { editStream(); } } else handled = false; } else handled = false; if (!handled) MusicCommon::customEvent(event); }
bool ImportIconsWizard::search(const QString& strParam) { QString strParam1 = QUrl::toPercentEncoding(strParam); bool retVal = false; enableControls(STATE_SEARCHING); QUrl url(m_url+"/search"); CSVEntry entry2 = (*m_missingIter); QString channelcsv = QString("%1,%2,%3,%4,%5,%6,%7,%8\n") .arg(escape_csv(entry2.strName)) .arg(escape_csv(entry2.strXmlTvId)) .arg(escape_csv(entry2.strCallsign)) .arg(escape_csv(entry2.strTransportId)) .arg(escape_csv(entry2.strAtscMajorChan)) .arg(escape_csv(entry2.strAtscMinorChan)) .arg(escape_csv(entry2.strNetworkId)) .arg(escape_csv(entry2.strServiceId)); QString message = QObject::tr("Searching for icons for channel %1") .arg(entry2.strName); OpenBusyPopup(message); QString str = wget(url,"s="+strParam1+"&csv="+channelcsv); m_listSearch.clear(); m_iconsList->Reset(); if (str.isEmpty() || str.startsWith("#") || str.startsWith("Error", Qt::CaseInsensitive)) { LOG(VB_GENERAL, LOG_ERR, QString("Error from search : %1").arg(str)); retVal = false; } else { LOG(VB_CHANNEL, LOG_INFO, QString("Icon Import: Working search : %1").arg(str)); QStringList strSplit = str.split("\n"); // HACK HACK HACK -- begin // This is needed since the user can't escape out of the progress dialog // and the result set may contain thousands of channels. if (strSplit.size() > 150) { LOG(VB_GENERAL, LOG_WARNING, QString("Warning: Result set contains %1 items, " "truncating to the first %2 results") .arg(strSplit.size()).arg(150)); while (strSplit.size() > 150) strSplit.removeLast(); } // HACK HACK HACK -- end QString prevIconName; int namei = 1; for (int x = 0; x < strSplit.size(); ++x) { QString row = strSplit[x]; if (row != "#" ) { QStringList ret = extract_csv(row); LOG(VB_CHANNEL, LOG_INFO, QString("Icon Import: search : %1 %2 %3") .arg(ret[0]).arg(ret[1]).arg(ret[2])); SearchEntry entry; entry.strID = ret[0]; entry.strName = ret[1]; entry.strLogo = ret[2]; m_listSearch.append(entry); MythUIButtonListItem *item; if (prevIconName == entry.strName) { QString newname = QString("%1 (%2)").arg(entry.strName) .arg(namei); item = new MythUIButtonListItem(m_iconsList, newname, qVariantFromValue(entry)); namei++; } else { item = new MythUIButtonListItem(m_iconsList, entry.strName, qVariantFromValue(entry)); namei=1; } QString iconname = entry.strName; item->SetImage(entry.strLogo, "icon", false); item->SetText(iconname, "iconname"); prevIconName = entry.strName; } } retVal = true; } enableControls(STATE_NORMAL, retVal); CloseBusyPopup(); return retVal; }
void ThemeChooser::Init(void) { QString curTheme = gCoreContext->GetSetting("Theme"); ThemeInfo *themeinfo = NULL; ThemeInfo *curThemeInfo = NULL; MythUIButtonListItem *item = NULL; m_themes->Reset(); for( QFileInfoList::iterator it = m_infoList.begin(); it != m_infoList.end(); ++it ) { QFileInfo &theme = *it; if (!m_themeFileNameInfos.contains(theme.filePath())) continue; themeinfo = m_themeFileNameInfos[theme.filePath()]; if (!themeinfo) continue; QString buttonText = QString("%1 %2.%3") .arg(themeinfo->GetName()) .arg(themeinfo->GetMajorVersion()) .arg(themeinfo->GetMinorVersion()); item = new MythUIButtonListItem(m_themes, buttonText); if (item) { if (themeinfo->GetDownloadURL().isEmpty()) item->DisplayState("local", "themelocation"); else item->DisplayState("remote", "themelocation"); item->DisplayState(themeinfo->GetAspect(), "aspectstate"); item->DisplayState(m_themeStatuses[themeinfo->GetName()], "themestatus"); QHash<QString, QString> infomap; themeinfo->ToMap(infomap); item->SetTextFromMap(infomap); item->SetData(qVariantFromValue(themeinfo)); QString thumbnail = themeinfo->GetPreviewPath(); QFileInfo fInfo(thumbnail); // Downloadable themeinfos have thumbnail copies of their preview images if (!themeinfo->GetDownloadURL().isEmpty()) thumbnail = thumbnail.append(".thumb.jpg"); item->SetImage(thumbnail); if (curTheme == themeinfo->GetDirectoryName()) curThemeInfo = themeinfo; } else delete item; } SetFocusWidget(m_themes); if (curThemeInfo) m_themes->SetValueByData(qVariantFromValue(curThemeInfo)); MythUIButtonListItem *current = m_themes->GetItemCurrent(); if (current) itemChanged(current); }
void LanguageSelection::Load(void) { MythLocale *locale = new MythLocale(); QString langCode; if (gCoreContext->GetLocale()) { // If the global MythLocale instance exists, then we should use it // since it's informed by previously chosen values from the // database. *locale = *gCoreContext->GetLocale(); } else { // If no global MythLocale instance exists then we're probably // bootstrapping before the database is available, in that case // we want to load language from the locale XML defaults if they // exist. // e.g. the locale defaults might define en_GB for Australia which has // no translation of it's own. We can't automatically derive en_GB // from en_AU which MythLocale will arrive at and there is no 'en' // translation. langCode = locale->GetLocaleSetting("Language"); } if (langCode.isEmpty()) langCode = locale->GetLanguageCode(); QString localeCode = locale->GetLocaleCode(); QString countryCode = locale->GetCountryCode(); LOG(VB_GENERAL, LOG_INFO, QString("System Locale (%1), Country (%2), Language (%3)") .arg(localeCode).arg(countryCode).arg(langCode)); QMap<QString,QString> langMap = MythTranslation::getLanguages(); QStringList langs = langMap.values(); langs.sort(); MythUIButtonListItem *item; bool foundLanguage = false; for (QStringList::Iterator it = langs.begin(); it != langs.end(); ++it) { QString nativeLang = *it; QString code = langMap.key(nativeLang); // Slow, but map is small QString language = GetISO639EnglishLanguageName(code); item = new MythUIButtonListItem(m_languageList, nativeLang); item->SetText(language, "language"); item->SetText(nativeLang, "nativelanguage"); item->SetData(code); // We have to compare against locale for languages like en_GB if (code.toLower() == m_language.toLower() || code == langCode || code == localeCode) { m_languageList->SetItemCurrent(item); foundLanguage = true; } } if (m_languageList->IsEmpty()) { LOG(VB_GUI, LOG_ERR, "ERROR - Failed to load translations, at least " "one translation file MUST be installed."); item = new MythUIButtonListItem(m_languageList, "English (United States)"); item->SetText("English (United States)", "language"); item->SetText("English (United States)", "nativelanguage"); item->SetData("en_US"); } if (!foundLanguage) m_languageList->SetValueByData("en_US"); ISO3166ToNameMap localesMap = GetISO3166EnglishCountryMap(); QStringList locales = localesMap.values(); locales.sort(); for (QStringList::Iterator it = locales.begin(); it != locales.end(); ++it) { QString country = *it; QString code = localesMap.key(country); // Slow, but map is small QString nativeCountry = GetISO3166CountryName(code); item = new MythUIButtonListItem(m_countryList, country); item->SetData(code); item->SetText(country, "country"); item->SetText(nativeCountry, "nativecountry"); item->SetImage(QString("locale/%1.png").arg(code.toLower())); if (code == m_country || code == countryCode) m_countryList->SetItemCurrent(item); } delete locale; }
bool ImageSearchResultsDialog::Create() { if (!LoadWindowFromXML("base.xml", "MythArtworkResults", this)) return false; bool err = false; UIUtilE::Assign(this, m_resultsList, "results", &err); if (err) { LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'MythArtworkResults'"); return false; } for (ArtworkList::const_iterator i = m_list.begin(); i != m_list.end(); ++i) { ArtworkInfo info = (*i); MythUIButtonListItem *button = new MythUIButtonListItem(m_resultsList, QString()); button->SetText(info.label, "label"); button->SetText(info.thumbnail, "thumbnail"); button->SetText(info.url, "url"); QString width = QString::number(info.width); QString height = QString::number(info.height); button->SetText(width, "width"); button->SetText(height, "height"); if (info.width > 0 && info.height > 0) button->SetText(QString("%1x%2").arg(width).arg(height), "resolution"); QString artfile = info.thumbnail; if (artfile.isEmpty()) artfile = info.url; QString dlfile = getDownloadFilename(info.label, artfile); if (!artfile.isEmpty()) { int pos = m_resultsList->GetItemPos(button); if (QFile::exists(dlfile)) button->SetImage(dlfile); else m_imageDownload->addThumb(info.label, artfile, qVariantFromValue<uint>(pos)); } button->SetData(qVariantFromValue<ArtworkInfo>(*i)); } connect(m_resultsList, SIGNAL(itemClicked(MythUIButtonListItem *)), SLOT(sendResult(MythUIButtonListItem *))); BuildFocusList(); return true; }