@qooxdoo/framework
Version:
The JS Framework for Coders
197 lines (165 loc) • 6.33 kB
JavaScript
/*
* Demonstrate use of multiple columns in a tree, and the use of the
* getHierarchy() method to retrieve the entire tree path of a node.
* Allows various options to be manipulated.
*/
qx.Class.define("qxl.demobrowser.demo.treevirtual.TreeVirtual_Multiple_Columns",
{
extend : qx.application.Standalone,
members :
{
main : function()
{
this.base(arguments);
// We want to use some of the high-level node operation convenience
// methods rather than manually digging into the TreeVirtual helper
// classes. Include the mixin that provides them.
qx.Class.include(qx.ui.treevirtual.TreeVirtual,
qx.ui.treevirtual.MNode);
// Use an HBox to hold the tree and the groupbox
var hBox = new qx.ui.container.Composite(new qx.ui.layout.HBox(20));
this.getRoot().add(hBox, { edge : 30 });
// tree
var tree = new qx.ui.treevirtual.TreeVirtual(
[
"Tree",
"Permissions",
"Last Accessed"
]);
tree.set(
{
width : 400
});
tree.setAlwaysShowOpenCloseSymbol(true);
// Obtain the resize behavior object to manipulate
var resizeBehavior = tree.getTableColumnModel().getBehavior();
// Ensure that the tree column remains sufficiently wide
resizeBehavior.set(0, { width:"1*", minWidth:180 });
hBox.add(tree);
// tree data model
var dataModel = tree.getDataModel();
var te1 = dataModel.addBranch(null, "Desktop", true);
tree.nodeSetLabelStyle(te1,
"background-color: red; " +
"color: white;" +
"font-weight: bold;");
var te1_1;
dataModel.addBranch(te1, "Files", true);
te1_1 = dataModel.addBranch(te1, "Workspace", true);
var te = dataModel.addLeaf(te1_1, "Windows (C:)");
dataModel.setColumnData(te, 1, "-rwxr-xr-x");
dataModel.setColumnData(te, 2, "2007-01-30 22:54:03");
te = dataModel.addLeaf(te1_1, "Documents (D:)");
dataModel.setColumnData(te, 1, "-rwxr-xr-x");
dataModel.setColumnData(te, 2, "2007-01-30 22:54:03");
dataModel.addBranch(te1, "Network", true);
te = dataModel.addBranch(te1, "Trash", true);
tree.nodeSetCellStyle(te, "background-color: cyan;");
var te2 = dataModel.addBranch(null, "Inbox", true);
te = dataModel.addBranch(te2, "Spam", false);
for (var i = 1; i < 3000; i++)
{
dataModel.addLeaf(te, "Spam Message #" + i);
}
dataModel.addBranch(te2, "Sent", false);
dataModel.addBranch(te2, "Trash", false);
dataModel.addBranch(te2, "Data", false);
dataModel.addBranch(te2, "Edit", false);
dataModel.setData();
var commandFrame = new qx.ui.groupbox.GroupBox("Control");
commandFrame.setLayout(new qx.ui.layout.VBox(8));
hBox.add(commandFrame);
var o = new qx.ui.basic.Atom("Current Selection: ");
commandFrame.add(o);
o = new qx.ui.form.TextField();
o.set({ readOnly: true });
commandFrame.add(o);
tree.addListener(
"changeSelection",
function(e)
{
// Get the list of selected nodes. We're in single-selection mode,
// so there will be only one of them.
var nodes = e.getData();
this.setValue(tree.getHierarchy(nodes[0].nodeId).join('/'));
buttonRemove.setEnabled(true);
},
o);
var buttonRemove = new qx.ui.form.Button("Remove");
buttonRemove.set({ enabled: false });
commandFrame.add(buttonRemove);
buttonRemove.addListener(
"execute",
function(e)
{
var selectedNodes = tree.getSelectedNodes();
for (var i = 0; i < selectedNodes.length; i++)
{
dataModel.prune(selectedNodes[i].nodeId, true);
dataModel.setData();
}
});
o = new qx.ui.form.CheckBox("Use tree lines if theme supports them?");
o.set({ value: true });
commandFrame.add(o);
o.addListener("changeValue",
function(e)
{
tree.setUseTreeLines(e.getData());
});
o = new qx.ui.form.CheckBox("Exclude first-level tree lines?");
o.set({ value: false });
commandFrame.add(o);
o.addListener("changeValue",
function(e)
{
tree.setExcludeFirstLevelTreeLines(e.getData());
});
o = new qx.ui.form.CheckBox("Always show open/close symbol?");
o.set({ value: true });
commandFrame.add(o);
o.addListener("changeValue",
function(e)
{
tree.setAlwaysShowOpenCloseSymbol(e.getData());
});
o = new qx.ui.form.CheckBox("Remove open/close if found empty?");
o.set({ value: true });
commandFrame.add(o);
tree.addListener("treeOpenWhileEmpty",
function(e)
{
if (this.getValue())
{
var node = e.getData();
tree.nodeSetHideOpenClose(node, true);
}
},
o);
o = new qx.ui.form.CheckBox("Open/close click selects row?");
o.set({ value: false });
commandFrame.add(o);
o.addListener("changeValue",
function(e)
{
tree.setOpenCloseClickSelectsRow(e.getData());
});
o = new qx.ui.form.CheckBox("Disable the tree?");
o.set({ value: false });
commandFrame.add(o);
o.addListener("changeValue",
function(e)
{
tree.setEnabled(! e.getData());
});
o = new qx.ui.form.CheckBox("Show column visibilty menu");
o.set({ value: true });
commandFrame.add(o);
o.addListener("changeValue",
function(e)
{
tree.setColumnVisibilityButtonVisible(e.getData());
});
}
}
});