void KGet_plug_in::slotShowLinks() { if ( !parent() || !parent()->inherits( "KHTMLPart" ) ) return; KHTMLPart *htmlPart = static_cast<KHTMLPart*>( parent() ); KParts::Part *activePart = 0L; if ( htmlPart->partManager() ) { activePart = htmlPart->partManager()->activePart(); if ( activePart && activePart->inherits( "KHTMLPart" ) ) htmlPart = static_cast<KHTMLPart*>( activePart ); } DOM::HTMLDocument doc = htmlPart->htmlDocument(); if ( doc.isNull() ) return; DOM::HTMLCollection links = doc.links(); QPtrList<LinkItem> linkList; std::set<QString> dupeCheck; for ( uint i = 0; i < links.length(); i++ ) { DOM::Node link = links.item( i ); if ( link.isNull() || link.nodeType() != DOM::Node::ELEMENT_NODE ) continue; LinkItem *item = new LinkItem( (DOM::Element) link ); if ( item->isValid() && dupeCheck.find( item->url.url() ) == dupeCheck.end() ) { linkList.append( item ); dupeCheck.insert( item->url.url() ); } else delete item; } if ( linkList.isEmpty() ) { KMessageBox::sorry( htmlPart->widget(), i18n("There are no links in the active frame of the current HTML page."), i18n("No Links") ); return; } KGetLinkView *view = new KGetLinkView(); QString url = doc.URL().string(); view->setPageURL( url ); view->setLinks( linkList ); view->show(); }
Audio::Audio(ExecState *exec, DOM::DocumentImpl* d, const QString& url) : m_doc(d), m_cs(0), m_qObj(new AudioQObject(this)), m_onLoadListener(0), m_onErrorListener(0) { setPrototype(AudioProto::self(exec)); KHTMLPart *part = qobject_cast<KHTMLPart*>(Window::retrieveActive(exec)->part()); if (part) m_url = part->htmlDocument().completeURL(url).string(); m_cs = m_doc->docLoader()->requestSound( DOM::DOMString(m_url) ); }
void KHTMLPluginKTTSD::slotReadOut() { // The parent is assumed to be a KHTMLPart if(!parent()->inherits("KHTMLPart")) QMessageBox::warning(0, i18n("Cannot Read source"), i18n("You cannot read anything except web pages with\n" "this plugin, sorry.")); else { // If KTTSD not running, start it. DCOPClient *client = kapp->dcopClient(); if(!client->isApplicationRegistered("kttsd")) { QString error; if(kapp->startServiceByDesktopName("kttsd", QStringList(), &error)) QMessageBox::warning(0, i18n("Starting KTTSD Failed"), error); } // Find out if KTTSD supports xhtml (rich speak). QByteArray data; QBuffer dataBuf(data); QDataStream arg; dataBuf.open(IO_WriteOnly); arg.setDevice(&dataBuf); arg << "" << KSpeech::mtHtml; QCString replyType; QByteArray replyData; bool supportsXhtml = false; if(!client->call("kttsd", "KSpeech", "supportsMarkup(QString,uint)", data, replyType, replyData, true)) QMessageBox::warning(0, i18n("DCOP Call Failed"), i18n("The DCOP call supportsMarkup failed.")); else { QDataStream reply(replyData, IO_ReadOnly); reply >> supportsXhtml; } KHTMLPart *part = (KHTMLPart *)parent(); QString query; if(supportsXhtml) { kdDebug() << "KTTS claims to support rich speak (XHTML to SSML)." << endl; if(part->hasSelection()) query = part->selectedTextAsHTML(); else { // TODO: Fooling around with the selection probably has unwanted // side effects, but until a method is supplied to get valid xhtml // from entire document.. // query = part->document().toString().string(); part->selectAll(); query = part->selectedTextAsHTML(); // Restore no selection. part->setSelection(part->document().createRange()); } } else { if(part->hasSelection()) query = part->selectedText(); else query = part->htmlDocument().body().innerText().string(); } // kdDebug() << "KHTMLPluginKTTSD::slotReadOut: query = " << query << endl; dataBuf.at(0); // reset data arg << query << ""; if(!client->call("kttsd", "KSpeech", "setText(QString,QString)", data, replyType, replyData, true)) QMessageBox::warning(0, i18n("DCOP Call Failed"), i18n("The DCOP call setText failed.")); dataBuf.at(0); arg << 0; if(!client->call("kttsd", "KSpeech", "startText(uint)", data, replyType, replyData, true)) QMessageBox::warning(0, i18n("DCOP Call Failed"), i18n("The DCOP call startText failed.")); } }