summaryrefslogtreecommitdiff
path: root/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/ResizeTableColumnModel.js
diff options
context:
space:
mode:
Diffstat (limited to 'webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/ResizeTableColumnModel.js')
-rw-r--r--webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/ResizeTableColumnModel.js228
1 files changed, 228 insertions, 0 deletions
diff --git a/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/ResizeTableColumnModel.js b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/ResizeTableColumnModel.js
new file mode 100644
index 0000000000..ec7d902e28
--- /dev/null
+++ b/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/ResizeTableColumnModel.js
@@ -0,0 +1,228 @@
+/* ************************************************************************
+
+ qooxdoo - the new era of web development
+
+ http://qooxdoo.org
+
+ Copyright:
+ 2007 Derrell Lipman
+
+ License:
+ LGPL: http://www.gnu.org/licenses/lgpl.html
+ EPL: http://www.eclipse.org/org/documents/epl-v10.php
+ See the LICENSE file in the project's top-level directory for details.
+
+ Authors:
+ * Derrell Lipman (derrell)
+
+************************************************************************ */
+
+/* ************************************************************************
+
+#module(table)
+#require(qx.ui.table.DefaultResizeBehavior)
+
+************************************************************************ */
+
+/**
+ * A table column model that automagically resizes columns based on a
+ * selected behavior.
+ *
+ * @see qx.ui.table.TableColumnModel
+ */
+qx.OO.defineClass("qx.ui.table.ResizeTableColumnModel",
+ qx.ui.table.TableColumnModel,
+function()
+{
+ qx.ui.table.TableColumnModel.call(this);
+
+ // We don't want to recursively call ourself based on our resetting of
+ // column sizes. Track when we're resizing.
+ this._bInProgress = false;
+
+ // Track when the table has appeared. We want to ignore resize events until
+ // then since we won't be able to determine the available width anyway.
+ this._bAppeared = false;
+});
+
+
+/*
+ * The behavior to use.
+ *
+ * The provided behavior must extend {link @AbstractResizeBehavior} and
+ * implement the <i>onAppear</i>, <i>onWindowResize</i>,
+ * <i>onColumnWidthChanged</i> and <i>onVisibilityChanged</i>methods.
+ */
+qx.OO.addProperty(
+ {
+ name : "behavior",
+ type : "object",
+ defaultValue : new qx.ui.table.DefaultResizeBehavior()
+ });
+
+// Behavior modifier
+qx.Proto._modifyBehavior = function(propValue, propOldValue, propData)
+{
+ // Tell the new behavior how many columns there are
+ this.getBehavior()._setNumColumns(this._columnDataArr.length);
+ return true;
+};
+
+
+/**
+ * Initializes the column model.
+ *
+ * @param colCount {Integer}
+ * The number of columns the model should have.
+ *
+ * @param table {qx.ui.table.Table}
+ * The table which this model is used for. This allows us access to other
+ * aspects of the table, as the <i>behavior</i> sees fit.
+ */
+qx.Proto.init = function(numColumns, table)
+{
+ // Call our superclass
+ qx.ui.table.TableColumnModel.prototype.init.call(this, numColumns);
+
+ // Save the table so we can get at its features, as necessary.
+ this._table = table;
+
+ // We'll do our column resizing when the table appears, ...
+ table.addEventListener("appear", this._onappear, this);
+
+ // ... when the window is resized, ...
+ var d = qx.ui.core.ClientDocument.getInstance();
+ d.addEventListener("windowresize", this._onwindowresize, this);
+
+ // ... when columns are resized, ...
+ this.addEventListener("widthChanged", this._oncolumnwidthchanged, this);
+
+ // ... and when a column visibility changes.
+ this.addEventListener("visibilityChanged", this._onvisibilitychanged, this);
+
+ // We want to manipulate the button visibility menu
+ this._table.addEventListener("columnVisibilityMenuCreateEnd",
+ this._addResetColumnWidthButton,
+ this);
+
+ // Tell the behavior how many columns there are
+ this.getBehavior()._setNumColumns(numColumns);
+};
+
+
+/**
+ * Reset the column widths to their "onappear" defaults.
+ *
+ * @param event {qx.event.type.DataEvent}
+ * The "columnVisibilityMenuCreateEnd" event indicating that the menu is
+ * being generated. The data is a map containing propeties <i>table</i> and
+ * <i>menu</i>.
+ */
+qx.Proto._addResetColumnWidthButton = function(event)
+{
+ var data = event.getData();
+ var menu = data.menu;
+ var o;
+
+ var Am = qx.manager.object.AliasManager;
+ var icon = Am.getInstance().resolvePath("icon/16/actions/view-refresh.png");
+
+ // Add a separator between the column names and our reset button
+ o= new qx.ui.menu.Separator();
+ menu.add(o);
+
+ // Add a button to reset the column widths
+ o = new qx.ui.menu.Button("Reset column widths", icon);
+ menu.add(o);
+ o.addEventListener("execute", this._onappear, this);
+};
+
+/**
+ * Event handler for the "onappear" event.
+ *
+ * @param event {qx.event.type.Event}
+ * The "onappear" event object.
+ */
+qx.Proto._onappear = function(event)
+{
+ // Is this a recursive call?
+ if (this._bInProgress)
+ {
+ // Yup. Ignore it.
+ return;
+ }
+
+ this._bInProgress = true;
+ this.debug("onappear");
+ this.getBehavior().onAppear(this, event);
+ this._bInProgress = false;
+
+ this._bAppeared = true;
+};
+
+
+/**
+ * Event handler for the "onwindowresize" event.
+ *
+ * @param event {qx.event.type.Event}
+ * The "onwidowresize" event object.
+ */
+qx.Proto._onwindowresize = function(event)
+{
+ // Is this a recursive call or has the table not yet been rendered?
+ if (this._bInProgress || ! this._bAppeared)
+ {
+ // Yup. Ignore it.
+ return;
+ }
+
+ this._bInProgress = true;
+ this.debug("onwindowresize");
+ this.getBehavior().onWindowResize(this, event);
+ this._bInProgress = false;
+};
+
+
+/**
+ * Event handler for the "oncolumnwidthchanged" event.
+ *
+ * @param event {qx.event.type.DataEvent}
+ * The "oncolumnwidthchanged" event object.
+ */
+qx.Proto._oncolumnwidthchanged = function(event)
+{
+ // Is this a recursive call or has the table not yet been rendered?
+ if (this._bInProgress || ! this._bAppeared)
+ {
+ // Yup. Ignore it.
+ return;
+ }
+
+ this._bInProgress = true;
+ this.debug("oncolumnwidthchanged");
+ this.getBehavior().onColumnWidthChanged(this, event);
+ this._bInProgress = false;
+};
+
+
+/**
+ * Event handler for the "onvisibilitychangned" event.
+ *
+ * @param event {qx.event.type.DataEvent}
+ * The "onvisibilitychanged" event object.
+ */
+qx.Proto._onvisibilitychanged = function(event)
+{
+ // Is this a recursive call or has the table not yet been rendered?
+ if (this._bInProgress || ! this._bAppeared)
+ {
+ // Yup. Ignore it.
+ return;
+ }
+
+ this._bInProgress = true;
+ this.debug("onvisibilitychanged");
+ this.getBehavior().onVisibilityChanged(this, event);
+ this._bInProgress = false;
+};
+