blob: 23524e839c643286bfadf764d415955e2df00d9a [file] [log] [blame]
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CViewModel_FlexAligner(p_viewModel, p_options) {
"use strict";
/** constructor */
var v_viewmodel = p_viewModel;
var v_options = p_options;
var v_binder;
var v_this = this;
/** public functions - interface for parent */
this.setBinder = function(p_binder) {
v_binder = p_binder;
};
/** public functions - interface for views */
this.getChildPercentages = function(p_ids) {
var total = 0;
var flexes = [];
for (var i = 0; i < p_ids.length; ++i) {
flexes.push(1);
}
var descriptors = v_viewmodel.getViewDescriptors();
for (var i = 0; i < descriptors.length; ++i) {
var index = p_ids.indexOf(descriptors[i].parentID);
if (index != -1) {
var flex = descriptors[i].customData.flex;
if (flex != undefined) {
flexes[index] = flex;
total += flex;
} else {
total += 1;
}
}
}
v_this.getChildPercentagesFromFlex(flexes, total);
return flexes;
};
this.getChildPercentagesFromFlex = function(flexes, total) {
for (var i = 0; i < flexes.length; ++i) {
flexes[i] = "" + ((flexes[i] / total) * 100) + "%";
}
};
this.getChildSizes = function(p_ids) {
var totalFlex = 0;
var totalPx = 0;
var sizes = [];
for (var i = 0; i < p_ids.length; ++i) {
sizes.push(1);
}
var descriptors = v_viewmodel.getViewDescriptors();
for (var i = 0; i < descriptors.length; ++i) {
var index = p_ids.indexOf(descriptors[i].parentID);
if (index != -1) {
var flex = descriptors[i].customData.flex;
if (flex != undefined) {
sizes[index] = flex;
if (Number.isInteger(flex)) {
totalFlex += flex;
} else {
totalPx += parseInt(flex.substring(0, flex.length - 2));
}
} else {
totalFlex += 1;
}
}
}
for (var i = 0; i < sizes.length; ++i) {
if (Number.isInteger(sizes[i])) {
sizes[i] = "calc(" + (100 * sizes[i] / totalFlex) + "% - " + totalPx + "px)";
}
}
return sizes;
};
}
CViewModel_FlexAligner.getHelp = function() {
return "A viewmodel that can calculate percentages from the flex of subviews.";
}
CViewModel_FlexAligner.providesInterface = function() {
return ["getChildPercentages", "getChildPercentagesFromFlex", "getChildSizes"];
};
CViewModel_FlexAligner.getCustomDataSchema = function() {
return {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Custom data for CViewModel_FlexAligner",
"type": "object",
"properties": {},
"additionalProperties": false
};
};
CViewModel_FlexAligner.expectsConnection = function() {
return {
"dataConnections": [],
"selectionConnections": []
};
};
//# sourceURL=CustomizableApp\ViewModels\ViewModel_FlexAligner.js