DOMString CSSComputedStyleDeclarationImpl::getPropertyValue(int propertyID) const { CSSValueImpl* value = getPropertyCSSValue(propertyID); if (value) { value->ref(); DOMString result = value->cssText(); value->deref(); return result; } return ""; }
void HTMLTableElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr) { switch(attr->id()) { case ATTR_WIDTH: addCSSLength(attr, CSS_PROP_WIDTH, attr->value()); break; case ATTR_HEIGHT: addCSSLength(attr, CSS_PROP_HEIGHT, attr->value()); break; case ATTR_BORDER: { m_noBorder = true; if (attr->isNull()) break; if (attr->decl()) { CSSValueImpl* val = attr->decl()->getPropertyCSSValue(CSS_PROP_BORDER_LEFT_WIDTH); if (val) { val->ref(); if (val->isPrimitiveValue()) { CSSPrimitiveValueImpl* primVal = static_cast<CSSPrimitiveValueImpl*>(val); m_noBorder = !primVal->getFloatValue(CSSPrimitiveValue::CSS_NUMBER); } val->deref(); } } else { // ### this needs more work, as the border value is not only // the border of the box, but also between the cells int border = 0; if (attr->isEmpty()) border = 1; else border = attr->value().toInt(); #ifdef DEBUG_DRAW_BORDER border=1; #endif m_noBorder = !border; DOMString v = QString::number( border ); addCSSLength(attr, CSS_PROP_BORDER_WIDTH, v ); } #if 0 // wanted by HTML4 specs if (m_noBorder) frame = Void, rules = None; else frame = Box, rules = All; #endif break; } case ATTR_BGCOLOR: addHTMLColor(attr, CSS_PROP_BACKGROUND_COLOR, attr->value()); break; case ATTR_BORDERCOLOR: m_solid = attr->decl(); if (!attr->decl() && !attr->isEmpty()) { addHTMLColor(attr, CSS_PROP_BORDER_COLOR, attr->value()); addCSSProperty(attr, CSS_PROP_BORDER_TOP_STYLE, CSS_VAL_SOLID); addCSSProperty(attr, CSS_PROP_BORDER_BOTTOM_STYLE, CSS_VAL_SOLID); addCSSProperty(attr, CSS_PROP_BORDER_LEFT_STYLE, CSS_VAL_SOLID); addCSSProperty(attr, CSS_PROP_BORDER_RIGHT_STYLE, CSS_VAL_SOLID); m_solid = true; } break; case ATTR_BACKGROUND: { QString url = khtml::parseURL( attr->value() ).string(); if (!url.isEmpty()) addCSSImageProperty(attr, CSS_PROP_BACKGROUND_IMAGE, getDocument()->completeURL(url)); break; } case ATTR_FRAME: #if 0 if ( strcasecmp( attr->value(), "void" ) == 0 ) frame = Void; else if ( strcasecmp( attr->value(), "border" ) == 0 ) frame = Box; else if ( strcasecmp( attr->value(), "box" ) == 0 ) frame = Box; else if ( strcasecmp( attr->value(), "hsides" ) == 0 ) frame = Hsides; else if ( strcasecmp( attr->value(), "vsides" ) == 0 ) frame = Vsides; else if ( strcasecmp( attr->value(), "above" ) == 0 ) frame = Above; else if ( strcasecmp( attr->value(), "below" ) == 0 ) frame = Below; else if ( strcasecmp( attr->value(), "lhs" ) == 0 ) frame = Lhs; else if ( strcasecmp( attr->value(), "rhs" ) == 0 ) frame = Rhs; #endif break; case ATTR_RULES: #if 0 if ( strcasecmp( attr->value(), "none" ) == 0 ) rules = None; else if ( strcasecmp( attr->value(), "groups" ) == 0 ) rules = Groups; else if ( strcasecmp( attr->value(), "rows" ) == 0 ) rules = Rows; else if ( strcasecmp( attr->value(), "cols" ) == 0 ) rules = Cols; else if ( strcasecmp( attr->value(), "all" ) == 0 ) rules = All; #endif break; case ATTR_CELLSPACING: if (!attr->value().isEmpty()) addCSSLength(attr, CSS_PROP_BORDER_SPACING, attr->value()); break; case ATTR_CELLPADDING: if (!attr->value().isEmpty()) padding = kMax( 0, attr->value().toInt() ); else padding = 1; if (m_render && m_render->isTable()) { static_cast<RenderTable *>(m_render)->setCellPadding(padding); if (!m_render->needsLayout()) m_render->setNeedsLayout(true); } break; case ATTR_COLS: { // ### #if 0 int c; c = attr->val()->toInt(); addColumns(c-totalCols); break; #endif } case ATTR_VSPACE: addCSSLength(attr, CSS_PROP_MARGIN_TOP, attr->value()); addCSSLength(attr, CSS_PROP_MARGIN_BOTTOM, attr->value()); break; case ATTR_HSPACE: addCSSLength(attr, CSS_PROP_MARGIN_LEFT, attr->value()); addCSSLength(attr, CSS_PROP_MARGIN_RIGHT, attr->value()); break; case ATTR_ALIGN: if (!attr->value().isEmpty()) addCSSProperty(attr, CSS_PROP_FLOAT, attr->value()); break; case ATTR_VALIGN: if (!attr->value().isEmpty()) addCSSProperty(attr, CSS_PROP_VERTICAL_ALIGN, attr->value()); break; case ATTR_NOSAVE: break; default: HTMLElementImpl::parseHTMLAttribute(attr); } }