/**
|
|
* @constructor Group
|
|
* @param {GroupSet} parent
|
|
* @param {Number | String} groupId
|
|
* @param {Object} [options] Options to set initial property values
|
|
* // TODO: describe available options
|
|
* @extends Component
|
|
*/
|
|
function Group (parent, groupId, options) {
|
|
this.id = util.randomUUID();
|
|
this.parent = parent;
|
|
|
|
this.groupId = groupId;
|
|
this.itemsData = null; // DataSet
|
|
this.items = null; // ItemSet
|
|
this.options = Object.create(parent && parent.options || null);
|
|
this.options.top = 0;
|
|
|
|
this.top = 0;
|
|
this.left = 0;
|
|
this.width = 0;
|
|
this.height = 0;
|
|
|
|
this.setOptions(options);
|
|
}
|
|
|
|
Group.prototype = new Component();
|
|
|
|
Group.prototype.setOptions = function setOptions(options) {
|
|
if (options) {
|
|
util.extend(this.options, options);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Get the container element of the panel, which can be used by a child to
|
|
* add its own widgets.
|
|
* @returns {HTMLElement} container
|
|
*/
|
|
Group.prototype.getContainer = function () {
|
|
return this.parent.getContainer();
|
|
};
|
|
|
|
/**
|
|
* Set item set for the group. The group will create a view on the itemset,
|
|
* filtered by the groups id.
|
|
* @param {DataSet | DataView} items
|
|
*/
|
|
Group.prototype.setItems = function setItems(items) {
|
|
if (this.items) {
|
|
// remove current item set
|
|
this.items.hide();
|
|
this.items.setItems();
|
|
|
|
this.parent.controller.remove(this.items);
|
|
}
|
|
|
|
if (items || true) {
|
|
var groupId = this.groupId;
|
|
|
|
this.items = new ItemSet(this);
|
|
this.items.setRange(this.parent.range);
|
|
|
|
this.view = new DataView(items, {
|
|
filter: function (item) {
|
|
return item.group == groupId;
|
|
}
|
|
});
|
|
this.items.setItems(this.view);
|
|
|
|
this.parent.controller.add(this.items);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Repaint the item
|
|
* @return {Boolean} changed
|
|
*/
|
|
Group.prototype.repaint = function repaint() {
|
|
return false;
|
|
};
|
|
|
|
/**
|
|
* Reflow the item
|
|
* @return {Boolean} resized
|
|
*/
|
|
Group.prototype.reflow = function reflow() {
|
|
var changed = 0,
|
|
update = util.updateProperty;
|
|
|
|
changed += update(this, 'top', this.items ? this.items.top : 0);
|
|
changed += update(this, 'height', this.items ? this.items.height : 0);
|
|
|
|
return (changed > 0);
|
|
};
|