2018-01-16 11:34:37 +01:00
|
|
|
flectra.define('web.SystrayMenu', function (require) {
|
2018-01-16 06:58:15 +01:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
var Widget = require('web.Widget');
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The SystrayMenu is the class that manage the list of icons in the top right
|
|
|
|
* of the menu bar.
|
|
|
|
*/
|
|
|
|
var SystrayMenu = Widget.extend({
|
|
|
|
/**
|
|
|
|
* This widget renders the systray menu. It creates and renders widgets
|
|
|
|
* pushed in instance.web.SystrayItems.
|
|
|
|
*/
|
|
|
|
init: function (parent) {
|
|
|
|
this._super(parent);
|
|
|
|
this.items = [];
|
|
|
|
this.widgets = [];
|
|
|
|
this.load = $.Deferred();
|
|
|
|
},
|
|
|
|
/**
|
|
|
|
* @override
|
|
|
|
* @returns {Deferred}
|
|
|
|
*/
|
|
|
|
start: function () {
|
|
|
|
var self = this;
|
|
|
|
self._super.apply(this, arguments);
|
|
|
|
self._loadItems();
|
|
|
|
$.when.apply($, self.items).always(function () {
|
|
|
|
self.load.resolve();
|
|
|
|
});
|
|
|
|
return self.load;
|
|
|
|
},
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------
|
|
|
|
// Private
|
|
|
|
//--------------------------------------------------------------------------
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Instantiate items, using the classes located in SystrayMenu.items.
|
|
|
|
*/
|
|
|
|
_loadItems: function () {
|
|
|
|
var self = this;
|
|
|
|
SystrayMenu.Items = _.sortBy(SystrayMenu.Items, function (item) {
|
|
|
|
return !_.isUndefined(item.prototype.sequence) ? item.prototype.sequence : 50;
|
|
|
|
});
|
|
|
|
_.each(SystrayMenu.Items, function (WidgetClass) {
|
|
|
|
var cur_systray_item = new WidgetClass(self);
|
|
|
|
self.widgets.push(cur_systray_item);
|
|
|
|
self.items.push(cur_systray_item.prependTo(self.$el));
|
|
|
|
});
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
SystrayMenu.Items = [];
|
|
|
|
|
|
|
|
return SystrayMenu;
|
|
|
|
|
|
|
|
});
|
|
|
|
|