.v-window {
background: #fff;
}
+.v-window-contents {
+ padding: 1.6em 0 10px;
+ margin: -1.6em 0 -10px;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+}
+
+.v-window.v-has-width > div.popupContent,
+.v-window.v-has-width .v-window-wrap,
+.v-window.v-has-width .v-window-contents,
+.v-window.v-has-width .v-window-contents > div {
+ width: 100%;
+}
+
+.v-window.v-has-height > div.popupContent,
+.v-window.v-has-height .v-window-wrap,
+.v-window.v-has-height .v-window-contents,
+.v-window.v-has-height .v-window-contents > div {
+ height: 100%;
+}
+
.v-window-outerheader {
- padding: 0.3em 0;
- height: 1em;
+ padding: 0.3em 1em;
+ height: 1.6em;
position: relative;
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
}
.v-window-outerheader,
.v-window-draggingCurtain {
cursor: move;
}
-.v-window-header.v-not-spanning {
- position: absolute;
- left: 0;
- right: 0;
-}
.v-window-header {
font-weight: bold;
}
text-overflow: ellipsis;
-ms-text-overflow: ellipsis;
overflow: hidden;
- padding: 0 1em;
+ padding: 0;
}
.v-window-header .v-icon {
vertical-align: middle; /* This has to be 'middle', not 'bottom', to allow larger icons than 16px */
import com.vaadin.terminal.gwt.client.Console;
import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Focusable;
+import com.vaadin.terminal.gwt.client.LayoutManager;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.ShortcutActionHandlerOwner;
* Minimum allowed height of a window. This refers to the content area, not
* the outer borders.
*/
- public static final int MIN_CONTENT_AREA_HEIGHT = 100;
+ private static final int MIN_CONTENT_AREA_HEIGHT = 100;
/**
* Minimum allowed width of a window. This refers to the content area, not
* the outer borders.
*/
- public static final int MIN_CONTENT_AREA_WIDTH = 150;
+ private static final int MIN_CONTENT_AREA_WIDTH = 150;
private static ArrayList<VWindow> windowOrder = new ArrayList<VWindow>();
resizing = true;
startX = Util.getTouchOrMouseClientX(event);
startY = Util.getTouchOrMouseClientY(event);
- origW = contents.getOffsetWidth();
- origH = contents.getOffsetHeight();
+ origW = getElement().getOffsetWidth();
+ origH = getElement().getOffsetHeight();
DOM.setCapture(getElement());
event.preventDefault();
break;
}
int w = Util.getTouchOrMouseClientX(event) - startX + origW;
- if (w < MIN_CONTENT_AREA_WIDTH) {
- w = MIN_CONTENT_AREA_WIDTH;
+ int minWidth = getMinWidth();
+ if (w < minWidth) {
+ w = minWidth;
}
int h = Util.getTouchOrMouseClientY(event) - startY + origH;
- if (h < MIN_CONTENT_AREA_HEIGHT) {
- h = MIN_CONTENT_AREA_HEIGHT;
+ int minHeight = getMinHeight();
+ if (h < minHeight) {
+ h = minHeight;
}
setWidth(w + "px");
if (updateVariables) {
// sending width back always as pixels, no need for unit
- client.updateVariable(id, "width", getWidget().getOffsetWidth(),
- false);
- client.updateVariable(id, "height", getWidget().getOffsetHeight(),
- immediate);
+ client.updateVariable(id, "width", w, false);
+ client.updateVariable(id, "height", h, immediate);
}
if (updateVariables || !resizeLazy) {
@Override
public void setWidth(String width) {
- super.setWidth(width);
- // Let the width of the heading affect the total width if the window has
- // undefined width
- if (width == null || width.length() == 0) {
- headerText.removeClassName("v-not-spanning");
- } else {
- headerText.addClassName("v-not-spanning");
- }
+ // Override PopupPanel which sets the width to the contents
+ getElement().getStyle().setProperty("width", width);
+ // Update v-has-width in case undefined window is resized
+ setStyleName("v-has-width", width != null && width.length() > 0);
}
- int getExtraHeight() {
- return header.getOffsetHeight() + footer.getOffsetHeight();
+ @Override
+ public void setHeight(String height) {
+ // Override PopupPanel which sets the height to the contents
+ getElement().getStyle().setProperty("height", height);
+ // Update v-has-height in case undefined window is resized
+ setStyleName("v-has-height", height != null && height.length() > 0);
}
private void onDragEvent(Event event) {
contentPanel.focus();
}
+ public int getMinHeight() {
+ return MIN_CONTENT_AREA_HEIGHT + getDecorationHeight();
+ }
+
+ private int getDecorationHeight() {
+ LayoutManager layoutManager = layout.getLayoutManager();
+ return layoutManager.getOuterHeight(getElement())
+ - layoutManager.getInnerHeight(contentPanel.getElement());
+ }
+
+ public int getMinWidth() {
+ return MIN_CONTENT_AREA_WIDTH + getDecorationWidth();
+ }
+
+ private int getDecorationWidth() {
+ LayoutManager layoutManager = layout.getLayoutManager();
+ return layoutManager.getOuterWidth(getElement())
+ - layoutManager.getInnerWidth(contentPanel.getElement());
+ }
+
}
LayoutManager lm = getLayoutManager();
VWindow window = getWidget();
Element contentElement = window.contentPanel.getElement();
- if (!window.layout.isUndefinedWidth()
- && lm.getOuterWidth(contentElement) < VWindow.MIN_CONTENT_AREA_WIDTH) {
+ boolean needsMinWidth = !isUndefinedWidth()
+ || window.layout.isRelativeWidth();
+ int minWidth = window.getMinWidth();
+ if (needsMinWidth && lm.getInnerWidth(contentElement) < minWidth) {
// Use minimum width if less than a certain size
- window.setWidth(VWindow.MIN_CONTENT_AREA_WIDTH + "px");
+ window.setWidth(minWidth + "px");
}
- if (!window.layout.isUndefinedHeight()
- && lm.getOuterHeight(contentElement) < VWindow.MIN_CONTENT_AREA_HEIGHT) {
+ boolean needsMinHeight = !isUndefinedHeight()
+ || window.layout.isRelativeHeight();
+ int minHeight = window.getMinHeight();
+ if (needsMinHeight && lm.getInnerHeight(contentElement) < minHeight) {
// Use minimum height if less than a certain size
- window.setHeight(VWindow.MIN_CONTENT_AREA_HEIGHT + "px");
+ window.setHeight(minHeight + "px");
}
}