/*! * UI development toolkit for HTML5 (OpenUI5) * (c) Copyright 2009-2018 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ // Provides control sap.m.SelectionDetailsItem. sap.ui.define([ "sap/ui/core/Element", "sap/m/ListItemBase", "./library", "sap/m/Button", "sap/m/OverflowToolbar", "sap/m/ToolbarSpacer", "sap/ui/base/Interface" ], function( Element, ListItemBase, library, Button, OverflowToolbar, ToolbarSpacer, Interface ) { "use strict"; /** * @private */ var SelectionDetailsListItem = ListItemBase.extend("sap.m.SelectionDetailsListItem"); SelectionDetailsListItem.prototype.onBeforeRendering = function() { var sType; if (this._getParentElement().getEnableNav()) { sType = library.ListType.Navigation; } else { sType = library.ListType.Inactive; } this.setProperty("type", sType, true); }; /** * Constructor for a new SelectionDetailsItem. * * @param {string} [sId] Id for the new control, generated automatically if no id is given * @param {object} [mSettings] Initial settings for the new control * * @class * This protected element provides an item for {@link sap.m.SelectionDetails} that is shown inside a list. * The item includes SelectionDetailsItemLine as its lines that are displayed in one block above the optional actions. * Note:It is protected and should only be used within the framework itself. * * @extends sap.ui.core.Element * * @author SAP SE * @version 1.60.23 * * @constructor * @protected * @alias sap.m.SelectionDetailsItem * @since 1.48.0 * @ui5-metamodel This control/element also will be described in the UI5 (legacy) designtime metamodel */ var SelectionDetailsItem = Element.extend("sap.m.SelectionDetailsItem", /** @lends sap.m.SelectionDetailsItem.prototype */ { metadata : { library : "sap.m", properties : { /** * Determines whether or not the item is active and a navigation event is triggered on press. */ enableNav: { type: "boolean", defaultValue: false, group: "Behavior" } }, aggregations: { /** * Contains a record of information about, for example, measures and dimensions. * These entries are usually obtained via selection in chart controls. */ lines: { type: "sap.m.SelectionDetailsItemLine", multiple: true, bindable: "bindable" }, /** * Contains custom actions shown below the main content of the item. */ actions: { type: "sap.ui.core.Item", multiple: true }, /** * Shows custom action buttons below the main content of the item. */ _overflowToolbar: { type: "sap.m.OverflowToolbar", multiple: false, visibility : "hidden"} } } }); SelectionDetailsItem.prototype.exit = function () { if (this._oListItem) { this._oListItem.destroy(); this._oListItem = null; } }; SelectionDetailsItem.prototype._aFacadeMethods = [ "addCustomData", "getCustomData", "indexOfCustomData", "insertCustomData", "removeCustomData", "removeAllCustomData", "destroyCustomData", "data", "addEventDelegate", "removeEventDelegate", "setEnableNav", "getEnableNav", "addAction", "removeAction" ]; /** * Returns the public facade of the SelectionDetailsItem for non inner framework usages. * @returns {sap.ui.base.Interface} The reduced facade for outer framework usages. * @protected */ SelectionDetailsItem.prototype.getFacade = function() { var oFacade = new Interface(this, SelectionDetailsItem.prototype._aFacadeMethods); this.getFacade = function() { return oFacade; }; return oFacade; }; /** * Builds or changes a SelectionDetailsListItem and returns it. * @returns {sap.m.SelectionDetailsListItem} The item that has been created or changed. * @private */ SelectionDetailsItem.prototype._getListItem = function() { if (!this._oListItem) { this._oListItem = new SelectionDetailsListItem({ press: [this._onSelectionDetailsListItemPress, this] }); this._oListItem._getParentElement = function() { return this; }.bind(this); this._addOverflowToolbar(); } return this._oListItem; }; /** * Handles the press on the SelectionDetailsListItem by triggering the navigate event. * @private */ SelectionDetailsItem.prototype._onSelectionDetailsListItemPress = function() { this.fireEvent("_navigate"); }; /** * Adds OverflowToolbar to display action buttons on the item level. * @private */ SelectionDetailsItem.prototype._addOverflowToolbar = function() { var aListItemActions = this.getActions(), i, oButton; this.destroyAggregation("_overflowToolbar"); if (aListItemActions.length === 0) { return; } var oToolbar = new OverflowToolbar(this.getId() + "-action-toolbar"); this.setAggregation("_overflowToolbar", oToolbar, true); oToolbar.addAggregation("content", new ToolbarSpacer(), true); for (i = 0; i < aListItemActions.length; i++) { oButton = new Button(this.getId() + "-action-" + i, { text: aListItemActions[i].getText(), type : library.ButtonType.Transparent, enabled: aListItemActions[i].getEnabled(), press: [aListItemActions[i], this._onActionPress, this] }); oToolbar.addAggregation("content", oButton, true); } }; /** * Handles the press on the action button by triggering a private press event on the instance of SelectionDetailsItem. * @param {sap.ui.base.Event} oEvent of action press * @param {sap.ui.core.Item} oAction The item that was used in the creation of the action button. * @private */ SelectionDetailsItem.prototype._onActionPress = function(oEvent, oAction) { this.fireEvent("_actionPress", { action: oAction, items: [ this ], level: library.SelectionDetailsActionLevel.Item }); }; return SelectionDetailsItem; });