code: function ForceFillColumnWidths(allColumns, expectedWidth, startIdx){
    var contentWidth = 0,
        columnsToResize = startIdx > -1 ?
          allColumns.slice(startIdx, allColumns.length).filter((c) => { return c.canAutoResize }) :
          allColumns.filter((c) => { return c.canAutoResize });
  
    allColumns.forEach((c) => {
      if(!c.canAutoResize){
        contentWidth += c.width;
      } else {
        contentWidth += (c.$$oldWidth || c.width);
      }
    });
  
    var remainingWidth = expectedWidth - contentWidth,
        additionWidthPerColumn = remainingWidth / columnsToResize.length,
        exceedsWindow = contentWidth > expectedWidth;
  
    columnsToResize.forEach((column) => {
      if(exceedsWindow){
        column.width = column.$$oldWidth || column.width;
      } else {
        if(!column.$$oldWidth){
          column.$$oldWidth = column.width;
        }
  
        var newSize = column.$$oldWidth + additionWidthPerColumn;
        if(column.minWith && newSize < column.minWidth){
          column.width = column.minWidth;
        } else if(column.maxWidth && newSize > column.maxWidth){
          column.width = column.maxWidth;
        } else {
          column.width = newSize;
        }
      }
    });
  }
docs: Forces the width of the columns to
  distribute equally but overflowing when nesc.
  
  Rules:
  
  - If combined withs are less than the total width of the grid,
  proporation the widths given the min / max / noraml widths to fill the width.
  
  - If the combined widths, exceed the total width of the grid,
  use the standard widths.
  
  - If a column is resized, it should always use that width
  
  - The proporational widths should never fall below min size if specified.
  
  - If the grid starts off small but then becomes greater than the size ( + / - )
  the width should use the orginial width; not the newly proporatied widths.
  
  @param {array} allColumns
  @param {int} expectedWidth