⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mghtml_part.cpp

📁 monqueror一个很具有参考价值的源玛
💻 CPP
📖 第 1 页 / 共 5 页
字号:
bool MGHTMLPart::restoreURL( const KURL &url ){//	d->m_redirectionTimer.stop();//	kdDebug( 6050 ) << "closing old URL" << endl;	closeURL();	d->m_bComplete = false;	d->m_workingURL = url;  // set the java(script) flags according to the current host.//	d->m_bJScriptEnabled = KHTMLFactory::defaultHTMLSettings()->isJavaScriptEnabled(url.host());	d->m_bJScriptEnabled = false;//	d->m_bJavaEnabled = KHTMLFactory::defaultHTMLSettings()->isJavaEnabled(url.host());	d->m_bJavaEnabled = false;	m_url = url;//	KHTMLPageCache::self()->fetchData( d->m_cacheId, this, SLOT(slotRestoreData(const QByteArray &)));//	emit started( 0L );	slotChildStarted(0L);	return true;}void MGHTMLPart::checkCompleted(){	int requests = 0;	ConstFrameIt it = d->m_frames.begin();	ConstFrameIt end = d->m_frames.end();	for (; it != end; ++it )		if ( !(*it).m_bCompleted )			return;//	requests = khtml::Cache::loader()->numRequests( m_url.url() );  //kdDebug( 6060 ) << "number of loader requests: " << requests << endl;//	if ( requests > 0 )//		return;	if ( d->m_bParsing || d->m_bComplete )		return;	d->m_bComplete = true;//	if (!parentPart())//		emit setStatusBarText(i18n("Done."));//	if ( !d->m_redirectURL.isEmpty() )//		d->m_redirectionTimer.start( 1000 * d->m_delayRedirect, true );//	if ( !d->m_redirectURL.isEmpty() )	{		return; // We don't emit completed as long as we have a redirection pending.		// We might want to add a message to the statusbar when we are not i18n-frozen.	}//	emit completed();	updateActions();}void MGHTMLPart::slotChildStarted( KIO::Job *job )				//	!!!!! modify job{	khtml::ChildFrame *child = frame( sender() );	assert( child );	child->m_bCompleted = false;	if ( d->m_bComplete )	{#if 0	// WABA: Looks like this belongs somewhere else		if ( !parentPart() ) 		{			emit d->m_extension->openURLNotify();				// !!!!! modify it		}#endif		d->m_bComplete = false;//		emit started( job );		slotChildStarted(job);	}}void MGHTMLPart::slotChildCompleted(){	khtml::ChildFrame *child = frame( sender() );	assert( child );	child->m_bCompleted = true;	child->m_args = KParts::URLArgs();	checkCompleted();}void MGHTMLPart::updateFontSize( int add ){	resetFontSizes();	QValueList<int> sizes = fontSizes();	QValueList<int>::Iterator it = sizes.begin();	QValueList<int>::Iterator end = sizes.end();	for (; it != end; ++it )		(*it) += add;	setFontSizes( sizes );//	QApplication::setOverrideCursor( waitCursor );	if(d->m_doc)		d->m_doc->applyChanges();//	QApplication::restoreOverrideCursor();}void MGHTMLPart::slotIncFontSizes(){	updateFontSize( ++d->m_fontBase );	if ( !d->m_paDecFontSizes->isEnabled() )		d->m_paDecFontSizes->setEnabled( true );}void MGHTMLPart::slotDecFontSizes(){	if ( d->m_fontBase >= 1 )		updateFontSize( --d->m_fontBase );	if ( d->m_fontBase == 0 )		d->m_paDecFontSizes->setEnabled( false );}void MGHTMLPart::slotFinishedParsing(){	d->m_bParsing = false;	d->m_doc->close();//	disconnect(d->m_doc,SIGNAL(finishedParsing()),this,SLOT(slotFinishedParsing()));	if (!d->m_view)		return;	d->m_view->restoreScrollBar();	if ( !m_url.htmlRef().isEmpty() )		gotoAnchor( m_url.htmlRef() );	else if (d->m_view->contentsY()==0) // check that the view has not been moved by the use	{//		d->m_view->setContentsPos( d->m_extension->urlArgs().xOffset, d->m_extension->urlArgs().yOffset );		d->m_view->setContentsPos(0, 0);	}	HTMLCollectionImpl imgColl( d->m_doc, HTMLCollectionImpl::DOC_IMAGES );	d->m_totalImageCount = 0;	KURL::List imageURLs;	unsigned long i = 0;	unsigned long len = imgColl.length();	for (; i < len; i++ )	{		NodeImpl *node = imgColl.item( i );		if ( node->id() != ID_IMG )			continue;		QString imgURL = static_cast<DOM::ElementImpl *>( node )->getAttribute( ATTR_SRC ).string();		KURL url;		if ( KURL::isRelativeURL( imgURL ) )			url = completeURL( imgURL );		else			url = KURL( imgURL );		if ( !imageURLs.contains( url ) )		{			d->m_totalImageCount++;			imageURLs.append( url );		}	}	checkCompleted();}void MGHTMLPart::slotLoaderRequestDone(const DOM::DOMString &baseURL, khtml::CachedObject *obj ){	if ( baseURL != m_url.url() )		return;	if (obj && obj->type() == khtml::CachedObject::Image && !d->m_bParsing )		// !!!!! user our method	{		d->m_loadedImages++;//		if ( d->m_loadedImages <= d->m_totalImageCount )//		emit d->m_extension->infoMessage(i18n( "%1 of %2 Images loaded").arg(d->m_loadedImages).arg(d->m_totalImageCount));	}	checkCompleted();}//--------------------- modified completely ----------------------------------------*///----------------------ignore these functions now ---------------------------------/*void MGHTMLPart::slotSetEncoding(){	if(d->m_paSetEncoding->currentItem() == 0)		setEncoding(QString::null, false);	else		setEncoding(d->m_paSetEncoding->currentText(), true);}bool MGHTMLPart::setEncoding( const QString &name, bool override ){	d->m_encoding = name;	d->m_haveEncoding = override;	if(!d->m_settings->charset() == QFont::Unicode)		d->m_settings->setCharset( KGlobal::charsets()->charsetForEncoding(name) );	if( !m_url.isEmpty() ) {		closeURL();		KURL url = m_url;		m_url = 0;		openURL(url);	}	return true;}KJSProxy *MGHTMLPart::jScript(){	if ( d->m_bJScriptOverride && !d->m_bJScriptForce || !d->m_bJScriptOverride && !d->m_bJScriptEnabled)		return 0;	if ( !d->m_jscript )	{		KLibrary *lib = KLibLoader::self()->library("kjs_html");		if ( !lib )			return 0;		void *sym = lib->symbol("kjs_html_init");		if ( !sym ) 		{			delete lib;			return 0;		}		typedef KJSProxy* (*initFunction)(KHTMLPart *);		initFunction initSym = (initFunction) sym;		d->m_jscript = (*initSym)(this);		d->m_kjs_lib = lib;		kjs_lib_count++;	}	return d->m_jscript;}KJavaAppletContext *MGHTMLPart::javaContext(){	return d->m_javaContext;}KJavaAppletContext *MGHTMLPart::createJavaContext(){	if ( !d->m_javaContext ) 	{		d->m_javaContext = new KJavaAppletContext();		connect( d->m_javaContext, SIGNAL(showStatus(const QString&)),				this, SIGNAL(setStatusBarText(const QString&)) );		connect( d->m_javaContext, SIGNAL(showDocument(const QString&, const QString&)),				this, SLOT(slotShowDocument(const QString&, const QString&)) );	}	return d->m_javaContext;}KParts::BrowserExtension *MGHTMLPart::browserExtension() const{	return d->m_extension;}void MGHTMLPart::popupMenu( const QString &url ){	KURL u( m_url );	if ( !url.isEmpty() )		u = KURL( m_url, url );	mode_t mode = S_IFDIR; 	KXMLGUIClient *client = new KHTMLPopupGUIClient( this, d->m_popupMenuXML, url.isEmpty() ? KURL() : u );	emit d->m_extension->popupMenu( client, QCursor::pos(), u, QString::fromLatin1( "text/html" ), mode );	delete client;	emit popupMenu(url, QCursor::pos());}void MGHTMLPart::slotFind(){	KHTMLPart *part = this;	f ( d->m_frames.count() > 0 )		part = static_cast<KHTMLPart *>( partManager()->activePart() );	assert( part->inherits( "KHTMLPart" ) );	assert( d->m_findDialog == 0 );	KHTMLFind *findDlg = new KHTMLFind( part, part->widget(), "khtmlfind" );	findDlg->setText( part->d->m_lastFindState.text );	findDlg->setCaseSensitive( part->d->m_lastFindState.caseSensitive );	findDlg->setDirection( part->d->m_lastFindState.direction );	findDlg->show();	connect( findDlg, SIGNAL( done() ), this, SLOT( slotFindDone() ) );	connect( findDlg, SIGNAL( destroyed() ), this, SLOT( slotFindDialogDestroyed() ) );	d->m_findDialog = findDlg;	d->m_paFind->setEnabled( false );}void MGHTMLPart::slotFindDone(){	assert( d->m_findDialog );	KHTMLPart *part = d->m_findDialog->part();	part->d->m_lastFindState.text = d->m_findDialog->getText();	part->d->m_lastFindState.caseSensitive = d->m_findDialog->case_sensitive();	part->d->m_lastFindState.direction = d->m_findDialog->get_direction();	delete d->m_findDialog;}void MGHTMLPart::slotFindDialogDestroyed(){    assert( sender() == d->m_findDialog );    d->m_findDialog = 0;    d->m_paFind->setEnabled( true );}void MGHTMLPart::selectAll(){	NodeImpl *first = d->m_doc->body();	NodeImpl *next;	while ( first && first->id() != ID_TEXT )	{		next = first->firstChild();		if ( !next ) 			next = first->nextSibling();		while( first && !next )		{			first = first->parentNode();			if ( first )			next = first->nextSibling();		}		first = next;	}	NodeImpl *last = d->m_doc->body();	while ( last && last->id() != ID_TEXT )	{		next = last->lastChild();		if ( !next ) 			next = last->previousSibling();		while ( last && !next )		{			last = last->parentNode();			if ( last )				next = last->previousSibling();		}		last = next;	}	if ( !first || !last )		return;	d->m_selectionStart = first;	d->m_startOffset = 0;	d->m_selectionEnd = last;	d->m_endOffset = static_cast<TextImpl *>( last )->string()->l;	d->m_startBeforeEnd = true;	d->m_doc->setSelection( d->m_selectionStart.handle(), d->m_startOffset,							d->m_selectionEnd.handle(), d->m_endOffset );	 emitSelectionChanged();}void MGHTMLPart::slotSelectAll(){	KHTMLPart *part = this;	if ( d->m_frames.count() > 0 )		part = static_cast<KHTMLPart *>( partManager()->activePart() );	assert( part );	part->selectAll();}void MGHTMLPart::findTextBegin(){	d->m_findPos = -1;	d->m_findNode = 0;}bool MGHTMLPart::findTextNext( const QRegExp &exp, bool forward ){	if(!d->m_findNode) d->m_findNode = d->m_doc->body();	if ( !d->m_findNode || d->m_findNode->id() == ID_FRAMESET )		return false;	while(1)	{		if(d->m_findNode->id() == ID_TEXT && d->m_findNode->renderer() )		{			DOMStringImpl *t = (static_cast<TextImpl *>(d->m_findNode))->string();			QConstString s(t->s, t->l);			d->m_findPos = s.string().find(exp, d->m_findPos+1);			if(d->m_findPos != -1)			{				int x = 0, y = 0;				khtml::RenderText *text = static_cast<khtml::RenderText *>(d->m_findNode->renderer());				text->posOfChar(d->m_findPos, x, y);				d->m_view->setContentsPos(x-50, y-50);				return true;			}		}		d->m_findPos = -1;		NodeImpl *next;		if ( forward )		{			next = d->m_findNode->firstChild();			if(!next)				next = d->m_findNode->nextSibling();			while(d->m_findNode && !next) 			{				d->m_findNode = d->m_findNode->parentNode();				if( d->m_findNode ) 				{					next = d->m_findNode->nextSibling();				}			}		}		else		{			next = d->m_findNode->lastChild();			if (!next )				next = d->m_findNode->previousSibling();			while ( d->m_findNode && !next )			{				d->m_findNode = d->m_findNode->parentNode();				if( d->m_findNode )				{					next = d->m_findNode->previousSibling();				}			}		}		d->m_findNode = next;		if(!d->m_findNode) return false;	}}bool MGHTMLPart::findTextNext( const QString &str, bool forward, bool caseSensitive ){	if(!d->m_findNode) 		d->m_findNode = d->m_doc->body();	if ( !d->m_findNode || d->m_findNode->id() == ID_FRAMESET )		return false;	while(1)	{		if(d->m_findNode->id() == ID_TEXT && d->m_findNode->renderer() )		{			DOMStringImpl *t = (static_cast<TextImpl *>(d->m_findNode))->string();			QConstString s(t->s, t->l);			d->m_findPos = s.string().find(str, d->m_findPos+1, caseSensitive);			if(d->m_findPos != -1)			{				int x = 0, y = 0;				static_cast<khtml::RenderText *>(d->m_findNode->renderer())->posOfChar(d->m_findPos, x, y);				d->m_view->setContentsPos(x-50, y-50);				d->m_selectionStart = d->m_findNode;				d->m_startOffset = d->m_findPos;				d->m_selectionEnd = d->m_findNode;				d->m_endOffset = d->m_findPos + str.length();				d->m_startBeforeEnd = true;				d->m_doc->setSelection( d->m_selectionStart.handle(), d->m_startOffset,										d->m_selectionEnd.handle(), d->m_endOffset );				emitSelectionChanged();				return true;			}		}		d->m_findPos = -1;		NodeImpl *next;		if ( forward )		{			next = d->m_findNode->firstChild();			if(!next) 				next = d->m_findNode->nextSibling();			while(d->m_findNode && !next) 			{				d->m_findNode = d->m_findNode->parentNode();				if( d->m_findNode ) 				{					next = d->m_findNode->nextSibling();				}			}		}		else		{			next = d->m_findNode->lastChild();			if (!next ) next = d->m_findNode->previousSibling();			while ( d->m_findNode && !next )			{				d->m_findNode = d->m_findNode->parentNode();				if( d->m_findNode )				{					next = d->m_findNode->previousSibling();				}			}		}		d->m_findNode = next;		if(!d->m_findNode) return false;	}}QString MGHTMLPart::selectedText() const{	QString text;	DOM::Node n = d->m_selectionStart;	while(!n.isNull()) 	{		if(n.nodeType() == DOM::Node::TEXT_NODE) 		{			QString str = static_cast<TextImpl *>(n.handle())->data().string();			if(n == d->m_selectionStart && n == d->m_selectionEnd)				text = str.mid(d->m_startOffset, d->m_endOffset - d->m_startOffset);			else if(n == d->m_selectionStart)				text = str.mid(d->m_startOffset);			else if(n == d->m_selectionEnd)				text += str.left(d->m_endOffset);			else				text += str;		}		else if(n.elementId() == ID_BR)			text += "\n";		else if(n.elementId() == ID_P || n.elementId() == ID_TD)			text += "\n\n";		if(n == d->m_selectionEnd) 			break;		DOM::Node next = n.firstChild();		if(next.isNull()) 			next = n.nextSibling();		while( next.isNull() && !n.parentNode().isNull() ) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -