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

📄 html_objectimpl.cpp

📁 将konqueror浏览器移植到ARM9 2410中
💻 CPP
字号:
/** * This file is part of the DOM implementation for KDE. * * Copyright (C) 1999 Lars Knoll (knoll@kde.org) *           (C) 1999 Antti Koivisto (koivisto@kde.org) *           (C) 2000 Stefan Schimanski (1Stein@gmx.de) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. * * $Id: html_objectimpl.cpp,v 1.68.2.1 2001/11/02 13:44:05 mueller Exp $ */#include "html_objectimpl.h"#include "khtml_part.h"#include "dom_string.h"#include "htmlhashes.h"#include "khtmlview.h"#include <qstring.h>#include <qmap.h>#include <kdebug.h>#include "xml/dom_docimpl.h"#include "css/cssstyleselector.h"#include "css/csshelper.h"#include "css/cssproperties.h"#include "css/cssvalues.h"#include "rendering/render_applet.h"#include "rendering/render_frames.h"#include "xml/dom2_eventsimpl.h"using namespace DOM;using namespace khtml;// -------------------------------------------------------------------------HTMLAppletElementImpl::HTMLAppletElementImpl(DocumentPtr *doc)  : HTMLElementImpl(doc){    codeBase = 0;    code = 0;    name = 0;    archive = 0;}HTMLAppletElementImpl::~HTMLAppletElementImpl(){    if(codeBase) codeBase->deref();    if(code) code->deref();    if(name) name->deref();    if(archive) archive->deref();}const DOMString HTMLAppletElementImpl::nodeName() const{    return "APPLET";}ushort HTMLAppletElementImpl::id() const{    return ID_APPLET;}void HTMLAppletElementImpl::parseAttribute(AttrImpl *attr){    switch( attr->attrId )    {    case ATTR_CODEBASE:        codeBase = attr->val();        codeBase->ref();        break;    case ATTR_ARCHIVE:        archive = attr->val();        archive->ref();        break;    case ATTR_CODE:        code = attr->val();        code->ref();        break;    case ATTR_OBJECT:        break;    case ATTR_ALT:        break;    case ATTR_NAME:        name = attr->val();        name->ref();        break;    case ATTR_WIDTH:        addCSSLength(CSS_PROP_WIDTH, attr->value());        break;    case ATTR_HEIGHT:        addCSSLength(CSS_PROP_HEIGHT, attr->value());        break;    case ATTR_ALIGN:	addHTMLAlignment( attr->value() );	break;    default:        HTMLElementImpl::parseAttribute(attr);    }}void HTMLAppletElementImpl::attach(){  setStyle(ownerDocument()->styleSelector()->styleForElement(this));  if(!code)      return;  khtml::RenderObject *r = _parent->renderer();  RenderWidget *f = 0;  if(r && m_style->display() != NONE) {      view = ownerDocument()->view();      if( view->part()->javaEnabled() )      {          QMap<QString, QString> args;          args.insert( "code", QString(code->s, code->l));          if(codeBase)              args.insert( "codeBase", QString(codeBase->s, codeBase->l) );          if(name)              args.insert( "name", QString(name->s, name->l) );          if(archive)              args.insert( "archive", QString(archive->s, archive->l) );          if(!view->part()->baseURL().isEmpty())              args.insert( "baseURL", view->part()->baseURL().url() );          else              args.insert( "baseURL", view->part()->url().url() );          f = new RenderApplet(view, args, this);      }      else          f = new RenderEmptyApplet(view);  }  if(f)  {      m_render = f;      m_render->setStyle(m_style);      r->addChild(m_render, nextRenderer());  }  HTMLElementImpl::attach();}void HTMLAppletElementImpl::detach(){    view = 0;    HTMLElementImpl::detach();}// -------------------------------------------------------------------------HTMLEmbedElementImpl::HTMLEmbedElementImpl(DocumentPtr *doc)    : HTMLElementImpl(doc){}HTMLEmbedElementImpl::~HTMLEmbedElementImpl(){}const DOMString HTMLEmbedElementImpl::nodeName() const{    return "EMBED";}ushort HTMLEmbedElementImpl::id() const{    return ID_EMBED;}void HTMLEmbedElementImpl::parseAttribute(AttrImpl *attr){  DOM::DOMStringImpl *stringImpl = attr->val();  QString val = QConstString( stringImpl->s, stringImpl->l ).string();  // export parameter  QString attrStr = attr->name().string() + "=\"" + val + "\"";  param.append( attrStr );  int pos;  switch ( attr->attrId )  {     case ATTR_TYPE:        serviceType = val.lower();        pos = serviceType.find( ";" );        if ( pos!=-1 )            serviceType = serviceType.left( pos );        break;     case ATTR_CODE:     case ATTR_SRC:         url = khtml::parseURL(attr->val()).string();         break;     case ATTR_WIDTH:        addCSSLength( CSS_PROP_WIDTH, attr->value() );        break;     case ATTR_HEIGHT:        addCSSLength( CSS_PROP_HEIGHT, attr->value());        break;     case ATTR_BORDER:        addCSSLength(CSS_PROP_BORDER_WIDTH, attr->value());        addCSSProperty( CSS_PROP_BORDER_TOP_STYLE, CSS_VAL_SOLID );        addCSSProperty( CSS_PROP_BORDER_RIGHT_STYLE, CSS_VAL_SOLID );        addCSSProperty( CSS_PROP_BORDER_BOTTOM_STYLE, CSS_VAL_SOLID );        addCSSProperty( CSS_PROP_BORDER_LEFT_STYLE, CSS_VAL_SOLID );        break;     case ATTR_VSPACE:        addCSSLength(CSS_PROP_MARGIN_TOP, attr->value());        addCSSLength(CSS_PROP_MARGIN_BOTTOM, attr->value());        break;     case ATTR_HSPACE:        addCSSLength(CSS_PROP_MARGIN_LEFT, attr->value());        addCSSLength(CSS_PROP_MARGIN_RIGHT, attr->value());        break;     case ATTR_ALIGN:	addHTMLAlignment( attr->value() );	break;     case ATTR_VALIGN:        addCSSProperty(CSS_PROP_VERTICAL_ALIGN, attr->value());        break;     case ATTR_PLUGINPAGE:     case ATTR_PLUGINSPAGE:        pluginPage = val;        break;     case ATTR_HIDDEN:        if (val.lower()=="yes" || val.lower()=="true")           hidden = true;        else           hidden = false;        break;     default:        HTMLElementImpl::parseAttribute( attr );  }}void HTMLEmbedElementImpl::attach(){   KHTMLView* w = ownerDocument()->view();   setStyle(ownerDocument()->styleSelector()->styleForElement( this ));   khtml::RenderObject *r = _parent->renderer();   RenderPartObject* p = 0;   if ( r && m_style->display() != NONE ) {       if (w->part()->pluginsEnabled())       {           if ( _parent->id()!=ID_OBJECT )           {               p = new RenderPartObject( w, this );               m_render = p;               m_render->setStyle(m_style);               r->addChild( m_render, nextRenderer() );           } else               r->setStyle(m_style);       }   }   HTMLElementImpl::attach();  if ( p )      p->updateWidget();}void HTMLEmbedElementImpl::detach(){  HTMLElementImpl::detach();}// -------------------------------------------------------------------------HTMLObjectElementImpl::HTMLObjectElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc){    needWidgetUpdate = false;}HTMLObjectElementImpl::~HTMLObjectElementImpl(){}const DOMString HTMLObjectElementImpl::nodeName() const{    return "OBJECT";}ushort HTMLObjectElementImpl::id() const{    return ID_OBJECT;}HTMLFormElementImpl *HTMLObjectElementImpl::form() const{  return 0;}void HTMLObjectElementImpl::parseAttribute(AttrImpl *attr){  DOM::DOMStringImpl *stringImpl = attr->val();  QString val = QConstString( stringImpl->s, stringImpl->l ).string();  int pos;  switch ( attr->attrId )  {    case ATTR_TYPE:      serviceType = val.lower();      pos = serviceType.find( ";" );      if ( pos!=-1 )          serviceType = serviceType.left( pos );      needWidgetUpdate = true;      break;    case ATTR_DATA:      url = khtml::parseURL(  val ).string();      needWidgetUpdate = true;      break;    case ATTR_WIDTH:      addCSSLength( CSS_PROP_WIDTH, attr->value());      break;    case ATTR_HEIGHT:      addCSSLength( CSS_PROP_HEIGHT, attr->value());      break;    case ATTR_CLASSID:      classId = val;      needWidgetUpdate = true;      break;    case ATTR_ONLOAD: // ### support load/unload on object elements        setHTMLEventListener(EventImpl::LOAD_EVENT,	    ownerDocument()->createHTMLEventListener(attr->value().string()));        break;    case ATTR_ONUNLOAD:        setHTMLEventListener(EventImpl::UNLOAD_EVENT,	    ownerDocument()->createHTMLEventListener(attr->value().string()));        break;    default:      HTMLElementImpl::parseAttribute( attr );  }}void HTMLObjectElementImpl::attach(){  KHTMLView* w = ownerDocument()->view();  setStyle(ownerDocument()->styleSelector()->styleForElement( this ));  khtml::RenderObject *r = _parent->renderer();  if ( r && m_style->display() != NONE ) {      if (w->part()->pluginsEnabled())      {          RenderPartObject *p = new RenderPartObject( w, this );          m_render = p;          m_render->setStyle(m_style);          r->addChild( m_render, nextRenderer() );          needWidgetUpdate = false;      }  }  HTMLElementImpl::attach();  // ### do this when we are actually finished loading instead  dispatchHTMLEvent(EventImpl::LOAD_EVENT,false,false);}void HTMLObjectElementImpl::detach(){  HTMLElementImpl::detach();  // ### do this when we are actualy removed from document instead  dispatchHTMLEvent(EventImpl::UNLOAD_EVENT,false,false);}void HTMLObjectElementImpl::applyChanges(bool top, bool force){    if (needWidgetUpdate) {        if(m_render && strcmp( m_render->renderName(),  "RenderPartObject" ) == 0 )            static_cast<RenderPartObject*>(m_render)->updateWidget();        needWidgetUpdate = false;    }    HTMLElementImpl::applyChanges(top,force);}// -------------------------------------------------------------------------HTMLParamElementImpl::HTMLParamElementImpl(DocumentPtr *doc)    : HTMLElementImpl(doc){    m_name = 0;    m_value = 0;}HTMLParamElementImpl::~HTMLParamElementImpl(){    if(m_name) m_name->deref();    if(m_value) m_value->deref();}const DOMString HTMLParamElementImpl::nodeName() const{    return "PARAM";}ushort HTMLParamElementImpl::id() const{    return ID_PARAM;}void HTMLParamElementImpl::parseAttribute(AttrImpl *attr){    switch( attr->attrId )    {    case ATTR_NAME:        m_name = attr->val();        m_name->ref();        break;    case ATTR_VALUE:        m_value = attr->val();        m_value->ref();        break;    }}

⌨️ 快捷键说明

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