]> source.dussan.org Git - vaadin-framework.git/commitdiff
Proper implementation of alignments in IOrderedLayout + small fixes to css-files...
authorJouni Koivuviita <jouni.koivuviita@itmill.com>
Tue, 18 Dec 2007 08:41:04 +0000 (08:41 +0000)
committerJouni Koivuviita <jouni.koivuviita@itmill.com>
Tue, 18 Dec 2007 08:41:04 +0000 (08:41 +0000)
svn changeset:3251/svn branch:trunk

14 files changed:
src/com/itmill/toolkit/terminal/gwt/client/ui/IAccordion.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IExpandLayout.java
src/com/itmill/toolkit/terminal/gwt/client/ui/IOrderedLayout.java
src/com/itmill/toolkit/terminal/gwt/client/ui/ITabsheetBase.java
src/com/itmill/toolkit/terminal/gwt/public/default/accordion/accordion.css
src/com/itmill/toolkit/terminal/gwt/public/default/caption/caption.css
src/com/itmill/toolkit/terminal/gwt/public/default/panel/panel.css
src/com/itmill/toolkit/terminal/gwt/public/default/select/filterselect.css
src/com/itmill/toolkit/terminal/gwt/public/default/select/select.css
src/com/itmill/toolkit/terminal/gwt/public/default/table/table.css
src/com/itmill/toolkit/terminal/gwt/public/default/tabsheet/tabsheet.css
src/com/itmill/toolkit/terminal/gwt/public/default/textfield/textfield.css
src/com/itmill/toolkit/terminal/gwt/public/default/tree/tree.css
src/com/itmill/toolkit/ui/OrderedLayout.java

index e19f9eb674758c2f580b53e71c36b491de1f733f..ed2831bc386bc7b3a5405b2e2e4a4649cca2e281 100644 (file)
@@ -80,9 +80,9 @@ public class IAccordion extends ITabsheetBase implements
     public void onSelectTab(StackItem item) {
         final int index = stack.indexOf(item);
         if (index != activeTabIndex && !disabled && !readonly) {
-            if (getSelectedStack() == null)
-                return;
-            getSelectedStack().close();
+            if (getSelectedStack() != null) {
+                getSelectedStack().close();
+            }
             addStyleDependentName("loading");
             // run updating variables in deferred command to bypass some FF
             // optimization issues
@@ -113,20 +113,22 @@ public class IAccordion extends ITabsheetBase implements
             return;
 
         if (height != null && height != "") {
-            // Detach visible widget from document flow for a while to calculate used height correctly
+            // Detach visible widget from document flow for a while to calculate
+            // used height correctly
             Widget w = item.getContent().getContainedWidget();
             String originalPositioning = "";
-            if(w != null) {
-                originalPositioning = DOM.getStyleAttribute(w.getElement(), "position");
+            if (w != null) {
+                originalPositioning = DOM.getStyleAttribute(w.getElement(),
+                        "position");
                 DOM.setStyleAttribute(w.getElement(), "visibility", "hidden");
                 DOM.setStyleAttribute(w.getElement(), "position", "absolute");
             }
             item.getContent().setHeight("");
-            
 
             // Calculate target height
             super.setHeight(height);
-            int targetHeight = getOffsetHeight();
+            int targetHeight = DOM.getElementPropertyInt(DOM
+                    .getParent(getElement()), "offsetHeight");
             super.setHeight("");
 
             // Calculate used height
@@ -136,10 +138,11 @@ public class IAccordion extends ITabsheetBase implements
             if (h < 0)
                 h = 0;
             item.getContent().setHeight(h + "px");
-            
+
             // Put widget back into normal flow
-            if(w != null) {
-                DOM.setStyleAttribute(w.getElement(), "position", originalPositioning);
+            if (w != null) {
+                DOM.setStyleAttribute(w.getElement(), "position",
+                        originalPositioning);
                 DOM.setStyleAttribute(w.getElement(), "visibility", "");
             }
         } else {
@@ -232,7 +235,7 @@ public class IAccordion extends ITabsheetBase implements
     protected class StackContent extends UIObject {
 
         private Widget widget;
-        
+
         protected StackContent() {
             setElement(DOM.createDiv());
             setVisible(false);
@@ -259,7 +262,7 @@ public class IAccordion extends ITabsheetBase implements
             (content).updateFromUIDL(contentUidl, client);
             widget = (Widget) content;
         }
-        
+
         public Widget getContainedWidget() {
             return widget;
         }
index 6f9290c7bc3c5cd487c18032ef46d6e714a3f3ee..c80816ba5fd4cc8c15d853aee6c635e87b179a27 100644 (file)
@@ -253,7 +253,7 @@ public class IExpandLayout extends ComplexPanel implements
             }
         }
 
-        public Element getContainerElementu() {
+        public Element getContainerElement() {
             if (td == null) {
                 return super.getContainerElement();
             } else {
index 3a4b5d6f896dbb0ab8912848976de2e21e74c970..85ae828ce6f7051211c9467cccc43572ea4443a6 100644 (file)
@@ -223,29 +223,15 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
             final Caption c = (Caption) w;
             // captions go into same container element as their
             // owners
-            final Element container = DOM.getParent(((UIObject) c.getOwner())
-                    .getElement());
+            final Element container = getWidgetWrapperFor((Widget) c.getOwner())
+                    .getContainerElement();
             final Element captionContainer = DOM.createDiv();
             DOM.insertChild(container, captionContainer, 0);
             insert(w, captionContainer, beforeIndex, false);
         } else {
-            final Element wrapper = createWidgetWrappper();
-            DOM.insertChild(childContainer, wrapper, beforeIndex);
-            insert(w, wrapper, beforeIndex, false);
-        }
-    }
-
-    /**
-     * creates an Element which will contain child widget
-     */
-    protected Element createWidgetWrappper() {
-        switch (orientationMode) {
-        case ORIENTATION_HORIZONTAL:
-            final Element td = DOM.createTD();
-            return td;
-        default:
-            final Element div = DOM.createDiv();
-            return div;
+            WidgetWrapper wr = new WidgetWrapper();
+            DOM.insertChild(childContainer, wr.getElement(), beforeIndex);
+            insert(w, wr.getContainerElement(), beforeIndex, false);
         }
     }
 
@@ -282,9 +268,9 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
     }
 
     public void add(Widget w) {
-        final Element wrapper = createWidgetWrappper();
-        DOM.appendChild(childContainer, wrapper);
-        super.add(w, wrapper);
+        WidgetWrapper wr = new WidgetWrapper();
+        DOM.appendChild(childContainer, wr.getElement());
+        super.add(w, wr.getContainerElement());
     }
 
     public boolean remove(int index) {
@@ -292,7 +278,7 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
     }
 
     public boolean remove(Widget w) {
-        final Element wrapper = DOM.getParent(w.getElement());
+        final Element wrapper = getWidgetWrapperFor(w).getElement();
         final boolean removed = super.remove(w);
         if (removed) {
             if (!(w instanceof Caption)) {
@@ -343,40 +329,126 @@ public abstract class IOrderedLayout extends ComplexPanel implements Container {
             final AlignmentInfo ai = new AlignmentInfo(
                     alignments[alignmentIndex++]);
 
-            final Element wrapper = DOM.getParent(((Widget) it.next())
-                    .getElement());
-            if (Util.isIE()) {
-                DOM.setElementAttribute(wrapper, "vAlign", ai
-                        .getVerticalAlignment());
+            final WidgetWrapper wr = getWidgetWrapperFor((Widget) it.next());
+            wr.setAlignment(ai.getVerticalAlignment(), ai
+                    .getHorizontalAlignment());
+
+            // Handle spacing in this loop as well
+            if (first) {
+                wr.setSpacingEnabled(false);
+                first = false;
             } else {
-                DOM.setStyleAttribute(wrapper, "verticalAlign", ai
-                        .getVerticalAlignment());
+                wr.setSpacingEnabled(hasComponentSpacing);
             }
-            // TODO use one-cell table to implement horizontal alignments
-            if (Util.isIE()) {
-                DOM.setElementAttribute(wrapper, "align", ai
-                        .getHorizontalAlignment());
+        }
+    }
+
+    /**
+     * WidgetWrapper classe. Helper classe for spacing and alignment handling.
+     * 
+     */
+    class WidgetWrapper extends UIObject {
+
+        Element td;
+
+        public WidgetWrapper() {
+            if (orientationMode == ORIENTATION_VERTICAL) {
+                setElement(DOM.createDiv());
+                // Apply 'hasLayout' for IE (needed to get accurate dimension
+                // calculations)
+                if (Util.isIE()) {
+                    DOM.setStyleAttribute(getElement(), "zoom", "1");
+                }
             } else {
-                DOM.setStyleAttribute(wrapper, "textAlign", ai
-                        .getHorizontalAlignment());
+                setElement(DOM.createTD());
             }
+        }
 
-            if (first) {
-                setSpacingEnabled(wrapper, false);
-                first = false;
+        public WidgetWrapper(Element element) {
+            if (DOM.getElementProperty(element, "className").equals("i_align")) {
+                td = element;
+                setElement(DOM.getParent(DOM.getParent(DOM.getParent(DOM
+                        .getParent(td)))));
             } else {
-                setSpacingEnabled(wrapper, hasComponentSpacing);
+                setElement(element);
             }
         }
+
+        Element getContainerElement() {
+            if (td != null) {
+                return td;
+            } else {
+                return getElement();
+            }
+        }
+
+        void setAlignment(String verticalAlignment, String horizontalAlignment) {
+
+            // Set vertical alignment
+            if (Util.isIE()) {
+                DOM.setElementAttribute(getElement(), "vAlign",
+                        verticalAlignment);
+            } else {
+                DOM.setStyleAttribute(getElement(), "verticalAlign",
+                        verticalAlignment);
+            }
+
+            // Set horizontal alignment
+            if (Util.isIE()) {
+                DOM.setElementAttribute(getElement(), "align",
+                        horizontalAlignment);
+            } else if (!horizontalAlignment.equals("left")) {
+                // use one-cell table to implement horizontal alignments, only
+                // for values other than "left" (which is default)
+                // build one cell table
+                if (td == null) {
+                    final Element table = DOM.createTable();
+                    final Element tBody = DOM.createTBody();
+                    final Element tr = DOM.createTR();
+                    td = DOM.createTD();
+                    DOM.appendChild(table, tBody);
+                    DOM.appendChild(tBody, tr);
+                    DOM.appendChild(tr, td);
+                    DOM.setElementAttribute(table, "cellpadding", "0");
+                    DOM.setElementAttribute(table, "cellspacing", "0");
+                    DOM.setStyleAttribute(table, "width", "100%");
+                    // use className for identification
+                    DOM.setElementProperty(td, "className", "i_align");
+                    // move possible content to cell
+                    while (DOM.getChildCount(getElement()) > 0) {
+                        final Element content = DOM.getFirstChild(getElement());
+                        if (content != null) {
+                            DOM.removeChild(getElement(), content);
+                            DOM.appendChild(td, content);
+                        }
+                    }
+                    DOM.appendChild(getElement(), table);
+                }
+                // set alignment
+                DOM.setElementAttribute(td, "align", horizontalAlignment);
+            }
+        }
+
+        void setSpacingEnabled(boolean b) {
+            setStyleName(
+                    getElement(),
+                    CLASSNAME
+                            + "-"
+                            + (orientationMode == ORIENTATION_HORIZONTAL ? StyleConstants.HORIZONTAL_SPACING
+                                    : StyleConstants.VERTICAL_SPACING), b);
+        }
+
     }
 
-    private void setSpacingEnabled(Element e, boolean b) {
-        setStyleName(
-                e,
-                CLASSNAME
-                        + "-"
-                        + (orientationMode == ORIENTATION_HORIZONTAL ? StyleConstants.HORIZONTAL_SPACING
-                                : StyleConstants.VERTICAL_SPACING), b);
+    /**
+     * Returns given widgets WidgetWrapper
+     * 
+     * @param child
+     * @return
+     */
+    public WidgetWrapper getWidgetWrapperFor(Widget child) {
+        final Element containerElement = DOM.getParent(child.getElement());
+        return new WidgetWrapper(containerElement);
     }
 
 }
index c3cf0e6a56b50e6b87438ef13db54da052134bb2..ed1083eabe30ff64969ca877129ee467b65b49e8 100644 (file)
@@ -25,9 +25,9 @@ abstract class ITabsheetBase extends FlowPanel implements Paintable {
 
     public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
 
-        // Ensure correct implementation and let ApplicationConnection handle
-        // component caption
-        if (client.updateComponent(this, uidl, true)) {
+        // Ensure correct implementation and don't let ApplicationConnection
+        // handle component caption
+        if (client.updateComponent(this, uidl, false)) {
             return;
         }
 
index bb18b70e5076569d9296f94ce83fa8fd5baece64..b4e728963e451dab8200597757698ab661df19ee 100644 (file)
@@ -1,6 +1,7 @@
 .i-accordion {
        outline: none;
        overflow: hidden;
+       text-align: left /* Force default alignment */
 }
 
 .i-accordion-item-caption {
index 4ffff807694fb212bacc839026e5b87a26e5b6e8..ddea35826588f61fc6f7432f3572cd06c79ac2a5 100644 (file)
@@ -3,6 +3,7 @@
    they aren't even handling their own caption) */
 .i-captionwrapper {
        margin: 0.3em 0 0 0;
+       text-align: left /* Force default alignment */
 }
 
 .i-errorindicator {
index 2182009fa80b5e8db7da1779fc67ba19ee9092f0..7d0dc4789bbf52cf53a9a8b40ed599a06bf2093c 100644 (file)
@@ -7,6 +7,7 @@
 .i-panel-content-light,
 .i-panel-deco-light {
        outline: none; /* Prevent selection outline which might break layouts or cause scrollbars */
+       text-align: left /* Force default alignment */
 }
 
 .i-panel:before {
index 9e92eb7d0f7fa4271459fd695b7ec54cb1e83e3e..bef2b160fb7674b27da0a4af6c1cd7a85c01a276 100644 (file)
@@ -3,6 +3,7 @@
        background: transparent url(img/bg-left-filter.png) no-repeat;
        margin-right: 1px;
        white-space: nowrap;
+       text-align: left /* Force default alignment */
 }
 
 .i-filterselect-input {
index 5998c55f8579c7f8b2f6437b09a9a41003c2f5b4..335d77277ecb8980ab9604f7bfe702bab1f9a38d 100644 (file)
@@ -1,5 +1,5 @@
-.i-select {\r
-\r
+.i-select {
+       text-align: left /* Force default alignment */\r
 }\r
 .i-select-option {\r
 \r
index 3a437a9c0e6897c253dca2880a632e18fe7a1de1..745a4513386810d600dbc8d3fd0a0e805edad971 100644 (file)
@@ -1,6 +1,7 @@
 .i-table {
        border: 1px solid #b6bbbc;
        overflow: hidden;
+       text-align: left /* Force default alignment */
 }
 
 .i-table.table-inline {
 /* disabled row in column selector */
 .i-off {
        font-style: italic;
+       color:
 }
 
 
 /* IE specific styles */
 * html .i-table-scrollposition {
        background: transparent;
-       /* We need two different filters because we cannot be sure of the context 
+       /* We need multiple different filters because we cannot be sure of the context 
           the browser is currently in (i.e. with ending slash or without). */
+       filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../../ITMILL/widgetsets/com.itmill.toolkit.terminal.gwt.DefaultWidgetSet/default/table/img/scroll-position-bg.png", sizingMethod="scale");
        filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="../ITMILL/widgetsets/com.itmill.toolkit.terminal.gwt.DefaultWidgetSet/default/table/img/scroll-position-bg.png", sizingMethod="scale");
        filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src="ITMILL/widgetsets/com.itmill.toolkit.terminal.gwt.DefaultWidgetSet/default/table/img/scroll-position-bg.png", sizingMethod="scale");
 }
\ No newline at end of file
index 3c6bf001a999f8936f1d38987cb96f3696a8e428..1aa1a874f5ca1d1b6e46853695215925f1eaafaf 100644 (file)
@@ -2,6 +2,7 @@
 .i-tabsheet-content,
 .i-tabsheet-deco {
        outline: none; /* Prevent selection outline which might break layouts or cause scrollbars */
+       text-align: left /* Force default alignment */
 }
 
 
index f567b537c915164a0a253e6407832485fa40da3e..10aa9811f4ac196218068dc731e12fb5a7a8a76a 100644 (file)
@@ -8,6 +8,7 @@
        margin: 0;
        font-size: 13px;
        height: 18px;
+       text-align: left /* Force default alignment */
 }
 
 .i-textarea {
index f627e082c3558fbee11045b17a86e571901eb3b7..f905658f63c8c877fa6243a52e9540f994938079 100644 (file)
@@ -1,3 +1,7 @@
+.i-tree {
+       text-align: left /* Force default alignment */
+}
+
 .i-tree-node {
        background: transparent url(img/collapsed.png) no-repeat 2px 1px;
 }
index 55eac04fcef772aba7559dd9ec8649516d422f4f..e720caf6199780dccd39d22ca115f9ac3533ae3c 100644 (file)
@@ -320,6 +320,7 @@ public class OrderedLayout extends AbstractLayout {
             int horizontalAlignment, int verticalAlignment) {
         componentToAlignment.put(childComponent, new Integer(
                 horizontalAlignment + verticalAlignment));
+        requestRepaint();
     }
 
     public int getComponentAlignment(Component childComponent) {