172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project/*
272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2007-2008 Esmertec AG.
372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Copyright (C) 2007-2008 The Android Open Source Project
472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * you may not use this file except in compliance with the License.
772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * You may obtain a copy of the License at
872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project *
1172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * See the License for the specific language governing permissions and
1572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project * limitations under the License.
1672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project */
1772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
1872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpackage com.android.mms.dom.smil;
1972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
20ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wenimport com.android.mms.LogTag;
21ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wen
2272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.DOMException;
2372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILDocument;
2472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport org.w3c.dom.smil.SMILRegionElement;
2572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
2672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectimport android.util.Log;
2772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
2872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Projectpublic class SmilRegionElementImpl extends SmilElementImpl implements
2972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        SMILRegionElement {
3072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
3172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /*
3272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Internal Interface
3372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
3472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
3572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String HIDDEN_ATTRIBUTE = "hidden";
3672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String SLICE_ATTRIBUTE = "slice";
3772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String SCROLL_ATTRIBUTE = "scroll";
3872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String MEET_ATTRIBUTE = "meet";
3972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String FILL_ATTRIBUTE = "fill";
4072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String ID_ATTRIBUTE_NAME = "id";
4172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String WIDTH_ATTRIBUTE_NAME = "width";
4272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String TITLE_ATTRIBUTE_NAME = "title";
4372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String HEIGHT_ATTRIBUTE_NAME = "height";
4472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String BACKGROUND_COLOR_ATTRIBUTE_NAME = "backgroundColor";
4572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String Z_INDEX_ATTRIBUTE_NAME = "z-index";
4672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String TOP_ATTRIBUTE_NAME = "top";
4772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String LEFT_ATTRIBUTE_NAME = "left";
4872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String RIGHT_ATTRIBUTE_NAME = "right";
4972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String BOTTOM_ATTRIBUTE_NAME = "bottom";
5072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final String FIT_ATTRIBUTE_NAME = "fit";
51ab845dee6565a8dfc384186bc8f2e801a2b087e1Ye Wen    private static final String TAG = LogTag.TAG;
5272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private static final boolean DEBUG = false;
53150c4179995cc0a75f934ef194372f9295957ca2Joe Onorato    private static final boolean LOCAL_LOGV = false;
5472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
5572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    SmilRegionElementImpl(SmilDocumentImpl owner, String tagName) {
5672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        super(owner, tagName);
5772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
5872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
5972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /*
6072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * SMILRegionElement Interface
6172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
6272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
6372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String getFit() {
6472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        String fit = getAttribute(FIT_ATTRIBUTE_NAME);
6572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (FILL_ATTRIBUTE.equalsIgnoreCase(fit)) {
6672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return FILL_ATTRIBUTE;
6772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else if (MEET_ATTRIBUTE.equalsIgnoreCase(fit)) {
6872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return MEET_ATTRIBUTE;
6972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else if (SCROLL_ATTRIBUTE.equalsIgnoreCase(fit)) {
7072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return SCROLL_ATTRIBUTE;
7172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else if (SLICE_ATTRIBUTE.equalsIgnoreCase(fit)) {
7272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return SLICE_ATTRIBUTE;
7372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else {
7472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return HIDDEN_ATTRIBUTE;
7572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
7672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
7772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
7872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getLeft() {
7972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
8072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return parseRegionLength(getAttribute(LEFT_ATTRIBUTE_NAME), true);
8172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
8272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
8372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Left attribute is not set or incorrect.");
8472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
8572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
8672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
8772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            int bbw = ((SMILDocument) getOwnerDocument()).getLayout().getRootLayout().getWidth();
8872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            int right = parseRegionLength(getAttribute(RIGHT_ATTRIBUTE_NAME), true);
8972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            int width = parseRegionLength(getAttribute(WIDTH_ATTRIBUTE_NAME), true);
9072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return bbw - right - width;
9172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
9272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
9372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Right or width attribute is not set or incorrect.");
9472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
9572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
9672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return 0;
9772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
9872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
9972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getTop() {
10072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
10172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return parseRegionLength(getAttribute(TOP_ATTRIBUTE_NAME), false);
10272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
10372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
10472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Top attribute is not set or incorrect.");
10572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
10672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
10772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
10872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            int bbh = ((SMILDocument) getOwnerDocument()).getLayout().getRootLayout().getHeight();
10972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            int bottom = parseRegionLength(getAttribute(BOTTOM_ATTRIBUTE_NAME), false);
11072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            int height = parseRegionLength(getAttribute(HEIGHT_ATTRIBUTE_NAME), false);
11172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return bbh - bottom - height;
11272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
11372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
11472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Bottom or height attribute is not set or incorrect.");
11572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
11672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
11772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return 0;
11872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
11972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getZIndex() {
12172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
12272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return Integer.parseInt(this.getAttribute(Z_INDEX_ATTRIBUTE_NAME));
12372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
12472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return 0;
12572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
12672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
12772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
12872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setFit(String fit) throws DOMException {
12972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (fit.equalsIgnoreCase(FILL_ATTRIBUTE)
13072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                || fit.equalsIgnoreCase(MEET_ATTRIBUTE)
13172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                || fit.equalsIgnoreCase(SCROLL_ATTRIBUTE)
13272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                || fit.equalsIgnoreCase(SLICE_ATTRIBUTE)) {
13372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            this.setAttribute(FIT_ATTRIBUTE_NAME, fit.toLowerCase());
13472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else {
13572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            this.setAttribute(FIT_ATTRIBUTE_NAME, HIDDEN_ATTRIBUTE);
13672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
13772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
13872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
13972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setLeft(int left) throws DOMException {
14072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        this.setAttribute(LEFT_ATTRIBUTE_NAME, String.valueOf(left));
14172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
14272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
14372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setTop(int top) throws DOMException {
14472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        this.setAttribute(TOP_ATTRIBUTE_NAME, String.valueOf(top));
14572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
14672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
14772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setZIndex(int zIndex) throws DOMException {
14872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (zIndex > 0) {
14972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            this.setAttribute(Z_INDEX_ATTRIBUTE_NAME, Integer.toString(zIndex));
15072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else {
15172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            this.setAttribute(Z_INDEX_ATTRIBUTE_NAME, Integer.toString(0));
15272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
15372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
15472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
15572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String getBackgroundColor() {
15672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return this.getAttribute(BACKGROUND_COLOR_ATTRIBUTE_NAME);
15772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
15872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
15972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getHeight() {
16072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
161e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor            final int height = parseRegionLength(getAttribute(HEIGHT_ATTRIBUTE_NAME), false);
162e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor            return height == 0 ?
163e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor                    ((SMILDocument) getOwnerDocument()).getLayout().getRootLayout().getHeight() :
164e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor                        height;
16572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
16672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
16772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Height attribute is not set or incorrect.");
16872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
16972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
17072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        int bbh = ((SMILDocument) getOwnerDocument()).getLayout().getRootLayout().getHeight();
17172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
17272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            bbh -= parseRegionLength(getAttribute(TOP_ATTRIBUTE_NAME), false);
17372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
17472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
17572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Top attribute is not set or incorrect.");
17672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
17772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
17872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
17972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            bbh -= parseRegionLength(getAttribute(BOTTOM_ATTRIBUTE_NAME), false);
18072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
18172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
18272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Bottom attribute is not set or incorrect.");
18372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
18472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
18572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return bbh;
18672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
18772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
18872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String getTitle() {
18972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return this.getAttribute(TITLE_ATTRIBUTE_NAME);
19072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
19172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
19272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public int getWidth() {
19372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
194e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor            final int width = parseRegionLength(getAttribute(WIDTH_ATTRIBUTE_NAME), true);
195e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor            return width == 0 ?
196e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor                    ((SMILDocument) getOwnerDocument()).getLayout().getRootLayout().getWidth() :
197e6367524d22c6bfedfb81c7e068e475b0f807053Tom Taylor                        width;
19872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
19972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
20072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Width attribute is not set or incorrect.");
20172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
20272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
20372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        int bbw = ((SMILDocument) getOwnerDocument()).getLayout().getRootLayout().getWidth();
20472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
20572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            bbw -= parseRegionLength(getAttribute(LEFT_ATTRIBUTE_NAME), true);
20672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
20772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
20872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Left attribute is not set or incorrect.");
20972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
21072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
21172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        try {
21272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            bbw -= parseRegionLength(getAttribute(RIGHT_ATTRIBUTE_NAME), true);
21372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } catch (NumberFormatException _) {
21472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (LOCAL_LOGV) {
21572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                Log.v(TAG, "Right attribute is not set or incorrect.");
21672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
21772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
21872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return bbw;
21972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
22072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
22172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setBackgroundColor(String backgroundColor) throws DOMException {
22272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        this.setAttribute(BACKGROUND_COLOR_ATTRIBUTE_NAME, backgroundColor);
22372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
22472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
22572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setHeight(int height) throws DOMException {
22672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        this.setAttribute(HEIGHT_ATTRIBUTE_NAME, String.valueOf(height) + "px");
22772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
22872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
22972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setTitle(String title) throws DOMException {
23072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        this.setAttribute(TITLE_ATTRIBUTE_NAME, title);
23172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
23272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
23372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setWidth(int width) throws DOMException {
23472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        this.setAttribute(WIDTH_ATTRIBUTE_NAME, String.valueOf(width) + "px");
23572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
23672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
23772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /*
23872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * SMILElement Interface
23972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
24072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
24172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
24272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String getId() {
24372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return this.getAttribute(ID_ATTRIBUTE_NAME);
24472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
24572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
24672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
24772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public void setId(String id) throws DOMException {
24872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        this.setAttribute(ID_ATTRIBUTE_NAME, id);
24972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
25072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
25172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /*
25272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * Internal Interface
25372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
25472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
25572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    private int parseRegionLength(String length, boolean horizontal) {
25672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        if (length.endsWith("px")) {
25772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            length = length.substring(0, length.indexOf("px"));
25872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return Integer.parseInt(length);
25972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else if (length.endsWith("%")) {
26072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            double value = 0.01*Integer.parseInt(length.substring(0, length.length() - 1));
26172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            if (horizontal) {
26272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                value *= ((SMILDocument) getOwnerDocument()).getLayout().getRootLayout().getWidth();
26372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            } else {
26472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                value *= ((SMILDocument) getOwnerDocument()).getLayout().getRootLayout().getHeight();
26572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            }
26672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return (int) Math.round(value);
26772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        } else {
26872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project            return Integer.parseInt(length);
26972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        }
27072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
27172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project
27272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    /*
27372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * (non-Javadoc)
27472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     * @see java.lang.Object#toString()
27572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project     */
27672735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    @Override
27772735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    public String toString() {
27872735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project        return super.toString()
27972735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                + ": id=" + getId()
28072735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                + ", width=" + getWidth()
28172735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                + ", height=" + getHeight()
28272735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                + ", left=" + getLeft()
28372735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project                + ", top=" + getTop();
28472735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project    }
28572735c62aba8fd2a9420a0f9f83d22543e3c164fThe Android Open Source Project}
286