summaryrefslogtreecommitdiff
path: root/webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/ResizeTableColumnModel.js
diff options
context:
space:
mode:
authorDerrell Lipman <derrell@samba.org>2007-02-11 20:22:45 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:44:59 -0500
commit7deea1aead01beabde1218379b72dd20f64f93ce (patch)
treee23a057f604558f7a6c9d4267bbf39ef7cf9f8ea /webapps/qooxdoo-0.6.5-sdk/frontend/framework/source/class/qx/ui/table/ResizeTableColumnModel.js
parent9bdb49455aa6ad38f71375f602e691d2b7765d04 (diff)
downloadsamba-7deea1aead01beabde1218379b72dd20f64f93ce.tar.gz
samba-7deea1aead01beabde1218379b72dd20f64f93ce.tar.bz2
samba-7deea1aead01beabde1218379b72dd20f64f93ce.zip
r21285: - Add the new ResizeTableColumnModel and make use of it in TreeVirtual. This
allows the Ldb Browser tree to properly size itself upon initially appearing and upon window resizes. There are still a few problems with it that I need to resolve, including an occasional set of double scrollbars, and making it resize the tree column when the splitter is resized. (This used to be commit c3c93ad36a9e850865aa8b09e319a77441243b01)
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;
+};
+