@eclipse-scout/core
Version:
Eclipse Scout runtime
92 lines (74 loc) • 2.64 kB
text/typescript
/*
* Copyright (c) 2010, 2025 BSI Business Systems Integration AG
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*/
import {aria, arrays, HtmlComponent, Menu, MenuBarBoxEventMap, MenuBarBoxLayout, MenuBarBoxModel, ObjectIdProvider, ObjectOrChildModel, TooltipPosition, Widget} from '../../index';
export class MenuBarBox extends Widget implements MenuBarBoxModel {
declare model: MenuBarBoxModel;
declare eventMap: MenuBarBoxEventMap;
declare self: MenuBarBox;
menuItems: Menu[];
tooltipPosition: TooltipPosition;
constructor() {
super();
this.menuItems = [];
this.tooltipPosition = 'top';
this._addWidgetProperties('menuItems');
}
protected override _render() {
this.$container = this.$parent.appendDiv('menubar-box');
aria.role(this.$container, 'none'); // ignore this container, the menubar containing the menubarboxes is the menubar
this.htmlComp = HtmlComponent.install(this.$container, this.session);
this.htmlComp.setLayout(new MenuBarBoxLayout(this));
}
protected override _renderProperties() {
super._renderProperties();
this._renderMenuItems();
}
protected override _remove() {
this._removeMenuItems();
super._remove();
}
setMenuItems(menuOrModels: ObjectOrChildModel<Menu> | ObjectOrChildModel<Menu>[]) {
let menuItems = arrays.ensure(menuOrModels);
if (!arrays.equals(this.menuItems, menuItems)) {
this.setProperty('menuItems', menuItems);
}
}
protected _setMenuItems(menuItems: Menu[]) {
this._setProperty('menuItems', menuItems);
this._updateTooltipPosition();
}
protected _removeMenuItems() {
this.menuItems.forEach(item => item.remove());
}
protected _renderMenuItems() {
this.menuItems.forEach(item => {
item.render(this.$container);
item.$container.addClass('menubar-item');
});
if (!this.rendering) {
this.invalidateLayoutTree();
}
}
protected override _renderVisible() {
super._renderVisible();
this.revalidateLayout();
}
setTooltipPosition(position: TooltipPosition) {
this.setProperty('tooltipPosition', position);
}
protected _setTooltipPosition(position: TooltipPosition) {
this._setProperty('tooltipPosition', position);
this._updateTooltipPosition();
}
protected _updateTooltipPosition() {
this.menuItems.forEach(item => item.setTooltipPosition(this.tooltipPosition));
}
}
ObjectIdProvider.uuidPathSkipWidgets.add(MenuBarBox);