define([], function() {
"use strict";
// todo может быть можно унаследовать от IPlugin?
// todo а почему это класс, а не модуль?
/**
* @class
* Менеджер управлений панелью.
* @constructor ControlManager
*/
function ControlManager() {
this._controls = {};
}
/**
* Добавляет экземпляр управления панелью к общему набору экземпляров, которыми можно управлять панелью.
* @param {string} id - название экземпляра управления панелью
* @param {IControl} control - добавляемый экземпляр управления панелью
* @param {boolean} [doEnable] - включать управление панелью при добавлении
* @returns {ControlManager} менеджер управления панелью
* @memberOf ControlManager
*/
ControlManager.prototype.add = function(id, control, doEnable) {
if (this._controls.hasOwnProperty(id)) {
console.log('ControlManager - add - control already exists: ' + id);
} else {
this._controls[id] = control;
if (doEnable) {
this.enable(id);
}
}
return this;
};
/**
* Удаляет экземпляр управления панелью из общего набора экземпляров
* @param {string} id - название экземпляра управления панелью
* @returns {ControlManager} менеджер управления панелью
* @memberOf ControlManager
*/
ControlManager.prototype.remove = function(id) {
if (this._controls.hasOwnProperty(id)) {
delete this._controls[id];
} else {
console.log('ControlManager - remove - control not found: ' + id);
}
return this;
};
/**
* Возвращает флаг, является ли экземпляр управления включенным.
* @param {string} id - название экземпляра
* @returns {boolean|null} - true если включен, false если выключен, null если не найден
* @memberOf ControlManager
*/
ControlManager.prototype.isEnable = function(id) {
if (this._controls.hasOwnProperty(id)) {
return this._controls[id].isEnable();
} else {
//todo выводить как-то иначе
console.log('ControlManager - isEnable - control not found: ' + id);
}
return null;
};
/**
* Включить экземпляр управления панелью.
* @param {string} id - название экземпляра
* @returns {ControlManager} менеджер управления панелью
* @memberOf ControlManager
*/
ControlManager.prototype.enable = function(id) {
if (this._controls.hasOwnProperty(id)) {
this._controls[id].enable();
} else {
console.log('ControlManager - enable - control not found: ' + id);
}
return this;
};
/**
* Выключить экземпляр управления панелью.
* @param {string} id - название экземпляра
* @returns {ControlManager} менеджер управления панелью
* @memberOf ControlManager
*/
ControlManager.prototype.disable = function(id) {
if (this._controls.hasOwnProperty(id)) {
this._controls[id].disable();
} else {
console.log('ControlManager - disable - control not found: ' + id);
}
return this;
};
ControlManager.prototype._doAll = function(isEnable) {
var res = {};
for (var id in this._controls) {
if (this._controls.hasOwnProperty(id)) {
res[id] = this.isEnable(id);
if (isEnable) {
this.enable(id);
} else {
this.disable(id);
}
}
}
return res;
};
/**
* Выключить все экземпляры управления панелью.
* @returns {Object.<string, boolean>} Объект, сопоставляющий название экземпляра управления со значением,
* был ли этот экземпляр включен перед применением функции.
* @see {@link ControlManager#enableByValues}
* @memberOf ControlManager
*/
ControlManager.prototype.disableAll = function() {
return this._doAll(false);
};
/**
* Включить все экземпляры управления панелью.
* @returns {Object.<string, boolean>} Объект, сопоставляющий название экземпляра управления со значением,
* был ли этот экземпляр включен перед применением функции.
* @see {@link ControlManager#enableByValues}
* @memberOf ControlManager
*/
ControlManager.prototype.enableAll = function() {
return this._doAll(true);
};
/**
* Функция включения экземпляров управления панелью по маске включения
* @param {Object.<string, boolean>} values - Объект, сопоставляющий название экземпляра управления с флагом,
* включать ли данный экземпляр управления или выключать.
* @returns {ControlManager} менеджер управления панелью
* @memberOf ControlManager
*/
ControlManager.prototype.enableByValues = function(values) {
for (var id in values) {
if (values.hasOwnProperty(id)) {
if (values[id]) {
this.enable(id);
} else {
this.disable(id);
}
}
}
return this;
};
/**
* Применить конфигурацию к панели. Применяет конфигурацию к списку экземпляров управления панелью.
* @param {Moving~config} config - конфигурация
* @memberOf ControlManager
* @see {@link IControl#configure}
*/
ControlManager.prototype.configure = function(config) {
for (var name in this._controls) {
if (this._controls.hasOwnProperty(name)) {
this._controls[name].configure(config);
}
}
};
/**
* Уничтожить экземпляр ControlManager
* @memberOf ControlManager
*/
ControlManager.prototype.destroy = function() {
this.disableAll();
this._controls = null;
};
return ControlManager;
});