khtml Library API Documentation

html_blockimpl.cpp

00001 
00024 // -------------------------------------------------------------------------
00025 //#define DEBUG
00026 #include "html_blockimpl.h"
00027 #include "html_documentimpl.h"
00028 #include "css/cssstyleselector.h"
00029 
00030 #include "css/cssproperties.h"
00031 #include "css/cssvalues.h"
00032 #include "misc/htmlhashes.h"
00033 
00034 #include <kdebug.h>
00035 
00036 using namespace khtml;
00037 using namespace DOM;
00038 
00039 void HTMLDivElementImpl::parseAttribute(AttributeImpl *attr)
00040 {
00041     switch(attr->id())
00042     {
00043     case ATTR_ALIGN:
00044     {
00045         DOMString v = attr->value();
00046         if ( strcasecmp( attr->value(), "center" ) == 0 )
00047             v = "-konq-center";
00048         addCSSProperty(CSS_PROP_TEXT_ALIGN, v);
00049         break;
00050     }
00051     default:
00052         HTMLElementImpl::parseAttribute(attr);
00053     }
00054 }
00055 
00056 // -------------------------------------------------------------------------
00057 
00058 NodeImpl::Id HTMLHRElementImpl::id() const
00059 {
00060     return ID_HR;
00061 }
00062 
00063 void HTMLHRElementImpl::parseAttribute(AttributeImpl *attr)
00064 {
00065     switch( attr->id() )
00066     {
00067     case ATTR_ALIGN:
00068         if ( strcasecmp( attr->value(), "left") != 0) // _not_ equal
00069             addCSSProperty(CSS_PROP_MARGIN_LEFT, CSS_VAL_AUTO);
00070         else
00071             addCSSProperty(CSS_PROP_MARGIN_LEFT, "1px");
00072         if( strcasecmp( attr->value(), "right") != 0)
00073             addCSSProperty(CSS_PROP_MARGIN_RIGHT, CSS_VAL_AUTO);
00074         else
00075             addCSSProperty(CSS_PROP_MARGIN_RIGHT, "1px");
00076         break;
00077     case ATTR_WIDTH:
00078     {
00079         if(!attr->val()) break;
00080         // cheap hack to cause linebreaks
00081         // khtmltests/html/strange_hr.html
00082         bool ok;
00083         int v = attr->val()->toInt(&ok);
00084         if(ok && !v)
00085             addCSSLength(CSS_PROP_WIDTH, "1");
00086         else
00087             addCSSLength(CSS_PROP_WIDTH, attr->value());
00088     }
00089     break;
00090     default:
00091         HTMLElementImpl::parseAttribute(attr);
00092     }
00093 }
00094 
00095 // ### make sure we undo what we did during detach
00096 void HTMLHRElementImpl::attach()
00097 {
00098     if (attributes(true /* readonly */)) {
00099         // there are some attributes, lets check
00100         DOMString color = getAttribute(ATTR_COLOR);
00101         DOMStringImpl* si = getAttribute(ATTR_SIZE).implementation();
00102         int _s =  si ? si->toInt() : -1;
00103         DOMString n("1");
00104         if (!color.isNull()) {
00105             addCSSProperty(CSS_PROP_BORDER_TOP_STYLE, CSS_VAL_SOLID);
00106             addCSSProperty(CSS_PROP_BORDER_RIGHT_STYLE, CSS_VAL_SOLID);
00107             addCSSProperty(CSS_PROP_BORDER_BOTTOM_STYLE, CSS_VAL_SOLID);
00108             addCSSProperty(CSS_PROP_BORDER_LEFT_STYLE, CSS_VAL_SOLID);
00109             addCSSProperty(CSS_PROP_BORDER_TOP_WIDTH, DOMString("0"));
00110             addCSSLength(CSS_PROP_BORDER_BOTTOM_WIDTH, DOMString(si));
00111             addCSSProperty(CSS_PROP_BORDER_COLOR, color);
00112         }
00113         else {
00114             if (_s > 1 && getAttribute(ATTR_NOSHADE).isNull()) {
00115                 addCSSProperty(CSS_PROP_BORDER_BOTTOM_WIDTH, n);
00116                 addCSSProperty(CSS_PROP_BORDER_TOP_WIDTH, n);
00117                 addCSSProperty(CSS_PROP_BORDER_LEFT_WIDTH, n);
00118                 addCSSProperty(CSS_PROP_BORDER_RIGHT_WIDTH, n);
00119                 addCSSLength(CSS_PROP_HEIGHT, DOMString(QString::number(_s-2)));
00120             }
00121             else if (_s >= 0) {
00122                 addCSSProperty(CSS_PROP_BORDER_TOP_WIDTH, DOMString(QString::number(_s)));
00123                 addCSSProperty(CSS_PROP_BORDER_BOTTOM_WIDTH, DOMString("0"));
00124             }
00125         }
00126         if (_s == 0)
00127             addCSSProperty(CSS_PROP_MARGIN_BOTTOM, n);
00128     }
00129 
00130     HTMLElementImpl::attach();
00131 }
00132 
00133 // -------------------------------------------------------------------------
00134 
00135 long HTMLPreElementImpl::width() const
00136 {
00137     // ###
00138     return 0;
00139 }
00140 
00141 void HTMLPreElementImpl::setWidth( long /*w*/ )
00142 {
00143     // ###
00144 }
00145 
00146 
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.4.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sun Feb 27 22:16:34 2005 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2001