forked from extern/egroupware
Added new column type 'EGW_COL_TYPE_CHECKBOX'
This commit is contained in:
parent
b7304feca0
commit
dde3de5195
@ -163,6 +163,7 @@ class egw_json_object
|
|||||||
*/
|
*/
|
||||||
define("EGW_COL_TYPE_DEFAULT", 0);
|
define("EGW_COL_TYPE_DEFAULT", 0);
|
||||||
define("EGW_COL_TYPE_NAME_ICON_FIXED", 1);
|
define("EGW_COL_TYPE_NAME_ICON_FIXED", 1);
|
||||||
|
define("EGW_COL_TYPE_CHECKBOX", 2);
|
||||||
|
|
||||||
define("EGW_COL_VISIBILITY_ALWAYS", 0);
|
define("EGW_COL_VISIBILITY_ALWAYS", 0);
|
||||||
define("EGW_COL_VISIBILITY_VISIBLE", 1);
|
define("EGW_COL_VISIBILITY_VISIBLE", 1);
|
||||||
@ -211,7 +212,8 @@ class egw_grid_column extends egw_json_object
|
|||||||
|
|
||||||
public function set_visible($val)
|
public function set_visible($val)
|
||||||
{
|
{
|
||||||
if ($this->visibility != EGW_COL_VISIBILITY_ALWAYS && $this->visibility != EGW_COL_VISIBILITY_ALWAYS_NOSELECT)
|
if ($this->visibility != EGW_COL_VISIBILITY_ALWAYS &&
|
||||||
|
$this->visibility != EGW_COL_VISIBILITY_ALWAYS_NOSELECT)
|
||||||
{
|
{
|
||||||
$this->visibility = $val ? EGW_COL_VISIBILITY_VISIBLE : EGW_COL_VISIBILITY_INVISIBLE;
|
$this->visibility = $val ? EGW_COL_VISIBILITY_VISIBLE : EGW_COL_VISIBILITY_INVISIBLE;
|
||||||
}
|
}
|
||||||
|
@ -581,6 +581,7 @@ function egwActionObject(_id, _parent, _iface, _manager, _flags)
|
|||||||
this.manager = _manager;
|
this.manager = _manager;
|
||||||
this.flags = _flags;
|
this.flags = _flags;
|
||||||
this.data = null;
|
this.data = null;
|
||||||
|
this.setSelectedCallback = null;
|
||||||
|
|
||||||
this.registeredImpls = [];
|
this.registeredImpls = [];
|
||||||
|
|
||||||
@ -1118,7 +1119,7 @@ egwActionObject.prototype.setAllSelected = function(_selected, _informParent)
|
|||||||
egwActionObject.prototype.updateSelectedChildren = function(_child, _selected)
|
egwActionObject.prototype.updateSelectedChildren = function(_child, _selected)
|
||||||
{
|
{
|
||||||
var id = this.selectedChildren.indexOf(_child); // TODO Replace by binary search, insert children sorted by index!
|
var id = this.selectedChildren.indexOf(_child); // TODO Replace by binary search, insert children sorted by index!
|
||||||
var wasEmpty = this.selectedChildren.length == 0;
|
var wasEmpty = this.selectedChildren.length == 0;
|
||||||
|
|
||||||
// Add or remove the given child from the selectedChildren list
|
// Add or remove the given child from the selectedChildren list
|
||||||
if (_selected && id == -1)
|
if (_selected && id == -1)
|
||||||
@ -1136,6 +1137,11 @@ egwActionObject.prototype.updateSelectedChildren = function(_child, _selected)
|
|||||||
{
|
{
|
||||||
this.parent.updateSelectedChildren(this, wasEmpty);
|
this.parent.updateSelectedChildren(this, wasEmpty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.setSelectedCallback)
|
||||||
|
{
|
||||||
|
this.setSelectedCallback.call(this); //TODO: Not called, when non-selected elements are made visible (treeview)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,11 +38,19 @@ function egwGrid(_parentNode, _columns, _objectManager, _fetchCallback, _columnC
|
|||||||
// Create the root data element
|
// Create the root data element
|
||||||
this.dataRoot = new egwGridDataElement("", null, this.columns, this.readQueue,
|
this.dataRoot = new egwGridDataElement("", null, this.columns, this.readQueue,
|
||||||
_objectManager);
|
_objectManager);
|
||||||
|
var self = this;
|
||||||
|
this.dataRoot.actionObject.setSelectedCallback = function() {
|
||||||
|
if (self.gridOuter.checkbox)
|
||||||
|
{
|
||||||
|
self.gridOuter.checkbox.attr("checked", this.getAllSelected())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Create the outer view component and pass the dataRoot element so that
|
// Create the outer view component and pass the dataRoot element so that
|
||||||
// the grid outer element will be capable of fetching the root data and
|
// the grid outer element will be capable of fetching the root data and
|
||||||
// can create a spacer for that.
|
// can create a spacer for that.
|
||||||
this.gridOuter = new egwGridViewOuter(_parentNode, this.dataRoot, this.selectcolsClick, this);
|
this.gridOuter = new egwGridViewOuter(_parentNode, this.dataRoot,
|
||||||
|
this.selectcolsClick, this.toggleAllClick, this);
|
||||||
this.gridOuter.updateColumns(this.columns.getColumnData());
|
this.gridOuter.updateColumns(this.columns.getColumnData());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,6 +167,14 @@ egwGrid.prototype.selectcolsClick = function(_at)
|
|||||||
menu.showAt(_at.offset().left, _at.offset().top);
|
menu.showAt(_at.offset().left, _at.offset().top);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles the toggle all click
|
||||||
|
*/
|
||||||
|
egwGrid.prototype.toggleAllClick = function(_checked)
|
||||||
|
{
|
||||||
|
this.dataRoot.actionObject.toggleAllSelected(_checked);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emptys the grid
|
* Emptys the grid
|
||||||
*/
|
*/
|
||||||
|
@ -22,6 +22,7 @@ uses
|
|||||||
|
|
||||||
var EGW_COL_TYPE_DEFAULT = 0;
|
var EGW_COL_TYPE_DEFAULT = 0;
|
||||||
var EGW_COL_TYPE_NAME_ICON_FIXED = 1;
|
var EGW_COL_TYPE_NAME_ICON_FIXED = 1;
|
||||||
|
var EGW_COL_TYPE_CHECKBOX = 2;
|
||||||
|
|
||||||
var EGW_COL_VISIBILITY_ALWAYS = 0;
|
var EGW_COL_VISIBILITY_ALWAYS = 0;
|
||||||
var EGW_COL_VISIBILITY_VISIBLE = 1;
|
var EGW_COL_VISIBILITY_VISIBLE = 1;
|
||||||
@ -140,9 +141,14 @@ egwGridColumn.prototype.set_id = function(_value)
|
|||||||
egwGridColumn.prototype.set_type = function(_value)
|
egwGridColumn.prototype.set_type = function(_value)
|
||||||
{
|
{
|
||||||
if (typeof _value == "number" && (_value == EGW_COL_TYPE_DEFAULT ||
|
if (typeof _value == "number" && (_value == EGW_COL_TYPE_DEFAULT ||
|
||||||
_value == EGW_COL_TYPE_NAME_ICON_FIXED))
|
_value == EGW_COL_TYPE_NAME_ICON_FIXED || _value == EGW_COL_TYPE_CHECKBOX))
|
||||||
{
|
{
|
||||||
this.type = _value;
|
this.type = _value;
|
||||||
|
|
||||||
|
if (this.type == EGW_COL_TYPE_CHECKBOX)
|
||||||
|
{
|
||||||
|
this.set_width("30px");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -517,6 +517,21 @@ egwGridDataElement.prototype.hasColumn = function(_columnId, _returnData)
|
|||||||
res = true;
|
res = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (col.type == EGW_COL_TYPE_CHECKBOX)
|
||||||
|
{
|
||||||
|
if (!_returnData)
|
||||||
|
{
|
||||||
|
res = true; // Tell the loader that the checkbox data is always available
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var dataSet = (typeof this.data[_columnId] != "undefined");
|
||||||
|
res = {
|
||||||
|
"data": dataSet ? this.data[_columnId].data : 0,
|
||||||
|
"time": dataSet ? this.data[_columnId].time : this.capColTime
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Check whether the column data of this column has been read,
|
// Check whether the column data of this column has been read,
|
||||||
|
@ -76,7 +76,7 @@ var EGW_UNIQUE_COUNTER = 0;
|
|||||||
* @param object _data is the data-provider object which contains/loads the grid rows
|
* @param object _data is the data-provider object which contains/loads the grid rows
|
||||||
* and contains their data.
|
* and contains their data.
|
||||||
*/
|
*/
|
||||||
function egwGridViewOuter(_parentNode, _dataRoot, _selectColsCallback, _context)
|
function egwGridViewOuter(_parentNode, _dataRoot, _selectColsCallback, _toggleAllCallback, _context)
|
||||||
{
|
{
|
||||||
this.parentNode = $(_parentNode);
|
this.parentNode = $(_parentNode);
|
||||||
this.dataRoot = _dataRoot;
|
this.dataRoot = _dataRoot;
|
||||||
@ -99,10 +99,13 @@ function egwGridViewOuter(_parentNode, _dataRoot, _selectColsCallback, _context)
|
|||||||
|
|
||||||
this.visibleColumnCount = 0;
|
this.visibleColumnCount = 0;
|
||||||
|
|
||||||
|
this.checkbox = null;
|
||||||
|
|
||||||
this.uniqueId = 'grid_outer_' + EGW_UNIQUE_COUNTER;
|
this.uniqueId = 'grid_outer_' + EGW_UNIQUE_COUNTER;
|
||||||
|
|
||||||
this.headerColumns = [];
|
this.headerColumns = [];
|
||||||
this.selectColsCallback = _selectColsCallback;
|
this.selectColsCallback = _selectColsCallback;
|
||||||
|
this.toggleAllCallback = _toggleAllCallback;
|
||||||
this.context = _context;
|
this.context = _context;
|
||||||
|
|
||||||
this.buildBase();
|
this.buildBase();
|
||||||
@ -307,7 +310,25 @@ egwGridViewOuter.prototype.buildBaseHeader = function()
|
|||||||
var cont = $(document.createElement("div"));
|
var cont = $(document.createElement("div"));
|
||||||
cont.addClass("innerContainer");
|
cont.addClass("innerContainer");
|
||||||
cont.addClass(col.divClass);
|
cont.addClass(col.divClass);
|
||||||
cont.html(col.caption);
|
|
||||||
|
if (col.type == EGW_COL_TYPE_CHECKBOX)
|
||||||
|
{
|
||||||
|
this.checkbox = $(document.createElement("input"));
|
||||||
|
this.checkbox.attr("type", "checkbox");
|
||||||
|
this.checkbox.change(this, function(e) {
|
||||||
|
// Call the toggle all callback
|
||||||
|
if (e.data.toggleAllCallback)
|
||||||
|
{
|
||||||
|
e.data.toggleAllCallback.call(e.data.context, $(this).is(":checked"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
cont.append(this.checkbox);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cont.html(col.caption);
|
||||||
|
}
|
||||||
|
|
||||||
column.append(cont);
|
column.append(cont);
|
||||||
this.outer_head_tr.append(column);
|
this.outer_head_tr.append(column);
|
||||||
@ -1289,6 +1310,7 @@ function egwGridViewRow(_grid, _heightChangeProc, _item)
|
|||||||
container.aoiSetup = egwGridViewRow_aoiSetup;
|
container.aoiSetup = egwGridViewRow_aoiSetup;
|
||||||
container.getAOI = egwGridViewRow_getAOI;
|
container.getAOI = egwGridViewRow_getAOI;
|
||||||
container._columnClick = egwGridViewRow__columnClick;
|
container._columnClick = egwGridViewRow__columnClick;
|
||||||
|
container._checkboxClick = egwGridViewRow__checkboxClick;
|
||||||
container.setOpen = egwGridViewRow_setOpen;
|
container.setOpen = egwGridViewRow_setOpen;
|
||||||
container.reloadChildren = egwGridViewRow_reloadChildren;
|
container.reloadChildren = egwGridViewRow_reloadChildren;
|
||||||
container.tdObjects = [];
|
container.tdObjects = [];
|
||||||
@ -1296,6 +1318,7 @@ function egwGridViewRow(_grid, _heightChangeProc, _item)
|
|||||||
container.childGrid = null;
|
container.childGrid = null;
|
||||||
container.opened = false;
|
container.opened = false;
|
||||||
container.rowClass = "";
|
container.rowClass = "";
|
||||||
|
container.checkbox = null;
|
||||||
|
|
||||||
// Overwrite the inherited abstract functions
|
// Overwrite the inherited abstract functions
|
||||||
container.doInsertIntoDOM = egwGridViewRow_doInsertIntoDOM;
|
container.doInsertIntoDOM = egwGridViewRow_doInsertIntoDOM;
|
||||||
@ -1325,10 +1348,16 @@ function egwGridViewRow_aoiSetState(_state, _shiftState)
|
|||||||
{
|
{
|
||||||
if (this.row.parentNode)
|
if (this.row.parentNode)
|
||||||
{
|
{
|
||||||
this.row.parentNode.toggleClass("selected", egwBitIsSet(_state,
|
var selected = egwBitIsSet(_state, EGW_AO_STATE_SELECTED);
|
||||||
EGW_AO_STATE_SELECTED));
|
this.row.parentNode.toggleClass("selected", selected);
|
||||||
this.row.parentNode.toggleClass("focused", egwBitIsSet(_state,
|
this.row.parentNode.toggleClass("focused", egwBitIsSet(_state,
|
||||||
EGW_AO_STATE_FOCUSED));
|
EGW_AO_STATE_FOCUSED));
|
||||||
|
|
||||||
|
// Set the checkbox checked-state with the selected state
|
||||||
|
if (this.row.checkbox)
|
||||||
|
{
|
||||||
|
this.row.checkbox.attr("checked", selected);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1368,6 +1397,14 @@ function egwGridViewRow__columnClick(_shiftState, _column)
|
|||||||
_shiftState);
|
_shiftState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function egwGridViewRow__checkboxClick()
|
||||||
|
{
|
||||||
|
this.aoi.updateState(EGW_AO_STATE_SELECTED, this.checkbox.is(":checked"),
|
||||||
|
EGW_AO_SHIFT_STATE_MULTI);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
var
|
var
|
||||||
EGW_GRID_VIEW_ROW_BORDER = false;
|
EGW_GRID_VIEW_ROW_BORDER = false;
|
||||||
|
|
||||||
@ -1398,10 +1435,29 @@ function egwGridViewRow_doInsertIntoDOM()
|
|||||||
|
|
||||||
// Assign the click event to the column
|
// Assign the click event to the column
|
||||||
// td.mousedown(egwPreventSelect);
|
// td.mousedown(egwPreventSelect);
|
||||||
td.click({"item": this, "col": col.id}, function(e) {
|
if (col.type == EGW_COL_TYPE_CHECKBOX)
|
||||||
// this.onselectstart = null;
|
{
|
||||||
e.data.item._columnClick(egwGetShiftState(e), e.data.col);
|
this.checkbox = $(document.createElement("input"));
|
||||||
});
|
this.checkbox.attr("type", "checkbox");
|
||||||
|
this.checkbox.attr("checked", egwBitIsSet(this.aoi.getState(),
|
||||||
|
EGW_AO_STATE_SELECTED));
|
||||||
|
this.checkbox.change(this, function(e) {
|
||||||
|
e.data._checkboxClick();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
cont.append(this.checkbox);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
td.click({"item": this, "col": col.id}, function(e) {
|
||||||
|
// this.onselectstart = null;
|
||||||
|
if (!e.data.item.checkbox || this != e.data.item.checkbox.context)
|
||||||
|
{
|
||||||
|
e.data.item._columnClick(egwGetShiftState(e), e.data.col);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
td.append(cont);
|
td.append(cont);
|
||||||
|
|
||||||
@ -1468,10 +1524,9 @@ function egwGridViewRow_doUpdateData(_immediate)
|
|||||||
// Update the timestamp
|
// Update the timestamp
|
||||||
this.tdObjects[i].ts = data[col.id].time;
|
this.tdObjects[i].ts = data[col.id].time;
|
||||||
|
|
||||||
cont.empty();
|
|
||||||
|
|
||||||
if (col.type == EGW_COL_TYPE_NAME_ICON_FIXED)
|
if (col.type == EGW_COL_TYPE_NAME_ICON_FIXED)
|
||||||
{
|
{
|
||||||
|
cont.empty();
|
||||||
// Insert the indentation spacer
|
// Insert the indentation spacer
|
||||||
var depth = this.item.getDepth() - 1;
|
var depth = this.item.getDepth() - 1;
|
||||||
if (depth > 0)
|
if (depth > 0)
|
||||||
@ -1567,8 +1622,16 @@ function egwGridViewRow_doUpdateData(_immediate)
|
|||||||
cont.append(caption);
|
cont.append(caption);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (col.type == EGW_COL_TYPE_CHECKBOX)
|
||||||
|
{
|
||||||
|
this.checkbox.attr("checked",
|
||||||
|
(data[col.id].data == 0) ?
|
||||||
|
egwBitIsSet(this.aoi.getState(), EGW_AO_STATE_SELECTED) :
|
||||||
|
data[col.id].data);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
cont.empty();
|
||||||
cont.html(data[col.id].data);
|
cont.html(data[col.id].data);
|
||||||
}
|
}
|
||||||
cont.toggleClass("queued", false);
|
cont.toggleClass("queued", false);
|
||||||
|
Loading…
Reference in New Issue
Block a user