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 CSSPrimitiveValueImpl* valueForColor(QColor color)
00269 {
00270 if (color.isValid())
00271 return new CSSPrimitiveValueImpl(color.rgb());
00272 else
00273 return new CSSPrimitiveValueImpl(khtml::transparentColor);
00274 }
00275
00276 static CSSValueImpl* valueForShadow(const ShadowData *shadow)
00277 {
00278 if (!shadow)
00279 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00280 CSSValueListImpl *list = new CSSValueListImpl;
00281 for (const ShadowData *s = shadow; s; s = s->next) {
00282 CSSPrimitiveValueImpl *x = new CSSPrimitiveValueImpl(s->x, CSSPrimitiveValue::CSS_PX);
00283 CSSPrimitiveValueImpl *y = new CSSPrimitiveValueImpl(s->y, CSSPrimitiveValue::CSS_PX);
00284 CSSPrimitiveValueImpl *blur = new CSSPrimitiveValueImpl(s->blur, CSSPrimitiveValue::CSS_PX);
00285 CSSPrimitiveValueImpl *color = valueForColor(s->color);
00286 list->append(new ShadowValueImpl(x, y, blur, color));
00287 }
00288 return list;
00289 }
00290
00291 static CSSValueImpl *getPositionOffsetValue(RenderObject *renderer, int propertyID)
00292 {
00293 if (!renderer)
00294 return 0;
00295
00296 RenderStyle *style = renderer->style();
00297 if (!style)
00298 return 0;
00299
00300 Length l;
00301 switch (propertyID) {
00302 case CSS_PROP_LEFT:
00303 l = style->left();
00304 break;
00305 case CSS_PROP_RIGHT:
00306 l = style->right();
00307 break;
00308 case CSS_PROP_TOP:
00309 l = style->top();
00310 break;
00311 case CSS_PROP_BOTTOM:
00312 l = style->bottom();
00313 break;
00314 default:
00315 return 0;
00316 }
00317
00318 if (renderer->isPositioned())
00319 return valueForLength(l, renderer->contentWidth());
00320
00321 if (renderer->isRelPositioned())
00322
00323
00324
00325 return valueForLength(l, renderer->contentWidth());
00326
00327 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00328 }
00329
00330 RenderStyleDeclarationImpl::RenderStyleDeclarationImpl( DOM::NodeImpl *node )
00331 : CSSStyleDeclarationImpl(0), m_node(node)
00332 {
00333 kdDebug() << "Render Style Declaration created" << endl;
00334 }
00335
00336 RenderStyleDeclarationImpl::~RenderStyleDeclarationImpl()
00337 {
00338 kdDebug() << "Render Style Declaration destroyed" << endl;
00339 }
00340
00341 DOM::DOMString RenderStyleDeclarationImpl::cssText() const
00342 {
00343 DOMString result;
00344
00345 for (unsigned i = 0; i < numComputedProperties; i++) {
00346 if (i != 0)
00347 result += " ";
00348 result += getPropertyName(computedProperties[i]);
00349 result += ": ";
00350 result += getPropertyValue(computedProperties[i]);
00351 result += ";";
00352 }
00353
00354 return result;
00355 }
00356
00357 void RenderStyleDeclarationImpl::setCssText( DOM::DOMString )
00358 {
00359
00360 }
00361
00362 CSSValueImpl *RenderStyleDeclarationImpl::getPropertyCSSValue( int propertyID ) const
00363 {
00364 NodeImpl *node = m_node.get();
00365 if (!node)
00366 return 0;
00367
00368
00369 DocumentImpl* docimpl = node->getDocument();
00370 if (docimpl) {
00371 docimpl->updateLayout();
00372 }
00373
00374 RenderObject *renderer = m_node->renderer();
00375 if (!renderer)
00376 return 0;
00377 RenderStyle *style = renderer->style();
00378 if (!style)
00379 return 0;
00380
00381 switch(propertyID)
00382 {
00383 case CSS_PROP_BACKGROUND_COLOR:
00384 return valueForColor(style->backgroundColor());
00385 case CSS_PROP_BACKGROUND_IMAGE:
00386 if (style->backgroundImage())
00387 return new CSSPrimitiveValueImpl(style->backgroundImage()->url(),
00388 CSSPrimitiveValue::CSS_URI);
00389 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00390 case CSS_PROP_BACKGROUND_REPEAT:
00391 switch (style->backgroundRepeat()) {
00392 case khtml::REPEAT:
00393 return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT);
00394 case khtml::REPEAT_X:
00395 return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_X);
00396 case khtml::REPEAT_Y:
00397 return new CSSPrimitiveValueImpl(CSS_VAL_REPEAT_Y);
00398 case khtml::NO_REPEAT:
00399 return new CSSPrimitiveValueImpl(CSS_VAL_NO_REPEAT);
00400 default:
00401 Q_ASSERT( 0 );
00402 }
00403 case CSS_PROP_BACKGROUND_ATTACHMENT:
00404 if (style->backgroundAttachment())
00405 return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00406 else
00407 return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00408 case CSS_PROP_BACKGROUND_POSITION:
00409 {
00410 DOMString string;
00411 Length length(style->backgroundXPosition());
00412 if (length.isPercent())
00413 string = QString::number(length._length) + "%";
00414 else
00415 string = QString::number(length.minWidth(renderer->contentWidth()));
00416 string += " ";
00417 length = style->backgroundYPosition();
00418 if (length.isPercent())
00419 string += QString::number(length._length) + "%";
00420 else
00421 string += QString::number(length.minWidth(renderer->contentWidth()));
00422 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00423 }
00424 case CSS_PROP_BACKGROUND_POSITION_X:
00425 return valueForLength(style->backgroundXPosition(), renderer->contentWidth());
00426 case CSS_PROP_BACKGROUND_POSITION_Y:
00427 return valueForLength(style->backgroundYPosition(), renderer->contentHeight());
00428 case CSS_PROP_BORDER_COLLAPSE:
00429 if (style->borderCollapse())
00430 return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
00431 else
00432 return new CSSPrimitiveValueImpl(CSS_VAL_SEPARATE);
00433 case CSS_PROP_BORDER_SPACING:
00434 {
00435 QString string(QString::number(style->borderHorizontalSpacing()) +
00436 "px " +
00437 QString::number(style->borderVerticalSpacing()) +
00438 "px");
00439 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00440 }
00441 case CSS_PROP__KHTML_BORDER_HORIZONTAL_SPACING:
00442 return new CSSPrimitiveValueImpl(style->borderHorizontalSpacing(),
00443 CSSPrimitiveValue::CSS_PX);
00444 case CSS_PROP__KHTML_BORDER_VERTICAL_SPACING:
00445 return new CSSPrimitiveValueImpl(style->borderVerticalSpacing(),
00446 CSSPrimitiveValue::CSS_PX);
00447 case CSS_PROP_BORDER_TOP_COLOR:
00448 return valueForColor(style->borderTopColor());
00449 case CSS_PROP_BORDER_RIGHT_COLOR:
00450 return valueForColor(style->borderRightColor());
00451 case CSS_PROP_BORDER_BOTTOM_COLOR:
00452 return valueForColor(style->borderBottomColor());
00453 case CSS_PROP_BORDER_LEFT_COLOR:
00454 return valueForColor(style->borderLeftColor());
00455 case CSS_PROP_BORDER_TOP_STYLE:
00456 return valueForBorderStyle(style->borderTopStyle());
00457 case CSS_PROP_BORDER_RIGHT_STYLE:
00458 return valueForBorderStyle(style->borderRightStyle());
00459 case CSS_PROP_BORDER_BOTTOM_STYLE:
00460 return valueForBorderStyle(style->borderBottomStyle());
00461 case CSS_PROP_BORDER_LEFT_STYLE:
00462 return valueForBorderStyle(style->borderLeftStyle());
00463 case CSS_PROP_BORDER_TOP_WIDTH:
00464 return new CSSPrimitiveValueImpl( style->borderTopWidth(), CSSPrimitiveValue::CSS_PX );
00465 case CSS_PROP_BORDER_RIGHT_WIDTH:
00466 return new CSSPrimitiveValueImpl( style->borderRightWidth(), CSSPrimitiveValue::CSS_PX );
00467 case CSS_PROP_BORDER_BOTTOM_WIDTH:
00468 return new CSSPrimitiveValueImpl( style->borderBottomWidth(), CSSPrimitiveValue::CSS_PX );
00469 case CSS_PROP_BORDER_LEFT_WIDTH:
00470 return new CSSPrimitiveValueImpl( style->borderLeftWidth(), CSSPrimitiveValue::CSS_PX );
00471 case CSS_PROP_BOTTOM:
00472 return getPositionOffsetValue(renderer, CSS_PROP_BOTTOM);
00473 case CSS_PROP_CAPTION_SIDE:
00474 switch (style->captionSide()) {
00475 case CAPLEFT:
00476 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00477 case CAPRIGHT:
00478 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00479 case CAPTOP:
00480 return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
00481 case CAPBOTTOM:
00482 return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
00483 }
00484 Q_ASSERT(0);
00485 break;
00486 case CSS_PROP_CLEAR:
00487 switch (style->clear()) {
00488 case CNONE:
00489 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00490 case CLEFT:
00491 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00492 case CRIGHT:
00493 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00494 case CBOTH:
00495 return new CSSPrimitiveValueImpl(CSS_VAL_BOTH);
00496 }
00497 Q_ASSERT(0);
00498 break;
00499 case CSS_PROP_CLIP:
00500 break;
00501 case CSS_PROP_COLOR:
00502 return valueForColor(style->color());
00503 case CSS_PROP_CONTENT:
00504 break;
00505 case CSS_PROP_COUNTER_INCREMENT:
00506 break;
00507 case CSS_PROP_COUNTER_RESET:
00508 break;
00509 case CSS_PROP_CURSOR:
00510 switch (style->cursor()) {
00511 case CURSOR_AUTO:
00512 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00513 case CURSOR_CROSS:
00514 return new CSSPrimitiveValueImpl(CSS_VAL_CROSSHAIR);
00515 case CURSOR_DEFAULT:
00516 return new CSSPrimitiveValueImpl(CSS_VAL_DEFAULT);
00517 case CURSOR_POINTER:
00518 return new CSSPrimitiveValueImpl(CSS_VAL_POINTER);
00519 case CURSOR_MOVE:
00520 return new CSSPrimitiveValueImpl(CSS_VAL_MOVE);
00521 case CURSOR_PROGRESS:
00522 return new CSSPrimitiveValueImpl(CSS_VAL_PROGRESS);
00523 case CURSOR_E_RESIZE:
00524 return new CSSPrimitiveValueImpl(CSS_VAL_E_RESIZE);
00525 case CURSOR_NE_RESIZE:
00526 return new CSSPrimitiveValueImpl(CSS_VAL_NE_RESIZE);
00527 case CURSOR_NW_RESIZE:
00528 return new CSSPrimitiveValueImpl(CSS_VAL_NW_RESIZE);
00529 case CURSOR_N_RESIZE:
00530 return new CSSPrimitiveValueImpl(CSS_VAL_N_RESIZE);
00531 case CURSOR_SE_RESIZE:
00532 return new CSSPrimitiveValueImpl(CSS_VAL_SE_RESIZE);
00533 case CURSOR_SW_RESIZE:
00534 return new CSSPrimitiveValueImpl(CSS_VAL_SW_RESIZE);
00535 case CURSOR_S_RESIZE:
00536 return new CSSPrimitiveValueImpl(CSS_VAL_S_RESIZE);
00537 case CURSOR_W_RESIZE:
00538 return new CSSPrimitiveValueImpl(CSS_VAL_W_RESIZE);
00539 case CURSOR_TEXT:
00540 return new CSSPrimitiveValueImpl(CSS_VAL_TEXT);
00541 case CURSOR_WAIT:
00542 return new CSSPrimitiveValueImpl(CSS_VAL_WAIT);
00543 case CURSOR_HELP:
00544 return new CSSPrimitiveValueImpl(CSS_VAL_HELP);
00545 }
00546 Q_ASSERT(0);
00547 break;
00548 case CSS_PROP_DIRECTION:
00549 switch (style->direction()) {
00550 case LTR:
00551 return new CSSPrimitiveValueImpl(CSS_VAL_LTR);
00552 case RTL:
00553 return new CSSPrimitiveValueImpl(CSS_VAL_RTL);
00554 }
00555 Q_ASSERT(0);
00556 break;
00557 case CSS_PROP_DISPLAY:
00558 switch (style->display()) {
00559 case INLINE:
00560 return new CSSPrimitiveValueImpl(CSS_VAL_INLINE);
00561 case BLOCK:
00562 return new CSSPrimitiveValueImpl(CSS_VAL_BLOCK);
00563 case LIST_ITEM:
00564 return new CSSPrimitiveValueImpl(CSS_VAL_LIST_ITEM);
00565 case RUN_IN:
00566 return new CSSPrimitiveValueImpl(CSS_VAL_RUN_IN);
00567 case COMPACT:
00568 return new CSSPrimitiveValueImpl(CSS_VAL_COMPACT);
00569 case INLINE_BLOCK:
00570 return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_BLOCK);
00571 case TABLE:
00572 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE);
00573 case INLINE_TABLE:
00574 return new CSSPrimitiveValueImpl(CSS_VAL_INLINE_TABLE);
00575 case TABLE_ROW_GROUP:
00576 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW_GROUP);
00577 case TABLE_HEADER_GROUP:
00578 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_HEADER_GROUP);
00579 case TABLE_FOOTER_GROUP:
00580 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_FOOTER_GROUP);
00581 case TABLE_ROW:
00582 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_ROW);
00583 case TABLE_COLUMN_GROUP:
00584 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN_GROUP);
00585 case TABLE_COLUMN:
00586 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_COLUMN);
00587 case TABLE_CELL:
00588 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CELL);
00589 case TABLE_CAPTION:
00590 return new CSSPrimitiveValueImpl(CSS_VAL_TABLE_CAPTION);
00591 case NONE:
00592 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00593 }
00594 Q_ASSERT( 0 );
00595 break;
00596 case CSS_PROP_EMPTY_CELLS:
00597 switch (style->emptyCells()) {
00598 case SHOW:
00599 return new CSSPrimitiveValueImpl(CSS_VAL_SHOW);
00600 case HIDE:
00601 return new CSSPrimitiveValueImpl(CSS_VAL_HIDE);
00602 }
00603 Q_ASSERT( 0 );
00604 break;
00605 case CSS_PROP_FLOAT:
00606 {
00607 switch (style->floating()) {
00608 case FNONE:
00609 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00610 case FLEFT:
00611 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00612 case FRIGHT:
00613 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00614 case FLEFT_ALIGN:
00615 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_LEFT);
00616 case FRIGHT_ALIGN:
00617 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_RIGHT);
00618 }
00619 }
00620 case CSS_PROP_FONT_FAMILY:
00621 {
00622 FontDef def = style->htmlFont().getFontDef();
00623 return new CSSPrimitiveValueImpl(def.family, CSSPrimitiveValue::CSS_STRING);
00624 }
00625 case CSS_PROP_FONT_SIZE:
00626 {
00627 FontDef def = style->htmlFont().getFontDef();
00628 return new CSSPrimitiveValueImpl(def.size, CSSPrimitiveValue::CSS_PX);
00629 }
00630 case CSS_PROP_FONT_STYLE:
00631 {
00632
00633 FontDef def = style->htmlFont().getFontDef();
00634 if (def.italic)
00635 return new CSSPrimitiveValueImpl(CSS_VAL_ITALIC);
00636 else
00637 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00638 }
00639 case CSS_PROP_FONT_VARIANT:
00640 {
00641 FontDef def = style->htmlFont().getFontDef();
00642 if (def.smallCaps)
00643 return new CSSPrimitiveValueImpl(CSS_VAL_SMALL_CAPS);
00644 else
00645 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00646 }
00647 case CSS_PROP_FONT_WEIGHT:
00648 {
00649
00650
00651 FontDef def = style->htmlFont().getFontDef();
00652 if (def.weight == QFont::Bold)
00653 return new CSSPrimitiveValueImpl(CSS_VAL_BOLD);
00654 else
00655 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00656 }
00657 case CSS_PROP_HEIGHT:
00658 return new CSSPrimitiveValueImpl(renderer->contentHeight(), CSSPrimitiveValue::CSS_PX);
00659 case CSS_PROP_LEFT:
00660 return getPositionOffsetValue(renderer, CSS_PROP_LEFT);
00661 case CSS_PROP_LETTER_SPACING:
00662 if (style->letterSpacing() == 0)
00663 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00664 return new CSSPrimitiveValueImpl(style->letterSpacing(), CSSPrimitiveValue::CSS_PX);
00665 case CSS_PROP_LINE_HEIGHT:
00666 {
00667 Length length(style->lineHeight());
00668 if (length.value() < 0)
00669 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00670 if (length.isPercent()) {
00671
00672 float computedSize = style->htmlFont().getFontDef().size;
00673 return new CSSPrimitiveValueImpl((int)(length._length * computedSize) / 100, CSSPrimitiveValue::CSS_PX);
00674 }
00675 else {
00676 return new CSSPrimitiveValueImpl(length._length, CSSPrimitiveValue::CSS_PX);
00677 }
00678 }
00679 case CSS_PROP_LIST_STYLE_IMAGE:
00680 if (style->listStyleImage())
00681 return new CSSPrimitiveValueImpl(style->listStyleImage()->url(), CSSPrimitiveValue::CSS_URI);
00682 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00683 case CSS_PROP_LIST_STYLE_POSITION:
00684 switch (style->listStylePosition()) {
00685 case OUTSIDE:
00686 return new CSSPrimitiveValueImpl(CSS_VAL_OUTSIDE);
00687 case INSIDE:
00688 return new CSSPrimitiveValueImpl(CSS_VAL_INSIDE);
00689 }
00690 Q_ASSERT( 0 );
00691 break;
00692 case CSS_PROP_LIST_STYLE_TYPE:
00693 return new CSSPrimitiveValueImpl(stringForListStyleType(style->listStyleType()), CSSPrimitiveValue::CSS_STRING);
00694 case CSS_PROP_MARGIN_TOP:
00695 return valueForLength(style->marginTop(), renderer->contentHeight());
00696 case CSS_PROP_MARGIN_RIGHT:
00697 return valueForLength(style->marginRight(), renderer->contentWidth());
00698 case CSS_PROP_MARGIN_BOTTOM:
00699 return valueForLength(style->marginBottom(), renderer->contentHeight());
00700 case CSS_PROP_MARGIN_LEFT:
00701 return valueForLength(style->marginLeft(), renderer->contentWidth());
00702 case CSS_PROP__KHTML_MARQUEE:
00703
00704 break;
00705 case CSS_PROP__KHTML_MARQUEE_DIRECTION:
00706 switch (style->marqueeDirection()) {
00707 case MFORWARD:
00708 return new CSSPrimitiveValueImpl(CSS_VAL_FORWARDS);
00709 case MBACKWARD:
00710 return new CSSPrimitiveValueImpl(CSS_VAL_BACKWARDS);
00711 case MAUTO:
00712 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00713 case MUP:
00714 return new CSSPrimitiveValueImpl(CSS_VAL_UP);
00715 case MDOWN:
00716 return new CSSPrimitiveValueImpl(CSS_VAL_DOWN);
00717 case MLEFT:
00718 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00719 case MRIGHT:
00720 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00721 }
00722 Q_ASSERT(0);
00723 return 0;
00724 case CSS_PROP__KHTML_MARQUEE_INCREMENT:
00725 return valueForLength(style->marqueeIncrement(), renderer->contentWidth());
00726 case CSS_PROP__KHTML_MARQUEE_REPETITION:
00727 if (style->marqueeLoopCount() < 0)
00728 return new CSSPrimitiveValueImpl(CSS_VAL_INFINITE);
00729 return new CSSPrimitiveValueImpl(style->marqueeLoopCount(), CSSPrimitiveValue::CSS_NUMBER);
00730 case CSS_PROP__KHTML_MARQUEE_SPEED:
00731
00732 break;
00733 case CSS_PROP__KHTML_MARQUEE_STYLE:
00734 switch (style->marqueeBehavior()) {
00735 case MNONE:
00736 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00737 case MSCROLL:
00738 return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00739 case MSLIDE:
00740 return new CSSPrimitiveValueImpl(CSS_VAL_SLIDE);
00741 case MALTERNATE:
00742 return new CSSPrimitiveValueImpl(CSS_VAL_ALTERNATE);
00743 case MUNFURL:
00744 return new CSSPrimitiveValueImpl(CSS_VAL_UNFURL);
00745 }
00746 Q_ASSERT(0);
00747 return 0;
00748 case CSS_PROP_MAX_HEIGHT:
00749 return new CSSPrimitiveValueImpl( renderer->availableHeight(),
00750 CSSPrimitiveValue::CSS_PX );
00751 break;
00752 case CSS_PROP_MAX_WIDTH:
00753 return new CSSPrimitiveValueImpl( renderer->maxWidth(),
00754 CSSPrimitiveValue::CSS_PX );
00755 break;
00756 case CSS_PROP_MIN_HEIGHT:
00757 return new CSSPrimitiveValueImpl( renderer->contentHeight(),
00758 CSSPrimitiveValue::CSS_PX );
00759 break;
00760 case CSS_PROP_MIN_WIDTH:
00761 return new CSSPrimitiveValueImpl( renderer->minWidth(),
00762 CSSPrimitiveValue::CSS_PX );
00763 break;
00764 case CSS_PROP_OPACITY:
00765 return new CSSPrimitiveValueImpl(style->opacity(), CSSPrimitiveValue::CSS_NUMBER);
00766 case CSS_PROP_ORPHANS:
00767 return new CSSPrimitiveValueImpl(style->orphans(), CSSPrimitiveValue::CSS_NUMBER);
00768 case CSS_PROP_OUTLINE_COLOR:
00769 break;
00770 case CSS_PROP_OUTLINE_OFFSET:
00771 break;
00772 case CSS_PROP_OUTLINE_STYLE:
00773 if (style->outlineStyleIsAuto())
00774 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00775 return valueForBorderStyle(style->outlineStyle());
00776 case CSS_PROP_OUTLINE_WIDTH:
00777 break;
00778 case CSS_PROP_OVERFLOW:
00779 {
00780 switch (style->overflow()) {
00781 case OVISIBLE:
00782 return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
00783 case OHIDDEN:
00784 return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00785 case OSCROLL:
00786 return new CSSPrimitiveValueImpl(CSS_VAL_SCROLL);
00787 case OAUTO:
00788 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00789 case OMARQUEE:
00790 return new CSSPrimitiveValueImpl(CSS_VAL_MARQUEE);
00791 }
00792 Q_ASSERT(0);
00793 return 0;
00794 }
00795 case CSS_PROP_PADDING_TOP:
00796 return valueForLength(style->paddingTop(), renderer->contentHeight());
00797 case CSS_PROP_PADDING_RIGHT:
00798 return valueForLength(style->paddingRight(), renderer->contentWidth());
00799 case CSS_PROP_PADDING_BOTTOM:
00800 return valueForLength(style->paddingBottom(), renderer->contentHeight());
00801 case CSS_PROP_PADDING_LEFT:
00802 return valueForLength(style->paddingLeft(), renderer->contentWidth());
00803 case CSS_PROP_PAGE_BREAK_AFTER:
00804 switch (style->pageBreakAfter()) {
00805 case PBAUTO:
00806 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00807 case PBALWAYS:
00808 return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
00809 case PBAVOID:
00810 return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00811 case PBLEFT:
00812 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00813 case PBRIGHT:
00814 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00815 }
00816 Q_ASSERT(0);
00817 break;
00818 case CSS_PROP_PAGE_BREAK_BEFORE:
00819 switch (style->pageBreakBefore()) {
00820 case PBAUTO:
00821 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00822 case PBALWAYS:
00823 return new CSSPrimitiveValueImpl(CSS_VAL_ALWAYS);
00824 case PBAVOID:
00825 return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00826 case PBLEFT:
00827 return new CSSPrimitiveValueImpl(CSS_VAL_LEFT);
00828 case PBRIGHT:
00829 return new CSSPrimitiveValueImpl(CSS_VAL_RIGHT);
00830 }
00831 Q_ASSERT(0);
00832 break;
00833 case CSS_PROP_PAGE_BREAK_INSIDE:
00834 switch (style->pageBreakInside()) {
00835 case PBAUTO:
00836 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00837 case PBAVOID:
00838 return new CSSPrimitiveValueImpl(CSS_VAL_AVOID);
00839 case PBALWAYS:
00840 break;
00841 }
00842 break;
00843 case CSS_PROP_POSITION:
00844 switch (style->position()) {
00845 case STATIC:
00846 return new CSSPrimitiveValueImpl(CSS_VAL_STATIC);
00847 case RELATIVE:
00848 return new CSSPrimitiveValueImpl(CSS_VAL_RELATIVE);
00849 case ABSOLUTE:
00850 return new CSSPrimitiveValueImpl(CSS_VAL_ABSOLUTE);
00851 case FIXED:
00852 return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00853 }
00854 Q_ASSERT(0);
00855 break;
00856 case CSS_PROP_QUOTES:
00857 break;
00858 case CSS_PROP_RIGHT:
00859 return getPositionOffsetValue(renderer, CSS_PROP_RIGHT);
00860 case CSS_PROP_SIZE:
00861 break;
00862 case CSS_PROP_TABLE_LAYOUT:
00863 switch (style->tableLayout()) {
00864 case TAUTO:
00865 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO);
00866 case TFIXED:
00867 return new CSSPrimitiveValueImpl(CSS_VAL_FIXED);
00868 }
00869 Q_ASSERT(0);
00870 break;
00871 case CSS_PROP_TEXT_ALIGN:
00872 return valueForTextAlign(style->textAlign());
00873 case CSS_PROP_TEXT_DECORATION:
00874 {
00875 QString string;
00876 if (style->textDecoration() & khtml::UNDERLINE)
00877 string += "underline";
00878 if (style->textDecoration() & khtml::OVERLINE) {
00879 if (string.length() > 0)
00880 string += " ";
00881 string += "overline";
00882 }
00883 if (style->textDecoration() & khtml::LINE_THROUGH) {
00884 if (string.length() > 0)
00885 string += " ";
00886 string += "line-through";
00887 }
00888 if (style->textDecoration() & khtml::BLINK) {
00889 if (string.length() > 0)
00890 string += " ";
00891 string += "blink";
00892 }
00893 if (string.length() == 0)
00894 string = "none";
00895 return new CSSPrimitiveValueImpl(string, CSSPrimitiveValue::CSS_STRING);
00896 }
00897 case CSS_PROP_TEXT_INDENT:
00898 return valueForLength(style->textIndent(), renderer->contentWidth());
00899 case CSS_PROP_TEXT_SHADOW:
00900 return valueForShadow(style->textShadow());
00901 case CSS_PROP_TEXT_TRANSFORM:
00902 switch (style->textTransform()) {
00903 case CAPITALIZE:
00904 return new CSSPrimitiveValueImpl(CSS_VAL_CAPITALIZE);
00905 case UPPERCASE:
00906 return new CSSPrimitiveValueImpl(CSS_VAL_UPPERCASE);
00907 case LOWERCASE:
00908 return new CSSPrimitiveValueImpl(CSS_VAL_LOWERCASE);
00909 case TTNONE:
00910 return new CSSPrimitiveValueImpl(CSS_VAL_NONE);
00911 }
00912 Q_ASSERT(0);
00913 break;
00914 case CSS_PROP_TOP:
00915 return getPositionOffsetValue(renderer, CSS_PROP_TOP);
00916 case CSS_PROP_UNICODE_BIDI:
00917 switch (style->unicodeBidi()) {
00918 case UBNormal:
00919 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00920 case Embed:
00921 return new CSSPrimitiveValueImpl(CSS_VAL_EMBED);
00922 case Override:
00923 return new CSSPrimitiveValueImpl(CSS_VAL_BIDI_OVERRIDE);
00924 }
00925 Q_ASSERT(0);
00926 break;
00927 case CSS_PROP_VERTICAL_ALIGN:
00928 {
00929 switch (style->verticalAlign()) {
00930 case BASELINE:
00931 return new CSSPrimitiveValueImpl(CSS_VAL_BASELINE);
00932 case MIDDLE:
00933 return new CSSPrimitiveValueImpl(CSS_VAL_MIDDLE);
00934 case SUB:
00935 return new CSSPrimitiveValueImpl(CSS_VAL_SUB);
00936 case SUPER:
00937 return new CSSPrimitiveValueImpl(CSS_VAL_SUPER);
00938 case TEXT_TOP:
00939 return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_TOP);
00940 case TEXT_BOTTOM:
00941 return new CSSPrimitiveValueImpl(CSS_VAL_TEXT_BOTTOM);
00942 case TOP:
00943 return new CSSPrimitiveValueImpl(CSS_VAL_TOP);
00944 case BOTTOM:
00945 return new CSSPrimitiveValueImpl(CSS_VAL_BOTTOM);
00946 case BASELINE_MIDDLE:
00947 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_BASELINE_MIDDLE);
00948 case LENGTH:
00949 return valueForLength(style->verticalAlignLength(), renderer->contentWidth());
00950 }
00951 Q_ASSERT(0);
00952 break;
00953 }
00954 case CSS_PROP_VISIBILITY:
00955 switch (style->visibility()) {
00956 case khtml::VISIBLE:
00957 return new CSSPrimitiveValueImpl(CSS_VAL_VISIBLE);
00958 case khtml::HIDDEN:
00959 return new CSSPrimitiveValueImpl(CSS_VAL_HIDDEN);
00960 case khtml::COLLAPSE:
00961 return new CSSPrimitiveValueImpl(CSS_VAL_COLLAPSE);
00962 }
00963 Q_ASSERT(0);
00964 break;
00965 case CSS_PROP_WHITE_SPACE:
00966 {
00967 switch (style->whiteSpace()) {
00968 case NORMAL:
00969 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00970 case PRE:
00971 return new CSSPrimitiveValueImpl(CSS_VAL_PRE);
00972 case PRE_WRAP:
00973 return new CSSPrimitiveValueImpl(CSS_VAL_PRE_WRAP);
00974 case PRE_LINE:
00975 return new CSSPrimitiveValueImpl(CSS_VAL_PRE_LINE);
00976 case NOWRAP:
00977 return new CSSPrimitiveValueImpl(CSS_VAL_NOWRAP);
00978 case KHTML_NOWRAP:
00979 return new CSSPrimitiveValueImpl(CSS_VAL__KHTML_NOWRAP);
00980 }
00981 Q_ASSERT(0);
00982 break;
00983 }
00984 case CSS_PROP_WIDOWS:
00985 return new CSSPrimitiveValueImpl(style->widows(), CSSPrimitiveValue::CSS_NUMBER);
00986 case CSS_PROP_WIDTH:
00987 return new CSSPrimitiveValueImpl( renderer->contentWidth(),
00988 CSSPrimitiveValue::CSS_PX );
00989 case CSS_PROP_WORD_SPACING:
00990 return new CSSPrimitiveValueImpl(style->wordSpacing(), CSSPrimitiveValue::CSS_PX);
00991 case CSS_PROP_Z_INDEX:
00992 if (style->hasAutoZIndex())
00993 return new CSSPrimitiveValueImpl(CSS_VAL_NORMAL);
00994 return new CSSPrimitiveValueImpl(style->zIndex(), CSSPrimitiveValue::CSS_NUMBER);
00995 case CSS_PROP_BACKGROUND:
00996 break;
00997 case CSS_PROP_BORDER:
00998 break;
00999 case CSS_PROP_BORDER_COLOR:
01000 break;
01001 case CSS_PROP_BORDER_STYLE:
01002 break;
01003 case CSS_PROP_BORDER_TOP:
01004 return new CSSPrimitiveValueImpl( renderer->borderTop(),
01005 CSSPrimitiveValue::CSS_PX );
01006 break;
01007 case CSS_PROP_BORDER_RIGHT:
01008 return new CSSPrimitiveValueImpl( renderer->borderRight(),
01009 CSSPrimitiveValue::CSS_PX );
01010 break;
01011 case CSS_PROP_BORDER_BOTTOM:
01012 return new CSSPrimitiveValueImpl( renderer->borderBottom(),
01013 CSSPrimitiveValue::CSS_PX );
01014 break;
01015 case CSS_PROP_BORDER_LEFT:
01016 return new CSSPrimitiveValueImpl( renderer->borderLeft(),
01017 CSSPrimitiveValue::CSS_PX );
01018 break;
01019 case CSS_PROP_BORDER_WIDTH:
01020 break;
01021 case CSS_PROP_FONT:
01022 break;
01023 case CSS_PROP_LIST_STYLE:
01024 break;
01025 case CSS_PROP_MARGIN:
01026 break;
01027 case CSS_PROP_OUTLINE:
01028 break;
01029 case CSS_PROP_PADDING:
01030 break;
01031 case CSS_PROP_SCROLLBAR_BASE_COLOR:
01032 break;
01033 case CSS_PROP_SCROLLBAR_FACE_COLOR:
01034 break;
01035 case CSS_PROP_SCROLLBAR_SHADOW_COLOR:
01036 break;
01037 case CSS_PROP_SCROLLBAR_HIGHLIGHT_COLOR:
01038 break;
01039 case CSS_PROP_SCROLLBAR_3DLIGHT_COLOR:
01040 break;
01041 case CSS_PROP_SCROLLBAR_DARKSHADOW_COLOR:
01042 break;
01043 case CSS_PROP_SCROLLBAR_TRACK_COLOR:
01044 break;
01045 case CSS_PROP_SCROLLBAR_ARROW_COLOR:
01046 break;
01047 case CSS_PROP__KHTML_FLOW_MODE:
01048 break;
01049 case CSS_PROP__KHTML_USER_INPUT:
01050 break;
01051 default:
01052 Q_ASSERT( 0 );
01053 break;
01054 }
01055 return 0;
01056 }
01057
01058 DOMString RenderStyleDeclarationImpl::getPropertyValue( int propertyID ) const
01059 {
01060 CSSValueImpl* value = getPropertyCSSValue(propertyID);
01061 if (value) {
01062 DOMString val = value->cssText();
01063 delete value;
01064 return val;
01065 }
01066 return "";
01067 }
01068
01069 bool RenderStyleDeclarationImpl::getPropertyPriority( int ) const
01070 {
01071
01072 return false;
01073 }
01074
01075 DOM::DOMString RenderStyleDeclarationImpl::removeProperty( int, bool )
01076 {
01077
01078 return DOMString();
01079 }
01080
01081 bool RenderStyleDeclarationImpl::setProperty ( int, const DOM::DOMString&, bool,
01082 bool )
01083 {
01084
01085 return false;
01086 }
01087
01088 void RenderStyleDeclarationImpl::setProperty ( int, int, bool,
01089 bool )
01090 {
01091
01092 }
01093
01094 void RenderStyleDeclarationImpl::setLengthProperty( int, const DOM::DOMString&, bool,
01095 bool, bool )
01096 {
01097
01098 }
01099
01100 void RenderStyleDeclarationImpl::setProperty( const DOMString& )
01101 {
01102
01103 }
01104
01105 unsigned long RenderStyleDeclarationImpl::length() const
01106 {
01107 return numComputedProperties;
01108 }
01109
01110 DOM::DOMString RenderStyleDeclarationImpl::item( unsigned long i ) const
01111 {
01112 if (i >= numComputedProperties)
01113 return DOMString();
01114
01115 return getPropertyName(computedProperties[i]);
01116 }
01117
01118 CSSProperty RenderStyleDeclarationImpl::property( int id ) const
01119 {
01120 CSSProperty prop;
01121 prop.m_id = id;
01122 prop.m_important = false;
01123 prop.nonCSSHint = false;
01124
01125 CSSValueImpl* v = getPropertyCSSValue( id );
01126 if ( !v )
01127 v = new CSSPrimitiveValueImpl;
01128 prop.setValue( v );
01129 return prop;
01130 }
01131