void NetSearch::SlotItemChanged() { ResultItem *item = qVariantValue<ResultItem *>(m_searchResultList->GetDataValue()); if (item && GetFocusWidget() == m_searchResultList) { SetTextAndThumbnail(m_searchResultList->GetItemCurrent(), item); if (m_downloadable) { if (item->GetDownloadable()) m_downloadable->DisplayState("yes"); else m_downloadable->DisplayState("no"); } } else if (GetFocusWidget() == m_siteList) { MythUIButtonListItem *btn = m_siteList->GetItemCurrent(); ResultItem res(btn->GetText(), QString(), QString(), QString(), QString(), QString(), QString(), QDateTime(), 0, 0, -1, QString(), QStringList(), QString(), QStringList(), 0, 0, QString(), 0, QStringList(), 0, 0, 0); SetTextAndThumbnail(btn, &res); } }
void NetTree::doDeleteVideo(bool remove) { if (!remove) return; ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; QString filename = GetDownloadFilename(item->GetTitle(), item->GetMediaURL()); if (filename.startsWith("myth://")) RemoteFile::DeleteFile(filename); else { QFile file(filename); file.remove(); } }
void NetTree::streamWebVideo() { ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; if (!item->GetDownloadable()) { showWebVideo(); return; } GetMythMainWindow()->HandleMedia("Internal", item->GetMediaURL(), item->GetDescription(), item->GetTitle(), item->GetSubtitle(), QString(), item->GetSeason(), item->GetEpisode(), QString(), item->GetTime().toInt(), item->GetDate().toString("yyyy")); }
void MainWindow::slotAction( int act ) { if ( _currentItem && _currentItem->rtti() == OListViewItem::Result){ ResultItem *res = (ResultItem*)_currentItem; // ResultItem *res = dynamic_cast<ResultItem*>(item); res->action(act); } }
void ResultStoreBase::insertResultItemIfValid(int index, ResultItem &resultItem) { if (resultItem.isValid()) { m_results[index] = resultItem; syncResultCount(); } else { filteredResults += resultItem.count(); } }
void NetSearch::doDownloadAndPlay() { QMutexLocker locker(&m_lock); ResultItem *item = qVariantValue<ResultItem *>(m_searchResultList->GetDataValue()); if (!item) return; VERBOSE(VB_GENERAL, QString("Downloading and Inserting %1 " "into Recordings").arg(item->GetTitle())); QString filename = getDownloadFilename(item); // Does the file already exist? bool exists; if (filename.startsWith("myth://")) exists = RemoteFile::Exists(filename); else exists = QFile::exists(filename); if (exists) { QString message = tr("This file already downloaded to:\n%1").arg(filename); MythConfirmationDialog *confirmdialog = new MythConfirmationDialog(m_popupStack,message, false); if (confirmdialog->Create()) m_popupStack->AddScreen(confirmdialog); else delete confirmdialog; return; } if (m_progress) m_progress->SetVisible(true); // Initialize the download m_redirects = 0; m_currentDownload = filename; }
void MainWindow::setCurrent(QListViewItem *item) { if (!item) return; _currentItem = (OListViewItem*)item; // _currentItem = dynamic_cast<OListViewItem*>(item); if (_currentItem->rtti() == OListViewItem::Result) { ResultItem *res = (ResultItem*)item; // ResultItem *res = dynamic_cast<ResultItem*>(item); richEdit->setText( res->toRichText() ); QIntDict<QString> acts = res->actions(); QButton *button; for (uint i = 0; i < acts.count(); i++) { button = buttonMap[i]; if (!button && acts[i]) { owarn << " no button for " << *acts[i] << oendl; button = new QPushButton( buttonBox ); buttonMap.insert( i, button ); signalMapper->setMapping(button, i ); connect(button, SIGNAL(clicked() ), signalMapper, SLOT(map() ) ); } else if (!acts[i]) { owarn << "No action for index " << i << oendl; continue; } button->setText( *acts[i] ); button->show(); } for (uint i = acts.count(); i < _buttonCount; i++) { button = buttonMap[i]; if (button) button->hide(); } _buttonCount = acts.count(); detailsFrame->show(); buttonBox->show(); } else { detailsFrame->hide(); buttonBox->hide(); } popupTimer->start( 300, true ); }
void NetTree::showMenu(void) { QString label = tr("Playback/Download Options"); MythMenu *menu = new MythMenu(label, this, "options"); ResultItem *item = NULL; if (m_type == DLG_TREE) { MythGenericTree *node = m_siteMap->GetCurrentNode(); if (node) item = qVariantValue<ResultItem *>(node->GetData()); } else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (node) item = qVariantValue<ResultItem *>(node->GetData()); } if (item) { if (item->GetDownloadable()) menu->AddItem(tr("Stream Video"), SLOT(streamWebVideo())); menu->AddItem(tr("Open Web Link"), SLOT(showWebVideo())); if (item->GetDownloadable()) menu->AddItem(tr("Save This Video"), SLOT(doDownloadAndPlay())); } menu->AddItem(tr("Scan/Manage Subscriptions"), NULL, createShowManageMenu()); menu->AddItem(tr("Change View"), NULL, createShowViewMenu()); MythDialogBox *menuPopup = new MythDialogBox(menu, m_popupStack, "mythnettreemenupopup"); if (menuPopup->Create()) m_popupStack->AddScreen(menuPopup); else delete menuPopup; }
void NetTree::doDownloadAndPlay() { ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; QString baseFilename = GetDownloadFilename(item->GetTitle(), item->GetMediaURL()); QString finalFilename = generate_file_url("Default", gCoreContext->GetMasterHostName(), baseFilename); LOG(VB_GENERAL, LOG_INFO, QString("Downloading %1 to %2") .arg(item->GetMediaURL()) .arg(finalFilename)); // Does the file already exist? bool exists = RemoteFile::Exists(finalFilename); if (exists) { doPlayVideo(finalFilename); return; } else DownloadVideo(item->GetMediaURL(), baseFilename); }
int ResultStoreBase::insertResultItem(int index, ResultItem &resultItem) { int storeIndex; if (m_filterMode && index != -1 && index > insertIndex) { pendingResults[index] = resultItem; storeIndex = index; } else { storeIndex = updateInsertIndex(index, resultItem.count()); insertResultItemIfValid(storeIndex - filteredResults, resultItem); } syncPendingResults(); return storeIndex; }
void GrepWindow::_OnNodeMonitorEvent(BMessage* message) { int32 opCode; if (message->FindInt32("opcode", &opCode) != B_OK) return; if (fChangesIterator == NULL) { fChangesIterator = new (nothrow) ChangesIterator(fModel); if (fChangesIterator == NULL || !fChangesIterator->IsValid()) { delete fChangesIterator; fChangesIterator = NULL; } } switch (opCode) { case B_ENTRY_CREATED: case B_ENTRY_REMOVED: { TRACE_NM("%s\n", opCode == B_ENTRY_CREATED ? "B_ENTRY_CREATED" : "B_ENTRY_REMOVED"); BString path; if (message->FindString("path", &path) == B_OK) { if (opCode == B_ENTRY_CREATED) fChangesIterator->EntryAdded(path.String()); else { // in order to remove temporary files fChangesIterator->EntryRemoved(path.String()); // remove from the list view already BEntry entry(path.String()); entry_ref ref; if (entry.GetRef(&ref) == B_OK) fSearchResults->RemoveResults(ref, true); } } else { #ifdef TRACE_NODE_MONITORING printf("incompatible message:\n"); message->PrintToStream(); #endif } TRACE_NM("path: %s\n", path.String()); break; } case B_ENTRY_MOVED: { TRACE_NM("B_ENTRY_MOVED\n"); BString path; if (message->FindString("path", &path) != B_OK) { #ifdef TRACE_NODE_MONITORING printf("incompatible message:\n"); message->PrintToStream(); #endif break; } bool added; if (message->FindBool("added", &added) != B_OK) added = false; bool removed; if (message->FindBool("removed", &removed) != B_OK) removed = false; if (added) { // new files } else if (removed) { // remove files } else { // files changed location, but are still within the search // path! BEntry entry(path.String()); entry_ref ref; if (entry.GetRef(&ref) == B_OK) { int32 index; ResultItem* item = fSearchResults->FindItem(ref, &index); item->SetText(path.String()); // take care of invalidation, the index is currently // the full list index, but needs to be the visible // items index for this index = fSearchResults->IndexOf(item); fSearchResults->InvalidateItem(index); } } break; } case B_STAT_CHANGED: case B_ATTR_CHANGED: { TRACE_NM("%s\n", opCode == B_STAT_CHANGED ? "B_STAT_CHANGED" : "B_ATTR_CHANGED"); // For directly watched files, the path will include the // name. When the event occurs for a file in a watched directory, // the message will have an extra name field for the respective // file. BString path; if (message->FindString("path", &path) == B_OK) { fChangesIterator->EntryChanged(path.String()); } else { #ifdef TRACE_NODE_MONITORING printf("incompatible message:\n"); message->PrintToStream(); #endif } TRACE_NM("path: %s\n", path.String()); // message->PrintToStream(); break; } default: TRACE_NM("unkown op code\n"); break; } fLastNodeMonitorEvent = system_time(); }
void NetTree::slotItemChanged() { ResultItem *item; RSSSite *site; if (m_type == DLG_TREE) { item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); site = qVariantValue<RSSSite *>(m_siteMap->GetCurrentNode()->GetData()); } else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); site = qVariantValue<RSSSite *>(node->GetData()); } if (item) { MetadataMap metadataMap; item->toMap(metadataMap); SetTextFromMap(metadataMap); if (!item->GetThumbnail().isEmpty() && m_thumbImage) { m_thumbImage->Reset(); QString dlfile = item->GetThumbnail(); if (dlfile.contains("%SHAREDIR%")) { dlfile.replace("%SHAREDIR%", GetShareDir()); m_thumbImage->SetFilename(dlfile); m_thumbImage->Load(); } else { QString sFilename = getDownloadFilename(item->GetTitle(), item->GetThumbnail()); bool exists = QFile::exists(sFilename); if (exists) { m_thumbImage->SetFilename(sFilename); m_thumbImage->Load(); } } } else if (m_thumbImage) m_thumbImage->Reset(); if (m_downloadable) { if (item->GetDownloadable()) m_downloadable->DisplayState("yes"); else m_downloadable->DisplayState("no"); } } else if (site) { ResultItem *res = new ResultItem(site->GetTitle(), QString(), site->GetDescription(), site->GetURL(), site->GetImage(), QString(), site->GetAuthor(), QDateTime(), 0, 0, -1, QString(), QStringList(), QString(), QStringList(), 0, 0, QString(), 0, QStringList(), 0, 0, 0); MetadataMap metadataMap; res->toMap(metadataMap); SetTextFromMap(metadataMap); if (!site->GetImage().isEmpty() && m_thumbImage) { m_thumbImage->SetFilename(site->GetImage()); m_thumbImage->Load(); } else if (m_thumbImage) m_thumbImage->Reset(); if (m_downloadable) { m_downloadable->Reset(); } } else { QString title; if (m_type == DLG_TREE) title = m_siteMap->GetItemCurrent()->GetText(); else title = m_siteButtonList->GetItemCurrent()->GetText(); QString thumb; if (m_type == DLG_TREE) thumb = m_siteMap->GetCurrentNode()-> GetData().toString(); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (node) thumb = node->GetData().toString(); } ResultItem *res = new ResultItem(title, QString(), QString(), QString(), thumb, QString(), QString(), QDateTime(), 0, 0, -1, QString(), QStringList(), QString(), QStringList(), 0, 0, QString(), 0, QStringList(), 0, 0, 0); MetadataMap metadataMap; res->toMap(metadataMap); SetTextFromMap(metadataMap); if (m_thumbImage) { if (!thumb.startsWith("http://")) { if (thumb.contains("%SHAREDIR%")) thumb.replace("%SHAREDIR%", GetShareDir()); bool exists = QFile::exists(thumb); if (exists) { m_thumbImage->SetFilename(thumb); m_thumbImage->Load(); } else m_thumbImage->Reset(); } else { QString url = thumb; QString title; if (m_type == DLG_TREE) title = m_siteMap->GetItemCurrent()->GetText(); else title = m_siteButtonList->GetItemCurrent()->GetText(); QString sFilename = GetDownloadFilename(title, url); bool exists = QFile::exists(sFilename); if (exists && !url.isEmpty()) { m_thumbImage->SetFilename(sFilename); m_thumbImage->Load(); } else m_thumbImage->Reset(); } } if (m_downloadable) m_downloadable->Reset(); } }
void NetTree::showWebVideo() { ResultItem *item; if (m_type == DLG_TREE) item = qVariantValue<ResultItem *>(m_siteMap->GetCurrentNode()->GetData()); else { MythGenericTree *node = GetNodePtrFromButton(m_siteButtonList->GetItemCurrent()); if (!node) return; item = qVariantValue<ResultItem *>(node->GetData()); } if (!item) return; if (!item->GetPlayer().isEmpty()) { QString cmd = item->GetPlayer(); QStringList args = item->GetPlayerArguments(); if (!args.size()) { args += item->GetMediaURL(); if (!args.size()) args += item->GetURL(); } else { args.replaceInStrings("%DIR%", QString(GetConfDir() + "/MythNetvision")); args.replaceInStrings("%MEDIAURL%", item->GetMediaURL()); args.replaceInStrings("%URL%", item->GetURL()); args.replaceInStrings("%TITLE%", item->GetTitle()); } QString playerCommand = cmd + " " + args.join(" "); myth_system(playerCommand); } else { QString url = item->GetURL(); LOG(VB_GENERAL, LOG_DEBUG, QString("Web URL = %1").arg(url)); if (url.isEmpty()) return; QString browser = gCoreContext->GetSetting("WebBrowserCommand", ""); QString zoom = gCoreContext->GetSetting("WebBrowserZoomLevel", "1.0"); if (browser.isEmpty()) { ShowOkPopup(tr("No browser command set! MythNetTree needs MythBrowser " "installed to display the video.")); return; } if (browser.toLower() == "internal") { GetMythMainWindow()->HandleMedia("WebBrowser", url); return; } else { QString cmd = browser; cmd.replace("%ZOOM%", zoom); cmd.replace("%URL%", url); cmd.replace('\'', "%27"); cmd.replace("&","\\&"); cmd.replace(";","\\;"); GetMythMainWindow()->AllowInput(false); myth_system(cmd, kMSDontDisableDrawing); GetMythMainWindow()->AllowInput(true); return; } } }
void NetSearch::showWebVideo() { QMutexLocker locker(&m_lock); ResultItem *item = qVariantValue<ResultItem *>(m_searchResultList->GetDataValue()); if (!item) return; if (!item->GetPlayer().isEmpty()) { QString cmd = item->GetPlayer(); QStringList args = item->GetPlayerArguments(); if (!args.size()) { args += item->GetMediaURL(); if (!args.size()) args += item->GetURL(); } else { args.replaceInStrings("%DIR%", QString(GetConfDir() + "/MythNetvision")); args.replaceInStrings("%MEDIAURL%", item->GetMediaURL()); args.replaceInStrings("%URL%", item->GetURL()); args.replaceInStrings("%TITLE%", item->GetTitle()); } QString playerCommand = cmd + " " + args.join(" "); myth_system(playerCommand); } else { QString url = item->GetURL(); VERBOSE(VB_GENERAL|VB_EXTRA, QString("Web URL = %1").arg(url)); if (url.isEmpty()) return; QString browser = gCoreContext->GetSetting("WebBrowserCommand", ""); QString zoom = gCoreContext->GetSetting("WebBrowserZoomLevel", "1.0"); if (browser.isEmpty()) { ShowOkPopup(tr("No browser command set! MythNetVision needs MythBrowser " "installed to display the video.")); return; } if (browser.toLower() == "internal") { GetMythMainWindow()->HandleMedia("WebBrowser", url); return; } else { QString cmd = browser; cmd.replace("%ZOOM%", zoom); cmd.replace("%URL%", url); cmd.replace('\'', "%27"); cmd.replace("&","\\&"); cmd.replace(";","\\;"); GetMythMainWindow()->AllowInput(false); myth_system(cmd, kMSDontDisableDrawing); GetMythMainWindow()->AllowInput(true); return; } } }
void NetSearch::ShowMenu(void) { QString label = tr("Search Options"); MythDialogBox *menuPopup = new MythDialogBox(label, m_popupStack, "mythnetvisionmenupopup"); if (menuPopup->Create()) { m_popupStack->AddScreen(menuPopup); menuPopup->SetReturnEvent(this, "options"); if (m_searchResultList->GetCount() > 0) { ResultItem *item = GetStreamItem(); if (item) { if (item->GetDownloadable()) menuPopup->AddButton(tr("Stream Video"), SLOT(StreamWebVideo())); menuPopup->AddButton(tr("Open Web Link"), SLOT(ShowWebVideo())); QString filename = GetDownloadFilename(item->GetTitle(), item->GetMediaURL()); bool exists = false; if (filename.startsWith("myth://")) exists = RemoteFile::Exists(filename); else exists = QFile::exists(filename); if (item->GetDownloadable() && GetFocusWidget() == m_searchResultList) { if (exists) menuPopup->AddButton(tr("Play"), SLOT(DoPlayVideo(filename))); else menuPopup->AddButton(tr("Save This Video"), SLOT(DoDownloadAndPlay())); } if (item->GetDownloadable() && GetFocusWidget() == m_searchResultList && exists) { menuPopup->AddButton(tr("Delete"), SLOT(SlotDeleteVideo())); } } if (m_pagenum > 1) menuPopup->AddButton(tr("Previous Page"), SLOT(GetLastResults())); if (m_searchResultList->GetCount() > 0 && m_pagenum < m_maxpage) menuPopup->AddButton(tr("Next Page"), SLOT(GetMoreResults())); } menuPopup->AddButton(tr("Manage Search Scripts"), SLOT(RunSearchEditor())); } else delete menuPopup; }
void NetSearch::slotItemChanged() { QMutexLocker locker(&m_lock); ResultItem *item = qVariantValue<ResultItem *>(m_searchResultList->GetDataValue()); if (item && GetFocusWidget() == m_searchResultList) { MetadataMap metadataMap; item->toMap(metadataMap); SetTextFromMap(metadataMap); if (!item->GetThumbnail().isEmpty() && m_thumbImage) { MythUIButtonListItem *btn = m_searchResultList->GetItemCurrent(); QString filename = btn->GetImage(); if (filename.contains("%SHAREDIR%")) filename.replace("%SHAREDIR%", GetShareDir()); m_thumbImage->Reset(); if (!filename.isEmpty()) { m_thumbImage->SetFilename(filename); m_thumbImage->Load(); } } if (m_downloadable) { if (item->GetDownloadable()) m_downloadable->DisplayState("yes"); else m_downloadable->DisplayState("no"); } } else if (GetFocusWidget() == m_siteList) { MythUIButtonListItem *item = m_siteList->GetItemCurrent(); ResultItem *res = new ResultItem(item->GetText(), QString(), QString(), QString(), QString(), QString(), QString(), QDateTime(), 0, 0, -1, QString(), QStringList(), QString(), QStringList(), 0, 0, QString(), 0, QStringList(), 0, 0, 0); MetadataMap metadataMap; res->toMap(metadataMap); SetTextFromMap(metadataMap); if (m_thumbImage) { QString filename = item->GetImage(); m_thumbImage->Reset(); if (filename.contains("%SHAREDIR%")) filename.replace("%SHAREDIR%", GetShareDir()); if (!filename.isEmpty()) { m_thumbImage->SetFilename(filename); m_thumbImage->Load(); } } } }
void NetTree::UpdateItem(MythUIButtonListItem *item) { if (!item) return; MythGenericTree *node = GetNodePtrFromButton(item); if (!node) return; RSSSite *site = qVariantValue<RSSSite *>(node->GetData()); ResultItem *video = qVariantValue<ResultItem *>(node->GetData()); int nodeInt = node->getInt(); if (nodeInt == kSubFolder) { item->SetText(QString("%1").arg(node->visibleChildCount()), "childcount"); item->DisplayState("subfolder", "nodetype"); item->SetText(node->getString(), "title"); item->SetText(node->getString()); item->SetImage(node->GetData().toString()); } else if (nodeInt == kUpFolder) { item->DisplayState("upfolder", "nodetype"); item->SetText(node->getString(), "title"); item->SetText(node->getString()); } if (site) { item->SetText(site->GetTitle()); item->SetText(site->GetDescription(), "description"); item->SetText(site->GetURL(), "url"); item->SetImage(site->GetImage()); } else if (video) { item->SetText(video->GetTitle()); MetadataMap metadataMap; video->toMap(metadataMap); item->SetTextFromMap(metadataMap); int pos; if (m_type == DLG_TREE) pos = 0; else pos = m_siteButtonList->GetItemPos(item); QString dlfile = video->GetThumbnail(); if (dlfile.contains("%SHAREDIR%")) dlfile.replace("%SHAREDIR%", GetShareDir()); else dlfile = getDownloadFilename(video->GetTitle(), video->GetThumbnail()); if (QFile::exists(dlfile)) item->SetImage(dlfile); else if (video->GetThumbnail().startsWith("http")) m_imageDownload->addThumb(video->GetTitle(), video->GetThumbnail(), qVariantFromValue<uint>(pos)); } else { item->SetText(node->getString()); if (!node->GetData().toString().isEmpty()) { QString tpath = node->GetData().toString(); if (tpath.startsWith("http://")) { uint pos; if (m_type == DLG_TREE) pos = 0; else pos = m_siteButtonList->GetItemPos(item); QString dlfile = GetThumbnailFilename(tpath, node->getString()); if (QFile::exists(dlfile)) item->SetImage(dlfile); else m_imageDownload->addThumb(node->getString(), tpath, qVariantFromValue<uint>(pos)); } else if (tpath != "0") { QString filename = node->GetData().toString(); if (filename.contains("%SHAREDIR%")) filename.replace("%SHAREDIR%", GetShareDir()); item->SetImage(filename); } } } }
void NetSearch::showMenu(void) { QMutexLocker locker(&m_lock); QString label = tr("Search Options"); MythDialogBox *menuPopup = new MythDialogBox(label, m_popupStack, "mythnetvisionmenupopup"); if (menuPopup->Create()) { m_popupStack->AddScreen(menuPopup); menuPopup->SetReturnEvent(this, "options"); if (m_searchResultList->GetCount() > 0) { ResultItem *item = qVariantValue<ResultItem *>(m_searchResultList->GetDataValue()); QString filename; bool exists = false; if (item) { menuPopup->AddButton(tr("Open Web Link"), SLOT(showWebVideo())); filename = getDownloadFilename(item); if (filename.startsWith("myth://")) exists = RemoteFile::Exists(filename); else exists = QFile::exists(filename); } if (item && item->GetDownloadable() && GetFocusWidget() == m_searchResultList) { if (exists) menuPopup->AddButton(tr("Play"), SLOT(doPlayVideo())); else menuPopup->AddButton(tr("Save This Video"), SLOT(doDownloadAndPlay())); } if (item && item->GetDownloadable() && GetFocusWidget() == m_searchResultList && exists) { menuPopup->AddButton(tr("Delete"), SLOT(slotDeleteVideo())); } if (m_pagenum > 1) menuPopup->AddButton(tr("Previous Page"), SLOT(getLastResults())); if (m_searchResultList->GetCount() > 0 && m_pagenum < m_maxpage) menuPopup->AddButton(tr("Next Page"), SLOT(getMoreResults())); } menuPopup->AddButton(tr("Manage Search Scripts"), SLOT(runSearchEditor())); } else { delete menuPopup; } }