00001
00022 #include "css_renderstyledeclarationimpl.h"
00023
00024 #include "rendering/render_style.h"
00025 #include "rendering/render_object.h"
00026
00027 #include "cssproperties.h"
00028 #include "cssvalues.h"
00029
00030 using namespace DOM;
00031 using namespace khtml;
00032
00033
00034 static const int computedProperties[] = {
00035 CSS_PROP_BACKGROUND_COLOR,
00036 CSS_PROP_BACKGROUND_IMAGE,
00037 CSS_PROP_BACKGROUND_REPEAT,
00038 CSS_PROP_BACKGROUND_ATTACHMENT,
00039 CSS_PROP_BACKGROUND_POSITION,
00040 CSS_PROP_BACKGROUND_POSITION_X,
00041 CSS_PROP_BACKGROUND_POSITION_Y,
00042 CSS_PROP_BORDER_COLLAPSE,
00043 CSS_PROP_BORDER_SPACING,
00044 CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING,
00045 CSS_PROP__KHTML_BORDER_VERTICAL_SPACING,
00046 CSS_PROP_BORDER_TOP_COLOR,
00047 CSS_PROP_BORDER_RIGHT_COLOR,
00048 CSS_PROP_BORDER_BOTTOM_COLOR,
00049 CSS_PROP_BORDER_LEFT_COLOR,
00050 CSS_PROP_BORDER_TOP_STYLE,
00051 CSS_PROP_BORDER_RIGHT_STYLE,
00052 CSS_PROP_BORDER_BOTTOM_STYLE,
00053 CSS_PROP_BORDER_LEFT_STYLE,
00054 CSS_PROP_BORDER_TOP_WIDTH,
00055 CSS_PROP_BORDER_RIGHT_WIDTH,
00056 CSS_PROP_BORDER_BOTTOM_WIDTH,
00057 CSS_PROP_BORDER_LEFT_WIDTH,
00058 CSS_PROP_BOTTOM,
00059 CSS_PROP_CAPTION_SIDE,
00060 CSS_PROP_CLEAR,
00061 CSS_PROP_COLOR,
00062 CSS_PROP_CURSOR,
00063 CSS_PROP_DIRECTION,
00064 CSS_PROP_DISPLAY,
00065 CSS_PROP_EMPTY_CELLS,
00066 CSS_PROP_FLOAT,
00067 CSS_PROP_FONT_FAMILY,
00068 CSS_PROP_FONT_SIZE,
00069 CSS_PROP_FONT_STYLE,
00070 CSS_PROP_FONT_VARIANT,
00071 CSS_PROP_FONT_WEIGHT,
00072 CSS_PROP_HEIGHT,
00073 CSS_PROP_LEFT,
00074 CSS_PROP_LETTER_SPACING,
00075 CSS_PROP_LINE_HEIGHT,
00076 CSS_PROP_LIST_STYLE_IMAGE,
00077 CSS_PROP_LIST_STYLE_POSITION,
00078 CSS_PROP_LIST_STYLE_TYPE,
00079 CSS_PROP_MARGIN_TOP,
00080 CSS_PROP_MARGIN_RIGHT,
00081 CSS_PROP_MARGIN_BOTTOM,
00082 CSS_PROP_MARGIN_LEFT,
00083 CSS_PROP__KHTML_MARQUEE_DIRECTION,
00084 CSS_PROP__KHTML_MARQUEE_INCREMENT,
00085 CSS_PROP__KHTML_MARQUEE_REPETITION,
00086 CSS_PROP__KHTML_MARQUEE_STYLE,
00087 CSS_PROP_MAX_HEIGHT,
00088 CSS_PROP_MAX_WIDTH,
00089 CSS_PROP_MIN_HEIGHT,
00090 CSS_PROP_MIN_WIDTH,
00091 CSS_PROP_OPACITY,
00092 CSS_PROP_ORPHANS,
00093 CSS_PROP_OUTLINE_STYLE,
00094 CSS_PROP_OVERFLOW,
00095 CSS_PROP_PADDING_TOP,
00096 CSS_PROP_PADDING_RIGHT,
00097 CSS_PROP_PADDING_BOTTOM,
00098 CSS_PROP_PADDING_LEFT,
00099 CSS_PROP_PAGE_BREAK_AFTER,
00100 CSS_PROP_PAGE_BREAK_BEFORE,
00101 CSS_PROP_PAGE_BREAK_INSIDE,
00102 CSS_PROP_POSITION,
00103 CSS_PROP_RIGHT,
00104 CSS_PROP_TABLE_LAYOUT,
00105 CSS_PROP_TEXT_ALIGN,
00106 CSS_PROP_TEXT_DECORATION,
00107 CSS_PROP_TEXT_INDENT,
00108 CSS_PROP_TEXT_SHADOW,
00109 CSS_PROP_TEXT_TRANSFORM,
00110 CSS_PROP_TOP,
00111 CSS_PROP_UNICODE_BIDI,
00112 CSS_PROP_VERTICAL_ALIGN,
00113 CSS_PROP_VISIBILITY,
00114 CSS_PROP_WHITE_SPACE,
00115 CSS_PROP_WIDOWS,
00116 CSS_PROP_WIDTH,
00117 CSS_PROP_WORD_SPACING,
00118 CSS_PROP_Z_INDEX,
00119 };
00120
00121 const unsigned numComputedProperties = sizeof(computedProperties) / sizeof(computedProperties[0]);
00122
00123
00124 static CSSValueImpl *valueForLength(const Length &length, int max)
00125 {
00126 if (length.isPercent()) {
00127 return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PERCENTAGE);
00128 }
00129 else {
00130 return new CSSPrimitiveValueImpl(length.minWidth(max), CSSPrimitiveValue::CSS_PX);
00131 }
00132 }
00133
00134 static CSSValueImpl *valueForBorderStyle(EBorderStyle style)
00135 {
00136 switch (style) {
00137 case khtml::BNATIVE:
00138 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NATIVE);
00139 case khtml::BNONE:
00140 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00141 case khtml::BHIDDEN:
00142 return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00143 case khtml::INSET:
00144 return new CSSPrimitiveValueImpl(CSS_VAL_INSET);
00145 case khtml::GROOVE:
00146 return new CSSPrimitiveValueImpl(CSS_VAL_GROOVE);
00147 case khtml::RIDGE:
00148 return new CSSPrimitiveValueImpl(CSS_VAL_RIDGE);
00149 case khtml::OUTSET:
00150 return new CSSPrimitiveValueImpl(CSS_VAL_OUTSET);
00151 case khtml::DOTTED:
00152 return new CSSPrimitiveValueImpl(CSS_VAL_DOTTED);
00153 case khtml::DASHED:
00154 return new CSSPrimitiveValueImpl(CSS_VAL_DASHED);
00155 case khtml::SOLID:
00156 return new CSSPrimitiveValueImpl(CSS_VAL_SOLID);
00157 case khtml::DOUBLE:
00158 return new CSSPrimitiveValueImpl(CSS_VAL_DOUBLE);
00159 }
00160 Q_ASSERT( 0 );
00161 return 0;
00162 }
00163
00164 static CSSValueImpl *valueForTextAlign(ETextAlign align)
00165 {
00166 switch (align) {
00167 case khtml::TAAUTO:
00168 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00169 case khtml::LEFT:
00170 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00171 case khtml::RIGHT:
00172 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00173 case khtml::CENTER:
00174 return new CSSPrimitiveValueImpl(CSS_VAL_CENTER);
00175 case khtml::JUSTIFY:
00176 return new CSSPrimitiveValueImpl(CSS_VAL_JUSTIFY);
00177 case khtml::KHTML_LEFT:
00178 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT);
00179 case khtml::KHTML_RIGHT:
00180 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT);
00181 case khtml::KHTML_CENTER:
00182 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_CENTER);
00183 }
00184 Q_ASSERT( 0 );
00185 return 0;
00186 }
00187
00188 DOMString khtml::stringForListStyleType(EListStyleType type)
00189 {
00190 switch (type) {
00191 case khtml::LDISC:
00192 return "disc";
00193 case khtml::LCIRCLE:
00194 return "circle";
00195 case khtml::LSQUARE:
00196 return "square";
00197 case khtml::LBOX:
00198 return "box";
00199 case khtml::LDIAMOND:
00200 return "-khtml-diamond";
00201 case khtml::LDECIMAL:
00202 return "decimal";
00203 case khtml::DECIMAL_LEADING_ZERO:
00204 return "decimal-leading-zero";
00205 case khtml::ARABIC_INDIC:
00206 return "-khtml-arabic-indic";
00207 case khtml::LAO:
00208 return "-khtml-lao";
00209 case khtml::PERSIAN:
00210 return "-khtml-persian";
00211 case khtml::URDU:
00212 return "-khtml-urdu";
00213 case khtml::THAI:
00214 return "-khtml-thai";
00215 case khtml::TIBETAN:
00216 return "-khtml-tibetan";
00217 case khtml::LOWER_ROMAN:
00218 return "lower-roman";
00219 case khtml::UPPER_ROMAN:
00220 return "upper-roman";
00221 case khtml::HEBREW:
00222 return "hebrew";
00223 case khtml::ARMENIAN:
00224 return "armenian";
00225 case khtml::GEORGIAN:
00226 return "georgian";
00227 case khtml::CJK_IDEOGRAPHIC:
00228 return "cjk-ideographic";
00229 case khtml::JAPANESE_FORMAL:
00230 return "-khtml-japanese-formal";
00231 case khtml::JAPANESE_INFORMAL:
00232 return "-khtml-japanese-informal";
00233 case khtml::SIMP_CHINESE_FORMAL:
00234 return "-khtml-simp-chinese-formal";
00235 case khtml::SIMP_CHINESE_INFORMAL:
00236 return "-khtml-simp-chinese-informal";
00237 case khtml::TRAD_CHINESE_FORMAL:
00238 return "-khtml-trad-chinese-formal";
00239 case khtml::TRAD_CHINESE_INFORMAL:
00240 return "-khtml-trad-chinese-informal";
00241 case khtml::LOWER_GREEK:
00242 return "lower-greek";
00243 case khtml::UPPER_GREEK:
00244 return "-khtml-upper-greek";
00245 case khtml::LOWER_ALPHA:
00246 return "lower-alpha";
00247 case khtml::UPPER_ALPHA:
00248 return "upper-alpha";
00249 case khtml::LOWER_LATIN:
00250 return "lower-latin";
00251 case khtml::UPPER_LATIN:
00252 return "upper-latin";
00253 case khtml::HIRAGANA:
00254 return "hiragana";
00255 case khtml::KATAKANA:
00256 return "katakana";
00257 case khtml::HIRAGANA_IROHA:
00258 return "hiragana-iroha";
00259 case khtml::KATAKANA_IROHA:
00260 return "katakana_iroha";
00261 case khtml::LNONE:
00262 return "none";
00263 }
00264 Q_ASSERT( 0 );
00265 return "";
00266 }
00267
00268 static CSSValueImpl* valueForShadow(const ShadowData *shadow)
00269 {
00270 if (!shadow)
00271 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00272 CSSValueListImpl *list = new CSSValueListImpl;
00273 for (const ShadowData *s = shadow; s; s = s->next) {
00274 CSSPrimitiveValueImpl *x = new CSSPrimitiveValueImpl(s->x, CSSPrimitiveValue::CSS_PX);
00275 CSSPrimitiveValueImpl *y = new CSSPrimitiveValueImpl(s->y, CSSPrimitiveValue::CSS_PX);
00276 CSSPrimitiveValueImpl *blur = new CSSPrimitiveValueImpl(s->blur, CSSPrimitiveValue::CSS_PX);
00277 CSSPrimitiveValueImpl *color = new CSSPrimitiveValueImpl(s->color.rgb());
00278 list->append(new ShadowValueImpl(x, y, blur, color));
00279 }
00280 return list;
00281 }
00282
00283 static CSSValueImpl *getPositionOffsetValue(RenderObject *renderer, int propertyID)
00284 {
00285 if (!renderer)
00286 return 0;
00287
00288 RenderStyle *style = renderer->style();
00289 if (!style)
00290 return 0;
00291
00292 Length l;
00293 switch (propertyID) {
00294 case CSS_PROP_LEFT:
00295 l = style->left();
00296 break;
00297 case CSS_PROP_RIGHT:
00298 l = style->right();
00299 break;
00300 case CSS_PROP_TOP:
00301 l = style->top();
00302 break;
00303 case CSS_PROP_BOTTOM:
00304 l = style->bottom();
00305 break;
00306 default:
00307 return 0;
00308 }
00309
00310 if (renderer->isPositioned())
00311 return valueForLength(l, renderer->contentWidth());
00312
00313 if (renderer->isRelPositioned())
00314
00315
00316
00317 return valueForLength(l, renderer->contentWidth());
00318
00319 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00320 }
00321
00322
00323 RenderStyleDeclarationImpl::RenderStyleDeclarationImpl( DOM::NodeImpl *node )
00324 : CSSStyleDeclarationImpl(0), m_node(node)
00325 {
00326 kdDebug() << "Render Style Declaration created" << endl;
00327 }
00328
00329 RenderStyleDeclarationImpl::~RenderStyleDeclarationImpl()
00330 {
00331 kdDebug() << "Render Style Declaration destroyed" << endl;
00332 }
00333
00334 DOM::DOMString RenderStyleDeclarationImpl::cssText() const
00335 {
00336 DOMString result;
00337
00338 for (unsigned i = 0; i < numComputedProperties; i++) {
00339 if (i != 0)
00340 result += " ";
00341 result += getPropertyName(computedProperties[i]);
00342 result += ": ";
00343 result += getPropertyValue(computedProperties[i]);
00344 result += ";";
00345 }
00346
00347 return result;
00348 }
00349
00350 void RenderStyleDeclarationImpl::setCssText( DOM::DOMString )
00351 {
00352
00353 }
00354
00355 CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const
00356 {
00357 NodeImpl *node = m_node.get();
00358 if (!node)
00359 return 0;
00360
00361
00362 DocumentImpl* docimpl = node->getDocument();
00363 if (docimpl) {
00364 docimpl->updateLayout();
00365 }
00366
00367 RenderObject *renderer = m_node->renderer();
00368 if (!renderer)
00369 return 0;
00370 RenderStyle *style = renderer->style();
00371 if (!style)
00372 return 0;
00373
00374 switch(propertyID)
00375 {
00376 case CSS_PROP_BACKGROUND_COLOR:
00377 return new CSSPrimitiveValueImpl(style->backgroundColor().rgb());
00378 case CSS_PROP_BACKGROUND_IMAGE:
00379 if (style->backgroundImage())
00380 return new CSSPrimitiveValueImpl(style->backgroundImage()->url(),
00381 CSSPrimitiveValue::CSS_URI);
00382 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00383 case CSS_PROP_BACKGROUND_REPEAT:
00384 switch (style->backgroundRepeat()) {
00385 case khtml::REPEAT:
00386 return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT);
00387 case khtml::REPEAT_X:
00388 return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_X);
00389 case khtml::REPEAT_Y:
00390 return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_Y);
00391 case khtml::NO_REPEAT:
00392 return new CSSPrimitiveValueImpl(CSS_VAL_NO_REPEAT);
00393 default:
00394 Q_ASSERT( 0 );
00395 }
00396 case CSS_PROP_BACKGROUND_ATTACHMENT:
00397 if (style->backgroundAttachment())
00398 return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00399 else
00400 return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00401 case CSS_PROP_BACKGROUND_POSITION:
00402 {
00403 DOMString string;
00404 Length length(style->backgroundXPosition());
00405 if (length.isPercent())
00406 string = QString::number(length._length) + "%";
00407 else
00408 string = QString::number(length.minWidth(renderer->contentWidth()));
00409 string += " ";
00410 length = style->backgroundYPosition();
00411 if (length.isPercent())
00412 string += QString::number(length._length) + "%";
00413 else
00414 string += QString::number(length.minWidth(renderer->contentWidth()));
00415 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00416 }
00417 case CSS_PROP_BACKGROUND_POSITION_X:
00418 return valueForLength(style->backgroundXPosition(), renderer->contentWidth());
00419 case CSS_PROP_BACKGROUND_POSITION_Y:
00420 return valueForLength(style->backgroundYPosition(), renderer->contentHeight());
00421 case CSS_PROP_BORDER_COLLAPSE:
00422 if (style->borderCollapse())
00423 return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
00424 else
00425 return new CSSPrimitiveValueImpl(CSS_VAL_SEPARATE);
00426 case CSS_PROP_BORDER_SPACING:
00427 {
00428 QString string(QString::number(style->borderHorizontalSpacing()) +
00429 "px " +
00430 QString::number(style->borderVerticalSpacing()) +
00431 "px");
00432 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00433 }
00434 case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING:
00435 return new CSSPrimitiveValueImpl(style->borderHorizontalSpacing(),
00436 CSSPrimitiveValue::CSS_PX);
00437 case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING:
00438 return new CSSPrimitiveValueImpl(style->borderVerticalSpacing(),
00439 CSSPrimitiveValue::CSS_PX);
00440 case CSS_PROP_BORDER_TOP_COLOR:
00441 return new CSSPrimitiveValueImpl(style->borderTopColor().rgb());
00442 case CSS_PROP_BORDER_RIGHT_COLOR:
00443 return new CSSPrimitiveValueImpl(style->borderRightColor().rgb());
00444 case CSS_PROP_BORDER_BOTTOM_COLOR:
00445 return new CSSPrimitiveValueImpl(style->borderBottomColor().rgb());
00446 case CSS_PROP_BORDER_LEFT_COLOR:
00447 return new CSSPrimitiveValueImpl(style->borderLeftColor().rgb());
00448 case CSS_PROP_BORDER_TOP_STYLE:
00449 return valueForBorderStyle(style->borderTopStyle());
00450 case CSS_PROP_BORDER_RIGHT_STYLE:
00451 return valueForBorderStyle(style->borderRightStyle());
00452 case CSS_PROP_BORDER_BOTTOM_STYLE:
00453 return valueForBorderStyle(style->borderBottomStyle());
00454 case CSS_PROP_BORDER_LEFT_STYLE:
00455 return valueForBorderStyle(style->borderLeftStyle());
00456 case CSS_PROP_BORDER_TOP_WIDTH:
00457 return new CSSPrimitiveValueImpl( style->borderTopWidth(), CSSPrimitiveValue::CSS_PX );
00458 case CSS_PROP_BORDER_RIGHT_WIDTH:
00459 return new CSSPrimitiveValueImpl( style->borderRightWidth(), CSSPrimitiveValue::CSS_PX );
00460 case CSS_PROP_BORDER_BOTTOM_WIDTH:
00461 return new CSSPrimitiveValueImpl( style->borderBottomWidth(), CSSPrimitiveValue::CSS_PX );
00462 case CSS_PROP_BORDER_LEFT_WIDTH:
00463 return new CSSPrimitiveValueImpl( style->borderLeftWidth(), CSSPrimitiveValue::CSS_PX );
00464 case CSS_PROP_BOTTOM:
00465 return getPositionOffsetValue(renderer, CSS_PROP_BOTTOM);
00466 case CSS_PROP_CAPTION_SIDE:
00467 switch (style->captionSide()) {
00468 case CAPLEFT:
00469 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00470 case CAPRIGHT:
00471 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00472 case CAPTOP:
00473 return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
00474 case CAPBOTTOM:
00475 return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
00476 }
00477 Q_ASSERT(0);
00478 break;
00479 case CSS_PROP_CLEAR:
00480 switch (style->clear()) {
00481 case CNONE:
00482 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00483 case CLEFT:
00484 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00485 case CRIGHT:
00486 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00487 case CBOTH:
00488 return new CSSPrimitiveValueImpl(CSS_VAL_BOTH);
00489 }
00490 Q_ASSERT(0);
00491 break;
00492 case CSS_PROP_CLIP:
00493 break;
00494 case CSS_PROP_COLOR:
00495 return new CSSPrimitiveValueImpl(style->color().rgb());
00496 case CSS_PROP_CONTENT:
00497 break;
00498 case CSS_PROP_COUNTER_INCREMENT:
00499 break;
00500 case CSS_PROP_COUNTER_RESET:
00501 break;
00502 case CSS_PROP_CURSOR:
00503 switch (style->cursor()) {
00504 case CURSOR_AUTO:
00505 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00506 case CURSOR_CROSS:
00507 return new CSSPrimitiveValueImpl(CSS_VAL_CROSSHAIR);
00508 case CURSOR_DEFAULT:
00509 return new CSSPrimitiveValueImpl(CSS_VAL_DEFAULT);
00510 case CURSOR_POINTER:
00511 return new CSSPrimitiveValueImpl(CSS_VAL_POINTER);
00512 case CURSOR_MOVE:
00513 return new CSSPrimitiveValueImpl(CSS_VAL_MOVE);
00514 case CURSOR_PROGRESS:
00515 return new CSSPrimitiveValueImpl(CSS_VAL_PROGRESS);
00516 case CURSOR_E_RESIZE:
00517 return new CSSPrimitiveValueImpl(CSS_VAL_E_RESIZE);
00518 case CURSOR_NE_RESIZE:
00519 return new CSSPrimitiveValueImpl(CSS_VAL_NE_RESIZE);
00520 case CURSOR_NW_RESIZE:
00521 return new CSSPrimitiveValueImpl(CSS_VAL_NW_RESIZE);
00522 case CURSOR_N_RESIZE:
00523 return new CSSPrimitiveValueImpl(CSS_VAL_N_RESIZE);
00524 case CURSOR_SE_RESIZE:
00525 return new CSSPrimitiveValueImpl(CSS_VAL_SE_RESIZE);
00526 case CURSOR_SW_RESIZE:
00527 return new CSSPrimitiveValueImpl(CSS_VAL_SW_RESIZE);
00528 case CURSOR_S_RESIZE:
00529 return new CSSPrimitiveValueImpl(CSS_VAL_S_RESIZE);
00530 case CURSOR_W_RESIZE:
00531 return new CSSPrimitiveValueImpl(CSS_VAL_W_RESIZE);
00532 case CURSOR_TEXT:
00533 return new CSSPrimitiveValueImpl(CSS_VAL_TEXT);
00534 case CURSOR_WAIT:
00535 return new CSSPrimitiveValueImpl(CSS_VAL_WAIT);
00536 case CURSOR_HELP:
00537 return new CSSPrimitiveValueImpl(CSS_VAL_HELP);
00538 }
00539 Q_ASSERT(0);
00540 break;
00541 case CSS_PROP_DIRECTION:
00542 switch (style->direction()) {
00543 case LTR:
00544 return new CSSPrimitiveValueImpl(CSS_VAL_LTR);
00545 case RTL:
00546 return new CSSPrimitiveValueImpl(CSS_VAL_RTL);
00547 }
00548 Q_ASSERT(0);
00549 break;
00550 case CSS_PROP_DISPLAY:
00551 switch (style->display()) {
00552 case INLINE:
00553 return new CSSPrimitiveValueImpl(CSS_VAL_INLINE);
00554 case BLOCK:
00555 return new CSSPrimitiveValueImpl(CSS_VAL_BLOCK);
00556 case LIST_ITEM:
00557 return new CSSPrimitiveValueImpl(CSS_VAL_LIST_ITEM);
00558 case RUN_IN:
00559 return new CSSPrimitiveValueImpl(CSS_VAL_RUN_IN);
00560 case COMPACT:
00561 return new CSSPrimitiveValueImpl(CSS_VAL_COMPACT);
00562 case INLINE_BLOCK:
00563 return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_BLOCK);
00564 case TABLE:
00565 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE);
00566 case INLINE_TABLE:
00567 return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_TABLE);
00568 case TABLE_ROW_GROUP:
00569 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW_GROUP);
00570 case TABLE_HEADER_GROUP:
00571 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_HEADER_GROUP);
00572 case TABLE_FOOTER_GROUP:
00573 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_FOOTER_GROUP);
00574 case TABLE_ROW:
00575 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW);
00576 case TABLE_COLUMN_GROUP:
00577 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN_GROUP);
00578 case TABLE_COLUMN:
00579 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN);
00580 case TABLE_CELL:
00581 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CELL);
00582 case TABLE_CAPTION:
00583 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CAPTION);
00584 case NONE:
00585 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00586 }
00587 Q_ASSERT( 0 );
00588 break;
00589 case CSS_PROP_EMPTY_CELLS:
00590 switch (style->emptyCells()) {
00591 case SHOW:
00592 return new CSSPrimitiveValueImpl(CSS_VAL_SHOW);
00593 case HIDE:
00594 return new CSSPrimitiveValueImpl(CSS_VAL_HIDE);
00595 }
00596 Q_ASSERT( 0 );
00597 break;
00598 case CSS_PROP_FLOAT:
00599 {
00600 switch (style->floating()) {
00601 case FNONE:
00602 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00603 case FLEFT:
00604 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00605 case FRIGHT:
00606 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00607 case FLEFT_ALIGN:
00608 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT);
00609 case FRIGHT_ALIGN:
00610 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT);
00611 }
00612 }
00613 case CSS_PROP_FONT_FAMILY:
00614 {
00615 FontDef def = style->htmlFont().getFontDef();
00616 return new CSSPrimitiveValueImpl(def.family, CSSPrimitiveValue::CSS_STRING);
00617 }
00618 case CSS_PROP_FONT_SIZE:
00619 {
00620 FontDef def = style->htmlFont().getFontDef();
00621 return new CSSPrimitiveValueImpl(def.size, CSSPrimitiveValue::CSS_PX);
00622 }
00623 case CSS_PROP_FONT_STYLE:
00624 {
00625
00626 FontDef def = style->htmlFont().getFontDef();
00627 if (def.italic)
00628 return new CSSPrimitiveValueImpl(CSS_VAL_ITALIC);
00629 else
00630 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00631 }
00632 case CSS_PROP_FONT_VARIANT:
00633 {
00634 FontDef def = style->htmlFont().getFontDef();
00635 if (def.smallCaps)
00636 return new CSSPrimitiveValueImpl(CSS_VAL_SMALL_CAPS);
00637 else
00638 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00639 }
00640 case CSS_PROP_FONT_WEIGHT:
00641 {
00642
00643
00644 FontDef def = style->htmlFont().getFontDef();
00645 if (def.weight == QFont::Bold)
00646 return new CSSPrimitiveValueImpl(CSS_VAL_BOLD);
00647 else
00648 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00649 }
00650 case CSS_PROP_HEIGHT:
00651 return new CSSPrimitiveValueImpl(renderer->contentHeight(), CSSPrimitiveValue::CSS_PX);
00652 case CSS_PROP_LEFT:
00653 return getPositionOffsetValue(renderer, CSS_PROP_LEFT);
00654 case CSS_PROP_LETTER_SPACING:
00655 if (style->letterSpacing() == 0)
00656 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00657 return new CSSPrimitiveValueImpl(style->letterSpacing(), CSSPrimitiveValue::CSS_PX);
00658 case CSS_PROP_LINE_HEIGHT:
00659 {
00660 Length length(style->lineHeight());
00661 if (length.value() < 0)
00662 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00663 if (length.isPercent()) {
00664
00665 float computedSize = style->htmlFont().getFontDef().size;
00666 return new CSSPrimitiveValueImpl((int)(length._length * computedSize) / 100, CSSPrimitiveValue::CSS_PX);
00667 }
00668 else {
00669 return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PX);
00670 }
00671 }
00672 case CSS_PROP_LIST_STYLE_IMAGE:
00673 if (style->listStyleImage())
00674 return new CSSPrimitiveValueImpl(style->listStyleImage()->url(), CSSPrimitiveValue::CSS_URI);
00675 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00676 case CSS_PROP_LIST_STYLE_POSITION:
00677 switch (style->listStylePosition()) {
00678 case OUTSIDE:
00679 return new CSSPrimitiveValueImpl(CSS_VAL_OUTSIDE);
00680 case INSIDE:
00681 return new CSSPrimitiveValueImpl(CSS_VAL_INSIDE);
00682 }
00683 Q_ASSERT( 0 );
00684 break;
00685 case CSS_PROP_LIST_STYLE_TYPE:
00686 return new CSSPrimitiveValueImpl(stringForListStyleType(style->listStyleType()), CSSPrimitiveValue::CSS_STRING);
00687 case CSS_PROP_MARGIN_TOP:
00688 return valueForLength(style->marginTop(), renderer->contentHeight());
00689 case CSS_PROP_MARGIN_RIGHT:
00690 return valueForLength(style->marginRight(), renderer->contentWidth());
00691 case CSS_PROP_MARGIN_BOTTOM:
00692 return valueForLength(style->marginBottom(), renderer->contentHeight());
00693 case CSS_PROP_MARGIN_LEFT:
00694 return valueForLength(style->marginLeft(), renderer->contentWidth());
00695 case CSS_PROP__KHTML_MARQUEE:
00696
00697 break;
00698 case CSS_PROP__KHTML_MARQUEE_DIRECTION:
00699 switch (style->marqueeDirection()) {
00700 case MFORWARD:
00701 return new CSSPrimitiveValueImpl(CSS_VAL_FORWARDS);
00702 case MBACKWARD:
00703 return new CSSPrimitiveValueImpl(CSS_VAL_BACKWARDS);
00704 case MAUTO:
00705 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00706 case MUP:
00707 return new CSSPrimitiveValueImpl(CSS_VAL_UP);
00708 case MDOWN:
00709 return new CSSPrimitiveValueImpl(CSS_VAL_DOWN);
00710 case MLEFT:
00711 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00712 case MRIGHT:
00713 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00714 }
00715 Q_ASSERT(0);
00716 return 0;
00717 case CSS_PROP__KHTML_MARQUEE_INCREMENT:
00718 return valueForLength(style->marqueeIncrement(), renderer->contentWidth());
00719 case CSS_PROP__KHTML_MARQUEE_REPETITION:
00720 if (style->marqueeLoopCount() < 0)
00721 return new CSSPrimitiveValueImpl(CSS_VAL_INFINITE);
00722 return new CSSPrimitiveValueImpl(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER);
00723 case CSS_PROP__KHTML_MARQUEE_SPEED:
00724
00725 break;
00726 case CSS_PROP__KHTML_MARQUEE_STYLE:
00727 switch (style->marqueeBehavior()) {
00728 case MNONE:
00729 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00730 case MSCROLL:
00731 return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00732 case MSLIDE:
00733 return new CSSPrimitiveValueImpl(CSS_VAL_SLIDE);
00734 case MALTERNATE:
00735 return new CSSPrimitiveValueImpl(CSS_VAL_ALTERNATE);
00736 case MUNFURL:
00737 return new CSSPrimitiveValueImpl(CSS_VAL_UNFURL);
00738 }
00739 Q_ASSERT(0);
00740 return 0;
00741 case CSS_PROP_MAX_HEIGHT:
00742 return new CSSPrimitiveValueImpl( renderer->availableHeight(),
00743 CSSPrimitiveValue::CSS_PX );
00744 break;
00745 case CSS_PROP_MAX_WIDTH:
00746 return new CSSPrimitiveValueImpl( renderer->maxWidth(),
00747 CSSPrimitiveValue::CSS_PX );
00748 break;
00749 case CSS_PROP_MIN_HEIGHT:
00750 return new CSSPrimitiveValueImpl( renderer->contentHeight(),
00751 CSSPrimitiveValue::CSS_PX );
00752 break;
00753 case CSS_PROP_MIN_WIDTH:
00754 return new CSSPrimitiveValueImpl( renderer->minWidth(),
00755 CSSPrimitiveValue::CSS_PX );
00756 break;
00757 case CSS_PROP_OPACITY:
00758 return new CSSPrimitiveValueImpl(style->opacity(), CSSPrimitiveValue::CSS_NUMBER);
00759 case CSS_PROP_ORPHANS:
00760 return new CSSPrimitiveValueImpl(style->orphans(), CSSPrimitiveValue::CSS_NUMBER);
00761 case CSS_PROP_OUTLINE_COLOR:
00762 break;
00763 case CSS_PROP_OUTLINE_OFFSET:
00764 break;
00765 case CSS_PROP_OUTLINE_STYLE:
00766 if (style->outlineStyleIsAuto())
00767 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00768 return valueForBorderStyle(style->outlineStyle());
00769 case CSS_PROP_OUTLINE_WIDTH:
00770 break;
00771 case CSS_PROP_OVERFLOW:
00772 {
00773 switch (style->overflow()) {
00774 case OVISIBLE:
00775 return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
00776 case OHIDDEN:
00777 return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00778 case OSCROLL:
00779 return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00780 case OAUTO:
00781 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00782 case OMARQUEE:
00783 return new CSSPrimitiveValueImpl(CSS_VAL_MARQUEE);
00784 }
00785 Q_ASSERT(0);
00786 return 0;
00787 }
00788 case CSS_PROP_PADDING_TOP:
00789 return valueForLength(style->paddingTop(), renderer->contentHeight());
00790 case CSS_PROP_PADDING_RIGHT:
00791 return valueForLength(style->paddingRight(), renderer->contentWidth());
00792 case CSS_PROP_PADDING_BOTTOM:
00793 return valueForLength(style->paddingBottom(), renderer->contentHeight());
00794 case CSS_PROP_PADDING_LEFT:
00795 return valueForLength(style->paddingLeft(), renderer->contentWidth());
00796 case CSS_PROP_PAGE_BREAK_AFTER:
00797 switch (style->pageBreakAfter()) {
00798 case PBAUTO:
00799 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00800 case PBALWAYS:
00801 return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
00802 case PBAVOID:
00803 return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00804 case PBLEFT:
00805 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00806 case PBRIGHT:
00807 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00808 }
00809 Q_ASSERT(0);
00810 break;
00811 case CSS_PROP_PAGE_BREAK_BEFORE:
00812 switch (style->pageBreakBefore()) {
00813 case PBAUTO:
00814 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00815 case PBALWAYS:
00816 return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
00817 case PBAVOID:
00818 return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00819 case PBLEFT:
00820 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00821 case PBRIGHT:
00822 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00823 }
00824 Q_ASSERT(0);
00825 break;
00826 case CSS_PROP_PAGE_BREAK_INSIDE:
00827 switch (style->pageBreakInside()) {
00828 case PBAUTO:
00829 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00830 case PBAVOID:
00831 return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00832 case PBALWAYS:
00833 break;
00834 }
00835 break;
00836 case CSS_PROP_POSITION:
00837 switch (style->position()) {
00838 case STATIC:
00839 return new CSSPrimitiveValueImpl(CSS_VAL_STATIC);
00840 case RELATIVE:
00841 return new CSSPrimitiveValueImpl(CSS_VAL_RELATIVE);
00842 case ABSOLUTE:
00843 return new CSSPrimitiveValueImpl(CSS_VAL_ABSOLUTE);
00844 case FIXED:
00845 return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00846 }
00847 Q_ASSERT(0);
00848 break;
00849 case CSS_PROP_QUOTES:
00850 break;
00851 case CSS_PROP_RIGHT:
00852 return getPositionOffsetValue(renderer, CSS_PROP_RIGHT);
00853 case CSS_PROP_SIZE:
00854 break;
00855 case CSS_PROP_TABLE_LAYOUT:
00856 switch (style->tableLayout()) {
00857 case TAUTO:
00858 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00859 case TFIXED:
00860 return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00861 }
00862 Q_ASSERT(0);
00863 break;
00864 case CSS_PROP_TEXT_ALIGN:
00865 return valueForTextAlign(style->textAlign());
00866 case CSS_PROP_TEXT_DECORATION:
00867 {
00868 QString string;
00869 if (style->textDecoration() & khtml::UNDERLINE)
00870 string += "underline";
00871 if (style->textDecoration() & khtml::OVERLINE) {
00872 if (string.length() > 0)
00873 string += " ";
00874 string += "overline";
00875 }
00876 if (style->textDecoration() & khtml::LINE_THROUGH) {
00877 if (string.length() > 0)
00878 string += " ";
00879 string += "line-through";
00880 }
00881 if (style->textDecoration() & khtml::BLINK) {
00882 if (string.length() > 0)
00883 string += " ";
00884 string += "blink";
00885 }
00886 if (string.length() == 0)
00887 string = "none";
00888 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00889 }
00890 case CSS_PROP_TEXT_INDENT:
00891 return valueForLength(style->textIndent(), renderer->contentWidth());
00892 case CSS_PROP_TEXT_SHADOW:
00893 return valueForShadow(style->textShadow());
00894 case CSS_PROP_TEXT_TRANSFORM:
00895 switch (style->textTransform()) {
00896 case CAPITALIZE:
00897 return new CSSPrimitiveValueImpl(CSS_VAL_CAPITALIZE);
00898 case UPPERCASE:
00899 return new CSSPrimitiveValueImpl(CSS_VAL_UPPERCASE);
00900 case LOWERCASE:
00901 return new CSSPrimitiveValueImpl(CSS_VAL_LOWERCASE);
00902 case TTNONE:
00903 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00904 }
00905 Q_ASSERT(0);
00906 break;
00907 case CSS_PROP_TOP:
00908 return getPositionOffsetValue(renderer, CSS_PROP_TOP);
00909 case CSS_PROP_UNICODE_BIDI:
00910 switch (style->unicodeBidi()) {
00911 case UBNormal:
00912 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00913 case Embed:
00914 return new CSSPrimitiveValueImpl(CSS_VAL_EMBED);
00915 case Override:
00916 return new CSSPrimitiveValueImpl(CSS_VAL_BIDI_OVERRIDE);
00917 }
00918 Q_ASSERT(0);
00919 break;
00920 case CSS_PROP_VERTICAL_ALIGN:
00921 {
00922 switch (style->verticalAlign()) {
00923 case BASELINE:
00924 return new CSSPrimitiveValueImpl(CSS_VAL_BASELINE);
00925 case MIDDLE:
00926 return new CSSPrimitiveValueImpl(CSS_VAL_MIDDLE);
00927 case SUB:
00928 return new CSSPrimitiveValueImpl(CSS_VAL_SUB);
00929 case SUPER:
00930 return new CSSPrimitiveValueImpl(CSS_VAL_SUPER);
00931 case TEXT_TOP:
00932 return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_TOP);
00933 case TEXT_BOTTOM:
00934 return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_BOTTOM);
00935 case TOP:
00936 return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
00937 case BOTTOM:
00938 return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
00939 case BASELINE_MIDDLE:
00940 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_BASELINE_MIDDLE);
00941 case LENGTH:
00942 return valueForLength(style->verticalAlignLength(), renderer->contentWidth());
00943 }
00944 Q_ASSERT(0);
00945 break;
00946 }
00947 case CSS_PROP_VISIBILITY:
00948 switch (style->visibility()) {
00949 case khtml::VISIBLE:
00950 return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
00951 case khtml::HIDDEN:
00952 return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00953 case khtml::COLLAPSE:
00954 return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
00955 }
00956 Q_ASSERT(0);
00957 break;
00958 case CSS_PROP_WHITE_SPACE:
00959 {
00960 switch (style->whiteSpace()) {
00961 case NORMAL:
00962 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00963 case PRE:
00964 return new CSSPrimitiveValueImpl(CSS_VAL_PRE);
00965 case PRE_WRAP:
00966 return new CSSPrimitiveValueImpl(CSS_VAL_PRE_WRAP);
00967 case PRE_LINE:
00968 return new CSSPrimitiveValueImpl(CSS_VAL_PRE_LINE);
00969 case NOWRAP:
00970 return new CSSPrimitiveValueImpl(CSS_VAL_NOWRAP);
00971 case KHTML_NOWRAP:
00972 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NOWRAP);
00973 }
00974 Q_ASSERT(0);
00975 break;
00976 }
00977 case CSS_PROP_WIDOWS:
00978 return new CSSPrimitiveValueImpl(style->widows(), CSSPrimitiveValue::CSS_NUMBER);
00979 case CSS_PROP_WIDTH:
00980 return new CSSPrimitiveValueImpl( renderer->contentWidth(),
00981 CSSPrimitiveValue::CSS_PX );
00982 case CSS_PROP_WORD_SPACING:
00983 return new CSSPrimitiveValueImpl(style->wordSpacing(), CSSPrimitiveValue::CSS_PX);
00984 case CSS_PROP_Z_INDEX:
00985 if (style->hasAutoZIndex())
00986 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00987 return new CSSPrimitiveValueImpl(style->zIndex(), CSSPrimitiveValue::CSS_NUMBER);
00988 case CSS_PROP_BACKGROUND:
00989 break;
00990 case CSS_PROP_BORDER:
00991 break;
00992 case CSS_PROP_BORDER_COLOR:
00993 break;
00994 case CSS_PROP_BORDER_STYLE:
00995 break;
00996 case CSS_PROP_BORDER_TOP:
00997 return new CSSPrimitiveValueImpl( renderer->borderTop(),
00998 CSSPrimitiveValue::CSS_PX );
00999 break;
01000 case CSS_PROP_BORDER_RIGHT:
01001 return new CSSPrimitiveValueImpl( renderer->borderRight(),
01002 CSSPrimitiveValue::CSS_PX );
01003 break;
01004 case CSS_PROP_BORDER_BOTTOM:
01005 return new CSSPrimitiveValueImpl( renderer->borderBottom(),
01006 CSSPrimitiveValue::CSS_PX );
01007 break;
01008 case CSS_PROP_BORDER_LEFT:
01009 return new CSSPrimitiveValueImpl( renderer->borderLeft(),
01010 CSSPrimitiveValue::CSS_PX );
01011 break;
01012 case CSS_PROP_BORDER_WIDTH:
01013 break;
01014 case CSS_PROP_FONT:
01015 break;
01016 case CSS_PROP_LIST_STYLE:
01017 break;
01018 case CSS_PROP_MARGIN:
01019 break;
01020 case CSS_PROP_OUTLINE:
01021 break;
01022 case CSS_PROP_PADDING:
01023 break;
01024 case CSS_PROP_SCROLLBAR_BASE_COLOR:
01025 break;
01026 case CSS_PROP_SCROLLBAR_FACE_COLOR:
01027 break;
01028 case CSS_PROP_SCROLLBAR_SHADOW_COLOR:
01029 break;
01030 case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR:
01031 break;
01032 case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR:
01033 break;
01034 case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR:
01035 break;
01036 case CSS_PROP_SCROLLBAR_TRACK_COLOR:
01037 break;
01038 case CSS_PROP_SCROLLBAR_ARROW_COLOR:
01039 break;
01040 case CSS_PROP__KHTML_FLOW_MODE:
01041 break;
01042 case CSS_PROP__KHTML_USER_INPUT:
01043 break;
01044 default:
01045 Q_ASSERT( 0 );
01046 break;
01047 }
01048 return 0;
01049 }
01050
01051 DOMString RenderStyleDeclarationImpl::getPropertyValue( int propertyID ) const
01052 {
01053 CSSValueImpl* value = getPropertyCSSValue(propertyID);
01054 if (value) {
01055 DOMString val = value->cssText();
01056 delete value;
01057 return val;
01058 }
01059 return "";
01060 }
01061
01062 bool RenderStyleDeclarationImpl::getPropertyPriority( int ) const
01063 {
01064
01065 return false;
01066 }
01067
01068 DOM::DOMString RenderStyleDeclarationImpl::removeProperty( int, bool )
01069 {
01070
01071 return DOMString();
01072 }
01073
01074 bool RenderStyleDeclarationImpl::setProperty ( int, const DOM::DOMString&, bool,
01075 bool )
01076 {
01077
01078 return false;
01079 }
01080
01081 void RenderStyleDeclarationImpl::setProperty ( int, int, bool,
01082 bool )
01083 {
01084
01085 }
01086
01087 void RenderStyleDeclarationImpl::setLengthProperty( int, const DOM::DOMString&, bool,
01088 bool, bool )
01089 {
01090
01091 }
01092
01093 void RenderStyleDeclarationImpl::setProperty( const DOMString& )
01094 {
01095
01096 }
01097
01098 unsigned long RenderStyleDeclarationImpl::length() const
01099 {
01100 return numComputedProperties;
01101 }
01102
01103 DOM::DOMString RenderStyleDeclarationImpl::item( unsigned long i ) const
01104 {
01105 if (i >= numComputedProperties)
01106 return DOMString();
01107
01108 return getPropertyName(computedProperties[i]);
01109 }
01110
01111 CSSProperty RenderStyleDeclarationImpl::property( int id ) const
01112 {
01113 CSSProperty prop;
01114 prop.m_id = id;
01115 prop.m_bImportant = false;
01116 prop.nonCSSHint = false;
01117
01118 CSSValueImpl* v = getPropertyCSSValue( id );
01119 if ( !v )
01120 v = new CSSPrimitiveValueImpl;
01121 prop.setValue( v );
01122 return prop;
01123 }
01124