UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

265 lines (211 loc) 5.83 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2009 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Fabian Jakobs (fjakobs) ************************************************************************ */ qx.Class.define("qx.test.ui.layout.LayoutItem", { extend: qx.ui.core.LayoutItem, construct(width, height) { super(); if (width !== undefined) { this.setWidth(width); } if (height !== undefined) { this.setHeight(height); } this.bounds = {}; }, properties: { visibility: { check: ["visible", "hidden", "excluded"], init: "visible", apply: "_applyVisibility", event: "changeVisibility" } }, members: { bounds: null, __layout: null, __children: null, renderLayout(left, top, width, height) { var changes = super.renderLayout(left, top, width, height); if (!changes) { return; } this.bounds = { left: left, top: top, width: width, height: height }; if (changes.size || changes.local || changes.margin) { if (this.__layout && this.getLayoutChildren().length > 0) { this.__layout.renderLayout(width, height, { top: 0, right: 0, bottom: 0, left: 0 }); } } return changes; }, setLayout(layout) { layout.connectToWidget(this); qx.ui.core.queue.Layout.add(this); this.__layout = layout; }, _getLayout() { return this.__layout; }, // overridden invalidateLayoutCache() { super.invalidateLayoutCache(); if (this.__layout) { this.__layout.invalidateLayoutCache(); } }, invalidateLayoutChildren() { var layout = this.__layout; if (layout) { layout.invalidateChildrenCache(); } qx.ui.core.queue.Layout.add(this); }, // property apply _applyVisibility(value, old) { // only force a layout update if visibility change from/to "exclude" var parent = this.$$parent; if ( parent && (old == null || value == null || old === "excluded" || value === "excluded") ) { parent.invalidateLayoutChildren(); } // Update visibility cache qx.ui.core.queue.Visibility.add(this); }, _getContentHint() { if (this.__layout && this.getLayoutChildren().length > 0) { return this.__layout.getSizeHint(); } else { return { width: 0, height: 0 }; } }, // overridden _computeSizeHint() { // Start with the user defined values var width = this.getWidth(); var minWidth = this.getMinWidth(); var maxWidth = this.getMaxWidth(); var height = this.getHeight(); var minHeight = this.getMinHeight(); var maxHeight = this.getMaxHeight(); // Ask content var contentHint = this._getContentHint(); if (width == null) { width = contentHint.width; } if (height == null) { height = contentHint.height; } if (minWidth == null) { if (contentHint.minWidth != null) { minWidth = contentHint.minWidth; } } if (minHeight == null) { if (contentHint.minHeight != null) { minHeight = contentHint.minHeight; } } if (maxWidth == null) { if (contentHint.maxWidth == null) { maxWidth = Infinity; } else { maxWidth = contentHint.maxWidth; } } if (maxHeight == null) { if (contentHint.maxHeight == null) { maxHeight = Infinity; } else { maxHeight = contentHint.maxHeight; } } return { width: width, minWidth: minWidth, maxWidth: maxWidth, height: height, minHeight: minHeight, maxHeight: maxHeight }; }, add(child, options) { if (!this.__children) { this.__children = []; } this.__children.push(child); this.__layout.invalidateChildrenCache(); if (options) { child.setLayoutProperties(options); } else { this.updateLayoutProperties(); } child.setLayoutParent(this); qx.ui.core.queue.Layout.add(this); }, remove(child) { if (!this.__children) { this.__children = []; } qx.lang.Array.remove(this.__children, child); // Clear parent connection child.setLayoutParent(null); // clear the layout's children cache if (this.__layout) { this.__layout.invalidateChildrenCache(); } // Add to layout queue qx.ui.core.queue.Layout.add(this); }, getLayoutChildren() { var children = this.__children || []; var layoutChildren = []; for (var i = 0; i < children.length; i++) { var child = children[i]; if (child.getVisibility() !== "excluded") { layoutChildren.push(child); } } return layoutChildren; }, checkAppearanceNeeds() {}, // copied from qx.ui.core.Widget addChildrenToQueue(queue) { var children = this.__children; if (!children) { return; } var child; for (var i = 0, l = children.length; i < l; i++) { child = children[i]; queue.push(child); child.addChildrenToQueue(queue); } } }, destruct() { this.bounds = this.__layout = this.__children = null; } });