📄 mghtml_part.cpp
字号:
m_url = url; //emit started( 0L ); // !!!!! if (!url.htmlRef().isEmpty()) gotoAnchor(url.htmlRef()); else d->m_view->setContentsPos( 0, 0 ); d->m_bComplete = true; d->m_bParsing = false; //emit completed(); // !!!!! return true; }// closeURL();// connect( d->m_job, SIGNAL( result( KIO::Job * ) ),// SLOT( slotFinished( KIO::Job * ) ) );// connect( d->m_job, SIGNAL( data( KIO::Job*, const QByteArray &)),// SLOT( slotData( KIO::Job*, const QByteArray &)));// d->m_bComplete = false;// d->m_workingURL = url;// m_url = url; //emit started( d->m_job ); // !!!!! return true;}bool MGHTMLPart::closeURL() // !!!!!{ //if ( d->m_job ) //{// KHTMLPageCache::self()->cancelEntry(d->m_cacheId); // d->m_job->kill(); // d->m_job = 0; //} d->m_bComplete = true; // to avoid emitting completed() in slotFinishedParsing() (David) d->m_bReloading = false;// KHTMLPageCache::self()->cancelFetch(this); if ( d->m_bParsing ) { // slotFinishedParsing(); d->m_bParsing = false; } if ( !d->m_workingURL.isEmpty() ) { // emit d->m_extension->setLocationBarURL( m_url.prettyURL() ); // !!!!!! } d->m_workingURL = KURL();// khtml::Cache::loader()->cancelRequests( m_url.url() ); return true;}void MGHTMLPart::overURL( const QString &url, const QString &target ){// emit onURL( url ); // ????? who response for it?// if ( url.isEmpty() )// {// emit setStatusBarText( url );// return;// }// if (url.find( QString::fromLatin1( "javascript:" ),0, false ) != -1 )// {// emit setStatusBarText( url.mid( url.find("javascript:",0,false) ) );// return;// } KURL u = completeURL( url ); QString com;// if ( u.isMalformed() )// {// emit setStatusBarText( u.prettyURL() ); // !!!!! change status bar text// return;// }/* if ( u.isLocalFile() ) { QCString path = QFile::encodeName( u.path() ); struct stat buff; stat( path.data(), &buff ); struct stat lbuff; lstat( path.data(), &lbuff ); QString text = u.url(); QString text2 = text; if (S_ISLNK( lbuff.st_mode ) ) { QString tmp; if ( com.isNull() ) tmp = i18n( "Symbolic Link"); else tmp = i18n("%1 (Link)").arg(com); char buff_two[1024]; text += " -> "; int n = readlink ( path.data(), buff_two, 1022); if (n == -1) { text2 += " "; text2 += tmp; emit setStatusBarText( text2 ); return; } buff_two[n] = 0; text += buff_two; text += " "; text += tmp; } else if ( S_ISREG( buff.st_mode ) ) { if (buff.st_size < 1024) text = i18n("%1 (%2 bytes)").arg(text2).arg((long) buff.st_size); else { float d = (float) buff.st_size/1024.0; text = i18n("%1 (%2 K)").arg(text2).arg(KGlobal::locale()->formatNumber(d, 2)); // was %.2f } text += " "; text += com; } else if ( S_ISDIR( buff.st_mode ) ) { text += " "; text += com; } else { text += " "; text += com; } emit setStatusBarText( text ); } else { QString extra; if (target == QString::fromLatin1("_blank")) { extra = i18n(" (In new window)"); } else if (!target.isEmpty() && (target != QString::fromLatin1("_top")) && (target != QString::fromLatin1("_self")) && (target != QString::fromLatin1("_parent"))) { extra = i18n(" (In other frame)"); } emit setStatusBarText( u.prettyURL()+extra ); }*/}void MGHTMLPart::khtmlMouseReleaseEvent(int x, int y, DOM::Node node, DOM::DOMString innernodeurl){ DOM::Node innerNode = node; d->m_mousePressNode = DOM::Node(); // Used to prevent mouseMoveEvent from initiating a drag before the mouse is pressed again. d->m_bMousePressed = false; if ( !d->m_strSelectedURL.isEmpty()) // && _mouse->button() != RightButton ) { QString target; QString url; url = splitUrlTarget(d->m_strSelectedURL, &target); // Visual action effect, over text links //if ( !innerNode.isNull() && innerNode.nodeType() == DOM::Node::TEXT_NODE ) //{ // khtml::RenderText * renderText = static_cast<khtml::RenderText *>(innerNode.handle()->renderer()); // khtml::TextSlave * firstSlave = renderText->first(); // int x, y; // renderText->absolutePosition( x, y ); // int vx, vy; // view()->contentsToViewport( x, y, vx, vy ); // QRect r ( vx, vy, firstSlave->m_width, firstSlave->m_height ); /// KIconEffect::visualActivate( view()->viewport(), r ); //} //else if (!innerNode.isNull() && innerNode.elementId() == ID_IMG) //{ // HTMLImageElementImpl *i = static_cast<HTMLImageElementImpl *>(innerNode.handle()); // if ( i && i->isServerMap() ) // { // khtml::RenderImage *r = static_cast<khtml::RenderImage *>(i->renderer()); // if(r) // { // int absx, absy, vx, vy; // r->absolutePosition(absx, absy); // view()->contentsToViewport( absx, absy, vx, vy ); // int x(_mouse->x() - vx), y(_mouse->y() - vy); // url += QString("?%1,%2").arg(x).arg(y); // } // } //} urlSelected( url, 0, 1, target ); } //if(!innerNode.isNull() && innerNode.nodeType() == DOM::Node::TEXT_NODE) //{ // d->m_selectionEnd = innerNode; // d->m_endOffset = event->offset(); //} // delete selection in case start and end position are at the same point //if(d->m_selectionStart == d->m_selectionEnd && d->m_startOffset == d->m_endOffset) //{ // d->m_selectionStart = 0; // d->m_selectionEnd = 0; // d->m_startOffset = 0; // d->m_endOffset = 0; // emitSelectionChanged(); //} //else //{ // we have to get to know if end is before start or not... // DOM::Node n = d->m_selectionStart; // d->m_startBeforeEnd = false; // if( d->m_selectionStart == d->m_selectionEnd ) // { // if( d->m_startOffset < d->m_endOffset ) // d->m_startBeforeEnd = true; // } // else // { // while(!n.isNull()) // { // if(n == d->m_selectionEnd) // { // d->m_startBeforeEnd = true; // break; // } // DOM::Node next = n.firstChild(); // if(next.isNull()) // next = n.nextSibling(); // while( next.isNull() && !n.parentNode().isNull() ) // { // n = n.parentNode(); // next = n.nextSibling(); // } // n = next; // } // } // if(!d->m_startBeforeEnd) // { // DOM::Node tmpNode = d->m_selectionStart; // int tmpOffset = d->m_startOffset; // d->m_selectionStart = d->m_selectionEnd; // d->m_startOffset = d->m_endOffset; // d->m_selectionEnd = tmpNode; // d->m_endOffset = tmpOffset; // d->m_startBeforeEnd = true; // } // // get selected text and paste to the clipboard // QString text = selectedText(); // text.replace(QRegExp(QChar(0xa0)), " "); // QClipboard *cb = QApplication::clipboard(); // cb->setText(text); // emitSelectionChanged(); //}}void MGHTMLPart::clear(){ if ( d->m_bCleared ) return; d->m_bCleared = true; d->m_bClearing = true; d->m_mousePressNode = DOM::Node();// if ( d->m_jscript ) // now we ignore js// d->m_jscript->clear(); if ( d->m_doc ) {// d->m_doc->detach();// d->m_doc->deref(); } d->m_doc = 0; if ( d->m_view ) d->m_view->clear(); ConstFrameIt it = d->m_frames.begin(); ConstFrameIt end = d->m_frames.end(); for(; it != end; ++it ) { if(it != NULL) { if ( (*it).m_view ) { DestroyWindow((*it).m_view->getHwnd()); delete (*it).m_view; } } } d->m_frames.clear(); d->m_objects.clear(); d->m_baseURL = KURL(); d->m_baseTarget = QString::null; d->m_bClearing = false; d->m_frameNameId = 1; d->m_bMousePressed = false; d->m_totalImageCount = 0; d->m_loadedImages = 0;}void MGHTMLPart::startAutoScroll(){ //connect(&d->m_scrollTimer, SIGNAL( timeout() ), this, SLOT( slotAutoScroll() )); //d->m_scrollTimer.start(100, false); return;}void MGHTMLPart::stopAutoScroll(){ //disconnect(&d->m_scrollTimer, SIGNAL( timeout() ), this, SLOT( slotAutoScroll() )); //if (d->m_scrollTimer.isActive()) // d->m_scrollTimer.stop(); return;}void MGHTMLPart::begin( const KURL &url, int xOffset, int yOffset ){ d->m_bCleared = false; m_url = url; if ( !m_url.isEmpty() ) { KURL::List lst = KURL::split( m_url ); KURL baseurl; if ( !lst.isEmpty() ) baseurl = *lst.begin(); setBaseURL(baseurl); KURL title( baseurl ); title.setRef( QString::null ); title.setQuery( QString::null );// emit setWindowCaption( title.url() ); // !!!!! } //else// emit setWindowCaption( i18n( "* Unknown *" ) ); // !!!!! // SetWindowText("Unknown *"); // !!!!! give a handle to it if(d->m_doc != NULL) delete d->m_doc; d->m_doc = new HTMLDocumentImpl( d->m_view ); d->m_doc->ref(); d->m_doc->attach( d->m_view ); d->m_doc->setURL( m_url.url() );// d->m_doc->setRestoreState(args.docState); d->m_doc->open(); d->m_view->resizeContents( 0, 0 );// connect(d->m_doc,SIGNAL(finishedParsing()),this,SLOT(slotFinishedParsing()));// emit d->m_extension->enableAction( "print", true ); d->m_bParsing = true;}void MGHTMLPart::setUserStyleSheet(const KURL &url){ d->m_userSheetUrl = DOMString(); d->m_userSheet = DOMString(); //new khtml::PartStyleSheetLoader(d, url.url(), d->m_doc ? d->m_doc->docLoader() : 0); !!!!!!}// ---------------------------- do not think it any more <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<void MGHTMLPart::setUserStyleSheet(const QString &styleSheet){ d->m_userSheet = styleSheet; d->m_userSheetUrl = DOMString();}void MGHTMLPart::khtmlMousePressEvent(int x, int y, DOM::Node Node, DOM::DOMString url){ DOM::Node innerNode = Node; d->m_mousePressNode = innerNode; if ( url != 0 ) d->m_strSelectedURL = url.string(); else d->m_strSelectedURL = QString::null; d->m_bMousePressed = true; QString currentUrl = splitUrlTarget(d->m_strSelectedURL);}void MGHTMLPart::khtmlMouseMoveEvent(int x, int y, DOM::Node node, DOM::DOMString innernodeurl){ DOM::DOMString url = innernodeurl; DOM::Node innerNode = node; if( d->m_bMousePressed && (!d->m_strSelectedURL.isEmpty() || innerNode.elementId() == ID_IMG ) && d->m_bDnd && d->m_mousePressNode == innerNode ) return; if ( !d->m_bMousePressed && url.length() && innerNode.elementId() == ID_IMG ) { HTMLImageElementImpl *i = static_cast<HTMLImageElementImpl *>(innerNode.handle()); if ( i && i->isServerMap() ) { khtml::RenderImage *r = static_cast<khtml::RenderImage *>(i->renderer()); if(r) { int absx, absy; //int vx, vy; r->absolutePosition(absx, absy); //view()->contentsToViewport( absx, absy, vx, vy ); //int x(_mouse->x() - vx), y(_mouse->y() - vy); QString target; QString surl = splitUrlTarget(url.string(), &target); d->m_overURL = surl + QString("?%1,%2").arg(x).arg(y); overURL( d->m_overURL, target ); return; } } } if ( !d->m_bMousePressed && url.length() ) { QString target; QString surl = splitUrlTarget(url.string(), &target); if ( d->m_overURL.isEmpty() ) { d->m_overURL = surl; overURL( d->m_overURL, target ); } else if ( d->m_overURL != surl ) { d->m_overURL = surl; overURL( d->m_overURL, target ); } return; } else if( d->m_overURL.length() && !url.length() ) { overURL( QString::null, QString::null ); d->m_overURL = ""; }}PLOGFONT MGHTMLPart::getFont (const MGFont& font){ FontPair* fp; for (unsigned int i = 0; i < m_fontpool.count(); i++ ) { fp = m_fontpool [i]; if (fp->mgfont == font) { return fp->logfont; } } fp = new FontPair (); fp->mgfont = font; fp->logfont = MGFont::CreateFont (font); m_fontpool.append (fp); return fp->logfont;}KURL MGHTMLPart::completeURL(const QString &url, const QString &){ if (url.isEmpty()) { return m_url; } if (d->m_baseURL.isEmpty()) { KURL u ( m_url, url ); return u; } ///else { KURL u ( d->m_baseURL, url ); return u; }}void MGHTMLPart::write( const char *str, int len ){ if ( len == 0 ) return; if ( len == -1 ) len = strlen( str ); d->m_doc->write(QString(str) );}void MGHTMLPart::write( const QString &str ){ if ( str.isNull() ) return; d->m_doc->write( str );}void MGHTMLPart::end(){ d->m_doc->finishParsing();}bool MGHTMLPart::gotoAnchor( const QString &name ){ HTMLCollectionImpl *anchors = new HTMLCollectionImpl( d->m_doc, HTMLCollectionImpl::DOC_ANCHORS); anchors->ref(); NodeImpl *n = anchors->namedItem(name);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -